2018.7.26
一.always里面赋值语句左边必须声明成reg。
注意:1.声明成reg,不一定得到寄存器:(阻塞赋值)
2.未声明成reg,也可能得锁存器。
备注:该图为电平触发,故因新增锁存器。
二、assign表达式左边必须声明为wire。
三、阻塞赋值用“=”,非阻塞赋值用“<=”.
四、1)边沿触发生成寄存器的时序逻辑电路
2)电平触发条件完整,生成组合逻辑电路
3)电平触发条件不完整,生成锁存器的时序逻辑。
五、Conding要点:
1)如果是边沿触发的逻辑,比如always@(posedge clk),里面一律用'<='赋值
2)如果是电平触发的逻辑,一律使用“=”赋值
3)电平触发:逻辑简单用assign语句,逻辑复杂用always语句
4)分支条件写完整,防止出现锁存器。
六、循环语句:
七、task and 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电平触发不建议用非阻塞逻辑表达式,边沿触发尽量用非阻塞赋值。