VMM TEST「建议收藏」

VMM TEST「建议收藏」vmm_testisintroducedinvmm1.1.Toknowthevmmversionwhichyouareusing,usethiscommandvcs-R-sverilog-ntb_optsdtm        +incdir+$VMM_HOME/sv$VMM_HOME/sv/vmm_versions.svv

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
vmm_test is introduced in vmm 1.1.

To know the vmm version which you are using, use this command


vcs -R -sverilog -ntb_opts dtm


         +incdir+$VMM_HOME/sv $VMM_HOME/sv/vmm_versions.sv


vmm_test is used for compiling all the testcases in one compilation. The simulation of each testcase is done individually. Traditionally for each testcase, compile and simulation are done per testcase file. With this new approach, which dose compilation only once, will save lot of cup.


Generally each testcase can be divided into two parts.

  Procedural code part.

  The procedural code part (like passing the above new constrained transaction definition to some atomic generator, calling the env methods etc) has to be defined between these macros. vmm provides 2 macros to define testcase procedural part.

 
`vmm_test_begin
(testcase_name
,vmm_env
,
“Test Case Name String”
)

 
`vmm_test_env
(testcase_name
)

  Declarative code part.

  The declarative part( like new constrained transacting definition) is defined outside these macros.


   Writing A Testcase 

  Let us see an example of writing a testcase.


  Inside the testcase, we will define a new transaction and pass this transaction to the atomic generator.


   Declarative part:

1)   Define all the declarative code.

 
class constrained_tran
extends pcie_transaction
;

 
// Add some constraints

 
// Change some method definitions

 
end
class

2) Define a handle to the above object.

  constrained_tran c_tran_obj
;

   Procedural part:

Use a `vmm_test_begin . There are 3 arguments to macro.

VMM TEST「建议收藏」


The first argument is the name of the testcase class and will also be used as the name of the testcase in the global testcase registry.


VMM TEST「建议收藏」


The second argument is the name of the environment class that will be used to execute the testcase. A data member of that type named “env” will be defined and assigned, ready to be used.


VMM TEST「建议收藏」


The third argument is a string documenting the purpose of the test.


 
`vmm_test_begin
(test_1
,vmm_env
,
“Test_1”
)

  In this testcase, we want to pass the c_tran_obj object. The steps t pass the c_tran_obj as per the vmm_env is

  env
.build
();

  c_tran_obj
=
new
(
” “
);

  env
.atomic_gen
.randomized_obj
= c_tran_obj
;

  Start the vmm_env execution.

  env
.run
();

  Now use `vmm_test_end to define the end of the testcase. The argument to this is the testcase name.

 
`vmm_test_end
(test_1
)

Following is the full testcase source code which we discussed above
.


   Testcase source code

 

 
class constrained_tran
extends pcie_transaction
;

 
end
class

  constrained_tran c_tran_obj

`vmm_test_begin
(test_1
,vmm_env
,
“Test_1”
)

  
$display
(
” Start of Testcase :  Test_1 “
);

   env
.build
();

   c_tran_obj
=
new
(
” “
);

   env
.atomic_gen
.randomized_obj
= c_tran_obj
;

   env
.run
();

  
$display
(
” End of Testcase : Test_1 “
);


`vmm_test_end
(test_1
)

Like this you can write many testcases in separate file or single file.

   Example Of Using Vmm_test 

Now we will implement 3 simple testcases and a main testcase which will be used for selecting any one of the 3 testcases.

   testcase_1

Write this testcase in a testcase_1.sv file


// Define all the declarative code hear. I done have anything to show you.


//


//  class constrained_tran extends pcie_transaction;


//


//  end class


//


//  constrained_tran c_tran_obj

`vmm_test_begin
(test_1
,vmm_env
,
“Test_1”
)

  
$display
(
” Start of Testcase :  Test_1 “
);

  
// This is procedural part. You can call build method.

   env
.build
();

  
// You can pass the above created transaction to atomic gen.

  
// c_tran_obj = new(” “);

  
// env.atomic_gen.randomized_obj = c_tran_obj;

  
//

  
//

  

   env
.run
();

  
$display
(
” End of Testcase : Test_1 “
);


`vmm_test_end
(test_1
)

  testcase_2

Write this testcase in a testcase_2.sv file


`vmm_test_begin
(test_2
,vmm_env
,
“Test_2”
)

  
$display
(
” Start of Testcase :  Test_2 “
);

  
// Do something like this ….

   env
.build
();

  
// like this ….

   env
.run
();

  
$display
(
” End of Testcase : Test_2 “
);


`vmm_test_end
(test_2
)

  testcase_3

Write this testcase in a testcase_3.sv file


`vmm_test_begin
(test_3
,vmm_env
,
“Test_3”
)

  
$display
(
” Start of Testcase :  Test_3 “
);

  
// Do something like this ….

   env
.build
();

  
// like this ….

   env
.run
();

  
$display
(
” End of Testcase : Test_3 “
);


`vmm_test_end
(test_3
)

  main testcase

Now we will write the main testcase. This doesn’t have any test scenario, it is only used for handling the above 3 testcases.


  This should be written in program block.

1)  First include all the above testcases inside the program block.

 
`include
“testcase_1.sv”

 
`include
“testcase_2.sv”

 
`include
“testcase_3.sv”

2)  Define env class object.

  vmm_env env
=
new
();

  As I dont have a custom env class to show, I used vmm_env. You can use your custom defined env.


 


3)  In the initial block call the run() method of vmm_test_registry class and pass the above env object as argument. This run method of vmm_test_registry is a static method, so there is no need to create an object of this class.

vmm_test_registry
::run
(env
);


   Main testcase source code

`include
“vmm.sv”


program main
();

 
`include
“testcase_1.sv”

 
`include
“testcase_2.sv”

 
`include
“testcase_3.sv”

   vmm_env env
;

  

  
initial

  
begin

  
$display
(
” START OF TEST CASE “
);

   env
=
new
();

   vmm_test_registry
::run
(env
);

  
$display
(
” START OF TEST CASE “
);

  
end

  

  


endprogram


Now compile the above code using command.





vcs -sverilog main_testcase.sv +incdir+$VMM_HOME/sv

Now simulate the above compiled code.

To simulate , just do ./simv and see the log.


You can see the list of the testcases. This simulation will not ececute any testcase.

  LOG

  START OF TEST CASE


*FATAL*[FAILURE] on vmm_test_registry(class) at                    0:


    No test was selected at runtime using +vmm_test=<test>.


    Available tests are:


       0) Default : Default testcase that simply calls env::run()


       1) test_1  : Test_1


       2) test_2  : Test_2


       3) test_3  : Test_3


To run testcase_1 use ./simv +vmm_test=test_1

  LOG

   START OF TEST CASE


Normal[NOTE] on vmm_test_registry(class) at                    0:


    Running test “test_1″…


Start of Testcase :  Test_1


Simulation PASSED on /./ (/./) at                    0 (0 warnings, 0 demoted errors & 0 demoted warnings)


End of Testcase : Test_1


START OF TEST CASE


  Simillarly to run testcase_2 ./simv +vmm_test=test_2

  LOG

START OF TEST CASE


Normal[NOTE] on vmm_test_registry(class) at                    0:


    Running test “test_2″…


Start of Testcase :  Test_2


Simulation PASSED on /./ (/./) at                    0 (0 warnings, 0 demoted errors & 0 demoted warnings)


End of Testcase : Test_2


START OF TEST CASE


You can also call the Default testcase, which just calls the  env::run()

./simv +vmm_test=Default

  LOG

START OF TEST CASE


Normal[NOTE] on vmm_test_registry(class) at                    0:


    Running test “Default”…


Simulation PASSED on /./ (/./) at                    0 (0 warnings, 0 demoted errors & 0 demoted warnings)


START OF TEST CASE

 


   Download the source code

vmm_test.tar


Browse the code in vmm_test.tar


   Command to compile

   vcs -sverilog -ntb_opts dtm +incdir+$VMM_HOME/sv main_testcase.sv

   Commands to simulate testcases

  ./simv


  ./simv +vmm_test=Default


  ./simv +vmm_test=test_1


  ./simv +vmm_test=test_2


  ./simv +vmm_test=test_3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190578.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」

    java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」Java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数,也就是Java输出怎么保留两位小数?接下来郑州达内Java培训老师给大家以实例说明:Java怎么取两位小数?题目:项目中有一个小需求,两个整数相除,结果需要保留两位小数,即1.00、0.50这种数据格式。以下做法不行,因为两整数相除,小数点以后的…

    2022年7月8日
    20
  • 无法创建文件夹或文件问题的解决的方法

    无法创建文件夹或文件问题的解决的方法

    2021年12月14日
    89
  • Linux 源码编译Python 3.6[通俗易懂]

    Linux 源码编译Python 3.6

    2022年3月3日
    40
  • 失而复得的爱情「建议收藏」

    失而复得的爱情「建议收藏」 那年夏天,长江边,夕阳还有一点点余辉,欢快的蛐蛐叫个不停。他和她坐在江边的石阶上,凝视波浪起伏的江面,任晚风吹乱本已理不清的思绪。  父母的叮咛始终绕在他的耳畔:“到大学要好好学习,你是我们的骄傲。”他不想因为谈恋爱而影响学习,让父母失望。虽然,她曾为他付出了很多,同时,他也恨自己,为什么当初要接受她?而她也知道他要对她说什么。  江水是浑浊的,心是沉重的。  风起了,江里的浪一浪高过一浪,气温

    2026年1月16日
    3
  • 【Hive】NVL函数「建议收藏」

    【Hive】NVL函数「建议收藏」NVL(expr1,expr2):1、空值转换函数;2、类似于mysql-nullif(expr1,expr2),sqlserver-ifnull(expr1,expr2)。备注:1、如果expr1为NULL,返回值为expr2,否则返回expr1。2、适用于数字型、字符型和日期型,但是expr1和expr2的数据类型必须为同类型。…

    2022年7月13日
    24
  • idea激活码2021.7【2021.7最新】

    (idea激活码2021.7)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSWQi…

    2022年3月21日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号