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

Simulasi Verilog

Verilog adalah bahasa deskripsi perangkat keras dan tidak ada persyaratan bagi desainer untuk mensimulasikan desain RTL mereka agar dapat mengubahnya menjadi gerbang logika. Jadi apa yang perlu disimulasikan?

testbench-setup

Simulasi adalah teknik menerapkan stimulus input yang berbeda ke desain pada waktu yang berbeda untuk memeriksa apakah kode RTL berperilaku dengan cara yang diinginkan. Pada dasarnya, simulasi adalah teknik yang diikuti dengan baik untuk memverifikasi kekokohan desain. Ini juga mirip dengan bagaimana chip yang dibuat akan digunakan di dunia nyata dan bagaimana ia bereaksi terhadap input yang berbeda.

Misalnya, desain di atas mewakili detektor tepi positif dengan input clock dan sinyal yang dievaluasi secara berkala untuk menemukan output pe seperti yang ditunjukkan. Simulasi memungkinkan kita untuk melihat diagram waktu sinyal terkait untuk memahami bagaimana deskripsi desain di Verilog sebenarnya berperilaku.

timing-diagram

Ada beberapa perusahaan EDA yang mengembangkan simulator mampu mencari tahu output untuk berbagai input ke desain. Verilog didefinisikan dalam istilah peristiwa terpisah model eksekusi dan simulator yang berbeda bebas menggunakan algoritme yang berbeda untuk memberikan serangkaian hasil yang konsisten kepada pengguna. Kode Verilog dibagi menjadi beberapa proses dan utas dan dapat dievaluasi pada waktu yang berbeda selama simulasi, yang akan dibahas nanti.

Contoh

Testbench yang disebut tb adalah wadah untuk menampung modul desain. Namun, dalam contoh ini kami tidak menggunakan contoh desain apa pun. Ada dua variabel atau sinyal yang dapat diberi nilai tertentu pada waktu tertentu. clk mewakili jam yang dihasilkan dalam testbench. Ini dilakukan oleh always pernyataan dengan mengganti nilai jam setelah setiap 5ns. initial blok berisi satu set pernyataan yang menetapkan nilai yang berbeda untuk kedua sinyal pada waktu yang berbeda.

  
  
module tb;
  reg clk;
  reg sig;
 
  // Clock generation 
  // Process starts at time 0ns and loops after every 5ns
  always #5 clk = ~clk;   
 
  // Initial block : Process starts at time 0ns
  initial begin            
    // This system task will print out the signal values everytime they change
    $monitor("Time = %0t clk = %0d sig = %0d", $time, clk, sig);
    
    // Also called stimulus, we simply assign different values to the variables
    // after some simulation "delay"
    sig = 0;
    #5 clk = 0;        // Assign clk to 0 at time 5ns
    #15  sig = 1;      // Assign sig to 1 at time 20ns (#5 + #15)
    #20  sig = 0;      // Assign sig to 0 at time 40ns (#5 + #15 + #20)
    #15  sig = 1;      // Assign sig to 1 at time 55ns (#5 + #15 + #20 + #15)
    #10  sig = 0;      // Assign sig to 0 at time 65ns (#5 + #15 + #20 + #15 + #10)
    #20 $finish;       // Finish simulation at time 85ns
  end
endmodule

  

Simulator memberikan output berikut setelah eksekusi testbench di atas.

Log Simulasi
ncsim> run
Time = 0 clk = x sig = 0
Time = 5 clk = 0 sig = 0
Time = 10 clk = 1 sig = 0
Time = 15 clk = 0 sig = 0
Time = 20 clk = 1 sig = 1
Time = 25 clk = 0 sig = 1
Time = 30 clk = 1 sig = 1
Time = 35 clk = 0 sig = 1
Time = 40 clk = 1 sig = 0
Time = 45 clk = 0 sig = 0
Time = 50 clk = 1 sig = 0
Time = 55 clk = 0 sig = 1
Time = 60 clk = 1 sig = 1
Time = 65 clk = 0 sig = 0
Time = 70 clk = 1 sig = 0
Time = 75 clk = 0 sig = 0
Time = 80 clk = 1 sig = 0
Simulation complete via $finish(1) at time 85 NS + 0

Apa yang dimaksud dengan bentuk gelombang simulasi?

Simulasi memungkinkan kami untuk membuang sinyal desain dan testbench ke dalam bentuk gelombang yang dapat direpresentasikan secara grafis untuk menganalisis dan men-debug fungsionalitas desain RTL. Bentuk gelombang yang ditunjukkan di bawah ini diperoleh dari alat EDA dan menunjukkan kemajuan setiap sinyal terhadap waktu dan sama dengan diagram waktu yang ditunjukkan sebelumnya.

simulation example

Setiap perubahan nilai variabel atau net disebut peristiwa pembaruan . Dan proses sensitif terhadap perbarui acara sedemikian rupa sehingga proses ini dievaluasi setiap kali peristiwa pembaruan terjadi dan disebut peristiwa evaluasi . Karena kemungkinan memiliki beberapa proses yang dievaluasi secara sewenang-wenang, urutan perubahan harus dilacak dalam sesuatu yang disebut sebagai antrean peristiwa .

Secara alami, mereka diperintahkan oleh waktu simulasi. Penempatan acara baru pada antrian disebut penjadwalan . Waktu simulasi digunakan untuk merujuk pada nilai waktu yang dipertahankan oleh simulator untuk memodelkan waktu aktual yang diperlukan untuk rangkaian yang disimulasikan. Nilai waktu untuk contoh di atas ditampilkan dalam nanodetik ns dalam diagram waktu.

  
  
module des;
	wire abc;
	wire a, b, c;
	
	assign abc = a & b | c;  // abc is updated via the assign statement (process) whenever a, b or c change -> update event
endmodule

  
simulation example

Refresh Verilog dan lihat contohnya !

Wilayah dalam antrian acara

Antrean acara Verilog secara logis dibagi menjadi lima wilayah, dan acara dapat ditambahkan ke salah satu dari mereka. Namun, itu hanya dapat dihapus dari wilayah aktif.

Acara Deskripsi Aktif Terjadi pada waktu simulasi saat ini, dan dapat diproses dalam urutan apa pun Tidak aktif Terjadi pada waktu simulasi saat ini, tetapi diproses setelah semua aktivitas aktif selesai Nonblocking Dievaluasi pada beberapa waktu sebelumnya, tetapi penugasan dilakukan pada waktu simulasi saat ini setelah peristiwa aktif dan tidak aktif selesai Monitor Diproses setelah semua event aktif, tidak aktif dan non-blocking selesai Masa depan Terjadi pada waktu simulasi mendatang

Siklus simulasi adalah tempat semua peristiwa aktif diproses. Standar menjamin urutan penjadwalan tertentu kecuali untuk beberapa kasus dan. Misalnya, pernyataan di dalam blok awal-akhir hanya akan dieksekusi sesuai urutan kemunculannya.

  
  
module tb;
	reg [3:0] a;
	reg [3:0] b;
	
	initial begin		// Statements are executed one after the other at appropriate simulation times
		a = 5;			// At time 0ns, a is assigned 5
		b = 2;			// In the same simulation step (time 0ns), b is assigned 2
		
		#10 a = 7;		// When simulation advances to 10ns, a is assigned 7
	end
endmodule

  

Antrian acara mendefinisikan tugas itu ke b harus terjadi setelah penugasan ke a .


Verilog

  1. Tutorial Verilog
  2. Rangkaian Verilog
  3. Tugas Verilog
  4. Pemblokiran &Non-Pemblokiran Verilog
  5. Fungsi Verilog
  6. Tugas Verilog
  7. Verilog `ifdef Kompilasi Bersyarat
  8. Semantik Penjadwalan Verilog
  9. Generator Jam Verilog
  10. Verilog Menampilkan Tugas