如何例化传递interface数组
在进行验证环境搭建的时候,需要通过interface连接由设计构成的静态世界(static world)和由验证环境构成的动态世界(dynamic world),其中两个世界实现的功能如下:
Static instance world:主要实现所有元件的例化、连接等,其中包括module、interface、checker、primitive等的例化,还包括设计层次的确定。在仿真开始后static world确定的结构和元件是不能被再次创建或者销毁的,直到仿真结束关闭。
Dynamic instance world:其中的元件可以在仿真进行的过程中被创建或者销毁,包括类等。
而interface就是沟通静态世界和动态世界的桥梁,我们知道对于单个的interface可以使用uvm_config_db将interface快速的传递到dynamic世界中,但是当遇到需要连接多个相同的interface(即interface数组)到环境时应该如何实现呢?实际操作过程中可能会有如下几种方式:
【方法二】使用generate结构(generate用法可参考《Verilog系列:【2】generate常用用法》)
上述代码进行编译时将会发生语法错误,generate结构是不能用于“initial begin-end”中的,可见这样直接使用generate的方式是不行的。这里之所以出现这样的问题,是因为我们对于generate使用方法存在一些误解。
在IEEE1800中对于generate有如下描述:
A generate block may not contain port declarations,specify,blocks,or specparam declarations.Parameters declared in generate blocks shall be treated as localparams.All other module items,including other generate constructs,are allowed in a generate block.
也就是说generate中除了port声明、specify和specparam不能使用外,module中可以使用的所有元素都可以用于generate中,注意不是generate可以用于这些元素中。
【方法三】
(1)接口定义
从仿真结果可以观测到,本方法中实现了对于数个端口的连接,示例中对于initial块整体使用了generate结构,可以保证initial在析构时已经完成了6次重复,即保证其结构和其中的内容结构是确定的,从另一个方面也说明了generate的执行处于elaboration阶段稍微靠前的阶段。
文中仿真因为是在windows下进行的基于UVM的仿真,在进入仿真界面后,在transcript窗口,cd到你的工作目录,即准备进行仿真的文件夹下,然后按照如下步骤执行即可,其中黑体部分根据各自具体情况进行修改:
set UVM_DPI_HOME D:/modeltech64_10.4/uvm-1.1d/win64
set UVM_HOME D:/modeltech64_10.4/uvm-1.1d/src
set WORK_HOME D:/work/lab
vlib work
vlog +incdir+$UVM_HOME\src +incdir+$WORK_HOME -L mtiAvm -LmtiOvm -L mtiUvm -L mtiUPF $UVM_HOME\src\uvm_pkg.sv top_tb.v
vsim -novopt -c -sv_lib $UVM_DPI_HOME\uvm_dpi top_tb +UVM_TESTNAME=test_name
注意:windows提供的文件或者文件夹的路径中使用的是“\”,所以复制过来后需要手动修改下,将“\”改为“/”。