2016-10-02 10 views
0

カウンタとMUXで周波数分周器を作りたいと思います。エラー(10219):Mux.v(19)のVerilog HDL連続割り当てエラー:割り当ての左側のオブジェクト "muxout"がネットタイプである必要があります

は、私はこのプロジェクトのための3モジュールを作る

// 4ビットカウンタ

module Counter (input clk, input reset, output reg[3:0] out); 

    [email protected](posedge clk or posedge reset) 
    begin 
     if(reset) 
     out = 4'b0000; 
     else 
     begin 
     if(clk) 
      if(out < 4'b1111) 
      out = out + 4'b0001; 
      else 
      out = 4'b0000; 
     end 
    end 


endmodule 

//モジュール4by1のマルチプレクサ

module Mux (input [3:0] muxin , input [1:0] sel, output reg muxout); 


    function _4by1mux; 

     input [3:0] muxin; 
     input [1:0] sel; 

     case (sel) 
     2'b00 : _4by1mux = muxin[0]; 
     2'b01 : _4by1mux = muxin[1]; 
     2'b10 : _4by1mux = muxin[2]; 
     2'b11 : _4by1mux = muxin[3]; 
     endcase 
    endfunction 

    assign muxout = _4by1mux(muxin, sel); 


endmodule 

//モジュールfreqDivider

module freqDivider(input clk, input reset, input [1:0] sel, output reg muxout); 

    wire [3:0]counterbus; 

    Counter ct1 (clk, reset, counterbus); 
    Mux mux1 (counterbus, sel, muxout); 

endmodule 

モジュールfreqDividerはトップである、と私は、モジュールのカウンタとマルチプレクサ

呼び出すが、モジュールMUXは

Error (10219): Verilog HDL Continuous Assignment error at Mux.v(19): 
object "muxout" on left-hand side of assignment must have a net type 

このエラー

PSに問題があります。入力セルは時間によって変更されます

+0

また、Cntrl + Kを使用してコードを書式化してください。また、問題の詳細を説明してください。また、問題解決のためのヘルプが必要な場所 – mhasan

+0

申し訳ありませんが、これは初めてのコードです と出力 'muxout'割り当てられる....しかし、なぜですか? – KorHotGuy

+0

FYI:問題のステートメントには関係しませんが、 'if(clk)'行は削除してください。シミュレーションは正常に動作しますが、ほとんどのシンセサイザはすべての信号を手続き型ブロック(常に '@(posedge/negedge ...)')の感度リストで使用し、本体で非同期入力として使用します。 'if(clk)'行がなければ、 'Counter'モジュールは同じものをシミュレートし、正しく合成します。 – Greg

答えて

1

wireの代わりにregの出力を持つmuxout出力の結果、エラーが発生します。 Verilogでは、行にはネット(wireタイプなど)または変数(regタイプなど)の2つの最も重要なタイプがあります。値/ロジックをネットタイプに割り当てるには、assignステートメントを使用し、alwaysブロックを使用する必要はありません。値/ロジックを変数タイプに割り当てるには、alwaysブロックのみを使用し、assignステートメントは使用できません。したがって、Muxモジュールのassignをブロックalwaysブロックにするか、簡単な解決策として、regの出力をregにしないでください。regキーワードを除外すると、wireになります。

+0

ありがとう、私は自分のコードを変更し、それは動作します! しかし、ネットタイプについてはまだ混乱しています... とにかくありがとう! – KorHotGuy

+0

@KorHotGuyちょっと奇妙なことですが、電車の電車でこの答えを書いてしまったので、説明に全部は行きませんでした。しかし、Verilogの新しいバージョン(または、より正確に、SystemVerilogのは) 'タイプのすべてヤウド通常利用することによって、この問題を削除しようとしてきたlogic' – Unn

0

ワイヤタイプではなく、mux_outをregタイプとして宣言しているのは間違いです。任意のポートのデフォルトのタイプはワイヤーです。あなたはassignというキーワードを通してそのネット上で継続的な割り当てをしています。 regタイプネットの場合、割当は手続ブロック内でのみ行うことができます(初期、常に)。

mux_outに変更すると、output regからoutputに変更されます。

関連する問題