FPGA verificaiton Tips


做FPGA verification通常是把各个TOP level的module连接起来,组成一个完整的TOP.v。

对TOP.v的端口分配管脚综合之后,下载到FPGA做chip tape out前的function verification。  

(1)大刀阔斧

把各个module之间的port信号连接好。

(a)特别注意data Bus的连接,最好将每个信号都用wire声明位宽,以防bus信号只连到最低的一位。

(b)各个module最重要的的信号莫过于clock和reset。一个完整的chip通常有多个clock domain。
     clock没连接正确,整个design会逻辑混乱。reset信号不正常,会导致design无法在正确的时间复位。
     出问题的时候,最先检查的也是clock和reset信号。

(c)确保每个module的input信号都是有确定的值,input 信号不允许存在high Z或者unkown状态。
      在simulation阶段,High Z或者Unkown信号的影响并不明显,不一定会有error,但综合后下载到hardware之后可能会出现不可预测的情况。
      对于没有用到的input信号一律tie到无效状态,也就是说如果信号高有效则tie至0, 低有效则tie到1。

 (d)没有用到的output信号悬空不做处理。
  



(2)步步为营

搭建好EDA simulation环境之后,在log文件中逐个检查warning和error,清除所有能清掉的warning和error。

通过波形查看各个端口是否存在异常信号。

端口有异常信号,确保输入信号无误的情况下,再通过debug工具trace到module内部查找异常的原因。

如果design比较大,可以bypass后面的模块(将模块注释掉,output signal assign成0),逐步分段debug,这样可以节约跑simulation的时间。

根据需要将需要的debug信号引到端口,用内部register做select信号,方便hardware debug。


(3)一睹真容
simulation pass之后,将design设定好constraint 和pin assignment之后进行compile,生成下载文件。

根据需要将ASIC的sram,PLL和standard library替换成FPGA相应的sram,PLL和library。

Hardware调试之前,先确认各个主要器件处于正常work状态,可以通过已经正常work的hardware逆向检查。

调试第一步确认input signal是否正常。可以将input signal通过select 信号bypass到debug端口上。 

之后分段debug,debug过程中可以借助示波器,逻辑分析仪,ISE 的Chipscope等工具,找到异常信号之后,在EDA simulation环境中trace导致异常的原因。
正常情况下,EDA simulation 能正常Pass 并且FPGA software综合做STA没有timing violation,hardware的结果和EDA simulation的是一致的。


PS:在EDA simulation 能正常Pass情况下,Hardware simulation不正常work的原因。

(a)hardware 的外部clock没有meet requirement。
(b)register setting和EDA环境不一致。 
(c)Timing violation


在整个过程中碰到最多的还是clock的问题,因为Clock Domain太多,刚开始没有完全理清相互之间的关系。有些Clock没有接对。导致后面出现一些很难debug的情况。

另外一个就是timing 问题,debug port的select信号用的是Core内部的register,穿越hierarchy比较深,导致Hold violation,建议select 信号用hierarchy比较浅的信号。

PSPS:做verification最重要的还是细心,很多bug都是细微的错误导致的。多次check可以减少debug时间。
遇到难解的bug,用逐个排除的方法定位,很多看起来一定正常的地方,通常是bug的所在,不要主观臆断,Seeing is Believing。

End

posted on 2011-07-29 22:58  Homography Matrix  阅读(576)  评论(0编辑  收藏  举报

导航