原创 FPGA仿真篇(一)在Quartus下使用SignalTap II 调试FPGA

2010-2-8 08:49 7126 11 15 分类: FPGA/CPLD

在一数控系统的项目中,需要一单片机将外部接收到的数据进行预处理后再给FPGA进行运算。在单片机与FPGA的硬件接口中采用总线连接的方式;由于单片机总线接口的数据与地址低8位是复用的,因此FPGA需要根据单片机的总线时序模拟一个EBI的总线接口将地址和数据分离开来,才能与单片机进行正常通讯。


如下图硬件连接:


ce13a430-3afb-46ff-816d-31f5a9a74cea.JPG


为了保证模拟总线逻辑的正确性,必须监测A0A15D0D7的输出,是否与单片机端写入的值一致。


调试的方法有很多种,可以在Quartus II下新建波形文件,创建输入条件后,监测输出的波形,也可以直接用Quartus II自带的嵌入式逻辑分析仪Signal Tap II来监测引脚信号;前者是单纯的根据逻辑仿真,而后者是物理仿真,它能真实的将系统运行过程中的信号实时的通过JTAG传送到Quartus II的显示界面。


使用SignalTap II的一般流程是:设计人员在完成设计并编译工程后,建立SignalTap II (.stp)文件并加入工程、配置STP文件、编译并下载设计到FPGA、在Quartus II软件中显示被测信号的波形;在测试完毕后将该逻辑分析仪从项目中删除。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


现在我们开始介绍在Quartus II下用Signal Tap II进行调试的详细步骤。


 


首先,在你已经创建的工程下新建一个Signal Tap文件,并加入工程


f2cc6ef6-2d20-4754-b120-b9e975f34049.JPG


再设置SignalTap II 文件,如下图


点击看大图


 


 

配制完成后,再编译综合,并下载


点击运行


点击看大图


此时FPGA工作时的单片机发送程序如下:


while (1)


  {


    (*(volatile unsigned char *)0x2345)=0X43;   //0x1234地址入写0x43


(*(volatile unsigned char *)0x5812)=0X12;   //0x5812地址入写0x12


   


}


 


由上图仿真的波形可见,在WR为低电平的第一个周期Addr=0x2345,Data=0x43;在WR为低电平的第二个周期Addr=0x5812,Data=0x12;很显然,与单片机那边的发送程序是一致的。


 


有一点需要提出,由于编译器的优化问题,在添加被测信号的时候,有些你想要引出的wire或者reg不能被添加进来,这需要在代码中进行设置,告诉编译器不要将该wirereg优化。如:


wire    [7:0]       xmc_data_in /*synthesis keep*/;


wire    [7:0]       xmc_data_out /*synthesis keep*/;


wire    [15:0]      xmc_addr_out /*synthesis keep*/;  //用于测试,不优化该线网


(本来,该工程中的xmc_data_inxmc_data_outxmc_addr_out这三个线网在 Add Nodes”的 list中是显示不出来的,后来在代码中加了/*synthesis keep*/;才显示出来)


 

关于如何在Signal Tap II中添加更多的Wire和reg可参考


http://www.cnblogs.com/oomusou/archive/2008/10/17/signaltap_ii_reg_wire.html


   


 

关于STP文件分配的信号


STP文件中,可以分配下面两种类型的信号:


(1)             Pre—synthesis:该信号在对设计进行Analysis&Elaboration操作以后存在,这些信号表示寄存器传输级(RTL)信号。


(2)             Post-fitting:该信号在对设计进行物理综合优化以及布局、布线操作后存在。


当选择第一种时,在添加被测信号时,只需要增量式编译就可以了,这样省了很多时间。当然添加完被测信号后,在下载入FPGA之前,还是需要全编译一次的。


 


两种类型同时只能使用一种,


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图


红圈处不打勾时选第一种类型,红圈处打勾时选第二种类型。


 


选择好的调试方法非常重要,它能帮助设计者更快更准确的找出程序中的bug,高效的完成设计。当然在FPGA的设计过程中,需要多种方法和工具相结合来完成不同阶段的调试,熟练运用这些工具和方法非常的关键。


附件里是Quartus II 7.1下的工程代码



代码参考来源:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3353506&bbs_page_no=1&bbs_id=1029


 


本文PDF和CODE


https://static.assets-stash.eet-china.com/album/old-resources/2010/2/8/233b7fed-c913-451d-8fa6-54d3ff0dee22.rar

文章评论4条评论)

登录后参与讨论

用户377235 2016-5-20 09:40

请问你有这款板子的电路原理图么?

用户325721 2011-3-24 11:26

太好了,正在找!谢谢!

用户1278632 2010-2-19 19:50

谌误: 多谢网友smarteebit的提醒,signalTap II属于调试,不属于仿真,标题更正为“FPGA调试篇(一)在Quartus下使用SignalTap II 调试FPGA” 非常感谢大家的关注

用户1278632 2010-2-8 11:18

re:riple 没有说错 当选择第一种时只要Analysis&Elaboration或Analysis&Synthesis 就可以了,而第二种则需要全编译

ash_riple_768180695 2010-2-8 09:55

“当选择第一种时,在添加被测信号时,只需要增量式编译就可以了,这样省了很多时间。”这句话可能说反了。

tengjingshu_112148725 2009-4-13 20:40

还可以
相关推荐阅读
用户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,用来...
我要评论
4
11
关闭 站长推荐上一条 /2 下一条