Matlab'dan VHDL'ye taşınması gereken özellikle büyük bir sinyal işleme dönüşümüne sahibim. Kesinlikle bir çeşit kaynak paylaşımı gerektirir. Biraz hesaplama bana şunları verdi:
- 64 noktadan 512 fft
- 41210 çarpma-ekleme işlemleri
Virtex 6 FPGA'nın ~ 2000 DSP48E bloğuna sahip olduğu düşünüldüğünde, kaynakları birden çok kez tekrar kullanmak için kaynak paylaşımını yapabileceğimi biliyorum. Yürütme süresi gerçekten sorun değil, işlem süresi FPGA açısından nispeten uzun sürebilir.
Kaynak kullanımına baktığımda, radix-2 lite mimarisini kullanmak bana 4dsp blok / FFT işlemi = 2048 DSP blok, toplamda ~ 43k. en büyük Virtex FPGA 2k blok veya 20 işlem / mux'e sahiptir.
Açıkçası, bu kadar büyük mumu kumaşa dahil etmek de dilim alacaktır. Bu sınırın üst ucunu nerede bulabilirim? FPGA kaynaklarını sonsuza kadar paylaşamıyorum. 41210 çarpanları çok mu büyük? Çok büyük olanı nasıl hesaplayabilirim?
Ayrıca diğer kaynaklara da baktım (Slices, Brams, vs.). Radix-2 Lite ayrıca 4 x 18k bram / fft = 2048 bram verir ve en büyük Xilinx FPGA 2128 Brams içerir. çok sınırda. Tasarımımın çok büyük olduğundan endişeliyim.
GÜNCELLEME:
Tasarımın kendisi hakkında biraz daha bilgi. Detaylara giremiyorum, ama verebileceğim şey:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
output datarate spec: "matlab simülasyonundan daha hızlı"
akıllıca hesaplamalar, ben buradayım:
FFT aşaması: kolay. 1/2/4/8 FFT uygulayabilir, sonuçları SDRAM'da saklayabilir ve daha sonra erişebilirim. Nispeten küçük, uzun sürse bile, sorun değil. radix-2 lite kullanarak 2 DSP48E ve 2 18k BRAMS / FFT alabilirim. akış 6 DSP48E 0BRAMS / FFT verir. her iki durumda da, FPGA kaynak açısından 64 punto FFT küçüktür.
Çarpanlar : bu benim sorunum. Çarpma girdileri, arama tablolarından veya FFT verilerinden alınır. Gerçekten sadece bir sürü çarpma eklentisi. Optimize edilecek çok şey yok. Filtre değil, filtreye benzer özelliklere sahiptir.
FPGA'da kaynak paylaşımı göz önüne alındığında, matematik şu şekilde çalışır: Bir LUT-6, 4 yollu bir mux olarak kullanılabilir. N-yollu, M bit mux'in formülü aşağıdaki gibidir:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
benim uygulama için sayıları crunching iyi sonuç vermez. Virtix-6 ailesinin% 90'ı, 40 bin işlem yapmak için DSP'lerini kaynak paylaşmak için yeterli dilime sahip değildir.