
加入文件到仿真后编译并运行。
储存数据 log -r /*
运行仿真 run -all

和实战1A中的图是对应的。

tb下只有一个接口,接口包含了时钟块和覆盖组。
写操作。默认的idle_cycle是1,这是在item也就是apb_transfer时进行的soft约束了
- class apb_transfer extends uvm_sequence_item;
- // USER: Add transaction fields
-
- rand bit [31:0] addr;
- rand bit [31:0] data;
- rand apb_trans_kind trans_kind;
- rand int idle_cycles;
-
- constraint cstr{
- soft idle_cycles == 1;
- };

读操作。有很多数据是0,因为随机读取的地址之前没有被写入数据,所以读出来是0

先写后读

view——coverage——covergroup
点开后可以看到,从覆盖组到覆盖点到bin的具体的覆盖率数据

具体见SV实验5。
这里用命令+TESTNAME 也不行,改了tb中的runtest也不行,只能改变tb后重新开始仿真,应该是+TESTNAME命令有问题,等找一下之前做的实验,记得是有成功过的。
单独的apb_burst_transaction_test覆盖率如下:

使用到的命令如下:
vsim -i -classdebug -solvefaildebug -coverage -coverstore C:/coverage -testname apb_burst_transaction_test -sv_seed random +TESTNAME=apb_burst_transaction_test -l apb_burst_transaction_test.log work.apb_tb
quit -sim
vsim -i -classdebug -solvefaildebug -coverage -coverstore C:/coverage -testname apb_single_transaction_test -sv_seed random +TESTNAME=apb_single_transaction_test -l apb_single_transaction_test.log work.apb_tb
qiut -sim

vcover merge -out merged-coverage.ucdb C:/coverage

各个命令的作用如下:
-classdebug 提供更多的SV类调试功能
-solvefaildebug 在SV随机化失败后有更多信息提供出来
-sv_seed 0 给出固定的种子0,random就任意给
+TESTNAME=apb_single_transaction_test 指定仿真进行的test
-l apb_single_transaction_test.log 将仿真的记录保存在这个文件名中
vcover merge -out merged-coverage.ucdb C:/coverage 将合并后的覆盖率报告生成在merged-coverage.ucdb文件中(这个文件的位置是工程路径!) C表示用来合并的覆盖率路径
储存数据 log -r /*
运行仿真直到结束 run -all
最终的覆盖率merged-coverage.ucdb中
