Panduan Desain dan Implementasi Full Adder Verilog
Sebuah penambal adalah komponen digital yang melakukan penambahan dua bilangan. Ini adalah komponen utama di dalam ALU dari prosesor dan digunakan untuk meningkatkan alamat, indeks tabel, pointer buffer dan di banyak tempat lain di mana penambahan diperlukan.
Sebuah full adder menambahkan masukan carry bersama dengan masukan bilangan biner lainnya untuk menghasilkan jumlah dan output carry.
Tabel Kebenaran
A
B
Cin
Cout
Sum
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
Desain
Sebuah contoh penambal 4-bit ditunjukkan di bawah ini yang menerima dua bilangan biner melalui sinyal a dan b yang keduanya 4-bit lebar. Karena penambal adalah rangkaian kombinatorial, ia dapat dimodelkan dalam Verilog menggunakan tugas berkelanjutan dengan assign atau blok always dengan daftar sensitivitas yang terdiri dari semua input. Kode yang ditunjukkan di bawah ini adalah pendekatan pertama.
module fulladd ( input [3:0] a, input [3:0] b, input c_in, output c_out, output [3:0] sum); assign {c_out, sum} = a + b + c_in; endmodule
Kode yang ditunjukkan di bawah ini menggunakan blok always yang dieksekusi setiap kali salah satu input-nya mengubah nilai.
module fulladd ( input [3:0] a, input [3:0] b, input c_in, output reg c_out, output reg [3:0] sum); always @ (a or b or c_in) begin {c_out, sum} = a + b + c_in; end endmodule
Skematik Perangkat Keras
Testbench
module tb_fulladd; // 1. Declare testbench variables reg [3:0] a; reg [3:0] b; reg c_in; wire [3:0] sum; integer i; // 2. Instantiate the design and connect to testbench variables fulladd fa0 ( .a (a), .b (b), .c_in (c_in), .c_out (c_out), .sum (sum)); // 3. Provide stimulus to test the design initial begin a <= 0; b <= 0; c_in <= 0; $monitor ("a=0x%0h b=0x%0h c_in=0x%0h c_out=0x%0h sum=0x%0h", a, b, c_in, c_out, sum); // Use a for loop to apply random values to the input for (i = 0; i < 5; i = i+1) begin #10 a <= $random; b <= $random; c_in <= $random; end end endmodule
Perhatikan bahwa ketika a dan b ditambahkan menghasilkan angka yang lebih lebar dari 4 bit, jumlah akan kembali ke nol dan c_out menjadi 1. Misalnya, baris yang disorot dalam kuning menghasilkan 0x11 dan 4 bit bawah ditugaskan ke sum dan bit#4 ke c_out.