Artikel-ID: 000076355 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 24.05.2017

Warum könnte RapidIO I port_ok Statussignal nach der Link-Neuinitialisierung nicht geltend machen?

Umgebung

  • Intel® Quartus® Prime Pro Edition
  • RapidIO (IDLE1 bis zu 5,0 Gbaud) Intel® FPGA IP
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    Kritisches Problem

    Beschreibung

    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.
    Lösung

    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).

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 2 Produkte

    Arria® V FPGAs und SoC FPGAs
    Cyclone® V FPGAs und SoC FPGAs

    Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.