verilog coding_style建议.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
verilog coding_style建议

Verilog coding style建议设计必须采用同步设计;同步设计就是保证电路中所有的寄存器都在同一个clock的控制下变化。因为目前的EDA工具并不能很好的支持异步电路的分析,用同步设计加上良好的编码规范得到的电路仿真结果就等同于实际电路的运行结果,若是异步电路,仿真结果与实际电路的结果可能不相同。异步电路的核心逻辑是用组合电路来实现的,电路的输出,主要信号等变化并不依赖于任何一个时钟,所有验证、调试都是相当繁琐而有难度的,所有建议采用同步设计。2. 宏定义 利于仿真的角度出发,应该设置一个user delay(UD),即宏定义`define UD #1,对没有时序逻辑寄存器都延时一个单位, 默认是1ps,这样就可以模拟FPAG内部的延时;仿真结果更接近实际电路,值得一提的是,它是不被综合的,就是对电路的运行没有一点影响,仅仅只是为了仿真的方便才定义的。3. 时序与组合电路分开描述 这是IC设计最基本的一个coding style,因为这样有利于debug。一般来说,时序电路是非常难以debug的,所有设计的话,时序电路尽量简单,而要完成的功能通过组合电路去完成,时序电路只设置为一个简单的D触发器。这样的话,进行debug的时候,看源码就可以只看组合模块,忽略时序电路(D flip_flop),既方便又节省时间。组合描述的敏感链表用always @ (*)来描述。其中*代表组合逻辑模块中影响输出的所有信号,这是verilog2001的新语法规定,大家不熟悉的话可以查一下。4. 信号的赋值 建议一个信号只在一个always 块里面进行赋值,而一个always 块也只对一个信号进行赋值;时序设计采用非阻塞赋值,组合电路采用阻塞赋值,这样做又以下几个好处: 首先,可以很好的避免多驱动源的发生,减少这种错误发生的概率; 其次,debug的时候若是发现该信号有错误,就可以进行很简单的定位,因为这个信号只是这一个always里面赋值,非常有利于debug; 最后,时序采用非阻塞赋值,组合设计采样阻塞赋值,因为这样做最符合信号的实际情况;5. 避免非目的的latch的产生 Latch对电路的危害:首先它是电平触发的,不能被同步,容易产生冒险-竞争现象,对电路造成一定的危害;其次,FPGA设计资源中,大部分器件没有latch这个资源,而需要一个门电路和一个触发器(FF)来构成,这样就造成资源浪费。最后,若在高速电路中,latch会给系统带来不可预料的危害,甚至会让整个系统崩溃。产生latch的主要原因在于,在进行组合逻辑设计时,采用了不完整的条件判断语句,或者是设计中有异步逻辑设计等原因。 防止latch产生的方法:使用完全的条件判断语句,if…else…,否则会产生透明锁存器;检查设计中是否含有combinational feedback loops,发现及时修改;为每个input 设计一个output,在case语句中设置default语句;State machine中,尽量用完全条件语句(full case),如果不是,应加上default语句;6.状态机的描述 状态机尽量采样两段式或者三段式来描述,极力的避免一段式描述。状态机必须保证它的安全性,就是不会进入死循环,特别是不会进入非预知状态,而且就算由于某种干扰进入非设计状态,也能很快的恢复到正常的循环状态中来。 一段式是指状态的同步跳转与信号的赋值、输入的条件都写在一个always模块里面,它的缺点就是状态转移判别的组合逻辑与状态寄存器转移的时序逻辑在一个always模块里面完成,而且描述当前状态事还要考虑下一个状态的输出,不符合时序与组合电路分开设计的coding style,而且代码不清晰,更难以维护,不利于综合和优化。 二段式的FSM描述:一个always模块采用同步时序方式描述状态转移,另一个always模块采用组合逻辑方式判断状态转移的条件,或者说来描述状态转移的规律;三段式一般类似于二段式,只是输出信号的判断是通过下一个状态来判别的,而不是当前状态来判别。7. 信号的命名 1状态机的命名尽量避免0,1,2,S0,S1,S2……等命名,因为这样看起来不知道在干什么,只要看了具体的代码才明白这个状态在干什么,建议采用英文缩写等来表示,用parameter来定义,如FSM_IDLE,SEND_DATA,SEND_ADDR等,看了就会一目了然,空闲态,发送数据,发送地址等。 2普通信号的命名 超过4个字母的尽量用_来分隔,看起来清晰,最好可以表达这个信号是干什么的,如TIME_CNT(一看就知道是计数的), 3后缀的命名 根据每个公司不同,规定也不同,但是最好是统一一下,这样的话大家相互看代码的时候就不至于“犯晕”;举几个简单的例子。_N,代表寄存器的

文档评论(0)

gk892289 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档