UVM平台的一些小问题

1、uvm_top.print_topology()函数
在test_base class的end_of_elaboration_phase中利用uvm_top.print_topology()函数打印uvm拓扑结构。
其中uvm_verbosity表明uvm打印冗余度。
2、波形文件
uvm work中生成的波形文件module_name.fsdb和利用脚本更换名字和路径后的波形文件$ {TESTCASE}_ $SEED.fsdb并不相同,前者未dump完成。
top顶层中:
initial
begin
$fsdbAutoSwitchDumpfile(1000,“module_name.fsdb”,20);
$fsdbDumpvars(0,tb_top);
$fsdbDumpflush;
end
scripts:
$RUN +fsdbfile+…/…/wave/ ${TESTCASE}_* $SEED.fsdb +fsdb+autoflush
3、将duv内部信号拉出来同输入输出比较
在记分板中可以直接将duv内部信号拉出来进行比较,此处必须要核对信号所在的完整层次,tb_top…CLK/VALID/READY/DATA。
此时记分板中的规范写法是,设置多个空的队列存储数据,并将数据的收集与比对进行分开。禁止在一个while (1) begin end内先收集数据再进行比对,防止产生时序问题。
4、打开verdi关联代码问题
直接打开verdi,载入波形后,inport design导入filelist后经常出现关联问题,可以使用脚本来实现打开verdi后自动关联代码。
将编译log文件命名为runverdi.csh,并执行chmod +x将其变为可执行文件。
打开文件,
#!/bin/env csh(设置默认解释器)
bsub -Ip -q “xxx” -P “xxx” verdi\ (设置队列)
+incdir+…/…/testbench \ (log文件中保留)
+incdir+…/…/testcase (log文件中保留)
-f …/…/duv/filelist.f(log文件中保留filelist)
…/…/testcase/pipe_test_random_item.sv\ (log文件中保留用例)
+define+
+define+ (log文件中保留宏定义)
-sv
保存文件,运行脚本即可。
5、将激励的产生和发送分开(时序问题)
全部激励产生后,在driver中设置空队列,先将item存储起来。然后控制发送条件,满足条件才将激励发送至duv,从而实现将激励的产生和发送分开。
上述带来为问题是,激励产生完后,会关闭平台,而此时全部数据真正的发送至duv并输出的过程还未实现完。因此,此种操作下需要在激励产生完后设置一段延时,来保证所有数据真正完成处理过程后才关闭平台。
6、interface中实现driver的部分功能
验证模块时,除了在上游输入valid和data激励外,下游同样需要输入ready。UVM中有output item~agent来实现,但对于一些简单处理,可以在output interface中实现。
在interface中可以定义任务和函数,使用initial、always和assign语句。直接在interface中定义ready信号的变化模式及不同模式下对应的具体操作。同时,interface中也可以完成类似8b10b编码等简单操作,此类操作一般与item完全无关的。
7、verilog的 +:用法
[BASE +: WIDTH] 代表[(BASE+WIDTH-1) : BASE],BASE是变量,WIDTH是常量。
例:
[i* P +: P], i=0, P=3时,[i*P +: P]=[2:0]。
8、verdi中查找数值
在bus value中输入数值,选中信号,直接查找。
需要注意的是数值一定要全部数值,不支持搜索部分数值。

发布了38 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45270982/article/details/103975911