Der Transceiver-Neukonfigurations-\'reconfig_busy\' Ausgabeport kann stecken bleiben und nach einem Reset hoch bestätigt werden. Die mit dem betroffenen Neukonfigurationscontroller verbundenen Transceiver-Kanäle können auch beim Reset feststecken. Der Ausgabeport \'reconfig_busy\' bleibt auch nach dem Zurücksetzen des Neukonfigurationscontrollers stecken; nur die Neuprogrammierung des Geräts kann das Problem beheben.
Dieses Problem kann durch die interne Reset-Struktur des Transceiver-Rekonfigurationscontrollers verursacht werden. Ein Reset der Logik, die den Adressbus eines M20K-RAM antreibt, kann dazu führen, dass die Logik nicht mehr ausgeführt wird. Dies kann dazu führen, dass mehrere Adresszeilen im M20K gleichzeitig bestätigt werden, was zur Aufladungsfreigabe zwischen Bitzellen führen kann und den Inhalt des M20K beschädigt.
Diese Beschädigung betrifft den Stratix® V und Arria® V GZ Geräte Transceiver-Neukonfigurationscontroller, da er einen Nios® II Prozessor enthält, der für die PMA-Kalibrierung verwendet wird, und der Programmcode des Prozessors im M20K-RAM gespeichert ist. Wenn die Beschädigung im Nios® II Programmspeicher auftritt, kann dies dazu führen, dass der Prozessor gesperrt wird, was dazu führt, dass der reconfig_busy Ausgabeport hoch bestätigt wird. Eine Wiederherstellung dieser Situation ist nur durch eine Neuprogrammierung des Geräts möglich, da der Inhalt von M20K nur während der Geräteprogrammierung geladen wird.
Die Lösung für dieses Problem ändert die interne Reset-Controller- und Reset-Struktur des Transceiver-Rekonfigurationscontrollers, um synchrone Resets zu verwenden, sowie die vorkonfigurierte Demontage des M20K-clock_enable-Ports während eines Reset-Zustands.
Das Update wird in einer zukünftigen Version der Quartus® II Software verfügbar sein. Ein Patch kann für frühere Versionen der Quartus II Software bereitgestellt werden, indem Sie eine Serviceanfrage in mySupport einreichen. Wenn eine Lösung sofort erforderlich ist, kann die Lösung mit den folgenden Anweisungen manuell angewendet werden.
Es gibt 9 Dateien, die hinzugefügt oder geändert werden müssen:
-
altera_reset_controller_early_ce_mod.v (hinzufügen)
-
altera_reset_synchronizer_early_ce_mod.v (hinzufügen)
-
QIP-Datei im Zusammenhang mit dem Transceiver-Rekonfigurationscontroller (ändern)
-
alt_xcvr_reconfig.sv (ändern)
-
alt_xcvr_reconfig_soc.sv (ändern)
-
alt_xcvr_reconfig_cpu.v (ändern)
-
alt_xcvr_reconfig_cpu_ram.sv (ändern)
-
sv_xrbasic_lif_csr.sv (ändern)
-
sv_xcvr_reconfig_mif_avmm.sv (ändern)
Diese 9 Dateien sollten sich im Verzeichnis befinden, in dem der Transceiver-Rekonfigurationscontroller generiert wurde.
Laden Sie altera_reset_controller_early_ce_mod.v herunter und legen Sie sie in das Verzeichnis, in dem die Transceiver-Neukonfigurationsdateien aufbewahrt werden:
Herunterladen altera_reset_synchronizer_early_ce_mod.v und platzieren Sie sie in dem Verzeichnis, in dem die Transceiver-Neukonfigurationsdateien aufbewahrt werden:
Um diese beiden Dateien zu Ihrem Design hinzuzufügen, suchen und ändern Sie die .qip-Datei, die mit der Transceiver-Neukonfigurations-Controller-Instanz verbunden ist, und fügen Sie der Datei die folgenden zwei Zeilen hinzu:
set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [Datei join $::quartus(qip_path) "LIBRARY_PATH/altera_reset_controller_early_ce_mod.v"]
set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [Datei join $::quartus(qip_path) "LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v"]
Ändern Sie in den oben genannten zwei Zeilen LIBRARY_NAME und LIBRARY_PATH, um die anderen Einträge in der .qip-Datei des Transceiver Reconfiguration Controller anzupassen.
Für alt_xcvr_reconfig.sv müssen Sie die folgenden Änderungen vornehmen:
-
Suchen Sie die alt_xcvr_resync Modulinstanziierung und kehren Sie die Verbindungen zwischen den "d"- und "Reset"-Ports zurück. Nach der Änderung sollte die Instanziierung wie folgt aussehen:
alt_xcvr_resync #(
. INIT_VALUE (1)
) inst_reconfig_reset_sync (
.clk (mgmt_clk_clk),
.d (mgmt_rst_reset ),
.reset (1\'b0),
.q (r_mgmt_rst_reset)
);
Für alt_xcvr_reconfig_soc.sv müssen Sie die folgenden Änderungen vornehmen:
Fügen Sie oben auf dem Modul die folgende Kabeldefinition hinzu:
kabelgebundene cpu_reset_req;
Suchen Sie die Instanziierung des alt_xcvr_reconfig_cpu Moduls und fügen Sie den folgenden Port hinzu:
.ram_ce (cpu_reset_req),
Suchen Sie die Instanziierung des alt_xcvr_reconfig_cpu_ram Moduls und fügen Sie den folgenden Port hinzu:
.ram_ce (cpu_reset_req),
Für alt_xcvr_reconfig_cpu.v müssen Sie die folgenden Änderungen vornehmen:
-
Fügen Sie den folgenden Port zur obersten Ebene hinzu:
ram_ce des Ausgangskabels,
-
Fügen Sie dem Modul den folgenden Code hinzu:
kabelgebundene m20k_gate;
kabelgebundene altera_ram_clock_enable;
assign altera_ram_clock_enable = ~ m20k_gate;
Zuweisen ram_ce = altera_ram_clock_enable;
-
Finden Sie die Instanziierung von altera_reset_controller und ändern Sie diese in eine Instanziierung von altera_reset_controller_early_ce_mod. Fügen Sie dieser Instanziierung den m20k_gate Port hinzu und verbinden Sie ihn mit dem m20k_gate Signal. Nach diesen Änderungen sollte die Instanziierung wie folgt aussehen:
altera_reset_controller_early_ce_mod #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) rst_controller (
.reset_in0 (~reset_reset_n),reset_in0.reset
.clk (clk_clk),
.reset_out (reconfig_ctrl_reset_reset),reset_out.reset
.m20k_gate (m20k_gate),
.reset_in1 (1\'b0), 2 (beendet)
.reset_in2 (1\'b0), 2 (beendet)
.reset_in3 (1\'b0), 2 (beendet)
.reset_in4 (1\'b0), 2 (beendet)
.reset_in5 (1\'b0), 2 (beendet)
.reset_in6 (1\'b0), 2 (beendet)
.reset_in7 (1\'b0), 2 (beendet)
.reset_in8 (1\'b0), 2 (beendet)
.reset_in9 (1\'b0), 2 (beendet)
.reset_in10 (1\'b0), 2 (beendet)
.reset_in11 (1\'b0), 2 (beendet)
.reset_in12 (1\'b0), 2 (beendet)
.reset_in13 (1\'b0), 2 (beendet)
.reset_in14 (1\'b0), 2 (beendet)
.reset_in15 (1\'b0) 2 (beendet)
);
Für die datei alt_xcvr_reconfig_cpu_ram.sv müssen die folgenden Änderungen vorgenommen werden:
-
Fügen Sie den folgenden Eingabeport hinzu:
Eingabe-ram_ce,
-
Suchen Sie nach der Altsyncram-Instanziierung und ändern Sie den clocken0-Port, um ihn mit dem neuen ram_ce Eingabeport zu verbinden:
.clocken0 (ram_ce),
-
Ändern Sie die Defparam-clock_enable_input/output_a/b-Definitionen wie folgt:
altsyncram_component.clock_enable_input_a = "NORMAL",
altsyncram_component.clock_enable_input_b = "NORMAL",
altsyncram_component.clock_enable_output_a = "NORMAL",
altsyncram_component.clock_enable_output_b = "NORMAL",
Machen Sie für die datei sv_xrbasic_lif_csr.sv die folgenden Änderungen:
-
Suchen Sie den sequentiellen Always-Block, der die logische Kanaladresse steuert. Dieser Always-Block kann durch den Kommentar "/ logisches Kanalregister" darüber identifiziert werden. Entfernen Sie die Reset-Bedingung aus der Empfindlichkeitsliste. Nach der Änderung sollte der Start des Always-Blocks wie folgt aussehen:
Logisches Kanalregister
immer @(posedge reconfig_clk) beginnen
wenn (reset == 1) beginnen
...
-
Suchen Sie den sequentiellen Always-Block, der das native Neukonfigurations-Adressregister steuert. Dieser Always-Block kann durch den Kommentar "nativ neukonfiguriertes Adressregister, kann als Kanal-Offset-Adresse oder physische Adresse" darüber interpretiert werden. Entfernen Sie die Reset-Bedingung aus der Empfindlichkeitsliste. Nach der Änderung sollte der Start des Always-Blocks wie folgt aussehen:
natives Reconfig-Adressregister, kann als Channel-Offset-Adresse oder physische Adresse interpretiert werden
immer @(posedge reconfig_clk) beginnen
wenn (reset == 1) beginnen
...
Für die sv_xcvr_reconfig_mif_avmm.sv-Datei ist diese Änderung nur erforderlich, wenn die Kanal- oder PLL-Neukonfiguration in der Transceiver-Neukonfigurationscontroller-Megawifiled-GUI aktiviert ist. Machen Sie die folgende Änderung:
-
Suchen Sie den sequentiellen Always-Block, der den Kommentar "Avalon Ausgabe und internen Datenspeicher" darüber hat, und entfernen Sie die Reset-Bedingung aus der Empfindlichkeitsliste. Nach der Änderung sollte der Start des Always-Blocks wie folgt aussehen:
Avalon Ausgabe und internen Datenspeicher
immer @(posedge clk)
Beginnen
wenn (Reset) beginnen
...
Sobald alle diese Änderungen vorgenommen wurden, muss Ihr Design neu kompiliert werden.