(57)【要約】【課題】低コスト、ハイ・パフォーマンス、低いターンアラウンド・タイム、高いスケーラビリティを実現するハードウェア・アクセラレーション・システムを提供する。【解決手段】機能シミュレーションのためのハードウェア・アクセラレーション・システムであって、論理チップ及びメモリを有する汎用回路基板を備える。回路基板はコンピューティング・デバイスにプラグ接続できる。当該システムは、コンピューティング・デバイスが、回路基板とそのコンピューティング・デバイスに関連するメモリの間のＤＭＡ転送を誘導するように適応される。当該回路基板はさらに、シミュレーション・プロセッサを使用して構成できる。当該シミュレーション・プロセッサは、少なくとも１つの回路設計用としてプログラムできる。【選択図】図１
2006268873.tif 000002
【特許請求の範囲】
【請求項１】
回路設計の機能シミュレーションのためのハードウェア・アクセラレーション・システムであって、
該ハードウェア・アクセラレーション・システムは、
少なくとも１つの論理チップとオン・ボード・メモリとを含む回路基板を備え、
該回路基板は、ホスト・コンピューティング・デバイスにプラグ接続可能であり、
該システムは、該ホスト・コンピューティング・デバイスが該回路基板と該ホスト・コンピューティング・デバイスに関連付けられたホスト・メモリとの間でインターフェースをとることが可能であるように構成されており、
該少なくとも１つの論理チップは、プログラム可能なシミュレーション・プロセッサを含み、
該プログラム可能なシミュレーション・プロセッサは、
複数の処理要素のアレイであって、各処理要素は、該回路設計のためのネットリストからコンパイルされた命令であって、該オン・ボード・メモリから該複数の処理要素にストリーミングされた命令に従って、１組の機能のうちのいずれかの機能をシミュレートするようにプログラムされることが可能であり、該システムは、該複数の処理要素が該命令を実行することによって該回路設計を部分的にシミュレートする、複数の処理要素のアレイと、
該複数の処理要素によって計算された複数の中間値を格納するための分散レジスタ・ファイル・システムであって、各処理要素に対して、その処理要素によって書き込まれ得る少なくとも１つの対応するレジスタ・ファイルを含む分散レジスタ・ファイル・システムと、
該複数のレジスタ・ファイルの読み取りポートを該複数の処理要素の入力に接続する相互接続システムであって、それにより、該複数の中間値が該複数の処理要素によってアクセル可能である、相互接続システムと
を含む、システム。
【請求項２】
前記相互接続システムは、クロスバーを含み、該クロスバーは、前記複数の処理要素の各々に対するレジスタ・ファイルからの読み取りポートを残りの処理要素のすべてに対する入力に接続する、請求項１に記載のシステム。
【請求項３】
前記複数の中間値は、前記シミュレーション・プロセッサの単一のサイクルで前記複数のレジスタ・ファイルから前記複数の処理要素によってアクセス可能である、請求項１または２に記載のシステム。
【請求項４】
前記分散レジスタ・ファイル・システムは、各処理要素に対して、残りの処理要素によってではなく、その処理要素によって書き込まれ得る少なくとも１つの対応するレジスタ・ファイルを含む、請求項１から３のいずれか一項に記載のシステム。
【請求項５】
前記シミュレーション・プロセッサは、前記複数のレジスタ・ファイルが格納された複数の中間値をスピルし得るメモリ階層の第２のレベルに分散メモリ・システムをさらに含む、請求項１から４のいずれか一項に記載のシステム。
【請求項６】
前記ホスト・コンピューティング・デバイスは、前記ホスト・メモリと前記オン・ボード・メモリとの間のＤＭＡ転送を指示し得る、請求項１から５のいずれか一項に記載のシステム。
【請求項７】
前記複数の処理要素の各々は、同一の組の機能をシミュレートし得る、請求項１から５のいずれか一項に記載のシステム。
【請求項８】
前記複数の処理要素のうちの少なくとも２つは、異なる組の機能をシミュレートし得る、請求項１から５のいずれか一項に記載のシステム。
【請求項９】
前記複数の処理要素は、２入力ゲートの２値化シミュレーションを提供する、請求項１から５のいずれか一項に記載のシステム。
【請求項１０】
前記複数の処理要素は、２入力ゲートの４値化シミュレーションを提供する、請求項１から５のいずれか一項に記載のシステム。
【請求項１１】
前記複数の処理要素は、レジスタ転送レベル機能のシミュレーションを提供する、請求項１から５のいずれか一項に記載のシステム。
【請求項１２】
前記シミュレーション・プロセッサは、単一の論理チップ上に実装されている、請求項１から５のいずれか一項に記載のシステム。
【請求項１３】
前記少なくとも１つの論理チップは、前記シミュレーション・プロセッサとして構成されているフィールド・プログラマブル・ゲート・アレイである、請求項１から５のいずれか一項に記載のシステム。
【請求項１４】
前記命令は、前記フィールド・プログラマブル・ゲート・アレイのデータ入力／出力ピンを用いて、前記オン・ボード・メモリから前記複数の処理要素にストリーミングされる、請求項１３に記載のシステム。
【請求項１５】
前記命令は、前記フィールド・プログラマブル・ゲート・アレイの少なくとも２５６個のデータ入力／出力ピンを用いて、前記複数の処理要素にストリーミングされる、請求項１４に記載のシステム。
【請求項１６】
前記シミュレーション・プロセッサは、少なくとも４８個の処理要素を含む、請求項１から５または請求項１２から１５のいずれか一項に記載のシステム。
【請求項１７】
前記複数の処理要素は、実質的に１００ＭＨｚ以上の速さで動作する、請求項１６に記載のシステム。
【請求項１８】
前記システムは、一度に前記ネットリストの１つのパーティションをシミュレートすることが可能であり、そのパーティションを逐次シミュレートすることにより、該ネットリスト全体をシミュレートすることが可能である、請求項１から５のいずれか一項に記載のシステム。
【請求項１９】
前記システムは、前記回路設計をテストするために用いられるシミュレーション・ベクトルの１つのサブセットをシミュレートすることが可能であり、そのサブセットを逐次シミュレートすることにより、該シミュレーション・ベクトルのセット全体をシミュレートすることが可能である、請求項１から５のいずれか一項に記載のシステム。
【請求項２０】
各処理要素は、前記シミュレーション・プロセッサの単一のサイクルで１つの命令を実行する、請求項１から５のいずれか一項に記載のシステム。
【請求項２１】
前記シミュレーション・プロセッサの１サイクル中に前記複数の処理要素によって計算された複数の中間値は、前記相互接続システムによって、該シミュレーション・プロセッサの次のサイクル中の実行のために、該複数の処理要素の入力に対して利用可能になり得る、請求項２０に記載のシステム。
【請求項２２】
１つの命令の実行中に前記複数の処理要素によって計算された複数の中間値は、前記相互接続システムによって、次の命令の実行のために、該複数の処理要素の入力に対してパイプラインの態様で利用可能になり得る、請求項１から５のいずれか一項に記載のシステム。
【請求項２３】
前記命令は、前記シミュレーション・プロセッサのサイクル毎に処理要素毎に１つの命令の割合で、前記オン・ボード・メモリから前記複数の処理要素にストリーミングされる、請求項１から５のいずれか一項に記載のシステム。
【請求項２４】
回路設計の機能シミュレーションを実行する方法であって、
該方法は、
シミュレートされるべき回路設計のためのネットリストを受け取るステップと、
回路基板上に位置するシミュレーション・プロセッサによって実行される命令に該ネットリストをコンパイルするステップであって、該シミュレーション・プロセッサは、複数の処理要素のアレイと、該複数の処理要素によって計算された複数の中間値を格納するための分散レジスタ・ファイル・システムと、複数のレジスタ・ファイルの読み取りポートを該複数の処理要素の入力に接続する相互接続システムとを含む、ステップと、
該回路基板がプラグ接続されているホスト・コンピューティング・デバイスに関連付けられたホスト・メモリから該回路基板上のオン・ボード・メモリに該命令を転送するステップと、
該オン・ボード・メモリから該複数の処理要素に該命令をストリーミングするステップと、
該シミュレーション・プロセッサ上で該命令を実行するステップであって、該命令は、機能をシミュレートするように該複数の処理要素をプログラムし、それにより、該システムが該回路設計をシミュレートする、ステップと
を包含する、方法。
【請求項２５】
前記相互接続システムは、クロスバーを含み、該クロスバーは、前記複数の処理要素の各々に対するレジスタ・ファイルからの読み取りポートを残りの処理要素のすべてに対する入力に接続する、請求項２４に記載の方法。
【請求項２６】
前記複数の中間値は、前記シミュレーション・プロセッサの単一のサイクルで前記複数のレジスタ・ファイルから前記複数の処理要素によってアクセス可能である、請求項２４または２５に記載の方法。
【請求項２７】
前記分散レジスタ・ファイル・システムは、各処理要素に対して、残りの処理要素によってではなく、その処理要素によって書き込まれ得る少なくとも１つの対応するレジスタ・ファイルを含む、請求項２４から２６のいずれか一項に記載の方法。
【請求項２８】
前記シミュレーション・プロセッサは、前記複数のレジスタ・ファイルが格納された複数の中間値をスピルし得るメモリ階層の第２のレベルに分散メモリ・システムさらに含む、請求項２４から２７のいずれか一項に記載の方法。
【請求項２９】
前記命令を転送するステップは、ＤＭＡ転送によって、前記ホスト・メモリと前記オン・ボード・メモリとの間で該命令を転送することを包含する、請求項２４から２８のいずれか一項に記載の方法。
【請求項３０】
フィールド・プログラマブル・ゲート・アレイを前記シミュレーション・プロセッサとして構成するステップをさらに包含する、請求項２４から２８のいずれか一項に記載の方法。
【請求項３１】
前記オン・ボード・メモリから前記複数の処理要素に前記命令をストリーミングするステップは、前記フィールド・プログラマブル・ゲート・アレイのデータ入力／出力ピンを用いて前記複数の処理要素に該命令をストリーミングすることを包含する、請求項３０に記載の方法。
【請求項３２】
前記シミュレーション・プロセッサは、少なくとも４８個の処理要素を含む、請求項２４から３１のいずれか一項に記載の方法。
【請求項３３】
前記命令を実行するステップは、前記複数の処理要素が実質的に１００ＭＨｚ以上の速さで動作することを包含する、請求項３２に記載の方法。
【請求項３４】
単一チップＶＬＩＷプロセッサであって、
複数の処理要素のアレイであって、各処理要素は、オフチップメモリから該複数の処理要素にストリーミングされた命令を実行する、複数の処理要素のアレイと、
該複数の処理要素によって計算された複数の中間値を格納するための分散レジスタ・ファイル・システムであって、各処理要素に対して、その処理要素によって書き込まれ得る少なくとも１つの対応するレジスタ・ファイルを含む分散レジスタ・ファイル・システムと、
該複数のレジスタ・ファイルの読み取りポートを該複数の処理要素の入力に接続する相互接続システムであって、それにより、該複数の中間値が該複数の処理要素によってアクセル可能である、相互接続システムと
を備えた、単一チップＶＬＩＷプロセッサ。
【請求項３５】
前記相互接続システムは、クロスバーを含み、該クロスバーは、前記複数の処理要素の各々に対するレジスタ・ファイルからの読み取りポートを残りの処理要素のすべてに対する入力に接続する、請求項３４に記載の単一チップＶＬＩＷプロセッサ。
【請求項３６】
前記複数の中間値は、前記ＶＬＩＷプロセッサの単一のサイクルで前記複数のレジスタ・ファイルから前記複数の処理要素によってアクセス可能である、請求項３４または３５に記載の単一チップＶＬＩＷプロセッサ。
【請求項３７】
前記分散レジスタ・ファイル・システムは、各処理要素に対して、残りの処理要素によってではなく、その処理要素によって書き込まれ得る少なくとも１つの対応するレジスタ・ファイルを含む、請求項３４から３６のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【請求項３８】
前記レジスタ・ファイルが格納された複数の中間値をスピルし得るメモリ階層の第２のレベルに分散メモリ・システムをさらに備えた、請求項３４から３７のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【請求項３９】
前記複数の処理要素の各々は、同一の命令セットからの命令を実行し得る、請求項３４から３８のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【請求項４０】
前記複数の処理要素のうちの少なくとも２つは、異なる命令を実行し得る、請求項３４から３８のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【請求項４１】
前記ＶＬＩＷプロセッサは、単一のフィールド・プログラマブル・ゲート・アレイ上に実装されている、請求項３４から３８のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【請求項４２】
前記命令は、前記フィールド・プログラマブル・ゲート・アレイのデータ入力／出力ピンを用いて、前記オン・ボード・メモリから前記複数の処理要素にストリーミングされる、請求項４１に記載の単一チップＶＬＩＷプロセッサ。
【請求項４３】
前記命令は、前記フィールド・プログラマブル・ゲート・アレイの少なくとも２５６個のデータ入力／出力ピンを用いて、前記複数の処理要素にストリーミングされる、請求項４２に記載の単一チップＶＬＩＷプロセッサ。
【請求項４４】
前記ＶＬＩＷプロセッサは、少なくとも４８個の処理要素を含む、請求項３４から３８または請求項４１から４３のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【請求項４５】
前記複数の処理要素は、実質的に１００ＭＨｚ以上の速さで動作する、請求項３４から３８のいずれか一項に記載の単一チップＶＬＩＷプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路の機能シミュレーションのためのハードウェア・アクセラレーシ
ョン・システムに関し、特に、シミュレーション・プロセッサを使用したハードウ
ェア・アクセラレーション・システム及び方法に関し、また、シミュレーション・プ
ロセッサのためのネットリストをコンパイルする方法に関する。
【背景技術】
【０００２】
（１）参考文献
以下の各論文は有益な背景情報を提供するものであり、それを理由として引用
によりその全体がここに組み込まれ、本明細書の以降の部分では各々に付される
角括弧で囲んだ参照番号により適宜言及される（すなわち、＜４＞は４番が付さ
れたJ.Abke et al.による文献を示す）。
【０００３】
＜１＞http: //www.quickturn.com/products/speedsim.htm.
＜２＞http: //www.quickturn.com/products/palladiurn.htm.
＜３＞2001. http:/www.quickturn.com/products/CoBALTUItra.htm.
＜４＞Joerg Abke and Erich Barke. A new placement method for direct ma
pping into LUT-based FPGAs (LUTベースFPGAへの直接マッピングのための新し
い配置方法). In International Conference on Field Programmable Logic and
Applications (FPL 2001), pages 27-36, Belfast, Northern Ireland, August
2001.
＜５＞Semiconductor Industry Association. International technology roa
dmap for semiconductors (半導体産業協会「半導体に関する国際技術ロードマ
ップ). 1999. http://public.itrs.net.
＜６＞Jonathan Babb, Russ Tessier, and Anant Agarwal. Virtual wires: O
vercoming pin limitations in FPGA-based logic emulators (仮想ワイヤ: FPG
Aベース論理エミュレータにおけるピン制約の克服). In Proceedings of the IE
EE Workshop on FPGAs for Custom Computing Machines, April 1993.
＜７＞Jonathan Babb, Russ Tessier, Matthew DahI, Silvina Hanono, David
Hoki, and Anant Agarwal. Logic emulation with virtual wires (仮想ワイヤ
を使用した論理エミュレーション). In IEEE Transactions on CAD of Integrat
ed Circuits and Systema, June 1997.
＜８＞Steve Carlson. A new generation of verification acceleration. Ju
ne (新世代の検証アクセラレーション). http: //www.tharas.com.
＜９＞M. Chiang and R. Palkovic. LCC simulators speed development of s
ynchronous hardware (LCCシミュレータによる同期ハードウェアの高速開発). I
n Computer Design, pages 87-92, March 1986.
＜１０＞Seth C. Goldstein, Herman Schmit, Matt Moe, Mihai Budiu, Sriha
ri Cadambi, R. Reed Taylor, and Ronald Laufer. Piperench: A coprocessor 
for streaming multimedia acceleration (パイプレンチ: マルチメディア・アク
セラレーションのストリーミングのためのコプロセッサ). In The 26th Annual 
International Symposium on Computer Architecture, pages 28-39, May 1999.
＜１１＞S. Hauck and G. Borriello. Logic partition orderings for multi
-FPGA systems (マルチFPGAシステムのための論理パーティション配列). In ACM
/SIGDA International Symposium on Field Programmable Gate Arrays, pages 
32-38, Monterey, CA, February 1995.
＜１２＞Chandra Mulpuri and Scott Hauck. Runtime and quality tradeoffs
in FPGA placement and routing (FPGA配置及び経路指示におけるランタイムと
品質のトレードオフ). In International Symposium on Field Programmable Ga
te Arrays, pages 29-36, Napa, CA, February 2001.
＜１３＞Alberto Sangiovanno-Vincentelli and Jonathan Rose. Synthesis m
ethods for field-programmable gate arrays (フィールド・プログラマブル・ゲ
ート・アレイのための合成方法). In Proceedings of the IEEE, Vol. 81, No. 7
, pages 1057-83, July 1993.
＜１４＞E. Shriver and K. Sakallah. Ravel: Assigned-delay compiled-cod
e logic simulation (割当て済み遅延、コンパイル済みコードの論理シミュレー
ション). In International Conference on Computer-Aided Design (ICCAD), p
ages 364-368, 1992.
＜１５＞D. Thomas and P. Moorby. The Verilog Hardware Description Lang
uage, 3rd Edition (Verilogハードウェア記述言語、第3版). Kluwer Academic 
Publishers, 1996.
＜１６＞S. Trimberger. Scheduling designs into a time-multiplexed FPGA
(設計の時間多重化FPGAへのスケジューリング). In Proceedings of the 1998 
ACM/SIGDA Sixth International Symposium on Field Programmable Gate Array
s, February 1998.
＜１７＞S. Trimberger, D. Carberry, A. Johnson, and J. Wong. A time-mu
ltiplexed FPGA (時間多重化FPGA). In IEEE Symposium on FPGAs for Custom C
omputing Machines (FCCM) 1997, February 1997.
＜１８＞Keith Westgate and Don Mclnnis. Reducing simulation time with 
cycle simulation (サイクル・シミュレーションによるシミュレーション時間の
短縮). 2000. http://www.quickturn.com/tech/cbs.htm.
＜１９＞J. Cong and Y. Ding. An Optimal Technology Mapping Algorithm f
or Delay Optimization in Lookup-Table based FPGA Designs (ルックアップ表
をベースとするFPGA設計における遅延最適化のための最適テクノロジ・マッピン
グ・アルゴリズム). In IEEE Transactions on CAD, pages 1-12, January 1994.
＜２０＞F. Corno, M. S. Reorda, and G. Squillero. RT-level ITC99 Bench
marks and First ATPG Results (RTレベルのITC99ベンチマーク及び最初のATPG
結果). In IEEE Design and Test of Computers, pages 44-53, July 2000.
＜２１＞Xilinx. Virtex-Il 1.5v Field Programmable Gate Array: Advance 
Product Specification (Virtex-Il 1.5vフィールド・プログラマブル・ゲート・
アレイ: アドバンス製品仕様). Xilinx Application Databook , October 2001.
http://www.xilinx.com/partinfo/databook.htm.
【０００４】
（２）序文
ａ）検証ギャップ
過去１０年間に新たな適用業務や処理需要が次々と出現し、それに伴って集積
回路（ＩＣ）の複雑性と密度は大幅に増大した。同時に、市場の重圧の増大によ
り設計サイクルの短縮が必須となり、完全自動化された設計手法への依存度が高
まることが予想されている。機能検証は、こうした設計手法の重要な部分を占め
る。機能検証は設計の市場投入までに要する期間全体を決定する上できわめて重
要な役割を果たす。製造に時間と費用を費やす前に、設計者は膨大な量の機能検
証を実行しなければならない。人的な資源とコンピュータ資源の６０％以上は、
通常の設計プロセスで使用され（文献＜１＞）、そのうちの８５％は機能検証に
充てられる（文献＜５＞）。チップの複雑性と密度は過去数年間に急激なペース
で増大したが（このペースは今後１０年間にわたって続くと予想される）、回路
検証能力はそうではない。つまり、機能検証のためのＣＡＤツールのパフォーマ
ンスは、回路の複雑性に阻まれて十分な向上を果たしていないのである。
【０００５】
その結果生じる「機能検証ギャップ」は、ハードウェア支援シミュレータの使
用や専用ハードウェア・エミュレータによりある程度は取り組まれてきた。専用
エミュレータのパフォーマンスはソフトウェア・シミュレータのそれを大幅に上
回るが、コストも大幅に高い。ソフトウェア・シミュレーション自体のプロセス
は、最近までイベント・ドリブン・シミュレーションをベースとしていたが、数
年前のサイクル・ベース論理シミュレーションの登場によって急激な進展を遂げ
ている。
【０００６】
ｂ）サイクル・ベース・シミュレーション
サイクル・ベース・シミュレーションは従来のイベント・ドリブン・シミュレ
ーションとは異なり、機能検証に非常に適している。イベント・ドリブン・シミ
ュレータはイベントが発生した入力のゲートの出力を更新し、続いて、更新の影
響を受けた各ゲートについて将来のイベントをスケジュールする。これは、活動
率が低い回路では効率的な方法である。各サイクルで更新すべきゲート数がゲー
ト総数のうちごくわずかな比率を占めるにすぎないからである。この方法により
、イベント・ドリブン・シミュレータはゲート遅延をモデル化し、シミュレート
することもできる。しかし、活動率が高い大規模回路でこの方法を使用すると、
メモリ使用量が増大し、シミュレーションの速度が低下する。
【０００７】
サイクル・ベース・シミュレーションは、高速で、メモリ集約度の低い機能検
証方法を提供する。サイクル・ベース・シミュレーションは、以下によって特徴
付けられる。
【０００８】
・値はクロック・エッジでのみ計算され、中間のゲート結果は計算されない。
その代わりに、各クロック・サイクルにおける出力はそのクロック・サイクルの
入力のブール論理機能として計算される。
【０００９】
・組み合わせのタイミング遅延は無視される。
【００１０】
・通常、シミュレーションは２値化（状態０、１）または４値化（状態０、１
、ｘ、及びｚ）される。フル仕様のイベント・ドリブン・シミュレータは、最大
２８個の状態をサポートしなければならない。
【００１１】
そのため、サイクル・ベース・シミュレータは機能検証に焦点を当てることに
よりパフォーマンスを高める。実用回路の場合、サイクル・ベース・シミュレー
タはイベント・ドリブン・シミュレータよりも１０倍も高速でありながら、メモ
リ使用量は１／５程度でしかない（文献＜１８＞）。例えば、市販サイクル・シ
ミュレータのＳｐｅｅｄＳｉｍ（Ｑｕｉｃｋｔｕｒｎ／Ｃａｄｅｎｃｅ製）は、
標準的なＵｌｔｒａＳｐａｒｃワークステーション上で１５０万ゲートのネット
リストを毎秒１５ベクトルの速度でシミュレートできる。５万〜１０万ゲートを
有するネットリストの場合の速度は、通常、毎秒約４００〜５００ベクトルであ
る。その結果、設計検証ではこうしたシミュレータの人気がますます高まってき
ている。
【００１２】
ｃ）ハードウェア支援サイクル・ベース・シミュレーション
サイクル・ベース・シミュレーションの速度をさらに高めたい場合は、専用ハ
ードウェアを使って加速できる。サイクル・ベース・シミュレーションには従来
のマイクロプロセッサでは対処できない相当量の並行性（すなわち、命令レベル
のパラレリズム）が存在するため、ハードウェア・アクセラレーションの採用に
より大きな効果が期待できる。電気的な再構成が可能なフィールド・プログラマ
ブル・ゲート・アレイ（ＦＰＧＡ）の出現により、安価なハードウェア・ソリュ
ーションを作ることが可能になった。再構成可能性によりＦＰＧＡ上で論理回路
をエミュレートすることが可能になり、さらには空間パラレリズムの使用による
並行性の処理が可能になる。このような手法により、機能検証が大幅に加速され
、複雑な設計の設計時間の短縮と市場投入期間の短縮が実現される。
【００１３】
単一のＦＰＧＡで数個の論理設計をエミュレートすることはできるが、サイズ
に限界があり、大規模な回路では１個を一度に収容することはできない。ＦＰＧ
Ａ内のリソース量を上回るリソースを必要とする回路は、ＦＰＧＡに入りきれな
いのである。
【００１４】
この問題の次善策としてすぐに思い浮かぶのは、複数のＦＰＧＡを使うことで
ある。しかし、複数ＦＰＧＡによるエミュレーション・システムは、スケーラビ
リティとコスト効果の両面でこの問題に対処できない。例えば、１０個のＦＰＧ
Ａで構成されるシステムは、設計が１０個のＦＰＧＡを組み合わせたサイズより
も大きくなると無力である。また、ＦＰＧＡを接続するピンの数が限られている
ことがボトルネックとなって論理利用率が低下し、一部のＦＰＧＡは部分的にし
か使用されないという結果になる。さらに、これらのピンは比較的低速なオンボ
ード相互接続ワイヤを使用しており、これもエミュレーション速度を低下させる
要因となる（文献＜１１＞）。これらの問題は、ＭＩＴが開発したＶｉｒｔｕａ
ｌＷｉｒｅｓのコンセプトによってある程度は解消されている（文献＜６＞、＜
７＞）。しかし、一部のエミュレーション・ベンダ（Ａｘｉｓなど）は未だにシ
ステム内で複数のＦＰＧＡと専用設計のハードウェアを使用しており、製品価格
は数十万ドル〜数百万ドルにも上っている。
【００１５】
エミュレーションへのもう１つの取り組み方としては、物理的に小規模なＦＰ
ＧＡ上で大規模な設計を時分割する方法がある。この方法では、回路全体ではな
く、部分的にエミュレーションが行われる。各部分は単一のＦＰＧＡに収まり、
ＦＰＧＡは反復的に再構成される。この方法であれば、ピンの制約も、複数ＦＰ
ＧＡの採用によるソリューションの高コストの問題も解消されるが、ＦＰＧＡの
再構成に要するオーバーヘッドのためにパフォーマンスが低下する。ほとんどの
汎用ＦＰＧＡは頻繁な再構成を見越した設計がなされていないので、再構成のた
めに用意されているＩ／Ｏピンはごく少数しかない。そのため、構成の帯域幅は
非常に小さく、再構成時には大幅な遅延が発生する。複数の構成コンテキストを
使用する状況に対応してオンチップ・ストレージを増やした専用ＦＰＧＡのアー
キテクチャが考案されているが（文献＜１６＞、＜１７＞）、こうしたアーキテ
クチャは市販されておらず、しかもスケーラブルではない。
【００１６】
（３）技術と関連研究の背景
この項では、関連研究のいくつかの態様を、背景と従来技術を踏まえて論じる
。
【００１７】
（４）シミュレーション手法
イベント・ドリブン・シミュレーションでは、ネット上の値の変化をイベント
とみなす。イベントはイベント・スケジューラによって動的に管理される。イベ
ント・スケジューラはイベントをスケジュールし、スケジュール済みイベントへ
のレスポンスとして、値が変化した各ネットを更新する。イベント・スケジュー
ラはさらに、スケジュール済みイベントによって発生する将来のイベントもスケ
ジュールする（文献＜１５＞）。イベント・ドリブン・スケジューリングの主な
利点は、柔軟性である。イベント・ドリブン・シミュレータは、タイミングを任
意に遅延させることによって、同期モデルと非同期モデルの両方をシミュレート
することができる。イベント・ドリブン・シミュレーションの欠点は、本質的に
直列であり、メモリ使用量が大きいために、低レベルのシミュレーション・パフ
ォーマンスしか実現されないことである。
【００１８】
均一化されたコンパイル済みコード論理シミュレータ（サイクル・ベース・シ
ミュレータはこれから派生されたもの）では、イベント・ドリブン・シミュレー
タよりもはるかに高いシミュレーション・パフォーマンスを得られる可能性があ
る。それは、イベントの配列と伝搬に要するランタイム・オーバーヘッドの大部
分が解消されるためである。これは、１クロック・サイクルにつき１度、すべて
のコンポーネントをトポロジの順序で評価し、コンポーネントへのすべての入力
が、そのコンポーネントが実行される時点までに最新の値となるようにすること
で実現される。サイクル・ベース・シミュレータの主な欠点は、任意のゲート遅
延によってシミュレートできないことにある（文献＜１４＞は顕著な例外である
）。
【００１９】
数年前まで、イベント・ドリブン・シミュレータは概してサイクル・ベース・
シミュレータよりも好まれていた。それは、ほとんどの回路のアクティビティ速
度は１０〜２０％の範囲内だったからである（文献＜９＞）。イベント・ドリブ
ン・シミュレータのパフォーマンスは、回路サイズよりむしろ回路活動によって
左右される。回路全体は静的にコンパイルされるのではなく、シミュレーション
は解釈によって進行し、その間には、回路活動によって影響されるゲートとネッ
トだけが更新される。一方、サイクル・ベース・シミュレーションでは、シミュ
レーションの開始前に回路全体が静的にコンパイルされるので、回路内の各ゲー
トはサイクル毎に評価される。初期段階にイベント・ドリブン・シミュレータの
人気が高かったもう１つの理由は、回路の機能性とタイミングを同時に検査でき
る点にあった。ただし、静的タイミング分析ツールが登場した現在では、機能性
とタイミングを別々に検証することが可能になっている。
【００２０】
近年では、パイプライン処理やパラレル実行といった（マルチメディアやネッ
トワーキングの領域の）適用業務が出現しており、活動率がはるかに高い回路が
使用されるようになっている。ゲート遅延が必要とされない場合には（すなわち
、機能検証では）、サイクル・ベース・シミュレータの方がイベント・ドリブン
・シミュレータよりも適している。サイクル・ベース・シミュレータは回路全体
をシミュレートするが、メモリ使用量が少なくてパラレル化が可能な性質のため
に、パフォーマンスはイベント・ドリブン・シミュレータを凌ぐ（文献＜１４＞
、＜１８＞）。
【００２１】
本発明の手法は、単一の市販ＦＰＧＡを有する汎用基板を使用した、サイクル
・ベース・シミュレーションのためのスケーラブル・ハードウェア・アクセラレ
ータに関する。この項の残りの部分では、この分野で競合製品となりうる市販品
を始めとする、他のＦＰＧＡベース・ハードウェア・アクセラレータについて論
じる。
【００２２】
ａ）単一ＦＰＧＡシステム
論理エミュレーションのための単一ＦＰＧＡを使用することには、２つの大き
な問題がある。
【００２３】
・スケーラビリティの欠如：ＦＰＧＡに収まらない設計は、全体を１度にエミ
ュレートすることはできない。このような設計を一部分ずつエミュレートするた
めには再構成を繰り返し実行する必要があり、市販のＦＰＧＡでは非常に時間が
かかる。
【００２４】
・長いコンパイル時間：従来のＦＰＧＡツール・フローは複雑で、大規模な設
計では数時間から数日間の時間を要する。また、これによるシミュレーション・
オーバーヘッドの増大により、設計時間と市場投入までの期間に重大な影響が生
じる。
【００２５】
文献＜１７＞では、著者は、複数のコンテキストを保持し、コンテキスト間で
高速な切り替えを行うことのできる時分割ＦＰＧＡアーキテクチャを提示してい
る。ＦＰＧＡに収まらない大規模な回路は、ちょうどよいサイズに分割し、各部
分をＦＰＧＡの中に格納することができる。このソリューションを使用すると、
煩雑な再構成の反復を回避できるが、ＦＰＧＡ内に備えられるコンテキスト・ス
トレージの量によって影響されるという難点がある。さらに、市販のＦＰＧＡで
は複数のコンテキストを格納して切り替えることができないため、専用のＦＰＧ
Ａを構築することが必要になる。
【００２６】
ｂ）複数ＦＰＧＡシステム
エミュレーション・システムは、典型的には、相互接続された多数の市販ＦＰ
ＧＡで構成される。これにより大規模な設計をエミュレートすることが可能にな
るが、ＦＰＧＡ間通信に使用できるピンが少ないため、各ＦＰＧＡの利用率は大
幅に低下する。ピンが少ないためにＦＰＧＡは部分的にしか埋められず、無駄が
生じるのである。文献＜６＞では、「Ｖｉｒｔｕａｌ  Ｗｉｒｅｓ」と呼ばれる
新規な技術が提案されている。Ｖｉｒｔｕａｌ  Ｗｉｒｅｓでは、各物理ピンが
時分割され、設計内の複数の「仮想ピン」にマッピングされる。これは何らかの
時分割ハードウェアを追加して行われるが、設計全体のエミュレートはＦＰＧＡ
のクロック速度よりも遅いクロック速度で行うことが必要になる。それでもなお
、Ｖｉｒｔｕａｌ  Ｗｉｒｅｓのコンセプトは複数ＦＰＧＡのシステムにはきわ
めて有効である。
【００２７】
ｃ）市販製品
（１）Ｑｕｉｃｋｔｕｒｎ／Ｃａｄｅｎｃｅ
Ｑｕｉｃｋｔｕｒｎ  （現在ではＣａｄｅｎｃｅに吸収されている）  は、サ
イクル・ベース・シミュレータ、シミュレーション・アクセラレータ、及びエミ
ュレータを販売していた。ＳｐｅｅｄＳｉｍは、ＨＤＬを直接ネイティブ・マシ
ン・コードに変換する  （ソフトウェア）  サイクル・ベースのｖｅｒｉｌｏｇ
シミュレータである。そのパフォーマンスは、複数のテスト・ベクトルを単一設
計内でシミュレートできるようにする対称マルチプロセッシング  （ＳＭＴ）  
と同時テスト  （ＳＴ）  の手法によって高められる（文献＜１＞）。
【００２８】
シミュレーション・アクセラレーションやテストベンチ生成用として、また回
路エミュレーションにおいてＱｕｉｃｋｔｕｒｎの包括的検証製品の１つに、Ｐ
ａｌｌａｄｉｕｍがある（文献＜２＞）。Ｐａｌｌａｄｉｕｍは、シミュレーシ
ョンとエミュレーションのために特別設計された専用ＡＳＩＣを使用して構築さ
れている。やはりＱｕｉｃｋｔｕｒｎ製のＰａｌｌａｄｉｕｍより大幅に大型の
エミュレーション・システム、ＣｏＢＡＬＴ（文献＜３＞）は、最大１億１，２
００万ゲートまで拡張可能である。これらの製品はすべて、１００％専用のシス
テムを必要とするため、非常に高価である  （数百万ドルの価格帯）。
【００２９】
（２）Ｔｈａｒａｓ  Ｓｙｓｔｅｍｓ
Ｔｈａｒａｓ  Ｓｙｓｔｅｍｓ  は、「Ｈａｍｍｅｒ」と呼ばれる比較的手頃
な検証アクセラレーション・システムを提供する。Ｈａｍｍｅｒハードウェアは
、高い帯域幅のバックプレーンが、いくつかの専有カスタム・ビルトＡＳＩＣを
備える基板に接続された構成である。ＡＳＩＣはＲＴＬまたはゲート・レベルの
設計の一部を評価でき、さらには、その他すべてのＡＳＩＣが基板に収められた
ノンブロッキング相互接続機構（文献＜８＞）を提供する。システムは最大８０
０万ゲートまで拡張でき、価格は数十万ドルである。
【００３０】
（３）ＩＫＯＳ
ＩＫＯＳ  （ｈｔｔｐ：  ／／ｗｗｗ．ｉｋｏｓ．ｃｏｍ）  は、エミュレー
ション・システムのＶｉｒｔｕａＬｏｇｉｃとＶＳｔａｔｉｏｎを販売している
。ＶｉｒｔｕａＬｏｇｉｃは、Ｖｉｒｔｕａｌ  Ｗｉｒｅｓのコンセプト（文献
＜６＞）を使って互いに接続された数個のＦＰＧＡから成るハードウェアで構成
される。ＶＳｔａｔｉｏｎは比較的大規模なエミュレータで、「Ｔｒａｎｓａｃ
ｔｉｏｎ  Ｉｎｔｅｒｆａｃｅ  Ｐｏｒｔａｌ」と呼ばれるＩＫＯＳの専用イン
ターフェースを使ってワークステーションに接続できる。ＩＫＯＳのシステムは
主にエミュレーション市場をターゲットとする。
【００３１】
（４）ＡＸＩＳ
ＡＸＩＳ  （ｈｔｔｐ：  ／／ｗｗｗ．ａｘｉｓｃｏｒｐ．ｃｏｍ）  が販売
するＸｔｒｅｍｅシミュレーション・アクセラレーション・システムも、数個の
ＦＰＧＡで構成される。ＡＸＩＳのシステムとソフトウェア・シミュレータ「Ｘ
ｃｉｔｅ」を組み合わせると、ハードウェアとソフトウェアの間の「ホットスワ
ップ」が可能になる。最初はハードウェアで加速されたシミュレーションが使用
され、設計のバグが発見されると設計全体がソフトウェアに効率的にスワップさ
れてデバッグが行われる。
【００３２】
（５）その他
Ａｖｅｒｙ  Ｄｅｓｉｇｎ  Ｓｙｓｔｅｍｓは、「ＳｉｍＣｌｕｓｔｅｒ」と
呼ばれる製品を販売している。この製品を使用すると、複数のＣＰＵ間でｖｅｒ
ｉｌｏｇシミュレーションを効率的に分布することができる。この製品は単独で
ライセンス利用することも、サード・パーティｖｅｒｉｌｏｇシミュレータと併
用することもできる。Ｌｏｇｉｃ  Ｅｘｐｒｅｓｓは「ＳＯＣ−Ｖ２０」という
製品を提供している。この製品も、数個のＦＰＧＡとシミュレーション・アクセ
ラレーションのための配線論理で構成される。
【発明の開示】
【発明が解決しようとする課題】
【００３３】
従来のハードウェア支援シミュレータの使用や専用ハードウェア・エミュレー
タのパフォーマンスはソフトウェア・シミュレータのそれを大幅に上回るが、コ
ストも大幅に高い。
【００３４】
従来のハードウェア支援サイクル・ベース・シミュレーションでは、再構成可
能性によりＦＰＧＡ上で論理回路をエミュレートすることが可能になり、さらに
は空間パラレリズムの使用による並行性の処理が可能になる。しかし、単一のＦ
ＰＧＡで数個の論理設計をエミュレートすることはできるが、サイズに限界があ
り、大規模な回路では１個を一度に収容することはできない。
【００３５】
また、複数ＦＰＧＡによるエミュレーション・システムは、スケーラビリティ
とコスト効果の両面でこの問題に対処できない。また、ＦＰＧＡを接続するピン
の数が限られていることがボトルネックとなって論理利用率が低下し、一部のＦ
ＰＧＡは部分的にしか使用されないという結果になる。さらに、これらのピンは
比較的低速なオンボード相互接続ワイヤを使用しており、これもエミュレーショ
ン速度を低下させる要因となる。、一部のエミュレーション・ベンダ（Ａｘｉｓ
など）はシステム内で複数のＦＰＧＡと専用設計のハードウェアを使用しており
、製品価格は数十万ドル〜数百万ドルにも上っている。
【００３６】
物理的に小規模なＦＰＧＡ上で大規模な設計を時分割し、回路全体ではなく、
部分的にエミュレーションを行う方法では、ピンの制約も、複数ＦＰＧＡの採用
によるソリューションの高コストの問題も解消されるが、ＦＰＧＡの再構成に要
するオーバーヘッドのためにパフォーマンスが低下する。ほとんどの汎用ＦＰＧ
Ａは頻繁な再構成を見越した設計がなされていないので、再構成のために用意さ
れているＩ／Ｏピンはごく少数しかない。そのため、構成の帯域幅は非常に小さ
く、再構成時には大幅な遅延が発生すると共に、スケーラビリティに問題がある
。
【００３７】
イベント・ドリブン・シミュレーションの欠点は、本質的に直列であり、メモ
リ使用量が大きいために、低レベルのシミュレーション・パフォーマンスしか実
現されないことである。
【００３８】
均一化されたコンパイル済みコード論理シミュレータ（サイクル・ベース・シ
ミュレータはこれから派生されたもの）では、イベント・ドリブン・シミュレー
タよりもはるかに高いシミュレーション・パフォーマンスを得られる可能性があ
るが、任意のゲート遅延によってシミュレートできないという欠点がある。
【００３９】
論理エミュレーションのための単一ＦＰＧＡを使用することには、２つの大き
な問題がある。
【００４０】
・スケーラビリティの欠如：ＦＰＧＡに収まらない設計は、全体を１度にエミ
ュレートすることはできない。このような設計を一部分ずつエミュレートするた
めには再構成を繰り返し実行する必要があり、市販のＦＰＧＡでは非常に時間が
かかる。
【００４１】
・長いコンパイル時間：従来のＦＰＧＡツール・フローは複雑で、大規模な設
計では数時間から数日間の時間を要する。また、これによるシミュレーション・
オーバーヘッドの増大により、設計時間と市場投入までの期間に重大な影響が生
じる。
【００４２】
複数ＦＰＧＡシステムであるエミュレーション・システムは、典型的には、相
互接続された多数の市販ＦＰＧＡで構成され、大規模な設計をエミュレートする
ことが可能になるが、ＦＰＧＡ間通信に使用できるピンが少ないため、各ＦＰＧ
Ａの利用率は大幅に低下する。ピンが少ないためにＦＰＧＡは部分的にしか埋め
られず、無駄が生じるのである。
【００４３】
本発明は、従来技術に関連する欠点を解消し、上記問題のいくつかを解決する
ことを目指すものである。具体的には、本発明による手法は少なくとも、(i)低
コスト、(ii)ハイ・パフォーマンス、(iii)低いターンアラウンド・タイム、（i
v）高いスケーラビリティ、という４つの利点を提供する。すなわち、本発明は、
シミュレータ並みのコスト、スケーラビリティ、ターンアラウンド・タイムを実
現する一方で、非常に優れたパフォーマンスを達成するハードウェア・アクセラ
レーション・システムを提供することを目的とする。
【課題を解決するための手段】
【００４４】
上記の目的を達成するために、本発明は、論理チップを内蔵する汎用回路基板と
メモリで構成される、機能シミュレーションのためのハードウェア・アクセラレ
ーション・システムを提供する。この回路基板は、コンピューティング・デバイ
スにプラグ接続できる。このシステムは、コンピューティング・デバイスが、回
路基板とそのコンピューティング・デバイスに関連するメモリの間のＤＭＡ転送
を誘導するように適応される。回路基板はさらに、シミュレーション・プロセッ
サを使用して構成することも可能である。シミュレーション・プロセッサは、少
なくとも１つの回路設計用としてプログラムすることができる。
【００４５】
他の特定の機能増強では、ＦＰＧＡにシミュレーション・プロセッサがマッピ
ングされる。
【００４６】
他の特定の機能増強では、シミュレート対象の回路のネットリストがシミュレ
ーション・プロセッサ用にコンパイルされる。
【００４７】
他の特定の機能増強では、シミュレーション・プロセッサは、少なくとも１つ
の要素プロセッサと、前記少なくとも１つの要素プロセッサに対応する１つ以上
のレジスタを有する少なくとも１つのレジスタ・ファイルとをさらに備える。
【００４８】
他の特定の機能増強では、シミュレーション・プロセッサは、少なくとも１つ
のメモリ・バンクを有する分散メモリ・システムをさらに備える。
【００４９】
他の特定の機能増強では、前記少なくとも１つのメモリ・バンクが、要素プロ
セッサ・セットとそれに関連するレジスタのために使用される。
【００５０】
他の特定の機能増強では、レジスタをメモリ・バンク上にスピル処理すること
ができる。
【００５１】
他の特定の機能増強では、システムは、前記少なくとも１つの要素プロセッサ
を他の要素プロセッサと接続する相互接続システムをさらに備える。
【００５２】
他の特定の機能増強では、要素プロセッサは任意の２入力ゲートをシミュレー
トできる。
【００５３】
他の特定の機能増強では、要素プロセッサはＲＴレベルのシミュレーションを
実行できる。
【００５４】
他の特定の機能増強では、接続はレジスタを介して行われる。
【００５５】
他の特定の機能増強では、相互接続ネットワークはパイプライン処理される。
【００５６】
他の特定の機能増強では、レジスタ・ファイルは関連の要素プロセッサに近接
して配置される。
【００５７】
他の特定の機能増強では、分散メモリ・システムは各レジスタ・ファイルに対
応する専用ポートを有する。
【００５８】
他の特定の機能増強では、システムは、ネットリストが基板上のメモリに収ま
らない場合は、ネットリストのパーティションを１度に１つずつ処理することが
できる。
【００５９】
他の特定の機能増強では、システムは、ネットリストのパーティションを順次
シミュレートすることにより、ネットリスト全体をシミュレートできる。
【００６０】
他の特定の機能増強では、システムは、回路の試験に使用されるシミュレーシ
ョン・ベクトルのサブセットを処理することができる。
【００６１】
他の特定の機能増強では、システムは、各サブセットを順次シミュレートする
ことにより、シミュレーション・ベクトル・セット全体をシミュレートできる。
【００６２】
他の特定の機能増強では、アクセラレーション・システムは、設計内の全レジ
スタの状態を交換する能力を有する汎用ソフトウェア・シミュレータと交互に使
用されることができる。
【００６３】
他の特定の機能増強では、２値化、４値化いずれのシミュレーションもシミュ
レーション・プロセッサ上で実行できる。
【００６４】
他の特定の機能増強では、システムはインターフェース及び演算コードをさら
に備え、前記演算コードはシミュレーション・ベクトルに関連する読み取り、書
き込み、その他の演算を指定する。
【００６５】
他の特定の機能増強では、シミュレーション・プロセッサは、少なくとも１つ
の演算論理回路  （ＡＬＵ：  ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）
、ゼロかそれ以上の符号付き乗算子、各々が前記ＡＬＵ及び前記乗算子と関連付
けられた少なくとも１つのレジスタを有する分散レジスタ・システムをさらに備
える。
【００６６】
他の特定の機能増強では、システムは各ＡＬＵ用のキャリー・レジスタ・ファ
イルを備え、当該レジスタの幅は対応するレジスタの幅と同じである。
【００６７】
他の特定の機能増強では、システムが、レジスタを接続するパイプライン処理
されたキャリーチェーン相互接続を備える。
【００６８】
他の態様では、回路の論理シミュレーションを実行する方法が提供され、当該
方法は、シミュレーション・プロセッサ用の命令セットを生成するための回路に
対応するネットリストをコンパイルするステップと、命令をシミュレーション・
プロセッサに対応するオンボード・メモリにロードするステップと、オンボード
・メモリ上にシミュレーション・ベクトル・セットを転送するステップと、シミ
ュレート対象のネットリストに対応する命令セットをシミュレーション・プロセ
ッサが構成されているＦＰＧＡ上にストリーミングするステップと、命令セット
を実行して結果ベクトル・セットを生成するステップと、結果ベクトルをホスト
・コンピュータ上に転送するステップとを備える。
【００６９】
本発明のさらに他の態様では、シミュレーション・プロセッサ用の回路のネッ
トリストをコンパイルする方法が提供され、前記方法は、グラフのノードが設計
内のハードウェア・ブロックに対応する有向グラフとして回路の設計を表現する
ステップと、スケジュールされる準備が完了したノードのレディフロント・サブ
セットを生成するステップと、レディフロント・セットに対してトポロジカル・
ソートを実行するステップと、現在に至るまで未選択のノードを選択するステッ
プと、命令を完了し、使用できる要素プロセッサがない場合は新しい命令に進む
ステップと、選択されたノードに対応する演算を実行するために、関連する解放
されたレジスタ数が最も多い要素プロセッサを選択するステップと、オペランド
をレジスタから選択された要素プロセッサまで経路指定するステップと、未選択
のノードがなくなるまで反復するステップとを備える。
【発明の効果】
【００７０】
以上説明したように本発明によれば、(i)低コスト、（ii）ハイ・パフォーマ
ンス、(iii)低いターンアラウンド・タイム、（iv）高いスケーラビリティ、と
いう４つの利点を有するハードウェア・アクセラレーション・システムを実現す
ることが可能となる。すなわち、シミュレータ並みのコスト、スケーラビリティ
、ターンアラウンド・タイムを実現する一方で、非常に優れたパフォーマンスを
達成する。
【発明を実施するための最良の形態】
【００７１】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００７２】
１．ハードウェア・アクセラレーション・システム
ここでは、本発明による手法を利用する実装例であるオーバーオール・ハード
ウェア・アクセラレーション・システムについて説明する。
【００７３】
ＳｉｍＰＬＥ  ｉｎｔｅｒｍｅｄｉａｔｅ  ａｒｃｈｉｔｅｃｔｕｒｅ（Ｓｉ
ｍＰＬＥ中間アーキテクチャー：以下、ＳｉｍＰＬＥと称する）２．６（例えば
、図２〜４に示すもの）は、シミュレーション・プロセッサに関連する本発明に
よる手法の実装例である。なお、ここで説明される特定のアーキテクチャと実装
は例示にすぎず、いかなる形であれ権利請求される発明を限定するものと解釈し
てはならないことは明らかである。当該技術に精通する当業者には、本発明によ
る手法の範囲から逸脱することなく、多数の代替実装が可能であることが理解さ
れるであろう。さらに、これらの例はＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍ
ａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）２．２を使用して説明されているが、任意の
論理チップを使用できることは言うまでもない。
【００７４】
ＦＰＧＡ２．２上でネットリストを時分割することは、通常、多大な構成上の
オーバーヘッドを伴う。それは、ほとんどのＦＰＧＡは構成ビット用としてごく
わずかなピンしか備えていないためである。本発明では、この構成帯域幅の問題
を、シミュレーション・プロセッサの概念を導入することによって解決する。以
下では、「ＳｉｍＰＬＥ」と称する、こうしたシミュレーション・プロセッサの
例について説明する。
【００７５】
ＳｉｍＰＬＥ２．６は、ネットリストのコンパイル先となる仮想概念である。
ＦＰＧＡ２．２上で１度構成された後、ＳｉｍＰＬＥ２．６は、ＳｉｍＰＬＥコ
ンパイラと呼ばれるコンパイラ例を使用して、様々な回路設計に対応してプログ
ラムされる  （すなわち、ＳｉｍＰＬＥ上で異なるネットリストをシミュレート
できる）。ＳｉｍＰＬＥ用の命令は、ＦＰＧＡのデータＩ／Ｏピンを使用するた
め、構成帯域幅が小さくても影響はない。
【００７６】
（１）オーバーオール・システム例
ここで説明するオーバーオール・ハードウェア・アクセラレーション・システ
ムは、市販のＦＰＧＡ、メモリ、ＰＣＩコントローラ、ＤＭＡコントローラを有
する汎用ＰＣＩ基板で構成されるので、当然ながらどんなコンピューティング・
システムにもプラグ接続が可能である。基板はホストのメモリに直接アクセスで
き、その動作はホストによって制御されると想定する。したがってホストは、メ
イン・メモリと、ＦＰＧＡがアクセス可能な基板上のメモリとの間のＤＭＡ転送
を誘導できる。さらに、本発明による手法を使用する場合は、基板メモリは、Ｆ
ＰＧＡか、（ＰＣＩインターフェースを介して）  自身に随時アクセスするホス
トのいずれかとシングルポート接続されるだけでよい。
【００７７】
図２は、本発明による手法のシミュレーション技法を示す。回路のコンパイル
済み（コンパイラ２．５による）ＳｉｍＰＬＥ命令はシミュレーション・ベクト
ル・セットと共に、ＤＭＡを使用してオンボード・メモリ２．１に転送される。
各命令は、ＳｉｍＰＬＥ２．６内の各要素プロセッサ（ＰＥ：  ｐｒｏｃｅｓｓ
ｉｎｇ  ｅｌｅｍｅｎｔ）２．３１〜２．３４の演算を指定する。各命令は、ネ
ットリストの１つのスライスを表す。すべての命令を実行すると、１つのシミュ
レーション・ベクトルのネットリスト全体がシミュレートされる。そのため、各
シミュレーション・ベクトルについて、すべての命令が基板のメモリからＦＰＧ
Ａ２．２にストリーミングされ、その結果ベクトルが戻されてオンボード・メモ
リ２．１に格納される。ＳｉｍＰＬＥ命令が基板上のＦＰＧＡメモリ・バスより
も大きい場合は、細かく時分割され、ＦＰＧＡ２．２上のエクストラ・ハードウ
ェアを使って再編成される。すべてのシミュレーション・ベクトルの処理が完了
したら、結果ベクトルがＤＭＡ処理（ＤＭＡ／ＰＣＩコントローラ２．３による
）により基板からホスト２．４に戻される。これにより、必要であればまた別の
シミュレーション・ベクトルをシミュレートできるようになる。シミュレーショ
ン全体のホスト制御は、ＡＰＩ３．１（図３に図示）を介して行われる。
【００７８】
シミュレーション速度を定量化するため、ユーザ・サイクル、プロセッサ・サ
イクル（文献＜１６＞で定義されるものと同様）、及びＦＰＧＡサイクルを定義
する。ＦＰＧＡサイクルは、ＳｉｍＰＬＥ２．６が構成されたＦＰＧＡ２．２の
クロック期間である。プロセッサ・サイクルは、ＳｉｍＰＬＥ２．６が動作する
速度である。これは、１つのＳｉｍＰＬＥ命令が完了するまでの所要時間として
定義される。通常、１つの命令は１回のＦＰＧＡサイクルで完了するので、プロ
セッサ・サイクルはＦＰＧＡサイクルと同一である。ただし、命令が時分割され
る場合（すなわち、ＳｉｍＰＬＥ命令がＦＰＧＡメモリ・バスより大きい場合）
、プロセッサ・サイクルはＦＰＧＡサイクルより長くなる。例えば、ＳｉｍＰＬ
Ｅ命令がＦＰＧＡメモリ・バスの２倍の幅を有する場合、プロセッサ・サイクル
はＦＰＧＡサイクルの２倍となる。最後に、ユーザ・サイクルは、単一のシミュ
レーション・ベクトルのネットリストを完全にシミュレートする（すなわちすべ
ての命令を処理する）ために要する時間である。
【００７９】
次に、シミュレーション速度を定量化する。命令幅がＩＷのＳｉｍＰＬＥアー
キテクチャをターゲットとする場合に、ＳｉｍＰＬＥコンパイラ２．５は１つの
ネットリストにつきＮ個の命令を生成すると想定する。ＦＰＧＡメモリ・バス幅
がＢＷ、ＦＰＧＡクロック・サイクルがＦＣの場合、ユーザ・サイクルＵＣ及び
シミュレーション速度Ｒは以下によって得られる。
ＵＣ＝Ｎ×[ＩＷ／ＢＷ]×ＦＣ  （１）
Ｒ＝1/Ｕｃ  （２）
【００８０】
従って、シミュレーション速度は、(i)コンパイラによって生成される命令の
個数、(ii)命令幅、及び(iii)ＦＰＧＡクロック・サイクル、を減少させること
により高めることができる。
【００８１】
超大規模回路のコンパイルによってオンボード・メモリに収まらない命令が過
剰に生成された場合、命令は細かく分割されて個別にＤＭＡ処理される。この処
理は全体的なパフォーマンスに影響を及ぼすが、ＳｉｍＰＬＥ２．６のスケーラ
ビリティは維持される。ただし、オンボード・メモリをアップグレードすれば、
パフォーマンスの損失を生じさせずにスケーラビリティを実現することができる
。また、メモリ量を調整することにより、超大規模ネットリストをシミュレート
することも可能になる。例えば、２５６ＭＢのＳＤＲＡＭを備える基板であれば
、５，０００万ゲート・ネットリストの命令をすべて保持できる。
【００８２】
本発明による手法（特にＳｉｍＰＬＥ）  の１つの目標は、汎用論理チップ  
（例えば、ＦＰＧＡ基板など）  を使用できる安価なハードウェア・アクセラレ
ータを作成することである。この基板は市販のＦＰＧＡ、メモリ、ＰＣＩインタ
ーフェースで構成されるので、事実上あらゆるコンピューティング・システムと
の互換性を有する「プラグ・アンド・プレイ」である。この基板はメイン・メモ
リに直接アクセスできると想定されるが、その動作はホスト２．４のＣＰＵによ
って制御される。
【００８３】
図３は、本発明の技法のもう１つの例を示す。ゲート回路（ＭＵＬＴＩ−ＭＩ
ＬＬＩＯＮ  ＧＡＴＥ  ＣＩＲＣＵＩＴ）３．２のコンパイル済み命令（Ｓｉｍ
ＰＬＥ命令）はシミュレーション・ベクトル・セットと共に、ＤＭＡを使用して
オンボード・メモリ２．１に転送される。それ以降の各シミュレーション・ベク
トルについては、すべての命令が１ユーザ・サイクル（すなわち１シミュレーシ
ョン・サイクル）に相当するＦＰＧＡ２．２を介してストリーミングされ、対応
する結果ベクトルが基板メモリに戻されて格納される。すべてのシミュレーショ
ン・ベクトルの処理が完了したら、結果ベクトルはＤＭＡ処理によりホストのメ
イン・メモリ３．３に戻される。まだ試験ベクトルが残っている場合は、この時
点でそれらも同様にシミュレートできる。
【００８４】
超大規模回路のコンパイルによってオンボード・メモリに収まらない命令が過
剰になった場合は、命令を細かく分割し、個別にＤＭＡ処理する。これによって
全体的なパフォーマンスが影響されるが、ＳｉｍＰＬＥ２．６のスケーラビリテ
ィは維持される。ただし、オンボード・メモリ２．１をアップグレードすれば、
パフォーマンスの損失を生じさせずにスケーラビリティを実現することができる
。例えば、２５６ＭＢのＤＲＡＭを備える基板であれば、２，０００万ゲート・
ネットリストのシミュレーションが可能である。
【００８５】
以降の項では、命令とシミュレーション・ベクトルの転送プロセスと、ハード
ウェア・シミュレーションの実行に必要なインターフェース・ソフトウェアにつ
いて説明する。
【００８６】
ａ）命令の転送
ほとんどのＳｉｍＰＬＥ構成は大規模なＶｉｒｔｅｘ−２  ＦＰＧＡに楽に収
まるが、中には命令語が大きいものもある。例えば、プロセッサ×６４、レジス
タ×６４、レジスタ読み取りポート×２、１６Ｋメモリ・ブロック×３２を有す
るシミュレーション・プロセッサは、１個の命令につき３０８０ビットを必要と
する。最大規模Ｖｉｒｔｅｘ−２  ＦＰＧＡのデータ・ピンアウトは１１００程
度である。そのため、命令を時分割して、複数プロセッサ・サイクルでＦＰＧＡ
に転送する必要がある。ＨＤＬジェネレータがこの処理を担当し、命令の時分割
を可能にする専用ハードウェアを生成する。このエクストラ・ハードウェアはＳ
ｉｍＰＬＥアーキテクチャの一部を成し、基板上に存在するＦＰＧＡパッケージ
に固有なハードウェアとして使用される。
【００８７】
ｂ）シミュレーション・ベクトルの転送
シミュレート対象のネットリストの１次入力から成る値セットは、シミュレー
ション・ベクトルを表す。ネットリストの機能性を検証する際には、数個のシミ
ュレーション・ベクトルが使用されるのが一般的である。シミュレーションでは
、各ベクトルについて出力ベクトルまたは結果ベクトルが計算される。そのため
、ＳｉｍＰＬＥ２．６は３種類の「基板レベル」の命令を処理しなければならな
い。この３種類とは、シミュレーション・ベクトルを表す命令、ＳｉｍＰＬＥコ
ンパイラ２．５によって生成された実際のＳｉｍＰＬＥ命令を表す命令、及び結
果ベクトルの読み取りが行われる専用命令である。
【００８８】
１次入力（ＰＩ：  ｐｒｉｍａｒｙ  ｉｎｐｕｔ）は、オンボード・メモリか
らＳｉｍＰＬＥ２．６内のローカル・スクラッチパッド・メモリに書き込まれ、
要素プロセッサによってアクセスされる。同様に、１次出力（ＰＯ：ｐｒｉｍａ
ｒｙ  ｏｕｔｐｕｔ）はＳｉｍＰＬＥ２．６内の要素プロセッサ２．３１〜２．
３４によってスクラッチパッド・メモリに書き込まれ、オンボード・メモリから
読み出される。
【００８９】
ゲート・レベルの大規模回路は、数百個のシミュレーション・ベクトル・ビッ
トを有する。これらのシミュレーション・ベクトルの転送もやはり、時分割する
必要がある。命令を時分割する場合とは異なり、シミュレーション・ベクトルに
必要な時分割の度合いは、ネットリストによって決まる。ＳｉｍＰＬＥアーキテ
クチャはシミュレート対象のネットリストに非依存でなければならないので、シ
ミュレーション・ベクトルを時分割するための専用ハードウェアをＳｉｍＰＬＥ
２．６上に存在させることはできない。そのため、次項で説明するＳｉｍＰＬＥ
インターフェース・ソフトウェアがこの時分割を担当する。各サイクルでは、入
力シミュレーション・ベクトルはオンボード・メモリからＳｉｍＰＬＥ２．６の
（ＦＰＧＡ２．２上の）スクラッチパッド・メモリに直接ロードされる。
【００９０】
スクラッチパッド・メモリにロードできる最大ビット数は、総メモリ帯域幅に
等しい。シミュレーション・ベクトルが最大メモリ帯域幅よりも長い場合は、イ
ンターフェース・ソフトウェアがシミュレーション・ベクトルをメモリ帯域幅に
等しい語数に分割する。各シミュレーション・ベクトルには、それを識別する適
切な演算コードが付加される。
【００９１】
１次出力についても同様の手順が行われ、メモリ帯域幅に等しいペースでＦＰ
ＧＡ２．２からオフロードされる。
【００９２】
ｃ）ＳｉｍＰＬＥインターフェース・ソフトウェア
インターフェース・ソフトウェアは、ユーザが指定したシミュレーション・ベ
クトルとコンパイラによって生成されたＳｉｍＰＬＥ命令を入力として、基板レ
ベルの命令を生成する。これらの命令は、ＦＰＧＡ２．２基板に備えられるＡＰ
Ｉを使用して、ＤＭＡ処理によりオンボード・メモリ２．１上に転送される。
【００９３】
基板レベルの命令は、入力シミュレーション・ベクトル、出力シミュレーショ
ン・ベクトル、実際のシミュレーション・プロセッサ命令の３つを区別する。こ
の３つのケースの区別は、３種類の演算コードを使用して行われる。演算コード
・ビットは、基板レベルの命令を生成するために、入力シミュレーション・ベク
トル・ビットまたはＳｉｍＰＬＥ命令ビットの前に埋め込まれる。演算コードが
出力シミュレーション・ベクトルを示す場合は、残りの命令ビットはトライステ
ート・バスを使用してＳｉｍＰＬＥ２．６から読み取られる。
【００９４】
インターフェース・ソフトウェアは、適切な演算コード・ビットを埋め込むこ
とに加えて、１次入力及び出力ベクトルの編成も行う。シミュレーション・ベク
トルはユーザによって順に指定される。ただし、シミュレーション・ベクトルは
ＳｉｍＰＬＥ２．６のスクラッチパッド・メモリ・ブロックに直接転送されるの
で、ビットはメモリ構成に基づいて再編成される。さらに、ＳｉｍＰＬＥから送
出されるＰＯも同様に再編成され、最終的な結果ベクトルが生成される。
【００９５】
２．アーキテクチャ
ここでは、単一の汎用ＦＰＧＡ２．２を使用して大規模な設計をシミュレート
する際に遭遇される問題に焦点を当てる。ＦＰＧＡ２．２は通常、数百万個のゲ
ートを有するネットリストをエミュレートするのには小さすぎる。そのため、最
初にネットリストをデバイスに収まるサイズのパーティションに分割する必要が
ある。その後は、ＦＰＧＡ２．２を繰り返し再構成することにより、パーティシ
ョンが順次シミュレートされる。このソリューションはネットリストのサイズに
合わせて拡張可能であるが、（構成帯域幅が小さいことにより）ＦＰＧＡ２．２
内の再構成オーバーヘッドが増大するため、実用には適さない。
【００９６】
本発明においては、この構成帯域幅の問題を、論理シミュレーション  （Ｓｉ
ｍＰＬＥ）のためのシミュレーション・プロセッサの概念を導入することによっ
て解決する。ＳｉｍＰＬＥ２．６は、ネットリストのコンパイル先となる仮想概
念である。ＳｉｍＰＬＥ２．６は、一旦ＦＰＧＡに構成された後は、ＳｉｍＰＬ
Ｅコンパイラ２．５を使用して様々な設計（もしくは、設計の様々な部分）  に
対応してプログラムされる。ＳｉｍＰＬＥ用の命令は、ＦＰＧＡ２．２のデータ
Ｉ／Ｏピンを使用するため、構成帯域幅が小さくても影響はない。
【００９７】
（１）ＳｉｍＰＬＥアーキテクチャ
ＳｉｍＰＬＥ２．６は、ＶＬＩＷアーキテクチャ・モデルをベースとする。こ
のようなアーキテクチャでは、ゲート・レベルのネットリスト・シミュレーショ
ンに豊富に存在する本質的なパラレリズムを利用できる。図４に、ＳｉｍＰＬＥ
２．６のテンプレートを示す。このＳｉｍＰＬＥ２．６のテンプレートは、相互
接続された非常に単純な機能単位、すなわち要素プロセッサ２．３１〜２．３４
の大規模なアレイで構成される。
【００９８】
各要素プロセッサ２．３１〜２．３４は、任意の２入力ゲートをシミュレート
できるため、各サイクルで多数のゲートを同時に評価することが可能である。こ
のテンプレートは、中間信号値を格納するための、高クロック速度できわめて高
いアクセス可能性を実現する分散レジスタ・ファイル・システム４．２を備える
。また、（ＦＰＧＡ２．２は多数のレジスタを有さないため）レジスタ数はハー
ドウェアの制約によって制限されるので、２層目のメモリ階層として、レジスタ
のスピル処理を可能にする分散メモリ・システム４．１が導入されている。これ
により、レジスタのメモリ・ロードとメモリ格納が可能になる。符号４．３はク
ロスバーである。
【００９９】
また、複数のメモリ・バンクの存在により、高速な同時アクセスが実現される
。格納できる中間信号値の数を制限するのは総メモリ・サイズだけであり、近年
のＦＰＧＡ２．２ではこのサイズを非常に大きくすることができる。例えば、大
型のＶｉｒｔｅｘ−ＩＩにおけるブロックＲＡＭの合計サイズは、約３５０万ビ
ットである。図５は、リソースの制約がないと想定した場合の、ＡＳＡＰスケジ
ュール用の典型的なネットリストに要する中間値の最大数を示す。ＦＰＧＡ上で
利用可能なメモリ容量は、中間値の格納に要する最大メモリ容量をはるかに上回
る。そのため、本発明のスキームは、単一ＦＰＧＡ論理シミュレーションの問題
を解決するための、スケーラブルで、高速で、しかも安価なソリューションを提
供する。
【０１００】
以上を要約すると、ＳｉｍＰＬＥ２．６は以下によって特徴付けられる。
【０１０１】
・要素プロセッサ（ＰＥ）数。各要素プロセッサは、単一ゲートとすることも
、より複雑なゲート（例えば、ＮＡＮＤ、ＮＯＲ、ＯＲ、ＮＯＲの組み合わせな
ど）とすることもできる。ここでは、これをＳｉｍＰＬＥの「幅」と呼ぶ。
【０１０２】
・各レジスタ・ファイルに含まれるレジスタ数。本発明による実装では、各要
素プロセッサが個々のレジスタ・ファイルを格納する形で分散される。こうした
分散レジスタ・ファイル・システムにより、大規模な汎用マルチポート型のレジ
スタ・ファイルに比較して高速なアクセスが可能になる。
【０１０３】
・各レジスタ・ファイル上の読み取りポート数。
【０１０４】
・各メモリ・バンクのサイズ。
【０１０５】
・各メモリ・バンクのポートの（ＰＥの観点から見た）スパンまたは数。メモ
リ・バンク内のポート数は、ＰＥ数、すなわちバンク・スパンに等しい。そのた
め、各ＰＥはメモリ・バンクに同時にアクセスできる。
【０１０６】
・各メモリ語のサイズ。これはメモリ・アクセスの単位である。
【０１０７】
・メモリ・ラテンシー、すなわち、１回のメモリ・ロードまたはメモリ格納を
実行するために要するサイクル数。
【０１０８】
・相互接続ラテンシー。これは、２個のＰＥ間を相互接続（図４において、ク
ロスバー４．３として図示）をパイプライン処理するために挿入されるエクスト
ラ・レジスタを意味する。ＦＰＧＡ２．２上でＳｉｍＰＬＥ２．６のインスタン
スを配置及び経路指定する間に、相互接続がクリティカル・パス上に存在するこ
とは頻繁にある。そのため、レジスタを挿入することで、計算効率をある程度犠
牲にして全体的なクロック速度を向上させることができる。
【０１０９】
上記の構成可能なパラメータとは異なり、ＳｉｍＰＬＥ２．６の以下の特性は
不変である。
【０１１０】
・ＰＥは単純な２入力ゲートである。
【０１１１】
・各レジスタ・ファイルは、自身の要素プロセッサによって書き込まれるか、
「メモリ・ロード」実行中にメモリから直接書き込まれることしかできない。
【０１１２】
・各レジスタ・ファイルは、１個のエクストラ読み取りポートを備えており、
これによってメモリ格納を行うことができる。
【０１１３】
・完全な相互接続（クロスバー４．３）は、各レジスタ・ファイルの各読み取
りポート（メモリ格納用の読み取りポートを除く）をシステム内の各ＰＥの入力
に接続する。
【０１１４】
（２）ＳｉｍＰＬＥの利点
ＳｉｍＰＬＥ２．６は、ＦＰＧＡベースか否かを問わず、ソフトウェア・サイ
クル・ベース・シミュレーション及びハードウェア・エミュレータに比較してい
くつかの本質的な利点を有している。
【０１１５】
ａ）パラレリズム
ＳｉｍＰＬＥ２．６では、複数個の要素プロセッサが単一サイクル内で同時に
実行できるため、サイクル・ベース・シミュレーション内に大量なパラレリズム
が存在できるという特性を利用できる。これは、従来のプロセッサ、すなわちソ
フトウェア実装では不可能だったことである。
【０１１６】
ｂ）レジスタ及びメモリへのアクセス
シミュレーション・プロセッサのアーキテクチャ・モデルでは、従来のＣＰＵ
でアクセス可能なレジスタ数よりもはるかに多数のレジスタに容易にアクセスで
きる。これにより単一サイクルでレジスタにアクセスすることが可能になるので
、この特性は重要である。また、メモリ・バンクが近接しているため、レジスタ
のスピル（あふれ）が発生した場合は高速なメモリ・アクセスが可能である。
【０１１７】
ｃ）構成可能性
ＳｉｍＰＬＥ２．６は汎用ＦＰＧＡ２．２上に構成される仮想アーキテクチャ
なので、コンパイラは最適なＳｉｍＰＬＥ構成をターゲットとするために必要な
柔軟性を備えている。例えば、アプリケーションによって、レジスタとメモリの
数を増やす必要がある場合もあれば、あるいは要素プロセッサの数を増やす方が
望ましい場合もある。こうした様々な状況に対応して、複数のＳｉｍＰＬＥ構成
を再コンパイルにより１個のライブラリにまとめ、コンパイラにこのライブラリ
から最適な構成を選択させることができる。このスキームを使用すると、毎回Ｆ
ＰＧＡ２．２の配置と経路指定のプロセスを実行するという煩雑さも解消される
。
【０１１８】
ｄ）スケーラビリティ
ＳｉｍＰＬＥ２．６は、ネットリストのサイズに対して透過であるという、ソ
フトウェア・ソリューションとよく似た特性を有する。ネットリストは命令セッ
トにコンパイルされる。命令は、任意の数だけＳｉｍＰＬＥ２．６上で実行でき
る。ＳｉｍＰＬＥ２．６のサイズが大きいほどパフォーマンスは向上するが、小
型のＳｉｍＰＬＥ２．６でもネットリストのシミュレーションは可能である。
【０１１９】
ｅ）構成帯域幅
ＳｉｍＰＬＥ２．６では、命令用のデータＩ／ＯピンによりＦＰＧＡの構成帯
域幅が小さいことによる問題を回避する。
【０１２０】
ｆ）ネットリストの分割
ネットリストが大きすぎる場合は基板メモリ内に収まるように分割し、各部分
を個別に転送することにより、スケーラビリティが維持される。
【０１２１】
生成される命令数は、ネットリストのサイズが大きくなるにつれて増える。大
きなネットリストの場合は、命令数が多すぎて基板メモリに収まらない可能性が
あるが、これによってシミュレーションが阻害されることはない。シミュレーシ
ョンは以下のように進行する。
【０１２２】
命令セットは、基板メモリに収まるサイズのサブセットに分割される。この命
令の分割は、ネットリストそのものを分割することに等しい。命令サブセットは
ＤＭＡ処理により個別に基板メモリに転送される。第１のサブセットがストリー
ミングによりＦＰＧＡ２．２を通過する際に、ネットリストのそれに対応する部
分がシミュレートされる。続いて基板メモリ内で第２のサブセットが第１のサブ
セットに取って代わり、プロセスが続行される。サブセット間では、シミュレー
ションされているネットリストの状態が維持される。
【０１２３】
例：大きな命令セットＩは、基板メモリに収まるサイズのＩ１とＩ２に分割さ
れる。最初に、シミュレーション・ベクトル・セットＴとＩ１がＤＭＡ処理によ
り基板メモリに転送される。シミュレーション・ベクトル・セットＴ内の第１の
シミュレーション・ベクトルｔ１に関連するＩ１内のすべての命令が、ストリー
ミングによりＦＰＧＡ２．２を通過する。続いて、Ｉ２がＤＭＡ処理により基板
メモリに転送され、Ｉ１に取って代わる。Ｉ２のすべての命令がストリーミング
によりＦＰＧＡ２．２を通過する。これでベクトルｔ１のシミュレーションが完
了する。ここで、シミュレーションの過程でＤＭＡ処理を行うためにパフォーマ
ンスに影響が出るが、本発明の手法のスケーラビリティは維持されることに留意
されたい。
【０１２４】
ｇ）シミュレーション・ベクトルの分割
大きなシミュレーション・ベクトル・セットの場合は、小さなブロックに分割
し、基板上で各ブロックを個別にシミュレートすることができる。シミュレーシ
ョンを行うためには、シミュレーション・ベクトルと命令の両方が基板メモリに
収まらなければならない。請求項１の本発明では、命令がメモリに収まらないケ
ースに対処している。
【０１２５】
シミュレーション・ベクトルが収まらない場合は、ブロックに分割し、各ブロ
ックを個別にシミュレートできる。例えば、設計には１００万個のベクトルがあ
るのにオンボード・メモリは（命令に加えて）５０万個のベクトルしか保持でき
ない場合、シミュレーション・ベクトル・セットは各々５０万個のベクトルから
成る２つのブロックに分割され、各ブロックが個別にシミュレートされる。これ
によってパフォーマンスが大幅に低下することはない。
【０１２６】
h)レジスタの可視化
シミュレーションの１次出力は、内部レジスタの状態を反映しない。内部レジ
スタを可視化するため、本発明による技法ではＳｉｍＰＬＥメモリ内の特定のロ
ケーションからロードと格納を行う。シミュレーション後、基板レベルの命令が
これらのメモリ・ロケーションからレジスタ値を抽出する。ここで、次の２点に
留意されたい。（ａ）ＳｉｍＰＬＥ２．６のメモリにおいてレジスタが実際に存
在するロケーションは重要ではなく、任意のロケーションを使用できる。コンパ
イラとツールがレジスタの格納場所を認識している限り、基板レベルの命令を使
ってその値を抽出し、それを使用して可視化することができる。（ｂ）基板レベ
ルの命令は、コンパイラが生成する命令とは異なる。これらの命令は、(i)シミ
ュレーション・ベクトルをＦＰＧＡ２．２に入れる、(ii)コンパイラ命令をＦＰ
ＧＡ２．２に入れる、(iii)ＦＰＧＡから結果を取得する、（iv）ＦＰＧＡ２．
２からレジスタ値を取得する、という４つの機能を実行する。
【０１２７】
ｉ）汎用シミュレータへのインターフェース
シミュレーション・プロセッサは、汎用ソフトウェア・シミュレータにインタ
ーフェースできる。本発明の手法では、設計の状態を切り替えることによってシ
ミュレーション・プロセッサを汎用ソフトウェア・シミュレータにインターフェ
ースする。例えばユーザは、ソフトウェア・シミュレータを使用したイベント・
ドリブン・シミュレーションの途中に、シミュレート対象の回路状態の全体をＳ
ｉｍＰＬＥ２．６に切り替えて多数のベクトルの機能シミュレーションを実行し
、その後再度切り替えて最終状態をソフトウェア・シミュレータに戻すことがで
きる。したがって、ＳｉｍＰＬＥ２．６はソフトウェア・シミュレータにとって
の透過なバックエンド・アクセラレータとなることができる。
【０１２８】
ここで、状態の切り替えはレジスタを可視化する手法を使用して実行できるこ
とに留意されたい。
【０１２９】
ｊ）２値化及び４値化シミュレーション
４値化シミュレーションを実行するため、上記シミュレーション・プロセッサ
の各ワイヤは幅２ビットとする。幅２ビットのワイヤは、０、１、Ｘ、Ｚの４状
態を表すことができる。シミュレーション・プロセッサの全体的なアーキテクチ
ャは変わらない。
【０１３０】
３．ＲＴＬ回路のアーキテクチャ
図２２に示すように、本発明による手法を拡張してＲＴＬ回路に適用すること
は容易である。ＲＴレベルの回路のシミュレーションを加速するためのシミュレ
ーション・プロセッサのアーキテクチャは、各々幅ｂビットで、加算、減算、符
号拡張、比較、及びビット単位のブール演算の機能を有する演算論理回路（ＡＬ
Ｕ）アレイ（うち１つを２２．１として図示）を備える。
【０１３１】
また、各々幅ｂビットの結果を生成する符号付き乗算子アレイ（うち１つを２
２．２として図示）も備える。さらに、要素プロセッサに近接した位置に、分散
レジスタ・ファイル・システム２２．３も備える。この分散レジスタ・ファイル
・システム２２．３は、少数の読み取り及び書き込みポートと、相互接続ラテン
シーに等しいアクセス時間を有する。さらに、すべての分散レジスタ・ファイル
を接続するｂビットのクロスバーラインから成るメイン相互接続システム２２．
４を備える。各ＡＬＵ用として、ＡＬＵ演算から得られたキャリー値を保持する
ための別個のビット幅キャリー・レジスタ・ファイル２２．５を備える。パイプ
ライン処理されたキャリーチェーン・クロスバー相互接続システム２２．６は、
ビット幅キャリー・レジスタ・ファイル２２．５を互いに接続して、ＡＬＵ間で
のパイプライン処理によるキャリー伝搬を可能にする。分散メモリ・システム（
分散レジスタ・ファイル・システム２２．３）は、ＡＬＵ２２．１に近接して配
置される。上記アーキテクチャから外部メモリへのインターフェースは基板上に
配置され、当該インターフェースはベクトルと演算の読み取りと書き込みを指定
する命令と演算コードから成る。
【０１３２】
４．コンパイラ
（１）定義
コンパイラについて詳細に説明する前に、いくつかの共通して使用される用語
を定義する。
【０１３３】
「設計」とは、シミュレート対象のゲートレベルのネットリストである。設計
は、完全に自己充足型のハードウェアのことも、あるいはシミュレーションの加
速が必要な大規模ネットリストの一部を表すこともある。設計の１次入力から成
る値セットは、シミュレーション・ベクトルを表す。設計の機能性を検証する際
には、数個のシミュレーション・ベクトルが使用されるのが一般的である。各ベ
クトルについて、１個の出力ベクトルまたは結果ベクトルが取得される。
【０１３４】
設計は、有向グラフによって表される。グラフのノードは、設計内のハードウ
ェア機能ブロックに対応する。１個のノードは複数入力を有することができるが
、出力は多くて１個である。設計の入力ポートは入力のないノードであり、設計
の出力ポートは出力のないノードである。ワイヤ（「ネット」とも呼ばれる）は
、ノードを相互接続する。各ワイヤは単一の発信元（ドライバ）と、「ピン」と
呼ばれる複数の宛先（ファンアウト）を有する。
【０１３５】
コンパイラに関する記述では、１個のノードが特定の機能リソース（要素プロ
セッサ）に割り当てられることを、「スケジュールされる」という。ノードをス
ケジュールするためには、要素プロセッサ（ＰＥ）が解放されていて、そのノー
ドの演算を実行できる状態であること、及びそのＰＥにアクセス可能な少なくと
も１つのレジスタが解放されていて、ノードの出力を格納できる状態であること
が必要とされる。さらに、レジスタ・ファイルの相互接続とレジスタ・ポートを
使用して、ノードの入力がその発信元に正常に接続されることも必要である。後
者は、「入力経路指定」と呼ばれる。
【０１３６】
ノードは常に、そのすべての発信元が前のステップでスケジュールされた後に
スケジュールされる。具体的には、相互接続ラテンシーをＬとすると、あるノー
ドを現在のステップでスケジュールするためには、そのノードのすべての発信元
が少なくともＬタイム・ステップ前のステップでスケジュールされていなければ
ならない。
【０１３７】
ノードがあるタイム・ステップでスケジュール可能であれば、そのノードはそ
のタイム・ステップにおいて「準備完了状態にある（レディ）」とされる。概し
て、ノードは、そのすべての発信元が前のステップでスケジュールされている場
合は、準備完了状態にある。ただし、相互接続とメモリ・ラテンシーの制約を伴
うＳｉｍＰＬＥでは、ノードが準備完了状態となるためにはさらなる条件をクリ
アしなければならない。相互接続ラテンシーをＩＬ、メモリ・ラテンシーをＭＬ
とすると、ノードＮは以下の条件が満たされて初めて、そのタイム・ステップＴ
において準備完了状態にあるとみなされる。
【０１３８】
・Ｎの各発信元ノードが時間Ｔｓの時点ですでにスケジュールされている（こ
こで、Ｔ＞＝Ｔｓ＋ＩＬ）。
【０１３９】
・メモリからロードされたＮの発信元ノードに関するロードが、タイム・ステ
ップＴｌｓにおいて実行されている（ここで、Ｔ＞＝Ｔｌｓ＋ＩＬ＋ＭＬ）。
【０１４０】
スケジューリング・プロセスの何らかの時点において準備完了状態にあるノー
ド・セットは、「レディフロント」と呼ばれる。レディフロントは、２タイプの
ノードから成る。第１のタイプは、発信元が活性レジスタであるノード・セット
を表す。第２のタイプは、一部の発信元レジスタがメモリにスピルされたノード
・セットを表す。このようなノードは、「格納された入力を有するノード」と呼
ばれる。
【０１４１】
スケジュールの長さは、タイム・ステップの総数である。スケジュールの長さ
はまた、生成された命令数でもある。１つの設計とコンパイル済み命令のセット
があるとして、その「利用率」とは、スケジュールにおいて、演算、メモリ・ロ
ード、メモリ格納のいずれかを実行しているプロセッサの比率を意味する。アー
キテクチャ上の制約のため、いくつかのプロセッサが強制的にアイドル状態にさ
れるので、利用率は常に１００％未満となる。
【０１４２】
（２）スケジューリング・アルゴリズム
コンパイラは、リソースの制約条件のもとで設計をスケジュールする。コンパ
イラはノードを要素プロセッサにマッピングし、ワイヤはノードをレジスタに相
互接続する。レジスタは、レジスタ・ポートの制約条件に従いつつ、レジスタ全
体の利用率が最小化されるように割り当てられる。レジスタ・ファイルが満杯の
場合、コンパイラはレジスタをスピル処理してメモリに格納することを選択する
。これらのレジスタは、必要に応じて再度ロードされる。スケジューリング・ア
ルゴリズムは決定性で、非常に高速である（文献＜１０＞）。
【０１４３】
まず、ネットリストに対してトポロジカル・ソートが実行され、続いて制約条
件を解決するために数カ所にバッファが挿入される。これについては、後述のｆ
）項で詳細に説明する。その後、ノードは個別の命令にスケジュールされる。図
６に、アルゴリズム全体のフローを示す。以降の項では、フローの各部について
説明する。
【０１４４】
ａ）ノードのスケジューリング
コンパイル処理では、アーキテクチャのすべての制約条件に従いつつ、設計内
の各ノードのスケジューリングが行われる。ノードのスケジューリングは、以下
のステップから成る。
【０１４５】
・ノード選択。
レディフロントからスケジューリング対象のノードが選択される。この選択は
将来のノードの選択順序に影響を及ぼし、コンパクトなスケジュールを得る上で
きわめて重要な要因となる。
【０１４６】
・入力の経路指定。
レディフロントの各ノードは、そのすべての入力の経路指定を行える状態にな
って初めて、特定のタイム・ステップでスケジュールできるようになる。レジス
タ・ファイルに格納される値とＰＥの入力との間の経路指定が可能かどうかは、
相互接続と使用可能なレジスタ読み取りポート数によって決定される。クロスバ
ー相互接続が完成すると、１つのＰＥのレジスタ・ファイルと別のＰＥの入力と
の間でデータを直接転送することが可能になる。ただし、レジスタ・ポート数が
限定されるため、あるタイム・ステップにおいて特定のレジスタ・ファイルから
読み取ることのできる値の数も限定される。
【０１４７】
・ＰＥの割り当て。
入力の経路指定が完了すると、ノードは、使用済みのレジスタ数が最も少ない
要素プロセッサ上でスケジュールされる。これは、レジスタ利用率の最小化を図
る貪欲スキームである。
【０１４８】
・レジスタの割り当て。
ＰＥの割り当て後、ノードが配置されている要素プロセッサのレジスタ・ファ
イルにおいて解放されているレジスタが、ノード出力の格納用として割り当てら
れる。解放されたレジスタを有さないノードがそのＰＥに割り当てられることは
ないので、解放されたレジスタの使用可能性は保証される。
【０１４９】
ｂ）ノード選択ヒューリスティック
本発明の技法の目標は、ヒューリスティックスによって選択プロセスを迅速化
することにより、スケジュールの最小化と利用率の最大化を同時に実現すること
にある。コンパイラの実行時間は、ノード選択ヒューリスティックの最適度が高
くなるにつれて増大する。
【０１５０】
本発明の技法では、ノードＮの以下の２つの特性に注目して、スケジューリン
グの実現可能性を評価する。
【０１５１】
・Ｎをスケジュールすることによって解放されるレジスタ数。多数のレジスタ
を解放するノードの優先順位付けは、レジスタ利用率を最小化するための単純な
貪欲ストラテジである。
【０１５２】
・Ｎのファンアウト。ファンアウトが大きいノードは、将来のタイム・ステッ
プにおけるノードのスケジューリングの可能性を拡大させる。
【０１５３】
そのため、多数のレジスタを解放し、かつ高ファンアウトを有するノードが優
先される。図７に、ノード選択プロセスを図示する。
【０１５４】
ｃ）レジスタのメモリへの格納
解放されたレジスタを有さないノードを、タイム・ステップにおいてスケジュ
ールすることはできない。さらに、レディフロントに含まれるノードが相互接続
ラテンシーの制約条件を満たさない場合は、タイム・ステップが空になることが
ある。こうした状況のもとで、レジスタ・ファイルが満杯で、かつ解放された各
要素プロセッサ内で格納演算がスケジュールされる。
【０１５５】
活性レジスタは、その値をスクラッチパッド・メモリに格納することによって
満杯のレジスタ・ファイルから解放される。レジスタ・ファイル内のこのような
活性レジスタは、すでにスケジュールされたノードＮの出力であるが、その一部
のファンアウトはそのままスケジュール対象として残る。この時点では、Ｎは単
に、レディフロントに存在するそのファンアウト・ノード数に基づいて選択され
る。レディフロント内にファンアウトを有さない、使用可能な第１のノードが格
納される。レジスタ・ファイル内にこの制約条件を満たすノードが存在しない場
合は、レディフロント内のファンアウトが最も少ないノードが選択され、メモリ
に格納される。図８に、レジスタを格納するプロセスを示す。
【０１５６】
ｄ）メモリからのレジスタのロード
ノードＮの入力がスケジュールされ、一時的にメモリ格納されている場合は、
Ｎのスケジュールを行う前にそれをロードする必要がある。レディフロントに存
在する、格納された入力を有さないすべての候補ノードがスケジュールされた後
に、使用可能な要素プロセッサがある場合は、格納された入力を有するノードが
選択される。選択されたノードの入力はメモリからロードされ、そのノードは将
来のタイム・ステップでのスケジュール候補となる。ノードＮは、以下の要因に
基づいて、格納された入力を有する準備完了状態のノードのリストから選択され
る。
【０１５７】
・Ｎを配置することによって解放されるレジスタ数。このレジスタ数が大きい
ほど、そのノードは入力のロードとＮのスケジューリングに適する。
【０１５８】
・準備完了状態の格納された入力のファンアウト数。このファンアウト数は、
入力ロード時にスケジュールされるノード数に直接影響を及ぼす。ノードがその
ファンアウトに準備完了状態にあるノードを多数有する場合、そのノードはロー
ドの有力な候補となる。
【０１５９】
図９に、レディフロントに存在するノードの入力をロードするプロセスを示す
。最初にロードがスケジュールされ、続いて、将来のタイム・ステップにおいて
準備完了状態のノードがスケジュールされる。
【０１６０】
ｅ）ユーザ指定のレジスタの処理
シミュレート対象のネットリスト内のレジスタは、特殊な方法で処理する必要
がある。本発明の手法では、文献＜１６＞に示される定義と類似した方法で、ユ
ーザ・サイクルとプロセッサ・サイクルとを区別する。
【０１６１】
プロセッサ・サイクルは、ＳｉｍＰＬＥ２．６が動作する速度を意味する。こ
れは、１つのＳｉｍＰＬＥ命令が完了するまでの所要時間として定義することが
できる。これは、命令語が時分割される場合（すなわち、ＳｉｍＰＬＥ命令がＦ
ＰＧＡデータＩ／Ｏピンを上回る数のビットを有する場合）の処理を除けば、Ｆ
ＰＧＡ２．２上のＳｉｍＰＬＥ２．６のクロック・サイクルと同一である。命令
語が時分割される場合は、演算の有効速度が低下する。例えば、ネットリストが
コンパイルによりＮ個の命令に分割された場合、命令語のサイズをＩ、ＦＰＧＡ
２．２の利用可能なピンアウトをＰ、ＦＰＧＡ２．２のクロック速度をＣとする
と、時分割の係数ＦはＩ／Ｐ、プロセッサのクロック速度はＣ／Ｆで得られる。
一方、ユーザ・サイクルは、１つのベクトルに関するネットリストを完全にシミ
ュレートするために要する時間を意味する。上記の例の場合であれば、ユーザ・
クロック速度はＣ／（Ｆ＊Ｎ）となる。
【０１６２】
ネットリスト内のゲートＧの入力がユーザ・レジスタの場合、このゲートの評
価に使用すべき値は、直前のユーザ・サイクルのレジスタ値である。レジスタが
ネットリスト内のゲートＧの出力である場合、レジスタに格納すべき値は、現在
のユーザ・サイクルでＧによって計算される値である。ただし、直前のユーザ・
サイクルのレジスタ値を使用する必要がある場合には、この値は現在のユーザ・
サイクルでも使用可能でなければならない。そのため、ユーザ・レジスタＲは以
下の方法でスケジュールされる。
【０１６３】
・Ｒが２個のノード（ＤＲ及びＱＲ）に分割される。ＤＲはＲの入力、ＱＲは
Ｒの出力を表す。
【０１６４】
・スケジューリングの制約条件がＤＲに課せられる。すなわち、ＤＲはＱＲよ
りも後のタイム・ステップでスケジュールされなければならない。
【０１６５】
・ＤＲのスケジューリング時に、その入力の値がメモリに格納される。これは
、現在のユーザ・サイクルのＲの値（次のユーザ・サイクルで使用される）であ
る。
【０１６６】
・ＱＲのスケジューリング時に、その入力の値がメモリからロードされる。こ
れは、直前のユーザ・サイクルのＲの値（現在のユーザ・サイクルで使用される
）である。ユーザ・レジスタは、コンパイラがユーザ・レジスタを処理する方法
を示す。図１０に、コンパイラがレジスタを処理する方法を示す。
【０１６７】
ｆ）１次入力（ＰＩ）と１次出力（ＰＯ）の処理
ゲート・レベルの設計は多数のＰＩとＰＯを有することがあり、その数は数千
ビットに上ることさえある。ＰＩのロードとＰＯの格納を迅速化するため、Ｓｉ
ｍＰＬＥのメモリ内で個々のビットを任意のロケーションにアドレス指定する処
理は行われない。その代わり、連続するメモリ・ロケーションからすべてのＰＩ
が順次ロードされる。同様に、連続するメモリ・ロケーションからすべてのＰＯ
が順次格納される。さらに、ＦＰＧＡ２．２外から（すなわち、基板メモリから
）ロードまたは格納を行う際には、（外部ソフトウェアにより）ＰＩとＰＯがメ
モリ語サイズ（メモリからの読み取りとメモリへの書き込みを行うことのできる
単位）の語になるようにグループ化される。これにより、１サイクルに１語の割
合でロードまたは格納できるようになる。これは、個別ビットをロードするより
もはるかに高速である。
【０１６８】
これらの仮定によりＳｉｍＰＬＥ２．６の入力−出力インターフェースはさら
に単純になるが、その一方でコンパイラに対する制約条件が生じる結果となる。
まず、コンパイラがＰＩとＰＯを配置する際の制約が厳しくなる。これは、スク
ラッチパッド・メモリがバンクに分割されるためである。各バンクは狭い範囲の
ＰＥにスパンし、アクセスできるのはこれらのＰＥに限られる。そのため、コン
パイラは、各ＰＩまたはＰＯを、そのインデックスに基づいて特定のメモリ・バ
ンクに割り当てなければならない。
【０１６９】
さらに、ＰＯはメモリ格納を表すので、レジスタを格納するためには、ＰＯの
直接の（ただし、後のタイム・ステップの）発信元と同じＰＥ内に配置しなけれ
ばならない。ＰＯもまた特定のメモリ・バンクに格納する必要があるので、これ
によりＰＯの直接の発信元に制約条件が課せられることになる。すなわち、ＰＯ
の直接の発信元は、ＰＯが格納される特定のメモリ・バンクから届く範囲内に配
置されなければならない、という制約条件である。
【０１７０】
上記の制約により、一部のネットリストがスケジュール不能になる可能性があ
る。例えば、ＰＩがＰＯに短絡されている場合（これは、最適化後に一部のネッ
トリストに発生することがある）、インデックスが互いに異なるので、ＰＩとＰ
Ｏが強制的に異なるメモリ・バンクに格納される恐れがある。このような異常は
、バッファを挿入することによって解決される。これにより、ある程度のリソー
スを費やすことになるが、スケジューリングの柔軟性は増大する。
【０１７１】
ＰＩとＰＯは、ＳｉｍＰＬＥ２．６内で、図１１に図示するようなメモリ・バ
ンクに編成される。各メモリ・バンクは、ＰＩとＰＯにそれぞれ専用の部分と、
シミュレーション時のレジスタのスピル処理に使用される汎用部分とを備える。
ＰＩとＰＯのこの編成により、各ＰＥは最大メモリ帯域幅速度で１次入力ビット
の読み取り（または、１次出力ビットの書き込み）を実行できるようになる。ま
たこの編成により、ビットが任意のメモリ・ロケーションにアドレス指定される
のを防止することができる。ＰＩのアセンブルは、インターフェース・ソフトウ
ェアによって容易に実行できる。
【０１７２】
（３）コンパイルの結果と分析
本発明の技法では、業界標準、ＩＳＣＡＳ、その他の代表的なベンチマークを
組み合わせて結果の分析を行う。この作業の個々の結果について、４つの業界標
準ベンチマーク（ＮＥＣ１−４）と、ＰｉｃｏＪａｖａ(登録商標)プロセッサの
整数及びマイクロコード・ユニット（ＩＵ及びＵＣＯＤＥ）と、ＩＳＣＡＳ８９
，ＩＴＣ９９  文献＜２０＞、共通バス及びＵＳＢコントローラから選択された
６つの大規模なゲート・レベル組み合わせ及び逐次ネットリストとを使用して分
析する。ベンチマークのサイズは、２入力ゲートの個数にして３１，０００〜４
３０，０００の範囲である。
【０１７３】
ａ）ストレージ要件
シミュレーション時に生成される一時値の格納には、レジスタとメモリが使用
される。レジスタとメモリの量が不十分な場合、一時値の数が多すぎる回路はＳ
ｉｍＰＬＥ２．６を使用してシミュレートすることができない。ただし、近年の
ＦＰＧＡ２．２ではメモリ量はきわめて大きい。図１２を見ると、プロセッサ×
４８、レジスタ×６４、各レジスタ・ファイルにつき読み取りポート×２を備え
るＳｉｍＰＬＥアーキテクチャをターゲットとする場合に必要とされるストレー
ジ量は、ＦＰＧＡ２．２上で使用可能なメモリによって余裕をもって得られるこ
とが分かる。
【０１７４】
ｂ）命令生成の複雑性
ｎ個のノードを有するネットリストの場合、レディフロントのノード数はＯ（
ｎ）である。（２）スケジューリング・アルゴリズムのｂ）ノード選択ヒューリ
スティックの項におけるヒューリスティックスがレディフロントから１個のノー
ドを選択するためには、解放されたレジスタ数、ファンアウト、及びレディフロ
ントに含まれるファンアウト数を必要とする。このいずれも、事前に計算するこ
とが可能である。したがって、１個のノードの選択に要する時間はＯ（ｎ）であ
る。本発明の技法では、以下の方法でこれを一定時間にする。タイム・ステップ
の開始時に、レディフロントに含まれる全ノードのヒューリスティックスが事前
に計算され、そのヒューリスティック値をインデックスとするテーブルに挿入さ
れる。テーブル内のｉ番目のエントリには、ヒューリスティック値がｉとなるレ
ディフロント内の全ノードが含まれる。したがって、これらのノードの選択に要
する時間はＯ（１）時間である。図１３に、４４０ＭＨｚのＵｌｔｒａＳｐａｒ
ｃ１０上で稼働するコンパイラの速度を図示する。
【０１７５】
ｃ）ＳｉｍＰＬＥパラメータがコンパイル効率に及ぼす影響
次に、重要なＳｉｍＰＬＥパラメータがコンパイラによって生成される命令数
に及ぼす影響を評価する。各メモリ・バンクのサイズは１６Ｋビット固定、メモ
リ語サイズは４ビットであったので、いずれもＶｉｒｔｅｘ−ＩＩ  ＦＰＧＡ上
のブロックＲＡＭで対応できる。メモリと相互接続のラテンシーは、命令のサイ
ズによって変動した。相互接続とメモリのパイプライン処理により、ＦＰＧＡ２
．２のクロック速度は改善されるが、コンパイル効率は低下する。実験により、
ＦＰＧＡ２．２上で十分なクロック速度を得るためには、相互接続とメモリのラ
テンシーは２サイクル分が必要であることが判明した。このラテンシーは、ＦＰ
ＧＡサイクルに換算したものである。したがって、プロセッサ・サイクルが１Ｆ
ＰＧＡサイクルを上回る場合（すなわち、ＳｉｍＰＬＥ命令が時分割を要する場
合）には、コンパイラは、相互接続とメモリのラテンシーはいずれも１であると
想定する。これは、連続する命令が、２ＦＰＧＡサイクル以上に相当する１プロ
セッサ・サイクルの単位に分割されるからである。
【０１７６】
図１４に、ＳｉｍＰＬＥ２．６に含まれるプロセッサ数、レジスタ数、レジス
タ読み取りポート数の変動に伴う、コンパイラによって生成される平均命令数の
変動を示す。すなわち、レジスタ・ポートの増大がコンパイル効率に与える影響
を示している。Ｘ軸はＰ−ｒを示し、ここで、ＰはＳｉｍＰＬＥ実装例内のプロ
セッサ数、ｒはＳｉｍＰＬＥ実装例内のレジスタ数である。
【０１７７】
ここで注目されるのは、プロセッサ数が３２個以上になると、レジスタ・ポー
ト数が２を上回っても平均命令数にほとんど変動がないことである。これは、す
べてのネットリストはコンパイル時に２ＬＵＴにマッピングされ、３２プロセッ
サの場合には、プロセッサ上の値の重複を最小化するのに十分な量のパラレリズ
ムが存在する、という事実によって説明できる（単一プロセッサ上で値が重複す
ると、複数の読み取りポートを使用することが必要になる）。図１５から、エク
ストラ読み取りポートの使用によってＣＬＢの消費数も増えることが分かる（Ｘ
ｉｌｉｎｘ  Ｖｉｒｔｅｘ−ＩＩ  ＦＰＧＡによる試算）。ここで
図１５はレジスタ・ポートの増大がｖｉｒｔｅｘ−ＩＩ  ＣＬＢの利用率に与え
る影響を示すしている。Ｘ軸はＰ−ｒを示し、ここで、ＰはＳｉｍＰＬＥ実装例
内のプロセッサ数、ｒはＳｉｍＰＬＥ実装例内のレジスタ数である。
【０１７８】
そのため、ここでは読み取りポート×２のＳｉｍＰＬＥアーキテクチャに限定
する。また、メモリ構成と、相互接続及びメモリのラテンシーも上記の数値に固
定する。
【０１７９】
５．ＦＰＧＡの合成
シミュレーションに先だって、ＦＰＧＡ２．２上でＳｉｍＰＬＥ２．６を構成
する必要がある。これは１度行うだけでよい。この構成が完了したら、任意の回
数のシミュレーションを実行できる。数個のＳｉｍＰＬＥアーキテクチャの構成
ビットを事前に生成し、ライブラリに格納しておくことも可能である。そのため
、ＦＰＧＡ２．２上でＳｉｍＰＬＥ２．６を配置及び経路指定するために費やさ
れる時間によって、シミュレーション速度が影響を受けることはない。ただし、
ＦＰＧＡクロック速度はシミュレーション速度に影響を及ぼす。したがって、Ｆ
ＰＧＡ２．２上でＳｉｍＰＬＥ２．６の配置と経路指定を行い、同時に高いクロ
ック速度を達成することが重要となる。この項では、ＦＰＧＡ２．２の配置及び
経路指定の手順について説明する。
【０１８０】
ＨＤＬジェネレータは、特定のパラメータ・セット（プロセッサ数、メモリ・
サイズなど）を備えるＳｉｍＰＬＥ２．６の振る舞いの記述を生成する。また、
必要な場合は、ＳｉｍＰＬＥ命令を時分割するためのエクストラ・ハードウェア
を生成することもできる。この記述の合成は、ＳｙｎｏｐｓｙｓのＦＰＧＡ  Ｅ
ｘｐｒｅｓｓを使用して行われ、そのＶｉｒｔｅｘ−２  ＦＰＧＡ上へのマッピ
ング、配置、経路指定はＸｉｌｉｎｘ  Ｆｏｕｎｄａｔｉｏｎ  ４．１ｉを使用
して行われる。
【０１８１】
（１）  ＳｉｍＰＬＥのためのＦＰＧＡ配置・経路指定技法
経路指定を適切に行うためには、ＦＰＧＡ２．２の配置がきわめて重要である
。これまでの研究により、経路指定の前に正しい配置を行うと、輻輳が低減され
、クロック速度が大幅に向上することが証明されている（文献＜１２＞、＜４＞
）。本発明の技法では、規則性駆動型のスキームを使用して良好な配置を実現す
る。ＳｉｍＰＬＥ２．６の各インスタンスは、要素プロセッサ、メモリ・ブロッ
ク、レジスタ・ファイルのすべてが互いに同一なため、本質的に高度な規則性を
有している。図１６に、すべての規則単位を備えるＳｉｍＰＬＥ２．６の階層を
示す。
【０１８２】
本公開のＦＰＧＡ配置・経路指定技法では、以下の４つのステップが実行され
る。これらのステップとは、(i)設計内の最良な反復単位の識別、(ii)単一の（
相対配置された）ハード・マクロとしての反復単位の短縮事前配置、(iii)マク
ロを使用した設計全体の配置、（iv）全体的な最終経路指定、である。
【０１８３】
図１６で可能な数個のマクロの間では、最大のマクロ（すなわち、最上層のマ
クロ）が最良であることが実験によって判明した。大型のマクロは最良の短縮率
を示し、ＩＯが相対的に少ない。識別が完了したら、マクロが合成され、ＦＰＧ
Ａ  ＣＬＢにマッピングされ、配置される。ＳｉｍＰＬＥの記述全体は、マクロ
としてインスタンス化され、マッピング、配置、経路指定が行われる。最適化は
、事前配置されたマクロの境界を横断する形では実行されない。マクロ・フロー
全体は、ＦＰＧＡツールとの対話によって実行されるスクリプトを使用して完全
に自動化されている。
【０１８４】
図１７に示す表１は、本公開の技法におけるマクロ・ストラテジを使用した場
合と使用しなかった場合のＦＰＧＡクロック速度を比較したものである。実験は
すべて、最新のＸｉｌｉｎｘ  Ｆｏｕｎｄａｔｉｏｎ  ４．１ｉを使用して行っ
た。本公開の技法を使用した場合は、最大３倍の向上が確認された。図１６に示
す構造体をマクロに短縮すると、ＦＰＧＡ２．２に配置されたコンポーネントの
分布が改善され、クロック速度がＰＥ内のレジスタ数の影響を受けにくくなる。
【０１８５】
シミュレーション速度は、コンパイル済み命令数、命令幅、ＦＰＧＡクロック
・サイクルを使用して、方程式２により計算できる。図１８に、様々なＳｉｍＰ
ＬＥアーキテクチャにおける、ＦＰＧＡメモリ・バス幅の値が２５６の場合と１
０２４の場合のシミュレーション速度（ベクトル数／秒）を示す。この図から明
らかなように、ＦＰＧＡメモリ・バスが幅１０２４ビットの場合には、プロセッ
サ×４８のアーキテクチャが最良である。アーキテクチャの幅が広いほど時分割
を要する命令が多くなるので、幅が広ければ広いほどよいというわけではない。
ＦＰＧＡメモリ・バスの幅が小さいアーキテクチャは、シミュレーション速度が
ほぼ同じであった。これは、ＦＰＧＡメモリ・バス幅が小さい場合は、アーキテ
クチャの幅が広いことによる利点が命令の幅が広いことによる不利益によって相
殺されることを示す。
【０１８６】
６．実験、分析、及び考察
この項では、大規模なＶｉｒｔｅｘ−ＩＩ  ＦＰＧＡ２．２上にＳｉｍＰＬＥ
２．６を実装した場合と、汎用基板に本発明の技法による最初のプロトタイプを
実装した場合に、実際に得られた速度向上について説明する。
【０１８７】
（１）Ｖｉｒｔｅｘ−ＩＩ上での速度向上
実験結果に基づき、８００万ゲートのＶｉｒｔｅｘ−ＩＩ  ＦＰＧＡ  （ＸＶ
２Ｖ８０００）上に、要素プロセッサ×４８、１要素プロセッサにつきレジスタ
×６４、１レジスタ・ファイルにつきレジスタ読み取りポート×２、各々２要素
プロセッサにスパンするｌ６Ｋビットのバンクから成る分散メモリ・システム、
メモリ語サイズ４ビット、及び相互接続ラテンシー２を有するＳｉｍＰＬＥプロ
セッサを合成した。ＸｉｌｉｎｘのＦｏｕｎｄａｔｉｏｎツールを使用した。
【０１８８】
ａ）サイクル・ベース・シミュレーションとの比較
サイクル・ベース・シミュレータとして、Ｖｅｒ  ｖｅｒｉｌｏｇコンパイラ
とＣｙｃｏを使用した。Ｖｅｒは構造的ｖｅｒｉｌｏｇを読み取り、ＩＶＦと呼
ばれる中間フォームを生成する。ＣｙｃｏはＩＶＦを読み取り、構造的ｖｅｒｉ
ｌｏｇｘを表す直線Ｃコードを生成する。図１９に、サイクル・ベース・シミュ
レーション及びＳｉｍＰＬＥに関する、本発明の手法による実験的ツール・フロ
ーを示す。速度４４０ＭＨｚのＳｐａｒｃＶ９プロセッサ、１ＧＢ  ＲＡＭを搭
載したＵｌｔｒａＳｐａｒｃ  １０システム上でＣコードをコンパイルし、実行
した。ここで、生成されたＣコードをコンパイルするために長い時間（数時間）
を要したことに留意する必要がある。このように、コンパイル時間が短いことも
ＳｉｍＰＬＥ２．６の利点である。
【０１８９】
図２０は、４４０ＭＨｚのＵｌｔｒａＳｐａｒｃ  ワークステーション上で稼
働するサイクル・ベース・シミュレータに比較して、１００ＭＨｚ（ほとんどの
基板は１００ＭＨｚで稼働するため、この速度に制約される）で稼働する４８プ
ロセッサ、６４レジスタを備えるＳｉｍＰＬＥ２．６によって得られた速度向上
を示す。各ベンチマークの右側カラムは、ＦＰＧＡメモリ・バス幅が１０２４ビ
ットの場合に達成された速度向上を示し、それより小さい左側カラムＦＰＧＡメ
モリ・バス幅が２５６ビットはの場合の速度向上を示す。速度向上の範囲は、１
０２４ビットのＦＰＧＡメモリ・バス幅の場合は２００倍〜３０００倍であり、
２５６ビットＦＰＧＡメモリ・バス幅の場合はこの倍率が７５倍〜ｌ０００倍に
減少する。
【０１９０】
ｂ）ゼロ遅延イベント・ドリブン・シミュレーションとの比較
この比較では、ゼロ・ゲート遅延を有するＭｏｄｅｌＳｉｍバージョン５．３
ｅを使用した。を使用した。各ベンチマークは、ＳｉｍＰＬＥ２．６の場合とま
ったく同じ方法で最適化した後、ＭｏｄｅｌＳｉｍにロードしてイベント・ドリ
ブン・シミュレーションを実行した。ここでも、シミュレーションのため４４０
ＭＨｚのＵｌｔｒａＳｐａｒｃ  １０を使用した。図２１に、同じベンチマーク
に関して得られた速度向上を示す。速度向上の範囲は、１０２４ビットのＦＰＧ
Ａメモリ・バス幅の場合は３００倍〜６０００倍であり、２５６ビットＦＰＧＡ
メモリ・バス幅の場合はこの倍率が７５倍〜ｌ５００倍に減少する。
【０１９１】
（２）プロトタイプを使用した場合の速度向上
ＡｌｐｈａＤａｔａ  （ｗｗｗ．ａｌｐｈａｄａｔａ．ｃｏ．ｕｋ）製の汎用
ＦＰＧＡ基板（ＡＤＣＲＣ１０００）を使用してプロトタイプを実装した。この
基板は、ＦＰＧＡメモリ・バス幅１２８ビットのＸｉｌｉｎｘ  Ｖｉｒｔｅｘ−
Ｅ  ２０００  ＦＰＧＡを備える。我々は、十分な作業が可能なシミュレーショ
ン環境と、ユーザがネットリストのコンパイルとシミュレーションを行い、選択
された信号を表示することのできるグラフィカル・ユーザ・インターフェースを
有しており、実験にはこれを使用した。２つの設計について、小規模なプロトタ
イプ基板上で速度向上を測定した。一方の設計は４００，０００ゲートの逐次ベ
ンチマーク、もう一方の設計はＰｉｃｏＪａｖａ(登録商標)プロセッサのパイプ
ライン・データパスの一部である。いずれの設計においても、プロトタイプ基板
はＭｏｄｅｌＳｉｍの３０倍、サイクル・ベース・シミュレータの１２倍の高速
を達成した。
【０１９２】
（３）速度向上の理由
この速度向上の主な理由は、(i)パラレリズム、(ii)ＳｉｍＰＬＥ内のレジス
タとメモリが多数に上ること、(iii)ＦＰＧＡと基板メモリの間の帯域幅が広い
こと、及び（iv）ＦＰＧＡクロック速度が高速であること、の４点である。動的
パラレリズムの技術を使用したスーパースケーラ・プロセッサは、通常、１サイ
クルにつき２〜３個の命令を実行する。しかしＳｉｍＰＬＥでは、１サイクルに
つき要素プロセッサと同数の命令を実行できる。ＳｉｍＰＬＥには多数のレジス
タが存在し（１個の要素プロセッサに専用のレジスタが３２個以上）、そのため
にメモリ演算が減少するのである。
【０１９３】
シミュレーション・プロセスの効率をさらに高めているのは、ＦＰＧＡと基板
メモリ間の高帯域幅である。これにより、幅の広いＳｉｍＰＬＥ命令でも迅速に
転送することができる。最後に、ＳｉｍＰＬＥアーキテクチャの規則性により、
ＦＰＧＡ上での高速実装が可能になる。ＦＰＧＡのサイズが大きくなると、より
大規模なＳｉｍＰＬＥアーキテクチャを実装できるので、さらなる速度向上を実
現することができる。
【０１９４】
本明細書の開示から、他の変更及び異型は当該技術に精通した当業者には明ら
かであろう。したがって、本書では本発明のごく一部の実施例のみが特に説明さ
れているが、本発明の精神及び範囲から逸脱することなく無数の変更が可能であ
ることは明らかである。
【図面の簡単な説明】
【０１９５】
【図１】本発明を適用したシステムと従来のシミュレータ及びエミュレータとのコスト及びパフォーマンスの比較を示す図である。
【図２】本発明の実施例によるＳｉｍＰＬＥ中間アーキテクチャを使用した単一ＦＰＧＡ上の大規模ネットリストをシミュレートするための概念を説明する図である。
【図３】本発明による全体的なシステム構成を示すブロック図である。
【図４】要素プロセッサ、メモリ・バンク、読み取りポートを有するワイド・レジスタ・ファイル、クロスバーを備えるＳｉｍＰＬＥのアーキテクチャ・モデルの例を示す図である。
【図５】ＡＳＡＰヒューリスティックを使用してスケジュールされた場合の、ネットリストの中間値の最大数を示す図である。
【図６】スケジューリングと命令生成を実行するコンパイラ例を示すフローチャートである。
【図７】スケジューリングのためのノード選択の例を示す図である。
【図８】レジスタのメモリへのスピル処理の例を示す図である。
【図９】レディフロント内のノードの入力をロードする例を示す図である。
【図１０】ユーザ指定レジスタを処理する例を示す図である。
【図１１】メモリ・システム内の特定のスロットへの１次入力及び１次出力ビットの割り当てを示す図である。
【図１２】ＳｉｍＰＬＥ実装例のストレージ要件を示す図である。
【図１３】ＳｉｍＰＬＥ実装例のコンパイル速度を示す図である。
【図１４】レジスタ・ポートの増大がコンパイル効率に与える影響を示す図である。
【図１５】レジスタ・ポートの増大がｖｉｒｔｅｘ−ＩＩ  ＣＬＢの利用率に与える影響を示す図である。
【図１６】ＳｉｍＰＬＥ実装の階層で、最大反復単位のものを示す図である。
【図１７】規則性駆動型の配置を使用したＳｉｍＰＬＥのＦＰＧＡクロック速度における改良を示す図である。
【図１８】各種ＳｉｍＰＬＥ実装例におけるシミュレーション速度  （ベクトル／秒）  を示す図である。
【図１９】サイクル・ベース・シミュレーションのソフトウェア実装において、ＳｉｍＰＬＥを使用してゲート・レベルのネットリストをシミュレートする場合のツール・フローを示す図である。
【図２０】サイクル・ベース・シミュレータと比較したＳｉｍＰＬＥの速度向上度を示す図である。
【図２１】ＭｏｄｅｌＳｉｍに比較したＳｉｍＰＬＥの速度向上度を示す図である。
【図２２】ＲＴＬレベル回路のアーキテクチャを示す図である。
【符号の説明】
【０１９６】
２．１  オンボード・メモリ
２．２  ＦＰＧＡ
２．３  ＤＭＡ／ＰＣＩコントローラ
２．４  ホスト
２．５  ＳｉｍＰＬＥコンパイラ
２．６  ＳｉｍＰＬＥ
２．３１〜２．３４  ＰＥ
３．１  ＡＰＩ
３．２  ゲート回路
３．３  メイン・メモリ
４．１  分散メモリ・システム
４．２  分散レジスタ・ファイル・システム
４．３  クロスバー
【図１】
2006268873.tif 000003
【図２】
2006268873.tif 000004
【図３】
2006268873.tif 000005
【図４】
2006268873.tif 000006
【図５】
2006268873.tif 000007
【図６】
2006268873.tif 000008
【図７】
2006268873.tif 000009
【図８】
2006268873.tif 000010
【図９】
2006268873.tif 000011
【図１０】
2006268873.tif 000012
【図１１】
2006268873.tif 000013
【図１２】
2006268873.tif 000014
【図１３】
2006268873.tif 000015
【図１４】
2006268873.tif 000016
【図１５】
2006268873.tif 000017
【図１６】
2006268873.tif 000018
【図１７】
2006268873.tif 000019
【図１８】
2006268873.tif 000020
【図１９】
2006268873.tif 000021
【図２０】
2006268873.tif 000022
【図２１】
2006268873.tif 000023
【図２２】
2006268873.tif 000024