Verilog:在赋值的左侧必须有一个变量数据类型

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

我在组合作业上有困难。我不明白为什么我不能使用一个总是组合结构来设置我的输出变量。当我使用assign时,我不会得到赋值错误

我认为assign和always都意味着阻止组合赋值

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。