Quartus® Prime プロ・エディションのユーザーガイド: パーシャル・リコンフィグレーション

ID 683834
日付 10/23/2024
Public
ドキュメント目次

1.7.2. PRデザインにおけるタイミング・クロージャーのベストプラクティス

PR領域にパーティション境界ポートを使用すると、コンパイラーがパーティション境界を越えてロジックを最適化できないため、タイミング・クロージャーがより困難になります。また、Logic Lock領域を使用すると配置配線における柔軟性が制限される可能性があります。PR領域の境界ポートはすべて登録する必要があります。これらの手順を実行しても、タイミング・クリティカルな事象が発生する場合があります。

PR領域の各ペルソナは、使用するビットや入出力バスが異なる可能性があります。そのため、特定のペルソナでファンアウトがないレジスターや、定数によって駆動されるレジスターを保持することが重要です。ペルソナのコンパイル時に、コンパイラーがそのようなレジスターを最適化しないようにする必要があります。

ベースコンパイルでバスの一部のビットが使用されず、コンパイラーがそれらのビットに対応するレジスターを削除すると、ロジックのタイミングが合わなくなり、望ましくない配置と配線になる可能性があります。これらの未登録のパスを他のペルソナ ロジックで使用すると、それらのパスのタイミングを満たすのが困難となります。ベースコンパイルで未使用のポートレジスターを保持することで、ベースコンパイルでパスのタイミングが調整され、ペルソナコンパイルでのタイミング・クロージャーが容易になります。

PR領域で効率的にレジスターを保持するには、次のガイドラインに従ってください。

  • PR領域内のレジスターのみ保持が必要です。
  • PRベースコンパイルのみレジスターの保持が必要です。
  • ペルソナコンパイルでは、コンパイラーはファンアウトがなく、定数によって駆動されるレジスターを安全に削除できます。
  • 階層PRコンパイルの場合、ベースコンパイルでのみレジスターの保持が必要となります。
  • 入力レジスターに向けてファンアウトのないノードを保持します。
  • 出力レジスターに向けて定数によって駆動されるノードを保持します。
  • PRベースコンパイルに対してのみ属性を割り当てます。ペルソナコンパイルの属性を削除します (パラメーターまたはジェネリック経由のもの)。
  • トップレベルのパラメーターを .qsfで設定します。これは下位の階層に渡されます。

レジスターを保持するには、次のいずれかの合成属性を使用します。

  • ファンアウトがなく、定数によって駆動されるレジスターを保持するには、noprune属性を使用します。 nopruneは、すべての物理最適化もディスエーブルします。
    Verilog: (* noprune *) reg reg1;
    VHDL: signal reg1: std_logic; 
          attribute noprune: boolean; 
          attribute noprune of reg1: signal is true;
  • ファンアウトがあるビットでリタイミングを可能にしつつ、ファンアウトがないレジスターを保持するには、 PRESERVE_FANOUT_FREE_NODE ONaltera_attribute として割り当てます。
    Verilog: (* altera_attribute = "-name PRESERVE_FANOUT_FREE_NODE ON" *) \
         reg reg1;
    VHDL: signal reg1: stdlogic; 
          attribute altera_attribute : string; 
          attribute altera_attribute of reg1: signal is "-name \
         PRESERVE_FANOUT_FREE_NODE ON";
  • または、 .qsf内で dummy 属性を PRESERVE_FANOUT_FREE_NODE ON アサインメントと使用します。
    Verilog: (* dummy *) reg reg1;
    VHDL: signal reg1: std_logic; 
          attribute dummy: boolean; 
          attribute dummy of reg1: signal is true;

    .qsf アサインメント

    set_instance_assignment -name PRESERVE_FANOUT_FREE_NODE ON \
        -to <hierarchical path to reg1>
  • ドライバーがあるビッドでリタイミングを可能にしつつ、定数によって駆動されるレジスターを保持するには、 preserve_syn_only属性を使用します。
    Verilog: (* preserve_syn_only *) reg reg1;
    VHDL: signal reg1: std_logic; 
          attribute preserve_syn_only : boolean; 
          attribute preserve_syn_only of reg1: signal is true;

次の例は、System VerilogとVHDLのパラメーターを使用してPRベースコンパイルで属性を割り当てる方法を示しています。この例には、 base_compile と呼ばれるパラメーターが含まれ、これはPRベースコンパイルに対してのみ true に設定されています。

System Verilog:
localparam ON_OFF_STRING = base_compile ? "ON": "OFF";
(* altera_attribute = {"-name PRESERVE_FANOUT_FREE_NODE ", ON_OFF_STRING} *)
logic [WIDTH-1:0] pr_input_register;
(* altera_attribute = {"-name PRESERVE_REGISTER_SYN_ONLY ", ON_OFF_STRING} *)
logic [WIDTH-1:0] pr_output_regsiter;

VHDL:
attribute altera_attribute : string;
type attributeStr_type is array(boolean) of string(1 to 35);
constant attributeStr : attributeStr_type := (true => "-name PRESERVE_FANOUT_FREE_NODE ON \
     ", false => "-name PRESERVE_FANOUT_FREE_NODE OFF");
attribute altera_attribute of  <PR input registers> : signal is attributeStr(base_compile);
attribute preserve_syn_only : boolean;
attribute preserve_syn_only of  <PR output registers> : signal is base_compile;