VMM TEST「建议收藏」

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 【备忘录】麦克斯韦速率分布

    【备忘录】麦克斯韦速率分布突然想做麦克斯韦速度分布的复习,找到了以前读《新概念物理学·热学》的笔记发现高中时我如何臆测不得其解的东西竟然被这一页提纲挈领的笔记就解释很清楚了如果让我给高中时的我带话帮助他迅速理解这

    2022年7月4日
  • Maven(一):安装与环境配置、使用Maven搭建web项目

    Maven(一):安装与环境配置、使用Maven搭建web项目

    2021年9月26日
  • 一种导致AbstractMethodError问题的原因

    一种导致AbstractMethodError问题的原因1)App和B-lib依赖于A-lib的不同版本,并且都实现了A-lib中定义的一个接口IFunc,运行时A-lib会调用各IFunc实现;2)B-lib仅在编译阶段依赖A-lib,实际运行的是APP中集成的A-lib;3)APP端升级了A-lib,在IFunc中新增了一个方法aNewMethod()。由于B-lib并未针对v2版本的A-lib进行适配,因此运行时当A-lib调用B-l…

    2022年5月5日
  • 良心推荐JVM性能调优工具

    良心推荐JVM性能调优工具良心推荐JVM性能调优工具该工具源于几年前关注的一个阿里大佬专做jvm性能调优,现在已经创业开发出社区版的在线性能调优!我觉得很香就推荐给大家!工具地址https://console.perfma.com/下面简单介绍社区版三个产品XXFox-Java虚拟机参数分析参数查询:查询指定JVM参数的官方定义、使用方法、默认值、专家建议参数检查:对JVM参数的用法,赋值及组合进行正确性与合理性检查参数变迁:给出JVM参数在不同配置环境下推荐取值或替代参数参数优化:全面诊断JVM参数,给出综

    2022年5月18日
  • 挖洞经验丨敏感信息泄露+IDOR+密码确认绕过=账户劫持

    挖洞经验丨敏感信息泄露+IDOR+密码确认绕过=账户劫持本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。今天分享的这篇Writeup是作者在HackerOne上某个邀请测试项目的发现,目标网站存在不安全的访问控制措施,可以利用其导致的敏感信息泄露(auth_token)+密码重置限制绕过,以越权(IDOR)方式,实现网站任意账户劫持(Takeover)。整个测试过程是一次最基本…

    2022年4月30日
  • Windows下RStudio的下载与安装教程

    Windows下RStudio的下载与安装教程一、下载与安装R注意:R是RStudio的基础,必须先安装R,再安装RStudio。因为RStudio自身并不附带R程序。R的下载与安装可见博客:Windows下安装R二、下载RStudio安装包进入RStudio下载官网:添加链接描述点击“RStudioDesktopFree”下的“DOWNLOAD”开始下载对应自己的系统,选择合适的版本(我这里选择win10),等待安装包下载完成即可。三、安装RStudio双击运行下载好的安装包点击“下一步”选择好安装目录后点击“下

    2022年6月29日

发表回复

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

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