对第二个if else循环中的&、|有疑问,明明这两个在verilog中都是双目运算符,为什么在这里只有一侧有操作数,后来在其他博主那里看到,原来这样的用法叫做“一元约简运算符”。
1.一元约简运算符解释这种运算符和位运算符的符号是一模一样的,但是仍然能够正常阅读而不产生歧义,一元约简运算符是将后面的多位操作数依次进行位运算。
2.例子 |4'b1010 //1 | 0 | 1 | 0 即为1.|4'b0010 //0 | 0 | 1 | 0 即为1.|4'b1000 //1 | 0 | 0 | 0 即为1.&4'b1010 //1 & 0 & 1 & 0 即为0.&4'b0010 //0 & 0 & 1 & 0 即为0.&4'b1000 //1 & 0 & 0 & 0 即为0. 3.图一代码解释|bit_cnt[4:1] 代表从bit_cnt的第4位开始,依次进行或运算至第1位,得出最终结果。
~&bit_cnt[4:1] 代表从bit_cnt的第4位开始,依次进行与运算至第1位,然后再进行取反运算得出最终结果。