バックナンバーはこちら

today&tomorrow

Technology Update

2017 Aug Summer vol.107

マルチFPGA環境で信号の同期分配を自動化するHAPS ProtoCompiler

著者:シノプシス HAPSプロトタイピング・ソリューション Christoph Kuznik、Rutger Carlsson

Prototyping Newsletter購読のお申し込みはこちら

HAPS ProtoCompilerのreset_synchronizeコマンドを使用した信号分配

同期の対象となる信号は、分割時にPCFコマンドreset_synchronizeで指定します。このコマンドで使用する必須の引数は次のとおりです。

reset_synchronize -toplevel_net <netName> -clock <clockName> -init 0|1

-toplevel_netは同期する信号を指定し、-clockはその信号のクロック・ネットを指定します。-initはフリップフロップの初期値を定義します。信号とクロック・ネットは最上位のFPGAポートでも内部ネットでもかまいませんが、最上位のデザイン階層に存在する必要があります。信号はアクティブLowでもアクティブHighでもよく、既に同期している内部信号もサポートされます。元のRTLは変更されず、信号の動作は維持されますが、分配したネットには伝搬遅延が加わります。

分割を実行すると、最初に遅延チェーン最上位のフリップフロップが1つ挿入され、最終的な分割後にネット負荷が存在する各FPGAにこのフリップフロップが複製されます。システム配線時に、ターゲット・システムおよび利用可能なリソースに応じて同期分配ツリーが決定します。

なお、reset_synchronizeは指定したネットに負荷が存在するFPGA(ビン)にしかフリップフロップを複製しません。自動で実行される負荷推論は、次に示すオプションのコマンド引数を使用して変更できます。

-repl_bins 最初に挿入された最上位フリップフロップを、リストで指定したFPGAビンに複製します。
-force_repl 信号に対する負荷にかかわらず、最初に挿入された最上位フリップフロップをロックされていないすべてのFPGAビンに複製します。

これらのオプション引数は、ロックしたFPGAビンに対して配線を許可したい場合や、それ自体のリセット・ネットには負荷が存在しないものの、負荷を持つ他のFPGAビンへの有効な接続がターゲット・システム内でそれ以外に存在しないようなFPGAビンに対して配線を許可したい場合に使用します。明示的に指定しない限り、デフォルトでは分配および同期後のネットはTDM(Time Domain Multiplexing)の対象にはなりません。

例として、4 FPGA構成のHAPS-80 S104システムを見てみます。ここでは、負荷がFPGA FB1.uAFB1.uBに分割されているネットresetに対してreset_synchronizeを適用します。同期にはクロック・ネットclkを使用します。分割を実行すると(図2)、負荷が存在するすべてのFPGAの最上位に、最初に挿入された同期用フリップフロップが複製されます。

画像(仮)

図2:最初の同期用フリップフロップをシステム配線時に複製した分割図

最初のフリップフロップおよび同期用に追加した遅延フリップフロップの識別子は最初に供給されたネットから決定します。システム配線時に、配線リソースおよび制約に基づいて配線と対応する同期ツリーが計算され、適用されます。図3に、この例の同期結果を示します。ここでは各負荷パスに合計5つのフリップフロップが挿入されており、そのうちFB1.uAreset_3FB1.uBreset_0IOBに配置されています。このため、負荷がFB1.uAFB1.uBのどちらに分割されてもリセットが負荷に到達するまでには全体で5クロック・サイクルの遅延が発生することになります。

画像(仮)

図3:最初のフリップフロップと追加した同期遅延チェーンを示したシステム配線図

幅広いアプリケーションでスクリプト実行をサポートするために、このコマンドはシングルFPGAボードもサポートしています。この場合、複製は生成されません。ただしこれはリーフノードであるため、高いシグナル・インテグリティを維持するために2つのフリップフロップ(IOB用とセンターに各1)が挿入されます。

フローの途中で分割の変更が検出された場合や新しい配線制約を定義した場合は、分割およびシステム配線時に同期が更新されます。

HAPS ProtoCompilerのPCFコマンドreset_synchronizeの結果は、partition.rptおよびsystem_route.rptで確認できます。表1は、実際に分割とシステム配線を実行して出力されたこれらログ・ファイルから該当エントリを抜粋したものです。partition.rptのセクション5.3で複製に関するエントリを見ると、同期対象のネットはFB1.uAFB1.uBに負荷があることが分かります。また、system_route.rptのセクション3を見ると、同期パイプラインのステージ数とsystem_routeステップで追加されたフリップフロップ数(-bins)、および分割されたFPGA全体で同期に関して追加されたフリップフロップの総数(-no_of_regs)が記載されています。

画像(仮)

表1:ログ・ファイル中のHAPS ProtoCompilerのPCFコマンドreset_synchronizeに関するエントリ

reset_synchronizeコマンドの詳細は、HAPS ProtoCompilerコマンド・リファレンスのセクション3をご参照ください。

カテゴリートップ