拆散恩爱小情侣的代价!!!--- 参考模型集成的一个深坑

文摘   2024-11-23 21:26   北京  

来都来了

不关注一下吗


来源| 杰瑞IC验证(ID:Jerry_IC) 
|原创作者| Q哥


进行前端验证时,参考模型是动态仿真不可或缺的。


通过给RTL和参考模型施加同样的激励,然后对它们的输出进行bit-true match检查,从而确保RTL行为的正确性。

 

参考模型可能是用C/C++、Matlab、Python等语言写的,这时候就需要考虑TB和参考模型之间的接口了。


常见的做法主要两种:1.通过DPI函数  2.通过文件交互 ,各有利弊。

 

Q哥今天要说的bug,就是文件交互引发的。


本文由“壹伴编辑器”提供技术支持


如上图所示,在TB里通过Sequencer产生随机激励信号并打印激励文件,分别送给DUT和参考模型。


参考模型解析激励文件并执行后,打印结果文件。


在Scoreboard里抓取DUT的执行结果,然后解析参考模型输出的结果文件,进行比对。


这里简化了Driver和Monitor等细节,不影响问题的分析。

 

Q哥首先遇到的现象是结果比对失败。


出现这情况,当然第一时间看波形和log了。


进而发现,参考模型给的结果都是0.

 

检查了一下激励文件,正常的啊。难道是解析文件失败? 

 

好在参考模型是C语言写的,Q哥勉强还能看懂几分。


于是加上很多调试信息,开始定位参考模型文件解析部分的代码。


单独跑了很多遍,输出结果明明也正常啊,肉眼跟波形比对完全OK的啊!

 

 

Q哥又跑了几遍仿真,发现刚刚在参考模型里面加的调试信息,报出激励文件解析失败。但是打开激励文件明明又是正常的,单独跑也没问题啊。

 

 

到底是什么情况?Q哥有点抓狂了。

代码版本不对?更新版本。

......

文件路径搞错了?改个奇怪的名字试一下。

......

环境变量没设好?重新开个窗口吧。

......

工作站有问题?重启下电脑吧。

。。。。。。


 

折腾了一上午,还是没解决。Q哥不由得开始怀疑人生,怀疑今天早上是不是真的该吃豆浆油条,难道包子它不香吗??


本文由“壹伴编辑器”提供技术支持

 

吃饭不积极,脑子有问题。


吃完午饭,Q哥又开始从头检查TB,终于发现坑爹的bug了!!

 

原来Q哥一时大意,打印完激励文件,忘了关闭文件!!


如下面代码片段所示:

 


VCS等工具仿真的时候,对于文件写操作,并不是立即回写到文件里。


而是在系统内部有一个缓冲区,每当缓冲区满了,才进行一次回写文件。


如果关闭文件,也会把缓冲区剩余的内容回写到文件。

 

Q哥跑仿真的时候,上面62行的打印语句虽然执行了,但是并没有立即写入test_din.txt里。


所以66行执行参考模型的时候,得到的激励文件不正常,进而报出激励解析失败的错误。

 

但是VCS仿真结束的时候,会自动关闭所有打开的文件,这时候会把缓冲区的内容进行回写。


所以Q哥肉眼检查激励文件的时候,才会看到正常的内容。

 

想歪的面壁去

 

俗话说武功再高也怕菜刀,验证是个细心活,大多数bug都是粗心大意造成的。

 

为了避免再犯这种bug,强烈建议大家在搭建验证环境的时候,一写文件打开语句, 立刻就把文件关闭语句也写上,养成良好的代码习惯。因为人家文件打开语句和关闭语句本来就是一对恩爱的情侣!不要拆散他们,否则你一定付出代价的哦~

 


——The  End——

疯狂暗示..
处芯积律
处芯积律,而后知所至。一个芯片人的技术和行业研究分享。
 最新文章