インテル® Quartus® Prime プロ・エディションのユーザーガイド: デザインの推奨事項

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.4.3. HDLコードでのシフトレジスターの推論

インテル® Quartus® Prime開発ソフトウェアのコンパイラーのAnalysis & Synthesisステージでは、次のガイドラインに従いHDLコードのシフトレジスターを自動的に検出および推論します。

インテル® Stratix® 10および Intel Agilex® 7デバイスにおけるシフトレジスターの推論

インテル® Hyperflex™ アーキテクチャーの配線セグメントにはレジスターが多く含まれるため、 インテル® Stratix® 10および Intel Agilex® 7デバイスでは、コンパイラーのシフトレジスター推論のしきい値は増加します。このしきい値の増加は、前世代のFPGAでコンパイラーがシフトレジスターとして推論していた一部のロジックが、 インテル® Stratix® 10または Intel Agilex® 7デバイスをターゲットにしている場合にシフトレジスターとして推論されない可能性があることを意味します。このしきい値の増加により、レジスターのリタイミングをさらに行うことができるため、全体的なデザインのパフォーマンスが向上します。

次の基準は、 インテル® Stratix® 10および Intel Agilex® 7デバイスにおけるシフトレジスターの検出と推論に適用されます。

インテル® Stratix® 10および Intel Agilex® 7デバイスにおけるデフォルトのシフトレジスター推論要件

  1. シフトレジスターで推論されるレジスターの最小数は64です。レジスターチェーンの幅が1の場合、合成でシフトレジスターを推論するには、チェーンに少なくとも69個のレジスターが含まれている必要があります。この69個のレジスターについて、合成では、チェーンの最初と2番目のレジスターを推論シフトレジスターに含みません。合成では、この最初と2番目のレジスターをALMに配置します。合成では、3番目から66番目のレジスターで64ビット長のシフトレジスターを推論します。合成では、チェーンの最後の3つのレジスターを推論シフトレジスターに含みません。合成では、最後の3つのレジスターをALMに配置します。
  2. シフトレジスターで推論されるレジスターの最小深度は32です。レジスターチェーンの幅が2以上の場合、合成でシフトレジスターを推論するには、チェーンに少なくとも37のレジスターレベルが含まれている必要があります。最初の要件と同様に、合成では、各チェーンの最初と2番目のレジスターレベル、および最後の3つのレジスターレベルを推論シフトレジスターに含みません。
図 2.  インテル® Stratix® 10および Intel Agilex® 7デバイスにおけるシフトレジスターの推論
  • 次の割り当てでは、必要なレジスターの総数 (深さ * 幅) は37に減少します。
    set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION ON
    注: 物理合成の最適化によってリタイミングされていないレジスターに対する領域が回復するため、初期のリタイミング・ステージで推論の追加ステージが行われます。
  • 次の割り当てではどちらも、必要なレジスターの総数 (深さ * 幅) は13に減少します。
    set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION ON
    set_global_assignment -name PHYSICAL_SHIFT_REGISTER_INFERENCE=OFF
注: シフトレジスター推論のしきい値を下げると、デザインのパフォーマンスに悪影響をおよぼす可能性があります。これは、リタイミングに使用できるレジスターの数が減少することに起因します。

インテル® Arria® 10および インテル® Cyclone® 10 GXデバイスにおけるシフトレジスターの推論

インテル® Arria® 10デバイスの場合、Analysis & Synthesisでは、同じ長さのシフトレジスターのグループを検出し、Shift Register Intel® FPGA IPを使用してレジスターを実装します。

自動検出を行うには、すべてのシフトレジスターが次の特性を備えている必要があります。

  • 同じクロックとクロックイネーブルを使用すること
  • 他に二次信号がないこと
  • 少なくとも3レジスター離れた等間隔のタップがあること

合成では、専用のRAMブロックを備えるデバイスファミリーでのみシフトレジスターを認識します。 インテル® Quartus® Prime プロ・エディション の合成では、次のガイドラインを使用します。

  • インテル® Quartus® Prime開発ソフトウェアは、レジスターされるバスの幅 (W)、各タップ間の長さ (L)、またはタップ数 (N) に基づきShift Register Intel® FPGA IPを推論するかを決定します。
  • Auto Shift Register Recognition オプションが Auto に設定されている場合、 インテル® Quartus® Prime プロ・エディション の合成では、次の方法を使用してロジックに向けたRAMブロックに実装するシフトレジスターを決定します。
    • Optimization Technique の設定
    • デザインに関するロジックとRAMの使用率の情報
    • Timing-Driven Synthesis のタイミング情報
  • レジスターされるバスの幅が1の場合 ( W = 1 )、 インテル® Quartus® Primeの合成では、タップ数に各タップ間の長さを掛けた値が64以上になる ( N x L > 64 ) 場合に、シフトレジスターIPを推論します。
  • レジスターされるバスの幅が1より大きく ( W > 1 )、レジスターされるバスの幅にタップ数と各タップ間の長さを掛けた値が32以上になる ( W × N × L > 32 ) 場合に、 インテル® Quartus® PrimeではShift Register Intel® FPGA IPを合成します。
  • 各タップ間の長さ (L) が2の累乗ではない場合、 インテル® Quartus® Primeの合成では、外部ロジック (LE または ALM) で読み出しおよび書き込みカウンターをデコードする必要があります。これは、シフトレジスターのサイズが異なるために必要なものです。この追加デコードロジックにより、メモリー内にシフトレジスターを実装することで得られるパフォーマンスと使用率における利点がなくなります。

インテル® Quartus® Primeの合成でShift Register Intel® FPGA IPにマッピングされ、RAMに配置されるレジスターは、シミュレーション・ツールに向けたVerilog HDLまたはVHDL出力ファイルでは利用できません。それらのノード名は合成後に存在しなくなります。

注: コンパイラーでは、shift enable 信号を使用するシフトレジスターをMLABメモリーに実装することができません。代わりに、コンパイラーは専用のRAMブロックを使用します。シフトレジスターを実装するメモリー構造のタイプを制御するには、ramstyle 属性を使用します。次に例を示します。
(* ramstyle = "mlab" *) my_shift_reg