私はすでにここで検索していくつかの洞察を見出しましたが、この種のループを使用する概念のいくつかが私を逃してしまいます。ここでは半加算器と全加算器のための私のモジュールです:ブロック/ループを生成してリップルキャリー加算器を作成する
module HalfAdder(A, B, Cout, S);
input A, B;
output Cout, S;
assign Cout = A & B;
assign S = A^B;
endmodule
module FullAdder(FA_A, FA_B, Cin, FA_S, Cout);
input FA_A, FA_B, Cin;
output FA_S, Cout;
wire ha0_S, ha0_C, ha1_C;
HalfAdder ha0(.A( FA_A ),
.B( FA_B ),
.Cout(ha0_C),
.S(ha0_S)
);
HalfAdder ha1(.A( Cin ),
.B( ha0_S),
.Cout(ha1_C),
.S(FA_S )
);
assign Cout = ha0_C | ha1_C;
endmodule
そして、ここでは私のRCAコードは次のとおりです。
module RCA8(A_8, B_8, Cin, Cout, S_8);
input [7:0] A_8, B_8;
input Cin;
output Cout;
output [7:0] S_8;
wire [8:0] c;
assign c[0] = Cin;
genvar i;
generate
for (i = 0; i < 8; i=i+1)
begin : make_fadders
FullAdder fa( .FA_A(A_8[i]),
.FA_B(B_8[i]),
.Cin( c[i] ),
.FA_S(S_8[i]),
.Cout(c[i+1])
);
end
endgenerate
assign Cout = c[8];
endmodule
私はシミュレータ(ISIM)を実行するために取得しようとしています。チェック構文を実行すると機能しますが、プログラミングファイルを生成しようとすると失敗し、マッピングを実行すると警告が返されます。 iSimは、エラー861:設計をリンクできませんでした。マッピングはそれと関係がありませんか?
私が実際に理解していないことの1つは、実装および/またはシミュレーションビューでは、RCAのドロップダウンツリーに1つのfullAdderモジュールしか表示されないということです。それは8を示すべきか?それともこれはどういう仕組みですか?
この便利なツールを使用する方法を習得するのではなく、代わりに8つのフェーダーを手作業で作っているので(割り当てが示すように...)、この作業をしたいと思っています。
その他の詳細:Windows 10、32ビットのProject Navigatorザイリンクス14.7
任意の助け感謝を使って!
ありがとうございました!私はまだ生成ブロックがどのように動作するかについていくつかの答えが必要ですが、私の実装に潜在的な問題はありますか? – rub3z
あなたのコードに基づいて、私は8つのmake_fadderのインスタンスを見ると思います。各make_fadderインスタンスには1つのFullAdderがあります。それはあなたが見ているものではありませんか? –
@ rub3z KamilRymarzの答えを見てください。 –