我在组合作业方面遇到了麻烦。我不明白为什么我不能使用总是组合结构设置我的输出变量。当我使用assign时,我没有得到赋值错误。
我认为分配并且总是@(*)都意味着阻止(组合分配)
module control_unit(input wire [31:0] instruction
,output wire RegDst
,output wire ALUSrc
,output wire RegWrite
,output wire MemRead
,output wire MemWrite
,output wire MemToReg
,output wire Branch
);
wire [5:0] opcode;
assign opcode = instruction[31:26];
always@(*) begin
case(opcode)
6'b000000: begin // r-type
RegDst = 1'b1;
ALUSrc = 1'b0;
RegWrite = 1'b1;
MemRead = 1'b0;
MemWrite = 1'b0;
MemToReg = 1'b0;
Branch = 1'b0;
end
.
.
.
default: begin
RegDst = 1'b0;
ALUSrc = 1'b0;
RegWrite = 1'b0;
MemRead = 1'b0;
MemWrite = 1'b0;
MemToReg = 1'b0;
Branch = 1'b0;
end
endcase
end // end always_comb
endmodule
答案 0 :(得分:5)
您无法对wire
进行程序性分配。无论reg
块是描述顺序逻辑还是组合逻辑,您都必须对always
进行过程分配。使用以下端口声明:
,output reg RegDst
,output reg ALUSrc
,output reg RegWrite
,output reg MemRead
,output reg MemWrite
,output reg MemToReg
,output reg Branch