Problème critique
Lorsque vous effectuez des réinitialisations multiples de l’exemple de conception de la machine d’état JESD204B IP RTL mis en œuvre dans les périphériques Intel® Arria® 10, Stratix® V, Arria® V ou Cyclone® V, vous pouvez observer les broches d’interruption (jesd204_tx_int et/ou jesd204_rx_int) être revendiquées en raison d’erreurs ou de erreurs, qui peuvent être lues depuis la tx_err (0x60), rx_err0 (0x60), registres rx_err1 (0x64 ).
Pour Intel Arria 10 périphériques, utilisez plutôt l’exemple de conception du processeur Nios® II.
Pour Stratix V, Arria V ou Cyclone V, effectuez les modifications suivantes sur le RTL :
- Modifiez un module de haut niveau jesd204b_ed dans le fichier jesd204b_ed.sv.
Définissez les fils actifs haute réinitialisation :
tx_link_rst_sync fil ;
tx_frame_rst_sync fil ;
rx_link_rst_sync fil ;
rx_frame_rst_sync fil ;
global_rst_sync fil ;
Modifiez la polarité de la réinitialisation dans les affectations filaires suivantes :
Maintenez le cœur en mode de réinitialisation jusqu’à ce que l’émetteur-récepteur soit prêt
assigner global_rst_n_sync = ~global_rst_sync ; Ajouter global_rst_n_sync affectation
assigner tx_avs_rst_n = avs_rst_n ;
assigner rx_avs_rst_n = avs_rst_n ;
assigner tx_frame_rst_n = ~tx_frame_rst_sync ;
attribuer rx_frame_rst_n = ~rx_frame_rst_sync ;
attribuer des tx_link_rst_n = ~tx_link_rst_sync ;
assigner rx_link_rst_n = ~rx_link_rst_sync ;
altera_reset_controller est un synchronisateur actif à haute réinitialisation. Modifiez l’entrée et la sortie des instanciations de synchronisation de réinitialisation en conséquence pour refléter la polarité correcte :
//
Réinitialiser les synchronisations pour la réinitialisation globale (domaine de l’horloge mgmt)
//
altera_reset_controller (nº)
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES (« de décort »),
. SYNC_DEPTH (2)
) u_avs_rst_sync (
.reset_in0 (~global_rst_n),
.clk (mgmt_clk),
.reset_out (global_rst_sync)
);
Effectuez des débits binaires ET sur les wire_tx_ready et les wire_rx_ready, qui sont des signaux de bus.
//
Réinitialiser les synchronisateurs pour la réinitialisation des couches de transport (domaine de l’horloge de trame)
//
altera_reset_controller (nº)
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES (« de décort »),
. SYNC_DEPTH (2)
) u_tx_frame_rst_sync (
.reset_in0 (~(wire_frame_rst_n &wire_tx_ready)),
.clk (frame_clk),
.reset_out (tx_frame_rst_n_sync)
);
altera_reset_controller (nº)
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES (« de décort »),
. SYNC_DEPTH (2)
) u_rx_frame_rst_sync (
.reset_in0 (~(wire_frame_rst_n &wire_rx_ready)),
.clk (frame_clk),
.reset_out (rx_frame_rst_n_sync)
);
//
Réinitialiser les synchronisations pour la réinitialisation du cœur de base (domaine de l’horloge de liaison)
//
altera_reset_controller (nº)
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES (« de décort »),
. SYNC_DEPTH (2)
) u_tx_link_rst_sync (
.reset_in0 (~(wire_link_rst_n &wire_tx_ready)),
.clk (link_clk),
.reset_out (tx_link_rst_n_sync)
);
altera_reset_controller (nº)
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES (« de décort »),
. SYNC_DEPTH (2)
) u_rx_link_rst_sync (
.reset_in0 (~(wire_link_rst_n &wire_rx_ready)),
.clk (link_clk),
.reset_out (rx_link_rst_n_sync)
);
----------------------------------------
2. Dans le module control_unit (control_unit.sv), modifiez la valeur de réinitialisation des frame_rst, des link_rst, des avs_rst et des xcvr_rst.
//
Registre de sortie pour la réinitialisation de l’émetteur-récepteur de base
//
toujours @ (clk ou negedge posege rst_n)
Commencer
si (~rst_n) commencent
frame_rst
link_rst
avs_rst
xcvr_rst
la fin d’autre commence
Il n’est pas prévu de résoudre ce problème.