Apakah perpustakaan open source ada untuk VHDL seperti yang mereka lakukan untuk C ++ atau python?

11

Ketika saya mendekati masalah dalam C ++ atau python, ada banyak perpustakaan yang ada yang melakukan pengangkatan kode saya. Saya sedang berpikir tentang GNU GSL , BOOST , atau FFTW untuk C ++, dan NumPy atau SciPy untuk python. Dalam banyak hal, fakta bahwa sumber daya ini ada membuat pengkodean dalam masing-masing bahasa ini bermanfaat, karena perpustakaan mencegah Anda harus menulis ulang semua hal tingkat rendah dari awal.

Pustaka standar IEEE tampaknya hanya mencakup dasar-dasar yang sangat, seperti tipe data (semacam mirip dengan lib standar C).

Sepertinya di VHDL, Anda dapat membeli / menemukan beberapa "IP Cores" yang akan menyelesaikan masalah, daripada menggunakan perpustakaan open source. Dalam python, jika saya ingin berbicara dengan perangkat serial, saya hanya import serialdan saya pada dasarnya sudah selesai. Dalam VHDL saya akan terjebak menulis protokol serial dari awal, atau saya harus berkeliling di berbagai repositori sampai saya menemukan seseorang yang telah menghasilkan sesuatu yang semacam itu bekerja. Saya kemudian akan menambal bit kode ke proyek saya, daripada hanya memasukkan sesuatu dan memanggil itu. Dengan cara yang sama, jika saya ingin melakukan FFT, saya dapat menemukan contoh FFT di VHDL melalui google, tetapi tidak ada sesuatu yang sederhana seperti FFTW yang dapat saya temukan.

Apakah ada pustaka sumber terbuka lengkap yang dapat saya impor ke proyek saya? Mengapa semua orang tampaknya menggulung kode mereka sendiri untuk begitu banyak hal yang sama?

Sam
sumber
2
Sudahkah Anda mencari di opencores.org?
MarkU
3
Untuk perpustakaan verifikasi VHDL, lihat osvvm.org
Jim Lewis
Sebagai pembuka, Anda juga dapat membeli perpustakaan dari berbagai sumber. Anda akan menghabiskan waktu dengan sebagian besar core dari opencores karena kebanyakan tidak didokumentasikan dengan baik.
Voltage Spike

Jawaban:

14

Saya seorang pengembang dan pengelola di ' The PoC Library '. Kami mencoba menyediakan pustaka seperti itu yang terdiri dari paket (kumpulan jenis dan fungsi baru) dan modul. Muncul dengan fifos umum, aritmatika, komponen lintas-jam, komponen I / O kecepatan rendah dan tumpukan Ethernet / IP / UDP (rilis berikutnya).

Seperti yang dijelaskan @crgrace, cukup rumit untuk merancang modul, yang:

  • bekerja pada banyak platform
  • mendukung sebagian besar rantai alat vendor
  • tambahkan tidak ada / kurang overhead

Perpustakaan kami memiliki mekanisme konfigurasi internal (PoC.config) untuk membedakan vendor, perangkat, dan bahkan subfamili perangkat untuk memilih kode yang tepat atau implementasi yang dioptimalkan. Ini juga membedakan antara kode sintesis dan simulasi di beberapa titik.

Sebagai contoh PoC.fifo_cc_gotadalah FIFO dengan antarmuka 'common clock' (cc) dan menaruh / mendapat sinyal untuk mengontrol fifo. Fifo dapat dikonfigurasi dalam lebar, kedalaman, bit isian keadaan dan tipe implementasi. Anda dapat memilih jenis implementasi RAM berbasis LUT atau On-Chip-RAM (ocram). Jika fifo ini disintesis dengan opsi ocram untuk Altera, ia menggunakan altsyncram; jika Xilinx dipilih, ia menggunakan deskripsi BlockRAM generik dan mengimplementasikan aritmatika pointer dengan instantiation carrychain eksplisit (Xilinx XST tidak menemukan solusi optimal, sehingga dilakukan secara manual).

Ada 2 jenis fifo lainnya dengan antarmuka 'dependent clock' (dc) dan independent clock (ic). Jadi jika diperlukan untuk beralih dari fifo normal ke fifo lintas-jam (PoC.fifo_ic_got), ubah nama entitas dan tambahkan jam dan setel ulang untuk domain jam kedua, itu saja.

Saya pikir ini membuktikan, dimungkinkan untuk menulis modul umum, yang bekerja pada banyak platform dan mengkompilasi dalam alat yang berbeda (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Selain PoC, ada perpustakaan open source lainnya:


Proyek "Temukan Silikon Sumber Terbuka dan Gratis" ( FOSSi ) di GitHub menawarkan basis data yang dapat dijelajahi dari semua proyek GitHub yang terutama menggunakan , , , atau bahasa deskripsi perangkat keras penting lainnya ( ).

Lihat juga:

Paebbels
sumber
+1 untuk menunjukkan apa yang telah Anda lakukan dan juga apa yang telah dilakukan orang lain. Daftar panjang yang bagus.
Tuan Mystère
3

Pustaka sumber terbuka seperti yang Anda gambarkan tidak akan sama bermanfaatnya dengan VHDL atau Verilog seperti untuk bahasa pemrograman tujuan umum. Ini karena BAGAIMANA Anda menerapkan fungsi yang diberikan bisa sangat tergantung pada apa yang Anda coba lakukan. Kode yang baik untuk FPGA dan mungkin tidak begitu baik untuk ASIC dan sebaliknya.

Selain itu, karena kami mendeskripsikan perangkat keras, fungsi yang melakukan FFT akan membutuhkan spesifikasi spesifik seperti lebar dan jam kata dan mengatur ulang strategi yang akan mengikat tangan Anda dan membatasi seluruh desain Anda. Jika Anda membuat fungsinya sangat fleksibel, itu akan memiliki overhead yang sangat besar.

Terakhir, lihat ukuran executable Anda ketika Anda memasukkan banyak perpustakaan di C, misalnya. Ada banyak kembung di sana. Itu tidak masalah untuk pengembangan perangkat lunak (sebagian besar waktu) tetapi penting bagi pengembangan FPGA dan terutama ASIC. Tidak ada gunanya mensintesis sekelompok overhead yang tidak Anda butuhkan.

Jadi intinya adalah tidak ada perpustakaan seperti itu, dan pendekatan Anda saat ini adalah suara.

crgrace
sumber
Generator inti alternatif (IP) juga memberikan risiko Scylla dan Chabydris dari vendor mengunci dan mengakibatkan kembung. Kapasitas FPGA dan ASIC telah tumbuh cukup besar untuk mendukung mengasapi, masalah kemudian biaya dan pengujian, dibantu oleh standarisasi mengasapi (misalnya AMBA AXI4). Trade off Time To Market versus "overhead yang tidak Anda butuhkan" sudah dibuat oleh seluruh industri. Desain sistem menggunakan blok bangunan alih-alih desain perangkat keras, yang terakhir adalah bailiwick VHDL.
user8352
Paragraf ketiga Anda cukup bodoh tentang bagaimana kompiler dan alat sintesis bekerja - alat harus membuang hal-hal yang tidak diperlukan dan hasilnya tidak digunakan, bahkan mungkin lebih dalam pengaturan logika digital daripada di perpustakaan bahasa tingkat tinggi, di mana mungkin ada beberapa lokal variabel dan alokasi memori yang merupakan overhead dari abstraksi perpustakaan, terutama jika itu terkait secara dinamis.
Chris Stratton
2

VHDL dan Verilog adalah bahasa deskriptif dan mereka menggambarkan blok perangkat keras. Driver serial di C ++ dapat diterjemahkan ke dalam Serial IP di VHDL / Verilog.

opencores.org adalah basis data sumber terbuka terbesar hingga saat ini.

Untuk memudahkan proses pencarian, unduh dan penelusuran kode (via Github) Anda dapat menggunakan antarmuka modern ini:

http://freerangefactory.org/cores.html

Jika, misalnya, Anda mencari serial, Anda bisa berakhir di sini:

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

dan langsung lompat ke kode di GitHub. Di sana Anda akan melihat bahwa Anda dapat dengan mudah membuat modul serial dan menghubungkan sirkuit Anda sendiri ke sana dan mulai mengirim dan menerima data. Ini sesederhana lib serial di C ++.

Saya harap ini membantu.

Fabrizio
sumber
0

Situs pertama yang saya kunjungi untuk hal semacam ini (seperti yang disebutkan @MarkU) adalah opencores.org.

Misalnya, ada mesin FFT berparameter , yang ditulis dalam VHDL, dirilis di bawah lisensi BSD. Statusnya "beta".

Spehro Pefhany
sumber
bukan itu yang diminta OP. Dia tahu tentang melihat opencores.org. Sebuah mesin FFT berparameter jauh dari mengimpor perpustakaan matematika standar dengan Python dan menggunakannya. Tidak ada yang namanya "middleware" di perangkat keras karena overhead.
Crgrace
0

Untuk Verifikasi, ada Open Source VHDL Verification Metodologi (OSVVM).
OSVVM adalah metodologi verifikasi VHDL canggih dan canggih yang menyederhanakan implementasi cakupan fungsional, acak terbatas, dan Intelligent Coverage Randomization (metodologi testbench cerdas). Ini juga memfasilitasi implementasi file transkrip bersama, pelaporan kesalahan, log (pencetakan bersyarat), dan pemodelan memori.

Situs web dan blog OSVVM ada di http://osvvm.org . Paket-paket ini juga tersedia di github di: https://github.com/JimLewis/OSVVM

Jim Lewis
sumber