masalah dengan 6 bit adder

0

Saya sedang mengerjakan sirkuit Subtractor menggunakan sirkuit Adder. Saya harus melakukan xy.

Misalkan x = 111111, y = 100000 Menggunakan sirkuit penambah 6 bit yang saya buat bendera melimpah datang menjadi 0 tetapi ketika saya menyelesaikannya menggunakan pena dan kertas melimpah menjadi 1.

Ketika x = 000000 dan y = 000000 bendera Carry out akan menjadi 1 tetapi menggunakan pena dan kertas maka akan menjadi 0.

Saya telah menggunakan logika dasar yang digunakan untuk membuat sirkuit Adder dan untuk evaluasi flag.

Saya membuat 15 kasus uji. Hanya dua kasus uji ini yang tidak setuju dengan tanda ini. Jawaban akhir yang mereka tampilkan benar.

Perhitungan yang saya lakukan pada pulpen dan kertas:

x = 111111, y = 100000
y'+1 = 100000

x + y' + 1 = 011111 with Carry out = 1 and overflow = ex-or of 1 and 0 = 1

x = 000000, y = 000000
y'+1 = 000000

x + y' + 1 = 000000 with carry out = 0 and overflow = ex-or of 0 and 0 = 0

Kesalahan apa yang mungkin saya lakukan?

Saya pikir itu harus melakukan sesuatu dengan komplemen 2s karena komplemen 2s dari 0000000 dan 100000 adalah angka sendiri.

Saya telah membuat sirkuit di vivado.

Kode saya adalah ini: Full 1bit Adder:

module FullAdder( a,b,cin,s,cout ) ;
input wire a,b,cin ;
output wire s,cout ;
assign s = cin^a^b; 
assign cout = (b&cin) | (a&cin) | (a&b) ;
endmodule 

Kode untuk 6 bit adder:

`timescale 1ns/ 1ps
module sixbit_ripple_adder
(
input wire[5:0] x,y,
input wire sel,
output wire overflow, c_out,
output wire[5:0] sum
) ;

wire c1,c2,c3,c4,c5,c6 ;

FullAdder f1 ( .a(x[0]) , .b(y[0]^sel) , .cin(sel) , .s(sum[0]) , .cout(c1) ) ;
FullAdder f2 ( .a(x[1]) , .b(y[1]^sel) , .cin(c1) , .s(sum[1]) , .cout(c2) ) ;
FullAdder f3 ( .a(x[2]) , .b(y[2]^sel) , .cin(c2) , .s(sum[2]) , .cout(c3) ) ;
FullAdder f4 ( .a(x[3]) , .b(y[3]^sel) , .cin(c3) , .s(sum[3]) , .cout(c4) ) ;
FullAdder f5 ( .a(x[4]) , .b(y[4]^sel) , .cin(c4) , .s(sum[4]) , .cout(c5) ) ;
FullAdder f6 ( .a(x[5]) , .b(y[5]^sel) , .cin(c5) , .s(sum[5]) , .cout(c6) ) ;
assign c_out = c6 ;
assign overflow = c5^c6 ;

endmodule

Nilai sel untuk kedua kasus uji adalah 1.

Apa yang saya lewatkan?

shikhar
sumber

Jawaban:

1

Cara saya melakukan perhitungan menggunakan pena dan kertas itu salah.

Untuk sel = 1,

Ketika x = 111111 dan y = 100000

y '= 011111

Saya menambahkan y 'dan 1 pertama dan kemudian menambahkan x. Cara ini salah.

Angka biner ditambahkan sedikit demi sedikit. Jadi sel bit yang 1 harus ditambahkan dengan bit signifikan terkecil terlebih dahulu dan seterusnya. Tambahkan x, y 'dan sel bersama.

  111111
  011111
      +1
  ______
1 011111 ,  Value of Overflow = 1 ex-or 1 = 0 ( Correct ) 


If I add y' and 1 together first then 
  011111
       1
  ______
  100000

  111111
  100000
  ______
1 011111   , Value of Overflow = 1 ex-or 0 = 1 ( Incorrect ) 

Demikian pula untuk kasus lainnya.

shikhar
sumber
+1 untuk memposting solusi Anda di kotak jawaban. Anda dapat "menerima" jawaban Anda sendiri untuk menandainya dengan benar dan menunjukkan bahwa jawabannya sudah terpecahkan.
Transistor