Xilinx DDR2 MIG 7 Leistungsschätzungsleitfaden
Wichtiger Hinweis: Dieses herunterladbare PDF eines Antwortdatensatzes dient der Verbesserung der Benutzerfreundlichkeit und Lesbarkeit. Es ist wichtig zu beachten, dass Antwortdatensätze Web-basierte Inhalte, die regelmäßig aktualisiert werden, sobald neue Informationen verfügbar sind. Wir möchten Sie daran erinnern, den technischen Support von Xilinx zu besuchen. WebWebsite und review (Xilinx-Antwort 63234) für die neueste Version dieser Antwort.
Einführung
Aufgrund der Architektur der DDR2- und DDR3-Speicher und des Designs des Controllers der MIG 7-Serie ist die Leistung nicht eindeutig.
Dazu ist ein Verständnis verschiedener Jedec-Timing-Parameter und der Controller-Architektur erforderlich. Außerdem müssen Sie Simulationen ausführen, um die Schätzungen zu erhalten.
Das allgemeine Prinzip zur Ermittlung der Leistung ist dasselbe, dieses Dokument bietet jedoch eine einfache Möglichkeit, die Effizienz mithilfe des MIG-Ex zu ermitteln.ample-Design mit Hilfe von Prüfstand und Stimulus files hier angehängt.
Effektive Bandbreite
Der DRAM-Datenbus erreicht seine maximale Bandbreite nur während Lese- und Schreibstößen und sein Overhead senkt die effektive Datenrate.
Ein paar ExampDie Gemeinkosten sind:
- Vorladezeit beim Zugriff auf Zeilen in derselben Bank (Zugriffsadresse nicht im selben Zeilen-Seiten-Treffer)
- Schreibwiederherstellungszeit zum Wechsel vom Schreib- zum Lesezugriff
- die Busumlaufzeit für den Wechsel vom Lese- zum Schreibzugriff
Effektive Bandbreite = Spitzenbandbreite * Effizienz
MIG-Designgenerierung
Weitere Informationen zu MIG IP und Ex finden Sie in Kapitel 586 von UG1.ample Design-Generation.
Bevor Sie die Leistungssimulation der MIG 7-Serie ausführen, führen Sie die folgenden Schritte aus, um sicherzustellen, dass Ihre Simulationsumgebung in Ordnung ist. Öffnen Sie die MIG exampEntwerfen und ordnen Sie die entsprechenden Bibliotheken zu, führen Sie die Simulation aus und stellen Sie sicher, dass im Transkript die Meldung „Test bestanden“ angezeigt wird.
Um den Ablauf zu demonstrieren, habe ich eine MIG IP für xc7vx690tffg1761-2 generiert und den Ex aufgerufen.ampDesign.
Zwei Dinge sollten beachtet werden: Speicheradressbits und die Auswahl der Speicheradresszuordnung.
Zum BeispielampIch habe beispielsweise unter den Dropdown-Optionen für den Speicherteil MT41J128M8XX-125 ausgewählt.
Für den ausgewählten Speicherteil aus Abbildung 1 gilt: Zeile = 14, Spalte = 10 und Bank = 3, also app_addr_width = Zeile + Spalte + Bank + Rang = 28
Sie können entweder BANK_ROW_COLUMN oder ROW BANK Column auswählen.
Ich habe die Spalte ROW BANK belassen, die die Standardadresszuordnung ist.
Example design Simulation mit synthetisierbarem Prüfstand
Wählen Sie unter den Simulationseinstellungen QuestaSim/ModelSim Simulator aus und navigieren Sie zum Speicherort der kompilierten Bibliotheken.
Einzelheiten zum Verweisen auf den Installationspfad von Drittanbieter-Tools, zur Auswahl des Zielsimulators und zum Kompilieren und Zuordnen von Bibliotheken finden Sie im (UG900) Vivado Design Suite User Guide Logic Simulation
Führen Sie die Simulation über die GUI aus (klicken Sie im Projektmanager auf die Registerkarte „Simulation ausführen“) und stellen Sie sicher, dass im Transkript die Meldung „Test bestanden“ angezeigt wird.
Leistungssimulation RTL-Modifikationen
- Klicken Sie mit der rechten Maustaste auf die Registerkarte „Quellen“, wählen Sie „Simulationsquellen hinzufügen oder erstellen“ und navigieren Sie zu mig7_perfsim_traffic_generator.sv. file und klicken Sie auf „Fertig“, um es hinzuzufügen.
- Klicken Sie mit der rechten Maustaste auf die Registerkarte „Quellen“, wählen Sie „Simulationsquellen hinzufügen oder erstellen“, navigieren Sie zu perfsim_stimulus.txt und klicken Sie auf „Fertig“, um es hinzuzufügen.
- Kommentieren Sie das Ex ausample_top-Instanziierung in sim_tb_top.v file.
- Fügen Sie die folgenden RTL-Zeilen zu sim_tb_top,v hinzu
- lokaler Parameter APP_ADDR_WIDTH = 28;
- lokaler Parameter APP_DATA_WIDTH = 64;
- lokaler Parameter APP_MASK_WIDTH = APP_DATA_WIDTH / 8;
- lokaler Parameter MEM_ADDR_ORDER = „BANK_ROW_COLUMN“;
- lokaler Parameter BANK_WIDTH = 3;
- lokaler Parameter RANK_WIDTH = 1;
- Draht [APP_ADDR_WIDTH-1:0] c0_ddr3_app_addr;
- Draht [2:0] c0_ddr3_app_cmd;
- Kabel c0_ddr3_app_en;
- Draht [APP_DATA_WIDTH-1:0] c0_ddr3_app_wdf_data;
- Kabel c0_ddr3_app_wdf_end;
- Draht [APP_MASK_WIDTH-1:0] c0_ddr3_app_wdf_mask;
- Kabel c0_ddr3_app_wdf_wren;
- Draht [APP_DATA_WIDTH-1:0] c0_ddr3_app_rd_data;
- Kabel c0_ddr3_app_rd_data_end;
- Kabel c0_ddr3_app_rd_data_valid;
- Kabel c0_ddr3_app_rdy;
- Kabel c0_ddr3_app_wdf_rdy;
- Draht c0_data_compare_error;
- Draht ui_clk;
- Draht ui_clk_sync_rst;
- Draht app_sr_req = 0;
- Draht app_ref_req = 0;
- Draht app_zq_req =0;
- Draht c0_app_wdf_mask =0;
Instanziierung des FPGA-Speichercontrollers
mig_7series_0_mig u_mig_7series_0_mig (
// Speicherschnittstellen-Ports
- .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),
// Anwendungsschnittstellen-Ports
- .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),
// Systemuhr-Ports
- .sys_clk_i (sys_clk_i),
// Referenztakt-Ports
- .clk_ref_i (clk_ref_i),
- .sys_rst (sys_rst)
- );
Instanziierung des Leistungsverkehrsgenerators
mig7_perfsim_traffic_generator
(
.APP_DATA_WIDTH (APP_DATA_WIDTH),
.COL_WIDTH (COL_WIDTH),
.ROW_WIDTH (ZEILENBREITE),
.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. Ändern Sie APP_ADDR_WIDTH, APP_DATA_WIDTH, RANK_WIDTH und BANK_WIDTH entsprechend Ihrer Speicherteilauswahl.
Werte finden Sie im _mig.v file. - Der gelb hervorgehobene Instanziierungsname mig_7series_0_mig kann je nach Ihrem Komponentennamen während der IP-Erstellung variieren. Überprüfen Sie, ob Sie einen anderen Namen gewählt haben, und ändern Sie ihn entsprechend.
- Sobald die IP generiert ist, öffnen Sie die _mig.v file und überprüfen Sie, ob es Abweichungen in den LHS-Signalnamen gibt, und korrigieren Sie diese.
- app_sr_req, app_ref_req und app_zq_req sollten auf 0 initialisiert werden.
- Als Bspample_top.v ist auskommentiert und neu files hinzugefügt werden, sehen Sie wahrscheinlich ein „?“ neben dem
mig_7series_0_mig.v file unter Simulationsquellen.
Um die richtige file, klicken Sie mit der rechten Maustaste auf mig_7series_0_mig.v, wählen Sie „Quellen hinzufügen“, navigieren Sie zu
/mig_7series_0_example.srcs/sources_1/ip/mig_7series_0/mig_7series_0/user_design/rtl
und fügen Sie die Datei mig_7series_0_mig_sim.v hinzu file. - Wenn Sie ein „?“ für den zugrunde liegenden files, alle RTL hinzufügen files in den Ordnern „Clocking“, „Controller“, „IP_top“, „PHY“ und „UI“.
- Sobald die RTL-Änderungen vorgenommen wurden und alle erforderlichen files werden zu Ihren Simulationsquellen hinzugefügt. Die Hierarchie sollte ähnlich wie in Abbildung 5 aussehen.
Der fileRot hervorgehobene s wurden neu hinzugefügt und bei ECC-bezogenen Modulen wird ein „?“ erwartet, da die ECC-Option in der ausgewählten Speicherkonfiguration deaktiviert ist.
Stimulus File Beschreibung
Jedes Reizmuster besteht aus 48 Bit und das Format wird in den Abbildungen 6-1 bis 6-4 beschrieben.
Adresskodierung (Adresse [35:0])
Die Adresse wird im Stimulus gemäß Abbildung 7-1 bis Abbildung 7-6 codiert. Alle Adressfelder müssen im Hexadezimalformat eingegeben werden. Alle Adressfelder haben eine Breite, die durch vier teilbar ist, um im Hexadezimalformat eingegeben zu werden. Der Prüfstand sendet nur die erforderlichen Bits eines Adressfelds an den Speichercontroller.
Zum BeispielampIn einer Konfiguration mit acht Bänken werden also nur Bankbits [2:0] an den Speichercontroller gesendet und die restlichen Bits werden ignoriert. Die zusätzlichen Bits für ein Adressfeld sind für die Eingabe der Adresse in einem hexadezimalen Format vorgesehen.
Sie müssen bestätigen, dass der eingegebene Wert der Breite einer bestimmten Konfiguration entspricht.
- Spaltenadresse (Column[11:0]) – Die Spaltenadresse im Stimulus ist auf maximal 12 Bit begrenzt, Sie müssen diese jedoch basierend auf dem in Ihrem Entwurf festgelegten Spaltenbreitenparameter adressieren.
- Zeilenadresse (Zeile[15:0]) – Die Zeilenadresse im Stimulus ist auf maximal 16 Bit begrenzt, Sie müssen diese jedoch basierend auf dem in Ihrem Design festgelegten Zeilenbreitenparameter adressieren.
- Bankadresse (Bank[3:0]) – Die Bankadresse im Stimulus ist auf maximal vier Bits begrenzt, Sie müssen diese jedoch basierend auf dem in Ihrem Design festgelegten Bankbreitenparameter adressieren.
- Rangadresse (Rank[3:0]) – Die Rangadresse im Stimulus ist auf maximal vier Bits begrenzt, Sie müssen diese jedoch basierend auf dem in Ihrem Entwurf festgelegten Rangbreitenparameter adressieren.
Die Adresse wird basierend auf dem Top-Level-Parameter MEM_ADDR_ORDER zusammengestellt und an die Benutzeroberfläche gesendet
Befehlswiederholung (Befehlswiederholung [7:0])
Die Befehlswiederholungszahl gibt an, wie oft der jeweilige Befehl auf der Benutzeroberfläche wiederholt wird. Die Adresse wird bei jeder Wiederholung um 8 erhöht. Die maximale Wiederholungszahl beträgt 128.
Der Prüfstand prüft nicht die Spaltenbegrenzung und führt einen Neustart durch, wenn während der Inkremente die maximale Spaltenbegrenzung erreicht wird.
Die 128 Befehle füllen die Seite. Bei jeder Spaltenadresse außer 0 überschreitet die Wiederholungszahl von 128 die Spaltengrenze und springt zurück zum Anfang der Spaltenadresse.
Busauslastung
Die Busauslastung wird an der Benutzerschnittstelle unter Berücksichtigung der Gesamtzahl der Lese- und Schreibvorgänge berechnet und die folgende Gleichung verwendet:
- BL8 benötigt vier Speichertaktzyklen
- end_of_stimulus ist die Zeit, wenn alle Befehle ausgeführt werden.
- calib_done ist der Zeitpunkt, zu dem die Kalibrierung abgeschlossen ist.
Exampdie Muster
Diese ExampDateien basieren auf MEM_ADDR_ORDER, eingestellt auf BANK_ROW_COLUMN.
Einzelnes Lesemuster
00_0_2_000F_00A_1 – Dieses Muster ist ein einzelner Lesevorgang aus der 10. Spalte, der 15. Zeile und der zweiten Bank.Einzelnes Schreibmuster
00_0_1_0040_010_0 – Dieses Muster ist ein einzelner Schreibvorgang in die 32. Spalte, 128. Zeile und erste Bank.Einzelnes Schreiben und Lesen an dieselbe Adresse
00_0_2_000F_00A_0 – Bei diesem Muster handelt es sich um einen einzelnen Schreibvorgang in die 10. Spalte, 15. Zeile und zweite Bank.
00_0_2_000F_00A_1 – Dieses Muster ist ein einzelner Lesevorgang aus der 10. Spalte, der 15. Zeile und der zweiten Bank
Mehrfaches Schreiben und Lesen mit derselben Adresse
0A_0_0_0010_000_0 – Dies entspricht 10 Schreibvorgängen mit Adressen von 0 bis 80, die in der Spalte angezeigt werden.
0A_0_0_0010_000_1 – Dies entspricht 10 Lesevorgängen mit Adressen von 0 bis 80, die in der Spalte angezeigt werden.
Seitenumbruch beim Schreiben
0A_0_2_000F_3F8_0 – Dies entspricht 10 Schreibvorgängen, wobei die Spaltenadresse nach einem Schreibvorgang an den Seitenanfang umgebrochen wird.
Simulation des Performance Traffic Generators
An diesem Punkt sind Sie mit MIG ex fertigample Design-Simulation. Dies setzt voraus, dass Ihr Simulations-Setup bereit ist, Sie RTL-Änderungen an der Leistungssimulation vorgenommen haben, die neue Simulationshierarchie korrekt ist und Sie die Stimulus-Muster verstanden haben. Führen Sie die Simulation noch einmal mit 16 Schreib- und Lesevorgängen in perfsim_stimulus.txt aus.
Führen Sie „run-all“ aus und warten Sie, bis das Signal „init_calib_complete“ aktiviert wird. Anschließend können Sie die vorgeschlagene Anzahl von Schreib- und Lesevorgängen sehen. Die Simulation wird dann beendet.
Wenn Sie aufgefordert werden, die Simulation zu beenden, wählen Sie „Nein“ und gehen Sie zum Transkriptfenster, wo Sie die Leistungsstatistiken sehen können.
Wenn Sie „Simulation beenden“ Leistungsstatistiken werden in ein file namens mig_band_width_output.txt befindet sich im Verzeichnis sim_1/behave Ordner.
ExampDateiverzeichnispfad: -
/mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/Verhalten
Sie fragen sich vielleicht, warum der ProzentsatztagDie Busauslastung beträgt nur 29. Führen Sie die Simulation erneut mit denselben IP-Einstellungen durch, ändern Sie jedoch nur den Stimulus file auf 256 Schreib- und 256 Lesevorgänge
ff_0_0_0000_000_0
ff_0_0_0000_000_1
Sie sehen nun den Prozentsatztagz. B. 85, was bedeutet, dass DDR3 eine bessere Busauslastung für lange Schreib- und Lesesequenzen bietet.
Allgemeine Möglichkeiten zur Leistungssteigerung
Die Faktoren, die die Effizienz beeinflussen, können in zwei Bereiche unterteilt werden:
- Speicherspezifisch
- Controllerspezifisch
Abbildung 9 gibt Ihnen einen Überblickview der Begriffe, die speicherspezifisch sind.
Anders als bei SRAMs und Blockspeichern beruht die Leistung von DDR2 bzw. DDR3 nicht nur auf der maximalen Datenrate.
Dies hängt von vielen zeitlichen Faktoren ab, unter anderem:
- tRCD: Zeilenbefehlsverzögerung (oder Ras-zu-Cas-Verzögerung).
- tCAS(CL): Latenz des Spaltenadress-Strobes.
- tRP: Verzögerung beim Vorladen der Zeile.
- tRAS: Aktive Zeilenzeit (zum Vorändern aktivieren).
- tRC: Zeilenzykluszeit. tRC = tRAS + tRP
- tRAC: Radom-Zugriffsverzögerung. tRAC = tRCD + tCAS
- tCWL: Cas-Schreiblatenz.
- tZQ: ZQ-Kalibrierungszeit.
- tRFC: Zykluszeit für Zeilenaktualisierung
- tWTR: Verzögerung zwischen Schreiben und Lesen. Zeitpunkt der letzten Schreibtransaktion zum Lesebefehl.
- tWR: Schreibwiederherstellungszeit. Letzte Schreibtransaktion bis Vorladezeit
Die zeitliche Abstimmung aller aufgeführten Parameter hängt vom verwendeten Speichertyp und der Geschwindigkeitsstufe des Speicherteils ab.
Weitere Einzelheiten zu den Definitionen und Zeitspezifikationen finden Sie in DDR2 DDR3 JEDEC oder im Datenblatt jedes Speichergeräts.
Die Effizienz hängt hauptsächlich davon ab, wie auf den Speicher zugegriffen wird. Unterschiedliche Adressmuster führen zu unterschiedlichen Effizienzergebnissen.
Speicher-Timing-Overheads
- Aktivierungszeit und Vorladezeit beim Wechsel zu neuen Bänken/Zeilen oder beim Wechsel von Zeilen innerhalb derselben Bank. – Wenn Sie also den Zeilenwechsel reduzieren, können tRCD und tRP entfernt werden.
- Senden Sie kontinuierlich Schreib- oder Lesebefehle – und behalten Sie das tCCD-Timing bei.
- Minimieren Sie die Befehlsumschaltung von Schreiben auf Lesen und von Lesen auf Schreiben – Wiederherstellungszeit beim Schreiben für den Wechsel zu Lesezugriffen, Busumlaufzeit für den Wechsel von Lesen auf Schreiben
- Stellen Sie ein geeignetes Aktualisierungsintervall ein.
- DDR3 SDRAM erfordert Aktualisierungszyklen in einem durchschnittlichen periodischen Intervall von tREFI.
- Es können maximal 8 zusätzliche Refresh-Befehle vorab ausgegeben werden („eingezogen“). Dadurch wird die Anzahl der Refreshs nicht reduziert, allerdings ist das maximale Intervall zwischen zwei benachbarten Refresh-Befehlen auf 9 × tREFI begrenzt.
- Alle Banken nutzen – Ein geeigneter Adressierungsmechanismus ist wünschenswert.
- Zeile-Bank-Spalte: Bei einer Transaktion, die über einen sequentiellen Adressraum erfolgt, öffnet der Kern automatisch dieselbe Zeile in der nächsten Bank des DRAM-Geräts, um die Transaktion fortzusetzen, wenn das Ende einer vorhandenen Zeile erreicht ist. Dies eignet sich gut für Anwendungen, bei denen große Datenpakete an sequentielle Adressorte verteilt werden müssen.
- Bank-Zeile-Spalte: Beim Überschreiten einer Zeilengrenze wird die aktuelle Zeile geschlossen und eine andere Zeile innerhalb derselben Bank geöffnet. MSB ist eine Bankadresse, die zum Wechseln zwischen verschiedenen Bänken verwendet werden kann. Sie eignet sich für kürzere, zufälligere Transaktionen in einem Speicherblock für einen bestimmten Zeitraum und dann für einen Sprung in einen anderen Block (Bank).
- Burst-Länge
- BL 8 wird für DDR3 auf der 7er-Serie unterstützt. BC4 hat eine sehr niedrige Effizienz von weniger als 50 %. Dies liegt daran, dass die Ausführungszeit von BC4 dieselbe ist wie die von BL8. Die Daten werden nur innerhalb der Komponente maskiert.
- In Fällen, in denen Sie nicht in voller Länge schreiben möchten, können Sie entweder eine Datenmaske oder das Schreiben nach dem Lesen in Betracht ziehen.
- Stellen Sie ein geeignetes ZQ-Intervall ein (nur DDR3)
Der Controller sendet sowohl ZQ Short (ZQCS)- als auch ZQ Long (ZQCL)-Kalibrierungsbefehle.- Halten Sie sich an den DDR3 Jedec-Standard
- Die ZQ-Kalibrierung wird in Abschnitt 5.5 des JEDEC Spec JESD79-3 DDR3 SDRAM-Standards erläutert.
- ZQ Calibration kalibriert On Die Termination (ODT) in regelmäßigen Abständen, um Abweichungen zwischen VT zu berücksichtigen.
- Die Logik ist in bank_common.v/vhd enthalten.
- Der Parameter Tzqcs bestimmt die Rate, mit der ein ZQ-Kalibrierungsbefehl an den Speicher gesendet wird
- Es ist möglich, den Zähler zu deaktivieren und manuell mit app_zq_req zu senden. Dies ähnelt dem manuellen Senden einer Aktualisierung.
Weitere Einzelheiten finden Sie unter (Xilinx-Antwort 47924).
Controller-Overheads
- Periodische Lesevorgänge – Siehe (Xilinx Antwort 43344) für weitere Einzelheiten.
- Ändern Sie nicht den Zeitraum der gelesenen
- Überspringen Sie periodische Lesevorgänge während des Schreibens und geben Sie die Anzahl der verpassten Lesevorgänge vor einem echten Lesevorgang aus.
- Nachbestellung – Siehe (Xilinx Antwort 34392) für weitere Einzelheiten.
Für Benutzer- und AXI-Schnittstellendesigns sollte diese Option vorzugsweise aktiviert sein.- Reorder ist die Logik, die mehrere Befehle voraussieht und die Reihenfolge der Benutzerbefehle ändert, damit nicht im Speicher gespeicherte Befehle keine gültige Bandbreite belegen. Die Leistung hängt auch mit dem tatsächlichen Verkehrsmuster zusammen.
- Basierend auf dem Adressmuster hilft die Neuanordnung dabei, Vorlade- und Aktivierungsbefehle zu überspringen und sorgt dafür, dass tRCD und tRP keine Datenbandbreite belegen.
- Versuchen Sie, die Anzahl der Bankautomaten zu erhöhen.
- Der Großteil der Controller-Logik befindet sich in den Bankmaschinen und diese entsprechen den DRAM-Bänken
- Eine bestimmte Bankmaschine verwaltet zu einem bestimmten Zeitpunkt eine einzelne DRAM-Bank.
- Die Bankautomatenzuweisung erfolgt dynamisch, sodass es nicht erforderlich ist, für jede physische Bank einen eigenen Bankautomaten zu haben.
- Bankautomaten können konfiguriert werden, es ist jedoch ein Kompromiss zwischen Stellfläche und Leistung.
- Die zulässige Anzahl Bankautomaten liegt zwischen 2 und 8.
- Standardmäßig werden 4 Bankautomaten über RTL-Parameter konfiguriert.
- Um Bankautomaten zu ändern, beachten Sie den Parameter nBANK_MACHS = 8, der in memc_ui_top enthalten ist. Beispielample für 8 Bankautomaten – nBANK_MACHS = 8
Sie sind sich nun der leistungsbeeinflussenden Faktoren bewusst.
Stellen Sie sich eine Upstream-Anwendung vor, die Ihnen 512 Datenbytes pro Paket liefert und die Sie an verschiedenen Speicherorten speichern müssen. Da 512 Datenbytes 64 DDR3-Datenbursts entsprechen, führen Sie das Beispiel erneut aus.ample Design mit einem Anreiz file enthält 512 Schreibvorgänge, 512 Lesevorgänge und Zeilenumschaltung für jeweils 64 Schreib- oder Lesevorgänge:
- 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
Am Ende der Simulation sehen Sie, dass die Busauslastung bei 77 Prozent liegt.
Abbildung 11: Leistungsstatistiken für 512 Schreibvorgänge und 512 Lesevorgänge – Zeilenumschaltung für 64 Schreib- oder Lesevorgänge.
Sie können nun das im vorherigen Abschnitt erworbene Wissen anwenden, um die Effizienz zu verbessern. Mit einem view Um alle Bänke zu nutzen, ändern Sie statt der Zeile das Adressmuster, um die Bank zu ändern, wie unten gezeigt.
Dies entspricht dem Festlegen von ROW_BANK_Column in der Einstellung zur Speicheradresszuordnung in der 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
Am Ende der Simulation werden Sie sehen, dass die Busauslastung von zuvor 77 Prozent jetzt 87 Prozent beträgt!
Wenn Sie dennoch eine höhere Effizienz benötigen, können Sie große Paketgrößen von 1024 oder 2048 Bytes wählen oder eine manuelle Aktualisierung in Betracht ziehen.
Notiz: Xilinx empfiehlt nicht, die Controller-Aktualisierung zu umgehen, da wir nicht sicher sind, ob Sie die Jedec-Zeitvorgaben für die automatische Aktualisierung einhalten können, da diese die Datenzuverlässigkeit beeinträchtigen.
Von der Controllerseite aus können Sie nBANk_MACH ändern und die Leistungsverbesserung sehen.
Dies kann jedoch Auswirkungen auf Ihren Designzeitplan haben. Bitte beachten Sie (Xilinx Antwort 36505) für Details zu nBANk_MACH
Öffnen Sie core_name_mig_sim.v file und ändern Sie die Parameter nBANK_MACHS von 4 auf 8 und führen Sie die Simulation erneut aus. Damit der Parameterwert in der Hardware wirksam wird, müssen Sie core_name_mig.v aktualisieren. file.
Ich habe dasselbe Muster verwendet, bei dem wir eine Busauslastung von 87 % erreichten (Abbildung -12).
Wenn nBANK_MACHS auf 8 eingestellt ist, beträgt die Effizienz jetzt 90 %.
Beachten Sie auch, dass ½- und ¼-Controller aufgrund ihrer Latenzen die Effizienz negativ beeinflussen.
Zum BeispielampDa wir beispielsweise nur alle 4 CK-Zyklen Befehle senden können, kommt es beim Einhalten der Mindest-DRAM-Zeitspezifikationen manchmal zu zusätzlichen Auffüllungen, was die Effizienz gegenüber der Theorie verringern kann.
Probieren Sie verschiedene Controller aus, um denjenigen zu finden, der Ihren Effizienzanforderungen entspricht.
Verweise
- Zynq-7000 AP SoC und 7er-FPGAs MIS v2.3 [UG586]
- Xilinx MIG-Lösungszentrum http://www.xilinx.com/support/answers/34243.html
Änderungsverlauf
13 – Erstveröffentlichung
PDF herunterladen: Xilinx DDR2 MIG 7 Leistungsschätzungsleitfaden