Problema critico
port_ok stato in bit-0, l'errore della porta 0 e il CSR di stato (0x158) possono rimanere a BASSO dopo la ri-inizializzazione del collegamento. La ri-inizializzazione del collegamento viene eseguita tramite l'attivazione di bit-23 PORT_DIS in Port 0 Control CSR (0x15C) o quando il partner di collegamento sta eseguendo il ripristino. Ciò potrebbe causare un errore fatale durante il normale funzionamento,
Questo problema si verifica a causa dei seguenti motivi:
- Il core RapidIO potrebbe non essere ripristinato prima che il ricetrasmettitore escono dal ripristino. Ciò fa sì che il core RapidIO inizi a funzionare mentre il ricetrasmettitore è ancora in fase di ripristino.
- Il processo di ri-allineamento delle parole è limitato alla corsia 0 e si attiverà solo una volta durante la ri-inizializzazione del collegamento.
Questo problema riguarda le seguenti varianti RapidIO I:
- Arria® V/Cyclone® V con modalità x2.
- Arria V/Cyclone V a velocità baud 5000 Mbaud.
- Arria V con modalità x4 a velocità di trasmissione 3125 Mbaud.
Per garantire che il ricetrasmettitore non sia ripristinato e sia pronto per avviare eventuali operazioni prima del core RapidIO, qualificare il ripristino del core RapidIO con i segnali di stato pronti per il ricetrasmettitore nel modulo _riophy_reset:
TX_SIDE
sempre @(posge tx_clk o negedge reset_n)
Iniziare
se (!reset_n) iniziano
tx_ready_s0 <= 1'b0;
tx_ready_s1 <= 1'b0;
fine altro iniziare
tx_ready_s0 <= tx_ready;
tx_ready_s1 <= tx_ready_s0;
Fine
Fine
sempre @ (posge tx_clk o negedge reset_n) iniziano
if(!reset_n)begin
txreset_n_p2 <= 1'b0;
txreset_n_p1 <= 1'b0;
txreset_n <= 1'b0;
fine altro iniziare
se (!gxbpll_locked_tx_clk_d2 || !tx_ready_s1) iniziare
txreset_n_p2 <= 1'b0;
txreset_n_p1 <= 1'b0;
txreset_n <= 1'b0;
fine altro iniziare
txreset_n_p2 <= 1'b1;
txreset_n_p1 <= txreset_n_p2;
txreset_n <= txreset_n_p1;
Fine
Fine
Fine
RX_SIDE
sempre @(posge rx_clk o negedge reset_n)
Iniziare
se (!reset_n) iniziano
rx_ready_s0 <= 1'b0;
rx_ready_s1 <= 1'b0;
fine altro iniziare
rx_ready_s0 <= rx_ready;
rx_ready_s1 <= rx_ready_s0;
Fine
Fine
sempre @ (posge rx_clk o negedge reset_n) iniziano
if(!reset_n)begin
rxreset_n_p2 <= 1'b0;
rxreset_n_p1 <= 1'b0;
rxreset_n <= 1'b0;
fine altro iniziare
se (!rx_ready_s1) iniziano
rxreset_n_p2<=1'b0;
rxreset_n_p1<=1'b0;
rxreset_n<=1'b0;
fine altro iniziare
rxreset_n_p2 <= 1'b1;
rxreset_n_p1 <= rxreset_n_p2;
rxreset_n <= rxreset_n_p1;
Fine
Fine
Fine
Per attivare manualmente il processo di ri-allineamento delle parole, eseguire i seguenti passaggi tramite l'interfaccia del ricetrasmettitore Avalon-MM phy_mgmt:
(1) Asserisce phy_mgmt_write=1'b1 per specificare l'operazione di scrittura.
(2) Scrivere i dati phy_mgmt_writedata=32'b0 nell'indirizzo phy_mgmt_address=9'h80 per la destinazione per la corsia 0.
(3) Scrivere i dati phy_mgmt_writedata=32'b1 nell'indirizzo phy_mgmt_address=9'h85 per affermare rx_enapatternalign che attiverà l'operazione di allineamento delle parole per la corsia 0.
(4) Scrivere i dati phy_mgmt_writedata=32'b0 nell'indirizzo phy_mgmt_address=9'h85 per svalutare rx_enapatternalign.
Ripetere i passaggi sopra per tutte le altre corsie: corsia 1 (0x80=32'b1), corsia 2 (0x80=32'b2) e corsia 3 (0x80=32'b3).