2016-06-21 16 views
1

組み合わせ割り当てに問題があります。なぜ私は常に私の出力変数を設定する組み合わせの構造を使用することはできません私は理解していない。私が割り当てを使用するとき、私は割り当てエラーを取得しません。Verilog:代入の左側には可変データ型が必要です

は、私はいつも割り当てると思った@(*)の両方の手段は、あなたが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]; 

    [email protected](*) 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 

答えて

5

を遮断します。 alwaysブロックがシーケンシャルまたは組み合わせロジックを記述しているかどうかにかかわらず、regへの手続き割り当てを行う必要があります。次のポート宣言を使用してください:

   ,output reg RegDst 
       ,output reg ALUSrc 
       ,output reg RegWrite 
       ,output reg MemRead 
       ,output reg MemWrite 
       ,output reg MemToReg 
       ,output reg Branch 
+0

私は電線とregの違いについて少し混乱しています。私の理解から、情報を格納するためにレジスタが使用されている間、入力と出力ポートを接続するためにワイヤが使用されていますか?なぜ出力はregである必要がありますか? – Sugihara

+0

@Jack:出力は、たとえばalwaysブロックのような手続き的な代入を行うときにregでなければなりません。 – toolic

+0

それはセマンティクスのためですか?それともハードウェアの理由はありますか? – Sugihara

関連する問題