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,弹出如下界面
添加信号到WAVE窗口
运行 run 100us
查看结果
Transcript窗口的打印信息
Wave窗口
结果分析:
仿真文件中,首先对0x2345地址处写0x43,然后在0x5812地址处写0x25,20ns后读出这两个地址处的值,比较,如果跟写入的值一样就显示Success,否则显示Error。
Transcript窗口是仿真文件运行中的打印信息,很直观的表达了仿真的结果。
同样,从波形图的时序也可以来分析整个逻辑是否正确。
Modelsim编译速度很快,不需要像quartus那样去综合,布局布线,大大提高了调试的效率。
另:
本文中的CODE和Testbench是在网友Adeko的代码基础上修改得来的,特向他表示感谢,有兴趣的朋友可以参考他的一篇设计:
UART的FPGA实现过程 - 附完整的FPGA,ModelSim,MCU代码和工程,以及实现文档
https://static.assets-stash.eet-china.com/album/old-resources/2010/2/8/6f4d208b-8d13-4462-a676-8b6f115bafed.rar本文PDF和代码
用户1278632 2010-2-19 19:57
songmin2_301502101 2010-2-12 21:46