樱木花道长

不忘初心,方得始终

Verilog基础知识汇总二(运算符)

1
阅读(11158)

1. 算术运算符(和C语言类似)

   +:加法运算符;

  -:减法运算符;

  *:乘法运算符;

  /:除法运算符;

 %:求余运算符,要求%的两侧都是整型数据


2. 关系运算符,一般用于条件判断语句  > 大于;<小于;  >=大于等于;<=小于等于;


3. 等式运算符

  ==等于;

 !=不等于;

  ===等于;

  !==不等于;

可能大家会奇怪,这两个等于和不等于之间有什么区别,下面我用一个真值表给大家介绍一下

blob.pngblob.png

从上图我们可以看到=== 和== 的区别主要是当操作数为x不定态和Z高阻态时存在区别,平时用的比较多的还是==和!=这个等于和不等于。


4.赋值运算符

赋值运算符包括阻塞赋值和非阻塞赋值两种;

非阻塞赋值<=:在程序中前面语句经过非阻塞赋值所得的变量值不能立即生效为后面语句所用,所以一般非阻塞赋值是出现在时序电路中,他需要等整个语句块走完了才能完成赋值操作,例如:

always@(posedge clk) begin

a <= a+1'b1;

b <= b+1'b1;

c <= a+b;

end

假如初始状态a=0;b=1;经过一个时钟周期后a=1;b=2;但是此时c=3吗?NO,c的值是为1的。这也是硬件描述语言的并行特性所在,也是和C等高级语言最大区别的地方。

另外这里<= 的意义完全不是小于等于,小于等于一般用于比较判断的语句,赋值语句时,它是非阻塞赋值。

阻塞赋值=:阻塞赋值执行完后立即生效,一般用于组合逻辑电路。


5.逻辑运算符

&&:逻辑与;          ||:逻辑或

&:按位逻辑与 例如4'b1010&4'b1100 = 4'b1000

|:按位逻辑或

!:逻辑非

~:按位取反

这里与、或以及按位与、按位或都是双目操作符,即需要两个操作数进行运算,当作为单目操作符使用时,他们属于缩减运算符。


6.移位运算符

a>>n:a右移n位;     a<<n:a左移n位

这两种移位运算,空出来的位数都是用0来填充


7.位拼接运算符

例如大家写流水灯的时候可以写这么一句:

led  <= {led[0],led[7:1]};

这句话的意思是把led的最低位放到最高位,其余位的顺序不变,拼接成一个新的数,再传给led,这样不断循环不就实现了流水灯了吗?


8.缩减运算符

缩减运算符是单目运算符,也就是操作数自己和自己运算。例如:

reg[3:0]B;

wire C;

assign C = &B;

相当于: C = ((B[0]&B[1])&B[2])&B[3];