ユーザコードによって指定されるカスタム集積回路ICのためのプロセッサアーキテクチャを自動的に生成する方法であって、少なくとも前記ICが1つまたは複数のタイミングおよびハードウエアの制約を有し、a.前記プロセッサアーキテクチャを定義するパラメータを前記ユーザコードの静的プロファイルおよび動的プロファイルから抽出し、b.アーキテクチャオプティマイザAOを使用し、コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまで階層的態様で前記プロセッサアーキテクチャの1つまたは複数のパラメータを変更することによって前記プロセッサアーキテクチャを反復的に最適化し、c.生成された前記プロセッサアーキテクチャを、半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成する、方法。最適コンピュータシステムのアーキテクチャを、パフォーマンス、コスト、および電力を含むあらかじめ決定済みの評価基準に基づいて自動的に決定する請求項1に記載の方法。前記ユーザコードを効率的に実装するために必要とされる1つまたは複数のタイプの演算要素を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。前記ユーザコードを効率的に実装するために必要とされる数の演算要素を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。レジスタの数、レジスタの幅、読み出しポート、および書き込みポートを含むレジスタ構成およびレジスタファイルの数を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。コンディションコードレジスタを伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。インストラクションキャッシュ、データキャッシュ、およびキャッシュ階層を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。インストラクションキャッシュとデータキャッシュのための別々のキャッシュメカニズム、ラインサイズ、スピルアンドフィルアルゴリズムを伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。各キャッシュのための書き戻しポリシーを伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。メモリに対する読み出しおよび書き込みポートの数およびキャッシュとメモリの間におけるバス幅を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。キャッシュのレベル、および共有または別々のインストラクションキャッシュとデータキャッシュ、または結合キャッシュを含む編成を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。コストを低減し、パフォーマンスを維持する複数レベルへのキャッシュの編成を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。メモリサイズ、メモリマップスキーム、アクセスサイズ、読み出し/書き込みポートの数および幅、およびメモリ編成を用いたメモリ階層を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。ユーザコードを実装するインストラクションセットアーキテクチャISAを伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。利用可能なレジスタの最適利用を確保する呼び出し規約を伴うプロセッサレベルのアーキテクチャを自動的に決定する請求項1に記載の方法。前記プロセッサアーキテクチャの最適化は、必要とされるインストラクションの数を低減し、前記インストラクションをエンコードしてインストラクションのデコード速度を改善し、かつインストラクションメモリのサイズ要件を改善することを含めたインストラクションセットの変更を含む、請求項1に記載の方法。前記プロセッサアーキテクチャの最適化は、レジスタファイルポート、ポート幅、およびデータメモリへのポートの数のうちの1つまたは複数を変更することを含む、請求項1に記載の方法。前記プロセッサアーキテクチャの最適化は、データメモリサイズ、データキャッシュのプリフェッチポリシー、データキャッシュの置換ポリシー、インストラクションメモリサイズ、インストラクションキャッシュのプリフェッチポリシー、およびインストラクションキャッシュの置換ポリシーのうちの1つまたは複数を変更することを含む、請求項1に記載の方法。前記プロセッサアーキテクチャのパフォーマンスを向上させるべく前記コンピュータ可読コードに対して固有のカスタマイズがなされた新しいインストラクションを自動的に生成することによってプロセッサのインストラクションセットを変更し、さらに、a.必要とされるメモリ帯域幅を識別し、b.1つまたは複数のハードウエアフラグとして1つまたは複数のソフトウエア実装されるフラグを置換し、c.2つまたはそれより多くの演算を新しいインストラクションに結合する、請求項1に記載の方法。パラメータを抽出する際には、さらに、a.各インストラクションのための実行サイクル時間を決定し、b.各ループのための実行クロックサイクルカウントを決定し、c.演算子統計テーブルを生成し、d.各関数のための統計を生成し、e.実行カウントの降順による内側ループカーネルをソートする、請求項1に記載の方法。ますます複雑になる設計による別の効果は、設計の成功を達成するために必要となり得る、追加される製造ターンの数に影響を及ぼす。さらに別の問題としては、有能な労働者を利用できるかどうかの点にある。ASIC回路設計における急速な成長は、有能なIC技術者の不足を同時に伴って生じている。1つの態様においては、コンピュータ可読コードまたはモデルによって記述されるカスタム集積回路ICを自動的に生成するシステムおよび方法が開示される。ICは、1つまたは複数のタイミングおよびハードウエアの制約を有する。システムは、プロセッサアーキテクチャを定義するパラメータをコンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出し、アーキテクチャオプティマイザAOを使用し、コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまでプロセッサの1つまたは複数のパラメータを変更することによってプロセッサアーキテクチャを反復的に最適化し、生成されたプロセッサアーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する。上記の態様の実装には、次に示す内容のうちの1つまたは複数を含めることができる。所定のセットによって、アプリケーション/アルゴリズムのための最適コンピュータシステムアーキテクチャは、パフォーマンス、コスト、および電力といった多様なファクタに基づいて自動的に決定することが可能である。最適アーキテクチャは、システムレベルのアーキテクチャおよびプロセッサレベルのアーキテクチャの両方からなる。システムレベルのアーキテクチャについて言えば、AOが、必要とされるメモリの量、サポートするメモリ帯域幅、DMAチャンネルの数、クロック、およびペリフェラルを自動的に決定することが可能である。プロセッサレベルのアーキテクチャについては、AOが、システムのためのパフォーマンス評価基準のセットおよびアルゴリズム内のパラレリズムに基づいて、演算要素のスカラ度の必要性ならびにその量;アルゴリズムの効率的な実装に必要とされる演算要素のタイプ;ユーザコードの効率的な実装に必要とされる演算要素の数;段数、インストラクション発行レート、スカラ度という観点から見たパイプライン編成、特に加算器の数、ロード、ストア単位という観点から見た演算要素の数、およびパイプライン構造内における演算要素の配置;ALU演算要素の幅;レジスタファイルの数および、レジスタの数、それらの幅、読み出しポートならびに書き込みポートの数という観点から見たそれらの構成;コンディションコードレジスタの必要性;インストラクションキャッシュの必要性ならびにその量、および必要とされるデータキャッシュ、およびそれらの階層;インストラクションキャッシュおよびデータキャッシュそれぞれのための別々のキャッシュメカニズム、ラインサイズ、およびキャッシュのスピルアンドフィルアルゴリズムを自動的に決定することが可能である。システムは、ユーザのアルゴリズムのコード内においてインストラクションおよびデータのプリフェッチインストラクションを自動的に導入し、オンデマンドおよび適時のプリフェッチを行なうことができる。システムは、それぞれのキャッシュの書き戻しポリシー;メモリに対する読み出しおよび書き込みポートの数、およびキャッシュとメモリの間におけるバスの幅;全体的なコスト構造を低減しつつそれでも高いパフォーマンスを維持する、キャッシュのレベルおよび、共有/別々のインストラクションおよびデータのキャッシュ、または結合キャッシュ、または複数レベルへのそれの編成という観点から見たそれらの編成;メモリサイズ、メモリマップスキーム、アクセスサイズ、読み出し/書き込みポートの数ならびにそれらの幅、および最大パフォーマンスを得るべくメモリに必要な分割の方法という観点から見てのメモリの階層を決定することが可能である。システムは、マシンが効率的な形でアルゴリズムを実装するためのISAを自動的に決定することができる。システムは、コード空間の量を最小にしつつそれでも高いパフォーマンスを達成するインストラクションセットのための最適エンコーディングを自動的に決定することができる。システムは、利用可能なレジスタの最適利用を確保する呼び出し規約を自動的に決定することができる。反復的に、かつ階層的な形でなされるこれらのことはすべて、手元のアプリケーションに最適化された、所定のタイミング、コスト、および電力の要件を満たすチップに行き着く最適な包括的システムアーキテクチャを決定することになる。そのほかの実装としては次に示す内容を含めることができる。システムは、プロセッサのスカラ度およびインストラクションのグループ化規則を最適化することが可能である。システムはまた、必要とされるコアの数を最適化し、それらのコアを効果的に使用するべくインストラクションストリームを自動的に分割することも可能である。プロセッサアーキテクチャの最適化は、インストラクションセットの変更を含む。システムが行なうインストラクションセットの変更には、必要とされるインストラクションの数を低減させること、新しいインストラクションを見つけること、およびインストラクションをエンコードしてインストラクションのアクセス、デコード速度およびインストラクションのメモリサイズ要件を向上させることを含む。プロセッサアーキテクチャの最適化は、レジスタファイルポート、ポート幅、およびデータメモリへのポートの数のうちの1つまたは複数の変更を含む。プロセッサアーキテクチャの最適化は、データメモリサイズ、データキャッシュのプリフェッチポリシー、データキャッシュ構成、インストラクションメモリサイズ、インストラクションキャッシュのプリフェッチポリシー、およびインストラクションキャッシュ構成のうちの1つまたは複数の変更を含む。プロセッサアーキテクチャ最適化は、1つまたは複数のコプロセッサの追加を含む。システムは、アルゴリズムのためにプロセッサアーキテクチャのパフォーマンスを向上させるべくコンピュータ可読コードに対して固有のカスタマイズがなされた新しいインストラクションを自動的に生成することが可能である。システムは、コンピュータ可読コードのパーズを含み、さらに、ゼロオーバーヘッドループ演算の導入;必要とされるメモリ帯域幅の識別;1つまたは複数のハードウエアフラグとしての1つまたは複数のソフトウエア実装されたフラグの置換を含む。抽出するパラメータは、さらに、各ループのための実行サイクル時間の決定;各ループのための実行クロックサイクルカウントの決定;1つまたは複数のビンのためのクロックサイクルカウントの決定;演算子統計テーブルの生成;各関数のための統計の生成;および実行カウントの降順による行のソートを含む。システムは、共通使用されるインストラクションを1つまたは複数のグループにモールドし、各グループのためのカスタムインストラクションを生成してパフォーマンスを向上させることが可能であるインストラクションモールディング。システムは、アーキテクチャパラメータの変更のためのタイミングおよび面積のコストを決定することが可能である。モールドされた新しいインストラクションとの置換が可能なプログラム内のシーケンスが識別される。これは、シーケンス内のインストラクションをアレンジし直し、コードの機能を損なうことなく適合性を最大化する能力を含む。システムは、ポインタの進行を追跡し、ストライドおよびメモリアクセスパターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュ編成を最適化することができる。またシステムは、コンピュータ可読コードの静的プロファイリングおよびコンピュータ可読コードの動的プロファイリングの実行も含む。システムのチップ仕様は、コンピュータ可読コードのプロファイルに基づいて設計される。さらにチップ仕様は、コンピュータ可読コードの静的および動的プロファイリングに基づいて漸進的に最適化することが可能である。コンピュータ可読コードは、最適アッセンブリコードにコンパイルされることが可能であり、それが選択されたアーキテクチャのためのファームウエアを生成するべくアッセンブルされ、かつリンクされる。シミュレータが、ファームウエアのサイクル精度のシミュレーションを実行することが可能である。システムは、ファームウエアの動的プロファイリングを実行することができる。方法は、さらに、プロファイリングが行なわれたファームウエアに基づいて、またはアッセンブリコードに基づいてチップ仕様の最適化を行なうことを含む。システムは、設計されたチップ仕様のために、レジスタトランスファレベルRTLコードを自動的に生成することが可能である。またシステムは、RTLコードの合成を行なってシリコンを製造することも可能である。好ましい実施態様の利点には、次に示す内容のうちの1つまたは複数を含めることができる。システムは、ASICおよびASIPの開発のためのターンアラウンド時間および設計コストを有意に低減する。これは、特定のチップ設計ではなく、頭の中にある基礎をなすアルゴリズムを用いてCにより記述されたアプリケーションを利用することによってなされる。その後システムは、必須のソフトウエア開発キットおよびチップ上で走るファームウエアとともにそのアルゴリズムを実装するプロセッサベースのチップ設計を自動的に生成する。このプロセスは、ASIP/ASICのための数人年の努力に対し、設計に行き着くまで数週間しか要さない。システムは、アーキテクチャオプティマイザAOに頼ることによってアプリケーションの要件と整合するチップ設計を自動的に生成することが可能である。サイクル精度のシステムレベルのシミュレータから獲得されたアルゴリズムの実行プロファイル、およびアルゴリズムの静的プロファイル、およびチップに組み込まれる多様なハードウエアブロックの特性決定に基づいて、AOは、パフォーマンス、電力、およびコストに関するベンダの要件を満たす最適ハードウエア構成を決定する。アルゴリズムの分析に基づき、AOは、パフォーマンス要件を満たすだけでなく、手元のアルゴリズムに対してハードウエアを最適化することになる提案チップアーキテクチャに行き着く。AOは、一連の反復ステップを取る中で所定のアルゴリズムのための最適ハードウエアに収斂する最適アーキテクチャに行き着く。AOは、ASIPの多様な側面に対してそれが行なう一連の階層的決定に基づき、ベンダの評価基準に整合する所定のアルゴリズムのための最適アーキテクチャを決定し、したがって包括的最小アーキテクチャではない、局所的最小アーキテクチャの達成の中でAOがスタックすることはない。システムは、すべてのコストが考慮に入れられ、かつシステム設計者が評価するべき最良可能な数表現およびビット幅の候補を獲得するように評価プロセスを自動化する。方法は、与えられたアーキテクチャの面積、タイミング、および電力のコストを迅速かつ自動化された態様で評価することができる。この方法は、コスト計算エンジンとして使用される。方法は、最適態様でアルゴリズムに基づいてDSPを自動的に合成することを可能にする。システム設計者が、別のものではなくこの特定の表現を選ぶことに関連付けされるハードウエア面積、遅延、および電力のコストを意識する必要はない。システムは、ハードウエア面積、遅延、および電力が、アルゴリズム評価段階において可能な限り正確にモデリングされることを可能にする。システムの好ましい実施態様のこのほかの利点には、次に示す内容のうちの1つまたは複数を含めることができる。このシステムは、チップ設計の問題を軽減し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエアチップソリューションが設計される方法におけるパラダイムを完全にシフトするものである。ここで述べている自動システムは、システムへのプライマリ入力が、ローレベルのプリミティブではなく、コンピュータ可読コード、モデル、またはアルゴリズム仕様であることから、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエアチップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。このシステムを使用するこのほかの恩典として、さらに次に示す内容を含めることができる。1スピード:チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、このシステムを使用している会社が、自社の製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。2コスト:一般にチップの実装に必要とされる多数の技術者が不要となる。このことは、このシステムを使用している会社に夥しいコストの節約をもたらす。3最適性:このシステムプロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。このシステムは、デジタルチップ構成要素に向けた、それを有するシステムの設計で使用される方法におけるパラダイムを完全にシフトするものである。このシステムは、C/MATLABマトラボで記述されたアルゴリズムからデジタルハードウエアを生成する完全に自動化されたソフトウエアプロダクトである。このシステムは、CまたはMATLABマトラボ等の高水準言語を採用してハードウエアチップを実現するプロセスへの独特のアプローチを使用する。要約して言えば、これは、チップ設計を完全に自動化されたソフトウエアプロセスにする。図1は、プログラム、コード、またはコンピュータモデルによって機能が明細に規定されるカスタムICまたはASICデバイスのための最良のアーキテクチャを自動的に決定する一例のシステムを示している。入力1として提供される所定のコンピュータ可読コードまたはプログラムのためのアーキテクチャ定義を規定するにあたっては、種々の段階が関与する。1つの実施態様においてはプログラムがC言語で記述されるが、そのほかの言語、MATLABマトラボ、C、またはジャバJava登録商標等も同様に使用可能である。プログラムのコンパイル、アッセンブル、およびリンクが行なわれる3。シミュレータまたは実際のコンピュータ上において実行可能コードを走らせる5。実行からのトレースがプロファイラに提供される7。プロファイラによって生成された情報は、特に、静的実行および動的実行についての呼び出しグラフ、コード実行プロファイル、レジスタ割り付け情報、および現在のアーキテクチャを含み、この情報は、アーキテクチャオプティマイザAOに提供される10。アーキテクチャオプティマイザの出力はアーキテクチャ仕様であり、特に、パイプライン情報、コンパイラ呼び出し規約、レジスタファイル、キャッシュ編成、メモリ編成、およびインストラクションセットアーキテクチャISAならびにインストラクションセットエンコーディング情報を含んでいる。AOは、アプリケーションの要件に整合するチップ設計を生成する。サイクル精度のシステムレベルのシミュレータから獲得したアルゴリズムの実行プロファイル、およびアルゴリズムの静的プロファイル、およびチップに組み込まれる多様なハードウエアブロックの特性決定に基づいて、AOは、パフォーマンス、電力、およびコストに関するベンダの要件を満たす最適ハードウエア構成を決定する。アルゴリズムの分析に基づき、AOは、パフォーマンス要件を満たすだけでなく、手元のアルゴリズムに対してハードウエアを最適化することになるチップアーキテクチャを提案する。AOは、一連の反復ステップの中で所定のアルゴリズムのための最適ハードウエアに収斂する最適アーキテクチャに行き着く。AOは、ASIPの多様な側面に対してそれが行なう一連の階層的決定に基づき、ベンダの評価基準に整合する所定のアルゴリズムのための最適アーキテクチャを決定する。したがって局所的最小アーキテクチャの達成において、いかなるポイントにおいてもそれがスタックすることはない。むしろAOは、包括的最小アーキテクチャを設計することが可能である。アーキテクチャ最適化プロセスにおいて包括的最小を損なう結果を招く虞のある、局所的最小化におけるAOのスタックを回避するために、AOは、階層的態様でアーキテクチャの最適化を実行する。階層的最適化プロセスの1つの実装においては、AOがまず、ユーザによって与えられた制約を満たす最適な態様で、アプリケーションカーネルループを最適にマップするために必要となる演算要素の数およびパイプラインレイアウトを決定する。それが終わるとAOは、ユーザによって与えられた制約を満たすとともに、設計モデラDMによって決定づけられるとおりのプロセス要件に整合する最適インストラクションセットを選択する。次にAOは、レジスタファイルおよびそれらの編成を決定し、その後にキャッシュの編成およびメモリの編成が続く。これらの階層的チェックポイントのそれぞれにおいて、AOは、それぞれの構成要素の最適編成を決定し、設計がDMによって与えられたとおりのハードウエアプロセス制約内であることを各ポイントにおいて確保する。AOは、所定のアルゴリズムの実行プロファイルに基づいて、アルゴリズムのセットを当て嵌める最適コンピュータアーキテクチャを自動的に生成することができる。図2は、アーキテクチャオプティマイザを用いた最適アーキテクチャの決定のための一例のシステムを示している。図2において、入力としてユーザアプリケーション30が提供される。それに加えて、初期アーキテクチャ記述32が指定される。アーキテクチャ記述がツールジェネレータ34によって処理され、それが、ターゲット依存度37を用いてコンパイラ36のための、ターゲット依存度39を用いてアッセンブラ38のための、ターゲット依存度41を用いてリンカ40のための、ターゲット依存度43を用いてシミュレータ42のための、およびターゲット依存度45を用いてプロファイラ44のためのターゲット依存情報を生成する。ターゲット依存情報に基づいて、ユーザアプリケーション30のプロファイルが生成される。プロファイルは、クリティカルルーチンおよびそれらのカーネルもっとも実行されるループを識別する。プロファイルはまた、メモリトラフィックパターンも識別する。プロファイルは、アーキテクチャオプティマイザ46に提供される。アーキテクチャオプティマイザ46は、設計データモデラ48からのユーザ入力も使用する。設計モデラ48は、特定のハードウエアについてのタイミング、面積、電力、およびそのほかの関連する情報を提供し、その種の情報は、アーキテクチャオプティマイザ46によるオンデマンドでのクエリが可能である。オプティマイザ46の出力は、新しい最適化後のアーキテクチャ50である。最適化後のアーキテクチャ50は、その後、あらかじめ決定済みの最適化目標が達成されるまでアーキテクチャの反復的最適化のためにツールジェネレータ34に提供される。アーキテクチャ内の構成要素のそれぞれ、およびそれらの全体的な相互接続を最適化することによって新しいアーキテクチャが獲得される。所定のセットのアプリケーション/アルゴリズムによって、最適コンピュータシステムアーキテクチャは、パフォーマンス、コスト、および電力といった多様なファクタに基づいて自動的に決定することが可能である。最適アーキテクチャは、システムレベルのアーキテクチャおよびプロセッサレベルのアーキテクチャを含むことができる。システムレベルのアーキテクチャについて言えば、AOが、たとえば、必要とされるメモリの量、サポートするメモリ帯域幅、DMAチャンネルの数、クロック、およびペリフェラルを自動的に決定することが可能である。プロセッサレベルのアーキテクチャについて言えば、AOが、システムのためのパフォーマンス評価基準およびアルゴリズム内のパラレリズムに基づいて、演算要素のスカラ度の必要性ならびにその量;特定のアルゴリズムの効率的な実装に必要とされる演算要素のタイプ;アプリケーションの効率的な実装に必要とされる演算要素の数;段数、インストラクション発行レート、スカラ度という観点から見たパイプライン編成、加算器の数、ロード、ストア単位等という観点から見た演算要素の数、およびパイプライン構造内における演算要素の配置;ALU演算要素の幅;レジスタファイルの数および、レジスタの数、それらの幅、読み出しポートならびに書き込みポートの数という観点から見たそれらの構成;コンディションコードレジスタの必要性;インストラクションキャッシュの必要性ならびにその量、および必要とされるデータキャッシュ、およびそれらの階層;インストラクションキャッシュおよびデータキャッシュそれぞれのための別々のキャッシュメカニズム、ラインサイズ、スピルフィルアルゴリズムを自動的に決定することが可能である。AOは、オンデマンドの、および適時のプリフェッチを行なうユーザのアルゴリズムのコード内におけるインストラクションおよびデータのプリフェッチインストラクションを自動的に導入することができる。AOは、それぞれのキャッシュの書き戻しポリシー;メモリに対する読み出しおよび書き込みポートの数;キャッシュとメモリの間におけるバスの幅;および全体的なコスト構造を低減しつつそれでも高いパフォーマンスを維持する、キャッシュのレベルおよび、共有または別々のインストラクションおよびデータのキャッシュ、または結合キャッシュ、または複数レベルへのそれの編成という観点から見たそれらの編成を決定することが可能である。AOは、メモリサイズ、メモリマップスキーム、アクセスサイズ、読み出し/書き込みポートの数ならびにそれらの幅、および最大パフォーマンスを得るべくメモリに必要な分割の方法という観点から見てのメモリの階層を自動的に決定することが可能である。AOは、マシンが効率的な形でアルゴリズムを実装するためのISAを自動的に決定すること、さらにはコード空間の量を最小にしつつそれでも高いパフォーマンスを達成するインストラクションセットのための最適エンコーディングを自動的に決定することができる。またAOは、利用可能なレジスタの最適利用を確保する呼び出し規約を自動的に決定することもできる。以上の動作は、反復的に、かつ階層的な態様で行なわれて、アプリケーション30に最適化された、所定のタイミング、コスト、および電力の要件を満たすチップに行き着く最適な包括的システムアーキテクチャを決定することが可能である。次に、AOによる特定のアーキテクチャのパイプラインおよびスカラ度特性の決定について説明する。Cまたはそのほかのコンパイル可能な任意の形式のコードまたはアルゴリズムが与えられると、そのコードを実行することができる。実行に際してはそれの実行プロファイルが獲得される。この実行プロファイルに基づいて、たとえば実行時間実行プロファイルに基づいての80乃至90を占めるコードの領域を考慮に入れることによってクリティカルな演算領域/ブロックが決定される。これらの識別された演算ブロックを構成する演算がモデリングされ、見積もられたパフォーマンスおよび関係する演算内のパラレリズムに基づいて、並列実行パイプの数とともにパイプラインレイアウトが、すべてデータモデラDMとの一定した協議の中で決定される。このモデリングは、スーパースカラまたはVLIW実行エンジンのいずれかとして組織化される実行の並列パイプの数とともにプロセッサのクロック周波数を決定する。ここでISAについて見てみると、実行パイプのモデリングが行なわれた後、AOは、80乃至90の実行プロファイルに基づいて識別済みのクリティカル演算領域内のクリティカルパスを減ずる。クリティカルパスを減ずる新しいインストラクションが、再び、これらの新しいインストラクションを実行するハードウエアブロックのためのタイミング、面積、および電力についてのDMとの一定した協議の中で作成される。これらの演算ブロックは、全C関数およびその他もろもろの関数が含まれる。次に、AOによって決定される1つの例示的なコンパイラ呼び出し規約について説明する。プロセッサのための例示的なコンパイラ呼び出し規約は、呼び出しスタックのレイアウト、パラメータの引き渡し専用の所定数のレジスタ、呼び出しにわたって生きる値を保持するために使用される特定数のレジスタ被呼び出し側保存レジスタ、呼び出しにわたって生きない値を保持するために使用される特定数のレジスタ呼び出し側保存レジスタを含むことができる。所定のセットのアプリケーションのための最適呼び出し規約を決定するために、AOは、その決定の基礎を静的呼び出しグラフ、および動的呼び出しならびにそれの構成ルーチンの挙動に置く。ルーチンが呼び出される回数に基づき、特定の重みが与えられ、ルーチンに渡されるパラメータの数もまた同じ重みを獲得する。もっとも高いあらかじめ決定済みのパーセンテージの実行時間を占めたすべてのルーチンが、このアルゴリズムにおいては、パラメータレジスタの数を決定するものと見なされる。パラメータレジスタの数が決定されると、AOは、続いて必要とされる呼び出し側保存レジスタおよび被呼び出し側保存レジスタの数を決定する。呼び出し側保存レジスタの数を低減する考慮事項は、クリティカルパス内に存在するレジスタのスピルアンドフィルコードが最小限となるようにクリティカルルーチン内の実行時間を低減することである。この数は、レジスタの割り付けおよび呼び出し側保存レジスタおよび被呼び出し側保存レジスタの数の決定、およびレジスタのスピルアンドフィルコードの最小化をはじめ、関数のプロローグおよびエピローグそれぞれにおける被呼び出し側保存レジスタのセーブおよびリストアの低減を行なうことが可能な特別なレジスタアロケータが提供するデータに基づいてAOによって決定される。次に、適切なレジスタおよびレジスタファイルの決定について説明する。呼び出し規約が決定された後は、パラメータレジスタ、呼び出し側保存レジスタ、および被呼び出し側保存レジスタの数が既知になる。オリジナルのappのクリティカル領域に対する必要性に基づいて、レジスタファイル1つまたは複数の構成が決定され、また個別の1ビットフラグレジスタの必要性も決定されて、レジスタファイルおよび個別のレジスタの編成および構成が完成される。AOはまた、レジスタファイルに作用するISAに基づいてレジスタの読み出しポート、書き込みポート、および所定のレジスタファイルのための読み出し書き込みポートの数の決定も行なう。個別のレジスタの幅は、アプリケーションの要件に基づいて決定される。レジスタファイル内の個別のレジスタの幅は、レジスタファイル内のほかのレジスタの幅と異なることが可能である。次にキャッシュの決定に移るが、キャッシュは、ユーザアプリケーションがデータへのアクセスに必要とするレートとより遅いメモリブロックからデータの供給が可能なレートの間における不整合を橋渡しする高速データアクセスメカニズムである。ユーザアプリケーションが必要とするデータアクセスレート、およびメモリからデータ供給が可能な速度に基づいて、AOは、キャッシュの必要性を決定する。ユーザアプリケーションがキャッシュを必要としていると決定された場合には、AOが、単純なバッファからより洗練された階層的な多レベルのキャッシュメカニズムまでの範囲にわたることができるキャッシュの構成を決定する。いずれの場合においてもAOは、キャッシュラインのサイズ、ラインの数、キャッシュの結合度、キャッシュラインの置換ポリシー、プリフェッチポリシー存在する場合、およびキャッシュの書き込みポリシーを、アルゴリズムのクリティカル領域内におけるパフォーマンスに再び基づいて決定する。また、キャッシュに対する読み出しおよび書き込みポートの数、およびキャッシュとメモリの間におけるバス幅の決定も行なう。さらに、別々のインストラクションキャッシュ、データキャッシュ、または結合キャッシュの必要性が存在する場合には、時々に応じてそれらの決定も行なうことになる。次にメモリ要件に移るが、AOは、アプリケーションのニーズに基づいてメモリのサイズ、メモリのアクセス幅、およびメモリブロックに対する読み出しおよび書き込みポートの数を決定する。AOはまた、メモリブロックに対するバス幅の決定も行なう。次に、ISAの決定およびAOによるインストラクションセットのエンコーディングを説明する。アルゴリズムの分析の間に、AOは、手元のアプリケーションに関係するインストラクションセットのアーキテクチャを決定する。関係する演算、およびアルゴリズムのための最適ISAを得るためにサポートが必要なアドレシングモード、およびサポートされるべきイミディエトオペランドのサイズ、およびプロセッサ上においてアプリケーションを実装するためにインストラクションがサポートを必要とするモードに基づいてISAを決定する。AOは、使用されていないモードおよびユーザアプリケーションが使用することのないオペランド範囲を取り除く。これらの決定は、特に、アプリケーションスイートの静的プロファイルをはじめ動的プロファイルに基づく。それに加えて、アーキテクチャオプティマイザは、コードサイズを最小化するインストラクションセットのための最適エンコーディングを生成する。考慮事項に応じて、固定インストラクション長、またはデュアルインストラクション長、または可変インストラクション長のうち、コードサイズを低く、パフォーマンスを高く保つ上で適切ないずれかに行き着くことになる。図3は、新しいインストラクションを形成する一例のプロセスを示している。図3のプロセスは、ユーザコード内において実行されるクリティカルルーチンおよびカーネルまたはループを識別するプロファイラデータを獲得する。プロセスは各カーネルについて次に示す内容を実行する。最初にプロセスは、データフローグラフおよびコントロールフローグラフを構築する64。次にプロセスは、可能であればコントロール依存度をデータ依存度に変換する66。続いてプロセスは、データフローグラフの各基本ブロック内においてクリティカルパスを識別する68。その後プロセスは、インストラクションセットに追加されることになる潜在的に新しいインストラクションを形成するクリティカルパス内の2つまたはそれより多くの演算の結合を試みる70。潜在的に新しいインストラクションは、その後、ハードウエア内において実装することが可能であり、ユーザコードに対して新しいアーキテクチャが最適化されることを可能にする。プロセスは、新しいインストラクションを実装する特定のハードウエアブロックについて、属性の中でも特にタイミング、面積、および電力に関するクエリを設計モデラDMに対して行なう72。DMの応答から、プロセスは、タイミング、面積、電力、およびそのほかのファクタが地積およびパフォーマンス予算を満たすか否か、および節約が新しいインストラクションの作成に充分であるか否かをチェックする74。否であればプロセスが動作78にジャンプするが、そうでなければプロセスは、ハードウエアおよびエンコーディングスキームとともに新しいインストラクションを作成する76。次にプロセスは、追加のインストラクションが作成されるべきであるか否かをチェックする78。そうであればプロセスが70までループバックするが、否であればプロセスは、続いてすべてのクリティカルルーチンの検査/処理が完了したか否かをチェックする80。否であればプロセスが64までループバックするが、そうでなければプロセスが終了する。1つの実装においては、プリ‐プロセッサを使用し、入力プログラムまたはユーザコードが、パーザによってその種のプログラムが解析される前にフォーマットされ、フォーマットプロセスにおいては、プログラムの機能面が保存される。パーザは、最初に、基本アーキテクチャを使用してすべての情報を抽出し、データベースを作成する。その後システムは、プログラムの静的および動的プロファイルを収集する。パーザの出力からアーキテクチャ定義に必要とされるパラメータがパラメータ抽出によって抽出される。システムは、これらのパラメータおよびプログラムによって満たされるべきリアルタイムおよびハードウエア制約を入力として用いて、与えられたCプログラムのための所定の段階においてもっとも適するアーキテクチャを反復的に決定する。このアーキテクチャが、Cプログラムおよびパラメータ抽出のパーズに使用される。新しいアーキテクチャが再び定義される。このループは、最良の時間、面積、および電力のパフォーマンスを与える最良のアーキテクチャが定義されるまで継続される。リアルタイムパフォーマンス制約が満たされた後は、そのほかのハードウエア制約が考察される。ハードウエア制約は、面積、電力、および何らかのそのほかのパラメータという観点から表現することが可能である。その後アルゴリズムは、これらの制約を満たすべく、アーキテクチャを微調整して冗長なパスおよびクリティカルでないセクションを減少させる。別のアルゴリズムが採用されて、利用可能なすべてのインストラクションをチェックし、これらのインストラクションによって提供される恩典を検証する。コスト関数が使用されてこのチェックが実行される。インストラクションデコーディング時間が最小限のレベルまで低減されるように、リアルタイムパフォーマンス制約に影響を及ぼさずに安全に取り除くことが可能なインストラクションがセットから取り除かれる。これらの制約が満たされることもあれば、満たされないこともある。これらは、与えられたアプリケーションにとって定義されたアーキテクチャが大きな過剰とならず、かつアーキテクチャの複雑性を低減する任意の範囲が調べられるように使用される。図4は、カスタムICを自動的に生成するシステムの一例を示している。図4のシステムは、選択された目標とするアプリケーションに対するカスタムハードウェアソリューションアーキテクチャを自動的に生成することをサポートする。目標とするアプリケーションの仕様は、一般に、C、MATLABマトラボ、SystemCシステムC、フォートラン、エイダ等の高水準言語またはそのほかのいずれかの言語によるコンピュータ可読コードとして表現されたアルゴリズムを通じてなされる。仕様は、目標とするアプリケーションの記述を含み、またそれには、望ましいコスト、面積、電力、速度、パフォーマンス、およびそのほかのハードウエアソリューションの属性といった1つまたは複数の制約も含まれる。図4においては、ICカスタマがプロダクト仕様102を生成する。通常は、所望のプロダクトのすべての主要機能を取り込んだ初期プロダクト仕様が存在する。そのプロダクトから、アルゴリズムの専門家がそのプロダクトに必要とされるコンピュータ可読コードまたはアルゴリズムを識別する。それらのアルゴリズムのうちのいくつかは、サードパーティから、または標準開発委員会からのIPとして利用可能となることがある。それらのうちのいくつかは、製品開発の一部として開発されなければならない。この態様においては、さらにプロダクト仕様102が、とりわけCプログラム等のプログラムまたはMATLABマトラボモデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム104で詳述される。プロダクト仕様102は、また、とりわけコスト、面積、電力、プロセスタイプ、ライブラリ、およびメモリタイプ等の要件106も含んでいる。コンピュータ可読コードまたはアルゴリズム104および要件106は、自動化されたICジェネレータ110に提供される。コードまたはアルゴリズム104およびチップ設計に課せられた制約だけに基づいて、ICジェネレータ110は、人間の掛かり合いを殆ど、またはまったく伴うことなく、GDSファイル112、ICを実行させるファームウエア114、ソフトウエア開発キットSDK116、および/またはテストスイート118を含む出力を自動的に生成する。GDSファイル112およびファームウエア114は、カスタムチップ121の製造に使用される。このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。このシステムは、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わり、アルゴリズムが、そのアプリケーションのために特に最適化されたプロセッサ上において実装されることが常に可能となる。システムは、この最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。この全体的なプロセスは、現在数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。要約して言えば、このシステムは、プロダクト開発のデジタルチップ設計部分をブラックボックス化する。1つの実施態様においては、このシステムプロダクトが、次に示すものを入力として取ることが可能である。C/MATLABマトラボで定義されたコンピュータ可読コードまたはアルゴリズム、必要とされる周辺機器、面積目標、電力目標、マージン目標将来的なファームウエア更新のためにどの程度のオーバーヘッドを組み込むべきか、またどの程度複雑性が増加するか、プロセスの選択肢、標準セルライブラリの選択肢、テスト可能性スキャンシステムの出力は、関連付けされるファームウエアすべてを伴ったデジタルハードマクロとすることができる。このデジタルハードマクロのために最適化されたソフトウエア開発キットSDKもまた自動的に生成されて、ファームウエアに対する将来的なアップグレードがプロセッサの交換を強いることなく実装されるようにすることが可能である。このシステムは、選択された目標とするアプリケーションに対して完全かつ最適なハードウエアソリューションを自動的に生成する。共通の目標とするアプリケーションは埋め込みアプリケーション空間内にあるが、それらは、必ずしもそれに限定されない。次に、例として、自動化されたチップ設計システムをサポートするコンピュータのブロック図について考察する。コンピュータは、好ましくは、プロセッサ、ランダムアクセスメモリRAM、プログラムメモリ好ましくは、フラッシュROM等の書き込み可能な読み出し専用メモリROM、および入力/出力I/OコントローラをCPUバスによって結合された形で含んでいる。このコンピュータは、ハードディスクおよびCPUバスに結合されるハードドライブコントローラをオプションとして含むことができる。ハードディスクは、本発明等のアプリケーションプログラムおよびデータを記憶するために使用することができる。それに代えて、アプリケーションプログラムをRAMまたはROM内に記憶することができる。I/Oコントローラは、I/Oバスを経由してI/Oインターフェースに結合される。I/Oインターフェースは、シリアルリンク、ローカルエリアネットワーク、無線リンク、およびパラレルリンク等の通信リンクを介してアナログまたはデジタル形式でデータの受信および送信を行なう。オプションとして、表示器、キーボード、およびポインティングデバイスマウスがI/Oバスに接続されることもある。それに代えて、I/Oインターフェース、表示器、キーボード、およびポインティングデバイスのために別々の接続別々のバスが使用されることもある。プログラマブル処理システムは、あらかじめプログラムすること、または別のソースたとえば、フレキシブルディスク、CD‐ROM、または別のコンピュータからプログラムをダウンロードすることによってそれをプログラムすることおよび再プログラムすることができる。各コンピュータプログラムは、目に見える形として、コンピュータによってストレージ媒体またはデバイスが読み出されたときに、ここで説明している手順を実行するべくそのコンピュータの構成および動作のコントロールを行なうために、汎用または専用プログラマブルコンピュータによって読み出されることが可能なマシン可読ストレージ媒体またはデバイスたとえば、プログラムメモリまたは磁気ディスク内に記憶される。また本発明のシステムは、コンピュータプログラムを用いて構成されるコンピュータ可読ストレージ媒体内において具体化されると考えてもよく、それにおいてストレージ媒体は、ここで述べている機能を実行するべく特定の、あらかじめ定義済みの態様でコンピュータを動作させるように構成される。以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。