Il est possible que la reconfiguration de l’émetteur-récepteur \'reconfig_busy\' port de sortie reste figée, ce qui est indiqué haut après une réinitialisation. Il est possible que les canaux d’émetteur-récepteur connectés au contrôleur de reconfiguration affecté restent bloqués à la réinitialisation. Le port de sortie \'reconfig_busy\ reste bloqué même après la réinitialisation du contrôleur de reconfiguration ; seule la reprogrammation du périphérique peut résoudre le problème.
Ce symptôme peut être provoqué par la structure de réinitialisation interne du contrôleur de reconfiguration de l’émetteur-récepteur. Une réinitialisation asynchrone de la logique entraînant le bus d’adresses d’un RAM M20K peut provoquer une logique asynchrone. Cela peut entraîner l’affirmation simultanée de plusieurs lignes d’adresses dans le M20K, ce qui peut entraîner un partage de charge entre les cellules bits, corrompant le contenu du M20K.
Cette corruption affecte les Stratix® V et Arria® contrôleur de reconfiguration de l’émetteur-récepteur des périphériques V GZ, car il contient un processeur Nios® II utilisé pour le calibrage PMA, et le code de programme du processeur est stocké dans la RAM M20K. Si la corruption se produit dans la mémoire du programme Nios® II, cela peut entraîner le verrouillage du processeur, ce qui fait en sorte que le port de sortie reconfig_busy reste bloqué. La récupération de cette situation n’est possible qu’en reprogrammant le périphérique, car le contenu M20K n’est chargé que pendant la programmation des périphériques.
Le correctif de ce problème modifiera le contrôleur de réinitialisation interne et la structure de réinitialisation du contrôleur de reconfiguration de l’émetteur-récepteur pour utiliser des réinitialisations synchrones, ainsi que le découptage de manière préventive du port M20K clock_enable pendant une condition de réinitialisation.
Le correctif sera disponible dans une version ultérieure du logiciel Quartus® II. Un correctif peut être fourni pour les versions antérieures du logiciel Quartus II en soumettant une demande de service dans mySupport. Si une solution est nécessaire immédiatement, le correctif peut être appliqué manuellement en suivant les instructions suivantes.
Il y a 9 fichiers qui doivent être ajoutés ou modifiés :
-
altera_reset_controller_early_ce_mod.v (ajouter)
-
altera_reset_synchronizer_early_ce_mod.v (ajouter)
-
Fichier QIP associé au contrôleur de reconfiguration de l’émetteur-récepteur (modifier)
-
alt_xcvr_reconfig.sv (modifier)
-
alt_xcvr_reconfig_soc.sv (modifier)
-
alt_xcvr_reconfig_cpu.v (modifier)
-
alt_xcvr_reconfig_cpu_ram.sv (modifier)
-
sv_xrbasic_lif_csr.sv (modifier)
-
sv_xcvr_reconfig_mif_avmm.sv (modifier)
Ces 9 fichiers doivent être situés dans le répertoire dans lequel le contrôleur de reconfiguration de l’émetteur-récepteur a été généré.
Téléchargez altera_reset_controller_early_ce_mod.v et placez-le dans le répertoire dans lequel les fichiers de reconfiguration de l’émetteur-récepteur sont conservés :
Télécharger altera_reset_synchronizer_early_ce_mod.v et placez-le dans le répertoire dans lequel les fichiers de reconfiguration de l’émetteur-récepteur sont conservés :
Afin d’ajouter ces deux fichiers à votre conception, localisez et modifiez le fichier .qip associé à l’instance de contrôleur de reconfiguration de l’émetteur-récepteur et ajoutez les deux lignes suivantes au fichier :
set_global_assignment -bibliothèque « LIBRARY_NAME » -nom VERILOG_FILE [fichier rejoindre $::quartus(qip_path) « LIBRARY_PATH/altera_reset_controller_early_ce_mod.v » ].
set_global_assignment -bibliothèque « LIBRARY_NAME » - nom VERILOG_FILE [fichier rejoindre $:quartus(qip_path) « LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v » ].
Dans les deux lignes ci-dessus, modifiez LIBRARY_NAME et LIBRARY_PATH pour correspondre aux autres entrées du fichier .qip du contrôleur de reconfiguration de l’émetteur-récepteur.
Pour alt_xcvr_reconfig.sv, effectuez les modifications suivantes :
-
Localisez l’instanciation du module alt_xcvr_resync et inversez les connexions entre les ports « d » et « reset » (Réinitialiser). Une fois modifiée, l’instantiation devrait ressembler à ce qui suit :
alt_xcvr_resync (nº)
. INIT_VALUE (1)
) inst_reconfig_reset_sync (
.clk (mgmt_clk_clk),
.d (mgmt_rst_reset),
.reset (1\'b0),
.q (r_mgmt_rst_reset)
);
Pour alt_xcvr_reconfig_soc.sv, effectuez les modifications suivantes :
Ajoutez la définition de fil suivante près du haut du module :
cpu_reset_req fil ;
Localisez l’instantiation du module alt_xcvr_reconfig_cpu et ajoutez le port suivant :
.ram_ce (cpu_reset_req),
Localisez l’instantiation du module alt_xcvr_reconfig_cpu_ram et ajoutez le port suivant :
.ram_ce (cpu_reset_req),
Pour alt_xcvr_reconfig_cpu.v, effectuez les modifications suivantes :
-
Ajoutez le port suivant au niveau supérieur :
ram_ce de câble de sortie,
-
Ajoutez le code suivant au module :
m20k_gate fil ;
altera_ram_clock_enable fil ;
assigner altera_ram_clock_enable = ~ m20k_gate ;
assigner ram_ce = altera_ram_clock_enable ;
-
Trouvez l’instantiation de altera_reset_controller et changez-la en une instanciation de altera_reset_controller_early_ce_mod. Ajoutez le port m20k_gate à cette instantiation, puis connectez-le au signal m20k_gate. Après avoir apporté ces modifications, l’instantiation devrait ressembler à ce qui suit :
altera_reset_controller_early_ce_mod (nº)
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES (« de décort »),
. SYNC_DEPTH (2)
) rst_controller (
.reset_in0 (~reset_reset_n), // reset_in0.reset
.clk (clk_clk), // clk.clk
.reset_out (reconfig_ctrl_reset_reset), // reset_out.reset
.m20k_gate (m20k_gate),
.reset_in1 (1\'b0), // (résilié)
.reset_in2 (1\'b0), // (terminé)
.reset_in3 (1\'b0), // (résilié)
.reset_in4 (1\'b0), // (résilié)
.reset_in5 (1\'b0), // (terminé)
.reset_in6 (1\'b0), // (résilié)
.reset_in7 (1\'b0), // (résilié)
.reset_in8 (1\'b0), // (résilié)
.reset_in9 (1\'b0), // (résilié)
.reset_in10 (1\'b0), // (résilié)
.reset_in11 (1\'b0), // (résilié)
.reset_in12 (1\'b0), // (résilié)
.reset_in13 (1\'b0), // (résilié)
.reset_in14 (1\'b0), // (résilié)
.reset_in15 (1\'b0) // (résilié)
);
Pour le fichier alt_xcvr_reconfig_cpu_ram.sv, effectuez les modifications suivantes :
-
Ajoutez le port d’entrée suivant :
ram_ce d’entrée,
-
Trouvez l’instanciation altsyncram et modifiez le port clocken0 pour le connecter au nouveau port d’entrée ram_ce :
.clocken0 (ram_ce),
-
Modifiez les définitions defparam clock_enable_input/output_a/b comme suit :
altsyncram_component.clock_enable_input_a = « NORMAL »,
altsyncram_component.clock_enable_input_b = « NORMAL »,
altsyncram_component.clock_enable_output_a = « NORMAL »,
altsyncram_component.clock_enable_output_b = « NORMAL »,
Pour le fichier sv_xrbasic_lif_csr.sv, effectuez les modifications suivantes :
-
Localisez le bloc toujours séquentiel qui contrôle l’adresse logique du canal. Ce bloc peut toujours être identifié par le commentaire « // registre logique des canaux » ci-dessus. Retirez l’état de réinitialisation de la liste de sensibilités. Une fois modifié, le démarrage du bloc toujours en place devrait ressembler à ce qui suit :
registre des canaux logiques
toujours @(posedge reconfig_clk) commencer
si (réinitialisation == 1) commencez
...
-
Localisez le bloc toujours séquentiel qui contrôle le registre d’adresses reconfig natif. Ce bloc peut toujours être identifié par le commentaire « // registre des adresses reconfig natives, peut être interprété comme une adresse de décalage de canal ou une adresse physique » ci-dessus. Retirez l’état de réinitialisation de la liste de sensibilités. Une fois modifié, le démarrage du bloc toujours en place devrait ressembler à ce qui suit :
registre d’adresse reconfig natif, peut être interprété comme une adresse de décalage de canal, ou une adresse physique
toujours @(posedge reconfig_clk) commencer
si (réinitialisation == 1) commencez
...
Pour le fichier sv_xcvr_reconfig_mif_avmm.sv, cette modification n’est nécessaire que si la reconfiguration du canal ou de la PLL est activée dans la GUI Megawizard du contrôleur de reconfiguration de l’émetteur-récepteur. Effectuez les modifications suivantes :
-
Localisez le bloc toujours séquentiel qui possède le commentaire « // Avalon sortie et stockage interne » ci-dessus et retirez l’état de réinitialisation de la liste de sensibilité. Une fois modifié, le démarrage du bloc toujours en place devrait ressembler à ce qui suit :
Avalon sortie et stockage interne
toujours @(clk posege)
Commencer
si (réinitialisation) commencez
...
Une fois toutes ces modifications apportées, votre conception devra être repilée.