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 serial
dan 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?
Jawaban:
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:
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_got
adalah 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 vhdl , verilog , systemverilog , atau bahasa deskripsi perangkat keras penting lainnya ( hdl ).
Lihat juga:
sumber
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.
sumber
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.
sumber
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".
sumber
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
sumber