Ho una trasformazione di elaborazione del segnale particolarmente grande che deve essere trasferita da MATLAB a VHDL. Richiede sicuramente una sorta di condivisione delle risorse. Un po 'di calcolo mi ha dato quanto segue:
- 512 fft di 64 punti
- 41210 operazioni di aggiunta multipla
Considerando che il più grande FPGA Virtex 6 ha ~ 2000 blocchi DSP48E, so che posso condividere le risorse al fine di riutilizzare le risorse più volte. Il tempo di esecuzione non è in realtà un problema, il tempo di elaborazione può richiedere relativamente lungo in termini di FPGA.
Per quanto riguarda l'utilizzo delle risorse, l'uso dell'architettura radix-2 lite mi dà blocchi 4dsp / operazione FFT = 2048 blocchi DSP, per un totale di ~ 43k. il più grande FPGA Virtex ha 2k blocchi o 20 operazioni / mux.
Ovviamente anche includere mux così grandi nel tessuto occuperà anche delle fette. Dove trovo il limite superiore di questo limite? Non posso condividere all'infinito le risorse FPGA. I moltiplicatori 41210 sono troppo grandi? Come posso calcolare ciò che è troppo grande?
Ho anche esaminato altre risorse (Slices, Brams, ecc.). Radix-2 Lite fornisce anche 4 x 18k brams / fft = 2048 brams il più grande FPGA Xilinx contiene 2128 Brams. molto borderline. Sono preoccupato che il mio design sia troppo grande.
AGGIORNARE:
Qualche informazione in più sul design stesso. Non posso entrare nei dettagli, ma ecco cosa posso dare:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
output spec datarate: "più veloce della simulazione matlab"
saggi calcoli, ecco dove sono:
Palco FFT: facile. Posso implementare FFT 1/2/4/8, archiviare i risultati in SDRAM e accedervi in seguito. Relativamente piccolo, anche se richiede molto tempo, va bene. usando radix-2 lite posso ottenere 2 DSP48Es e 2 18k BRAMS / FFT. lo streaming dà 6 DSP48Es 0BRAMS / FFT. in entrambi i casi, la FFT a 64 punti è piccola in termini di risorse FPGA.
Moltiplicatori : questo è il mio problema. Gli input di moltiplicazione sono presi dalle tabelle di ricerca o dai dati FFT. È davvero solo un mucchio di moltiplicazioni. Non c'è molto da ottimizzare. Non è un filtro, ma ha caratteristiche simili a un filtro.
Considerando la condivisione delle risorse sull'FPGA, la matematica funziona come segue: un LUT-6 può essere usato come un mux a 4 vie. La formula per un N-way, M bit mux è la seguente:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
scricchiolare i numeri per la mia implementazione non dà buoni risultati. Il 90% della famiglia virtix-6 non ha abbastanza sezioni per condividere le risorse dei propri DSP al fine di eseguire 40.000 operazioni.