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

Counter 4-bit: Perhitungan Biner Efisien dari 0 hingga 15

Counter 4-bit mulai bertambah dari 4'b0000 hingga 4'h1111 lalu kembali ke 4'b0000. Ia akan terus menghitung selama diberikan jam yang berjalan dan reset dipertahankan tinggi.

Pembulasan ulang terjadi ketika bit paling signifikan dari penambahan akhir dibuang. Ketika counter berada pada nilai maksimum 4'b1111 dan menerima satu permintaan hitung lagi, counter mencoba mencapai 5'b10000 tetapi karena hanya mendukung 4-bit, MSB akan dibuang menghasilkan 0.

 0000 0001 0010 ... 1110 1111 rolls over 0000 0001 ... 

Desain ini berisi dua input, satu untuk jam dan satu lagi untuk reset aktif-rendah. Reset aktif-rendah adalah reset di mana desain direset ketika nilai pin reset adalah 0. Terdapat output 4-bit bernama out yang secara esensial menyediakan nilai counter.

Desain Counter Elektronik

  module counter ( input clk, // Declare input port for clock to allow counter to count up input rstn, // Declare input port for reset to allow the counter to be reset to 0 when required output reg[3:0] out); // Declare 4-bit output port to get the counter values // This always block will be triggered at the rising edge of clk (0->1) // Once inside this block, it checks if the reset is 0, if yes then change out to zero // If reset is 1, then design should be allowed to count up, so increment counter always @ (posedge clk) begin if (! rstn) out <= 0; else out <= out + 1; end endmodule  

Modul counter memiliki jam dan reset aktif-rendah (ditandai dengan n) sebagai input dan nilai counter sebagai output 4-bit. Blok always selalu dieksekusi setiap kali jam bertransisi dari 0 ke 1 yang menandakan tepi naik atau tepi positif. Output hanya bertambah jika reset dipertahankan tinggi atau 1, yang dicapai dengan blok if-else. Jika reset ditemukan rendah pada tepi positif jam, maka output direset ke nilai default 4'b0000.

Testbench

Kita dapat membuat instance desain ke dalam modul testbench kami untuk memverifikasi bahwa counter menghitung sesuai harapan.

Modul testbench bernama tb_counter dan port tidak diperlukan karena ini adalah modul teratas dalam simulasi. Namun, kita perlu memiliki variabel internal untuk menghasilkan, menyimpan, dan memancarkan jam dan reset. Untuk tujuan itu, kami telah mendeklarasikan dua variabel tipe reg untuk jam dan reset. Kita juga perlu jaringan tipe wire untuk membuat koneksi dengan output desain, jika tidak akan default menjadi skalar net 1-bit.

Jam dihasilkan melalui blok always yang akan memberikan periode 10 unit waktu. Blok initial digunakan untuk mengatur nilai awal ke variabel internal kami dan memancarkan nilai reset ke desain. Desain diinstancekan dalam testbench dan terhubung ke variabel internal kami, sehingga akan mendapatkan nilai saat kita memancarkannya dari testbench. Kita tidak memiliki pernyataan $display dalam testbench kami dan sehingga kita tidak akan melihat pesan apa pun di konsol.

  module tb_counter; reg clk; // Declare an internal TB variable called clk to drive clock to the design reg rstn; // Declare an internal TB variable called rstn to drive active low reset to design wire [3:0] out; // Declare a wire to connect to design output // Instantiate counter design and connect with Testbench variables counter c0 ( .clk (clk), .rstn (rstn), .out (out)); // Generate a clock that should be driven to design // This clock will flip its value every 5ns -> time period = 10ns -> freq = 100 MHz always #5 clk = ~clk; // This initial block forms the stimulus of the testbench initial begin // 1. Initialize testbench variables to 0 at start of simulation clk <= 0; rstn <= 0; // 2. Drive rest of the stimulus, reset is asserted in between #20 rstn <= 1; #80 rstn <= 0; #50 rstn <= 1; // 3. Finish the stimulus after 200ns #20 $finish; end endmodule  
Log Simulasi
 ncsim> run [0ns] clk=0 rstn=0 out=0xx [5ns] clk=1 rstn=0 out=0x0 [10ns] clk=0 rstn=0 out=0x0 [15ns] clk=1 rstn=0 out=0x0 [20ns] clk=0 rstn=1 out=0x0 [25ns] clk=1 rstn=1 out=0x1 [30ns] clk=0 rstn=1 out=0x1 [35ns] clk=1 rstn=1 out=0x2 [40ns] clk=0 rstn=1 out=0x2 [45ns] clk=1 rstn=1 out=0x3 [50ns] clk=0 rstn=1 out=0x3 [55ns] clk=1 rstn=1 out=0x4 [60ns] clk=0 rstn=1 out=0x4 [65ns] clk=1 rstn=1 out=0x5 [70ns] clk=0 rstn=1 out=0x5 [75ns] clk=1 rstn=1 out=0x6 [80ns] clk=0 rstn=1 out=0x6 [85ns] clk=1 rstn=1 out=0x7 [90ns] clk=0 rstn=1 out=0x7 [95ns] clk=1 rstn=1 out=0x8 [100ns] clk=0 rstn=0 out=0x8 [105ns] clk=1 rstn=0 out=0x0 [110ns] clk=0 rstn=0 out=0x0 [115ns] clk=1 rstn=0 out=0x0 [120ns] clk=0 rstn=0 out=0x0 [125ns] clk=1 rstn=0 out=0x0 [130ns] clk=0 rstn=0 out=0x0 [135ns] clk=1 rstn=0 out=0x0 [140ns] clk=0 rstn=0 out=0x0 [145ns] clk=1 rstn=0 out=0x0 [150ns] clk=0 rstn=1 out=0x0 [155ns] clk=1 rstn=1 out=0x1 [160ns] clk=0 rstn=1 out=0x1 [165ns] clk=1 rstn=1 out=0x2 Simulation complete via $finish(1) at time 170 NS + 0 

Perhatikan bahwa counter direset ke 0 ketika reset aktif-rendah menjadi 0, dan ketika reset dinonaktifkan sekitar 150ns, counter mulai menghitung dari kejadian tepi positif jam berikutnya.

Skematik Perangkat Keras


Verilog

  1. Mengisi Ulang, Mengatur Ulang, dan Mengonfigurasi Ulang Strategi IT Anda untuk Sukses Musim Panas
  2. Counter Biner 3-Bit dengan Timer 555 dan Flip-Flop 4027
  3. Penghitung Biner Sinkron: Desain, Operasi Up/Down, dan Aplikasi Enkoder
  4. Counter Modulus: Algoritma Teroptimasi untuk Sistem Modern
  5. Ring Counter dan Johnson Counter: Desain, Operasi, dan Aplikasi Praktis
  6. Konvergensi IT/OT: Reset Budaya untuk Transformasi Digital Berkelanjutan
  7. Python Counter di collections – Perhitungan, Pembaruan, dan Operasi Aritmetika
  8. Desain Counter Mod-N Verilog: Modul Terparameter dan Testbench
  9. Modul Counter Gray Verilog: Generator Kode Gray 4-bit
  10. Mencegah Reset Windup PID: Strategi untuk Kontrol Proses Terpercaya