收發器重新配置 \'reconfig_busy\'輸出埠可能會陷入停滯,重設後高度宣稱。 連接到受影響的重新配置控制器的收發器通道也可能陷入重設中。 \'reconfig_busy\'輸出埠即使在重設重新配置控制器後仍會卡住;只有重新程式設計裝置才能解決問題。
此症狀可能是由收發器重新配置控制器的內部重設結構所引起。 對驅動 M20K RAM 位址匯流排的邏輯進行非同步重設的掄塞會導致非同步邏輯傳播。 這可能導致 M20K 中的多個位址線同時遭到維護,這可能導致位單元之間的充電共用,破壞 M20K 的內容。
此損壞影響到 Stratix® V 和 Arria® V GZ 裝置收發器重新配置控制器,因為它包含用於 PMA 校準的Nios® II處理器,而處理器\的程式碼儲存在 M20K RAM 中。 如果在程式內Nios® II內發生損壞,這可能導致處理器被鎖定,導致reconfig_busy輸出埠被嚴重卡住。 只有重新程式設計裝置才能從這種情況中恢復,因為 M20K 內容僅在裝置程式設計期間載入。
此問題的解決方法將改變收發器重新配置控制器的內部重設控制器和重設結構,以使用同步重設,並在重設狀態期間先發制人地拆卸 M20K clock_enable埠。
修復程式將適用于未來版本的 Quartus® II 軟體。 可透過在 mySupport 提交服務請求,為較早版本的 Quartus II 軟體提供修補程式。 如果立即需要解決方案,則可使用下列說明手動套用修復程式。
有 9 個檔案需要新增或修改:
-
altera_reset_controller_early_ce_mod.v (新增)
-
altera_reset_synchronizer_early_ce_mod.v (新增)
-
與收發器重新配置控制器相關的 QIP 檔案(修改)
-
alt_xcvr_reconfig.sv (修改)
-
alt_xcvr_reconfig_soc.sv (修改)
-
alt_xcvr_reconfig_cpu.v (修改)
-
alt_xcvr_reconfig_cpu_ram.sv (修改)
-
sv_xrbasic_lif_csr.sv (修改)
-
sv_xcvr_reconfig_mif_avmm.sv (修改)
這 9 個檔案應位於產生收發器重新配置控制器的目錄。
下載altera_reset_controller_early_ce_mod.v 並將其放置在儲存收發器重新配置檔案的目錄中:
下載 altera_reset_synchronizer_early_ce_mod.v 並將其放置在收發器重新配置檔案保存的目錄中:
為了將這兩個檔案新增到您的設計中,請找到並修改與收發器重新配置控制器實例相關的 .qip 檔案,並在檔案中新增下列兩行:
set_global_assignment──LIBRARY_NAME───名稱 VERILOG_FILE[file join $:quartus(qip_path)「LIBRARY_PATH/altera_reset_controller_early_ce_mod.v」]
set_global_assignment─LIBRARY_NAME───名稱 VERILOG_FILE[file join $:quartus(qip_path)「LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v」]
在上述兩行中,修改LIBRARY_NAME和LIBRARY_PATH,以符合收發器重新配置控制器 .qip 檔案中的其他專案。
對於 alt_xcvr_reconfig.sv,請進行下列修改:
-
找到alt_xcvr_resync模組的即時化,並扭轉「d」和「重設」埠之間的連線。 修改後,即時應看起來像下列事項:
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)
);
對於 alt_xcvr_reconfig_soc.sv,請進行下列修改:
在模組頂部附近新增下列電線定義:
電線cpu_reset_req;
找到alt_xcvr_reconfig_cpu模組的即時,並新增下列埠:
.ram_ce(cpu_reset_req),
找到alt_xcvr_reconfig_cpu_ram模組的即時,並新增下列埠:
.ram_ce(cpu_reset_req),
對於 alt_xcvr_reconfig_cpu.v,請進行下列修改:
-
將下列埠新增至最高層級:
輸出線ram_ce,
-
在模組中加入下列代碼:
電線m20k_gate;
電線altera_ram_clock_enable;
指派altera_ram_clock_enable = ~ m20k_gate;
指派ram_ce = altera_ram_clock_enable;
-
尋找altera_reset_controller的瞬間,並將此變更為altera_reset_controller_early_ce_mod的即時化。 將m20k_gate埠加入此即時,並將其連接到m20k_gate訊號。 進行這些修改後,即時應看起來像下列事項:
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.重設
.clk (clk_clk),// clk.clk
.reset_out(reconfig_ctrl_reset_reset)、// reset_out.重設
.m20k_gate(m20k_gate),
.reset_in1 (1\'b0)、// (已終止)
.reset_in2 (1\'b0),// (已終止)
.reset_in3 (1\'b0),// (已終止)
.reset_in4 (1\'b0),// (已終止)
.reset_in5 (1\'b0),// (已終止)
.reset_in6 (1\'b0),// (已終止)
.reset_in7 (1\'b0),// (已終止)
.reset_in8 (1\'b0),// (已終止)
.reset_in9 (1\'b0),// (已終止)
.reset_in10 (1\'b0),// (已終止)
.reset_in11 (1\'b0),// (已終止)
.reset_in12 (1\'b0),// (已終止)
.reset_in13 (1\'b0),// (已終止)
.reset_in14 (1\'b0),// (已終止)
.reset_in15 (1\'b0) // (已終止)
);
對於 alt_xcvr_reconfig_cpu_ram.sv 檔案,請進行下列修改:
-
新增下列輸入埠:
輸入ram_ce,
-
尋找 altsyncram 即時化並修改時鐘 0 埠,將其連接到新的ram_ce輸入埠:
.clocken0 (ram_ce),
-
修改 defparam clock_enable_input/output_a/b 定義如下:
altsyncram_component.clock_enable_input_a = 「正常」,
altsyncram_component.clock_enable_input_b = 「正常」,
altsyncram_component.clock_enable_output_a = 「正常」,
altsyncram_component.clock_enable_output_b = 「正常」,
對於 sv_xrbasic_lif_csr.sv 檔案,請進行下列修改:
-
找到控制邏輯通道位址的循序永遠模組。 此始終模組可由上面的注釋「//邏輯通道註冊器」識別。 從敏感性清單中移除重設條件。 修改後,永遠模組的開頭應看起來像下列專案:
邏輯通道收款器
永遠 @(reconfig_clk) 開始
如果 (重設 = 1) 開始
...
-
找到控制原生重新配置位址收銀機的循序永遠模組。 此始終模組可透過上方的注釋「// 原生重新配置位址收銀台,可解釋為通道偏移位址或實體位址」來識別。 從敏感性清單中移除重設條件。 修改後,永遠模組的開頭應看起來像下列專案:
原生重新設定位址收銀機,可解釋為通道偏移位址或實體位址
永遠 @(reconfig_clk) 開始
如果 (重設 = 1) 開始
...
對於 sv_xcvr_reconfig_mif_avmm.sv 檔案,只有在收發器重新配置控制器 Megawi用 guid GUI 中啟用通道或 PLL 重新配置時,才需要此變更。 請進行下列修改:
-
找到上面有「// Avalon輸出和內部儲存」評論的循序永遠模組,並從敏感性清單中移除重設條件。 修改後,永遠模組的開頭應看起來像下列專案:
Avalon輸出與內部儲存
永遠 @(gigge clk)
開始
如果 (重設) 開始
...
這些變更完成後,您的設計必須重新完成。