FPGA设计中仿真技术解决故障的方法

时间:2011-06-01来源:网络

  ②利用.dat文件建立bug出现的条件

  用verilog语言编写仿真文件(testbench),使用语句$readmemh或$readmemb将.dat文件中的数据存储到一个设定的ram中,如:$readmemh(“s.dat”,ram)。

  注意$readmemh读取是按照十六进制数据进行(认为.dat文件中的数据都是十六进制数),会自动将其转换为4位二进制数存入ram中,所以设定的ram位宽要是.dat文件中数据位宽的4倍;使用$readmemb时,存储SignalTap所抓信号时,信号都要先设定为binary类型,ram位宽就是.dat文件数据的位宽。ram的深度为.dat文件中数据的个数。

  然后在程序里把ram中数据按照所对应时钟沿输出到一个寄存器变量中,ram地址累加即可。

  begin

  data=ram[addr];

  addr=addr+1'b1;

  end

  复现bug存在条件时,需将模块的输入信号与ram中的数据位相对应,仿真文件调用模块时,将寄存器data对应位作为输入接入即可。

  在仿真环境中复现bug波形如图5所示。

  把图5和图1进行比较,可见通过这种方法我们在仿真环境下建立了bug出错时的环境,得到相同的输出出错数据。

  ③修改程序后在仿真环境验证修改是否成功

  修改程序后,我们只要使用同样的环境进行仿真,并且有针对性的观察bug是否解决。本例中出现bug的原因是使用了异步FIFO,改成同步FIFO后,问题应该就会解决,我们可以通过仿真验证。修改程序后仿真的波形如图6所示。

  由图6可见,修改后相同的条件FIFO读出4个数,说明没有读空,符合要求,bug解决。图7为版本编译后上板使用SignalTap抓取的信号波形,以作比较。

  

  

  图5 modelsim环境下复现的出错数据

  

  图6 修改程序后相同条件下的输出数据

  

  图7 修改程序后SignalTap抓的信号

  比较后易见,波形完全相同,说明方法可行。

  总结

  文中描述的方法可针对各种的故障的解决。在故障出现时,只需定位出错的模块,这些模块内嵌一些子模块也无妨;抓信号时将故障模块的输入输出信号抓出即可;利用输入信号重建故障环境,若仿真输出信号和所抓输出信号相同,说明故障环境建立正确;用这个仿真平台就可以具体定位是哪个子模块、哪个信号出错,而不需要在SignalTap中把这些信号抓出来;并且在修改代码后可以验证是否修改成功,节省时间,很明确的证明故障真的被解决了,事半功倍。


1 2 3

关键词: FPGA 仿真技术 方法

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版