"カスタム集積回路を自動的に設計する方法であって、a.コンピュータ可読コードおよび前記カスタム集積回路に対する1つまたは複数の制約を含む前記カスタム集積回路の仕様を受け取り、b.前記制約に最も適合する前記コンピュータ可読コードのためのコンピュータアーキテクチャを自動的に生成し、c.前記コードプロファイルに基づいてインストラクション実行シーケンスを自動的に決定し、かつ前記インストラクションシーケンスの再割り当て、または遅延を行なってホット‐スポットを低減するべく1つまたは複数の処理ブロックにわたって動作を分散させ、d.物理的実装並びに局所的及び全体的な面積、タイミング、または電力を含む1つまたは複数のファクタを、RTLまたはゲート‐レベルの合成より上のアーキテクチャレベルにおいて連続的に評価し、かつ最適化し、e.ソフトウエア開発キットSDKを自動的に生成し、かつ関連付けされるファームウエアを、前記カスタム集積回路上において前記コンピュータ可読コードを実行するべく自動的に生成し、f.前記カスタム集積回路上における前記コンピュータ可読コードのための、関連付けされるテストスイートおよびベクトルを自動的に生成し、g.半導体デバイス製造のために、設計された前記アーキテクチャの合成、および前記カスタム集積回路のコンピュータ可読記述の生成を自動的に行なう、方法。前記コンピュータ可読コードの静的プロファイリングを行なう、請求項1に記載の方法。前記コンピュータ可読コードの動的プロファイリングを行なう、請求項1に記載の方法。前記コンピュータ可読コードに基づいてアーキテクチャを選択する、請求項1に記載の方法。前記コンピュータ可読コードの静的プロファイリングおよび動的プロファイリングに基づいて前記アーキテクチャの最適化を行なう、請求項1に記載の方法。前記コンピュータ可読コードをアッセンブリコードにコンパイルする、請求項1に記載の方法。前記アッセンブリコードをリンクして選択された前記アーキテクチャのためのファームウエアを生成する、請求項7に記載の方法。前記ファームウエアのサイクル精度のシミュレーションを実行する、請求項7に記載の方法。前記ファームウエアの動的プロファイリングを実行する、請求項7に記載の方法。プロファイリングが行なわれたファームウエアに基づいて前記アーキテクチャを最適化する、請求項9に記載の方法。前記アッセンブリコードに基づいて前記アーキテクチャを最適化する、請求項7に記載の方法。選択された前記アーキテクチャのためのレジスタトランスファレベルのコードを生成する、請求項1に記載の方法。前記RTLコードの合成を実行する、請求項12に記載の方法。カスタム集積回路を自動的に設計するシステムであって、a.コンピュータ可読コードおよび前記カスタム集積回路に対する1つまたは複数の制約を含む前記カスタム集積回路の仕様を受け取るための手段と、b.前記制約に最も適合する前記コンピュータ可読コードのためのコンピュータアーキテクチャを自動的に生成するための手段と、c.前記コードプロファイルに基づいてインストラクション実行シーケンスを自動的に決定し、かつ前記インストラクションシーケンスの再割り当て、または遅延を行なってホット‐スポットを低減するべく1つまたは複数の処理ブロックにわたって動作を分散させるための手段と、d.物理的実装並びに局所的及び全体的な面積、タイミング、または電力を含む1つまたは複数のファクタを、RTLまたはゲート‐レベルの合成より上のアーキテクチャレベルにおいて連続的に評価し、かつ最適化するための手段と、e.ソフトウエア開発キットSDKを自動的に生成し、かつ関連付けされるファームウエアを、前記カスタム集積回路上において前記コンピュータ可読コードを実行するべく自動的に生成するための手段と、f.前記カスタム集積回路上における前記コンピュータ可読コードのための、関連付けされるテストスートおよびベクトルを自動的に生成するための手段と、g.半導体デバイス製造のために、設計された前記アーキテクチャの合成、および前記カスタム集積回路のコンピュータ可読記述の生成を自動的に行なうための手段と、を備えるシステム。前記コンピュータ可読コードの静的プロファイリングおよび動的プロファイリングを行なうための手段を備える、請求項14に記載のシステム。前記コンピュータ可読コードに基づいてアーキテクチャを選択するための手段を備える、請求項14に記載のシステム。前記コンピュータ可読コードのプロファイルに基づいて前記アーキテクチャを最適化するための手段を備える、請求項14に記載のシステム。前記コンピュータ可読コードをアッセンブリコードに変換するコンパイラを備える、請求項14に記載のシステム。前記ファームウエアのテストを行なうサイクル精度のシミュレータを備える、請求項14に記載のシステム。選択された前記アーキテクチャのためのレジスタトランスファレベルのコードジェネレータを備える、請求項14に記載のシステム。最先端カスタムIC設計の開発により、解決されることを要するいくつかの課題が生じた。より高い処理速度は、多クロック領域、ますます複雑化するクロック乗算および同期テクニック、ノイズコントロール、および高速I/O等、の以前は本質的に純粋なデジタル領域の条件をアナログ領域内に導入することを招いた。設計の複雑さが増加し続ける一方、それらの製品を市場に提供するまでの設計者が有する時間がより少なくなっていることから、設計および検証サイクル内には障害が生じ、その結果、設計コストについての償却費が低下してしまう。設計の複雑さが増加することにより、設計の成功を達成するために必要と成り得る、追加の製造工程が生じてしまう。さらに別の課題は、有能な労働者を確保できるかという側面もある。ASIC回路設計における急速な成長は、有能なIC技術者の不足を同時に生じている。1つの態様においては、入力としてのアルゴリズムに則ったプロセスまたはコードに基づき、かつ高度に自動化されたツールを使用して、人間の掛かり合いが実質的にまったく必要とされないカスタム集積回路の自動的な設計を行なう方法が開示される。この方法は、コンピュータ可読コードおよびカスタム集積回路に対する1つまたは複数の制約を含むカスタム集積回路の仕様を受け取り、当該制約に最も適合するコンピュータ可読コードのためのコンピュータアーキテクチャを自動的に生成し、コードプロファイルに基づいてインストラクション実行シーケンスを自動的に決定し、かつ当該インストラクションシーケンスの再割り当て、または遅延を行なってホット‐スポットを低減するべく1つまたは複数の処理ブロックにわたって動作を分散させ、物理的実装並びに局所的及び全体的な面積、タイミング、または電力を含む1つまたは複数のファクタを、RTLまたはゲート‐レベルの合成より上のアーキテクチャレベルにおいて連続的に評価し、かつ最適化し、ソフトウエア開発キットSDKを自動的に生成し、かつ関連付けされるファームウエアを、カスタム集積回路上においてコンピュータ可読コードを実行するべく自動的に生成し、カスタム集積回路上におけるコンピュータ可読コードのための、関連付けされるテストスイートおよびベクトルを自動的に生成し、半導体デバイス製造のために、設計されたアーキテクチャの合成、およびカスタム集積回路のコンピュータ可読記述の生成を自動的に行なう。別の態様においては、最小限の人的な掛かり合いを伴ってカスタム集積回路を自動的に設計する方法が、コンピュータ可読コードおよびカスタム集積回路に対する1つまたは複数の制約を含むカスタム集積回路の仕様を受け取り、制約を満たすコンピュータ可読コードに対して独特のカスタマイズがなされたプロセッサアーキテクチャの導出およびプロセッサチップ仕様の生成を自動的に行ない、チップ仕様をカスタム集積回路のレイアウトに合成する。この態様は、実質的に人間の掛かり合いをまったく必要としない高度に自動化されたツールを使用しても実行される。上記の態様の実装には、次に示す内容のうちの1つまたは複数を含めることができる。システムは、コンピュータ可読コードの静的プロファイリングおよび/またはコンピュータ可読コードの動的プロファイリングの実行を含む。システムのチップ仕様は、コンピュータ可読コードのプロファイルに基づいて設計される。チップ仕様は、さらに、コンピュータ可読コードの静的および動的プロファイリングに基づいて漸進的に最適化することが可能である。コンピュータ可読コードは、最適アッセンブリコードにコンパイルされ、それがリンクされて、選択されたアーキテクチャのためのファームウエアを生成することができる。シミュレータが、ファームウエアのサイクル精度のシミュレーションを実行することが可能である。システムは、ファームウエアの動的プロファイリングを実行することができる。方法は、さらに、プロファイリングが行なわれたファームウエアに基づいて、またはアッセンブリコードに基づいてチップ仕様の最適化を行なうことを含む。システムは、設計されたチップ仕様のために、レジスタトランスファレベルRTLコードを自動的に生成することが可能である。システムは、また、RTLコードの合成を行なってシリコンを製造することも可能である。システムの好ましい実施態様の利点には、次に示す内容のうちの1つまたは複数が含まれる。このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエアチップソリューションが設計される方法におけるパラダイムを完全にシフトするものである。このシステムは、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエアチップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。システムへの一次的な入力は、CまたはMATLABマトラボ等のより高水準の言語で記述されたコンピュータ可読コードまたはアルゴリズム仕様となる。このシステムを使用する多くの利益のうちのいくつかには、次のようなものが含まれる。1スケジュール:チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、このシステムを使用している会社が、自社の製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。2コスト:一般にチップの実装のために雇用する必要がある多数の技術者が不要となる。このことは、このシステムを使用している会社に夥しいコストの節約をもたらす。3最適性:このシステムプロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。このシステムは、デジタルチップ構成要素に向けた、それを有するシステムの設計で使用される方法におけるパラダイムを完全にシフトするものである。このシステムは、C/MATLABマトラボで記述されたアルゴリズムからデジタルハードウエアを生成する完全に自動化されたソフトウエアプロダクトである。このシステムは、CまたはMATLABマトラボ等の高水準言語を採用してハードウエアチップを実現するプロセスへの独特のアプローチを使用する。要約して言えば、これは、チップ設計を完全に自動化されたソフトウエアプロセスにする。図1は、カスタムICを自動的に生成するシステムの一例を示している。図1のシステムは、選択された目標とするアプリケーションに対する最適カスタム集積回路ソリューションを自動的に生成することををサポートする。目標とするアプリケーションの仕様は、一般に、C、MATLABマトラボ、SystemCシステムC、フォートラン、エイダ等の高水準言語またはそのほかのいずれかの言語によるコンピュータ可読コードとして表現されたアルゴリズムを通じてなされる。仕様は、目標とするアプリケーションの記述を含み、またそれには、望ましいコスト、面積、電力、速度、パフォーマンス、およびそのほかのハードウエアソリューションの属性といった1つまたは複数の制約も含まれる。図1においては、ICカスタマがプロダクト仕様102を生成する。通常は、所望のプロダクトのすべての主要機能を取り込んだ初期プロダクト仕様が存在する。そのプロダクトから、アルゴリズムの専門家がそのプロダクトに必要とされるコンピュータ可読コードまたはアルゴリズムを識別する。それらのアルゴリズムのうちのいくつかは、サードパーティから、または標準開発委員会からのIPとして利用可能となることがある。それらのうちのいくつかは、製品開発の一部として開発されなければならない。この態様においては、さらにプロダクト仕様102が、とりわけCプログラム等のプログラムまたはMATLABマトラボモデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム104で詳述される。プロダクト仕様102は、また、とりわけコスト、面積、電力、プロセスタイプ、ライブラリ、およびメモリタイプ等の要件106も含んでいる。コンピュータ可読コードまたはアルゴリズム104および要件106は、自動化されたICジェネレータ110に提供される。コードまたはアルゴリズム104およびチップ設計に課せられた制約だけに基づいて、ICジェネレータ110は、図2のプロセスを使用し、人間の係り合いをまったく伴うことなく、GDSファイル112、ICに実行させるファームウエア114、ソフトウエア開発キットSDK116、および/またはテストスイート118を含む出力を自動的に生成する。GDSファイル112は、カスタムチップ120の製造に使用される。その後ファームウエア114が、製造されたこのチップ上で実行されて、カスタマプロダクト仕様102を実装する。このシステムは、チップ設計の課題を緩和し、それを単純なプロセスにする。このシステムは、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、アルゴリズムが、その適用のために特に最適化されたデジタルチッププロセッサ上において実装されることが常に可能となる。システムは、この最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。この全体的なプロセスは、これまで数年を要する問題として対処されていた事項を、数日の問題として対処することを可能とする。要約して言えば、このシステムは、プロダクト開発のデジタルチップ設計部分をブラックボックス化する。1つの実施態様においては、このシステムプロダクトが、次に示すものを入力することが可能である。C/MATLABマトラボで定義されたコンピュータ可読コードまたはアルゴリズム、必要とされる周辺機器、IO仕様、面積目標、電力目標、マージン目標将来的なファームウエア更新のためにどの程度のオーバーヘッドを組み込むべきか、またどの程度複雑性が増加するか、プロセスの選択肢、標準セルライブラリの選択肢、メモリコンパイラの選択肢、テスト可能性スキャン、タップコントローラ、内蔵セルフテスト機能等。システムの出力は、関連付けされるファームウエアすべてを伴ったデジタルハードマクロとすることができる。このデジタルハードマクロのために最適化されたソフトウエア開発キットSDKもまた自動的に生成されて、ファームウエアに対する将来的なアップグレードがプロセッサの交換を強いることなく実装されることが可能である。図2は、カスタムICを自動的に生成するワークフローの一例を示している。このシステムは、選択された目標とするアプリケーションに対する完全かつ最適なハードウエアソリューションを自動的に生成する。共通の目標とするアプリケーションは埋め込みアプリケーション領域内にあるが、それらは、必ずしもそれに限定されない。図2を参照すると、まずASICカスタマがプロダクト仕様202を生成する。プロダクト仕様202は、さらに、とりわけCプログラム等のプログラムまたはMATLABマトラボモデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム204で詳述される。プロダクト仕様202は、また、とりわけコスト、面積、電力、プロセスタイプ、ライブラリ、およびメモリタイプ等のプロダクトパラメータおよび要件206も含んでいる。コンピュータ可読コードまたはアルゴリズム204およびプロダクトパラメータ206は、自動最適インストラクションセットアーキテクチャジェネレータAOISAG210を含む自動化されたICジェネレータ110に提供される。ジェネレータ210は、自動最適チップジェネレータAOCHIPG244を駆動する自動最適RTLジェネレータAORTLG242をコントロールする。AOCHIPG244およびAORTLG242の出力は、AOISAG210のフィードバックループ内に提供されている。またAOISAG210は、自動最適ファームウエアツールジェネレータAOFTG246もコントロールし、それの出力は、自動最適ファームウエアジェネレータAOFG248に提供される。AOFG248の出力もまた、AOISAGへのフィードバックループ内に提供される。ICジェネレータ110は、出力として、GDSファイル212、ICを実行させるファームウエア214、ソフトウエア開発キットSDK216を生成する。GDSファイル212およびファームウエア214は、カスタムチップ220を製造するTSMCまたはUMC等のIC製造器230に提供される。1つの実施態様においては、システムが完全に自動化される。人力の介入または誘導は、まったく必要とされない。このシステムは、最適化されている。ツールが、最適ソリューションを自動的に生成することになる。このほかの実施態様においては、必要であればユーザが間に割り込んで人間による誘導を提供することが可能である。AOISAG210は、最適インストラクションセットアーキテクチャISAと呼ばれているを自動的に生成することが可能である。ISAは、プログラマブルハードウエアソリューションの実現に必要とされ、かつ全デジタルチップ仕様を規定するあらゆる詳細まで定義される。これらの詳細は、次に例として示すファクタのうちの1つまたは複数が含まれる。1インストラクションセットの機能、エンコーディング、および圧縮、2コ‐プロセッサ/マルチ‐プロセッサアーキテクチャ、3スカラー性、4レジスタファイルサイズおよび幅、アクセス待ち時間およびポート、5固定小数点サイズ、6静的および動的分岐予測、7コントロールレジスタ、8スタック演算、9ループ、10サーキュラーバッファ、11データアドレシング、12パイプラインの深さおよび機能、13サーキュラーバッファ、14周辺機器、15メモリアクセス/待ち時間/幅/ポート、16スキャン/タップコントローラ、17専用アクセラレータモジュール、18クロック仕様、19データメモリおよびキャッシュシステム、20データプリ‐フェッチメカニズム、21プログラムメモリおよびキャッシュシステム、22プログラムプリ‐フェッチメカニズム。AORTLG242は、最適ISAから、レジスタトランスファ言語RTLでのハードウエアソリューションの自動生成を提供する自動最適RTLジェネレータである。AORTLG242は、完全に自動化されている。人力の介入または誘導は、まったく必要とされない。ツールが、最適ソリューションを自動的に生成することになる。生成されたRTLは合成可能、かつコンパイル可能である。AOCHIPG244は、最適RTLからGDSIIハードウエアソリューションの自動生成を提供する自動最適チップジェネレータである。ツール244は、完全に自動化されている。人力の介入または誘導は、まったく必要とされない。ツールが、最適ソリューションを自動的に生成することになる。生成されたチップは、完全に機能を実現するものであり、かつ修正を伴うことなく標準FABを使用して製造することが可能である。AOFTG246は、ハードウエアソリューション上におけるファームウエアコードの開発に必要とされるソフトウエアツールを自動的に生成するための自動最適ファームウエアツールジェネレータである。これは、完全に自動化されている。人力の介入または誘導は、まったく必要とされない。ツールが、最適ソリューションを自動的に生成することになる。コンパイラ、アッセンブラ、リンカ、機能シミュレータ、サイクル精度のシミュレータといった標準ツールを、デジタルチップ仕様に基づいて自動的に生成することが可能である。AOFG248は、結果として得られるチップ120による実行が必要になるファームウエアの自動生成を実行する自動最適ファームウエアジェネレータである。このツールは、完全に自動化されている。人力の介入または誘導は、まったく必要とされない。それに加えて、このツールは、最適ソリューションを自動的に生成することになる。最適化されたリアルタイムオペレーティングシステムRTOSもまた、自動的に生成することが可能である。チップ仕様は、カスタマアプリケーションの実行に必要とされる正確な機能ユニットを定義する。またこれは、並列に使用されるこれらのユニットの数が決定されるように固有の並列処理も正確に定義する。ミクロ的およびマクロ的レベルの並列処理の複雑性が、すべて、プロファイリング情報から抽出され、したがってチップ仕様は、この情報を伴って設計される。したがって、チップ仕様は、最適に設計され、この種のプロファイリング情報を伴わないでチップ仕様が設計される場合に起こり得るような、設計が過剰になることまたは設計が不足することがない。動的プロファイリングの間に分岐の統計値が収集され、この情報に基づいて分岐予測メカニズムが最適に設計される。また、連続するインストラクションの間におけるすべての依存性チェックも、このプロファイリングから既知となり、したがってチップ仕様のパイプラインおよびインストラクションスケジューリングに関する点のすべてが最適に設計される。チップ仕様は、次に挙げるようなオプションを提供することが可能である。ラッピングについて絶えずテストすることを必要とせずに、サーキュラーバッファが実装されることを可能にする、ハードウエアモジュロアドレシング。DMAを広範囲に使用し、コードを予測してキャッシュ階層および関連する遅延についての情報が書き込まれる、ストリーミングデータのために設計されたメモリアーキテクチャ。複数の演算ユニットの駆動は、メモリアーキテクチャが毎インストラクションサイクル当たりいくつかのアクセスをサポートすることを要求する。独立したプログラムおよびデータメモリハーバードアーキテクチャ、および場合によっては複数のデータバス上における同時アクセス。特殊SIMD単一インストラクション多重データ演算。いくつかのプロセッサは、VLIWテクニックを使用し、したがって各インストラクションが複数の演算器ユニットを並列に駆動する。特殊な演算、たとえば高速積和演算MAC等。ビット反転アドレシング、FFTの計算に有用な特殊なアドレシングモード。特殊なループコントロール、たとえばインストラクションのフェッチまたは出口テストのためのオーバーヘッドを伴わない非常にタイトなループ内において少数のインストラクションワードを実行するためのアーキテクチャ上のサポート等。データ欠如のために実行ユニットが機能停止することが皆無であるように、データプリ‐フェッチメカニズムと結合された特殊なプリ‐フェッチインストラクション。これにより、メモリ帯域幅が、所定の実行ユニットおよびその種の実行ユニットを使用するインストラクションのスケジューリングのために最適に設計される。所定のアプリケーションのために最適パフォーマンスを獲得し、かつ同時に非常にコンパクトなインストラクションフットプリントを達成する最適な可変長/複数離散長のインストラクションエンコーディング。図3は、図1のカスタムチップ120を自動的に生成するためのプロセスフローの一例を示している。ここで図3を参照するが、まずカスタマプロダクト仕様が生成される302。カスタマプロダクト仕様302は、さらに、とりわけCプログラム等のプログラムまたはMATLABマトラボモデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム304で詳述される。カスタマアルゴリズム304は、静的316および動的318にプロファイリングが行なわれる。このプロファイリングから収集された統計が、アーキテクチャオプティマイザユニット320内において使用される。このユニットはまた、カスタマ仕様302も受け取る。ベース機能ジェネレータ314は、カスタマアルゴリズム304の実装に必要となる基本的演算子または実行ユニットを決定する。ベース機能ジェネレータ314の出力はまた、アーキテクチャオプティマイザ320へも供給される。アーキテクチャオプティマイザ320には、面積、タイミング、および電力を最小化する内部実装分析に加えて、ベース機能ジェネレータから面積、タイミング、および電力情報が与えられる。アーキテクチャオプティマイザ320の出力に基づいて、初期チップ仕様がアーキテクチャ322として定義される。続いてこれが、ツールジェネレータ332ユニットに供給されて自動的にコンパイラ306、アッセンブラ308、リンカ310、およびサイクル精度のシミュレータ338を生成する。その後、これらの一連のツールを使用して、カスタマアルゴリズム304が、アーキテクチャ322上で実行することが可能なファームウエア312に変換される。アッセンブラ308の出力は静的プロファイリング334が行ない、サイクル精度のシミュレータ338の出力は動的プロファイリング340が行なう。これらのプロファイル情報は、その後、アーキテクチャオプティマイザ342によって使用され、アーキテクチャ322の純化および改善が行なわれる。カスタマ仕様が満たされるまで322から332、306、308、310、312、338、340、342へと至り、322に戻るフィードバックループ、および322から332、306、308、334、342へと至り、322に戻るフィードバックループが、反復的に実行される。これらのフィードバックループは、人間の介入をまったく伴わずに自動的に生じ、したがって自動的に、最適ソリューションに到達する。アーキテクチャオプティマイザ342は、アーキテクチャフロア‐プランナ336および、合成およびPR328フィードバックにも基づいている。アーキテクチャの決定は、アプリケーションプロファイリング情報だけでなく、物理的な場所およびルート情報も参照して行なわれる。アーキテクチャの最適化は正確であり、設計済みアーキテクチャのバックエンド設計で起き得る驚きの事態が生じることがない。たとえば、アーキテクチャオプティマイザが、2つの16ビットのオペランドを入力として取り、32ビットの結果を生成する乗算器ユニットを使用することを選択したものとする。アーキテクチャオプティマイザ342は、それらのオペランドを適用した時点と、フロア‐プランナ336および合成328からの結果を利用可とする時点との間における正確なタイミング遅延を承知している。アーキテクチャオプティマイザ342はまた、実際のチップ内において乗算器が配置され、ルーティングされるときの正確な面積も承知している。したがって、この乗算器を使用するためのアーキテクチャは、プロファイリングデータからのこの乗算器の必要性に基づくだけでなく、面積、タイミング遅延パフォーマンスとも呼ばれている、および電力の観点から見たこの乗算器に関連するコストにも基づいて決定される。別の例においては、パフォーマンスがカスタムチップ上における制約事項である場合に、パフォーマンスを高速化するために、コンパイラ306は、シリアルプロセッサ上での実行に長時間を要するプログラム、コード、またはアルゴリズムを抽出し、同時演算が可能な複数の処理ユニットを含む新しいアーキテクチャがあれば、それを、多重処理ユニット内において並列に、またはオーバーラップ態様で処理することが可能である複数の部品に分解することによってプログラムの実行時間を短縮する。フロントエンドの追加のタスクは、並列処理を捜し出すことであり、バックエンドの追加のタスクは、正しい結果および向上したパフォーマンスが獲得される態様でそれをスケジュールすることである。システムは、どのような種類の部品をプログラムが分割するか、およびどのようにそれらの部品を再アレンジできるかについて決定する。これには、次の事項が含まれる。並列処理の精度、レベル、および程度、並列実行の候補の間における依存度の分析。別の例においては、空間または電力がカスタムチップ上における制約事項である場合に、たとえばコンパイラは、コードをシーケンシャルに実行して電力およびチップの地積要件を節約する単一の低電力プロセッサDSPを生成することになる。アーキテクチャブロック322から、プロセスは、RTLジェネレータ324を使用してRTLを生成することができる。RTLコードが生成され326、当該RTLコードを、合成配置およびルーティングブロック328に提供することができる。アーキテクチャフロア‐プランナからの情報もまた考慮に入れることが可能である336。レイアウトを生成することが可能である330。このレイアウトは、たとえば、GDSIIファイルフォーマットとすることができる。本発明の1つの態様は、統一されたアーキテクチャ322の表現形式であり、ソフトウエアツールジェネレータ332およびハードウエアRTLジェネレータ324の両方がこの表現形式を使用することが可能となるように作り出される。この表現形式は、SAMAシステム、アーキテクチャ、およびマイクロ‐アーキテクチャと呼ばれている。アーキテクチャ設計動作は、カスタムチップによって実行されることになるプログラム、コード、またはアルゴリズムの分析に基づく。1つの実装においては、ユニスカラープロセッサ上での実行に長時間を要するプログラムがある場合に、システムは、多重処理ユニット内において並列に、またはオーバーラップ態様で処理することが可能な複数の部品に処理要件を分解することによってパフォーマンスを向上させることが可能である。フロントエンドの追加のタスクは、並列処理を捜し出すことであり、バックエンドの追加のタスクは、正しい結果および向上したパフォーマンスが獲得される態様でそれをスケジュールすることである。システムは、どのような種類の部品をプログラムが分割するか、およびどのようにそれらの部品を再アレンジできるかについて決定することが可能である。これは、並列処理の精度、程度をはじめ、並列実行の候補の間における依存度の分析を伴う。プログラムの部品および複数の処理ユニットが広い範囲にわたることから、異なるコンパイルアプローチを必要とする適正な数の組み合わせが可能である。これらの組み合わせのために、チップ仕様は、設計の過剰または不足がまったく存在しないように計算ユニットのサポートに必要とされるデータ帯域幅が正しく設計される。アーキテクチャオプティマイザ342は、最初にプログラム内の潜在的な並列ユニットを識別し、続いて、それらに対する依存度分析を実行して、互いに独立であって、しかも同時に実行することが可能なセグメントを見つけ出す。アーキテクチャオプティマイザ342は、マシンインストラクションの精度レベルの点で並列処理を識別する。たとえば、標準スカラープロセッサ上における2つのN要素ベクトルの加算は、一度に1つのインストラクションを実行することになる。しかしながら、ベクトルプロセッサ上においては、すべてのN個のインストラクションをN個の独立したプロセッサ上で実行することが可能であり、そのことは合計時間を、単一の加算の実行に必要とされる時間のN倍をわずかに超える程度にまで短縮する。アーキテクチャオプティマイザは、ベクトルステートメントに等価なシーケンシャルステートメントを採用し、ベクトルマシンインストラクションへの翻訳を行なう。ベクトル化を可能にする条件は、ソースオペランドの要素が結果のオペランドから独立していなければならないということである。たとえば、次のようなコードがある。DO100J=1,NDO100I=1,NDO100K=1,NCI,J=CI,JAI,K×BK,J100CONTINUEこの行列乗算の例では、各繰り返しが、直前の繰り返しにおいて計算されたCI,Jの値を使用してCI,Jを計算しており、したがってベクトル化は可能でない。パフォーマンスが希望されているのであれば、システムは、このコードを次のように変換する。DO100J=1,NDO100K=1,NDO100I=1,NCI,J=CI,JAI,K×BK,J100CONTINUEこの場合においては、連続するインストラクションが互いに独立しているCI‐1,JおよびCI,Jを計算し、異なるプロセッサ上において同時に実行可能であることからベクトル化が可能である。このように、インストラクションレベルにおける依存度分析は、オペランドレベルの依存度を認識し、適切な最適化を適用してベクトル化を可能にする補助となることが可能である。図4乃至6は、Cコードとして表現された次に示すアルゴリズムのためのカスタムチップ仕様設計を実行するためのプロセスの一例を示している。fori=0;i<ilimit;i{a[i]=b[i]2×c[i];t=ta[i];}図4は、GIMPLEジンプル静的プロファイリングを使用する静的プロファイリングの一例を示している。プロファイリングにおいては、動的プログラム分析静的コード分析に対抗するものとしての形式が、プログラムの実行時に収集された情報を使用してプログラムの挙動を調査する。この分析の一般的な目的は、プログラムのいずかれのセクションを最適化し、それの全体的な速度を増加させるか、それのメモリ要件を減少させるか、または場合によってはその両方を行なうかを決定することにある。コードプロファイラは、パフォーマンス分析ツールであり、もっとも一般的にはそれが、機能呼び出しの頻度および持続時間のみを測定するが、より包括的なプロファイラのほかに、そのほかの特定のタイプの、広範囲にわたるパフォーマンスデータを収集する能力を有するプロファイラたとえば、メモリプロファイラも存在する。図4の例においては、Cコードが2つのオペランド演算を有する一連の演算に縮小されている。このように、最初の4つの演算がa[i]=b[i]2×c[i]tを実行し、それと並列に残り4つの演算が、次のiの値についてa[i]=b[i]2×c[i]tを実行し、両方のグループの結果が最後の演算で合計される。図5は、上記のアプリケーションを実装するための単純なベースレベルのチップ仕様を示す。各変数i、a[i]、b[i]、c[i]、t、およびtmpが、読み出しまたは書き込みされるとして特徴が記述されている。したがって、時間502においては、iが読み出され、あらかじめ決定済みの限界値と照らしてチェックされる。504においては、iがインクリメントされて書き込まれ、その一方でc[i]がフェッチされる。506においては、b[i]が読み出され、その一方でtmp変数が2×c[i]の結果を格納するべく書き込まれ、さらに次の演算の準備のために読み出される。508においては、a[i]が書き込まれてtmpをb[i]に加算した結果が格納され、tが取り出される。510においては、tが書き込まれて508における加算の結果が格納され、iが読み出される。512から520までは、502から510までのシーケンスが次のiについて繰り返される。図6は、図5のベースラインアーキテクチャからの第1のアーキテクチャを示している。604において、変数iおよびc[i]が読み出される。606においてはiがインクリメントされ、その新しい値が格納される。b[i]が読み出され、その一方でtmpが2×c[i]の結果を格納し、その後、次の演算のために読み出される。608においては、b[i]がtmpに加算されてa[i]内に格納され、新しいa[i]およびtが、次の演算のために読み出される。610においては、tがa[i]に加算され、結果がt内に格納される。612から618までにおいては、次のiの値のために同様のシーケンスが繰り返される。図7は、図5のベースラインアーキテクチャからの第2のアーキテクチャを示している。このアーキテクチャにおいては、アーキテクチャオプティマイザが、適切なハードウエアを用いて演算702および704を結合して1つの演算にできることを検出する。このハードウエアは、また、演算706から708までを1つの演算の中で取り扱うことも可能である。その結果として、この第2のアーキテクチャを使用すると、1つの演算の中でiがチェックされてそれが限界を超えているか否かが調べられ、自動的にインクリメントされる。次の706から708までの演算は、1つの演算に結合されて2×c[i]b[i]を行ない、結果をa[i]として格納する。3番目の演算においては、tがa[i]に加算される。類似する3つの演算が、次のiの値のために実行される。第2のアーキテクチャは、自動インクリメント演算および積和演算を用いてハードウエアの情報をてこ入れし、いくつかのトランザクションを1段階で行なう。このようにこのシステムは、パフォーマンスのためにアーキテクチャを最適化することが可能である。プログラムの部品および複数の処理ユニットが広いサイズ範囲にわたることから、異なる最適化アプローチを必要とする適正な数の組み合わせが可能である。アーキテクチャオプティマイザは、最初にプログラム内の潜在的な並列ユニットを識別し、続いて、それらに対する依存度分析を実行して、互いに独立であって、しかも同時に実行することが可能なセグメントを見つけ出す。この種のシステムにおいて可能になる同時最適化の別の実施態様は、電圧降下/IRホット‐スポットの軽減である。このプロセスは、1つ1つのマシンインストラクションを、オンチップロジックおよび相互接続構造の集まりである関連するハードウエア実行パスに関連付けする。実行パスは、インストラクションのハードウエアフットプリントと考えることが可能である。データモデルは、可能性のあるすべての実行パスおよびそれらに関連付けされたインストラクションの記録を保持している。データモデルは、多様なマシンインストラクションの統計的プロファイルを受け取り、そこから、任意の所定サイクル内においてインストラクションが実行される定常状態確率を抽出する。データモデルは、各インストラクション実行パスのための評価済み位相幾何学的レイアウトを作り出すことが可能である。レイアウトの評価は、物理設計のモデリングのために必要とされる適切なアブストラクションレベルを選択する、あらかじめ決定済みのプロトコルに基づいた多様な物理設計モデルを使用して実行される。データモデルは、インストラクションの実行の定常状態確率を、それの実行パスの位相幾何学的レイアウトと関連付けする。データモデルは、レイアウトの部分領域を作り出し、各部分領域には、部分領域の重みの計算に使用される実行パスの確率の集まりをもたらす、交差する実行パスの集まりが存在する。部分領域の重みの全領域にわたる分布は、電力ホット‐スポットの部位の評価に使用される。データモデルは、影響を受けるインストラクション、すなわち実行パスが電力ホット‐スポットと交差するインストラクションを識別する。その後、電力ホット‐スポット領域が、仮想の制限容量リソースとしてモデリングされる。データモデルは、スケジューラを調整して、制限容量リソースに影響を受けるインストラクションを調べる。制限容量は、閉じた連続の中でアクティブ化が許されるべき部分領域内の実行パスの数を制限することと解釈される。その種のリソース依存度は、スケジューラのリソース割り付けテーブルに容易に追加することが可能である。その後、スケジューラの最適化が、上記のように作り出された仮想リソースを、そのほかのパフォーマンスコスト関数とともに考慮する。したがって、電力およびパフォーマンスが同時に最適化される。システムは、プロファイルから機能ブロック利用度の統計を生成することができる。システムは、時間の関数として、異なる処理ブロックの利用度を追跡することができる。システムは、1つまたは複数の処理ブロックのための電力を推測して遮断することが可能であり、必要時には、電力を遮断した処理ブロックを自動的にオンに切り換えることができる。各電力ドメインに電力がいつ印加されるべきかは、インストラクションデコーダが決定することができる。アプリケーションコードを走らせるカスタムICのためのソフトウエアツールは、自動的に生成することが可能である。これらのツールには、コンパイラ、アッセンブラ、リンカ、サイクル‐ベースのシミュレータのうちの1つまたは複数が含まれる。ツールは、自動的にファームウエアを生成する。ツールは、ファームウエアのプロファイリングを行なうことが可能であり、ファームウエアのプロファイルを、最適化するアーキテクチャにフィードバックする。コンパイラのインストラクションスケジューラは、利益を最大化するべくインストラクションの順序を調整することが可能であり、この電力最適化スキームが与えられる。鍵となる考え方は、評価、およびアーキテクチャのアブストラクトブロックのみを伴う物理設計の仮想的な組み立てによって、物理的制約および効果を予測することである。1つの例においては、評価済み面積のブラックボックスのセットに基づいてフロアプランを組み立てることが可能である。アーキテクチャレベルにおいてその種の組み立てを行うことは、システムが、輻輳、タイミング、面積等を、RTLの実現の前に考慮することを可能にする。別の例においては、ブラックボックスの特定の形状またはアレンジメントが、より良好なフロアプランを、したがってより良好なタイミング、輻輳等をもたらすことがある。したがって、それは、アーキテクチャレベル自体においてそれらの問題を軽減する機会を提供する。実際の世界にたとえれば、建築士は、アスペクト比の正確な寸法や部屋の収容物についての知識を伴うことなく、異なる部屋のアレンジメントを考察することによって家屋がどのように機能するかを考察することができる。このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、その適用のために特に最適化されたプロセッサ上において実装されることが常に可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエアチップソリューションが設計される方法におけるパラダイムを完全にシフトするものである。多くの利益のうち、システムの好ましい実施態様を使用する利益を3つ次に挙げる。1スケジュール:チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、ユーザが、製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。2コスト:一般にチップの実装のために雇用する必要がある多数の技術者が不要となる。このことは、システムを使用している会社に夥しいコストの節約をもたらす。3最適性:このシステムプロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。次に、例として、自動化されたチップ設計システムをサポートするコンピュータについて考察する。コンピュータは、好ましくは、プロセッサ、ランダムアクセスメモリRAM、プログラムメモリ好ましくは、フラッシュROM等の書き込み可能な読み出し専用メモリROM、および入力/出力I/OコントローラをCPUバスによって結合された形で含んでいる。このコンピュータは、ハードディスクおよびCPUバスに結合されるハードドライブコントローラをオプションとして含むことができる。ハードディスクは、本発明等のアプリケーションプログラムおよびデータをストアするために使用することができる。それに代えて、アプリケーションプログラムをRAMまたはROM内にストアすることができる。I/Oコントローラは、I/Oバスを経由してI/Oインターフェースに結合される。I/Oインターフェースは、シリアルリンク、ローカルエリアネットワーク、無線リンク、およびパラレルリンク等の通信リンクを介してアナログまたはデジタル形式でデータの受信および送信を行なう。オプションとして、表示器、キーボード、およびポインティングデバイスマウスがI/Oバスに接続されることもある。それに代えて、I/Oインターフェース、表示器、キーボード、およびポインティングデバイスのために別々の接続別々のバスが使用されることもある。プログラマブル処理システムは、あらかじめプログラムすること、または別のソースたとえば、フロッピー登録商標ディスク、CD‐ROM、または別のコンピュータからプログラムをダウンロードすることによってプログラムすることおよび再プログラムすることができる。各コンピュータプログラムは、目に見える形として、コンピュータによってストレージ媒体またはデバイスが読み出されたときに、ここで説明しているプロシージャを実行するべくそのコンピュータの構成および動作のコントロールを行なうために、汎用または専用プログラマブルコンピュータによって読み出されることが可能なマシン可読ストレージ媒体またはデバイスたとえば、プログラムメモリまたは磁気ディスク内にストアされる。また本発明のシステムは、コンピュータプログラムを用いて構成されるコンピュータ可読ストレージ媒体内において具体化されると考えてもよく、それにおいてストレージ媒体は、ここで述べている機能を実行するべく特定の、あらかじめ定義済みの態様でコンピュータを動作させるように構成される。以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。"