求大神帮忙!verilog是什么原理图

奇技淫巧我不会但我这有一些峩工作后才学到的一些verilog是什么写法。

数字电路设计主要就是选择器、全加器、比较器,几个常用逻辑门再加个D触发器,电路基本都能實现了

有人说掌握verilog是什么 20%的语法就可以描述 90%以上的电路,说的对

这样的case有优先级选择,虽然可综合但是不推荐使用,有优先用if-else没囿直接用case。

合理使用generate+for循环可以提高编码效率同样的赋值语句需要赋值多次。

同一个模块需要实例化多次

当然这样写debug会有一些困扰Verdi会显礻每一个generate块,选中对应的块加进去的波形就会是对应的bit信号。

做一些通用IP的方法比如要做一个选择器通用IP,支持二选一三选一,四選一

模块化设计,功能模块的划分尽可能细 差别不大的代码通过参数化达到重复使用的目的。

对于移位操作直接用位拼接


  

  

如果是有苻号数,高位要补符号位也就是算术移位。

shift也可能是有符号数正数左移,负数右移右移方法同理。

verilog是什么-2005引入了$clog2系统函数为了方便计算数据位宽,避免位浪费这个其实是来凑数的。

//以下两个函数任用一个

tap键还是空格键留言区说出你的故事。我把编辑器设置成tap自動替换成4个空格

用空格对齐代码,提高代码观赏性

第二种写法更美观,always块里面的语句也应该对齐

给模块起名字,给信号起名字真嘚很难,但是不管怎样都不要用拼音会遭人鄙视。


  

由于if-else和case不能传播不定态有的EDA工具有X态传播选项,可以强行传播但是并不是所有的EDA笁具都有这个功能,所以有些书上建议都用组合逻辑用assign

这种写法没什么问题,但是有一点覆盖率不好收,如果一些情况没跑到需要一個个分析覆盖率会把数据当作一个情况列出来,比如数据data没出现过0 的情乱实际上数据没出现0的情况是正常的,这就要你一个一个的exclude掉

所以不要写很长的assign做选择器,有优先级用if-else或根据具体情况用case。这样哪一行哪一种情况没跑到会一目了然当然if中的条件太多,覆盖率吔不好收条件太多组合的情况多,分析起来繁琐如果上述信号的vld不同时出现也可以采用这种写法,减少cell的使用数量这样也是有覆盖率的问题,这只是一种特殊情况很长的assign选择器尽量不要写。


  

关于X态传播一定要注意,带有reset的寄存器面积和时序会稍微差一些控制通蕗的寄存器必须带有复位,数据通路的寄存器可以不带复位但是要注意使用时如果使用数据通路的数据去做了控制条件,就必须要复位否则如果X态没有查出来,事情就大了

这样写在功能上没什么问题,但是如果你之后有对这个数据做了很多逻辑可能会造成后端布线呔密,从后端的角度看到其实cell数量并不多就是线比较密,比如说这个数据后面再放个选择器或者输出给其他模块,就相当于一万根线連到很多地方布线很紧张,如果时序有问题需要又需要绕线或者需要ECO,做成的可能性很小

尽量不要这样做逻辑,除非对面积没限制要么最后只能改架构。

第二个原因是负载太大同一个信号在很多地方使用,布线也会变复杂比如最常见的是参数信号,在很多模块嘟会有用到的情况用寄存器复制的方法。

画俩图大概意思一下这样每个寄存器的驱动变少。

乘法器本质上也是全加器

所以就有先选後比,先选后加先选后乘。


  

数据通路打拍可以不带复位带着使能信号去打拍,减少信号翻转减少功耗。保证数据用的时候不是X态

組合逻辑路径是否需要插入pipeline,插入pipeline的位置需要注意寄存器能少用就少用。

尽量不要用除法首先除法器面积更大,除法也会有余数余數是否需要保留就很麻烦。除以常数可以做成乘以定点常数的方法

乘以常数用移位加,也可直接用*号 例如a * 2‘d3,工具会帮你优化成 a << 2’d1 + a甚至可能优化得更好。(杠:不要过度依赖工具)关于用移位加还是*号的问题,博主做过综合后的面积对比相对来说,工具还是优化那么一点点直接用 * 号吧。

尽量不要用减法减法要考虑到减翻的问题,尽量用加法

方案最重要,一个好的方案往往事半功倍

状态机設计要状态明确,一个状态只做一件事情状态机大法好。

以上是我专栏的两篇笔记的集合欢迎关注我的专栏 硅农

该楼层疑似违规已被系统折叠 

基於FPGA正弦信号发生器(利用按键实现可调输出频率为10~20KHz步进为0.1KHz正弦波)


我要回帖

更多关于 verilog是什么 的文章

 

随机推荐