http://www.eetop.cn/blog/html/28/1561828-5940195.html
http://www.eetop.cn/blog/html/28/1561828-6333555.html
https://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm_guidelines/detail/
MentorGraphics公司推出的UVM Framework无疑是这样一款“走心”的工具。
目前,有这样一些代码生成器可以供用户下载学习和使用。在使用的同时,请注意这些工具的licence类型,避免使用冲突:
Easier UVM Code Generator @Doulos
https://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm_generator/
VCS UVM Template Generator (uvmgen) @Synopsys
这个工具插件绑定与VCS工具,使用之前请确认你的机器是否已经安装有VCS。
VerificationWorks envBuilder @Paradigm Works
http://paradigm-works.com/products/
该公司的这个环境自动化工具前些年是免费的,然而现在看起来也要收费了。
UVM Framework @MentorGraphics
https://verificationacademy.com/sessions/dvcon-2017/testbench-automation
在每个agent里建一个package,在package里面include文件,在env里可以用import来导入package,这样看起来比较有层次
TLM是一个基于事务(transaction)的通信方式,通常在高抽象级的语言中被引用作为模块之间的通讯方式,例如SystemC或者UVM。TLM成功地将模块内的计算和模块之间的通信从时间跨度方面剥离开了。
SV语言提供了一种在多个module、interface和program之中共享parameter、data、type、task、function、class等等的方法,即利用package(包)的方式来实现。如果用上面装修一个大房子(MCDF testbench)来看的话,我们喜欢将不同模块的类定义归整到不同的package中。这么做的好处在于将同一簇相关的类组织在了单一的名字空间(namespace)下,使得分属于不同模块验证环境的类首先来自于不同的package,这样可以通过package来区别类的归属问题。
http://www.eetop.cn/blog/html/28/1561828-2316833.html
module mcdf_tb;
regs_pkg::monitor mon1 = new();
arb_pkg::monitor mon2 = new();
endmodule
如果像让你的类和方法被更多的人使用,更方便的共享,一个基本方式就是首先将它们组织到一个package中。
如果不同package中定义的类名也不相同时,在顶层的引用也可以通过“import pkg_name::*”的形式
package regs_pkg;
`include "regs_stm.sv"
`include "regs_mon.sv"
`include "regs_chk.sv"
`include "regs_env.sv"
endpackage
package arb_pkg;
`include "arb_stm.sv"
`include "arb_mon.sv"
`include "arb_chk.sv"
`include "arb_env.sv"
endpackage
module mcdf_tb;
import regs_pkg::*;
import arb_pkg::*;
regs_mon mon1= new();
arb_mon mon2 = new();
endmodule
- 用户可以在module、interface或者program中来引用package。
- 如果是”import pkg_name::*“,则代表的是该package中定义的类型可能会在module等内部有效可见。只有当module等无法在内部索引到正确地类型时,才会转而去package中去搜寻,那么此时需要注意的是,module内部不应该再有其它同名的类型定义,避免发生同名类型定义的冲突。
- import操作使得类型可见的域只是调用该import时当前的域。