Distributore FPGA XILINX 63234 END

Nota importante: Questo PDF scaricabile di un record di risposta viene fornito per migliorarne l'usabilità e la leggibilità. È importante notare che i record di risposta lo sono WebContenuti basati su Xilinx, aggiornati frequentemente man mano che nuove informazioni diventano disponibili. Ti ricordiamo di visitare il sito del Supporto Tecnico Xilinx. Websito e riview (Xilinx Answer 63234) per l'ultima versione di questa risposta.
Introduzione
A causa dell'architettura delle memorie DDR2 e DDR3 e della progettazione del controller della serie MIG 7, le prestazioni non sono semplici. Richiede la comprensione dei vari parametri di temporizzazione Jedec e dell'architettura del controller, e sarà necessario eseguire simulazioni per ottenere le stime. Il principio generale per determinare le prestazioni è lo stesso, ma questo documento fornisce un modo semplice per ottenere l'efficienza utilizzando il controller MIG ex.ampla progettazione con l'ausilio del banco di prova e dello stimolo fileè allegato qui.
Larghezza di banda effettiva
Il bus dati DRAM raggiunge una larghezza di banda prossima al picco solo durante le raffiche di lettura e scrittura, e il suo sovraccarico riduce la velocità effettiva dei dati.

Alcuni exampmeno spese generali sono
- tempo di preaddebito per l'accesso alle righe nella stessa banca (Indirizzo di accesso non nella stessa hit della riga-pagina)
- tempo di ripristino in scrittura per passare dall'accesso in scrittura a quello in lettura
- tempo di inversione del bus per passare dall'accesso in lettura a quello in scrittura
Cicli di clock che trasferiscono dati
- Efficienza (%) = ——————————————-
Cicli di clock totali
Larghezza di banda effettiva = Larghezza di banda di picco * Efficienza
Generazione del design MIG
- Fare riferimento a UG586 Capitolo 1 per i dettagli passo passo su MIG IP ed esampgenerazione del design.
- Prima di eseguire la simulazione delle prestazioni della serie MIG 7, effettuare le seguenti operazioni per assicurarsi che l'ambiente di simulazione sia corretto.
- Aprire il MIG exampProgettate e mappate le librerie appropriate, eseguite la simulazione e assicuratevi di poter vedere il messaggio "test superato" nella trascrizione.
- Per dimostrare il flusso, ho generato un IP MIG per xc7vx690tffg1761-2 e ho invocato l'exampdesign.
- Due cose che dovrebbero essere notate sono i bit dell'indirizzo di memoria e la selezione della mappatura dell'indirizzo di memoria.
- Per esempioampAd esempio, ho selezionato MT41J128M8XX-125 nelle opzioni a discesa della parte di memoria.

Per la parte di memoria selezionata dalla figura 1, riga = 14, colonna = 10 e banco = 3, quindi app_addr_width = riga + colonna + banco + rango = 28

È possibile selezionare BANK_ROW_COLUMN o ROW BANK_COLUMN.
Ho abbandonato la colonna ROW BANK, che rappresenta la mappatura degli indirizzi predefinita.
Example design Simulazione con banco di prova sintetizzabile
- Nelle impostazioni di simulazione, selezionare QuestaSim/ModelSim Simulator e andare al percorso delle librerie compilate.
- Per maggiori dettagli su come puntare al percorso di installazione degli strumenti di terze parti, selezionare il simulatore di destinazione e compilare e mappare le librerie, puoi fare riferimento a (UG900) Vivado Design Suite User Guide Logic Simulation.

Simula la GUI (clicca sulla scheda Esegui simulazione nel project manager) e assicurati di vedere il messaggio "test superato" nella trascrizione.
Modifiche di Performance Simulation RTL
- Fare clic con il pulsante destro del mouse sulla scheda delle fonti, selezionare "Aggiungi o crea fonti di simulazione", andare al file mig7_perfsim_traffic_generator.sv file e fai clic su Fine per aggiungerlo.
- Fare clic con il pulsante destro del mouse sulla scheda delle fonti, selezionare "Aggiungi o crea fonti di simulazione", andare a perfsim_stimulus.txt e fare clic su "Completa aggiunta".
- Commenta l'example_top istanziazione nel sim_tb_top.v file.
- Aggiungi le seguenti righe RTL a sim_tb_top,v





- Modificare APP_ADDR_WIDTH, APP_DATA_WIDTH, RANK_WIDTH, H e BANK_WIDTH in base alla selezione della parte di memoria. I valori possono essere ottenuti da _mig.v file.
- Il nome di istanziazione evidenziato in giallo mig_7series_0_mig può variare in base al nome del componente durante la creazione dell'IP. Verifica di aver scelto un nome diverso e modificalo di conseguenza.

- Una volta generato l'IP, aprire il file _mig.v file e verificare eventuali variazioni nei nomi dei segnali LHS e correggerle.
- app_sr_req, app_ref_req e app_zq_req devono essere inizializzati a 0.
- Come esample_top.v è commentato e nuovo filevengono aggiunti, probabilmente vedrai “?” accanto a mig_7series_0_mig.v file sotto sorgenti di simulazione.
- Per mappare il corretto file, fai clic con il pulsante destro del mouse su mig_7series_0_mig.v, seleziona "Aggiungi sorgenti", vai a /mig_7series_0_example.srcs/sources_1/ip/mig_7series_0/mig_7series_0/user_design/rtl e aggiungi mig_7series_0_mig_sim.v file.
- Se tu vedi "?" per il sottostante files, aggiungi tutti gli RTL filenelle cartelle clocking, controller, ip_top,phy e UI.

- Una volta apportate le modifiche RTL e tutte le richieste filevengono aggiunti alle sorgenti di simulazione, la gerarchia dovrebbe essere simile alla Figura 5.
- IL fileLe icone evidenziate in rosso sono state aggiunte di recente e il simbolo “?” è previsto sui moduli correlati a ECC poiché la configurazione di memoria selezionata ha l’opzione ECC disabilitata.
Stimolo File Descrizione
Ogni schema di stimolo è composto da 48 bit e il formato è descritto nelle Figure da 6-1 a 6-4.

Codifica indirizzo (Indirizzo [35:0])
L'indirizzo è codificato nello stimolo come mostrato dalla Figura 7-1 alla Figura 7-6. Tutti i campi dell'indirizzo devono essere inseriti in formato esadecimale.
Tutti i campi indirizzo hanno una larghezza divisibile per quattro per essere inseriti in formato esadecimale. Il banco di prova invia al Memory Controller solo i bit necessari di un campo indirizzo. Ad esempioampAd esempio, in una configurazione a otto banchi, solo i bit di banco [2:0] vengono inviati al Memory Controller e i bit rimanenti vengono ignorati. I bit aggiuntivi per un campo indirizzo sono forniti per consentire l'inserimento dell'indirizzo in formato esadecimale. È necessario confermare che il valore immesso corrisponda alla larghezza di una determinata configurazione.

- Indirizzo di colonna (Column[11:0]) – L'indirizzo di colonna nello stimolo è fornito fino a un massimo di 12 bit, ma è necessario indirizzarlo in base al parametro di larghezza della colonna impostato nel progetto.
- Indirizzo di riga (Row[15:0]) – L’indirizzo di riga nello stimolo è fornito fino a un massimo di 16 bit, ma è necessario indirizzarlo
- Ciò si basa sul parametro della larghezza delle righe impostato nel progetto.
- Indirizzo banca (Bank[3:0]) – L'indirizzo della banca nello stimolo è fornito fino a un massimo di quattro bit, ma è necessario indirizzarlo in base al parametro di larghezza della banca impostato nel progetto.
- Indirizzo di rango (Rank[3:0]): l'indirizzo di rango nello stimolo viene fornito fino a un massimo di quattro bit, ma è necessario indirizzarlo in base al parametro di larghezza del rango impostato nel progetto.
- L'indirizzo viene assemblato in base al parametro MEM_ADDR_ORDER di livello superiore e inviato all'interfaccia utente.
Ripeti comando (Ripeti comando [7:0])
- Il numero di ripetizioni del comando è il numero di volte in cui il rispettivo comando viene ripetuto sull'interfaccia utente. L'indirizzo per ogni ripetizione viene incrementato di 8. Il numero massimo di ripetizioni è 128.
- Il banco di prova non controlla il limite della colonna e ripete l'operazione se viene raggiunto il limite massimo della colonna durante gli incrementi.
- I 128 comandi riempiono la pagina. Per qualsiasi indirizzo di colonna diverso da 0, il conteggio delle ripetizioni di 128 finisce per essere superato.
- Il limite della colonna si estende fino all'inizio dell'indirizzo della colonna.
Utilizzo degli autobus
L'utilizzo del bus viene calcolato nell'interfaccia utente, prendendo in considerazione il numero totale di letture e scritture e utilizzando la seguente equazione:

- BL8 impiega quattro cicli di clock della memoria
- End_of_stimulus è il momento in cui tutti i comandi vengono eseguiti.
- calib_done è l'ora in cui la calibrazione è terminata.
Exampi modelli
Questi exampi le sono basati su MEM_ADDR_ORDER impostato su BANK_ROW_COLUMN.
Schema di lettura singola
00_0_2_000F_00A_1 – Questo modello è una singola lettura dalla 10a colonna, 15a riga e secondo banco.

Modello di scrittura singolo
00_0_1_0040_010_0 – Questo pattern è una singola scrittura nella 32a colonna, 128a riga e primo banco.

Singola scrittura e lettura allo stesso indirizzo
- 00_0_2_000F_00A_0 – Questo modello è una singola scrittura sulla 10a colonna, 15a riga e seconda banca.
- 00_0_2_000F_00A_1 – Questo modello è una lettura singola dalla 10a colonna, 15a riga e seconda banca

Più scritture e letture con lo stesso indirizzo
- 0A_0_0_0010_000_0 – Ciò corrisponde a 10 scritture con indirizzi che vanno da 0 a 80, come è possibile vedere nella colonna.

- 0A_0_0_0010_000_1 – Ciò corrisponde a 10 letture con indirizzo che inizia da 0 a 8,0, come è possibile vedere nella colonna.

A capo automatico durante le scritture
0A_0_2_000F_3F8_0 – Corrisponde a 10 scritture con l'indirizzo di colonna spostato all'inizio della pagina dopo una scrittura.

Simulazione del generatore di traffico delle prestazioni
A questo punto, hai terminato il MIG exampSimulazione di progettazione. Ciò implica che la configurazione della simulazione sia pronta, che siano state apportate modifiche RTL alla simulazione delle prestazioni, che la nuova gerarchia di simulazione sia corretta e che siano stati compresi i pattern di stimolo. Esegui nuovamente la simulazione con 16 scritture e letture nel file perfsim_stimulus.txt.

- Esegui tutto, attendi che il segnale init_calib_complete venga attivato e potrai vedere il numero di scritture e letture proposte. La simulazione si interromperà.

- Quando ti viene chiesto di uscire dalla simulazione, seleziona No e vai alla finestra della trascrizione, dove potrai vedere le statistiche delle prestazioni.

- Se selezioni "Esci dalla simulazione", le statistiche sulle prestazioni verranno scritte su un file denominato mig_band_width_output.txt e situato nella cartella sim_1/behave.
- Examppercorso della directory:- /mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/behav

Potresti chiederti perché la percentualetagL'utilizzo del bus è pari a solo 29. Eseguire nuovamente la simulazione con le stesse impostazioni IP, ma modificando solo lo stimolo file a 256 scritture e 256 letture
- ff_0_0_0000_000_0
- ff_0_0_0000_000_1
Ora vedrai la percentualetage come 85, il che implica che DDR3 offre un migliore utilizzo del bus per una lunga sequenza di scritture e raffiche di lettura.

Modi generali per migliorare le prestazioni
I fattori che influenzano l'efficienza possono essere suddivisi in due sezioni:
- Specifico per la memoria

- Specifico del controllore
La Figura 9 ti dà un overview dei termini specifici della memoria.
A differenza delle SRAM e delle memorie a blocchi, le prestazioni DDR2 o DDR3 non riguardano solo la velocità massima dei dati.
Dipende da molti fattori temporali, tra cui:
- tRCD: ritardo del comando di riga (o ritardo da ras a cas).
- tCAS(CL): Latenza dello strobe dell'indirizzo di colonna.
- tRP: ritardo di precarica della riga.
- tRAS: tempo di attività della riga (attivare per premodificare).
- tRC: tempo di ciclo di riga. tRC = tRAS + tRP
- tRAC: Ritardo di accesso casuale. tRAC = tRCD + tCAS
- Latenza di scrittura tCWLCASas.
- tZQ: tempo di calibrazione ZQ.
- tRFC: tempo di ciclo di aggiornamento delle righe
- tWTR: Ritardo da scrittura a lettura. Ora dell'ultima transazione di scrittura sul comando di lettura.
- tWR: Tempo di ripristino della scrittura. Ultima transazione di scrittura in tempo di precarica
- La tempistica di tutti i parametri elencati dipende dal tipo di memoria utilizzata e dal grado di velocità della memoria stessa.
- Ulteriori dettagli sulle definizioni e sulle specifiche di temporizzazione sono reperibili negli standard JEDEC DDR2 e DDR3 o in qualsiasi datasheet di un dispositivo di memoria.
L'efficienza dipende principalmente da come si accede alla memoria. Modelli di indirizzi diversi danno risultati di efficienza diversi.
Overhead di temporizzazione della memoria
- Tempo di attivazione e tempo di precarica quando si passa a nuove banche/righe o si cambiano le righe all'interno della stessa banca. In questo modo si riducono i cambi di riga, il che può eliminare tRCD e tRP.
- Invia comandi di scrittura o lettura continui - Mantenimento della temporizzazione tCCD.
- Ridurre al minimo il passaggio dei comandi di scrittura-lettura e di lettura-scrittura: tempo di ripristino della scrittura per passare agli accessi in lettura e tempo di turnaround del bus per passare dalla lettura alla scrittura.
- Impostare un intervallo di aggiornamento adeguato.
- a. La DDR3 SDRAM richiede cicli di aggiornamento a un intervallo periodico medio di tREFI.
- b. È possibile emettere in anticipo un massimo di 8 comandi di aggiornamento aggiuntivi ("pulled in"). Ciò non riduce il numero di aggiornamenti, ma l'intervallo massimo tra due comandi di aggiornamento adiacenti è limitato a 9 × tREFI.

- Utilizzare tutte le banche: è preferibile un meccanismo di indirizzamento adeguato.
- a. Riga-Banco-Colonna: per una transazione che avviene su uno spazio di indirizzamento sequenziale, il core apre automaticamente la stessa riga nel banco successivo del dispositivo DRAM per continuare la transazione al raggiungimento della fine di una riga esistente. È particolarmente adatto ad applicazioni che richiedono l'invio di pacchetti di dati di grandi dimensioni a indirizzi sequenziali.
- b. Bank-Row-Column: quando si supera il limite di una riga, la riga corrente viene chiusa e ne viene aperta un'altra all'interno dello stesso banco. MSB è un indirizzo di banca che può essere utilizzato per passare da un banco all'altro. È adatto per transazioni più brevi e casuali su un blocco di memoria per un certo periodo, seguite da un salto a un altro blocco (banco).
- Lunghezza della raffica
- a. BL 8 è supportato per DDR3 sulla serie 7. BC4 ha un'efficienza molto bassa, inferiore al 50%. Questo perché il tempo di esecuzione di BC4 è lo stesso di BL8. I dati sono semplicemente mascherati all'interno del componente.
- b. Nei casi in cui non si desidera scrivere un burst completo, è possibile prendere in considerazione la maschera dati o la scrittura dopo la lettura.
- Impostare un intervallo ZQ adeguato (solo DDR3)
Il controller invia entrambi i comandi di calibrazione ZQ Short (ZQCS) e ZQ Long (ZQCL).- a. Aderire allo standard DDR3 JEDEC
- b. La calibrazione ZQ è discussa nella sezione 5.5 dello standard JEDEC Spec JESD79-3 DDR3 SDRAM
- c. La calibrazione ZQ calibra la terminazione On-Die (ODT) a intervalli regolari per tenere conto delle variazioni attraverso VT
- d. La logica è contenuta in bank_common.v/vhd
- e. Il parametro Tzqcs determina la velocità con cui un comando di calibrazione ZQ viene inviato alla memoria
- f. È possibile disabilitare il contatore e inviare manualmente il messaggio tramite app_zq_req, in modo simile all'invio manuale di un aggiornamento. Per i dettagli, fare riferimento alla risposta Xilinx 47924.

Spese generali del controllore
- Letture periodiche: per i dettagli, fare riferimento alla risposta Xilinx 43344.
- a. Non modificare il periodo di lettura.
- b. Salta le letture periodiche durante le scritture e indica il numero di letture perse prima di una vera lettura
- Riordino – Per i dettagli, fare riferimento alla risposta Xilinx 34392. Per le interfacce utente e AXI, è preferibile abilitare questa opzione.
- a. Il riordino è la logica che anticipa diversi comandi e ne modifica l'ordine per fare in modo che i comandi non in memoria non occupino larghezza di banda valida. Le prestazioni sono anche correlate al modello di traffico effettivo.
- b. In base al modello di indirizzo, la riorganizzazione aiuta a saltare i comandi di precarica e attivazione e fa sì che tRCD e tRP non occupino la larghezza di banda dei dati.

- Prova ad aumentare il numero di bancomat.
- a. La maggior parte della logica del controller risiede nelle macchine bancarie, e queste corrispondono alle banche DRAM
- b. Un dato bancomat gestisce un solo banco DRAM alla volta.
- c. L'assegnazione degli sportelli bancomat è dinamica, quindi non è necessario disporre di uno sportello bancomat per ogni banca fisica.
- d. Gli sportelli bancomat possono essere configurati, ma è necessario un compromesso tra spazio e prestazioni.
- e. Il numero consentito di sportelli bancomat varia da 2 a 8.
- f. Per impostazione predefinita, i bancomat 4 Bank sono configurati tramite parametri RTL.
- g. Per cambiare bancomat, considerare il parametro nBANK_MACHS = 8 contenuto in memc_ui_top
Example per 8 bancomat – nBANK_MACHS = 8
Ora sei a conoscenza dei fattori che influenzano le prestazioni. Considera un'applicazione upstream che fornisce 512 byte di dati per pacchetto, e devi salvarli in posizioni di memoria diverse. Poiché 512 byte di dati equivalgono a 64 burst di dati DDR3, esegui nuovamente l'esempio.ample design con uno stimolo file contenente 512 scritture, 512 letture e cambio di riga ogni 64 scritture o letture:

Al termine della simulazione, si vedrà che l'utilizzo dell'autobus è pari al 77 percento.

Figura 11: Statistiche sulle prestazioni per 512 scritture e 512 letture – Cambio di riga per 64 scritture o letture.
Ora è possibile applicare le conoscenze acquisite nella sezione precedente per migliorare l'efficienza. Per utilizzare tutti i banchi anziché modificare la riga, modificare il modello di indirizzo per modificare il banco come mostrato di seguito. Ciò equivale a impostare ROW_BANK_Column nell'impostazione di mappatura degli indirizzi di memoria nella GUI MIG.

Al termine della simulazione, vedrai che il precedente tasso di utilizzo dell'autobus era del 77%, ora è dell'87%!

Se hai ancora bisogno di una maggiore efficienza, puoi optare per pacchetti di grandi dimensioni di 1024 o 2048 byte o prendere in considerazione un aggiornamento manuale.
Nota: Xilinx sconsiglia di bypassare l'aggiornamento del controller, poiché non siamo certi che sia possibile rispettare i tempi di aggiornamento automatico JEDEC, che influiscono sull'affidabilità dei dati. Dal controller è possibile modificare NBANNBANk_MACH per osservare il miglioramento delle prestazioni. Tuttavia, questo potrebbe influire sui tempi di progettazione. Per i dettagli su nBANk_MACH, fare riferimento alla risposta Xilinx 36505.

Apri core_name_mig_sim.v file e modificare i parametri nBANK_MACHS da 4 a 8 e rieseguire la simulazione.
Per far sì che il valore del parametro abbia effetto nell'hardware, è necessario aggiornare core_name_mig.v fileHo usato lo stesso schema, ottenendo un utilizzo del bus dell'87% (Figura 2). Con nBANK_MACHS impostato a 8, l'efficienza è ora del 90%.

Inoltre, tieni presente che i controller ½ e ¼ influiscono negativamente sull'efficienza a causa delle loro latenze. Ad esempioampPoiché possiamo inviare comandi solo ogni 4 cicli CK, a volte si verifica un padding aggiuntivo quando si rispettano le specifiche minime di timing della DRAM, che può ridurre l'efficienza rispetto a quella teorica. Prova diversi controller per trovare quello più adatto alle tue esigenze di efficienza. Riferimenti
- SoC Zynq-7000 AP e FPGA serie 7 MIS v2.3 [UG586]
- Centro soluzioni MIG Xilinx http://www.xilinx.com/support/answers/34243.html
Cronologia delle revisioni
13/03/2015 – Versione iniziale..
Documenti / Risorse
![]() |
Distributore FPGA XILINX 63234 END [pdf] Guida utente 63234 Distributore FPGA END, 63234, Distributore FPGA END, Distributore FPGA |

