赋值的左边必须有一个变量数据类型

问题描述 投票:0回答:1

我在组合作业上遇到了麻烦。我不明白为什么我不能使用

always
组合结构来设置我的输出变量。当我使用
assign
时,我没有得到赋值错误。

我以为

assign
always@(*)
都是blocking(组合赋值)的意思。

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
verilog variable-assignment system-verilog quartus synthesis
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.