原创 SignalTap II FPGA 调试

2010-3-5 14:03 2292 6 6 分类: FPGA/CPLD

来源:http://blog.ednchina.com/liu_xf/422851/message.aspx


FPGA调试篇(一)在Quartus下使用SignalTap II 调试FPGA





在一数控系统的项目中,需要一单片机将外部接收到的数据进行预处理后再给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


 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条