实验目标
加入文件到仿真后编译并运行。
储存数据 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的具体的覆盖率数据
如何运行两个test并且收集合并的覆盖率?
具体见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中