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

Verilog Penambah Penuh

Penjumlah adalah komponen digital yang melakukan penambahan dua angka. Ini adalah komponen utama di dalam ALU prosesor dan digunakan untuk menambah alamat, indeks tabel, pointer buffer, dan di banyak tempat lain di mana penambahan diperlukan.

Sebuah penambah penuh menambahkan input carry bersama dengan bilangan biner input lainnya untuk menghasilkan jumlah dan output carry.

Tabel Kebenaran

A B Cin Cout Jumlah 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

Contoh penambah 4-bit ditunjukkan di bawah ini yang menerima dua bilangan biner melalui sinyal a dan b yang keduanya lebar 4-bit. Karena penambah adalah rangkaian kombinasional, penambah dapat dimodelkan di Verilog menggunakan penugasan berkelanjutan dengan assign atau always blok dengan daftar sensitivitas yang terdiri dari semua input. Kode yang ditunjukkan di bawah ini adalah kode dari pendekatan sebelumnya.

  
  
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 always blok yang dieksekusi setiap kali inputnya 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

  

Skema 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 dijumlahkan untuk menghasilkan angka yang lebarnya lebih dari 4 bit, jumlah akan digulung ke nol dan c_out menjadi 1. Misalnya, garis yang disorot dengan warna kuning dijumlahkan menjadi 0x11 dan 4 bit yang lebih rendah ditugaskan ke jumlah 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. Tutorial Verilog
  2. Rangkaian Verilog
  3. Tugas Verilog
  4. Pemblokiran &Non-Pemblokiran Verilog
  5. Fungsi Verilog
  6. Tugas Verilog
  7. Generator Jam Verilog
  8. Fungsi Matematika Verilog
  9. Format Waktu Verilog
  10. Lingkup Skala Waktu Verilog