FPGA hari ini telah dibangun di blok DSP, FPGA terbaru bahkan telah dibangun di unit floating point yang sesuai dengan standar IEEE-754.
Dimungkinkan untuk membuat entitas / modul DSP menggunakan GUI setelah memilih parameter yang diperlukan di dalamnya, dan kemudian membuatnya dalam desain.
Kapan kita perlu melakukan manajemen mikro seperti itu dalam desain instantaiting blok DSP aktual dan kapan kita hanya memasukkan operator '*' dalam kode dan membiarkan alat sintesis menangani detail level rendah? Mana yang lebih baik?
Ada banyak jenis algoritma perkalian ketika datang ke perkalian biner. Karena sekarang kami telah membangun blok DSP pada silikon dan bahkan dibangun dalam pengganda titik mengambang, apakah ini berarti bahwa semua algoritma tersebut tidak secara efektif menjadi usang.
Jawaban:
Saya sudah melakukan ini beberapa kali sendiri.
Secara umum, alat desain akan memilih antara implementasi kain dan sepotong DSP berdasarkan pengaturan sintesis.
Misalnya, untuk Xilinx ISE, dalam pengaturan proses sintesis, Opsi HDL, ada pengaturan "-use_dsp48" dengan opsi: Otomatis, AutoMax, Ya, Tidak. Seperti yang dapat Anda bayangkan, ini mengontrol seberapa keras alat mencoba menempatkan Irisan DSP. Saya pernah punya masalah di mana saya mengalikan bilangan bulat dengan 3, yang menyimpulkan sepotong DSP - kecuali saya sudah secara manual menyimpulkan setiap potongan DSP dalam chip, jadi synth gagal! Saya mengubah pengaturan menjadi Tidak, karena saya sudah menggunakan setiap slice dsp.
Ini mungkin aturan praktis yang bagus (saya baru saja membuat): jika desain Anda clock di kurang dari 50 MHz, dan Anda mungkin akan menggunakan kurang dari 50% dari irisan DSP dalam chip, maka gunakan saja *, +, dan - operator. ini akan menyimpulkan irisan DSP tanpa register pipa. Ini benar-benar membatasi kecepatan tertinggi. (Saya tidak tahu apa yang terjadi ketika Anda menggunakan divisi)
Namun, jika sepertinya Anda akan menjalankan irisan lebih dekat dengan kecepatan maksimal slice DSP (333 MHz untuk Spartan 6 grade kecepatan normal). Dari Anda akan menggunakan semua irisan, Anda harus secara manual menyimpulkannya .
Dalam hal ini, Anda memiliki dua opsi.
Opsi 1: secara manual menggunakan template Instantiation DSP mentah. Opsi 2: gunakan blok IP dari Xilinx Core Generator. (Saya akan menggunakan opsi ini. Pada saat yang sama, Anda akan mempelajari semua tentang gen inti, yang akan membantu di masa depan)
Sebelum Anda melakukan salah satu dari ini, baca beberapa halaman pertama dari panduan pengguna slice DSP. Dalam kasus Spartan 6, (DSP48A1), itu adalah Xilinx doc UG389: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf
Pertimbangkan opsi Generator Inti terlebih dahulu. Saya biasanya membuat proyek pengujian di Core Generator untuk bagian saya bekerja dengan, di mana saya membuat sejumlah blok IP hanya untuk mempelajari sistem. Lalu, ketika saya siap untuk menambahkan satu ke desain saya di ISE, saya klik kanan di Design Hierarchy, klik sumber baru, dan pilih "IP (CORE Generator & Architecture Wizard)" sehingga saya dapat mengedit dan membuat ulang blok secara langsung dari proyek saya.
Di Core gen, lihat berbagai blok IP yang dapat Anda pilih - ada beberapa lusin, yang sebagian besar cukup keren.
Inti Pengganda adalah apa yang harus Anda perhatikan pada awalnya. Periksa setiap halaman, dan klik tombol lembar data. Bagian penting adalah lebar bit integer, tahapan pipa (latensi) dan sinyal kontrol apa pun. Ini menghasilkan blok paling sederhana dengan mengambil semua port yang tidak Anda butuhkan.
Ketika saya sedang membangun filter urutan IIR 5 dengan 3 tahun lalu, saya harus menggunakan template instantiasi manual karena saya sedang membangun implementasi yang sangat khusus, dengan 2 irisan DSP clock 4x lebih cepat dari laju sampel. Itu sangat menyakitkan.
sumber
Jika Anda hanya ingin mengalikan dua angka dan sesuai dengan blok DSP maka
*
operator harus menyimpulkan blok DSP. Jika tidak, kirim kembali alat sintesis :)Namun, untuk mengambil keuntungan dari kombinasi yang lebih kompleks dari fungsi DSP sering memerlukan instantiasi langsung blok dan konfigurasi parameternya. Contoh hal-hal yang mungkin tidak dipetakan dengan baik berdasarkan inferensi (menggunakan Xilinx DSP48E1 sebagai contoh):
Dan terutama kombinasi di atas.
Alat sintesis belum cukup baik untuk memetakan kombinasi logika dan aritmatika yang sepenuhnya sewenang-wenang seefisien yang Anda harapkan.
sumber
Jika ada blok DSP, Anda harus menggunakannya jika Anda bisa karena itu akan lebih efisien daripada menggunakan LUT untuk melakukan hal yang sama. Kecuali Anda tidak memerlukan multiplikasi kinerja tinggi, dalam hal ini Anda harus menerapkan, katakanlah, penambah pipelined dan shift register untuk menghemat ruang.
Namun, saya akan melihat menyimpulkan blok DSP sebelum masuk ke alat GUI. Manual Xilinx XST memiliki 'penerima' HDL untuk cara membuat instance blok DSP dengan Verilog / VHDL murni. Pada dasarnya, jika Anda menambahkan register yang cukup sebelum dan / atau setelah pengganda, XST akan menggunakan blok DSP untuk mengimplementasikan operasi secara otomatis. Anda dapat memeriksa log sintesis untuk melihat apakah itu menyimpulkan blok DSP dengan benar. Saya kira Altera memiliki sesuatu yang serupa.
Kebetulan, saya hanya merenungkan ini lebih dari beberapa menit yang lalu karena saya saat ini sedang mengerjakan implementasi twister Mersenne yang hanya menggunakan pengganda untuk seed awal. Implementasi pass pertama saya tidak memenuhi waktu, tetapi fungsinya benar. XST juga menempatkan operasi multiply ke dalam blok DSP, namun tidak dioptimalkan sehingga berjalan sekitar setengah secepat yang saya inginkan. Saya kemungkinan akan mengimplementasikan ulang multiply menggunakan teknik shift-and-add yang akan mengambil 32x jumlah siklus clock, tetapi tidak akan lagi membutuhkan pengali perangkat keras.
sumber
Itu tergantung berapa banyak optimasi yang Anda butuhkan dan berapa banyak portabel harus desain Anda. Ini agak mirip perangkat lunak, mengoptimalkan menggunakan sedikit perakitan atau membiarkan kompiler memilih instruksi. Anda mungkin juga memiliki beberapa pengorbanan ukuran / kecepatan sehingga Anda tidak mampu membeli pengganda presisi ganda kombinasi.
Saya tidak tahu di mana pengganda FP bawaan di FPGA.
Operator multiplikasi yang sesuai dengan IEEE P754 yang sesuai untuk CPU melibatkan lebih dari satu pengganda besar: Anda perlu menambahkan eksponen, menggeser denormals, mengelola infinites, dan beberapa flag yang sebagian besar tidak berguna (tidak eksak, underflow ...)
sumber
Saya membaca dokumen ini http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf :
Saya berharap dapat menemukan sumber alat mereka untuk memeriksa temuan mereka.
sumber