VHDL: Menggunakan operator '*' saat menerapkan pengganda dalam desain


10

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.


Apa FPGA memiliki FPU 754-compliant di kain?
Martin Thompson

Jawaban:


6

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.


13

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):

  • Penggunaan pra-penambah
  • Penggunaan akumulator pos
  • Penggunaan detektor pola
  • Penggunaan unit logika

Dan terutama kombinasi di atas.

Alat sintesis belum cukup baik untuk memetakan kombinasi logika dan aritmatika yang sepenuhnya sewenang-wenang seefisien yang Anda harapkan.


4

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.


Mengapa ia gagal menghitung waktu saat menggunakan pengganda perangkat keras?
quantum231

32 bit demi 32 bit, non-pipelined, multiply membutuhkan lebih dari 8 ns, tampaknya.
alex.forencich

hmm begitu, tidak mempertimbangkan itu. Jadi blok DSP tidak di pipelined. Saya bertanya-tanya bagaimana tepatnya mereka menerapkan perkalian. Apakah ini merupakan pengali paralel keras yang sebenarnya?
quantum231

Saya pikir itu dapat dikonfigurasi untuk bekerja dalam beberapa cara berbeda. Menurut manual XST, menambahkan register yang cukup pada input dan output akan memungkinkan XST untuk menggunakan pengali pipelined dalam slice DSP48. Dalam kasus saya hanya ada satu register keluaran dan tidak ada register input, jadi tidak dapat memanfaatkan ini. Karena ini hanya untuk inisialisasi (penyemaian PRNG), saya mengganti perkalian paralel dengan pengganda serial sedikit untuk menghemat pemanfaatan sumber daya.
alex.forencich

2

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 ...)


FPGA generasi terbaru seperti Altera 10 series memiliki pengali floating point yang kompatibel dengan IEEE-754 pada perangkat keras itu sendiri! Saya belum memiliki kesempatan untuk menggunakannya sendiri.
quantum231

Jika kita telah membangun blok DSP maka FPGA harus menggunakannya daripada pengganda kombinatorial atau menggunakan beberapa algoritma lain yang misalnya menggunakan blok memori kan?
quantum231

2

Saya membaca dokumen ini http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf :

Sementara fungsi yang masuk dalam blok DSP tunggal dapat disintesis secara efisien dari kode RTL pipelined, kami telah menemukan bahwa fungsi yang lebih kompleks yang membutuhkan beberapa blok DSP menderita kinerja yang lebih rendah. Deskripsi RTL standar dari fungsi matematika dapat sangat pipelined, misalnya setelah setiap operasi, karena pipelining ini mungkin tidak memperhitungkan struktur dan tahapan internal blok DSP, desain disintesis yang dihasilkan dapat menunjukkan kinerja di bawah standar karena blok DSP digabungkan sedemikian rupa sehingga tidak memungkinkannya berjalan dengan kecepatan penuh.

Saya berharap dapat menemukan sumber alat mereka untuk memeriksa temuan mereka.

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.