Bir FPGA tasarımının en fazla kaynağı ve alanı kullanan alanları nasıl belirlenir?


11

Büyük bir FPGA tasarımı üzerinde çalışıyorum ve şu anda kullandığım FPGA'nın CSG225 paketindeki Xilinx LX16 kaynak sınırlarına çok yakınım.

Tasarım da neredeyse tamamlandı, ancak şu anda artık FPGA'ya sığmayacak. Parçaları sığdırmak için kapatabilirim, ancak tasarımı tamamlamak ve zamanlama ve boyut gereksinimlerini karşılamak için kaynak kullanımını azaltmam gerekiyor.

Raporlarımızda, tasarımımın hangi bölümlerinin en fazla kaynağı tükettiğini belirlememe yardımcı olabilecek herhangi bir araç olup olmadığını bilmek istiyorum. Tasarımım bölümlenmemiş ve yaklaşık bir düzine veya daha fazla VHDL modülüne bölünmüş durumda.

Xilinx zamanlama raporları harika, ama şimdi yerden tasarruf açısından en iyi kovalamamı nereden alabileceğimi bilmem gerekiyor.

Ayrıca hangi tür kaynakların tükendiğini veya bu kaynakları neyin etkilediğini söylemekte zorlanıyorum.

Başka bir sıkıntı, tasarım büyüdükçe, zamanlamayı karşılamak için kullanılan bileşenlerin arızalanmaya başlamasıdır, çünkü yerleşimleri artık ideal değildir.

Şu anda Post-Place ve Route Statik zamanlama raporlarını ve SmartXplorer kullanıyorum. Zamanlamayı optimize etmek için tasarım stratejileri kullanıyorum.

Tasarımımın bir kısmını sığdırmak için kapattıktan sonra, bazı sonuçlar:

dilim kayıt kullanımı:% 42 dilim LUT kullanımı:% 96 tam olarak kullanılan LUT-FF çiftlerinin sayısı: 38% Bu, kayıtlarda hafif olduğum anlamına gelir, ancak kapı kullanımında ağır mıyım?

Geliştiricilerin alan için optimize etmelerine veya en azından kodlarına daha fazla bilgi vermelerine yardımcı olacak araçlar var mı?

Güncelleme: Modül Seviyesi Kullanımına baktıktan sonra, toplam LUT'ların yaklaşık% 30'unu kaplayan bir yerde küçük tutkal async fifosum olduğunu öğrendim. Bunları yüksek hızlı otobüsler için saat yönünün tersine tutkal olarak kullanıyorum. Saatler sıkıca ilişkili olduğu için bunları ortadan kaldırmalıyım. (120 MHz giriş, DCM'ler aracılığıyla 100 MHz ve 200 MHz üretir)


Görünüşe göre sinyaller arasında çok fazla bağlantı var, eminim ki optimizasyon, kaynak paylaşımı ve benzeri seviyelerini değiştirerek bunu düzeltebilirsiniz. Hangi aracı kullanıyorsunuz? ISE mi Vivado mu?
FarhadA

1
ISE kullanıyorum (Vivado Spartan-6'yı desteklemiyor) Bunu Xilinx forumlarında çapraz olarak yayınladım ve Ayrıntılı Harita Raporu'nu açmayı söylediler. Bunu yaptım ve * .mrp dosyası artık Bölüm 13 - Hiyerarşi ile Kullanım içerir. Daha iyi biçimlendirildikten sonra verileri gönderirim.
Marcus10110

Yanıtlar:


5

Bu soruyu Xilinx Forumuna burada gönderdim: http://forums.xilinx.com/t5/Implementation/How-to-determine-what-part-of-the-design-consumes-the-most/td-p / 393247

Bu cevap büyük ölçüde oradaki yorumlara dayanmaktadır. Deepika, Sikta ve Gabor'a teşekkürler.

İlk olarak, harita işlem özelliklerinde 'Ayrıntılı MAP Raporu Oluştur'u etkinleştirin (-detay).

Ardından, Tasarım Özeti'ni açın ve Modül Düzeyi Kullanımı'na gidin. İşte özel ve kapsayıcı tasarım kullanımını gösteren eksiksiz hiyerarşi.

Her satır 0/5392 gibi bir sayı çifti gösterecektir. Bu, söz konusu modülün söz konusu öğenin sıfırını içerdiği, ancak söz konusu modülün ve tüm alt modüllerinin toplam 5392 öğe içerdiği anlamına gelir.

İşte çıktım (kısmen genişletilmiş) Kullanım raporu

Boyutu küçültmek için çalışırken Gabor, synth araçlarında daha büyük bir FPGA'ya geçmenizi önerir, böylece mevcut FPGA'nıza sığmayacak kadar büyük olsa bile tamamen eşleyebilir ve araçların daha hızlı çalışmasını sağlar.


3

Kayıtların sadece yarısını kullanırken neredeyse tüm mantık kaynaklarını tüketiyorsunuz. Tüm LUT'larınızı neyin yediğini bulmanız gerekiyor gibi görünüyor. RAM, kayma kayıtları ve durum makineleri gibi belirli bileşenleri optimize etmenin ve bunları biraz daha fazla alan verimli hale getirmenin yolları vardır. Sentezleyiciden elde edilen .log dosyasına bakın. Size ne tür bileşenlerin çıkarıldığını söyleyecektir. Bileşenleri düzgün çıkardığından emin olun. Değilse, özellikle verimli bir netlist oluşturmuyor olabilir. Sadece sentez günlük dosyalarına bakarak çok şey söyleyebilirsiniz. Kodunuzdaki birkaç küçük değişiklik, syntheizer'ın çeşitli bileşenleri çıkarmasına izin verecektir, bu nedenle bazı şablonlar için synthesizer kılavuzuna bakın. Hız yerine alan optimize etmek için sentezleyiciyi değiştirmeniz gerekebilir. Ayrıca, herhangi bir çıkarım ayarının kapalı olmadığından emin olun. Bir keresinde bir Virtex 6 HXT 565 (354,240 6-giriş LUT / çift FF çifti, 32) için% 40 Spartan 3E 500 (9.312 4-giriş LUT / FF çifti, 5.6 KB blok RAM) tüketen bir tasarım bileşenini sentezlemeye çalıştım. MB blok RAM). Xilinx par'ın bitmesi 7 saat sürdü ve çipin yaklaşık% 40'ını aldı. ?!?!?!? Çıktı blok RAM'in kapatıldığı ve sentezleyicinin birkaç KB RAM'i LUT'lara dönüştürdüğü ortaya çıktı. Şimdiye kadarki en etkili karar değil. Ayarı değiştirdikten sonra, çipin% 1'i kadar sürdü. Git şekil. 312 Virtex 6 HXT 565 (354,240 6 giriş LUT / çift FF çifti, 32 MB blok RAM) için 4 giriş LUT / FF çifti, 5,6 KB blok RAM). Xilinx par'ın bitmesi 7 saat sürdü ve çipin yaklaşık% 40'ını aldı. ?!?!?!? Çıkarılan blok RAM'in kapatıldığı ortaya çıktı ve sentezleyici birkaç KB RAM'i LUT'lara dönüştürdü. Şimdiye kadarki en etkili karar değil. Ayarı değiştirdikten sonra, çipin% 1'i kadar sürdü. Git şekil. 312 Virtex 6 HXT 565 (354,240 6 giriş LUT / çift FF çifti, 32 MB blok RAM) için 4 giriş LUT / FF çifti, 5,6 KB blok RAM). Xilinx par'ın bitmesi 7 saat sürdü ve çipin yaklaşık% 40'ını aldı. ?!?!?!? Çıkarılan blok RAM'in kapatıldığı ortaya çıktı ve sentezleyici birkaç KB RAM'i LUT'lara dönüştürdü. Şimdiye kadarki en etkili karar değil. Ayarı değiştirdikten sonra, çipin% 1'i kadar sürdü. Git şekil.


3

Tüm 'kaynak kullanımı' bölümünü araç çıktısından göndermeye değer.

Tüm Blok RAM'leri kullanıyor musunuz? Etki alanı yeterince kısıtlanmışsa mantık / matematik işlevlerini eşdeğer RAM arama tablolarıyla değiştirebilmek yaygındır ve ön hesaplama yapmaya değer karmaşıklığa sahiptirler.

Hafıza çıkarımının yanı sıra, Çarpanlar için de geçerlidir. Bazen önerilen örnekleme şablonundan küçük bir sapma DSP48A birimlerine çıkartılan çarpanı dışarı atabilir.

PCIe denetleyicisini kullanıyorsanız, TLP yükleri için ayrılan toplam arabellek alanını veya maksimum TLP paket boyutunu azaltabilir misiniz? Bu, IP çekirdeğinin RAM / mantık kullanımını düşünülmüş / toplam bant genişliği pahasına azaltabilir.

(Altera) Quartus ile, tasarım hiyerarşisi görünümünde öğeleri çoklu seçebilir ve p & r alanı kullanım renginin kodlanmış / kümelenmiş olduğunu görebilirsiniz. Bu, tasarım modüllerinizin göreli kullanımı hakkında görsel bir fikir verebilir.


Teşekkürler. Çoğaltıcılar için sabit IP makroları kullanıyorum ve dağıtılmış RAM (blok RAM yerine) kullanmak için bazı küçük beşli seçtim rağmen FIFOs yapmak için CoreGen kullandım. Kullanımlarına bakacağım.
Marcus10110
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.