我不明白为什么我的编译器抱怨我对OUT的所有赋值语句。这是我的代码:
`include "prj_definition.v"
module ALU(OUT, ZERO, OP1, OP2, OPRN);
// input list
input [`DATA_INDEX_LIMIT:0] OP1; // operand 1
input [`DATA_INDEX_LIMIT:0] OP2; // operand 2
input [`ALU_OPRN_INDEX_LIMIT:0] OPRN; // operation code
// output list
output [`DATA_INDEX_LIMIT:0] OUT; // result of the operation.
output ZERO;
always @(OP1 or OP2 or OPRN)
begin
// TBD - Code for the ALU
case (OPRN)
`ALU_OPRN_WIDTH'h01 : OUT = OP1 + OP2; // addition
`ALU_OPRN_WIDTH'h02 : OUT = OP1 - OP2; // subtraction
`ALU_OPRN_WIDTH'h03 : OUT = OP1 * OP2; // multiplication
`ALU_OPRN_WIDTH'h04 : OUT = OP1 >> OP2; // shift_right
`ALU_OPRN_WIDTH'h05 : OUT = OP1 << OP2; // shift_left
`ALU_OPRN_WIDTH'h06 : OUT = OP1 & OP2; // bitwise and
`ALU_OPRN_WIDTH'h07 : OUT = OP1 | OP2; // bitwise or
`ALU_OPRN_WIDTH'h08 : OUT = ~(OP1 | OP2); // bitwise nor
`ALU_OPRN_WIDTH'h09 : OUT = OP1 < OP2; // less than
default: OUT = `DATA_WIDTH'hxxxxxxxx;
endcase
end
always @(OUT) //whenever the output changes
begin
if(OUT === 0) ZERO = 1; //if result is 0, set the zero flag
else ZERO = 0; //otherwise keep the 0 flag false
end
endmodule
有人可以解释一下发生了什么吗?如果有必要提供更多信息,请与我联系。
答案 0 :(得分:1)
想出来!为了防止其他人遇到类似的问题,我在这里添加:
//output registers
output reg OUT;
output reg ZERO;