fpga的设计流程,一般来说,文档的设计会占一半以上的时间,真正写RTL代码用的大概三分之一的时间,而剩下的时间则却全部用来做仿真测试;当然单纯的来讲,coding style并非固定的,每个公司甚至每一个人都有自己的写法,但就综合工具以及从代码的可读性以及可利用性来讲,良好的coding sytle 对于你的调试会有事半功倍的效果,从研究生到工作3年中,我始终坚持这种风格。接下来讨论一下具体的风格:
1:为了模拟DFF中的延时Tco,在module中会定义一个user delay,即`define UD #1,这仅仅是为了方便仿真而定义的,在RTL综合的时候会被自动优化掉;
2:一个module中只有一个clk信号,即每一个module内部的信号都是同步的;需要做跨时域处理的话在顶层操作,在顶层进行例化异步FIFO或者双口RAM;
3:组合逻辑与时序逻辑分开描述,组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,这基本上是coding style默认的;
4:为了便于仿真,便于调试,便于移植,便于共享等,强烈建议“一个always块只对一个信号进行赋值,而一个信号也只在一个always块里面进行赋值”;这样做的好处首先是仿真的时候信号出错便于定位而且便于修改,尤其是增加一个信号的时候修改的时候非常方便;其次可以避免你犯低级错误,多驱动源,latch的生成等等;
5:状态机的设计,当然建议用2段式或者3段式,而不建议用一段式,一段式可能看起来简单,但是当一个工程较为复杂的时候,你要在状态机中加入一个控制信号的时候会非常的不方便在不影响其他信号的前提下;
5:信号的命名规则:
这个非常重要,尤其是对于没有文档的设计来说,如果设计中的命名规则让人一看就大概知道这个信号的干什么的,就可以了,比如ADC_CS_B,B代表低电平有效,即ADC芯片的片选信号低电平有效,别人能从你的信号命名中获取一定的信息如下图所示:
6:clk与信号的输入输出
clk在顶层应该进入PLL模块然后在输出,为什么?增加驱动性能;而且要用全局时钟,输入域输出都用寄存器打一拍;
7:文档的重要性
稍微复杂的工程一定要有完备的文档描述,代码中也要有相应的注释;因为你的代码要做到别人能看懂,如果别人看你的代码有一头雾水的感觉,甚至不想看,感觉还不如自己写呢,这个就非常的失败,所以一定要养成这种良好的习惯;
总之,良好的coding style对设计非常重要,我在工作中深有体会,看到公司中那种随心所欲的代码真的头疼!!!!!!!!!!
文章评论(0条评论)
登录后参与讨论