学习FPGA逻辑设计的一些注意事项

    我看过很多初学者发给我的代码,也帮助他们debug。我发现这些代码问题都比较严重,先总结比较突出的几点,做理论上的描述,然后下一章我会仔细跟大家分析这些代码的错误之处。

1,  Coding Style。

    a)       Coding Style的重要性怎么强调都不为过,好的Coding Style可以极大的避免一些低级错误的出现。从而极大的减轻Debug的压力和测试的难度。

    b)       好的Coding style可以避免常见的错误如:多驱动源,Latch,仿真结果与电路结果不一致。

    c)       好的Coding style可以优化电路的性能如:电路最高速度,占用资源数量。

    d)       当然,上面只是简单的描述,好的Coding style是可以极大的节省开发时间,减少Bug的数量的。

    e)       那怎么样的Coding style才是好的Coding style,可以说,不同的公司因为文化的不一样会有不一样的要求,但是有些基本的是相同的,如:

                                 i.              同步设计。

                                 ii.              组合时序分开。

                                 iii.              不允许出现不能综合的符号。

                                 iv.              寄存器输出。

                                 v.              不允许Latch,不允许组合循环。

                                 vi.              Case嵌套不超过2层,if else嵌套不超过3层。

                                 vii.              命名规则。

                                 viii.              空行规则。

                                 ix.              Clock使用规则。

                                 x.              复位信号使用规则。

                                 xi.              …

f)       当然,上面只是简单的描述,以后我们会详细的阐述Coding Style规则,现在说的再多,也是枉然,没有实践,很快就会忘记的。也可以参考红芯电子的例程,代码的Coding style是非常不错的。

 

2,  同步设计。

这个问题在初学者中尤为严重,原因也很简单,在网络上Down的代码里面,基本上就是这样写的,很多人有样学样,这个是绝对不可取的。

    a)       同步设计我们设计电路的基本规则之一,理由很简单,现在的EDA工具基本上无法支持异步电路的分析,也就是说,综合工具帮你分析的电路能跑多快,异步的话就是错误的,在低速的时候表现不出来,但是如果高速的话,这种Bug是极难找到的。

    b)       什么叫同步设计,就是所有的寄存器都在同一个clock的控制下变化,从表现来说,就是有寄存器的敏感列表都是(posedge SYSCLK or negedge RST_B),如果在其他的信号的上升沿作为敏感列表,就是非通不了。

    c)       很多人要问,按照(posedge SYSCLK or negedge RST_B)这个写法,那么RST_B信号不就是异步的一个信号了,确实是的,但是为什么还要这样写呢?原因也很简单,异步Reset的DFF的资源消耗比同步的小很多,而且Reset信号会在top module里面进行一次同步。

    d)       那么有些时候,我们一个设计当中,需要不同的clock,比如有些专用电路的clock频率是固定的,这个时候就会有2个,3个甚至更多时钟。这个就是跨时钟域的设计了,跨时钟域设计的时候,不同时钟域之间的信号,如果是单根控制信号,可以用单稳态触发器,如果是数据,建议用FIFO。但是单个时钟域里面还是同步的。

   e)       如果你仔细阅读过红芯电子的例程,你就会发现,红芯电子的例程,无论是外围接口还是算法模块,全部都是同步的。这个绝不是网络上down的代码可以比拟的。

posted @ 2010-11-01 17:30  RedCore  阅读(535)  评论(0编辑  收藏  举报