Problem krytyczny
status port_ok w bit-0, błąd portu 0 i csr stanu (0x158) może pozostać na niskim poziomie po ponownej inicjalizacji połączenia. Ponowna inicjalizacja połączenia odbywa się poprzez uruchomienie bit-23 PORT_DIS w CSR sterowania Port 0 (0x15C) lub gdy partner łącza wykonuje resetowanie. Może to spowodować krytyczny błąd podczas normalnej pracy,
Ten problem występuje z następujących powodów:
- Rdzeń RapidIO może się zresetować przed resetowaniem urządzenia nadawczo-odbiorczego. Powoduje to, że rdzeń RapidIO może rozpocząć działanie, gdy urządzenie nadawczo-odbiorcze jest nadal resetowane.
- Proces ponownego wyrównania słowa jest ograniczony do linii 0 i uruchomi się tylko raz podczas ponownego inicjalizacji połączenia.
Ten problem dotyczy następujących wariantów RapidIO I:
- Arria® V/Cyclone® V z trybem x2.
- Arria V/Cyclone V przy prędkości transmisji 5000 Mb/s.
- Arria V z trybem x4 z prędkością transmisji 3125 Mb/s.
Aby urządzenie nadawczo-odbiorcze nie było resetowane i gotowe do rozpoczęcia wszelkich operacji przed rdzeniem RapidIO, zakwalifikuj resetowanie rdzenia RapidIO za pomocą sygnałów stanu nadajnika-odbiornika w module _riophy_reset:
TX_SIDE
always @(posedge tx_clk lub reset_n)
Rozpocząć
jeśli (!reset_n) rozpocznie się
tx_ready_s0 <= 1'b0;
tx_ready_s1 <= 1'b0;
koniec jeszcze się zaczyna
tx_ready_s0 < = tx_ready;
tx_ready_s1 < = tx_ready_s0;
Końcu
Końcu
zawsze @ (pozować tx_clk lub reset_n)
jeśli(!reset_n)rozpocznij
txreset_n_p2 <= 1'b0;
txreset_n_p1 <= 1'b0;
txreset_n <= 1'b0;
koniec jeszcze się zaczyna
jeśli (!gxbpll_locked_tx_clk_d2 || !tx_ready_s1)
txreset_n_p2 <= 1'b0;
txreset_n_p1 <= 1'b0;
txreset_n <= 1'b0;
koniec jeszcze się zaczyna
txreset_n_p2 <= 1'b1;
txreset_n_p1 < = txreset_n_p2;
txreset_n < = txreset_n_p1;
Końcu
Końcu
Końcu
RX_SIDE
always @(posedge rx_clk lub reset_n)
Rozpocząć
jeśli (!reset_n) rozpocznie się
rx_ready_s0 <= 1'b0;
rx_ready_s1 <= 1'b0;
koniec jeszcze się zaczyna
rx_ready_s0 < = rx_ready;
rx_ready_s1 < = rx_ready_s0;
Końcu
Końcu
zawsze @ (pozować rx_clk lub reset_n)
jeśli(!reset_n)rozpocznij
rxreset_n_p2 <= 1'b0;
rxreset_n_p1 <= 1'b0;
rxreset_n <= 1'b0;
koniec jeszcze się zaczyna
jeśli (!rx_ready_s1) rozpocznie się
rxreset_n_p2<=1'b0;
rxreset_n_p1<=1'b0;
rxreset_n<=1'b0;
koniec jeszcze się zaczyna
rxreset_n_p2 <= 1'b1;
rxreset_n_p1 < = rxreset_n_p2;
rxreset_n < = rxreset_n_p1;
Końcu
Końcu
Końcu
Aby ręcznie uruchomić proces ponownego wyrównania wyrazu, wykonaj następujące kroki za pomocą interfejsu nadajnika-odbiornika Avalon-MM phy_mgmt:
(1) Zapewnienie phy_mgmt_write=1'b1 w celu określenia operacji zapisu.
(2) Zapis danych phy_mgmt_writedata=32'b0 na adres phy_mgmt_address=9'h80 do celu dla linii 0.
(3) Zapis danych phy_mgmt_writedata=32'b1 na adres phy_mgmt_address=9'h85, aby potwierdzić rx_enapatternalign, co uruchomi operację wyrównania słowa dla linii 0.
(4) Zapis danych phy_mgmt_writedata=32'b0 na adres phy_mgmt_address=9'h85, aby odprowadzić rx_enapatternalign.
Powtórz powyższe kroki dla wszystkich innych linii: pasm 1 (0x80 = 32'b1), linii 2 (0x80 = 32'b2) i linii 3 (0x80 = 32'b3).