Verilog:在赋值的左侧必须有一个变量数据类型
我在组合作业上有困难。我不明白为什么我不能使用一个总是组合结构来设置我的输出变量。当我使用assign时,我不会得到赋值错误 我认为assign和always都意味着阻止组合赋值Verilog:在赋值的左侧必须有一个变量数据类型,verilog,variable-assignment,synthesis,quartus,Verilog,Variable Assignment,Synthesis,Quartus,我在组合作业上有困难。我不明白为什么我不能使用一个总是组合结构来设置我的输出变量。当我使用assign时,我不会得到赋值错误 我认为assign和always都意味着阻止组合赋值 module control_unit(input wire [31:0] instruction ,output wire RegDst ,output wire ALUSrc ,output wire
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
不能对导线进行程序指定。无论always块描述的是顺序逻辑还是组合逻辑,都必须对reg进行过程赋值。使用以下端口声明:
,output reg RegDst
,output reg ALUSrc
,output reg RegWrite
,output reg MemRead
,output reg MemWrite
,output reg MemToReg
,output reg Branch
不能对导线进行程序指定。无论always块描述的是顺序逻辑还是组合逻辑,都必须对reg进行过程赋值。使用以下端口声明:
,output reg RegDst
,output reg ALUSrc
,output reg RegWrite
,output reg MemRead
,output reg MemWrite
,output reg MemToReg
,output reg Branch
我对导线和reg之间的区别有点困惑。据我所知,wire用于连接输入和输出端口,而reg用于存储信息?为什么输出需要是reg?这是因为语义吗?还是有硬件原因?@插孔线用于连接输入和输出端口,而reg用于存储信息。不,那是完全错误的。差别是微妙的,但你确实需要理解差别。注释太短,无法解释。@Jack:主要是语义,尽管模拟器在处理这两个方面有一些潜在的差异。在SystemVerilog中,wire和reg都可以用逻辑代替,类似于VHDL。我对wire和reg之间的区别有点困惑。据我所知,wire用于连接输入和输出端口,而reg用于存储信息?为什么输出需要是reg?这是因为语义吗?还是有硬件原因?@插孔线用于连接输入和输出端口,而reg用于存储信息。不,那是完全错误的。差别是微妙的,但你确实需要理解差别。注释太短,无法解释。@Jack:主要是语义,尽管模拟器在处理这两个方面有一些潜在的差异。在SystemVerilog中,wire和reg都可以用逻辑代替,类似于VHDL。