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

Teknik Simulasi Verilog untuk Verifikasi RTL yang Handal

Verilog adalah bahasa deskripsi perangkat keras dan tidak ada persyaratan untuk desainer untuk mensimulasikan desain RTL mereka agar dapat mengonversinya menjadi gerbang logika. Jadi apa kebutuhan untuk mensimulasikan?

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

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

Ada beberapa perusahaan EDA yang mengembangkan simulator yang mampu menentukan output untuk berbagai input ke desain. Verilog didefinisikan dalam bentuk model eksekusi discrete event dan simulator berbeda bebas menggunakan algoritma yang berbeda untuk memberikan pengguna serangkaian hasil yang konsisten. Kode Verilog dibagi menjadi beberapa proses dan thread dan mungkin 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 instance desain apa pun. Terdapat dua variabel atau sinyal yang dapat ditugaskan nilai tertentu pada waktu tertentu. clk mewakili clock yang dihasilkan dalam testbench. Ini dilakukan oleh pernyataan always dengan bergantinya nilai clock setelah setiap 5ns. Blok initial berisi serangkaian pernyataan yang menugaskan nilai yang berbeda pada 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 itu gelombang simulasi?

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

Setiap perubahan nilai variabel atau jaringan disebut update event. Dan proses sensitif terhadap update events sehingga proses ini dievaluasi setiap kali update event terjadi dan disebut evaluation event. Karena kemungkinan adanya beberapa proses yang dievaluasi secara sembarangan, urutan perubahan harus dilacak dalam sesuatu yang disebut event queue.

Secara alami, mereka diurutkan berdasarkan waktu simulasi. Penempatan peristiwa baru pada antrian disebut scheduling. Waktu simulasi digunakan untuk merujuk pada nilai waktu yang dipertahankan oleh simulator untuk memodelkan waktu aktual yang dibutuhkan oleh 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

Segarkan Verilog dan lihat contoh !

Wilayah dalam event queue

Antrian peristiwa Verilog secara logis dibagi menjadi lima wilayah, dan peristiwa dapat ditambahkan ke salah satunya. Namun, dapat dihapus hanya dari wilayah active.

EventsDescription
ActiveTerjadi pada waktu simulasi saat ini, dan dapat diproses dalam urutan apa pun
InactiveTerjadi pada waktu simulasi saat ini, tetapi diproses setelah semua active events selesai
NonblockingDievaluasi pada waktu sebelumnya, tetapi penugasan dilakukan pada waktu simulasi saat ini setelah active dan inactive events selesai
MonitorDiproses setelah semua active, inactive dan non-blocking events selesai
FutureTerjadi pada waktu simulasi di masa depan

Siklus simulasi adalah tempat semua active events diproses. Standar menjamin urutan penjadwalan tertentu kecuali beberapa kasus. Misalnya, pernyataan di dalam blok begin-end hanya akan dieksekusi dalam urutan yang muncul.

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

Event queue menentukan bahwa penugasan ke b harus terjadi setelah penugasan ke a.

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. Verilog `ifdef: Kompilasi Bersyarat Dijelaskan
  8. Memahami Semantik Jadwal Verilog: Waktu, Peristiwa, dan Urutan Eksekusi
  9. Generator Jam Verilog: Panduan Desain dan Implementasi
  10. Menguasai Tugas Tampilan Verilog: Debugging dan Pencatatan yang Efisien