如何例化传递interface数组

在进行验证环境搭建的时候,需要通过interface连接由设计构成的静态世界(static world)和由验证环境构成的动态世界(dynamic world),其中两个世界实现的功能如下:

Static instance world:主要实现所有元件的例化、连接等,其中包括moduleinterfacecheckerprimitive等的例化,还包括设计层次的确定。在仿真开始后static world确定的结构和元件是不能被再次创建或者销毁的,直到仿真结束关闭。

Dynamic instance world:其中的元件可以在仿真进行的过程中被创建或者销毁,包括类等。

interface就是沟通静态世界和动态世界的桥梁,我们知道对于单个的interface可以使用uvm_config_dbinterface快速的传递到dynamic世界中,但是当遇到需要连接多个相同的interface(即interface数组)到环境时应该如何实现呢?实际操作过程中可能会有如下几种方式:

【方法一】将interface数组中每个interface单独进行连接

这样的方式是可行的,但是如果有几十个甚至上百个需要连接时那么我们的代码将会非常的冗长,而且非常容易因为笔误出错。


【方法二】使用generate结构generate用法可参考《Verilog系列:【2generate常用用法》)


上述代码进行编译时将会发生语法错误,generate结构是不能用于“initial begin-end”中的,可见这样直接使用generate的方式是不行的。这里之所以出现这样的问题,是因为我们对于generate使用方法存在一些误解。

IEEE1800中对于generate有如下描述:

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声明、specifyspecparam不能使用外,module中可以使用的所有元素都可以用于generate中,注意不是generate可以用于这些元素中。

generate结构会在析构(elaboration)阶段对设计进行析构,即将其中的结构进行展开连接等,其在elaboration阶段就完成了历史使命,在simulation仿真阶段已经不会被执行了。可以这样理解,在仿真前所有的电路结构必须是确定的,所以generate生成的电路仿真结构也必须在仿真开始前完成展开连接等。上例中,generate用于initial过程块中时肯定会出现错误,可以想象当initial过程块在仿真执行过程中突然出现了generate,仿真阶段是不知道如何处理的。为此,我们要对【方法二】进行适当的修改,如下面【方法三】所示。


【方法三】

(1)接口定义

(2)测试激励定义
3)TB定义
【仿真结果】 

从仿真结果可以观测到,本方法中实现了对于数个端口的连接,示例中对于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提供的文件或者文件夹的路径中使用的是“\”,所以复制过来后需要手动修改下,将“\”改为“/”。


全部评论
满满的干货啊,感谢分享
点赞 回复 分享
发布于 2022-10-01 10:04 山西

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务