Artikel-ID: 000082815 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 10.04.2018

Warum beobachte ich zeitweilige Fehler, wenn ich mehrere Resets des JESD204B IP RTL State Machine Control DesignBeispiels durchführt?

Umgebung

  • Intel® Quartus® II Anmeldungs-Edition
  • Intel® Quartus® Prime Standard Edition
  • JESD204B Intel® FPGA IP
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    Kritisches Problem

    Beschreibung

    Bei der Durchführung mehrerer Resets des JESD204B IP RTL State Machine Control DesignBeispiels, das in Intel® Arria® 10, Stratix® V, Arria® V oder Cyclone® V Geräten implementiert ist, können Sie beobachten, dass Interrupt-Pins (jesd204_tx_int und/oder jesd204_rx_int) aufgrund von Fehlern bestätigt werden, die aus dem tx_err (0x60) rx_err0 (0x60) gelesen werden können, und rx_err1 (0x64) Registern.

    Lösung

    Verwenden Sie für Intel Arria 10 Geräte stattdessen das Designbeispiel Nios® II Prozessors.

    Führen Sie für Stratix V-, Arria V- oder Cyclone V-Geräte die folgenden Änderungen am RTL durch:

    1. Ändern Sie die jesd204b_ed des Top-Level-Moduls in der Datei jesd204b_ed.sv.

    Definieren Sie aktive High-Reset-Leitungen:

    tx_link_rst_sync;

    kabelgebundene tx_frame_rst_sync;

    rx_link_rst_sync;

    rx_frame_rst_sync;

    kabelgebundene global_rst_sync;

     

    Ändern Sie die Polarität des Resets in den folgenden Drahtzuweisungen:

    Halten Sie den Kern im Reset-Modus gedrückt, bis der Transceiver bereit ist

    weisen Sie global_rst_n_sync = ~global_rst_sync zu; Zuweisung global_rst_n_sync hinzufügen

    zuweisen tx_avs_rst_n = avs_rst_n;

    assign rx_avs_rst_n = avs_rst_n;

    zuweisen tx_frame_rst_n = ~tx_frame_rst_sync;

    zuweisen rx_frame_rst_n = ~rx_frame_rst_sync;

    weisen Sie tx_link_rst_n = ~tx_link_rst_sync zu;

    assign rx_link_rst_n = ~rx_link_rst_sync;

     

    altera_reset_controller ist ein aktiver High-Reset-Synchronizer. Ändern Sie die Eingabe und Ausgabe der Reset-Synchronizer-Instanziierungen entsprechend, um die richtige Polarität widerzuspiegeln:

    //

    Reset-Synchronizer für globales Reset (mgmt clock domain)

    //

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("deassert"),

    . SYNC_DEPTH (2)

    ) u_avs_rst_sync (

    .reset_in0 (~global_rst_n),

    .clk (mgmt_clk),

    .reset_out (global_rst_sync)

    );

     

    Führen Sie bitweise UND auf wire_tx_ready &wire_rx_ready aus, bei denen es sich um Bussignale handelt.

    //

     

    Reset-Synchronizer für Transport Layer Reset (Frame-Clock-Domäne)

    //

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("deassert"),

    . SYNC_DEPTH (2)

    ) u_tx_frame_rst_sync (

    .reset_in0 (~(wire_frame_rst_n &wire_tx_ready))

    .clk (frame_clk),

    .reset_out (tx_frame_rst_n_sync)

    );

     

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("deassert"),

    . SYNC_DEPTH (2)

    ) u_rx_frame_rst_sync (

    .reset_in0 (~(wire_frame_rst_n &wire_rx_ready))

    .clk (frame_clk),

    .reset_out (rx_frame_rst_n_sync)

    );

     

    //

    Reset-Synchronizer für Basiskern-Reset (Link-Clock-Domain)

    //

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("deassert"),

    . SYNC_DEPTH (2)

    ) u_tx_link_rst_sync (

    .reset_in0 (~(wire_link_rst_n &wire_tx_ready))

    .clk (link_clk),

    .reset_out (tx_link_rst_n_sync)

    );

       

    altera_reset_controller #(

    . NUM_RESET_INPUTS (1),

    . OUTPUT_RESET_SYNC_EDGES ("deassert"),

    . SYNC_DEPTH (2)

    ) u_rx_link_rst_sync (

    .reset_in0 (~(wire_link_rst_n &wire_rx_ready))

    .clk (link_clk),

    .reset_out (rx_link_rst_n_sync)

    );

     

    ----------------------------------------

     

    2. Ändern Sie im Modul control_unit (control_unit.sv) den Reset-Wert für frame_rst, link_rst, avs_rst und xcvr_rst.

    //

    Ausgaberegister für Basiskern-Transceiver-Resets

    //

    always @ (posedge clk oder negedge rst_n)

    Beginnen

    wenn (~rst_n) beginnen

    frame_rst < = 1'b1;

    link_rst < = 1'b1;

    avs_rst < = 1'b1;

    xcvr_rst < = 1'b1;

    end else beginnt

     

    Für dieses Problem ist keine Lösung geplant.

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 7 Produkte

    Intel® Arria® 10 FPGAs und SoC FPGAs
    Stratix® V FPGAs
    Arria® V FPGAs und SoC FPGAs
    เอฟพีจีเอ Cyclone® V GX
    เอฟพีจีเอ Cyclone® V GT
    Cyclone® V SX SoC-FPGA
    Cyclone® V ST SoC-FPGA

    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.