原创 FPGA调试篇(二)在Modelsim下使用TestBench对设计进行仿真

2010-2-19 20:01 6190 11 13 分类: FPGA/CPLD

Signal Tap II是物理调试,它捕捉的是系统在运行过程中实实在在的信号,是最真实的。但是每次调试时,都需要综合、布局、布线、并将生成的SOF文件下载至FPGA;而这一过程往往需要一定的时间。显然,这种调试方式在需要重复次数较多的情况下,效率是很低的。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


前面提到,调试FPGA需要多种方式相结合,那么本文将介绍在Modelsim下使用Testbench对设计进行逻辑仿真。


如同 FPGA调试篇(一),本文仍然是以总线时序逻辑为例。


首先,编写激励文件,即产生单片机总线的读写时序;(仍然是在0x2345地址入写0x43,0x5812地址处写0x25)。


parameter           ADDR1 = 16'h2345,


                    ADDR2 = 16'h5812;


parameter           DAT1 = 8'h43,


                    DAT2 = 8'h25;


ebiWriteDat(ADDR1, DAT1);                      


ebiWriteDat(ADDR2, DAT2);


详细代码见符件


然后,新建modelsim工程,将激励文件和源文件加入工程,并编译;


点击看大图


 


启动仿真  Simulate-> Start Simulateion,弹出如下界面


9eb44d7a-9542-4d1f-b1e5-a4612bf0ec51.GIF


 


添加信号到WAVE窗口


 


点击看大图


 


 


运行  run 100us


查看结果


Transcript窗口的打印信息


e0c2d3c5-bf94-41f9-ab76-4c733aba32a4.GIF


 


 

Wave窗口


点击看大图


 


结果分析:


仿真文件中,首先对0x2345地址处写0x43,然后在0x5812地址处写0x2520ns后读出这两个地址处的值,比较,如果跟写入的值一样就显示Success,否则显示Error


Transcript窗口是仿真文件运行中的打印信息,很直观的表达了仿真的结果。


同样,从波形图的时序也可以来分析整个逻辑是否正确。


 


Modelsim编译速度很快,不需要像quartus那样去综合,布局布线,大大提高了调试的效率。


另:


本文中的CODETestbench是在网友Adeko的代码基础上修改得来的,特向他表示感谢,有兴趣的朋友可以参考他的一篇设计:


UARTFPGA实现过程 - 附完整的FPGAModelSimMCU代码和工程,以及实现文档


 


https://static.assets-stash.eet-china.com/album/old-resources/2010/2/8/6f4d208b-8d13-4462-a676-8b6f115bafed.rar本文PDF和代码

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1278632 2010-2-19 19:57

说得很对 SignalTap II是调试 文中不当之处也已改正 谢谢smarteebit指出的错误

songmin2_301502101 2010-2-12 21:46

SignalTap II捕捉的是实实在在的信号,已经属于调试测试范畴了,叫“仿真”不太合适吧。
相关推荐阅读
用户1278632 2011-09-15 12:49
解决FPGA配置成功,但不能初始化运行的BUG
摘要:    遇到两次FPGA配置完成,却不能正常运行的问题,一次是ALTERA的A1C3,另一次是XILINX的XC3S700A。两次都是DONE信号的问题。问题虽不大,但却很折腾人,今天在这里作下...
用户1278632 2011-09-15 12:41
Code Edit的神器UltraEdit
摘要:      我不是一个专职的程序员,但经常会要写一些单片机底层的code和hdl code,起初用UE,是因为查找和批量修改很方便,而且不会额外的生成一些“垃圾”文件;现在用UE三年多了,一直都...
用户1278632 2010-12-29 09:29
ISE与EDK联合设计报错 ERROR:NgdBuild:604 logical block
做一个很简单的测试在ISE的SCH里调用EDK的symbol,EDK的功能也很简单,就是CPU通过串品打印一串字符首先,我建一个ISE工程再建一source  sch类型,并设置为顶层,取名为top....
用户1278632 2010-12-22 14:49
EDK12.2中 mch_emc IP的时序问题
mch_emc IP可以将PLB总线时序转为inter 8080时序 下面是我用chipscope抓到的波形Mem_DQ_O_In :  数据输入 Mem_OEN:      读信号  Mem_A: ...
用户1278632 2010-12-22 14:29
xilinx FPGA的配制与应用程序引导-范例
两个Xilinx FPGA应用程序引导的范例1、run_in_flash是直接在NOR FLASH里运行程序2、spi_flash_boot是将BIT和bootloader和APP全部固化到SPI F...
用户1278632 2010-12-19 13:48
EDK下sram IP的使用
EDK软件的memory and memory controller中有一个xps multi-channel external memory controller(sram/flash)的IP,用来...
EE直播间
更多
我要评论
2
11
关闭 站长推荐上一条 /3 下一条