Interfacciamento della memoria DDR con FPGA AMD/Xilinx

Phil Salmony
|  Creato: luglio 18, 2023  |  Aggiornato: maggio 14, 2024
Interfacciamento della memoria DDR con FPGA AMD/Xilinx

Introduzione

Interfacciare la memoria volatile DDR a FPGA senza esperienza pregressa può inizialmente sembrare piuttosto intimidatorio. Nonostante la flessibilità intrinseca di un FPGA, dove potremmo presumere di poter collegare l'I/O della memoria DDR esterna praticamente ovunque a qualsiasi pin libero, dobbiamo comunque considerare molte limitazioni.

Ad esempio, dove posizionare certi gruppi di pin della memoria DDR, quali tensioni utilizzare per le banche, quali orologi ci servono e dove collegarli, come evitare violazioni dei tempi, e così via.

Oltre all'interfacciamento a livello di schema, dobbiamo anche preoccuparci dell'interfaccia "nel mondo reale" sul circuito stampato, come alimentazione e distribuzione, decoupling, terminazione, impedenza e lunghezza delle tracce, abbinamento dei ritardi, e altro ancora.

Questo articolo esaminerà l'interfacciamento della memoria DDR con le FPGA da un punto di vista a livello di sistema e di schema. Come esempio pratico, esamineremo un design DSP audio basato su AMD/Xilinx Spartan-7 (denominato 'Xerxes'), che si interfaccia con della memoria DDR2.

Interfacciamento della memoria DDR con FPGA AMD/Xilinx_Xerxes

Hardware DSP audio Xerxes (FPGA AMD/Xilinx Spartan-7 con memoria DDR2)

Tipo di Memoria

Il tipo di memoria che utilizziamo dipende dal design. Dipende dalle nostre esigenze di capacità e larghezza di banda della memoria, così come da ciò che la nostra FPGA scelta è in grado di fare.

Generalmente, la maggior parte delle FPGA moderne può interfacciarsi con memoria DDR2 e DDR3 (e le loro varianti a basso consumo e bassa tensione). Ovviamente, è anche possibile utilizzare memoria DDR4 più veloce e versioni successive, ma solitamente solo per FPGA più avanzate.

Non solo la massima velocità di trasferimento dati possibile è importante, ma anche i requisiti di tensione e potenza, il tipo di pacchetto, il costo e la disponibilità sono importanti. Tutto ciò deve essere considerato nelle prime fasi della progettazione.

Confronto Memoria DDR (Fonte: synopsys.com)

Confronto Memoria DDR (Fonte: synopsys.com)

Quando scegliamo il nostro tipo di memoria, dobbiamo anche prestare attenzione al grado di velocità del dispositivo di memoria e alla valutazione della velocità del controller di memoria all'interno dell'FPGA. Possiamo scegliere di "derating" la nostra memoria o il controller, quindi non funzionando a piena larghezza di banda, il che a sua volta ci dà più margine di tempo.

Tabella tipica di Derating della Memoria (Fonte: AMD/Xilinx UG933)

Tabella tipica di Derating della Memoria (Fonte: AMD/Xilinx UG933)

Specificamente per le FPGA AMD/Xilinx, suggerirei di scaricare il loro IDE Vivado e giocare con il Memory Interface Generator (MIG) IP gratuito.

Questo ti mostrerà rapidamente quali tipi di memoria, gradi di velocità e parti compatibili puoi utilizzare.

Esempio di parti di memoria compatibili con Vivado MIG

Esempio di parti di memoria compatibili con Vivado MIG

Potresti chiederti, perché ho scelto la memoria DDR2 per la scheda Xerxes?

Anche se è uno standard piuttosto vecchio, usare la memoria DDR2 significava che potevo utilizzare il regolatore da 1.8V già disponibile sulla scheda (che alimenta altre parti del FPGA) e non dovevo aggiungere un altro regolatore separato.

Inoltre, il design di Xerxes non ha particolari requisiti di larghezza di banda della memoria, e quindi un'interfaccia DDR2 era sufficiente.

Inoltre, avere un'interfaccia a larghezza di banda inferiore semplifica il PCB, la terminazione e i vincoli di temporizzazione.

 

Memoria DDR e Interfaccia FPGA

Dopo aver scelto un dispositivo di memoria adatto, è il momento di collegarlo all'FPGA nel tuo schema.

Prima, dobbiamo scegliere una banca adatta. Se stai utilizzando un'interfaccia dati larga 16 bit (o inferiore), per la maggior parte degli FPGA questa può di solito adattarsi in una banca. Se no, dobbiamo dividere l'interfaccia di memoria su più banche.

Per semplicità, opteremo per un'interfaccia di memoria larga 16 bit, come nel caso della scheda Xerxes. Scegli una banca libera che possa funzionare con la stessa tensione della memoria DDR stessa (nel caso di Xerxes, questa è la banca 34 a 1.8V a causa dell'uso della memoria DDR2).

Banca FPGA 34 con Decoupling Appropriato Alimentato dal Fornitore 1.8V

Banca FPGA 34 con Decoupling Appropriato Alimentato dal Fornitore 1.8V

Per gli FPGA AMD/Xilinx, utilizzando gli strumenti Vivado e MIG, ottenere il pin-out per la nostra memoria DDR è molto semplice. Lo strumento suggerisce un pin-out adatto per quella banca, oppure possiamo assegnare manualmente i pin e verificare il pin-out.

Strumento Pin-Out Vivado MIG

Strumento Pin-Out Vivado MIG

Se configuri manualmente il pin-out, assicurati che i singoli canali byte DDR abbiano lo stesso numero di byte della banca e che gli strobe differenziali siano sui pin DQS capaci differenziali dell'FPGA.

Ricorda che il pin-out sarà probabilmente aggiustato durante la fase di layout e routing del PCB. Grazie alla flessibilità dell'FPGA, scambiare i pin durante il processo di progettazione del PCB può semplificare il routing e minimizzare le transizioni tra i layer.

Per questo esempio, poiché stiamo funzionando da una singola banca, dobbiamo usare il VREF interno, limitando la larghezza di banda massima della memoria.

Inoltre, dobbiamo prestare attenzione al clocking. Idealmente, la fonte di clock dovrebbe essere nella stessa banca collegata a un pin (o pin, se si utilizza una fonte di clock differenziale) capace di clocking.

Infine, assicurati di utilizzare gli strumenti dei fornitori per verificare il progetto e il timing. Quindi, con il pin-out iniziale a posto, nel tuo schema, definisci classi di net, coppie differenziali e regole, e usa la codifica colori per rendere la vita del tuo progetto PCB più semplice.

Connessioni DDR2 e sorgente di clock del Bank 34 FPGA

Connessioni DDR2 e sorgente di clock del Bank 34 FPGA

Per un singolo dispositivo, abbiamo semplicemente bisogno di realizzare connessioni punto-punto sulla componente della memoria DDR.

La terminazione dovrebbe essere presente sui segnali di indirizzo/comando/controllo (ACC); tuttavia, per tassi di dati inferiori possiamo spesso farne a meno. Io aggiungo sempre la terminazione sulla coppia di clock differenziale. Le corsie di byte dei dati sono terminate internamente su entrambe le estremità.

Si raccomanda di posizionare resistori di pull-down da 4.7k sui pin CKE, ODT e, opzionalmente, sulle linee CS#.

Connessioni di segnale e alimentazione del modulo di memoria DDR2

Connessioni di segnale e alimentazione del modulo di memoria DDR2

Infine, ovviamente il modulo di memoria deve essere alimentato. Nel caso della scheda Xerxes, il modulo DDR2 è connesso allo stesso regolatore da 1.8V del nostro bank 34 FPGA. È richiesta un'adeguata decoupling – come regola generale, se non specificato diversamente nei datasheet o nelle note applicative, l'obiettivo è utilizzare un piccolo condensatore (~100nF) per ogni due pin VDD e un condensatore di massa più grande per ogni dieci pin VDD.

La tensione del pin VREF può essere generata tramite un semplice divisore di potenziale con un condensatore di filtraggio, come mostrato nell'immagine sopra.

Conclusione

In questo articolo, abbiamo delineato le strategie di base per incorporare la memoria DDR esterna, non volatile, nei nostri progetti basati su FPGA da un punto di vista a livello di sistema e di schema.

Ricorda che questi sono i concetti di base, e a seconda delle esigenze del tuo sistema, il progetto sarà molto più complesso. Specialmente, se prevedi di utilizzare parti di memoria e interfacce più veloci, e più moduli.

Quando progetti sistemi avanzati basati su FPGA e DDR, assicurati di utilizzare gli strumenti e le funzionalità contenuti in strumenti ECAD di classe mondiale come Altium Designer. Assicurati di ottenere la tua prova gratuita di Altium Designer e Altium 365 qui.

Sull'Autore

Sull'Autore

Phil Salmony è un ingegnere professionista che si occupa di progettazione hardware e della creazione di contenuti di ingegneria educativa. Dopo essersi laureato all'Università di Cambridge con una laurea specialistica in ingegneria dei sistemi elettrici e di controllo, ha iniziato la sua carriera di ingegnere presso una grande azienda aerospaziale tedesca. In seguito, ha cofondato una startup di droni in Danimarca, dove ha ricoperto il ruolo di ingegnere capo per la progettazione di componenti elettronici e PCB, concentrandosi su sistemi integrati a segnale misto. Attualmente gestisce il suo servizio di consulenza tecnica in Germania, concentrandosi prevalentemente sull'elettronica digitale e sulla progettazione PCB.

Oltre all'attività di consulenza, Phil gestisce il suo canale YouTube (Phil's Lab), dove crea video di progettazione didattica su argomenti quali la progettazione PCB, l'elaborazione digitale dei segnali e l'elettronica a segnale misto.

Risorse correlate

Documentazione Tecnica Correlata

Tornare alla Pagina Iniziale
Thank you, you are now subscribed to updates.