Verilog语法提炼

2018.7.26

一.always里面赋值语句左边必须声明成reg。

注意:1.声明成reg,不一定得到寄存器:(阻塞赋值)

声明成reg无寄存器综合

2.未声明成reg,也可能得锁存器。

隐含锁存器

备注:该图为电平触发,故因新增锁存器。

二、assign表达式左边必须声明为wire。

三、阻塞赋值用“=”,非阻塞赋值用“<=”.

四、1)边沿触发生成寄存器的时序逻辑电路

        2)电平触发条件完整,生成组合逻辑电路

       3)电平触发条件不完整,生成锁存器的时序逻辑。

五、Conding要点:

       1)如果是边沿触发的逻辑,比如always@(posedge clk),里面一律用'<='赋值

       2)如果是电平触发的逻辑,一律使用“=”赋值

       3)电平触发:逻辑简单用assign语句,逻辑复杂用always语句

       4)分支条件写完整,防止出现锁存器。

六、循环语句:

循环语句

七、task and function:

task
function

八、语法小汇总:

1)always语句块和assign语句块:并行执行。

2)always #50 clk=~clk:50ns的时钟。

3)进制表示方法:8’d61:8是bit数。

4)变量的分类:网络型(net type:常见wire,如果缺省,默认wire)和寄存器型(register type:常见reg,算法开发:integer,real,time)。

5)reg [7:0]:二维向量成为存储器变量。

6)某一操作数有不确定值,结果也是不定值。(除===)

7)连接符:{sum,kla}。

8)赋值语句:连续赋值语句(assign),过程赋值语句(always:电平触发:组合逻辑,边沿触发:时序逻辑)。

9)条件语句:if-else,case语句。

10)循环语句:forever,repeat,while,for.

11)结构说明语句:initial,always,task,function。

12)编译预处理语句:`define,`include,`timei

13)过程块:initial和always.always过程块不能嵌套使用.

14)Initial:模拟硬件上电的过程,不可综合,做验证。1不能嵌套使用。2模拟0时刻开始执行,只执行一次。3同一模块内多个initial块并行执行。

15)过程赋值语句:阻塞赋值(类C)和非阻塞赋值(并行赋值)。

16)Always电平触发不建议用非阻塞逻辑表达式,边沿触发尽量用非阻塞赋值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容