Verilog HDL語法-運算子

2020-08-16 15:12:45

Verilog中的運算子分類

運算子分類:

運算子分類 運算子
算數運算子 +,-,*,/,%
關係運算符 >,>=,<,<=
相等關係運算符 ==,!=, ===,!==
邏輯運算子 &&,||,!,
位運算子 >>,<<
規約運算子 &,|,^,~&,~|,~^,^~
移位運算子 >>,<<
條件運算子 ?:
連線運算子 {}

需要特殊說明的運算子:

算數運算子

運算後的位寬:
以’+'舉例:

reg[3:0] a,c;
reg[2:0] b;
reg[5:0] d;
a = b+c;
d = b+c;

1.上面的加法運算中右邊表達式的位寬右b、c中的最長位寬決定,爲4位元;結果的位寬有等號左邊的變數的位寬決定。所以第一個運算的結果是4位元,溢位部分被丟棄;第二個運算的結果是6位。
2.進行整數除法運算時,小數部分直接被忽略,只取整數部分;
3.取模運算時,結果的符號由運算子左邊的變數的符號決定;

關係運算符

關係運算符的結果出了1或0外,還可能是不定x。
如:

4'b1101 < 4'b1xx1;  //結果爲x

相等關係運算符

1.相等關係運算符的運算結果也有三種可能:相等(1),不等(!),不定(x)。
2.==與===的區別:

==運算子的真值表

== 0 1 x z
0 1 0 x x
1 0 1 x x
x x x x x
z x x x x

===運算子的真值表

=== 0 1 x z
0 1 0 0 0
1 0 1 0 0
x 0 0 1 0
z 0 0 0 1

===和!==常用語case表達式的判別,所以又稱爲case等式運算子

邏輯運算子

如果運算元中存在不定態x,則結果也是不定態。

位運算子

如果操作符兩側的運算元位數不等時,會自動將兩個運算元按右端對齊,位數少的運算元會在高位用0補齊。

規約運算子

規約運算子都是單目運算子,運算後的結果只有一位

運算子的優先順序

混合使用多種運算子時最好使用()來控制運算的優先順序,以避免錯誤,也增加了程式的可讀性。