Verilog的语法表达式和c语言差不多,只不过多了电路的门电路运算
flag1 && flag2 ; //逻辑与操作
Verilog 中提供了大约 9 种操作符,分别是算术、关系、等价、逻辑、按位、归约、移位、拼接、条件操作符。
除条件操作符从右往左关联,其余操作符都是自左向右关联。圆括号内表达式优先执行。其中有一些特殊的算术符号,比如x,就是未知,无论做什么操作都是x。
还有一个位宽的问题,乘法好理解,就是两个操作数的位宽之和,但是对于加法的时候,由于寄存器当中的无符号数和有符号运算的差异,好像统一记成多一位。等价操作符包括逻辑相等(==),逻辑不等(!=),全等(===),非全等(!==)。逻辑相等/不等操作符不能比较 x 或 z,当操作数包含一个 x 或 z,则结果为不确定值。取反(~),与(&),或(|),异或(^),同或(~^)。
归约操作符包括:归约与(&),归约与非(~&),归约或(|),归约或非(~|),归约异或(^),归约同或(~^)。(这是一个完全陌生的东西,啥也不懂)
归约操作符只有一个操作数,它对这个向量操作数逐位进行操作,最终产生一个 1bit 结果。
逻辑操作符、按位操作符和归约操作符都使用相同的符号表示,因此有时候容易混淆。区分这些操作符的关键是分清操作数的数目,和计算结果的规则。根据定义,有点像计组里面所说的各位相与,各位相或,
移位操作符包括左移(<<),右移(>>),算术左移(<<<),算术右移(>>>)。
移位又包括算术和逻辑两种,