Problème critique
port_ok’état de l’erreur bit-0, la RSE d’erreur et d’état du port 0 (0x158) peut rester faible après la re-initialisation du lien. La réin initialisation de la liaison est effectuée soit par le déclenchement de l’PORT_DIS bit-23 dans le port 0 Control CSR (0x15C), soit lorsque le partenaire de liaison effectue une réinitialisation. Cela peut entraîner une erreur fatale lors d’un fonctionnement normal,
Ce problème se produit pour les raisons suivantes :
- Il est possible que le cœur du RapidIO soit hors de réinitialisation avant que l’émetteur-récepteur sorte de la réinitialisation. Cela entraîne le démarrage du fonctionnement du cœur de RapidIO alors que l’émetteur-récepteur est toujours en réinitialisation.
- Le processus de re-alignement du mot est limité à la voie 0 et se déclenche uniquement une fois pendant la réin initialisation de la liaison.
Ce problème affecte les variantes RapidIO I suivantes :
- Arria® V/Cyclone® V avec le mode x2.
- Arria V/Cyclone V à un débit de 22 000 Mh/s.
- Arria V avec le mode x4 au débit rial 3 125 M alors.
Pour s’assurer que l’émetteur-récepteur est hors de réinitialisation et prêt à lancer toutes les opérations avant le cœur de RapidIO, qualifiez la réinitialisation du cœur RapidIO avec les signaux d’état prêts pour l’émetteur-récepteur dans le module _riophy_reset:
TX_SIDE
toujours @(posedge tx_clk ou negedge reset_n)
Commencer
si (!reset_n) commencent
tx_ready_s0 <= 1'b0 ;
tx_ready_s1 <= 1'b0 ;
la fin d’autre commence
tx_ready_s0 <= tx_ready ;
tx_ready_s1 <= tx_ready_s0 ;
Fin
Fin
toujours @ (tx_clk posé ou reset_n negedge) commencent
si (!reset_n)commencez
txreset_n_p2 < = 1'b0 ;
txreset_n_p1 <= 1'b0 ;
txreset_n <= 1'b0 ;
la fin d’autre commence
si (!gxbpll_locked_tx_clk_d2 || !tx_ready_s1)commencent
txreset_n_p2 <= 1'b0 ;
txreset_n_p1 <= 1'b0 ;
txreset_n <= 1'b0 ;
la fin d’autre commence
txreset_n_p2 <= 1'b1 ;
txreset_n_p1 <= txreset_n_p2 ;
txreset_n <= txreset_n_p1 ;
Fin
Fin
Fin
RX_SIDE
toujours @(posedge rx_clk ou negedge reset_n)
Commencer
si (!reset_n) commencent
rx_ready_s0 <= 1'b0 ;
rx_ready_s1 <= 1'b0 ;
la fin d’autre commence
rx_ready_s0 <= rx_ready ;
rx_ready_s1 <= rx_ready_s0 ;
Fin
Fin
toujours @ (rx_clk ou negedge reset_n) démarrer
si (!reset_n)commencez
rxreset_n_p2 <= 1'b0 ;
rxreset_n_p1 <= 1'b0 ;
rxreset_n < = 1'b0 ;
la fin d’autre commence
si (!rx_ready_s1) commencent
rxreset_n_p2<=1'b0 ;
rxreset_n_p1<=1'b0 ;
rxreset_n<=1'b0 ;
la fin d’autre commence
rxreset_n_p2 <= 1'b1 ;
rxreset_n_p1 <= rxreset_n_p2 ;
rxreset_n <= rxreset_n_p1 ;
Fin
Fin
Fin
Pour déclencher le processus de réin alignage du mot manuellement, effectuez les étapes suivantes à l’aide de l’interface Avalon-MM phy_mgmt’émetteur-récepteur :
(1) Affirmez phy_mgmt_write=1'b1 pour spécifier le fonctionnement de l’écriture.
(2) Écrivez les données phy_mgmt_writedata=32'b0 dans l’adresse phy_mgmt_address=9'h80 à la cible de la voie 0.
(3) Écrivez les données phy_mgmt_writedata=32'b1 dans une adresse phy_mgmt_address=9'h85 pour faire valoir rx_enapatternalign qui déclenche le fonctionnement d’alignement de mots sur la voie 0.
(4) Écrivez les données phy_mgmt_writedata=32'b0 dans l’adresse phy_mgmt_address=9'h85 à de≥ rx_enapatternalign.
Répétez les étapes ci-dessus pour toutes les autres voies : voie 1 (0x80=32'b1), voie 2 (0x80=32'b2) et voie 3 (0x80=32'b3).