`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//---------------code-----------------//
// Method 1:
wire check_tmp;
assign check_tmp = ^bus;
assign check = sel ? check_tmp : !check_tmp;
// Method 2:
reg check_reg;
always @(*) begin
if(sel) begin
check_reg <= ^bus;
end
else begin
check_reg <= !(^bus);
end
end
assign check = check_reg;
// Method 3:
wire check_tmp;
reg check_reg;
assign check_tmp = ^bus;
always @(*) begin
if(sel) begin
check_reg <= check_tmp;
end
else begin
check_reg <= !check_tmp;
end
end
assign check = check_reg;
//---------------code-----------------//
endmodule
使用单目运算符可以检测是否全为1,是否全为0,还可以进行奇偶校验,具体可以参考: 2.3 运算符和表达式【重点】
注: 根据波形图可以看出,当sel为1的时候,检查的结果就是奇偶校验后的结果; 当sel为0的时候,检查的结果就是奇偶校验取反后的结果。