Bootstrap

Verilog中的逻辑运算


在数字设计和电路模拟中,逻辑运算是基础中的基础,包括逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)、逻辑异或(XOR)等。这些运算符不仅处理确定的逻辑值1和0,还能处理不确定值x。

逻辑与(AND)

逻辑与运算符(&)在所有输入位都为1时,结果位才为1,任一位为0,结果即为0。当输入中包含不确定值x时,其输出通常也是不确定的,除非另一输入明确为0,因为0与任何值的AND结果都是0。

wire result_1;
wire result_2;
assign result_1 = 4'b1010 & 4'bxxxx; // 结果为 4'bxxxx
assign result_2 = 4'b1010 & 4'b0xxx; // 结果为 4'b0000

逻辑或(OR)

逻辑或运算符(|)在任一输入位为1时,结果位即为1。所有输入位为0时,结果位才为0。包含x时,结果通常不确定,除非另一输入明确为1,因为1与任何值的OR结果都是1。

wire result_1;
wire result_2;
assign result_1 = 4'b0101 | 4'bxxxx; // 结果为 4'bxxxx
assign result_2 = 4'b0101 | 4'b1xxx; // 结果为 4'b1111

逻辑非(NOT)

逻辑非运算符(~)对输入位进行反转,但x反转后仍为x,因为不确定性不能通过反转而消除。

wire [3:0] result;
assign result = ~4'b0x01; // 结果为 4'b1x10

逻辑异或(XOR)

逻辑异或运算符(^)当两个输入位不同时,结果位为1,相同时为0。包含x时,结果通常为不确定,因为不确定与任何值的比较都是不确定的。

wire result;
assign result = 4'b1100 ^ 4'bx0x1; // 结果为 4'bxxxx
;