原创 FPGA研发之道(5)从零开始调试FPGA

2014-7-10 23:26 4473 12 20 分类: FPGA/CPLD 文集: FPGA研发之道

   “合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。”   老子《道德经》

 

     对于新手来说,如何上手调试FPGA是关键的一步。

      对于每一个新设计的FPGA板卡,也需要从零开始调试。

            那么如何开始调试?

            下面介绍一种简易的调试方法。

             (1) 至少设定一个输入时钟 input  sys_clk;

             (2) 设定输出 output [N-1:0]  led;

             (3)设定32位计数器 reg [31:0]  led_cnt;

             (4) 时钟驱动计数器开始工作

                   always@(posedge sys_clk)

                                    led_cnt <= led_cnt + 1

             (5)输出led信号。

                   assign led = led_cnt[M:N];   

          程序完成。

             (6)设定管教约束

                   如果为XILINX   FPGA ,在UCF文件中   NET “sys_clk”    LOC  = 管脚名称     

                  如果为ALTERA  FPGA ,在QSF文件中,添加  set_location_assignment  管脚名称 -to  sys_clk      

                  其他管脚,可依次类推。

             (7)编译,布局、布线,生成配置文件。

                    XILINX  生成BIT文件。

                     ALTERA 生成SOF文件

             (8)连接JTAG,下载相应的配置文件。

             (9)观察是否闪灯(肉眼可见)。

           关于闪灯的解释如下:

                assign     led = led_cnt[M:N];    led_cnt 为32bit的信号,需要几个闪灯,则根据输入时钟的频率和肉眼能够分辨的时间(100ms)。如输出时钟为25Mhz。则闪灯看见的位置能够分批到10hz。需分频2.5M= 32‘h2625A0,因此,则需要输出至少为led_cnt[21]位,才能看到闪灯。

                              

虽然程序简单,但是,通过调试可以确认:

                 (1)首先可确定JTAG下载器的正确连接,能够正常下载下载文件。如不能,常见问题包括

                                 (一)检查是否安装驱动。

                                 (二)下载器是否由红灯变成黄灯/绿灯。如红灯亮一般情况下,JTAG的与电路板VCC没有供电。

                                 (三)检查JTAG连接的线序。

                                 (四)检查JTAG电路,检查原理图上TMS,TDI,TDO的上拉和下拉电阻是否与datasheet中一致。

                            通过以上四种方式,可排除绝大部分JTAG下载的错误。

                 (2)可以判断晶振是否起振,下载后无灯闪。

                               (一)首先,示波器查看晶振频率,观察晶振的输出,如无输出,查看晶振的电源和地信号,如电源正常,而晶振无反应,则更换晶振。

                               (二)如无示波器,也有替代的方法,通过嵌入式逻辑分析仪抓信号(任意信号)。如逻辑分析仪点击采样后无反应,则无时钟输入。

                                      这是因为逻辑分析仪也需要时钟进行逻辑值的存储。

                  (3)如正常下载后闪灯,证明该FPGA板卡硬件设计上能够达到最低限度的FPGA调试状态。

      最后,说明一下,为什么是闪灯而不是亮灯的程序,这是因为,首先闪灯可以判断外部晶振工作正常,并且由于LED等通常为上拉,也就是说逻辑值0表示灯亮,而也不排除某硬件工程师非要下拉。逻辑1表示亮。因此采用闪灯更加方便。

            问题:为什么LED灯值为什么要上拉?

                       这是因为:LED上拉后,需要灯亮时电流由外部电源提供,而下拉,灯亮时电流由芯片的CMOS电路驱动。这种在设计中应避免。


PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1023201 2016-1-29 10:10

非常好的入门资料,谢谢! 我现在弄的是Lattice Machxo3l,也是刚刚弄了个流水灯,证明晶振没问题,fpga也工作,并且连接的spi flash工作也正常。

13811674212_398810906 2014-8-13 23:47

(1)对于设定的输出信号来说,其是有电平格式的如 set_instance_assignment -name IO_STANDARD LVCOMS -to pin 这种情况下,其电平格式就是LVCOMS。没有上拉或者下拉的设置(也就是说coms电平不包括上下拉电阻的设置)。但是可以设置其输出电流,如 set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to pin 板级电路上信号不到位,很多情况下,是驱动能力的问题。 也可以设置其输出端接电阻的大小(不是上下拉)。 set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to pin 以及其他属性等等 (2)对于未约束的信号时可以设定其上下拉状态的。 如: set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As input tri-stated with weak pull-up" 其他几种状态分别是 as inputs that are tristated, as outputs that drive ground, as outputs that drive an unspecified signal, asinput tri-stated with bus-hold (3)通常来说端接电阻的设置在FPGA板级设计中是非常有用的,也可以减少板级电阻的数量。

用户1731453 2014-8-12 20:30

请问一下博主,FPGA的I/O管脚的工作模式是不是可以通过QuartusII进行配置,例如像上下拉等,如果是的话具体是在哪里进行设置啊?

13811674212_398810906 2014-8-10 23:03

基本的流程能够清楚的话,那建议如下 (1)从接口设计开始,DE2板上,应该包括例如SRAM接口,FLASH接口,SDRAM接口,串口,网口等等。对于外部存储设备接口,那就是读写操作的设计,数据发送接口等就是数据的接收发送设计。 (2)循序渐进,可以和你以前开发过的流水灯的程序结合起来,举例说,可以向SRAM写入数据(M个),然后读出后进行对比,如果正确,则输出流水灯或者数码管某个状态,如果错误则可以输出另一的状态,这样循序渐进,不至于一下跨越太大,没有下手的地方。 按照上述接口从简单到复杂,分别是SRAM接口,串口,FLASH,SDRAM,网口等等。 (3)DE2上很多和NIOSII相关,可以从最小系统开始,这样不用太关注那么多外围,从而简化设计和调试的难度。 (4)遇到问题,多仿真和用signaltap抓信号。锻炼分析解决问题的能力。 (5)如果有机会,去实习,这样会接触到实际的应用,由应用的驱动来设计的内部逻辑功能,成长更快。但接口较为固定,没有应用的需求熟悉这些接口功能也是非常有裨益的。

用户440550 2014-8-10 15:38

求教: 我感觉我现在遇到瓶颈了,一些初级的流水灯,数码管之类的容易玩。但稍微高档一点的完全看不懂他们程序。我也买了特权同学的开发板,里面的例子也都走了一遍,不过还是隐隐的感觉没摸到关键点,也觉得在多看几遍也就那样。而我手上现在还有一块DE2的学习板,功能强大的没话说,不过一些官方例子真的是感觉无从下手。求教前辈能不能针对我的情况给点意见呢?

用户1690599 2014-7-27 11:38

初学习google,多读文章,多到论坛上问,多到官网上看资料还是挺重要的,或者使用板子的官网查找资料,xilinx和altera官网上都有视频资料或者文档

13811674212_398810906 2014-7-12 16:07

如果是从头开始学习的话:建议如下:(1):学习数字电路基础知识,数字电路知识还是要具备的,比如组合逻辑,时序逻辑等等。(2):学习一本verilog的书,其中关注点在于语言对数字电路的描述。(3):可以ALTERA或者XLINX的官方网站上下载EDA软件,quartus 或者ISE(VIVADO)。一般都有专门的例子,通过网站教程学习,如何将语言通过EDA工具转换成下载文件。(4):如果有条件的话,可以通过一些开发板,来开发一些小程序,如跑马灯、译码电路、串口通信等等。(5):如果是学生的话,参与相关的项目会提高较快。

用户377235 2014-7-12 09:23

要从零开始学习FPGA,有什么好的建议吗?-
相关推荐阅读
阿昏豆 2015-11-21 23:25
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现   目前,存储领域包括eMMC,SATA SSD ,PCIe SSD等控制器是一个非常热门的领域。通常,由于...
阿昏豆 2015-11-09 22:25
平行宇宙的追逐--异步FIFO控制器的设计
  平行宇宙的追逐--异步FIFO控制器的设计。    在逻辑设计中,通常会用到异步FIFO,异步FIFO控制器是经典的异步信号传输的范例,通过FIFO控制器与异步双端口RAM的组合实现数据的...
阿昏豆 2014-08-23 23:36
FPGA研发之道(25)-管脚
     管脚是FPGA重要的资源之一,FPGA的管脚分别包括,电源管脚,普通I/O,配置管脚,时钟专用输入管脚GCLK等。 (1)电源管脚:    通常来说: FPGA内部的电压包括...
阿昏豆 2014-08-10 22:22
FPGA研发之道(24)-控制(下)
   首先依次回答上篇提出的几个问题:       第一个问题:如何避免状态机产生lacth 示例如下,通过在always(*)语句块中,添加默认赋值,ns_state = cs_state; alw...
阿昏豆 2014-08-07 21:53
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
阿昏豆 2014-08-06 23:12
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
EE直播间
更多
我要评论
8
12
关闭 站长推荐上一条 /3 下一条