2012-02-09 19 views
0

私は単純な8ビットの2の補数を設計しようとしています。ここに私のコードは次のとおりです。モジュールを別のモジュールの内部で使用するにはどうすればよいですか?

twos_complement_of_8bits.v

//`include "complementor.v" 

module twos_complement_of_8bits(output [7:0] out, input [7:0] in); 
integer i; 
initial 
    begin 
    for(i = 0; i <= 7; i = i + 1) 
     complementor C(out[i], in[i]); 
    end 
    assign out = out + 1; 
endmodule 

私は、この行でエラーました:

complementor C(out[i], in[i]); 
Syntax error near 'C' found. 

私はそれをどのように修正することができますか?

答えて

2

は、私はあなたが以下のように、あなたのtwos_complement_of_8bitsを変更、あなたのcomplementorモジュールを排除することができると思います。それはあなたが欲しいの出力が得られない場合は

module twos_complement_of_8bits (output [7:0] out, input [7:0] in); 
    assign out = ~in + 1; 
endmodule 

は、いくつかの出力期待値を示してください。

さらに複雑な状況では、モジュールのインスタンスの配列を配置するか、generateブロックを使用できます。

UPDATE:ここgenerateブロックを使用する方法の例である:

module twos_complement_of_8bits (output [7:0] out, input [7:0] in); 
    wire [7:0] out_ones; 
    genvar i; 
    generate 
     for (i=0; i<=7; i=i+1) begin 
      complementor C[i] (out_ones[i], in[i]); 
     end 
    endgenerate 
    assign out = out_ones + 1; 
endmodule 
+1

私の設計は8つの同一のモジュールにパーティションであるべきです。各ビットは各ビットを補完して1を加算します。最終的な設計例:入力が11011100の場合、出力は00100100になります。応答BTWをありがとう! –

+1

@ Eng.Fouad、8つの同一のモジュールを使用するというあなたの制約は、宿題の問題のように任意のようです。一般に、Verilogは@toolicが書いたような一次元ベクトルで最もよく使用されます。 2Dベクトルを使用すると、モジュールの境界を越えて容易に渡せないメモリが生成されます。また、複数の1ビットモジュールをインスタンス化するために 'generate'ステートメントを使用することは、厄介でエラーが起こりやすく、他の方法がない場合を除いて避けるべきです。これらはVerilog言語の主な制限です。しかし、ローマでは、ローマ人のようにしてください。 –

+1

要求通りに、8つのモジュールを使うために 'generate'ブロックで自分の答えを更新しました。その入力に必要な出力が得られます。 – toolic

関連する問題