我正在尝试在 verilog 中构建一个 32 位 ALU,而我之前只做了一点行为 verilog,所以我在使用这段代码时遇到了一些困难:
module ZERO_FLAG(flag, control, inputA, inputB);
input [2:0] control;
input [31:0] inputA, inputB;
output flag;
reg flag;
always @(control or inputA or inputB) begin
case (control)
1: flag <= (|(inputA ~& inputB));
3'bxxx, 3'bxx0, 3'bxx1, 3'bx0x,
3'bx00, 3'bx01, 3'bx1x, 3'bx10,
3'bx11, 3'b0xx, 3'b0x0, 3'b0x1,
3'b00x, 3'b000, 3'b01x, 3'b010,
3'b011, 3'b1xx, 3'b1x0, 3'b1x1,
3'b10x, 3'b100, 3'b101, 3'b11x,
3'b110, 3'b111: flag <= 0;
endcase
end
endmodule
出于某种原因,Modelsim 在 1 的情况下对 inputA 和 inputB 之间的 NAND 不满意。基本思想是我只想在减法发生时抛出一个零标志,然后我希望结果是 OR 减少位两个输入的与非。想法?