Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Verilog

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.

Log Simulasi
 ncsim> run a=0x0 b=0x0 c_in=0x0 c_out=0x0 sum=0x0 a=0x4 b=0x1 c_in=0x1 c_out=0x0 sum=0x6 a=0x3 b=0xd c_in=0x1 c_out=0x1 sum=0x1 a=0x5 b=0x2 c_in=0x1 c_out=0x0 sum=0x8 a=0xd b=0x6 c_in=0x1 c_out=0x1 sum=0x4 a=0xd b=0xc c_in=0x1 c_out=0x1 sum=0xa ncsim: *W,RNQUIE: Simulation is complete. 

Verilog

  1. Menguasai Verilog: Tutorial Lengkap untuk Desain Sirkuit Digital
  2. Menguasai Konkatenasi Verilog: Panduan Praktis
  3. Memahami Penugasan Verilog: Jenis, Sintaks, dan Praktik Terbaik
  4. Perbedaan Kunci Penugasan Blokir dan Non-Blokir Verilog
  5. Menguasai Fungsi Verilog untuk Desain RTL yang Efisien
  6. Memahami Tugas Verilog: Fungsi vs Tugas, Sintaks, dan Penggunaan
  7. Generator Jam Verilog: Panduan Desain dan Implementasi
  8. Menguasai Fungsi Matematika Verilog untuk Desain Perangkat Keras yang Efisien
  9. Menguasai $timeformat Verilog: Kontrol Presisi dan Tampilan
  10. Memahami dan Mencetak Timescale Verilog pada Setiap Cakupan