2017-11-16 8 views
1

2つの半加算器モジュールで基本的な全加算器を設計し、それをテストベンチでテストしようとしています。コンパイルエラーはありませんが、出力(波形)では、SumとCarryのZとXが得られます。私は立ち往生していて、このエラーを修正するために、次に見なければならないことがわからない。基本的な全加算器の出力で "ZとX"を得る

これを修正するために、次のステップ(またはいくつかのポインタ)をチェックする必要がありますので、参考にしてください。

ここでは全加算器のVerilogコードです:上記のため

module half_adder(x,y,S,C); 
 
input x,y; 
 
output S,C; 
 

 
xor G1(S,x,y); 
 
and G2(C,x,y); 
 

 
endmodule 
 

 
module full_adder(x,y,z,S,C); 
 
input x,y,z; 
 
output S,C; 
 
wire S1,C1,C2; 
 

 
half_adder HA1(S1,C1,x,y); 
 
half_adder HA2(S,C2,S1,z); 
 
or G3(C,C1,C2); 
 

 
endmodule

テストベンチ:

module tb_fulladder; 
 
wire S,C; 
 
reg x,y,z; 
 

 
full_adder DUT(x,y,z,S,C); 
 

 
initial 
 
begin 
 
x=1'b0;y=1'b0;z=1'b0; 
 
#50 
 
x=1'b0;y=1'b0;z=1'b1; 
 
#50 
 
x=1'b0;y=1'b1;z=1'b0; 
 
#50 
 
x=1'b0;y=1'b1;z=1'b1; 
 
#50 
 
x=1'b1;y=1'b0;z=1'b0; 
 
#50 
 
x=1'b1;y=1'b0;z=1'b1; 
 
#50 
 
x=1'b1;y=1'b1;z=1'b0; 
 
#50 
 
x=1'b1;y=1'b1;z=1'b1; 
 
end 
 

 
initial 
 
#500 
 
$finish; 
 

 
endmodule

彼は、波形であるRE:

enter image description here

答えて

0

あなたはhalf_adderにあなたの接続でミスを犯しました。ポート信号の順序を変更する必要があります。変更:へ

half_adder HA1(S1,C1,x,y); 
half_adder HA2(S,C2,S1,z); 

half_adder HA1 (x,y,S1,C1); 
half_adder HA2 (S1,z,S,C2); 

私は内部フルおよび半加算信号の波形を見て、これを発見しました。

この理由から、connection-by-positionの代わりにconnection-by-nameを使用する方が良い理由があります。たとえば、次のように指定します。

half_adder HA1 (.x(x), .y(y), .S(S1), .C(C1)); 

この構文を使用すると、ポートの順序は関係ありません。無料のIEEE Std 1800-2012,23.3.2 モジュールインスタンシエーション構文を参照してください。

+1

ありがとうございます.. – sundar

関連する問題