Bagaimana cara mengidentifikasi area dari desain FPGA yang menggunakan sebagian besar sumber daya dan area?

11

Saya sedang mengerjakan desain FPGA besar, dan saya sangat dekat dengan batas sumber daya FPGA yang saya gunakan saat ini, Xilinx LX16 dalam paket CSG225.

Desainnya juga hampir selesai, namun saat ini tidak lagi sesuai dengan FPGA. Saya dapat mematikan komponen agar pas, namun saya perlu mengurangi penggunaan sumber daya untuk menyelesaikan desain dan membuatnya memenuhi persyaratan waktu dan ukuran.

Saya ingin tahu apakah ada alat laporan kami yang dapat membantu saya mengidentifikasi bagian mana dari desain saya yang menggunakan sumber daya paling banyak. Desain saya tidak dipartisi, dan terbagi sekitar selusin atau lebih modul VHDL.

Laporan pengaturan waktu Xilinx luar biasa, tetapi sekarang saya harus tahu di mana saya bisa mendapatkan yang terbaik dari segi penghematan ruang.

Saya juga kesulitan menentukan jenis sumber daya yang saya kehabisan, atau apa yang mempengaruhi sumber daya tersebut.

Gangguan lain adalah bahwa ketika desain semakin besar, komponen yang digunakan untuk memenuhi timing mulai gagal karena penempatannya tidak lagi ideal.

Saat ini, saya menggunakan laporan waktu Post-Place dan Route Static, dan saya menggunakan SmartXplorer. Saya menggunakan strategi desain untuk mengoptimalkan ketepatan waktu.

Setelah mematikan sebagian desain saya agar pas, berikut adalah beberapa hasilnya:

pemanfaatan slice register: 42% slice Pemanfaatan LUT: 96% jumlah pasangan LUT-FF yang digunakan penuh: 38% Apakah ini berarti saya ringan pada register, tetapi berat pada penggunaan gerbang?

Apakah ada alat untuk membantu pengembang mengoptimalkan area, atau setidaknya memberi mereka lebih banyak wawasan tentang kode mereka?

Pembaruan: Setelah melihat Pemanfaatan Tingkat Modul, saya menemukan bahwa saya memiliki lem async lem kecil di semua tempat yang mengambil sekitar 30% dari total LUT. Saya menggunakannya sebagai lem lintas-jam-domain untuk bus berkecepatan tinggi. Saya harus bisa menghilangkan ini, karena jam terkait erat. (Input 120 MHz, menghasilkan 100 MHz dan 200 MHz melalui DCM)

Marcus10110
sumber
Sepertinya Anda memiliki banyak interkoneksi antara sinyal, saya yakin Anda dapat memperbaikinya dengan mengubah tingkat optimasi, berbagi sumber daya dan semacamnya. Alat apa yang Anda gunakan? ISE atau Vivado?
FarhadA
1
Saya menggunakan ISE (Vivado tidak akan mendukung Spartan-6) Saya memposting silang ini di forum Xilinx, dan mereka berkata untuk mengaktifkan Laporan Peta Terperinci. Saya melakukan ini, dan file * .mrp sekarang berisi Bagian 13 - Pemanfaatan oleh Hirarki. Saya akan memposting data setelah saya memformatnya lebih baik.
Marcus10110

Jawaban:

5

Saya mengirim pertanyaan ini ke Forum Xilinx di sini: http://forums.xilinx.com/t5/Implementation/Bagaimana- untuk-mengetahui-apa-bagian-dari-desain-desain-konsum-yang-paling/td- p / 393247

Jawaban ini sebagian besar didasarkan pada komentar di sana. Terima kasih kepada Deepika, Sikta, dan Gabor.

Pertama, aktifkan 'Hasilkan Laporan MAP Terperinci' di properti proses peta (-detail).

Kemudian, buka Ringkasan Desain, dan navigasikan ke Utilisasi Tingkat Modul. Berikut adalah hierarki lengkap, yang menunjukkan pemanfaatan desain eksklusif dan inklusif.

Setiap baris akan menampilkan pasangan angka seperti 0/5392. Ini berarti bahwa modul itu mengandung nol dari elemen spesifik itu, tetapi modul itu dan semua sub-modulnya mengandung total 5392 elemen.

Ini adalah output saya (sebagian diperluas) Laporan pemanfaatan

Ketika bekerja untuk mengurangi ukuran, Gabor merekomendasikan beralih ke FPGA yang lebih besar di alat synth sehingga dapat sepenuhnya memetakan bahkan ketika itu terlalu besar untuk masuk dalam FPGA Anda saat ini, dan itu akan membuat alat berjalan lebih cepat.

Marcus10110
sumber
3

Sepertinya Anda menggunakan hampir semua sumber daya logika sementara hanya menggunakan setengah dari register. Sepertinya Anda perlu mencari tahu apa yang memakan semua LUT Anda. Ada beberapa cara untuk mengoptimalkan komponen-komponen tertentu dan membuatnya lebih efisien dalam ruang - hal-hal seperti RAM, register geser, dan mesin-mesin negara. Lihatlah file .log yang dihasilkan dari synthesizer. Ini akan memberi tahu Anda apa jenis komponen yang disimpulkan. Pastikan komponen itu menyimpulkan dengan benar. Jika tidak, itu mungkin tidak menghasilkan netlist yang sangat efisien. Anda dapat mengetahui banyak hanya dengan melihat file log sintesis. Mungkin beberapa perubahan kecil pada kode Anda akan memungkinkan syntheizer menyimpulkan berbagai komponen, jadi lihatlah manual synthesizer untuk beberapa templat. Anda mungkin perlu mengganti synthesizer untuk mengoptimalkan area alih-alih kecepatan. Juga, periksa untuk memastikan Anda tidak memiliki pengaturan inferior dimatikan. Saya pernah mencoba mensintesis komponen desain yang mengkonsumsi 40% dari Spartan 3E 500 (9.312 pasang LUT / FF 4-input, RAM blok 5.6 KB) untuk Virtex 6 HXT 565 (354.240 6-input LUT / pasangan FF ganda, 32 MB block RAM). Butuh 7 jam untuk menyelesaikan Xilinx dan menghabiskan sekitar 40% dari chip. ?!?!?!? Ternyata RAM blokir dinonaktifkan, dan synthesizer mengubah beberapa KB RAM menjadi LUT. Bukan keputusan paling efisien yang pernah ada. Setelah mengubah pengaturan, butuh 1% dari chip. Sosok pergi. 312 pasang LUT / FF 4 input, RAM blok 5,6 KB) untuk Virtex 6 HXT 565 (354.240 LUT input ganda / FF ganda, RAM blok 32 MB). Butuh 7 jam untuk menyelesaikan Xilinx dan menghabiskan sekitar 40% dari chip. ?!?!?!? Ternyata RAM blokir dinonaktifkan, dan synthesizer mengubah beberapa KB RAM menjadi LUT. Bukan keputusan paling efisien yang pernah ada. Setelah mengubah pengaturan, butuh 1% dari chip. Sosok pergi. 312 pasang LUT / FF 4 input, RAM blok 5,6 KB) untuk Virtex 6 HXT 565 (354.240 LUT input ganda / FF ganda, RAM blok 32 MB). Butuh 7 jam untuk menyelesaikan Xilinx dan menghabiskan sekitar 40% dari chip. ?!?!?!? Ternyata RAM blokir dinonaktifkan, dan synthesizer mengubah beberapa KB RAM menjadi LUT. Bukan keputusan paling efisien yang pernah ada. Setelah mengubah pengaturan, butuh 1% dari chip. Sosok pergi.

alex.forencich
sumber
3

Akan bermanfaat memposting seluruh bagian 'penggunaan sumber daya' dari output alat.

Apakah Anda menggunakan semua Block RAM? Adalah umum untuk dapat mengganti fungsi logika / matematika dengan tabel pencarian RAM yang ekuivalen jika domain cukup dibatasi, dan kompleksitasnya cukup untuk pra-perhitungan yang bermanfaat.

Seperti halnya inferensi memori, hal yang sama berlaku untuk Pengganda. Kadang-kadang penyimpangan kecil dari templat Instansiasi yang direkomendasikan dapat membuang pengganda yang disimpulkan ke unit DSP48A.

Jika Anda menggunakan pengontrol PCIe, dapatkah Anda mengurangi ruang buffer total yang disediakan untuk muatan TLP, atau ukuran paket TLP maksimum? Ini dapat mengurangi penggunaan RAM / logika inti IP dengan mengorbankan bandwidth meskipun-dimasukkan / total.

Dengan (Altera) Quartus, Anda dapat melakukan multi-pilih item dalam tampilan hierarki desain dan melihat ada warna penggunaan area post-p & r yang dikodekan / dikelompokkan. Ini dapat memberikan ide visual tentang penggunaan relatif dari modul desain Anda.

shuckc
sumber
Terima kasih. Saya menggunakan macro IP keras untuk pengganda dan saya menggunakan CoreGen untuk membuat FIFO, walaupun saya memang memilih beberapa fifos kecil untuk menggunakan RAM terdistribusi (bukan blok RAM). Saya akan melihat penggunaannya.
Marcus10110