FPGA 调试经验

来源:互联网 发布:淘宝开放平台api 申请 编辑:程序博客网 时间:2024/06/05 16:59

       近期在负责一个FPGA项目,接近尾声,俗话云,行百里者半九十。本来到了这个地步本来多多少少有点沾沾自喜的,但是今晚调试了两个bug,发现差得还很远。

        1、NIOSII的2PORTSRAM IP核调试

              项目中需要用到NIOSII,其中需要NIOSII和外部进行数据交换,所以写了一个2ports RAM IP挂在了avalon MM总线上,因为之前在数据处理的各个模块中经常用到2ports RAM,自我感觉对其数据输入输出的时序还是相当低了解了,至少在VHDL设计中后来基本上没有经过调试就可以得到正确的时序。但是写IP还是第一次,特别是对于AvalonMM总线不是十分的了解,然后犯了一个错误。

        大家知道,avalon MM READ有时候是需要由延时的,这个是对于不能立即返回数据的情况。我在写IP核的时候,把RAM的address输入和时钟打了一排,然后设置的RAM的输出也延时的一个时钟周期,后来做生成IP时,没考虑到IP中address的写法,随意的延时了2个周期,结果当然是不行,因为平时的address都需要打一排的,后来不知所措,也没看书,试了1次,0次,因为当时查看signalTap直观的感觉是延时足够了,甚至有点过了,在这种比较错误的感觉下,浪费了大量的时间,其间查找了其他各个方向的问题。我记得当时不是很清楚,这个延时是怎么计算的,尤其是他给的控制信号和书上的时序不是很一样,后来凭借直觉猜了一种情况,计算得出,很可能是延时3个,于是,问题搞定。

        得到的经验,需要认真的看书,认真的分析时序,不能想当然!

          

     2、NIOS中SPI的调试

             项目中还需要再NIOS上挂上SPI,三个板卡各自有NIOS 之间通过SPI进行通信,这次在设计的时候需要了一个弱智的问题,没有注意到ss_n这个片选是低有效的。期间的原因有,有时候命名不规范导致忽略这个引脚的信息。还有在写发射端时,只写了一次IOWR_ALTERA_AVALON_SPI_SLAVE_SEL,这个信号正常情况下其实是发送一次数据复位一次,但是当时不是很清楚这个,加之先前不知道什么样子才是选中,所以错上加错,给后续的调试造成了几天的时间浪费。后来通过理清思路,慢慢体会到,可能是如何如何,慢慢验证,才搞定了问题。

        得到的经验,同上!


      3、总线!

             之前涉及总线很少,所以很少entity端口的的inout这种情况,也基本上不用高阻态'z',直到有一次和师姐调试一个EMIF接口,当时约定,这个接口仅仅用于我给她的DSP传递信号,因为她那边只有读,不需要写。所以我想当然的把这个数据端口写成了out形式,然后没考虑输出高阻态这种情况,然后华丽丽的上电,电流过大。好在FPGA和DSP都足够坚强,没有出现什么问题。知道我猛然醒悟已经过去好一段时间了。嘿嘿,笨!!!


       


原创粉丝点击