インテル® Quartus® Primeプロ・エディションのユーザーガイド: デザインのコンパイル

ID 683236
日付 6/26/2023
Public
ドキュメント目次

1.4.1.2. 監視とデバッグに向けた信号の保持

コンパイラーは、合成および配置配線時に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 属性を使用しての信号のマーク例
      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;
      また、 インテル® Quartus® Prime GUIで Insert Template (Edit > Insert Template) ダイアログボックスを使用し、preserve_for_debug 属性を追加することもできます。
    • 次のいずれかの方法により、PRESERVE_FOR_DEBUG 割り当てを使用して信号をマークする
      • コマンドラインから、もしくはQSFファイルで、PRESERVE_FOR_DEBUG 割り当てを特定のノードに指定する。
        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 属性を使用します。
    • 保持するシステムモジュール、インターフェイス、またはポートをプラットフォーム・デザイナーでマークする

      詳細は、Intel® Quartus® Prime Pro Edition 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
      • グローバル Enable preserve for debug assignments 割り当てをAssignment Editorで指定する。割り当て値には On を選択します。
      ヒント: プロジェクト全体の信号保持とレポート作成を有効にしたら、インスタンス・レベルの設定を使用して、プロジェクト全体の信号保持とレポート作成からインスタンスを除外します。
    • 信号保持とレポート作成の有効化 (または無効化) を特定のインスタンスのみを対象として行うには、次の手順を実行します。
      • コマンドラインから、もしくはQSFファイルで、インスタンスの PRESERVE_FOR_DEBUG_ENABLE 割り当てを ON (または OFF) として指定する
        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 をクリックします。合成が完了すると、コンパイルレポートが生成されます。Node Finderで preserved for debug を使用し、保持されたノードをすばやく見つけることもできます。

  4. 信号保持の結果を表示します。
    Synthesis > Partition <name> > Preserve for Debug レポートフォルダーで、Preserve for Debug Assignmentsレポートを開きます。
    図 48. Preserve for Debug Assignmentsレポート
  5. フルコンパイルを実行し、デザインおよびSignal Tapインスタンスの配置配線を行います。それには、Processing > Start Compilation を選択します。
    保持したデバッグ信号は、フィッターを介して最終的なコンパイル・データベースに残されます。

フルコンパイルを実行したら、任意の インテル® Quartus® Primeデバッグツールを使用してデザインをデバッグすることができます。

要確認: デザインのデバッグ後に、信号の保持を (グローバルおよびインスタンス・レベルの両方で) 無効にし、フルコンパイルを実行すると、保持した信号を最適化することができます。
表 15.  デバッグ信号保持割り当て
割り当て 詳細
preserve_for_debug

(Assignment Editorの Preserve signal for debug)

preserve_for_debug が有効になっている場合は、合成後またはフィット後のデバッグに向けてコンパイル時に信号を保持するようにマークします。 set_instance_assignment -name PRESERVE_FOR_DEBUG ON -to <node hpath>
preserve_for_debug_enable

(Assignment Editorの Enable preserve for debug assignments)

preserve_for_debug をプロジェクト・レベルまたはインスタンス・レベルで有効にします。

有効になっている場合、コンパイラーは、コンパイル後に信号保持の結果をPreserve for Debug Assignmentsレポートで報告します。

コンパイラーは、コンパイル後にこれらのノードをPreserve for Debug Assignmentsレポートで報告します。
set_global_assignment -name PRESERVE_FOR_DEBUG_ENABLE ON

set_instance_assignment -name PRESERVE_FOR_DEBUG_ENABLE ON -to <instance hpath>