Xilinx DDR2 MIG 7 Ydeevnevurderingsvejledning
Vigtig bemærkning: Denne PDF-fil, der kan downloades, af en Answer Record leveres for at forbedre dens anvendelighed og læsbarhed. Det er vigtigt at bemærke, at Answer Records er Web-baseret indhold, der jævnligt opdateres, efterhånden som ny information bliver tilgængelig. Du bliver mindet om at besøge Xilinx tekniske support Website og vedrview (Xilinx Answer 63234) for den seneste version af dette svar.
Indledning
På grund af den måde, DDR2- og DDR3-hukommelser er bygget på, og MIG 7-seriens controller er designet, er ydeevnen ikke ligetil.
Det kræver en forståelse af forskellige Jedec Timing-parametre og controllerarkitektur, og du bliver nødt til at køre simuleringer for at få estimaterne.
Det generelle princip for bestemmelse af ydeevne er det samme, men dette dokument giver en nem måde at opnå effektivitet ved at bruge MIG example design ved hjælp af testbænk og stimulus fileer vedhæftet her.
Effektiv båndbredde
DRAM-databussen opnår kun båndbredde nær-peak under bursts af læse og skrive, og dens overhead sænker den effektive datahastighed.
Et par exampunder overhead er:
- forudopladningstid for at få adgang til rækker i samme bank (adgangsadresse ikke i samme række-side hit)
- skrivegendannelsestid for at skifte fra skrive- til læseadgang
- bussens ekspeditionstid for at skifte fra læse- til skriveadgang
Effektiv båndbredde = spidsbåndbredde * Effektivitet
MIG Design Generation
Se UG586 Kapitel 1 for trin-for-trin detaljer om MIG IP og exampdesigngenerationen.
Før du kører MIG 7-seriens ydeevnesimulering, skal du gøre følgende for at sikre, at dit simuleringsmiljø er i orden. Åbn MIG exampdesign og kortlæg de relevante biblioteker, kør simuleringen og sørg for, at du kan se beskeden "test bestået" i udskriften.
For at demonstrere flowet har jeg genereret en MIG IP til xc7vx690tffg1761-2 og påberåbt exampdesign.
To ting, der bør bemærkes, er hukommelsesadressebits og hukommelsesadressetilknytningsvalg.
F.eksample, jeg har valgt MT41J128M8XX-125 under hukommelsesdelen drop-down muligheder.
For den valgte hukommelsesdel fra figur-1, række = 14, kolonne = 10 og bank = 3, så app_addr_width = række + kolonne + bank + rang = 28
Du kan vælge enten BANK_ROW_COLUMN eller ROW BANK Column.
Jeg har forladt ROW BANK Column, som er standardadressetilknytningen.
Example design Simulering med syntetiserbar testbænk
Under Simuleringsindstillinger, vælg QuestaSim/ModelSim Simulator og browse til de kompilerede bibliotekers placering.
For detaljer om at pege på en tredjepartsværktøjsinstallationssti, valg af målsimulator og kompilering og kortlægning af biblioteker, kan du se (UG900) Vivado Design Suite Brugervejledning Logic Simulation
Kør simuleringen gennem GUI'en (Klik på fanen Kør simulering i projektlederen), og sørg for, at du ser meddelelsen "test bestået" i transskriptionen.
Performance Simulation RTL-modifikationer
- Højreklik på fanen kilder, vælg "tilføj eller opret simuleringskilder", og gå til mig7_perfsim_traffic_generator.sv file og klik på Afslut for at tilføje det.
- Højreklik på fanen kilder, vælg "tilføj eller opret simuleringskilder", gå til perfsim_stimulus.txt, og klik på Afslut for at tilføje den.
- Kommenter eksenample_top-instansering i sim_tb_top.v file.
- Tilføj nedenstående RTL-linjer til 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;
- ledning [APP_ADDR_WIDTH-1:0] c0_ddr3_app_addr;
- ledning [2:0] c0_ddr3_app_cmd;
- wire c0_ddr3_app_en;
- ledning [APP_DATA_WIDTH-1:0] c0_ddr3_app_wdf_data;
- tråd c0_ddr3_app_wdf_end;
- tråd [APP_MASK_WIDTH-1:0] c0_ddr3_app_wdf_mask;
- tråd c0_ddr3_app_wdf_wren;
- ledning [APP_DATA_WIDTH-1:0] c0_ddr3_app_rd_data;
- ledning c0_ddr3_app_rd_data_end;
- tråd c0_ddr3_app_rd_data_valid;
- ledning c0_ddr3_app_rdy;
- tråd c0_ddr3_app_wdf_rdy;
- ledning c0_data_compare_error;
- wire ui_clk;
- tråd ui_clk_sync_rst;
- tråd app_sr_req = 0;
- wire app_ref_req = 0;
- wire app_zq_req =0;
- tråd c0_app_wdf_mask =0;
FPGA Memory Controller instansiering
mig_7series_0_mig u_mig_7series_0_mig (
// Hukommelsesgrænsefladeporte
- .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),
// Applikationsgrænsefladeporte
- .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),
// System Clock Porte
- .sys_clk_i (sys_clk_i),
// Reference urporte
- .clk_ref_i (clk_ref_i),
- .sys_rst (sys_rst)
- );
Præstationstrafikgenerator instansiering
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_trafik_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. Rediger APP_ADDR_WIDTH, APP_DATA_WIDTH, RANK_WIDTH og BANK_WIDTH i henhold til dit valg af hukommelsesdel.
Værdier kan fås fra _mig.v file. - Det gule fremhævede instansieringsnavn mig_7series_0_mig kan variere baseret på dit komponentnavn under oprettelse af IP. Kontroller, om du har valgt et andet navn, og skift det i overensstemmelse hermed.
- Når IP'en er genereret, skal du åbne _mig.v file og krydstjek for eventuelle variationer i LHS-signalnavne og ret dem.
- app_sr_req, app_ref_req og app_zq_req skal initialiseres til 0.
- Som example_top.v er kommenteret ud og ny fileer tilføjet, vil du sandsynligvis se "?" ved siden af
mig_7series_0_mig.v file under simuleringskilder.
At kortlægge den rigtige file, højreklik på mig_7series_0_mig.v, vælg "Tilføj kilder", Gennemse til
/mig_7series_0_example.srcs/sources_1/ip/mig_7series_0/mig_7series_0/user_design/rtl
og tilføj mig_7series_0_mig_sim.v file. - Hvis du ser "?" for det underliggende files, tilføj alle RTL files i mapperne clocking, controller, ip_top, phy og UI.
- Når RTL-ændringerne er udført, og alle de nødvendige files tilføjes til dine simuleringskilder, bør hierarki svare til figur 5.
De files fremhævet med rødt er nyligt tilføjet, og "?" forventes på ECC-relaterede moduler, da den valgte hukommelseskonfiguration har ECC-indstillingen deaktiveret.
Stimulus File Beskrivelse
Hvert stimulusmønster er på 48 bit, og formatet er beskrevet i figur 6-1 til 6-4.
Adressekodning (adresse [35:0])
Adressen er kodet i stimulus som vist i figur 7-1 til figur 7-6. Alle adressefelter skal indtastes i det hexadecimale format. Alle adressefelter har en bredde, der er delelig med fire for at indtaste i det hexadecimale format. Testbænken sender kun de nødvendige bits af et adressefelt til hukommelsescontrolleren.
F.eksample, i en 2 bank-konfiguration sendes kun bankbit [0:XNUMX] til hukommelsescontrolleren, og de resterende bit ignoreres. De ekstra bits til et adressefelt er angivet, så du kan indtaste adressen i et hexadecimalt format.
Du skal bekræfte, at den indtastede værdi svarer til bredden af en given konfiguration.
- Kolonneadresse (kolonne[11:0]) – Kolonneadresse i stimulus leveres til maksimalt 12 bit, men du skal adressere dette baseret på kolonnebreddeparameteren, der er indstillet i dit design.
- Rækkeadresse (række[15:0]) – Rækkeadresse i stimulus leveres til maksimalt 16 bit, men du skal adressere dette baseret på rækkebreddeparameteren, der er indstillet i dit design.
- Bankadresse (Bank[3:0]) – Bankadresse i stimulus leveres til maksimalt fire bit, men du skal adressere dette baseret på bankbreddeparameteren, der er indstillet i dit design.
- Rangeringsadresse (Rank[3:0]) – Rangeringsadresse i stimulus leveres til maksimalt fire bit, men du skal adressere dette baseret på rangbreddeparameteren, der er indstillet i dit design.
Adressen samles baseret på MEM_ADDR_ORDER-parameteren på øverste niveau og sendes til brugergrænsefladen
Kommando Gentag (Kommando Gentag [7:0])
Antallet af kommandogentagelser er det antal gange, den respektive kommando gentages på brugergrænsefladen. Adressen for hver gentagelse øges med 8. Det maksimale antal gentagelser er 128.
Testbænken tjekker ikke for søjlegrænsen, og den vikler sig rundt, hvis den maksimale søjlegrænse nås under trinene.
De 128 kommandoer fylder siden. For enhver anden kolonneadresse end 0, ender gentagelsesantallet på 128 med at krydse kolonnegrænsen og vikle rundt til starten af kolonneadressen.
Busudnyttelse
Busudnyttelsen beregnes på brugergrænsefladen under hensyntagen til det samlede antal læsninger og skrivninger, og følgende ligning anvendes:
- BL8 tager fire hukommelsesurcyklusser
- end_of_stimulus er det tidspunkt, hvor alle kommandoer er udført.
- calib_done er det tidspunkt, hvor kalibreringen er udført.
Example Mønstre
Disse exampfiler er baseret på MEM_ADDR_ORDER sat til BANK_ROW_COLUMN.
Enkelt læsemønster
00_0_2_000F_00A_1 – Dette mønster er en enkelt læsning fra 10. kolonne, 15. række og anden bank.Enkelt skrivemønster
00_0_1_0040_010_0 – Dette mønster er en enkelt skrivning til den 32. kolonne, 128. række og første bank.Enkelt skriv og læs til samme adresse
00_0_2_000F_00A_0 – Dette mønster er en enkelt skrivning til 10. kolonne, 15. række og anden bank.
00_0_2_000F_00A_1 – Dette mønster er en enkelt læsning fra 10. kolonne, 15. række og anden bank
Flere skriver og læser med samme adresse
0A_0_0_0010_000_0 – Dette svarer til 10 skrivninger med adresse startende fra 0 til 80, som kan ses i kolonnen.
0A_0_0_0010_000_1 – Dette svarer til 10 læsninger med adresse startende fra 0 til 80, som kan ses i kolonnen.
Sideombrydning under skrivning
0A_0_2_000F_3F8_0 – Dette svarer til 10 skrivninger med spalteadresse pakket ind til starten af siden efter én skrivning.
Simulering af Performance Traffic Generator
På dette tidspunkt er du færdig med MIG example design simulering. Dette indebærer, at dit simuleringsopsætning er klar, du har lavet præstationssimulerings-RTL-modifikationer, det nye simuleringshierarki er korrekt, og du har forstået stimulusmønstrene. Kør simuleringen igen med 16 skrivninger og læsninger i perfsim_stimulus.txt.
Kør alt, vent indtil signalet init_calib_complete er hævdet, og du vil være i stand til at se det foreslåede antal skrivninger og læsninger. Simuleringen stopper derefter.
Når du bliver bedt om at afslutte simuleringen, skal du vælge Nej og gå til transskriptionsvinduet, hvor du vil kunne se præstationsstatistikken.
Hvis du vælger "Afslut simulering" præstationsstatistikker vil blive skrevet til en file navngivet mig_band_width_output.txt placeret i sim_1/behave folder.
Exampmappestien:-
/mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/behav
Du kan undre dig over, hvorfor procententage bus-udnyttelse er kun 29. Kør simuleringen igen med de samme IP-indstillinger, men bare med at ændre stimulus file til 256 skrivninger og 256 læsninger
ff_0_0_0000_000_0
ff_0_0_0000_000_1
Du vil nu se procentdelentage som 85, hvilket indebærer, at DDR3 tilbyder bedre busudnyttelse til lange sekvenser af skrive- og læsebursts.
Generelle måder at forbedre ydeevnen på
De faktorer, der påvirker effektiviteten, kan opdeles i to sektioner:
- Hukommelsesspecifik
- Controller specifik
Figur 9 giver dig en overview af de termer, der er hukommelsesspecifikke.
I modsætning til SRAM'er og blokhukommelser er DDR2 eller DDR3 ydeevne ikke kun den maksimale datahastighed.
Det afhænger af mange timing faktorer, herunder:
- tRCD: Rækkekommando forsinkelse (eller ras til cas forsinkelse).
- tCAS(CL): Kolonne adresse strobe latens.
- tRP: Rækkeforudladningsforsinkelse.
- tRAS: Række aktiv tid (aktiver for at ændre).
- tRC: Rækkecyklus tid. tRC = tRAS + tRP
- tRAC: Radom adgangsforsinkelse. tRAC = tRCD + tCAS
- tCWL: Cas skriveforsinkelse.
- tZQ: ZQ kalibreringstid.
- tRFC: Rækkeopdateringscyklustid
- tWTR: Skriv til Læseforsinkelse. Sidste skrivetransaktion til Læs kommandotid.
- tWR: Skriv gendannelsestid. Sidste skrivetransaktion til Foropladningstid
Timingen af alle de anførte parametre afhænger af den anvendte hukommelsestype og hukommelsesdelens hastighedsgrad.
Flere detaljer om definitionerne og timingspecifikationerne kan findes i DDR2 DDR3 JEDEC eller i et hvilket som helst hukommelsesenhedsdatablad.
Effektiviteten afhænger hovedsageligt af, hvordan hukommelsen tilgås. Forskellige adressemønstre giver forskellige effektivitetsresultater.
Hukommelse timing overhead
- Aktiveringstid og Precharge tid ved skift til nye banker/rækker eller ændring af rækker med i samme bank.- Så hvis du reducerer rækkeskift, kan dette fjerne tRCD og tRP.
- Send kontinuerlige skrive- eller læsekommandoer - Opretholdelse af tCCD-timing.
- Minimer skrive-til-læse- og læse-til-skrive-kommandoskift - Skrive-gendannelsestid for at skifte til læseadgang, bus-omløbstid for at skifte fra læsning til skrivning
- Indstil et passende opdateringsinterval.
- DDR3 SDRAM kræver opdateringscyklusser med et gennemsnitligt periodisk interval på tREFI.
- Der kan maksimalt udstedes 8 yderligere Refresh-kommandoer på forhånd ("trukket ind"). Dette reducerer ikke antallet af opdateringer, men det maksimale interval mellem to omgivende Refresh-kommandoer er begrænset til 9 × tREFI
- Brug alle bankerne – En passende adresseringsmekanisme er at foretrække.
- Række-bank-kolonne: For en transaktion, der finder sted over et sekventielt adresserum, åbner kernen automatisk den samme række i den næste bank af DRAM-enheden for at fortsætte transaktionen, når slutningen af en eksisterende række nås. Det er velegnet til applikationer, der kræver sprængning af store datapakker til sekventielle adresseplaceringer.
- Bank-række-kolonne: Når du krydser en rækkegrænse, vil den aktuelle række blive lukket, og en anden række vil blive åbnet inden for samme bank. MSB er en bankadresse, som kan bruges til at skifte fra forskellige banker. Den er velegnet til kortere, mere tilfældige transaktioner til en blok af hukommelsen i en periode og derefter et spring til en anden blok (bank)
- Sprænglængde
- BL 8 er understøttet til DDR3 på 7-serien. BC4 har en meget lav virkningsgrad, der er mindre end 50%. Dette skyldes, at udførelsestiden for BC4 er den samme som BL8. Dataene er bare maskeret inde i komponenten.
- I tilfælde, hvor du ikke ønsker at skrive fuld burst, kan enten datamaske eller skrive-efter-læsning overvejes.
- Indstil et korrekt ZQ-interval (kun DDR3)
Controlleren sender både ZQ Short (ZQCS) og ZQ Long (ZQCL) kalibreringskommandoer.- Overhold DDR3 Jedec-standarden
- ZQ-kalibrering er diskuteret i afsnit 5.5 i JEDEC Spec JESD79-3 DDR3 SDRAM Standard
- ZQ Calibration kalibrerer On Die Termination (ODT) med regelmæssige intervaller for at tage højde for variationer på tværs af VT
- Logik er indeholdt i bank_common.v/vhd
- Parameteren Tzqcs bestemmer den hastighed, hvormed en ZQ-kalibreringskommando sendes til hukommelsen
- Det er muligt at deaktivere tælleren og sende manuelt ved hjælp af app_zq_req, det svarer til manuelt at sende en opdatering.
Se (Xilinx Answer 47924) for detaljer.
Controller Overhead
- Periodiske aflæsninger – Se (Xilinx svar 43344) for detaljer.
- Ændre ikke læseperioden
- Spring over periodiske læsninger under skrivninger og udgiv antallet af ubesvarede læsninger før en sand læsning
- Ombestilling – se (Xilinx svar 34392) for detaljer.
For bruger- og AXI-grænsefladedesign er det at foretrække at have dette aktiveret.- Genarranger er logikken, der ser fremad adskillige kommandoer og ændrer brugerkommandorækkefølgen for at få ikke-hukommelseskommandoer til ikke at optage gyldig båndbredde. Ydelsen var også relateret til det faktiske trafikmønster.
- Baseret på adressemønsteret hjælper genbestilling til at springe forud for opladning og aktivere kommandoer og gør, at tRCD og tRP ikke optager databåndbredden.
- Prøv at øge antallet af bankautomater.
- Det meste af controllerens logik ligger i bankmaskinerne, og de svarer til DRAM-banker
- En given bankmaskine administrerer en enkelt DRAM-bank til enhver tid.
- Bankautomattildeling er dynamisk, så det er ikke nødvendigt at have en bankautomat for hver fysisk bank.
- Bankautomater kan konfigureres, men det er en afvejning mellem område og ydeevne.
- Det tilladte antal bankautomater varierer fra 2-8.
- Som standard er 4 bankautomater konfigureret via RTL-parametre.
- For at ændre bankautomater skal du overveje parameteren nBANK_MACHS = 8 indeholdt i memc_ui_top Ex.ample for 8 bankautomater – nBANK_MACHS = 8
Du er nu opmærksom på de faktorer, der påvirker ydeevnen.
Overvej en upstream-applikation, der giver dig 512 databytes pr. pakke, og du skal gemme dem på forskellige hukommelsesplaceringer. Da 512 databytes er lig med 64 DDR3 databursts, skal du køre example design med en stimulus file indeholdende 512 skrivninger, 512 læsninger og rækkeskift for hver 64 skrivninger eller læsninger:
- 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
I slutningen af simuleringen vil du se, at busudnyttelsen er på 77 procent.
Figur 11: Præstationsstatistik for 512 skrivninger og 512 læsninger – Rækkeskifte for 64 skrivninger eller læsninger.
Du kan nu anvende den viden, du har lært i tidligere afsnit, for at forbedre effektiviteten. Med en view for at bruge alle bankerne i stedet for at ændre rækken, skal du ændre adressemønsteret for at ændre bank som vist nedenfor.
Dette svarer til at indstille ROW_BANK_Column i hukommelsesadressetilknytningsindstillingen i MIG GUI.
- 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
I slutningen af simuleringen vil du se, at den tidligere 77 procent busudnyttelse nu er 87!
Hvis du stadig har brug for højere effektivitet, kan du gå efter store pakkestørrelser på 1024 eller 2048 bytes eller overveje en manuel opdatering.
Note: Xilinx opfordrer ikke til at omgå controller-opdatering, da vi er usikre på, om du vil være i stand til at opfylde Jedec auto opdaterings-timing, som påvirker datapålidelighed.
Fra controllersiden kan du ændre nBANk_MACH og se forbedringen i ydeevnen.
Dette kan dog påvirke dit designtidspunkt, se venligst (Xilinx svar 36505) for detaljer om nBANk_MACH
Åbn core_name_mig_sim.v file og skift parametrene nBANK_MACHS fra 4 til 8 og kør simuleringen igen. For at få parameterværdien til at træde i kraft i hardware, skal du opdatere core_name_mig.v file.
Jeg brugte det samme mønster, hvor vi fik 87% busudnyttelse (figur -12).
Med nBANK_MACHS sat til 8 er effektiviteten nu 90 %.
Bemærk også, at ½ og ¼ controllere påvirker effektiviteten negativt på grund af deres latenser.
F.eksample, da vi kun kan sende kommandoer hver 4. CK-cyklus, er der nogle gange ekstra polstring, når vi overholder minimale DRAM-timing-specifikationer, hvilket kan reducere effektiviteten fra den teoretiske.
Prøv forskellige controllere for at finde den, der passer til dit effektivitetskrav.
Referencer
- Zynq-7000 AP SoC og 7 Series FPGA'er MIS v2.3 [UG586]
- Xilinx MIG Solution Center http://www.xilinx.com/support/answers/34243.html
Revisionshistorie
13/03/2015 – Første udgivelse
Download PDF: Xilinx DDR2 MIG 7 Ydeevnevurderingsvejledning