本文全部来自群内网友的智慧,我只是做一些整理的工作。以免高质量的内容被埋没,同时也希望这些好东西可以帮助到更多的朋友。
rx_data 位宽固定是128,bist_wdata位宽参数化
[m +: n]的含义是:从bit[m]位置向上取n bit;
[m -: n]的含义是:对应的从 bit m向下取 n bit。
下图中第65行的”==”应该写成”===”,详细的原因,请参考本公众号的文章:
verilog中==/!=和===/!==的区别
Q: 请问大家有没有什么办法可以将仿真过程中某个时刻的所有寄存器还有memory的数值全部保存下来,下次开始仿真用这些数值作为初始值?
A: Verdi nwave窗口选中信号 file-report selected signals 设置下文件名 option -of b/h/d -period 采样时间,出来的.txt在tb内$readmem就行了。保存的时刻是两个marker的位置。那个尝试了,report生成的中信号名称不全,而且如果说设计很大,寄存器数量太多重新加载也不好对应的readmem。Verdi有这个功能,apps。
A: 你加个set_addr_range在顶层ENV里面连接,然后通过config_db_set;然后在自己的组件里面get_mem就可以使用了。
example.svt 如下图所示,svt支持的所有的example都在这里了
ctrl+m增加marker,shift+m管理marker.
-coverage all -coverfile /xx/yy/zz/xyz/config.ccf
Q:请教各位,有个现象:我在seq里declare_p_sequencer为vir_seqr,接下来body里做了赋值cfg = p_sequencer.cfg;如果在test里挂载到vir_seqr,就是对的。但如果挂载到vir_seqr的子一级seqr,就报赋值语句错。如果vseqr里定义多个seqr,那必须向下挂载,该怎么办呢? 我现在就是env里声明vseqr,在vseqr里有seqr及cfg,然后就到test里seq.start(env.vseqr.seqr);感觉这样会把seqr当做p_sequencer,所以报错。但不知道多个seqr时怎么写start,或者什么结构。
A: virtual sqr相当于一个梳理器 把需要的seqr的句柄都放进去,然后你的seq需要用哪个seqr方便指向,virtual seq里面的子seq如果在不同的sqr上 做好对应关系,可以直接把virtual seq挂在virtual sqr上。挂载到ver_seqr.seqr上,此时的m_sequencer是seqr,所以p_sequencer应该也是seqr,非vseqr。对,如果p_sequencer的挂载不一致,就报cast错误。
转自芯片验证日记,感谢关注。