Ghid de estimare a performanței Xilinx DDR2 MIG 7
Notă importantă: Acest PDF descărcabil al unei înregistrări de răspuns este furnizat pentru a spori gradul de utilizare și lizibilitatea acestuia. Este important de reținut că Answer Records sunt Webconținut bazat pe care este actualizat frecvent pe măsură ce devin disponibile informații noi. Vă reamintim să vizitați Asistența tehnică Xilinx Website si review (Xilinx Answer 63234) pentru cea mai recentă versiune a acestui răspuns.
Introducere
Din cauza modului în care sunt proiectate memoriile DDR2 și DDR3 și a modelului controlerului din seria MIG 7, performanța nu este simplă.
Este nevoie de o înțelegere a diferiților parametri Jedec Timing și a arhitecturii controlerului și va trebui să rulați simulări pentru a obține estimări.
Principiul general pentru determinarea performanței este același, dar acest document oferă o modalitate ușoară de a obține eficiență folosind MIG example design cu ajutorul bancului de testare și stimul fileeste atașată aici.
Lățime de bandă eficientă
Autobuzul de date DRAM atinge o lățime de bandă aproape de vârf numai în timpul rafale de citire și scriere, iar overhead-ul scade rata efectivă de date.
Câțiva exampcosturile generale sunt:
- timp de preîncărcare accesarea rândurilor din aceeași bancă (adresa de acces nu este în aceeași accesare a paginii de rând)
- timpul de recuperare la scriere pentru a trece de la acces de scriere la acces de citire
- timpul de rotație al autobuzului pentru a trece de la accesul de citire la acces de scriere
Lățime de bandă efectivă = Lățime de bandă maximă * Eficiență
MIG Design Generation
Consultați UG586 Capitolul 1 pentru detalii pas cu pas despre MIG IP și example design generation.
Înainte de a rula simularea performanței MIG 7 Series, faceți următoarele pentru a vă asigura că mediul dvs. de simulare este bun. Deschideți MIG exampproiectați și mapați bibliotecile corespunzătoare, rulați simularea și asigurați-vă că puteți vedea mesajul „test trecut” în transcriere.
Pentru a demonstra fluxul, am generat un IP MIG pentru xc7vx690tffg1761-2 și am invocat exampproiecta.
Două lucruri care ar trebui remarcate sunt biții de adresă de memorie și selectarea mapării adresei de memorie.
De example, am selectat MT41J128M8XX-125 sub opțiunile drop-down ale părții de memorie.
Pentru partea de memorie selectată din Figura-1, rând = 14, coloană = 10 și bank = 3, deci app_addr_width = rând + coloană + bancă + rang = 28
Puteți selecta fie BANK_ROW_COLUMN, fie coloana ROW BANK.
Am lăsat coloana ROW BANK, care este maparea implicită a adresei.
Example design Simulare cu banc de testare sintetizabil
Sub Setări de simulare, selectați QuestaSim/ModelSim Simulator și navigați la locația bibliotecilor compilate.
Pentru detalii despre indicarea către o cale de instalare a instrumentelor terțe, selectarea simulatorului țintă și compilarea și maparea bibliotecilor, puteți consulta (UG900) Ghidul utilizatorului Vivado Design Suite Simulare logică
Rulați simularea prin GUI (faceți clic pe fila Run Simulation din managerul de proiect) și asigurați-vă că vedeți mesajul „test trecut” în transcriere.
Modificări RTL Simulare performanță
- Faceți clic dreapta pe fila surse, selectați „adăugați sau creați surse de simulare” și navigați la mig7_perfsim_traffic_generator.sv file și faceți clic pe Terminare pentru a o adăuga.
- Faceți clic dreapta pe fila surse, selectați „adăugați sau creați surse de simulare”, navigați la perfsim_stimulus.txt și faceți clic pe Terminare pentru a o adăuga.
- Comentează exampinstanțierea le_top în sim_tb_top.v file.
- Adăugați liniile RTL de mai jos la sim_tb_top,v
- localparam APP_ADDR_WIDTH = 28;
- localparam APP_DATA_WIDTH = 64;
- localparam APP_MASK_WIDTH = APP_DATA_WIDTH / 8;
- localparam MEM_ADDR_ORDER = „BANK_ROW_COLUMN”;
- localparam BANK_WIDTH = 3;
- localparam RANK_WIDTH = 1;
- fir [APP_ADDR_WIDTH-1:0] c0_ddr3_app_addr;
- fir [2:0] c0_ddr3_app_cmd;
- fir c0_ddr3_app_en;
- fir [APP_DATA_WIDTH-1:0] c0_ddr3_app_wdf_data;
- fir c0_ddr3_app_wdf_end;
- fir [APP_MASK_WIDTH-1:0] c0_ddr3_app_wdf_mask;
- fir c0_ddr3_app_wdf_wren;
- fir [APP_DATA_WIDTH-1:0] c0_ddr3_app_rd_data;
- fir c0_ddr3_app_rd_data_end;
- fir c0_ddr3_app_rd_data_valid;
- fir c0_ddr3_app_rdy;
- fir c0_ddr3_app_wdf_rdy;
- fir c0_data_compare_error;
- wire ui_clk;
- wire ui_clk_sync_rst;
- fir app_sr_req = 0;
- fir app_ref_req = 0;
- fir app_zq_req =0;
- fir c0_app_wdf_mask =0;
Instanțierea controlerului de memorie FPGA
mig_7series_0_mig u_mig_7series_0_mig (
// Porturi de interfață de memorie
- .ddr3_addr (ddr3_addr_fpga),
- .ddr3_ba (ddr3_ba_fpga),
- .ddr3_cas_n (ddr3_cas_n_fpga),
- .ddr3_ck_n (ddr3_ck_n_fpga),
- .ddr3_ck_p (ddr3_ck_p_fpga),
- .ddr3_cke (ddr3_cke_fpga),
- .ddr3_ras_n (ddr3_ras_n_fpga),
- .ddr3_reset_n (ddr3_reset_n),
- .ddr3_we_n (ddr3_we_n_fpga),
- .ddr3_dq (ddr3_dq_fpga),
- .ddr3_dqs_n (ddr3_dqs_n_fpga),
- .ddr3_dqs_p (ddr3_dqs_p_fpga),
- .init_calib_complete (init_calib_complete),
- .ddr3_cs_n (ddr3_cs_n_fpga),
- .ddr3_dm (ddr3_dm_fpga),
- .ddr3_odt (ddr3_odt_fpga),
// Porturile interfeței aplicației
- .app_addr (c0_ddr3_app_addr),
- .app_cmd (c0_ddr3_app_cmd),
- .app_en (c0_ddr3_app_en),
- .app_wdf_data (c0_ddr3_app_wdf_data),
- .app_wdf_end (c0_ddr3_app_wdf_end),
- .app_wdf_wren (c0_ddr3_app_wdf_wren),
- .app_rd_data (c0_ddr3_app_rd_data),
- .app_rd_data_end (app_rd_data_end),
- .app_rd_data_valid (c0_ddr3_app_rd_data_valid),
- .app_rdy (c0_ddr3_app_rdy),
- .app_wdf_rdy (c0_ddr3_app_wdf_rdy),
- .app_sr_req (app_sr_req),
- .app_ref_req (app_ref_req),
- .app_zq_req (app_zq_req),
- .app_sr_active (app_sr_active),
- .app_ref_ack (app_ref_ack),
- .app_zq_ack (app_zq_ack),
- .ui_clk (ui_clk),
- .ui_clk_sync_rst (ui_clk_sync_rst),
- .app_wdf_mask (c0_ddr3_app_wdf_mask),
// Porturi de ceas de sistem
- .sys_clk_i (sys_clk_i),
// Porturi de referință pentru ceas
- .clk_ref_i (clk_ref_i),
- .sys_rst (sys_rst)
- );
Instanțierea generatorului de trafic de performanță
mig7_perfsim_traffic_generator#
(
.APP_DATA_WIDTH (APP_DATA_WIDTH),
.COL_WIDTH (COL_WIDTH),
.ROW_WIDTH (ROW_WIDTH),
.RANK_WIDTH (RANK_WIDTH),
.BANK_WIDTH (BANK_WIDTH),
.MEM_ADDR_ORDER (MEM_ADDR_ORDER),
.tCK (tCK ),
.ADDR_WIDTH (APP_ADDR_WIDTH)
)
u_traffic_gen
(
.clk (ui_clk ),
.rst (ui_clk_sync_rst),
.init_calib_complete (init_calib_complete),
.cmp_error (c0_data_compare_error),
.app_wdf_rdy (c0_ddr3_app_wdf_rdy ),
.app_rd_data_valid (c0_ddr3_app_rd_data_valid),
.app_rd_data (c0_ddr3_app_rd_data ),
.app_rdy (c0_ddr3_app_rdy),
.app_cmd (c0_ddr3_app_cmd ),
.app_addr (c0_ddr3_app_addr ),
.app_en (c0_ddr3_app_en ),
.app_wdf_mask (c0_ddr3_app_wdf_mask),
.app_wdf_data (c0_ddr3_app_wdf_data),
.app_wdf_end (c0_ddr3_app_wdf_end ),
.app_wdf_wren (c0_ddr3_app_wdf_wren)
);
- 5. Modificați APP_ADDR_WIDTH, APP_DATA_WIDTH, RANK_WIDTH și BANK_WIDTH în funcție de selecția dvs. de memorie.
Valorile pot fi obținute de la _mig.v file. - Numele de instanțiere evidențiat în galben mig_7series_0_mig poate varia în funcție de numele componentei dvs. în timpul creării IP, verificați dacă ați ales un alt nume și modificați-l în consecință.
- Odată ce IP-ul este generat, deschideți _mig.v file și verificați încrucișați pentru orice variații ale numelor semnalelor LHS și corectați-le.
- app_sr_req, app_ref_req și app_zq_req ar trebui să fie inițializate la 0.
- Ca example_top.v este comentat și nou filesunt adăugate, probabil veți vedea „?” lângă
mig_7series_0_mig.v file sub surse de simulare.
Pentru a mapa corect file, faceți clic dreapta pe mig_7series_0_mig.v, selectați „Adăugați surse”, Navigați la
/mig_7series_0_example.srcs/sources_1/ip/mig_7series_0/mig_7series_0/user_design/rtl
și adăugați mig_7series_0_mig_sim.v file. - Dacă vedeți „?” pentru subiacent files, adăugați toate RTL files în folderele de ceas, controller, ip_top,phy și UI.
- Odată ce modificările RTL sunt făcute și toate cele necesare filesunt adăugate la sursele de simulare, Ierarhia ar trebui să fie similară cu Figura 5.
The fileEvidențiate cu roșu sunt nou adăugate, iar „?” este de așteptat pe modulele legate de ECC, deoarece configurația de memorie selectată are opțiunea ECC dezactivată.
Stimul File Descriere
Fiecare model de stimul este de 48 de biți și formatul este descris în figurile 6-1 până la 6-4.
Codificarea adresei (Adresa [35:0])
Adresa este codificată în stimul conform figurilor 7-1 până la figura 7-6. Toate câmpurile de adresă trebuie introduse în format hexazecimal. Toate câmpurile de adresă au o lățime care este divizibilă cu patru pentru a se introduce în format hexazecimal. Bancul de testare trimite doar biții necesari ai unui câmp de adresă către controlerul de memorie.
De exampîntr-o configurație cu opt bănci, numai biții de banc [2:0] sunt trimiși către controlerul de memorie, iar biții rămași sunt ignorați. Biții suplimentari pentru un câmp de adresă sunt furnizați pentru a introduce adresa într-un format hexazecimal.
Trebuie să confirmați că valoarea introdusă corespunde lățimii unei configurații date.
- Adresa coloanei (Columna[11:0]) – Adresa coloanei din stimul este furnizată până la maximum 12 biți, dar trebuie să abordați acest lucru pe baza parametrului de lățime a coloanei setat în designul dvs.
- Adresă rând (Rând[15:0]) – Adresa rândului din stimul este furnizată până la maximum 16 biți, dar trebuie să o abordați pe baza parametrului de lățime a rândului setat în designul dvs.
- Adresa băncii (Bank[3:0]) – Adresa băncii în stimul este furnizată până la maximum patru biți, dar trebuie să o abordați pe baza parametrului de lățime a băncii setat în proiectarea dvs.
- Adresă de rang (Rang[3:0]) – Adresa de rang în stimul este furnizată până la maximum patru biți, dar trebuie să o abordați pe baza parametrului de lățime a rangului setat în designul dvs.
Adresa este asamblată pe baza parametrului MEM_ADDR_ORDER de nivel superior și trimisă la interfața cu utilizatorul
Repetare comandă (Repetare comandă [7:0])
Numărul de repetare a comenzii este numărul de timp în care comanda respectivă este repetată la interfața cu utilizatorul. Adresa pentru fiecare repetare este incrementată cu 8. Numărul maxim de repetiții este 128.
Bancul de testare nu verifică limita coloanei și se înfășoară dacă limita maximă a coloanei este atinsă în timpul incrementelor.
Cele 128 de comenzi umplu pagina. Pentru orice adresă de coloană, alta decât 0, numărul de repetiții de 128 ajunge să traverseze limita coloanei și să se înfășoare până la începutul adresei coloanei.
Utilizarea autobuzului
Utilizarea magistralei este calculată la interfața cu utilizatorul luând în considerare numărul total de citiri și scrieri și este utilizată următoarea ecuație:
- BL8 durează patru cicluri de memorie
- end_of_stimulus este momentul în care sunt executate toate comenzile.
- calib_done este momentul în care se termină calibrarea.
Example Patterns
Aceste exampfișierele se bazează pe MEM_ADDR_ORDER setat la BANK_ROW_COLUMN.
Model de citire unică
00_0_2_000F_00A_1 – Acest model este o singură citire din a 10-a coloană, al 15-lea rând și a doua bancă.Model de scriere unic
00_0_1_0040_010_0 – Acest model este o singură scriere pe coloana a 32-a, pe rândul 128 și pe primul banc.Scriere și citire unică la aceeași adresă
00_0_2_000F_00A_0 – Acest model este o singură scriere pe a 10-a coloană, pe al 15-lea rând și pe a doua bancă.
00_0_2_000F_00A_1 – Acest model este o singură citire din a 10-a coloană, al 15-lea rând și a doua bancă
Scrieri și citiri multiple cu aceeași adresă
0A_0_0_0010_000_0 – Aceasta corespunde la 10 scrieri cu adresă începând de la 0 la 80 care pot fi văzute în coloană.
0A_0_0_0010_000_1 – Aceasta corespunde la 10 citiri cu adresă începând de la 0 la 80 care pot fi văzute în coloană.
Închiderea paginii în timpul scrierilor
0A_0_2_000F_3F8_0 – Aceasta corespunde la 10 scrieri cu adresa coloanei înfășurată la începutul paginii după o scriere.
Simularea generatorului de trafic de performanță
În acest moment ați terminat cu MIG exampsimulare de proiectare. Acest lucru implică faptul că configurarea simularii este gata, ați făcut modificări RTL de simulare a performanței, noua ierarhie de simulare este corectă și ați înțeles tiparele de stimul. Rulați simularea încă o dată cu 16 scrieri și citiri în perfsim_stimulus.txt.
Executați toate, așteptați până când semnalul init_calib_complete este afirmat și veți putea vedea numărul propus de scrieri și citiri. Apoi simularea se va opri.
Când vi se solicită să părăsiți simularea, selectați Nu și mergeți la fereastra de transcriere unde veți putea vedea statisticile de performanță.
Dacă selectați „Închideți simularea” statisticile de performanță vor fi scrise la a file numit mig_band_width_output.txt situat în sim_1/behave pliant.
Exampcalea directorului fișierelor:-
/mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/behav
S-ar putea să vă întrebați de ce procentultagUtilizarea magistralei este de doar 29. Reluați simularea cu aceleași setări IP, dar doar schimbând stimulul file la 256 scrieri și 256 citiri
ff_0_0_0000_000_0
ff_0_0_0000_000_1
Veți vedea acum procentultage ca 85, ceea ce implică faptul că DDR3 oferă o utilizare mai bună a magistralei pentru secvențe lungi de scrieri și rafale de citire.
Modalități generale de îmbunătățire a performanței
Factorii care influențează eficiența pot fi împărțiți în două secțiuni:
- Specific memoriei
- Specific controlerului
Figura 9 vă oferă un pesteview a termenilor care sunt specifici memoriei.
Spre deosebire de SRAM și Block Memories, performanța DDR2 sau DDR3 nu este doar rata maximă de date.
Depinde de mulți factori de sincronizare, inclusiv:
- tRCD: Row Command Delay (sau întârziere ras la cas).
- tCAS(CL): Latența stroboscopului adresei coloanei.
- tRP: Întârziere de preîncărcare rând.
- tRAS: Row Active Time (activare pentru a preschimba).
- tRC: Durata ciclului pe rând. tRC = tRAS + tRP
- tRAC: Întârziere de acces Radom. tRAC = tRCD + tCAS
- tCWL: Cas de latență de scriere.
- tZQ: Timp de calibrare ZQ.
- tRFC: Durata ciclului de reîmprospătare a rândurilor
- tWTR: Întârziere Scriere la Citire. Ultima tranzacție de scriere la ora comenzii de citire.
- tWR: Scrieți timpul de recuperare. Ultima tranzacție de scriere la Ora de preîncărcare
Temporizarea tuturor parametrilor enumerați depinde de tipul de memorie utilizată și de gradul de viteză al părții memoriei.
Mai multe detalii despre definiții și specificații de sincronizare pot fi găsite în DDR2 DDR3 JEDEC sau în orice fișă de date a dispozitivului de memorie.
Eficiența depinde în principal de modul în care este accesată memoria. Modelele de adrese diferite dau rezultate de eficiență diferite.
Taxele generale de sincronizare a memoriei
- Timpul de activare și timpul de preîncărcare la schimbarea la noi bănci/rânduri sau schimbarea rândurilor cu aceeași bancă.- Deci, dacă reduceți schimbarea rândului, acest lucru poate elimina tRCD și tRP.
- Trimite comenzi de scriere sau citire continuă - Menținerea timpului tCCD.
- Reduceți la minimum schimbarea comenzii de scriere la citire și citire la scriere – Timpul de recuperare a scrierii pentru a trece la accesul de citire, timpul de rulare a magistralei pentru a trece de la citire la scriere
- Setați un interval de reîmprospătare adecvat.
- DDR3 SDRAM necesită cicluri de reîmprospătare la un interval periodic mediu de tREFI.
- Maximum 8 comenzi suplimentare de reîmprospătare pot fi emise în avans („trase”). Acest lucru nu reduce numărul de reîmprospătări, dar intervalul maxim dintre două comenzi de reîmprospătare din jur este limitat la 9 × tREFI
- Utilizați toate băncile - Este de preferat un mecanism de adresare adecvat.
- Row-Bank-Column: Pentru o tranzacție care are loc într-un spațiu de adrese secvenţial, nucleul deschide automat același rând în banca următoare a dispozitivului DRAM pentru a continua tranzacția când se ajunge la sfârșitul unui rând existent. Este foarte potrivit pentru aplicațiile care necesită spargerea pachetelor mari de date în locații de adrese secvențiale.
- Bank-Row-Column: La trecerea graniței unui rând, rândul curent va fi închis și un alt rând va fi deschis în cadrul aceluiași mal. MSB este o adresă de bancă, care poate fi utilizată pentru a comuta de la diferite bănci. Este potrivit pentru tranzacții mai scurte, mai aleatorii într-un bloc de memorie pentru o perioadă de timp și apoi pentru un salt la un alt bloc (bancă)
- Lungimea exploziei
- BL 8 este acceptat pentru DDR3 pe seria 7. BC4 are o eficiență foarte scăzută, care este mai mică de 50%. Acest lucru se datorează faptului că timpul de execuție al BC4 este același cu BL8. Datele sunt doar mascate în interiorul componentei.
- În cazurile în care nu doriți să scrieți în rafală completă, poate fi luată în considerare fie masca de date, fie scrierea după citire.
- Setați un interval ZQ adecvat (numai DDR3)
Controlerul trimite ambele comenzi de calibrare ZQ Short (ZQCS) și ZQ Long (ZQCL).- Respectați standardul DDR3 Jedec
- Calibrarea ZQ este discutată în secțiunea 5.5 a standardului JEDEC Spec JESD79-3 DDR3 SDRAM
- Calibrarea ZQ calibrează la terminarea matriței (ODT) la intervale regulate pentru a ține seama de variațiile între VT
- Logica este conținută în bank_common.v/vhd
- Parametrul Tzqcs determină viteza cu care o comandă de calibrare ZQ este trimisă în memorie
- Este posibil să dezactivați contorul și să trimiteți manual folosind app_zq_req, este similar cu trimiterea manuală a unei reîmprospătare.
Consultați (Xilinx Answer 47924) pentru detalii.
Cheltuielile generale ale controlerului
- Citiri periodice – Consultați (Răspunsul Xilinx 43344) pentru detalii.
- Nu schimbați perioada de citire
- Omite citirile periodice în timpul scrierilor și emite numărul de citiri ratate înainte de o citire adevărată
- Reordonare – Consultați (Răspunsul Xilinx 34392) pentru detalii.
Pentru modelele de interfață utilizator și AXI, este de preferat să aveți această opțiune activată.- Reordonarea este logica care urmărește mai multe comenzi și modifică ordinea comenzilor utilizatorului pentru ca comenzile care nu sunt de memorie să nu ocupe lățime de bandă validă. Performanța a fost legată și de modelul real de trafic.
- Pe baza modelului de adrese, reordonarea ajută la ignorarea preîncărcării și la activarea comenzilor și face ca tRCD și tRP să nu ocupe lățimea benzii de date.
- Încercați să creșteți numărul de automate bancare.
- Cea mai mare parte a logicii controlerului rezidă în mașinile bancare și acestea corespund băncilor DRAM
- O anumită bancă gestionează o singură bancă DRAM la un moment dat.
- Atribuirea automatelor bancare este dinamică, astfel încât nu este necesar să existe un automat bancar pentru fiecare bancă fizică.
- Automatele bancare pot fi configurate, dar este un compromis între zonă și performanță.
- Numărul permis de automate bancare variază de la 2 la 8.
- În mod implicit, 4 automate bancare sunt configurate prin parametrii RTL.
- Pentru a schimba automatele bancare, luați în considerare parametrul nBANK_MACHS = 8 conținut în memc_ui_top Exampchiul pentru 8 automate bancare – nBANK_MACHS = 8
Acum sunteți conștient de factorii care influențează performanța.
Luați în considerare o aplicație în amonte care vă oferă 512 octeți de date per pachet și trebuie să le salvați în diferite locații de memorie. Deoarece 512 octeți de date este egal cu 64 de rafale de date DDR3, reluați example design cu un stimul file care conține 512 scrieri, 512 citiri și comutare de rând pentru fiecare 64 de scrieri sau citiri:
- 3f_0_0_0000_000_0
- 3f_0_0_0001_000_0
- 3f_0_0_0002_000_0
- 3f_0_0_0003_000_0
- 3f_0_0_0004_000_0
- 3f_0_0_0005_000_0
- 3f_0_0_0006_000_0
- 3f_0_0_0007_000_0
- 3f_0_0_0000_000_1
- 3f_0_0_0001_000_1
- 3f_0_0_0002_000_1
- 3f_0_0_0003_000_1
- 3f_0_0_0004_000_1
- 3f_0_0_0005_000_1
- 3f_0_0_0006_000_1
- 3f_0_0_0007_000_1
La sfârșitul simulării, veți vedea că utilizarea autobuzului este de 77 la sută.
Figura 11: Statistici de performanță pentru 512 scrieri și 512 citiri – Comutare rând pentru 64 scrieri sau citiri.
Acum puteți aplica cunoștințele învățate în secțiunea anterioară pentru a îmbunătăți eficiența. Cu a view pentru a utiliza toate băncile în loc de a schimba rândul, modificați modelul de adrese pentru a schimba banca, așa cum se arată mai jos.
Acest lucru este echivalent cu setarea ROW_BANK_Column în setarea de mapare a adresei de memorie din GUI MIG.
- 3f_0_0_0000_000_0
- 3f_0_1_0000_000_0
- 3f_0_2_0000_000_0
- 3f_0_3_0000_000_0
- 3f_0_4_0000_000_0
- 3f_0_5_0000_000_0
- 3f_0_6_0000_000_0
- 3f_0_7_0000_000_0
- 3f_0_0_0000_000_1
- 3f_0_1_0000_000_1
- 3f_0_2_0000_000_1
- 3f_0_3_0000_000_1
- 3f_0_4_0000_000_1
- 3f_0_5_0000_000_1
- 3f_0_6_0000_000_1
- 3f_0_7_0000_000_1
La sfârșitul simulării, veți vedea că 77% de utilizare a autobuzului anterior este acum 87!
Dacă mai aveți nevoie de eficiență mai mare, puteți alege pachete de dimensiuni mari de 1024 sau 2048 de octeți sau puteți lua în considerare o reîmprospătare manuală.
Nota: Xilinx nu încurajează ocolirea reîmprospătării controlerului, deoarece nu suntem siguri dacă veți putea îndeplini timpul de reîmprospătare automată Jedec, care afectează fiabilitatea datelor.
Din partea controlerului, puteți schimba nBANk_MACH și puteți vedea îmbunătățirea performanței.
Cu toate acestea, acest lucru poate afecta momentul de proiectare, vă rugăm să consultați (Răspunsul Xilinx 36505) pentru detalii pe nBANk_MACH
Deschideți core_name_mig_sim.v file și modificați parametrii nBANK_MACHS de la 4 la 8 și reluați simularea. Pentru ca valoarea parametrului să aibă efect în hardware, trebuie să actualizați core_name_mig.v file.
Am folosit același model în care am obținut 87% de utilizare a autobuzului (figura -12).
Cu nBANK_MACHS setat la 8, eficiența este acum de 90%.
De asemenea, rețineți că controlerele ½ și ¼ afectează negativ eficiența datorită latențelor lor.
De example, deoarece putem trimite comenzi doar la fiecare 4 cicluri CK, uneori există o umplutură suplimentară atunci când respectăm specificațiile minime de sincronizare DRAM, ceea ce poate scădea eficiența față de cea teoretică.
Încercați diferite controlere pentru a găsi pe cel care se potrivește cerințelor dvs. de eficiență.
Referințe
- Zynq-7000 AP SoC și seria 7 FPGA-uri MIS v2.3 [UG586]
- Centrul de soluții Xilinx MIG http://www.xilinx.com/support/answers/34243.html
Istoricul revizuirilor
13 – Lansare inițială
Descărcare PDF: Ghid de estimare a performanței Xilinx DDR2 MIG 7