Bisakah Anda menghubungkan testbench Modelsim dengan rangsangan eksternal


10

Saya bekerja pada tim yang melakukan pengembangan perangkat lunak driver dan FPGA. Simulasi FPGA sedang dilakukan dalam Modelsim dan perangkat lunak driver ditulis dalam C. Untuk meminimalkan risiko integrasi, saya ingin memodelkan interaksi antara dua bagian dari produk kami sebelum meletakkannya di perangkat keras.

Saya tahu Modelsim mendukung testbench yang memungkinkan Anda memberikan stimulus dalam bentuk file teks dengan waktu dan nilai untuk dimasukkan. Saya bertanya-tanya apakah Modelsim memiliki mode yang memungkinkan Anda untuk menghubungkan pipa ke aplikasi eksternal (seperti driver kami), dan menjalankan semacam simulasi terdistribusi di mana perangkat lunak dapat mendorong nilai ke dalam testbench, kemudian amati hasilnya nanti .

Trik yang tidak dapat saya lakukan dengan input file teks adalah membuat dua bagian produk berinteraksi. Saya perlu memiliki perangkat lunak "menulis" nilai-nilai ke dalam simulator FPGA, membaca hasilnya, dan kemudian menulis nilai-nilai baru ke dalam FPGA yang tergantung pada hasil yang dibacanya. File teks memerlukan input untuk independen dari output.

Saya telah melakukan pencarian di StackExchange dan google, tetapi saya belum dapat menemukan satu set kata kunci untuk mempersempit pencarian saya untuk mengidentifikasi perilaku yang saya cari, atau menentukan bahwa itu tidak ada.

Jawaban:


9

Kontrol Eksternal dari Simulasi ModelSim Via Unix Named Pipes

Abstrak: Dalam tesis ini, kami menyajikan metode mengendalikan simulasi ModelSim melalui program eksternal. Komunikasi antara ModelSim dan program eksternal dilakukan dengan menggunakan Named Pipes ("FIFOs"), yang muncul sebagai file normal untuk setiap aplikasi. Perbedaan utama antara menggunakan FIFO dibandingkan file normal untuk Inter-Process Communication (IPC) adalah bahwa aplikasi yang mencoba menulis ke FIFO dijeda hingga aplikasi lain mencoba membaca dari FIFO dan sebaliknya. Ini meningkatkan keandalan IPC. Keuntungan utama dari metode ini adalah 1) Karena hanya operasi file generik yang digunakan, aplikasi eksternal dapat ditulis dalam hampir semua bahasa pemrograman; 2) Ini memberi insinyur verifikasi kemampuan untuk menggunakan kembali paket perangkat lunak validasi standar dengan penulisan ulang minimal; 3) Dengan memiliki beberapa Perangkat Dalam Uji (DUT) berkomunikasi satu sama lain, simulasi yang lebih akurat dari sistem akhir dapat dibuat; dan 4) Kinerja simulasi keseluruhan dapat ditingkatkan dengan mudah pada kluster Single-System Image (SSI) atau komputer multiprosesor meskipun mesin simulasi ModelSim tidak multi-threaded. Karena penerapan input / output file (I / O) untuk VHDL perilaku, ModelSim tidak dapat membaca atau menulis FIFO ini secara langsung. Solusi untuk batasan ini ditunjukkan menggunakan ModelSim's Foreign Language Interface (FLI). Makalah ini juga menunjukkan contoh kerja dari metode ini yang digunakan dalam verifikasi generasi berikutnya dari rutinitas floating point di VHDL. Secara khusus, paket perangkat lunak IEEE Compliance Checker sumber terbuka, yang ditulis dalam C ++,

Dan masalah dengan FIFO yang membutuhkan antarmuka pemrograman Asing adalah bahwa file I / O VHDL tidak dapat menangani pemblokiran dengan anggun sampai data tersedia.

Sayangnya tesis ini tidak tersedia di web.

Model Sim ® Versi Bahasa Asing Antarmuka 5.6d , PDF 3.4 MB.

Menggunakan ModelSim Antarmuka Bahasa Asing untuk Simulasi Co-VHDL dan untuk Kontrol Simulator di Linux Platform x86 Andre Pool - fli@andrepool.com - Versi 1.5 - dibuat November 2012, pembaruan terakhir September 2013 , PDF, 320KB (Dan tidak pernah menyebutkan FIFO) .

Menggunakan ModelSim Bahasa Asing Antarmuka untuk c-VHDL Co-Simulasi dan untuk Kontrol Simulator pada Platform Linux x86 (Repositori kode github yang cocok).

Ada sedikit lebih open source, menggunakan panggilan fungsi VHPI Asing di ghdl: vhdl / src / sim / ghdlex_mein di master · texane / vhdl · GitHub .

Dan apa yang tampak seperti pembaruan dari Martin Strubel pada daftar GHDL_discuss: http://www.section5.ch/downloads/ghdlex-0.051.tgz menunjukkan tanggal untuk fifo.c 14 April 2014.

FLI secara definisi akan mengunci Anda di Modelsim, tidak yakin dengan keadaan dukungan VHPI mereka (yang merupakan bagian dari IEEE Std 1076-2008, VHDL LRM).

Menggunakan soket atau file FIFO memungkinkan proses perangkat lunak dan perangkat keras berjalan pada tingkat yang berbeda, dengan menyediakan buffering tingkat. Tidak selalu diperlukan jika sistem perangkat lunak Anda lebih cepat daripada simulasi perangkat kerasnya (dan umumnya demikian).

Ada upaya untuk menyediakan fungsionalitas UNIX (POSIX) untuk VHDL, Lihat paket Public Domain VHDL , yang berisi pointer ke makalah sebelumnya SNUG San Jose 2002 1 Fungsi C / UNIX untuk VHDL Testbenches C / UNIX Fungsi untuk VHDL Testbenches bersama dengan slide atur dengan catatan tambahan pada pipa Unix & rsh . Ini menunjukkan bagaimana agar pipa bernama tetap terbuka. Semua kode VHDL dapat diunduh juga. Saya berpendapat ini akan mengarah pada cara termudah untuk mencapai tujuan Anda.

Jadi, apakah ada sesuatu yang asli pada Modelsim yang memungkinkan Anda terhubung ke pipa? Kemungkinan tidak, lebih-lebih di bawah Windows. Bisakah itu dilakukan? Ya, tapi jalannya bukan untuk para pengecut. Anda bisa menemui jalan buntu di salah satu ujung atau yang lain atau mungkin keduanya menunggu ketersediaan data.

Antarmuka pemrograman Asing secara teoritis memungkinkan Anda untuk menelurkan proses anak untuk satu atau ujung lain dari 'pipa' yang juga berarti Anda dapat menggunakan model memori bersama untuk berkomunikasi antara kedua ujung.


Terima kasih atas jawaban luar biasa yang diteliti! "Antarmuka Bahasa Asing" adalah frasa yang saya butuhkan untuk membuka dokumentasi referensi yang saya butuhkan, saya hanya tidak akan pernah menebaknya! Integrasi awal di sini saya datang!
Cort Ammon

5

Anda mungkin ingin melihat Cocotb . Ini adalah pustaka simulasi bersama berbasis Python, salah satu tujuan desain adalah untuk memungkinkan metodologi yang Anda gambarkan, dengan mudah mensimulasikan perangkat lunak produksi dan RTL yang tidak dimodifikasi.

Ada contoh dalam repositori menjalankan pingperintah yang tidak dimodifikasi terhadap simulasi dan tutorial yang berjalan melalui kode.

Untuk driver ruang-pengguna, utilitas konfigurasi, dll. Anda memiliki beberapa opsi untuk menjalankan perangkat lunak Anda yang tidak dimodifikasi :

  1. Jika akses Anda ke perangkat mendidih ke beberapa fungsi (misalnya panggilan baca dan tulis), Anda dapat menautkan ke perpustakaan simulasi yang memblokir saat melakukan akses terhadap simulasi. Ini berfungsi sangat baik untuk konfigurasi.

  2. Jika perangkat lunak Anda menggunakan memory IO dan pointer dereferences yang dipetakan untuk mengakses perangkat, maka hal-hal menjadi sedikit lebih kompleks - Anda harus membuat area memori bersama dengan bit perlindungan yang ditetapkan dan akses perangkap .

Jika Anda menggunakan jaringan maka antarmuka virtual seperti TUN / TAP dapat digunakan (lihat tutorial yang disebutkan di atas), saya menduga mungkin ada opsi serupa untuk transfer USB atau antarmuka host umum lainnya.

Cocotb bekerja dengan berbagai simulator dan VHDL (via VHPI) atau desain Verilog / SystemVerilog (via VPI). Sayangnya Modelsim tidak mengimplementasikan VHPI sehingga sebagai pengguna VHDL Anda terjebak dengan FLI, yang hampir tidak begitu berguna sebagai antarmuka. Anda dapat mengeluh di Mentor untuk mencoba dan membujuk mereka untuk mengimplementasikan antarmuka standar industri, atau Anda dapat mengevaluasi simulator lain yang mendukung VHPI.

Sayangnya, tampaknya vendor alat secara umum tidak terlalu tertarik pada pasar VHDL, menilai dari waktu yang dibutuhkan mereka untuk mengimplementasikan fungsionalitas terkait VHDL ...

Penafian: Saya adalah pengembang Cocotb.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.