Guide d'estimation des performances Xilinx DDR2 MIG 7
Remarque importante : Ce fichier PDF téléchargeable d'un enregistrement de réponse est fourni pour améliorer sa convivialité et sa lisibilité. Il est important de noter que les enregistrements de réponse sont Web-contenu basé sur des contenus fréquemment mis à jour au fur et à mesure que de nouvelles informations deviennent disponibles. Nous vous rappelons de visiter le support technique de Xilinx Website et review (Réponse Xilinx 63234) pour la dernière version de cette réponse.
Introduction
En raison de la manière dont les mémoires DDR2 et DDR3 sont conçues et dont le contrôleur de la série MIG 7 est conçu, les performances ne sont pas simples.
Cela nécessite une compréhension des différents paramètres de synchronisation Jedec et de l'architecture du contrôleur, et vous devrez exécuter des simulations pour obtenir les estimations.
Le principe général pour déterminer les performances est le même mais ce document fournit un moyen simple d'obtenir l'efficacité en utilisant le MIG example design à l'aide de banc d'essai et de stimulus fileest attaché ici.
Bande passante efficace
Le bus de données DRAM n'atteint une bande passante presque maximale que pendant les rafales de lecture et d'écriture et sa surcharge réduit le débit de données effectif.
Quelques examples frais généraux sont :
- temps de précharge pour accéder aux lignes de la même banque (l'adresse d'accès n'est pas dans le même hit de page de ligne)
- temps de récupération en écriture pour passer de l'accès en écriture à l'accès en lecture
- le temps de rotation du bus pour passer de l'accès en lecture à l'accès en écriture
Bande passante effective = Bande passante maximale * Efficacité
Génération de conception MIG
Reportez-vous au chapitre 586 de l'UG1 pour obtenir des détails étape par étape sur MIG IP et exampla génération de design.
Avant d'exécuter la simulation de performances MIG 7 Series, procédez comme suit pour vous assurer que votre environnement de simulation est correct. Ouvrez le MIG example concevez et mappez les bibliothèques appropriées, exécutez la simulation et assurez-vous que vous pouvez voir le message "test réussi" dans la transcription.
Pour démontrer le flux, j'ai généré une adresse IP MIG pour xc7vx690tffg1761-2 et invoqué l'exampla conception.
Deux choses à noter sont les bits d'adresse mémoire et la sélection de mappage d'adresse mémoire.
Par exempleample, j'ai sélectionné MT41J128M8XX-125 sous les options déroulantes de la partie mémoire.
Pour la partie mémoire sélectionnée de la figure 1, ligne = 14, colonne = 10 et banque = 3, donc app_addr_width = ligne + colonne + banque + rang = 28
Vous pouvez sélectionner la colonne BANK_ROW_COLUMN ou ROW BANK.
J'ai laissé la colonne ROW BANK qui est le mappage d'adresse par défaut.
Example design Simulation avec banc de test synthétisable
Sous Paramètres de simulation, sélectionnez Simulateur QuestaSim/ModelSim et accédez à l'emplacement des bibliothèques compilées.
Pour plus de détails sur le pointage vers un chemin d'installation d'outils tiers, la sélection du simulateur cible et la compilation et le mappage des bibliothèques, vous pouvez vous référer au (UG900) Vivado Design Suite User Guide Logic Simulation
Exécutez la simulation via l'interface graphique (cliquez sur l'onglet Exécuter la simulation dans le gestionnaire de projet) et assurez-vous de voir le message "test réussi" dans la transcription.
Modifications RTL de simulation de performances
- Cliquez avec le bouton droit sur l'onglet des sources, sélectionnez "ajouter ou créer des sources de simulation" et accédez au fichier mig7_perfsim_traffic_generator.sv file et cliquez sur Terminer pour l'ajouter.
- Cliquez avec le bouton droit sur l'onglet des sources, sélectionnez "Ajouter ou créer des sources de simulation", accédez à perfsim_stimulus.txt et cliquez sur Terminer pour l'ajouter.
- Commentez l'exampinstanciation le_top dans sim_tb_top.v file.
- Ajoutez les lignes RTL ci-dessous à sim_tb_top,v
- paramètre local APP_ADDR_WIDTH = 28 ;
- paramètre local APP_DATA_WIDTH = 64 ;
- paramètre local APP_MASK_WIDTH = APP_DATA_WIDTH / 8 ;
- paramètre local MEM_ADDR_ORDER = "BANK_ROW_COLUMN" ;
- paramètre local BANK_WIDTH = 3 ;
- paramètre local RANK_WIDTH = 1 ;
- fil [APP_ADDR_WIDTH-1:0] c0_ddr3_app_addr ;
- fil [2:0] c0_ddr3_app_cmd ;
- fil c0_ddr3_app_fr ;
- fil [APP_DATA_WIDTH-1:0] c0_ddr3_app_wdf_data ;
- fil c0_ddr3_app_wdf_end ;
- fil [APP_MASK_WIDTH-1:0] c0_ddr3_app_wdf_mask ;
- fil c0_ddr3_app_wdf_wren ;
- fil [APP_DATA_WIDTH-1:0] c0_ddr3_app_rd_data ;
- fil c0_ddr3_app_rd_data_end ;
- fil c0_ddr3_app_rd_data_valid ;
- fil c0_ddr3_app_rdy ;
- fil c0_ddr3_app_wdf_rdy ;
- fil c0_data_compare_error ;
- fil ui_clk;
- fil ui_clk_sync_rst ;
- fil app_sr_req = 0 ;
- fil app_ref_req = 0 ;
- fil app_zq_req =0 ;
- fil c0_app_wdf_mask =0 ;
Instanciation du contrôleur de mémoire FPGA
mig_7series_0_mig u_mig_7series_0_mig (
// Ports d'interface mémoire
- .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),
// Ports d'interface d'application
- .app_addr (c0_ddr3_app_addr),
- .app_cmd (c0_ddr3_app_cmd),
- .app_fr (c0_ddr3_app_fr),
- .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),
// Ports d'horloge système
- .sys_clk_i (sys_clk_i),
// Ports d'horloge de référence
- .clk_ref_i (clk_ref_i),
- .sys_rst (sys_rst)
- );
Instanciation du générateur de trafic de performance
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_trafic_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_fr (c0_ddr3_app_fr ),
.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. Modifiez APP_ADDR_WIDTH, APP_DATA_WIDTH, RANK_WIDTH et BANK_WIDTH en fonction de votre sélection de partie mémoire.
Les valeurs peuvent être obtenues à partir du _mig.v file. - Le nom d'instanciation surligné en jaune mig_7series_0_mig peut varier en fonction du nom de votre composant lors de la création de l'IP, vérifiez si vous avez choisi un nom différent et modifiez-le en conséquence.
- Une fois l'adresse IP générée, ouvrez le _mig.v file et recoupez toutes les variations dans les noms de signaux LHS et corrigez-les.
- app_sr_req, app_ref_req et app_zq_req doivent être initialisés à 0.
- Comme example_top.v est commenté et nouveau files sont ajoutés, vous verrez probablement "?" à côté de la
mig_7series_0_mig.v file sous sources de simulation.
Pour cartographier le bon file, faites un clic droit sur mig_7series_0_mig.v, sélectionnez "Ajouter des sources", accédez à
/mig_7series_0_example.srcs/sources_1/ip/mig_7series_0/mig_7series_0/user_design/rtl
et ajoutez le mig_7series_0_mig_sim.v file. - Si tu vois "?" pour le sous-jacent files, ajouter tout RTL files dans les dossiers clocking, controller, ip_top,phy et UI.
- Une fois les modifications RTL effectuées et toutes les files sont ajoutés à vos sources de simulation, la hiérarchie doit être similaire à la figure 5.
Le files surlignés en rouge sont nouvellement ajoutés, et "?" est attendu sur les modules liés à ECC car la configuration de mémoire sélectionnée a l'option ECC désactivée.
Stimulus File Description
Chaque modèle de stimulus est de 48 bits et le format est décrit dans les figures 6-1 à 6-4.
Codage d'adresse (Adresse [35:0])
L'adresse est codée dans le stimulus conformément aux Figure 7-1 à Figure 7-6. Tous les champs d'adresse doivent être saisis au format hexadécimal. Tous les champs d'adresse ont une largeur divisible par quatre à saisir au format hexadécimal. Le banc de test n'envoie que les bits nécessaires d'un champ d'adresse au contrôleur mémoire.
Par exempleampAinsi, dans une configuration à huit banques, seuls les bits de banque [2:0] sont envoyés au contrôleur de mémoire et les bits restants sont ignorés. Les bits supplémentaires d'un champ d'adresse vous permettent de saisir l'adresse au format hexadécimal.
Vous devez confirmer que la valeur entrée correspond à la largeur d'une configuration donnée.
- Adresse de colonne (Colonne[11:0]) – L'adresse de colonne dans le stimulus est fournie à un maximum de 12 bits, mais vous devez l'aborder en fonction du paramètre de largeur de colonne défini dans votre conception.
- Adresse de ligne (Ligne[15:0]) – L'adresse de ligne dans le stimulus est fournie à un maximum de 16 bits, mais vous devez l'aborder en fonction du paramètre de largeur de ligne défini dans votre conception.
- Adresse de la banque (Banque[3:0]) – L'adresse de banque dans le stimulus est fournie à un maximum de quatre bits, mais vous devez l'aborder en fonction du paramètre de largeur de banque défini dans votre conception.
- Adresse de rang (Rang[3:0]) – L'adresse de rang dans le stimulus est fournie sur un maximum de quatre bits, mais vous devez l'aborder en fonction du paramètre de largeur de rang défini dans votre conception.
L'adresse est assemblée en fonction du paramètre MEM_ADDR_ORDER de niveau supérieur et envoyée à l'interface utilisateur
Répétition de commande (Répétition de commande [7:0])
Le nombre de répétitions de commande est le nombre de fois où la commande respective est répétée sur l'interface utilisateur. L'adresse de chaque répétition est incrémentée de 8. Le nombre maximal de répétitions est de 128.
Le banc d'essai ne vérifie pas la limite de la colonne et il boucle si la limite maximale de la colonne est atteinte pendant les incréments.
Les 128 commandes remplissent la page. Pour toute adresse de colonne autre que 0, le nombre de répétitions de 128 finit par traverser la limite de la colonne et s'enrouler jusqu'au début de l'adresse de la colonne.
Utilisation du bus
L'utilisation du bus est calculée au niveau de l'interface utilisateur en tenant compte du nombre total de lectures et d'écritures et l'équation suivante est utilisée :
- BL8 prend quatre cycles d'horloge mémoire
- end_of_stimulus est le moment où toutes les commandes sont exécutées.
- calib_done est l'heure à laquelle l'étalonnage est effectué.
Examples motifs
Ces exampLes fichiers sont basés sur le MEM_ADDR_ORDER défini sur BANK_ROW_COLUMN.
Modèle de lecture unique
00_0_2_000F_00A_1 - Ce modèle est une lecture unique à partir de la 10e colonne, de la 15e ligne et de la deuxième banque.Modèle d'écriture unique
00_0_1_0040_010_0 - Ce modèle est une écriture unique dans la 32e colonne, la 128e ligne et la première banque.Écriture et lecture uniques à la même adresse
00_0_2_000F_00A_0 – Ce modèle est une écriture unique sur la 10e colonne, la 15e ligne et la deuxième banque.
00_0_2_000F_00A_1 – Ce modèle est une lecture unique à partir de la 10e colonne, de la 15e rangée et de la deuxième banque
Plusieurs écritures et lectures avec la même adresse
0A_0_0_0010_000_0 – Cela correspond à 10 écritures avec une adresse allant de 0 à 80 visible dans la colonne.
0A_0_0_0010_000_1 – Cela correspond à 10 lectures avec une adresse allant de 0 à 80 visible dans la colonne.
Retour à la ligne pendant les écritures
0A_0_2_000F_3F8_0 – Cela correspond à 10 écritures avec une adresse de colonne enveloppée au début de la page après une écriture.
Simulation du générateur de trafic de performance
À ce stade, vous avez terminé avec MIG exampla simulation de conception. Cela implique que votre configuration de simulation est prête, que vous avez effectué des modifications RTL de simulation de performance, que la nouvelle hiérarchie de simulation est correcte et que vous avez compris les modèles de stimulus. Exécutez à nouveau la simulation avec 16 écritures et lectures dans perfsim_stimulus.txt.
Exécutez tout, attendez que le signal init_calib_complete soit affirmé et vous pourrez voir le nombre proposé d'écritures et de lectures. La simulation s'arrêtera alors.
Lorsque vous êtes invité à quitter la simulation, sélectionnez Non et accédez à la fenêtre de transcription où vous pourrez voir les statistiques de performance.
Si vous sélectionnez "Quitter la simulation" les statistiques de performances seront écrites dans un file nommé mig_band_width_output.txt situé dans le sim_1/behave dossier.
Example chemin du répertoire :-
/mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/behav
Vous pourriez vous demander pourquoi le pourcentagetagL'utilisation du bus n'est que de 29. Relancez la simulation avec les mêmes paramètres IP mais en changeant simplement le stimulus file à 256 écritures et 256 lectures
ff_0_0_0000_000_0
ff_0_0_0000_000_1
Vous verrez maintenant le pourcentagetage comme 85, ce qui implique que la DDR3 offre une meilleure utilisation du bus pour une longue séquence d'écritures et de rafales de lecture.
Moyens généraux d'améliorer les performances
Les facteurs qui influencent l'efficacité peuvent être divisés en deux sections :
- Spécifique à la mémoire
- Spécifique au contrôleur
La figure 9 vous donne un aperçuview des termes spécifiques à la mémoire.
Contrairement aux mémoires SRAM et Block Memories, les performances DDR2 ou DDR3 ne se limitent pas au débit de données maximal.
Cela dépend de nombreux facteurs temporels, notamment :
- tRCD : Délai de commande de ligne (ou délai ras à cas).
- tCAS(CL) : Latence d'échantillonnage d'adresse de colonne.
- tRP : Délai de précharge de ligne.
- tRAS: Row Active Time (activer pour préchanger).
- tRC : Temps de cycle de rangée. tRC = tRAS + tRP
- traC : Délai d'accès Radom. tRAC = tRCD + tCAS
- tCWL : Cas de latence d'écriture.
- tZQ : Temps d'étalonnage ZQ.
- tRFC : Durée du cycle d'actualisation des lignes
- tWTR : Délai d'écriture à lecture. Heure de la dernière transaction d'écriture sur la commande de lecture.
- tWR : Temps de récupération d'écriture. Dernière transaction d'écriture à l'heure de précharge
La synchronisation de tous les paramètres répertoriés dépend du type de mémoire utilisée et de la classe de vitesse de la partie mémoire.
Plus de détails sur les définitions et les spécifications de synchronisation peuvent être trouvés dans DDR2 DDR3 JEDEC ou dans n'importe quelle fiche technique de périphérique de mémoire.
L'efficacité dépend principalement du mode d'accès à la mémoire. Différents modèles d'adresses donnent des résultats d'efficacité différents.
Frais généraux de synchronisation de la mémoire
- Temps d'activation et temps de précharge lors du passage à de nouvelles banques/lignes ou lors du changement de lignes dans la même banque.- Donc, si vous réduisez le changement de ligne, cela peut supprimer tRCD et tRP.
- Envoyer des commandes d'écriture ou de lecture continues -Maintenir la synchronisation tCCD.
- Minimiser le changement de commande d'écriture en lecture et de lecture en écriture - Temps de récupération d'écriture pour passer en accès en lecture, temps de rotation du bus pour passer de la lecture à l'écriture
- Définissez un intervalle de rafraîchissement approprié.
- La SDRAM DDR3 nécessite des cycles de rafraîchissement à un intervalle périodique moyen de tREFI.
- Un maximum de 8 commandes de rafraîchissement supplémentaires peuvent être émises à l'avance ("pull in"). Cela ne réduit pas le nombre de rafraîchissements, mais l'intervalle maximum entre deux commandes de rafraîchissement environnantes est limité à 9 × tREFI
- Utiliser toutes les banques - Un mécanisme d'adressage approprié est préférable.
- Ligne-Banque-Colonne : Pour une transaction se produisant sur un espace d'adressage séquentiel, le cœur ouvre automatiquement la même ligne dans la banque suivante du dispositif DRAM pour continuer la transaction lorsque la fin d'une ligne existante est atteinte. Il est bien adapté aux applications qui nécessitent l'éclatement de gros paquets de données vers des emplacements d'adresses séquentielles.
- Rive-Ligne-Colonne : Lors du franchissement d'une limite de rangée, la rangée actuelle sera fermée et une autre rangée sera ouverte dans la même rangée. MSB est une adresse bancaire, qui peut être utilisée pour passer d'une banque à l'autre. Il convient aux transactions plus courtes et plus aléatoires vers un bloc de mémoire pendant un certain temps, puis à un saut vers un autre bloc (banque)
- Longueur d'éclatement
- BL 8 est pris en charge pour DDR3 sur la série 7. BC4 a un rendement très faible qui est inférieur à 50 %. En effet, le temps d'exécution de BC4 est le même que celui de BL8. Les données sont simplement masquées à l'intérieur du composant.
- Dans les cas où vous ne souhaitez pas écrire en rafale complète, un masque de données ou une écriture après lecture peut être envisagée.
- Définissez un intervalle ZQ approprié (DDR3 uniquement)
Le contrôleur envoie les commandes d'étalonnage ZQ court (ZQCS) et ZQ long (ZQCL).- Adhérer à la norme DDR3 Jedec
- L'étalonnage ZQ est abordé dans la section 5.5 de la norme JEDEC Spec JESD79-3 DDR3 SDRAM
- L'étalonnage ZQ étalonne la terminaison de matrice (ODT) à intervalles réguliers pour tenir compte des variations entre les VT
- La logique est contenue dans bank_common.v/vhd
- Le paramètre Tzqcs détermine la vitesse à laquelle une commande d'étalonnage ZQ est envoyée à la mémoire
- Il est possible de désactiver le compteur et d'envoyer manuellement en utilisant app_zq_req, c'est similaire à l'envoi manuel d'un rafraîchissement.
Reportez-vous à (Réponse Xilinx 47924) pour plus de détails.
Frais généraux du contrôleur
- Lectures périodiques – Reportez-vous à (Réponse Xilinx 43344) pour plus de détails.
- Ne pas modifier la période de lecture
- Ignorer les lectures périodiques pendant les écritures et émettre le nombre de lectures manquées avant une véritable lecture
- Réapprovisionnement - Référez-vous (Réponse Xilinx 34392) pour plus de détails.
Pour les conceptions d'interface utilisateur et AXI, il est préférable d'activer cette option.- La réorganisation est la logique qui anticipe plusieurs commandes et modifie l'ordre des commandes utilisateur pour que les commandes non-mémoire n'occupent pas de bande passante valide. Les performances sont également liées au modèle de trafic réel.
- Sur la base du modèle d'adresse, la réorganisation aide à ignorer les commandes de précharge et d'activation et fait en sorte que tRCD et tRP n'occupent pas la largeur de bande de données.
- Essayez d'augmenter le nombre de guichets automatiques bancaires.
- La majeure partie de la logique du contrôleur réside dans les machines bancaires et elles correspondent aux banques DRAM
- Une machine bancaire donnée gère une seule banque DRAM à un instant donné.
- L'attribution des guichets automatiques est dynamique, il n'est donc pas nécessaire d'avoir un guichet automatique pour chaque banque physique.
- Les guichets automatiques bancaires peuvent être configurés, mais c'est un compromis entre la surface et la performance.
- Le nombre autorisé de guichets automatiques varie de 2 à 8.
- Par défaut, 4 guichets bancaires sont configurés via les paramètres RTL.
- Pour changer de Guichets Bancaires, considérez le paramètre nBANK_MACHS = 8 contenu dans memc_ui_top Example pour 8 guichets automatiques – nBANK_MACHS = 8
Vous connaissez maintenant les facteurs qui influencent la performance.
Considérez une application en amont qui vous donne 512 octets de données par paquet et vous devez les enregistrer dans différents emplacements de mémoire. Comme 512 octets de données équivaut à 64 rafales de données DDR3, relancez l'example design avec un stimulus file contenant 512 écritures, 512 lectures et une commutation de ligne pour 64 écritures ou lectures :
- 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 fin de la simulation, vous verrez que l'utilisation du bus est de 77 %.
Figure 11 : Statistiques de performances pour 512 écritures et 512 lectures – Commutation de ligne pour 64 écritures ou lectures.
Vous pouvez maintenant appliquer les connaissances acquises dans la section précédente pour améliorer l'efficacité. Avec un view Pour utiliser toutes les banques au lieu de changer de ligne, modifiez le modèle d'adresse pour changer de banque comme indiqué ci-dessous.
Cela équivaut à définir ROW_BANK_Column dans le paramètre de mappage d'adresse mémoire dans l'interface graphique 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 fin de la simulation, vous verrez que l'ancienne utilisation du bus de 77 % est désormais de 87 !
Si vous avez toujours besoin d'une plus grande efficacité, vous pouvez opter pour de grandes tailles de paquets de 1024 ou 2048 octets, ou envisager une actualisation manuelle.
Note: Xilinx n'encourage pas le contournement de l'actualisation du contrôleur car nous ne savons pas si vous serez en mesure de respecter le calendrier d'actualisation automatique de Jedec qui affecte la fiabilité des données.
Du côté du contrôleur, vous pouvez modifier nBANk_MACH et voir l'amélioration des performances.
Cependant, cela peut affecter votre timing de conception, veuillez vous référer à (Réponse Xilinx 36505) pour plus de détails sur nBANk_MACH
Ouvrez le core_name_mig_sim.v file et changez les paramètres nBANK_MACHS de 4 à 8 et relancez la simulation. Pour que la valeur du paramètre prenne effet dans le matériel, vous devez mettre à jour le core_name_mig.v file.
J'ai utilisé le même modèle où nous avons obtenu 87 % d'utilisation du bus (figure -12).
Avec nBANK_MACHS défini sur 8, l'efficacité est désormais de 90 %.
Notez également que les contrôleurs ½ et ¼ affectent négativement l'efficacité en raison de leurs latences.
Par exempleample, puisque nous ne pouvons envoyer des commandes que tous les 4 cycles CK, il y a parfois un rembourrage supplémentaire lors du respect des spécifications de synchronisation DRAM minimales, ce qui peut réduire l'efficacité par rapport à la théorie.
Essayez différents contrôleurs pour trouver celui qui répond à vos besoins en matière d'efficacité.
Références
- Zynq-7000 AP SoC et FPGA série 7 MIS v2.3 [UG586]
- Centre de solutions Xilinx MIG http://www.xilinx.com/support/answers/34243.html
Historique des révisions
13/03/2015 – Version initiale
Télécharger le fichier PDF: Guide d'estimation des performances Xilinx DDR2 MIG 7