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

Testbench interaktif menggunakan Tcl

Testbench interaktif adalah setup simulator di mana input ke perangkat yang diuji (DUT) disediakan oleh operator saat testbench sedang berjalan. Paling sering, ini berarti Anda memasukkan perintah di konsol simulator untuk memberikan stimulus kepada DUT.

Meskipun Anda harus selalu membuat testbench yang memeriksa sendiri, testbench interaktif bisa menjadi suplemen yang bagus. Lebih mudah melakukan pengujian ad-hoc dengan testbench interaktif, daripada mengubah kode testbench self-checking.

Sering kali, Anda akan menemukan masalah di lab yang ingin Anda coba di testbench. Dengan testbench interaktif, dapat semudah mengetikkan urutan input yang telah diamati untuk mereplikasi perilaku yang tidak diinginkan dalam simulator.

Tcl berinteraksi dengan VHDL

Kebanyakan simulator VHDL menggunakan Tcl sebagai bahasa konsol mereka. Simulator memiliki banyak perintah khusus vendor, tetapi kabar baiknya adalah bahwa mereka dapat diperlakukan seperti perintah Tcl lainnya. Anda dapat menggunakan Tcl untuk membuat skrip yang kompleks dan sebagian besar portabel untuk mengelola dan mendukung meja uji VHDL Anda.

Mengubah sinyal VHDL dari Tcl

Untuk berinteraksi dengan VHDL, kita perlu menemukan perintah untuk mengubah nilai sinyal. Di ModelSim, ini adalah perintah "force". Sebagaimana ditentukan dalam dokumen referensi perintah, sinopsis untuk perintah tersebut adalah:

force {<object_name> <value> [[@]<time_info>][, <value> [@]<time_info>]...
[-deposit | -drive | -freeze] [-cancel [@]<time_info>] [-repeat [@]<time_info>]

Sakelar yang ingin Anda gunakan adalah tanda “-deposit”. Ini mengubah nilai sinyal VHDL secara instan, tetapi mengizinkan driver VHDL atau Tcl lain untuk mengubahnya menjadi sesuatu yang lain di lain waktu.

Dengan mengabaikan opsi yang tidak kita gunakan, sinopsis yang disederhanakan terlihat seperti ini:

force -deposit <signal_name> <value>

Pemicu VHDL

Sekarang kita tahu bagaimana mengontrol sinyal VHDL dari Tcl, kita perlu membuat semacam proses penerima di meja tes VHDL kita. Kode di bawah ini menunjukkan contoh minimal dari testbench semacam itu.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity interactive is
end interactive; 

architecture sim of interactive is

  -- Controlled by Tcl
  signal trigger : std_logic := '0';

begin

  process is
  begin

    wait until trigger = '1';
    report "Triggered!";

  end process;

end architecture;

Proses akan bangun ketika trigger sinyal berubah dari sesuatu menjadi '1' . Ini akan mencetak "Dipicu!" ke konsol saat ini terjadi, memungkinkan kami menguji konsep pengendalian proses VHDL dari Tcl.

Saya melakukan hal itu adalah konsol ModelSim. Perintah yang dikeluarkan, serta output, dapat dilihat dalam transkrip di bawah ini.

VSIM 1> run 10 ns;
VSIM 2> force -deposit /trigger '1'
VSIM 3> run 0 ns;
# ** Note: Triggered!
#    Time: 10 ns  Iteration: 0  Instance: /interactive
VSIM 4> force -deposit /trigger '0'
VSIM 5> run 10 ns;

Saya menjalankan testbench selama 10 nanodetik setelah memulai simulasi.

Kemudian, saya memaksa trigger sinyal ke '1' . Di baris berikutnya, saya menunggu 0 nanodetik. Tujuannya adalah untuk membuat siklus delta. Saya ingin prosesnya dipicu, tetapi saya tidak ingin waktu simulasi berlalu.

Akhirnya, saya memaksa trigger sinyal kembali ke '0' sebelum melanjutkan testbench.

Kita dapat melihat bahwa proses VHDL bangun setelah baris "run 0 ns", dan dicetak "Dipicu!" ke konsol.

Membaca nilai sinyal VHDL dalam tcl

Untuk membaca nilai sinyal di  ModelSim,  Anda dapat menggunakan perintah “periksa”. Misalnya kita dapat membaca nilai trigger sinyal dengan menggunakan perintah ini di konsol ModelSim:

VSIM 6> examine /trigger
# 0

Anda ingin menetapkan nilai ke variabel Tcl saat menggunakan "memeriksa" dalam skrip. Mari kita coba ini di konsol ModelSim:

VSIM 7> set triggerVal [examine /trigger]
# 0

Kemudian kita bisa misalnya mencetak variabel dengan menggunakan perintah Tcl “puts”:

VSIM 8> puts "triggerVal: $triggerVal"
# triggerVal: 0

Menghentikan simulator setelah setiap pengujian

Cara termudah untuk menjalankan tes cukup lama agar DUT bereaksi, adalah dengan menjalankan simulator untuk nilai waktu yang tetap. Misalnya, jika DUT harus bereaksi setelah dua siklus clock, dan periode clock adalah 10 nanodetik, kita akan menggunakan perintah “run 20 ns” dalam skrip Tcl kita.

Jika DUT tidak memiliki waktu reaksi tetap, pernyataan VHDL dapat digunakan untuk menghentikan simulasi dan menyerahkan kontrol ke fungsi panggilan balik Tcl. Di ModelSim, ini berarti menyetel breakpoint dari skrip Tcl Anda dengan menggunakan perintah “kapan”:

when [[-fast] [-id <id#>] [-label <label>] {<when_condition_expression>} {<command>}]

Anda juga harus mendefinisikan fungsi panggilan balik "onBreak" di Tcl yang akan dijalankan saat breakpoint terkena. Fungsi “onBreak” ditentukan dalam referensi perintah ModelSim.

Kelemahan pengujian berbasis Tcl

Ada kelemahan menggunakan testbenches yang sangat bergantung pada skrip Tcl. Yang paling jelas adalah masalah kecepatan dan portabilitas.

Testbenches yang digerakkan oleh Tcl bekerja dengan memulai dan menghentikan simulator beberapa kali untuk berinteraksi dengan kode VHDL. Memulai dan menghentikan simulasi untuk menjalankan fungsi Tcl di antaranya, lebih memakan waktu daripada menjalankan testbench VHDL secara terus-menerus. Sementara Tcl adalah bahasa yang ditafsirkan, VHDL dikompilasi dalam simulator dan berjalan jauh lebih cepat daripada Tcl.

Sementara Tcl portabel untuk simulator lain, perintah khusus simulator yang harus Anda gunakan, tidak. Bahkan jika Anda menemukan perintah yang setara di simulator lain, mereka mungkin bekerja secara berbeda. Vendor simulator membuat seperangkat aturan mereka sendiri untuk perintah yang mereka dukung. Oleh karena itu, testbench yang digerakkan oleh Tcl harus dianggap kurang portabel daripada testbench VHDL murni.

Kursus VHDL dan FPGA baru

* Saya membuat kursus VHDL dan FPGA baru yang akan menyelami testbenches secara ekstensif. Anda akan belajar cara membuat desain FPGA dari awal. Setelah menyelesaikan kursus, Anda akan mengetahui cara membuat testbench pemeriksaan mandiri, dan cara menggunakan kembali kode untuk membuat testbench interaktif.

* Diperbarui 12 Oktober 2020: Saya telah menyelesaikan kursus. Klik gambar di bawah untuk mempelajari lebih lanjut.

Produk yang akan kita buat adalah modul pengontrol LED dot matrix. Kami akan menggunakan papan pengembangan iCEstick Lattice seharga $49. Pada akhirnya, kami akan menerapkan desain pada papan tempat memotong roti. Anda akan dapat mengetik pada keyboard di komputer Anda, dan karakter akan muncul di layar LED dot matrix yang dikendalikan oleh FPGA.

Baca selengkapnya tentang kursus Dot Matrix VHDL dan FPGA di sini!

Buka:

Untuk diputuskan .


VHDL

  1. Tutorial - Pengantar VHDL
  2. Contoh Konversi VHDL
  3. Pernyataan Prosedur - Contoh VHDL
  4. Catatan - Contoh VHDL
  5. Ditandatangani vs. Tidak Ditandatangani di VHDL
  6. C# menggunakan
  7. Cara membuat daftar string di VHDL
  8. Cara membuat testbench pemeriksaan mandiri
  9. Proyektor Laser Interaktif Menggunakan Sensor Zigbee
  10. Menggunakan Penggilingan sebagai Mesin Bubut