文章 ID: 000085194 内容类型: 故障排除 上次审核日期: 2021 年 08 月 28 日

为什么收发器重新配置控制器的reconfig_busy输出在重置后会卡高?

环境

  • 英特尔® Quartus® II 订阅版
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    收发器重新配置 \'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 "LIBRARY_NAME"-name VERILOG_FILE [文件加入 $:quartus(qip_path)"LIBRARY_PATH/altera_reset_controller_early_ce_mod.v"]
    set_global_assignment -library "LIBRARY_NAME"-name VERILOG_FILE [文件加入 $: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 实例化并修改时钟端口将其连接到新的ram_ce输入端口:

    .clocken0 (ram_ce),

    • 修改 defparam clock_enable_input/output_a/b 定义,如下所示:

    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",

    对于 sv_xrbasic_lif_csr.sv 文件,作出以下修改:

    • 找到控制逻辑通道地址的顺序始终块。 该常用块可以通过上面评论"//逻辑通道寄存器"来识别。 从敏感性列表中移除重置条件。 修改后,始终模块的起端应如下所示:

    逻辑通道寄存器
    始终 @(reconfig_clk)开始
    如果 (重置 == 1) 开始
    ...

    • 找到控制原生重新配置地址寄存器的顺序始终块。 这个始终模块可以通过上面评论"///原生重新配置地址寄存器,可以解释为通道偏移地址,或物理地址"来识别。 从敏感性列表中移除重置条件。 修改后,始终模块的起端应如下所示:

    原生重新配置地址寄存器,可解释为通道偏移地址或物理地址
    始终 @(reconfig_clk) 开始
    如果 (重置 == 1) 开始
    ...

    对于 sv_xcvr_reconfig_mif_avmm.sv 文件,此更改仅在通道或 PLL 重新配置在收发器重新配置控制器 Megawividd GUI 中启用时才需要。 进行以下修改:

    • 找到上面有"// Avalon输出和内部存储"评论的顺序始终块,并从敏感性列表中删除重置条件。 修改后,始终模块的起端应如下所示:

    Avalon输出和内部存储
    始终 @(提供 clk)
    开始
    如果(重置)开始
    ...

    所有这些更改完成后,就需要重新编译您的设计。

    相关产品

    本文适用于 2 产品

    Arria® V GZ FPGA
    Stratix® V GX FPGA

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。