Mengakhiri Simulasi Testbench VHDL dengan Elegan
Ketika testbench VHDL mencapai akhir eksekusi yang dimaksudkan, Anda akan ingin simulator berhenti dengan bersih dan, jika memungkinkan, mengembalikan kontrol ke skrip pemanggil. Artikel ini meninjau teknik paling umum dan terpercaya untuk menghentikan simulasi di seluruh simulator VHDL utama, dengan contoh kode untuk ModelSim, Vivado, dan skrip Tcl.
1. Menggunakan Prosedur finish (VHDL‑2008)
Rutin finish dari paket std.env adalah cara termudah untuk mengakhiri testbench yang selesai tanpa kesalahan. Kompilasi hanya testbench dalam VHDL‑2008; RTL dapat tetap dalam standar yang lebih awal.
use std.env.finish; ... SEQUENCER_PROC : process begin -- Masukkan logika testbench di sini wait until stop_condition; report "Calling 'finish'"; finish; end process;
Secara default, finish akan meminta GUI untuk mengonfirmasi penutupan. Jika Anda lebih suka keluar otomatis—terutama dalam mode batch—tambahkan switch -onfinish stop ke vsim:
vsim -onfinish stop work.using_finish_tb
Saat dijalankan dalam mode batch (vsim -c), simulator keluar dengan bersih dan kontrol kembali ke shell, yang ideal untuk skrip regresi:
jonas@ubuntu:~/stop_tb$ vsim -c -do 'vsim work.using_finish_tb; run -all' # … # ** Note: Calling 'finish' # Time: 1 ms Iteration: 0 Instance: /using_finish_tb # End time: 22:58:31 on Jun 21,2020, Elapsed time: 0:00:00 # Errors: 0, Warnings: 8 jonas@ubuntu:~/stop_tb$
Ada dua overload: procedure FINISH; dan procedure FINISH (STATUS : INTEGER);. Nilai status bergantung pada simulator, jadi mengandalkan kode keluar tidak disarankan. Dalam ModelSim Anda dapat secara eksplisit mengatur kode keluar shell dengan exit -code <value> dalam skrip Tcl.
2. Menggunakan Prosedur stop (VHDL‑2008)
Rutin stop menjeda simulasi—bagus untuk inspeksi manual atau dilanjutkan nanti. Ia berperilaku seperti breakpoint.
use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;
Dalam alur kerja yang diarahkan skrip, stop akan meletakkan Anda ke dalam shell Tcl, jadi skrip akan terhenti kecuali Anda mengeluarkan exit secara manual. Itulah sebabnya finish umumnya lebih disukai untuk run otomatis.
3. Memanfaatkan Gagal Assersi
Beberapa desainer mengakhiri testbench dengan sengaja menyebabkan gagal assersi. Metode ini bekerja di semua versi VHDL dan tidak memerlukan impor tambahan:
SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;
Sementara itu menjamin pengakhiran simulator, konsol akan melaporkan failure meskipun tes berhasil, yang bisa menyesatkan dalam alat regresi otomatis yang menganggap kegagalan sebagai error.
4. Mengontrol Penghentian dengan Callback Tcl
Untuk kontrol yang lebih fleksibel—seperti memeriksa sinyal atau melakukan pembersihan—Anda dapat menghubungkan sinyal VHDL ke callback Tcl. Testbench VHDL menyalin boolean stop_condition ketika semua kasus tes selesai.
signal stop_condition : boolean; begin -- Contoh: toggle setelah 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- logika testbench wait; -- menjaga proses tetap tidur end process;
ModelSim
when {stop_condition} { stop echo "Test: OK" } run -all Ketika stop_condition menjadi benar, callback berjalan, mencetak pesan, dan menjeda simulasi. Anda dapat mengganti stop dengan exit untuk keluar dari simulator segera.
Vivado
set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all Flag -notrace menekan echo perintah, menjaga output konsol tetap bersih.
Rekomendasi Akhir
Di seluruh simulator utama, prosedur finish VHDL‑2008 tetap menjadi pilihan paling portabel dan ramah skrip. Ia mengakhiri simulasi dengan bersih di lingkungan GUI dan batch tanpa prompt interaktif yang tertinggal.
Meskipun demikian, callback Tcl menawarkan kemampuan debugging yang kuat saat Anda perlu menjeda simulasi dan memeriksa atau memanipulasi sinyal saat itu juga.
Unduh Proyek Contoh
Pengguna ModelSim dapat menerima arsip zip yang berisi empat testbench ilustratif dengan mengirimkan alamat email di bawah ini. (Pengguna Vivado dapat mereplikasi contoh dengan usaha minimal.)