Quartus® Prime专业版用户指南: 设计编译

ID 683236
日期 4/01/2024
Public
文档目录

1.7.2.2. 保留信号以进行监控和调试

Compiler会在综合和布局布线期间优化RTL信号。除非被保留,否则RTL中的信号名称在信号优化后可能不存在于布局布线后的网表中。例如,编译过程可以合并重复的寄存器,或者向从节点扇出的网络名称添加波浪符号 (~)。

保留信号以便在综合和布局布线后进行调试,该操作涉及以下步骤:
  • 标记信号以便保留。

    可以在您的RTL代码中或通过QSF约束命令直接标记信号。

  • 对整个工程或对包含被标记信号的实例启用信号保留。

    您可以通过 Quartus® Prime GUI或QSF约束命令来启用工程范畴的信号保留。要保留实例中的信号,请使用QSF约束命令。

通过分离标记信号以便于保留和启用信号保留,您可以在编写代码时标记感兴趣的信号,并且直到启用信号保留时才会对优化产生影响。

启用信号保留后,标记为preserve_for_debug的节点继承以下属性:
表 12.  标记为preserve_for_debug的节点所继承的属性
属性 结果
preserve 防止 Quartus® Prime通过优化或重新定时寄存器
keep 防止 Quartus® Prime 在组合逻辑优化过程中最小化或移除信号网络
noprune 防止 Quartus® Prime删除或优化扇出空闲寄存器
dont_merge 防止 Quartus® Prime将寄存器与复制寄存器合并
dont_replicate 防止 Quartus® Prime复制寄存器
重要: 实例级信号保留设置始终覆盖共工程级设置。此外,RTL中的信号保留设置始终覆盖QSF设置。
综合设计后,可以找到并检查您的保留信号:
  • Preserve for Debug Assignments报告显示所有标记为保留的节点的保留状态和名称。
  • Node Finder中的preserved for debug过滤器可帮助您快速找到保留的节点。

保留信号以进行监控和调试,需要遵循的总体流程如下:

  1. 采用下列方式之一标记要保留的信号:
    • 直接在您的RTL代码中以preserve_for_debug属性标记信号:
      表 13.  在RTL中以 preserve_for_debug Attribute标记信号的实例
      Verilog实例 VHDL实例
      (* preserve_for_debug *) wire [3:0] counter_wire;
      (* preserve_for_debug *) reg [3:0] counter_reg;
      
      (* preserve_for_debug *) wire [15:0] decode_out_top;
      (* preserve_for_debug *) reg [15:0] decode_out_reg_top;
      attribute preserve_for_debug : boolean;attribute preserve_for_debug of counter_wire : signal is true;
      attribute preserve_for_debug of counter_reg : signal is true;
      attribute preserve_for_debug of decode_out : signal is true;
      attribute preserve_for_debug of decode_out_reg : signal is true;
      In the Quartus® Prime GUI, you can also use the Insert Template (Edit > Insert Template) dialog box to add the preserve_for_debug attribute.
    • 使用PRESERVE_FOR_DEBUG约束对信号进行标记,具体方法如下:
      • 对特定节点指定PRESERVE_FOR_DEBUG约束,这些节点从命令行或QSF文件中来:
        set_instance_assignment -name PRESERVE_FOR_DEBUG ON -to <node hpath>
      • 在Assignment Editor中,将Preserve signal for debug约束指定To 任何感兴趣的节点。选择On作为分配值。
      重要: 某些罕见情况下,当您使用PRESERVE_FOR_DEBUG约束时,在信号可以被保留之前,可能逻辑已经内优化。如果您遇到此问题,请在使用HDL代码中的preserve_for_debug属性取而代之。
    • 在Platform Designer中标记要保留的系统模块、接口或端口。

      有关详细信息,请参阅 Quartus® Prime专业版 User Guide: Platform Designer中的“Preserving a System Module, Interface, or Port for Debugging”

  2. 启用保留功能以对整个工程或特定实例进行调试。
    • 要启用工程相关的保留和报告,请执行以下步骤之一:
      • 从Signal Tap Logic Analyzer设置启用工程的信号保留:

        选择Assignments > Settings > Signal Tap Logic Analyzer > Enable preserve for debug assignments

      • 指定全局PRESERVE_FOR_DEBUG_ENABLE约束,从命令行或QSF文件中:
        set_global_assignment -name PRESERVE_FOR_DEBUG_ENABLE ON
      • 在Assignment Editor中指定全局Enable preserve for debug assignments约束。选择On作为约束值。
      提示: 当启用工程相关的信号保留和报告时,请使用实例级设置将实例从工程范畴的信号保留和报告中排除。
    • 仅对特定实例启用(或禁用)保留和报告:
      • 将实例PRESERVE_FOR_DEBUG_ENABLE约束指定为ON(或者OFF),从命令行或在您的QSF文件中:
        set_instance_assignment -name PRESERVE_FOR_DEBUG_ENABLE ON -to <instance hpath>
      • 在Assignment Editor中将Enable preserve for debug assignments约束指定To任何感兴趣的实例。选择On(或者Off)为约束值。
      • 在您的RTL中将实例的PRESERVE_FOR_DEBUG_ENABLE属性指定为ON(或OFF)。
        表 14.  在RTL中设置PRESERVE_FOR_DEBUG_ENABLE属性的实例
        Verilog实例 VHDL实例
        ...
        (* altera_attribute = "-name PRESERVE_FOR_DEBUG_ENABLE ON" *)
        decoder decoder_inst(
        ...
        ...
        attribute altera_attribute : string;   
        attribute altera_attribute of my_decoder_inst : LABEL is "-name PRESERVE_FOR_DEBUG_ENABLE ON";
        
        ...
        begin
        ...
        
        my_decoder_inst :  decoder
  3. 综合您的设计

    在Compilation Dashboard上,单击Analysis & Synthesis。综合完成后,将生成Compilation Report。您现在还可以使用Node Finder中的 preserved for debug过滤器帮助您快速找到保留的节点。

  4. 查看信号保留的结果。
    打开Preserve for Debug Assignments,具体位于Synthesis > Partition <name> > Preserve for Debug报告文件夹。
    图 39. 保留以用于调试约束报告
  5. 通过选择Processing > Start Compilation来运行完整的编译从而执行设计的布局和布线以及Signal Tap实例。
    您保留的调试信号将通过Fitter持续保存到最终的编译数据库中。

运行完整编译后,您可以使用以下任意一种 Quartus® Prime调试工具调试您的设计:

切记: 调试设计后,您可能需要禁用信号保留(全局和实例级)并运行完整编译以优化保留的信号。
表 15.  调试信号保留约束
约束 描述 实例
preserve_for_debug

(Assignments Editor中的Preserve signal for debug)

当启用“保留以进行调试”时,标记在编译期间需要保留的信号,以用于综合后或适配后调试。 set_instance_assignment -name PRESERVE_FOR_DEBUG ON -to <node hpath>
preserve_for_debug_enable

(Assignments Editor中的Enable preserve for debug assignments)

在工程或实例级启用“保留以进行调试”。

启用后,Compiler会报告编译后Preserve for Debug Assignments报告中信号保留的结果。

编译之后,Compiler报告Preserve for Debug Assignment中的这些节点。
set_global_assignment -name PRESERVE_FOR_DEBUG_ENABLE ON

set_instance_assignment -name PRESERVE_FOR_DEBUG_ENABLE ON -to <instance hpath>