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

Verilog - Dalam kulit kacang

Semua kode perilaku ditulis di dalam module dan endmodule . Jadi, desain digital apa pun yang ingin Anda buat, itu akan masuk ke dalam module memblokir. Mungkin atau mungkin tidak memiliki port yang ditentukan - izinkan sinyal masuk ke blok sebagai input atau keluar dari blok sebagai output .

Modul

Modul kosong pada contoh di bawah ini disebut testbench . Anda dapat memberi nama apa pun yang Anda suka, kecuali bahwa itu harus berupa alfanumerik, dan dapat berisi '_'.

testbench module
  
  
module testbench;

endmodule

  

Mari kita lihat modul lain. Ini memiliki beberapa sinyal (d, clk, rstb ) dideklarasikan sebagai input dan q dideklarasikan sebagai output.

dff ports
  
  
module dff (input d,
                  clk,
                  rstb,
            output q);
endmodule

  

Tipe Data

Sekarang kita telah melihat bagaimana sebuah modul terlihat, mari kita lihat apa yang dapat dimasukkan ke dalam sebuah modul, dengan melihat modul testbench sekali lagi. Ada dua jenis tipe data di Verilog:

  • reg
  • kawat
Sebuah reg tipe data digunakan untuk menyimpan nilai seperti variabel, sedangkan wire hanya analog dengan kabel listrik, yang harus didorong terus menerus. Jadi biasanya wire digunakan untuk menghubungkan antara beberapa modul, dan sinyal lainnya.

  
  
module testbench;
	
	reg d;
	reg rst_b;
	reg clk;
	
	wire q;
endmodule

  

Tugas

Verilog memiliki tiga blok dasar :

always @ (kondisi ) selalu dijalankan jika kondisi terpenuhi
initial hanya akan dieksekusi sekali, saat simulasi dimulai
assign [Kiri] =[Kanan] Nilai LHS akan diperbarui setiap kali RHS berubah

Ada beberapa aturan yang perlu diingat saat menulis Verilog:

  • reg dapat ditetapkan hanya dalam initial dan always blok
  • wire dapat diberi nilai hanya melalui assign pernyataan
  • Jika ada beberapa pernyataan dalam inisial/selalu blok, mereka harus dibungkus dengan begin .. end

  
  
module testbench;
	
	reg d;
	reg rst_b;
	reg clk;
	
	wire q;
	
	initial begin
		d = 0;
		rst_b = 0;
		clk = 0;
		
		#100 $finish;
	end
	
	always begin
		#10 clk = ~clk;
	end
endmodule

  

Catatan berikut dari contoh yang ditunjukkan di atas:

  • Karena ada beberapa baris untuk initial blokir, mulai dan akhir digunakan
  • Sinyal d, rst_b, dan clk ditetapkan dalam blok awal, karena bertipe reg
  • Kode di dalam blok awal akan dieksekusi pada 0ns yaitu awal simulasi
  • Karena tidak ada syarat untuk always blok, itu akan berjalan seperti loop tak terbatas di C
  • # digunakan untuk merepresentasikan waktu tunda. #10 memberi tahu simulator untuk mempercepat waktu simulasi sebanyak 10 unit.
  • clk = ~clk; akan mengaktifkan nilai jam, dan karena #10 diletakkan sebelum pernyataan, jam akan berubah setelah setiap 10 satuan waktu.
  • $finish adalah cara untuk mengakhiri simulasi. Dalam hal ini, itu akan berjalan selama 100 unit waktu dan keluar.

Verilog

  1. Tutorial Verilog
  2. Rangkaian Verilog
  3. Tugas Verilog
  4. Pemblokiran &Non-Pemblokiran Verilog
  5. Fungsi Verilog
  6. Tugas Verilog
  7. Lingkup Referensi Hirarki Verilog
  8. Generator Jam Verilog
  9. Fungsi Matematika Verilog
  10. Format Waktu Verilog