2016-03-28 12 views
0

私は初心者であり、generateブロックを使用してリップルキャリー加算を作成したいと考えました。すべての出力を持つリップルキャリー加算器を生成するためにVerilogを使用するX

module ripple_carry_adder(ia, ib, ci, so, co); 

parameter N = 32; 
input[N-1:0] ia; 
input[N-1:0] ib; 
input ci; 
output[N-1:0] so; 
output co; 

wire [N:0] carry; 
assign carry[0] = ci; 

genvar j; 
generate for(j = 0; j < N; j = j + 1) 
begin:r_loop 
    wire t1, t2, t3; 
    xor g1(t1, ia[i], ib[j]); 
    xor g2(so[j], t1, carry[j]); 
    and g3(t2, ia[i], ib[j]); 
    and g4(t3, t1, carry[j]); 
    or g5(carry[j+1], t2, t3); 
end 
endgenerate 

assign co = carry[N]; 
endmodule 

とテストベンチモジュール:だから私は、次のモジュールの書き込み

`include "ripple_carry_adder.v" 
`timescale 1ns/1ps 
module ripple_carry_adder_tb; 

parameter N = 32; 

reg clk; 
reg[N-1:0] a, b; 
wire[N-1:0] sum; 
reg cin; 
wire cout; 

ripple_carry_adder rca(.ia(a), .ib(b), .ci(cin), .so(sum), .co(cout)); 
initial begin 
    #10; 
    a = 0; 
    b = 0; 
    cin = 0; 
    clk = 0; 
    #10; 
end 

always @(posedge clk) 
begin 
    #50; 
    #1 a <= $random() % 1000000; 
    #1 b <= $random() % 1000000; 
end 

always @(a or b) 
    #5 $display("%d + %d = %d", a, b, sum); 

always #5 clk = ~clk; 

endmodule 

をしかし、私は未知のすべてのビットとの結果を得た: result

私がしようと無駄に1時間を費やしてきました間違いを見つける。手伝って頂けますか?

+4

IA'で 'i'を読み取ることによって、default_nettypeについてのより詳しい情報を得ることができます。未定義の変数は単一のビット線を推定する。おそらくあなたは 'j'を意味したでしょうか? – Greg

+0

ああ私の神!どうもありがとう ! –

+0

しかし、このコンパイラが警告を示唆していないことは非常に奇妙です。( –

答えて

1

私のコメントで述べたように、ia[i]iは未定義です。それをjに変更すると、望ましい機能が得られるはずです。

Verilogは宣言されていない変数を1本のビット線として扱いますが、正常なベリフィケーションとみなされ、ほとんど警告を受け取りません。一部のシミュレータには、宣言されていない変数にフラグを付けるオプションがあります。 IEEE Std 1364-2001(別名Verilog-2001)に追加されたユニバーサルオプションもあります。 `define_nettypeマクロを使用して、デフォルトネットタイプを上書きすることができます。 noneに設定すると、マクロ宣言後のすべてのネットを明示的に宣言する必要があります。あなたは[i]は `未定義であるIEEE STD 1364から2001 § 19.2 ` default_nettypeまたはIEEE Std 1800-2012 § 22.8 `default_nettype

+0

ありがとうございました!あなたの詳細な回答から多くを学びました! –

+0

ソースコードの最初に "default_nettype none"を追加して動作します悲しいことに、この場合、余分な "wire"を追加する必要があります。私はケーキを食べて食べることができません:( –

+0

'' default_nettype wire ''を他のファイルのヘッダに入れてマクロをどこに置いても夢中にならないでください。何かをデバッグするのは悪夢になります。 – Greg