L'ho fatto alcune volte da solo.
In generale, gli strumenti di progettazione sceglieranno tra un'implementazione di fabric e una sezione DSP in base alle impostazioni di sintesi.
Ad esempio, per Xilinx ISE, nelle impostazioni del processo di sintesi, Opzioni HDL, esiste un'impostazione "-use_dsp48" con le opzioni: Auto, AutoMax, Sì, No. Come puoi immaginare, controlla quanto gli strumenti provano a posizionare Sezioni DSP. Una volta ho avuto un problema in cui ho moltiplicato un numero intero per 3, che ha inferito una porzione DSP - tranne che stavo già inferendo manualmente ogni fetta DSP nel chip, quindi il synth non è riuscito! Ho cambiato l'impostazione su No, perché stavo già usando ogni slice dsp.
Questa è probabilmente una buona regola empirica (ho appena inventato): se il tuo design ha un clock a meno di 50 MHz e probabilmente utilizzerai meno del 50% delle sezioni DSP nel chip, quindi usa semplicemente il *, + e - operatori. questo dedurrà sezioni DSP senza registri della pipeline. Questo limita davvero la velocità massima. (Non ho idea di cosa succede quando usi la divisione)
Tuttavia, se sembra che le sezioni si avvicinino alla velocità massima della sezione DSP (333 MHz per Spartan 6 grado di velocità normale) Di utilizzare tutte le sezioni, è necessario inferirle manualmente .
In questo caso, hai due opzioni.
Opzione 1: utilizzare manualmente il modello di istanza DSP non elaborato. Opzione 2: utilizzare un blocco IP da Xilinx Core Generator. (Vorrei usare questa opzione. Allo stesso tempo, imparerai tutto sulla core gen, che ti aiuterà in futuro)
Prima di eseguire una di queste operazioni, leggere le prime due pagine della guida per l'utente della sezione DSP. Nel caso di Spartan 6, (DSP48A1), sarebbe Xilinx doc UG389:
http://www.xilinx.com/support/documentation/user_guides/ug389.pdf
Considera prima l'opzione Core Generator. Di solito creo un progetto di test in Core Generator per la parte con cui sto lavorando, dove creo un numero qualsiasi di blocchi IP solo per imparare il sistema. Quindi, quando sono pronto per aggiungerne uno al mio progetto in ISE, faccio clic con il pulsante destro del mouse su Design Hierarchy, faccio clic su nuova fonte e seleziono "IP (Generatore CORE e procedura guidata per l'architettura)" in modo da poter modificare e rigenerare direttamente il blocco dal mio progetto.
In Core gen, dai un'occhiata ai diversi blocchi IP tra cui puoi scegliere: ce ne sono alcune dozzine, la maggior parte delle quali sono piuttosto interessanti.
Il nucleo moltiplicatore è quello che dovresti guardare prima. Dai un'occhiata a ogni pagina e fai clic sul pulsante del foglio dati. Le parti importanti sono la larghezza dei bit interi, gli stadi della tubazione (latenza) e tutti i segnali di controllo. Questo produce il blocco più semplice possibile togliendo tutte le porte di cui non hai bisogno.
Quando stavo costruendo un filtro IIR di ordine 5 per 3 l'anno scorso, ho dovuto usare il modello di istanza manuale poiché stavo costruendo un'implementazione molto personalizzata, con 2 slice DSP con un clock 4 volte più veloce della frequenza di campionamento. È stato un dolore totale.