VHDL: Tasarımda çarpanları uygularken '*' operatörünü kullanma


10

Günümüzde FPGA'lar DSP bloklarında, en son FPGA'lar IEEE-754 uyumlu kayan nokta ünitelerinde bile üretilmiştir.

İçinde gerekli parametreleri seçtikten sonra bir GUI kullanarak DSP varlığı / modülü oluşturmak ve ardından tasarımda anında oluşturmak mümkündür.

Bu tür mikro yönetimi gerçek DSP bloklarını örnekleme tasarımında ne zaman yapmamız gerekir ve ne zaman koda bir '*' operatörü girip sentez aracının düşük seviye ayrıntılarını işlemesine izin veririz? Hangisi daha iyi?

İkili çarpma söz konusu olduğunda birçok farklı çarpma algoritması vardır. Şimdi silikon üzerinde DSP blokları inşa ettik ve hatta kayan nokta çarpanları inşa ettik, bu tüm bu algoritmaların etkili bir şekilde eskimiş olmadığı anlamına geliyor.


Kumaşta hangi FPGA'nın 754 uyumlu FPU'lar var?
Martin Thompson

Yanıtlar:


6

Bunu birkaç kez kendim yaptım.

Genel olarak tasarım araçları, bir kumaş uygulaması ile sentez ayarlarına dayalı bir DSP dilimi arasında seçim yapar.

Örneğin, Xilinx ISE için, sentez işlemi ayarlarında, HDL Seçenekleri'nde, seçeneklerle birlikte bir "-use_dsp48" ayarı vardır: Otomatik, Otomatik Maks, Evet, Hayır. Tahmin edebileceğiniz gibi, bu, araçların ne kadar zor yerleştirmeye çalıştığını denetler DSP dilimleri. Bir keresinde, bir DSP dilimi çıkaran bir tamsayıyı 3 ile çarptığımda bir sorun yaşadım - tek fark, çipteki her DSP dilimini manuel olarak çıkardığımdan, synth başarısız oldu! Ayarı Hayır olarak değiştirdim, çünkü zaten her dsp dilimini kullanıyordum.

Bu muhtemelen iyi bir temel kuraldır (az önce uydurdum): tasarımınız 50 MHz'den daha az bir hıza ayarlanmışsa ve muhtemelen yongadaki DSP dilimlerinin% 50'sinden daha azını kullanacaksanız, *, + ve - operatörleri. bu, boru hattı kaydı olmayan DSP dilimleri çıkartacaktır. Bu, maksimum hızı gerçekten sınırlar. (Bölümü kullandığınızda ne olacağı hakkında hiçbir fikrim yok)

Ancak, dilimleri DSP diliminin maksimum hızına (Spartan 6 normal hız derecesi için 333 MHz) daha yakın çalıştıracaksanız, tüm dilimleri kullanacaksınız, bunları manuel olarak çıkarmalısınız. .

Bu durumda, iki seçeneğiniz vardır.

Seçenek 1: Ham DSP örnekleme şablonunu el ile kullanın. Seçenek 2: Xilinx Core Generator'dan bir IP bloğu kullanın. (Bu seçeneği kullanırdım. Aynı zamanda, gelecekte yardımcı olacak çekirdek gen hakkında her şeyi öğreneceksiniz)

Bunlardan herhangi birini yapmadan önce, DSP dilimi kullanım kılavuzunun ilk birkaç sayfasını okuyun. Spartan 6, (DSP48A1) durumunda, bu Xilinx doc UG389 olurdu: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

İlk olarak Core Generator seçeneğini düşünün. Çalıştığım kısım için genellikle Core Generator'da bir test projesi oluşturuyorum ve burada sadece sistemi öğrenmek için herhangi bir sayıda IP bloğu oluşturuyorum. Ardından, ISE'de tasarımıma bir tane eklemeye hazır olduğumda, Tasarım Hiyerarşisi'ne sağ tıklıyorum, yeni kaynağı tıklıyorum ve bloğu doğrudan düzenleyip yeniden oluşturabilmek için "IP (CORE Jeneratör ve Mimari Sihirbazı)" nı seçiyorum. benim projemden.

Core gen'de, aralarından seçim yapabileceğiniz farklı IP bloklarına bir göz atın - çoğu oldukça serin olan birkaç düzine var.

Çarpan Çekirdek, ilk önce bakmanız gereken şeydir. Her sayfayı kontrol edin ve veri sayfası düğmesini tıklayın. Önemli parçalar, tamsayı bit genişlikleri, boru hattı aşamaları (gecikme) ve tüm kontrol sinyalleridir. Bu, ihtiyacınız olmayan tüm bağlantı noktalarını kaldırarak mümkün olan en basit bloğu üretir.

Geçen yıl 5'e 3 sıralı IIR filtresi yaparken, çok özel bir uygulama oluşturduğumdan, örnekleme oranından 4 kat daha hızlı 2 DSP dilimi ile manuel örnekleme şablonunu kullanmak zorunda kaldım. Tam bir acıydı.


13

Sadece iki sayıyı çarpmak istiyorsanız ve bunlar DSP bloğuna *uyarsa , operatör bir DSP bloğunu çıkarmalıdır. Değilse, sentez aracını geri gönderin :)

Bununla birlikte, DSP işlevselliğinin daha karmaşık kombinasyonlarından yararlanmak için genellikle bloğun doğrudan başlatılması ve parametrelerinin yapılandırılması gerekir. Çıkarım yoluyla iyi eşleştirilemeyen şeylere örnekler ( örnek olarak Xilinx DSP48E1 kullanılarak ):

  • Ön toplayıcının kullanımı
  • Akümülatör kullanımı
  • Desen dedektörü kullanımı
  • Mantık biriminin kullanımı

Ve özellikle yukarıdakilerin kombinasyonları.

Sentez araçları henüz tamamen keyfi mantık ve aritmetik kombinasyonlarını umduğunuz kadar verimli bir şekilde haritalayacak kadar iyi değildir.


4

Mevcut DSP blokları varsa, mümkünse bunları kullanmalısınız çünkü aynı şeyi yapmak için LUT'ları kullanmaktan daha verimli olacaktır. Yüksek performanslı bir çarpmaya ihtiyacınız olmadığı sürece, bu durumda yerden tasarruf etmek için boru hattılı bir toplayıcı ve vardiya kaydı uygulamanız gerekir.

Ancak, GUI araçlarına girmeden önce DSP bloklarının çıkarımını inceleyeceğim. Xilinx XST kılavuzunda, saf verilog / VHDL ile DSP bloklarının nasıl örnekleneceği konusunda HDL 'tarifleri' vardır. Temel olarak, çarpanlardan önce ve / veya sonra yeterli sayıda kayıt eklerseniz, XST işlemi otomatik olarak uygulamak için bir DSP bloğu kullanır. Sentez günlüklerini kontrol ederek DSP bloklarını doğru şekilde çıkartıp çıkarmadığını kontrol edebilirsiniz. Sanırım Altera'da benzer bir şey var.

Bu arada, sadece ilk tohum için bir çarpan kullanan bir Mersenne twister uygulaması üzerinde çalıştığım için bunu birkaç dakika önce yapıyorum. İlk geçiş uygulamam zamanlamayı karşılamıyor, ancak işlevler doğru. XST ayrıca çarpma işlemini DSP bloklarına koyar, ancak optimize edilmez, böylece istediğim kadar yarı çalışır. Muhtemelen saat döngüsünün 32 katını alacak, ancak artık bir donanım çarpanı gerektirmeyecek bir kaydırma ve ekleme tekniği kullanarak çarpımı yeniden uygulayacağım.


Donanım çarpanı kullanılırken neden zamanlama başarısız olsun?
quantum231

Görünüşe göre, 32 bit x 32 bit boru hattı olmayan çarpma 8 ns'den fazla sürer.
alex.forencich

hmm anlıyorum, bunu düşünmedim. Bu nedenle DSP blokları boru hattı değildir. Çarpmayı tam olarak nasıl uyguladıklarını merak ediyorum. Gerçekten sert bir paralel çarpan mı?
quantum231

Birkaç farklı şekilde çalışacak şekilde yapılandırılabileceğini düşünüyorum. XST kılavuzuna göre, giriş ve çıkışa yeterli kayıt eklenmesi, XST'nin bir DSP48 diliminde bir boru hattı çarpanı kullanmasına izin verecektir. Benim durumumda sadece bir çıkış yazmacı ve giriş yazmacı yoktu, bu yüzden bundan yararlanamadı. Bu sadece başlatma için olduğu için (PRNG tohumlama), kaynak kullanımından tasarruf etmek için paralel çarpımı biraz seri çarpanla değiştirdim.
alex.forencich

2

Ne kadar optimizasyona ihtiyacınız olduğuna ve tasarımınızın ne kadar taşınabilir olması gerektiğine bağlıdır. Biraz yazılım gibidir, biraz montaj kullanarak optimize eder veya derleyicinin talimatları seçmesine izin verir. Kombinatoryal çift duyarlıklı bir çarpanı karşılayamamanız için bazı boyut / hız dengelerine de sahip olabilirsiniz.

Orada FPGA'larda kablolu FP çarpanlarının nerede olduğunu bilmiyordum.

Bir CPU için uygun gerçek bir IEEE P754 uyumlu çarpma operatörü, büyük bir çarpandan daha fazlasını içerir: Üsleri eklemeniz, denormalleri kaydırmanız, sonsuzları yönetmeniz ve birkaç çoğunlukla işe yaramaz bayrağı (yanlış, alt akış ...)


Altera 10 serisi gibi en yeni nesil FPGA'larda donanımın kendisinde IEEE-754 uyumlu kayan nokta çarpanları bulunur! Yine de bunları kendim kullanma fırsatım olmadı.
quantum231

DSP blokları oluşturduysak, FPGA kombinatoryal çarpan yerine bunları kullanmalı mı, yoksa bellek bloğunu kullanan başka bir algoritma mı kullanmalı?
quantum231

2

Bu dokümanı http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf okudum :

Tek bir DSP bloğuna uyan fonksiyonlar boru hattılı RTL kodundan verimli bir şekilde sentezlenebilirken, birden fazla DSP bloğu gerektiren daha karmaşık fonksiyonların daha düşük performanstan muzdarip olduğunu bulduk. Matematiksel bir işlevin standart bir RTL açıklaması, örneğin her işlemden sonra yoğun bir şekilde boru hattı olabilir, ancak bu boru hattı, DSP bloğunun yapısını ve iç aşamalarını hesaba katmayabileceğinden, elde edilen sentezlenmiş tasarım alt standart performans gösterebilir. DSP blokları, tam hızda çalışmalarına izin vermeyecek şekilde birleştirilir.

Keşke bulgularını kontrol etmek için araçlarının kaynağını bulabilseydim.

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.