Kritisches Problem
port_ok-Status in Bit-0, Port 0 Error und Status CSR (0x158) können bei LOW bleiben, nachdem eine Link-Initialisierung auftritt. Die Link-Neuinitialisierung erfolgt entweder durch die Auslösung von Bit-23-PORT_DIS in Port 0 Control CSR (0x15C) oder wenn der Link-Partner einen Reset durchführt. Dies kann während des normalen Betriebs zu schwerwiegenden Fehlern führen.
Dieses Problem tritt aus folgenden Gründen auf:
- Der RapidIO-Kern kann aus dem Reset sein, bevor der Transceiver aus dem Reset herauskommt. Dies führt dazu, dass der RapidIO-Kern den Betrieb startet, während der Transceiver sich noch im Reset befindet.
- Das Wort "Neuausrichtung" ist auf Lane 0 beschränkt und wird nur einmal während der Link-Neuinitialisierung ausgelöst.
Dieses Problem betrifft die folgenden RapidIO I-Varianten:
- Arria® V/Cyclone® V mit x2-Modus.
- Arria V/Cyclone V mit einer Baud-Rate von 5000 Mbaud.
- Arria V mit x4-Modus mit Baud-Rate 3125 Mbaud.
Um sicherzustellen, dass der Transceiver nicht zurückgesetzt wird und bereit ist, alle Operationen vor dem RapidIO-Kern zu starten, qualifizieren Sie den RapidIO-Kern-Reset mit den sendebereiten Statussignalen im Modul _riophy_reset:
TX_SIDE
immer @(posedge tx_clk oder negedge reset_n)
Beginnen
wenn (!reset_n) beginnen
tx_ready_s0 < = 1'b0;
tx_ready_s1 < = 1'b0;
end else beginnt
tx_ready_s0 <= tx_ready;
tx_ready_s1 < = tx_ready_s0;
Ende
Ende
always @ (posedge tx_clk oder negedge reset_n) beginnen
wenn(!reset_n)beginnen
txreset_n_p2 < = 1'b0;
txreset_n_p1 < = 1'b0;
txreset_n < = 1'b0;
end else beginnt
wenn (!gxbpll_locked_tx_clk_d2 || !tx_ready_s1) beginnen
txreset_n_p2 < = 1'b0;
txreset_n_p1 < = 1'b0;
txreset_n < = 1'b0;
end else beginnt
txreset_n_p2 < = 1'b1;
txreset_n_p1 <= txreset_n_p2;
txreset_n < = txreset_n_p1;
Ende
Ende
Ende
RX_SIDE
immer @(posedge rx_clk oder negedge reset_n)
Beginnen
wenn (!reset_n) beginnen
rx_ready_s0 < = 1'b0;
rx_ready_s1 < = 1'b0;
end else beginnt
rx_ready_s0 < = rx_ready;
rx_ready_s1 <= rx_ready_s0;
Ende
Ende
immer @ (posedge rx_clk oder negedge reset_n) beginnen
wenn(!reset_n)beginnen
rxreset_n_p2 < = 1'b0;
rxreset_n_p1 < = 1'b0;
rxreset_n < = 1'b0;
end else beginnt
wenn (!rx_ready_s1) beginnen
rxreset_n_p2<= 1'b0;
rxreset_n_p1<= 1'b0;
rxreset_n<= 1'b0;
end else beginnt
rxreset_n_p2 < = 1'b1;
rxreset_n_p1 < = rxreset_n_p2;
rxreset_n < = rxreset_n_p1;
Ende
Ende
Ende
Um den Vorgang der Word-Neuausrichtung manuell auszulösen, führen Sie die folgenden Schritte über die Avalon-MM-phy_mgmt-Transceiver-Schnittstelle durch:
(1) Behaupten Sie phy_mgmt_write=1'b1, um den Schreibvorgang anzugeben.
(2) Schreiben Sie Daten phy_mgmt_writedata= 32'b0 in Adresse phy_mgmt_address = 9'h80, um das Ziel für Lane 0 zu erreichen.
(3) Schreiben Sie Daten phy_mgmt_writedata=32'b1 in Adresse phy_mgmt_address=9'h85, um rx_enapatternalign zu behaupten, der die Word-Ausrichtung für Lane 0 auslösen wird.
(4) Schreiben Sie Daten phy_mgmt_writedata= 32'b0 in die Adresse phy_mgmt_address=9'h85, um rx_enapatternalign zu deasserieren.
Wiederholen Sie die oben stehenden Schritte für alle anderen Lanes: Lane 1 (0x80 = 32'b1), Lane 2 (0x80 = 32'b2) und Lane 3 (0x80 = 32'b3).