Verilog语法遗漏点

1 关于参数定义

Parameter:parameter只能定义在端口生命的前面,如

Input[whith:0] a;

Parameter whith=4;

这样的参数定义出现在声明的后面会报错

2 关于always

always块不仅可以描述时序逻辑,也可以描述组合逻辑

如wire a,b;  assign a=b

与reg a; wire b;  always@(b) a=b;     可见,always块内允许阻塞赋值

不过需要注意的是

always中,等号左边的变量必须是reg型,而不能是wire型,无论是组合逻辑还是时序逻辑均成立,但是最终变量a被综合成了连线,而不是寄存器!!!!

3 关于if  else

If…else…语句,只能依附于always等程序模块不能单独使用,如果想单独使用,用三目运算符代替

4 不定态X表示不可推断电平,高阻态Z相当于断路状态

5 REG型量不一定被综合成寄存器

Verilog中,块内被赋值的变量,都必须是寄存器reg类型!!如上述2中的介绍,但是reg型变量不一定被综合成寄存器,组合逻辑中被综合成互连,不完全组合逻辑中,描述成锁存器。所以寄存器变量不一定被综合成寄存器。

6 归约运算符

归约运算符是一种单目运算符;被操作数具有一定的位宽,操作的结果都是1位。

如wire[3:0]bus 4’hf;

  Wire result = &bus;

  上述赋值相当于assign result=bus[0]&bus[1]&bus[2]&bus[3];//归约与运算符

如果是|,相当于assign result bus[0]| bus[1]|bus[2]|bus[3];//归约或运算符

  如果是^,相当于………………………………………………………………..//归约异或运算符

实例参数重载方式,这个是为了输入端口宽度进行灵活配置的方式(遇到再看)

8 关于alwaya@()敏感列表

Always@(posedge clk)

Always@(signal)

关于电平敏感,表示电平发生变化就执行块内的内容。

猜你喜欢

转载自www.cnblogs.com/shaonianpi/p/9991670.html