【SystemVerilog项目实践】7.AHB-SRAMC(编写Systemverilog Testbench-3)

第十一步,编写Makefile

all: compile simulate dve_wave log open dve_cov

rnd_seed = $(shell data+%s)    //随机种子,随着时间的变化而不断变化
tc_num = 0                       //默认的make测试是tc_num=0

compile:                              //编译
	vcs -full64 -l comp.log -sverilog -f rtl.f -debug_pp -timescale=1ns/1ns \
		-cm line+cond+fsm+tgl \
		../tb/ahb_slv_if.sv \
		../env/transaction.sv \
		../env/generator/generator.sv \
		../env/agent/agent.sv \
		../env/driver/driver.sv \
		../env/monitor/monitor.sv \
		../env/scoreboard/scoreboard.sv \
		../env/environment.sv \
		../tests/ahb_sram_test.sv \
		../tb/ahb_sramc_svtb_top.sv

simulate:                    //生成一个./simv的文件,然后开始simulate,不同的种子产生不同的log.
	./simv -l sim_$(tc_num).log +plusargs_save \                //plusargs_save 表示rnd_seed和tc_num可以传递给后面的代码
		+ntb_random_seed=$(rnd_seed) \
		+tc_num=$(tc_num)

dve_wave:        //通过dve_wave产生波形
	dve -vpd vcdplus.vpd&

dve_cov:            //coverage产生覆盖率
	dve -full64 -covdir simv.vdb&

log:
	sed '/^[^*].*/d' sim_$(tc_num).log > rslt.log

open:        //打开gvim可以看到
	gvim rslt.log

clean:        //清除文件
	rm -rf work mti_lib transcript modelsim.ini *.log *.wlf test.ucdb 

 更多的Makefile文件可以参考这篇文章https://blog.youkuaiyun.com/weixin_38967029/article/details/125906452

第十二步,编写rtl.f文件

文件中存放的是rtl代码,可以用于添加文件目录表,一遍用于Makefile 方式的操作

../../rtl/ahb_slave_if.v
../../rtl/mbist_8kx8.v
../../rtl/RA1SH.v
../../rtl/sram_bist.v
../../rtl/sram_core.v
../../rtl/sramc_top.v

第十三步,VCS编译仿真

scoreboard部分的check部分出现较多错误

 但是观察总体读写信号,hwdata和hrdata没有发生错误,应该是scoreboard部分写的有问题,sram_gld_rdata和sram_dut_rdata的比较和数据写读放在一起,还在if的条件中,可能造成了时序上的影响,单独把check拿出来,分为start和check两个部分,重新运行。

修改后的scoreboard部分,没什么问题了,运行tc000, 显示TEST PASS

add wave之后和tc000代码比较,发现没有出入,整体上分为六个部分,先写在读,读的时候hwdata数值为0,

 hsize数值变化,改变了数值递增的大小。

功能覆盖率:haddr中只有ahddr_0被覆盖到,且次数为5999次 ,这是因为tc000是从低位开始往高位开始写,此时数6000个,haddr_0 = {[32'h0:32'h0000_1FFF]};,32'h0000_1FFF=32'd8191,所以只覆盖到haddr_0

测试案例1 :地址递减,数据固定

 测试案例2:地址递增,数据随机写入

 测试案例3:插入无效操作,写一个数据,插入一个无效操作,读也是一样。无效操作会随机化所有的transaction数据,hsel和htrans拉低。

测试案例4:写+无效周期+读+无效周期,分32、16、8三组进行。

测试案例5:地址递增,数据随递增,写读32位数据

运行tc_num=5案例的时候,会发现终端一直没有显示仿真结束时间,ctrl+c打断发现一直在运行,仿真中应该遇到错误了,结合相关代码发现32位数据时候,我们限制了haddr[1:0]==2'b00,32'd100=32'h64,所以错误发生在这里,取消或者重新编写约束c4就可以了。

测试案例6:定向用例7.遍历整个SRAM空间(写全0、全1、全5、全A)

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值