8-bitlik bir Ripple Carry Adder'ın işlevselliğini her bir kombinasyonu deneyen bir test tezgahıyla test ediyorum. Bazı nedenlerden dolayı, A ve B değerlerinin toplamı bir sonraki saat döngüsünde hesaplanır. Bunun neden olduğundan emin değilim.İlk olarak, gecikmeler yüzünden olduğunu farz ettim, ancak gecikmeleri değiştirdiğimde hata hala oluşuyor. İşteTam Toplayıcıyla Toplam Kapalı Bir Saat Döngüsü
//one_adder.v
module One_adder(a,b,cin,sum,carry);
output carry,sum;
input a,b,cin;
wire w0,w1,w2;
xor(sum,a,b,cin);
and(w0,a,b);
and(w1,a,cin);
and(w2,cin,b);
or(carry,w0,w1,w2);
endmodule;
//Eight_adder.v
module Eight_adder(A,B,S,Carry);
output [7:0]S, Carry;
input [7:0]A, B;
//wire [7:0]w;
wire overflow;
One_adder add0(.carry(Carry[0]), .sum(S[0]), .a(A[0]), .b(B[0]), .cin(Carry[0]));
One_adder add1(.carry(Carry[1]), .sum(S[1]), .a(A[1]), .b(B[1]), .cin(Carry[1]));
One_adder add2(.carry(Carry[2]), .sum(S[2]), .a(A[2]), .b(B[2]), .cin(Carry[2]));
One_adder add3(.carry(Carry[3]), .sum(S[3]), .a(A[3]), .b(B[3]), .cin(Carry[3]));
One_adder add4(.carry(Carry[4]), .sum(S[4]), .a(A[4]), .b(B[4]), .cin(Carry[4]));
One_adder add5(.carry(Carry[5]), .sum(S[5]), .a(A[5]), .b(B[5]), .cin(Carry[5]));
One_adder add6(.carry(Carry[6]), .sum(S[6]), .a(A[6]), .b(B[6]), .cin(Carry[6]));
One_adder add7(.carry(Carry[7]), .sum(S[7]), .a(A[7]), .b(B[7]), .cin(Carry[7]));
assign overflow= (A[7]&B[7]&~Carry[7]) | (~A[7]&~B[7]&Carry[7]);
endmodule
//tBench.v
//`timescale 1 ns/ 1 ns
module tBench;
wire [7:0]sum;
wire cin, co;
reg[7:0] A, B; // the different combinations
//module Eight_adder(A,B,Cin,S,Cout);
Eight_adder FA(A,B,sum,co);
initial begin
for(A =0; A<255; A=A+1)
begin
#10 // the period in ModelSim: 10ns
for(B=0; B<255; B=B+1)
begin
$display("A=%b,, B=%b,, Sum=%b,,", A,B,{co,sum});
#10
if({co,sum} != (A+B))
$display("Error: A=%b b=%b sum=%b cout=%b\n", A, B, sum, co);
end
end
$finish;
end
endmodule
örnek bir çıktısı olan: İşte benim kodudur
Bir derleme uyarısı alıyorum: 'Aşağıdaki 1 bitlik ifade," Eight_adder "modülünün" Aktarım "modülünün" Aktarım "bölümüne bağlanmıştır. – toolic
Neden tüm geçişi FA'nızı gerçekleştirir mi? Hem cin hem de cout için neden aynı taşıma değerini kullanıyorsunuz? Neden hem "hem de (w1, b, cin)," ve "ve (w2, cin, b) 'yi yapıyorsun? – wilcroft
@wilcroft 1Q), Neden bunu yaptığımı bilmiyorum. 2Q) Çünkü 8-bitlik bir toplayıcı yapmak için seri halinde olan tek bitli toplayıcılar için taşıma işlemi devam ediyor. 3Q) 've (w1, a, cin), 've' ve (w2, b, cin) olmalıydı; Kodu düzenledim –