自動的に生成されたプロセッサアーキテクチャのためのソフトウエア開発ツールを自動的に生成するための方法であって、a.ターゲットプロセッサの記述を受け取り、b.コンパイラジェネレータを使用してターゲットコンパイラを自動的に生成し、c.アッセンブラジェネレータを使用してターゲットアッセンブラを自動的に生成し、d.リンカジェネレータを使用してターゲットリンカを自動的に生成し、e.シミュレータジェネレータを使用してターゲットシミュレータを自動的に生成し、f.プロファイラジェネレータを使用してターゲットプロファイラを自動的に生成し、g.前記生成されたターゲットコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用してすべてのユーザ制約または要件が満たされるまでプロセッサアーキテクチャの1つまたは複数のパラメータを変更することによって新しいプロセッサアーキテクチャを反復的に生成するとともに、それぞれの新しいプロセッサアーキテクチャについて前記新しいプロセッサアーキテクチャごとに前記ターゲットコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを再生成し、h.生成された最適のプロセッサアーキテクチャを半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成する、方法。前記コンパイラジェネレータは、プロセッサのインストラクションセットアーキテクチャ内のインストラクションのセマンティクスを含む前記ターゲットプロセッサの高レベルの記述を読み込み、前記コンパイラジェネレータは、ターゲットプロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティックツリーを構築し、前記ターゲットプロセッサのためのターゲットコンパイラを生成する、請求項1に記載の方法。前記ターゲットコンパイラは、呼び出しスタックレイアウト、レジスタアロケーション、インストラクションスケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、および前記ターゲットプロセッサの最適化を取り扱う、請求項2に記載の方法。前記アッセンブラジェネレータは、インストラクションのシンタックス、インストラクションのバイナリエンコーディング、および前記インストラクションのための可能性のある再配置を読み込み、前記ターゲットアッセンブラを生成する、請求項1に記載の方法。前記ターゲットアッセンブラは、前記インストラクションのシンタックスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、未解決のシンボルを出力する、請求項4に記載の方法。前記ターゲットリンカは、オブジェクトファイルならびにライブラリを取り入れて前記オブジェクトコードに適用されるすべての前記再配置を用いて実行可能ファイルを生成するオブジェクトファイルリンカを生成する、請求項1に記載の方法。前記シミュレータジェネレータは、パイプライン構造、インストラクションセットアーキテクチャ、インストラクションのセマンティクス、および各ハードウエアブロックの特性を読み込む、請求項1に記載の方法。前記ターゲットシミュレータは、キャッシュモデル、メモリモデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを含む、請求項7に記載の方法。デバッガジェネレータを使用してターゲットデバッガを生成する請求項1に記載の方法。前記ターゲットデバッガは、呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、およびインストラクションの逆アッセンブリ、ターゲットマシン上のレジスタの数ならびに特性を取り扱う、請求項9に記載の方法。自動的に生成されたプロセッサアーキテクチャのためのソフトウエア開発ツールを自動的に生成するためのシステムであって、a.コンパイラジェネレータを使用してターゲットコンパイラを自動的に生成するための手段と、b.アッセンブラジェネレータを使用してターゲットアッセンブラを自動的に生成するための手段と、c.リンカジェネレータを使用してターゲットリンカを自動的に生成するための手段と、d.シミュレータジェネレータを使用してターゲットシミュレータを自動的に生成するための手段と、e.プロファイラジェネレータを使用してターゲットプロファイラを自動的に生成するための手段と、f.前記ターゲットコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用してコスト関数として表わされるタイミング、面積、電力およびハードウエア制約のすべてが満たされるまでプロセッサアーキテクチャの1つまたは複数のパラメータを変更することによって新しいプロセッサアーキテクチャを反復的に生成するための手段であって、各ターゲットコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラが、それぞれの前記ジェネレータを使用してプロセッサアーキテクチャごとにカスタム生成される、新しいプロセッサアーキテクチャを反復的に生成するための手段と、g.最適の生成されたプロセッサアーキテクチャを半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成するための手段と、備えるシステム。前記コンパイラジェネレータは、プロセッサのインストラクションセットアーキテクチャ内のインストラクションのセマンティクスを含む前記ターゲットプロセッサの高レベルの記述を読み込み、前記コンパイラジェネレータは、ターゲットプロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティックツリーを構築し、前記ターゲットプロセッサのためのターゲットコンパイラを生成する、請求項11に記載のシステム。前記ターゲットコンパイラは、呼び出しスタックレイアウト、レジスタアロケーション、インストラクションスケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、および前記ターゲットプロセッサの最適化を取り扱う、請求項12に記載のシステム。前記アッセンブラジェネレータは、インストラクションのシンタックス、インストラクションのバイナリエンコーディング、および前記インストラクションのための可能性のある再配置を読み込み、前記ターゲットアッセンブラを生成する、請求項11に記載のシステム。前記ターゲットアッセンブラは、前記インストラクションのシンタックスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、未解決のシンボルを出力する、請求項14に記載のシステム。前記ターゲットリンカは、オブジェクトファイルならびにライブラリを取り入れて前記オブジェクトコードに適用されるすべての前記再配置を用いて実行可能ファイルを生成するオブジェクトファイルリンカを生成する、請求項11に記載のシステム。前記シミュレータジェネレータは、パイプライン構造、インストラクションセットアーキテクチャ、インストラクションのセマンティクス、および各ハードウエアブロックの特性を読み込む、請求項11に記載のシステム。前記ターゲットシミュレータは、キャッシュモデル、メモリモデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを含む、請求項17に記載のシステム。デバッガジェネレータを使用してターゲットデバッガを生成することを含む、請求項11に記載のシステム。前記ターゲットデバッガは、呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、およびインストラクションの逆アッセンブリ、ターゲットマシン上のレジスタの数ならびに特性を取り扱う、請求項19に記載のシステム。ソフトウエア開発に必要とされるこれらすべてのソフトウエアツールはプロセッサに固有であり、言い換えると、たとえばMIPSプロセッサ、IBMのPowerPC、またはSUN‐SPARCのためのソフトウエアの開発を希望するのであれば、MIPSプロセッサのためのCコンパイラ、アッセンブラ、リンカ、シミュレータ、およびデバッガが開発される必要がある。これらのツールをすべて開発するには、それぞれのプロセッサごとに数人年severalmanyearsを要する。自動的に生成されるプロセッサアーキテクチャのためのソフトウエア開発ツールを、ターゲットプロセッサの記述を受け取り、コンパイラジェネレータを使用してターゲットコンパイラを自動的に生成し、アッセンブラジェネレータを使用してターゲットアッセンブラを自動的に生成し、リンカジェネレータを使用してターゲットリンカを自動的に生成し、シミュレータジェネレータを使用してターゲットシミュレータを自動的に生成し、プロファイラジェネレータを使用してターゲットプロファイラを自動的に生成し、生成されたターゲットコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用し、すべてのユーザ制約または要件が満たされるまでプロセッサアーキテクチャの1つまたは複数のパラメータを変更することによって新しいプロセッサアーキテクチャを反復的に生成するとともに、それぞれのプロセッサアーキテクチャについてそれぞれのプロセッサアーキテクチャごとにターゲットコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを再生成し、最適の生成されたプロセッサアーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する、ことによって自動的に生成するシステムおよび方法が開示されている。上記の態様の実装には、次に示す内容のうちの1つまたは複数を含めることができる。コンパイラジェネレータは、考察中のプロセッサの高レベルの記述を読み込む。コンパイラジェネレータは、プロセッサISA内の多様なインストラクションのセマンティクスを読み込み、ターゲットプロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティックツリーを構築し、ターゲットプロセッサコードの生成、呼び出しスタックレイアウト、レジスタアロケーション、インストラクションスケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、およびそのほかの、ターゲットプロセッサ上において可能な多様な最適化のために必要とされるコードを生成する。アッセンブラジェネレータは、多様なインストラクションのシンタクス、それらのバイナリエンコーディング、および多様なインストラクションに適用するために必要な可能性のある再配置を読み込む。この情報に基づいてその後アッセンブラジェネレータがアッセンブラを生成する。アッセンブラジェネレータは、ターゲットプロセッサのためのインストラクションのリストを、それらのシンタクスならびに有効オペランド、およびそれらの範囲とともに取り入れ、すべての未解決のシンボルについて、アッセンブラを構築してインストラクションのシンタクスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、あらゆる関連再配置レコードを発行する。リンカジェネレータは、オブジェクトファイルリンカを生成し、それがオブジェクトファイルならびにライブラリを取り入れ、オブジェクトコードに適用されるすべての再配置を用いて実行可能ファイルを生成する。シミュレータジェネレータは、パイプライン構造、ISA、インストラクションのセマンティクス、およびハードウエアブロックのそれぞれの特性が定義されているマシン記述を読み込む。アーキテクチャのすべての要素の定義に基づいて、シミュレータジェネレータは、キャッシュモデル、メモリモデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを生成する。このシミュレータは、シミュレータジェネレータによって自動的に生成され、生成されたシミュレータは、実際のハードウエアモデルを正確に反映する。プロファイラジェネレータは、特にターゲットマシンのレジスタの記述およびインストラクションセットを取り入れ、ターゲットマシン上で実行されるアプリケーションの静的実行プロファイルをはじめ、動的実行プロファイルを生成するターゲットプロセッサのためのプロファイラを生成する。デバッガジェネレータは、ターゲットプロセッサのインストラクションセットの記述を呼び出しスタックレイアウトとともに取り入れ、ターゲットプロセッサに固有のデバッガを生成する。このようにして生成されたデバッガは、上記のサイクルベースのシミュレータまたは実際のハードウエアチップのいずれかへのフックアップが可能である。呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、インストラクションの逆アッセンブリ、ターゲットマシン上のレジスタの数および特性はすべて、デバッガジェネレータの一部として自動的に生成される。そのほかの実装としては次に示す内容を含めることができる。それぞれのアーキテクチャ最適化の繰り返しごとに、システムは、プロセッサのスカラ度およびインストラクショングルーピング規則を最適化することが可能である。システムはまた、必要とされるコアの数を最適化し、それらのコアを効果的に使用するべくインストラクションストリームを自動的に分割することも可能である。プロセッサアーキテクチャの最適化は、インストラクションセットの変更を含む。システムが行なうインストラクションセットの変更には、必要とされるインストラクションの数を低減させること、およびインストラクションをエンコードしてインストラクションのデコード速度およびインストラクションのメモリサイズ要件を向上させることを含む。プロセッサアーキテクチャの最適化は、レジスタファイルポート、ポート幅、およびデータメモリへのポートの数のうちの1つまたは複数の変更を含む。プロセッサアーキテクチャの最適化は、データメモリサイズ、データキャッシュのプリフェッチポリシー、データキャッシュポリシー、インストラクションメモリサイズ、インストラクションキャッシュのプリフェッチポリシー、およびインストラクションキャッシュポリシーのうちの1つまたは複数の変更を含む。プロセッサアーキテクチャ最適化は、コプロセッサの追加を含む。システムは、プロセッサアーキテクチャのパフォーマンスを向上させるべくコンピュータ可読コードに対して独特のカスタマイズがなされた新しいインストラクションを自動的に生成することが可能である。システムは、コンピュータ可読コードのパーズを含み、さらにダミー代入の除去、冗長なループ演算の除去、必要とされるメモリ帯域幅の識別、1つまたは複数のハードウエアフラグとしての1つまたは複数のソフトウエア実装されたフラグの置換、および期限切れの変数の再使用を含む。抽出するパラメータは、さらに、各行のための実行サイクル時間の決定、各行のための実行クロックサイクルカウントの決定、1つまたは複数のビンのためのクロックサイクルカウントの決定、演算子統計テーブルの生成;各関数のための統計の生成;および実行カウントの降順による行のソートを含む。システムは、共通使用されるインストラクションを1つまたは複数のグループにモールドし、各グループのためのカスタムインストラクションを生成してパフォーマンスを向上させることが可能であるインストラクションモールディング。システムは、アーキテクチャパラメータの変更のためのタイミングおよび面積のコストを決定することが可能である。IMCとの置換が可能なプログラム内のシーケンスが識別される。これは、シーケンス内のインストラクションをアレンジし直し、コードの機能を損なうことなく適合性を最大化する能力を含む。システムは、ポインタの進行を追跡し、ストライドおよびメモリアクセスパターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュポリシーを最適化することができる。またシステムは、コンピュータ可読コードの静的プロファイリングおよび/またはコンピュータ可読コードの動的プロファイリングの実行も含む。システムのチップ仕様は、コンピュータ可読コードのプロファイルに基づいて設計される。さらにチップ仕様は、コンピュータ可読コードの静的および動的プロファイリングに基づいて漸進的に最適化することが可能である。コンピュータ可読コードは、最適アッセンブリコードにコンパイルされることが可能であり、それが選択されたアーキテクチャのためのファームウエアを生成するべくリンクされる。シミュレータは、ファームウエアのサイクル精度のシミュレーションを実行することが可能である。システムは、ファームウエアの動的プロファイリングを実行することができる。方法は、さらに、プロファイリングが行なわれたファームウエアに基づいて、またはアッセンブリコードに基づいてチップ仕様の最適化を行なうことを含む。システムは、設計されたチップ仕様のために、レジスタトランスファレベルRTLコードを自動的に生成することが可能である。またシステムは、RTLコードの合成を行なってシリコンを製造することも可能である。好ましい実施態様の利点には、次に示す内容のうちの1つまたは複数を含めることができる。システムは、ASICおよびASIPのためのソフトウエア開発ツールを開発するためのターンアラウンド時間および設計コストを有意に低減する。これは、特定のチップ設計ではなく、頭の中にある基礎をなすアルゴリズムを用いてCにより記述されたアプリケーションを利用することによってなされる。その後システムは、必須のソフトウエア開発キットおよびチップ上で走るファームウエアとともにそのアルゴリズムを実装するプロセッサベースのチップ設計を自動的に生成する。このプロセスは、ASIP/ASICのための数人年の努力に対し、設計に行き着くまで数週間しか要さない。システムは、アーキテクチャオプティマイザAOに頼ることによってアプリケーションの要件と整合するチップ設計を自動的に生成することが可能である。サイクル精度のシステムレベルのシミュレータから獲得されたアルゴリズムの実行プロファイル、およびアルゴリズムの静的プロファイル、およびチップに組み込まれる多様なハードウエアブロックの特性決定に基づいて、AOは、パフォーマンス、電力、およびコストに関するベンダの要件を満たす最適ハードウエア構成を決定する。アルゴリズムの分析に基づき、AOは、パフォーマンス要件を満たすだけでなく、手元のアルゴリズムに対してハードウエアを最適化することになる提案チップアーキテクチャに行き着く。AOは、一連の反復ステップを取る中で所定のアルゴリズムのための最適ハードウエアに収斂する最適アーキテクチャに行き着く。システムは、すべてのコストが考慮に入れられ、かつシステム設計者が評価するべき最良可能な数表現およびビット幅の候補を獲得するように評価プロセスを自動化する。方法は、与えられたアーキテクチャの面積、タイミング、および電力のコストを迅速かつ自動化された態様で評価することができる。この方法は、コスト計算エンジンとして使用される。方法は、最適態様でアルゴリズムに基づいてDSPを自動的に合成することを可能にする。システム設計者が、別のものではなくこの特定の表現を選ぶことに関連付けされるハードウエア面積、遅延、および電力のコストを意識する必要はない。システムは、ハードウエア面積、遅延、および電力が、アルゴリズム評価段階において可能な限り正確にモデリングされることを可能にする。システムの好ましい実施態様のこのほかの利点には、次に示す内容のうちの1つまたは複数を含めることができる。このシステムは、チップ設計の問題を軽減し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエアチップソリューションが設計される方法におけるパラダイムを完全にシフトするものである。ここで述べている自動システムは、システムへのプライマリ入力が、ローレベルのプリミティブではなく、コンピュータ可読コード、モデル、またはアルゴリズム仕様であることから、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエアチップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。このシステムを使用するこのほかの恩典として、さらに次に示す内容を含めることができる。1スピード:チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、このシステムを使用している会社が、自社の製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。2コスト:一般にチップの実装に必要とされる多数の技術者が不要となる。このことは、このシステムを使用している会社に夥しいコストの節約をもたらす。3最適性:このシステムプロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。このシステムは、デジタルチップ構成要素に向けた、それを有するシステムの設計で使用される方法におけるパラダイムを完全にシフトするものである。このシステムは、C/MATLABマトラボで記述されたアルゴリズムからデジタルハードウエアを生成する完全に自動化されたソフトウエアプロダクトである。このシステムは、CまたはMATLABマトラボ等の高水準言語を採用してハードウエアチップを実現するプロセスへの独特のアプローチを使用する。要約して言えば、これは、チップ設計を完全に自動化されたソフトウエアプロセスにする。図2は、自動的に生成されたコンピュータアーキテクチャに対してカスタマイズされたツールを生成するための一例のシステムを示している。ツールジェネレータは、ターゲットプロセッサ記述ファイルのセット12を受け取る。ツールジェネレータは、ソフトウエアモジュールであり、ターゲットプロセッサの記述を取り入れて多様なソフトウエア開発ツールを作る。図2の実施態様においては、ツールジェネレータが、ターゲットコンパイラジェネレータ14、ターゲットアッセンブラジェネレータ18、ターゲットリンカジェネレータ22、ターゲットシミュレータジェネレータ24、ターゲットプロファイラジェネレータ28、ターゲットデバッガジェネレータ214からなる。すべてのソフトウエア開発ツールが、その後多様なツールジェネレータによって、人間の介入をまったく伴うことなくターゲットプロセッサの記述のみに基づいて生成される。コンパイラジェネレータ14は、考察中のプロセッサの高レベルの記述を読み込む。コンパイラジェネレータ14は、プロセッサのインストラクションセットアーキテクチャISA内の多様なインストラクションのセマンティクスを読み込み、ターゲットプロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティックツリーを構築し、ターゲットプロセッサコードの生成、呼び出しスタックレイアウト、レジスタアロケーション、インストラクションスケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、およびそのほかの、ターゲットプロセッサ上において可能な多様な最適化のために必要とされるコードを生成する。結果がターゲットコンパイラ16になる。アッセンブラジェネレータ18は、多様なインストラクションのシンタックス、それらのバイナリエンコーディング、および多様なインストラクションに適用するために必要な可能性のある再配置を読み込む。この情報に基づいて、その後アッセンブラジェネレータ18がターゲットアッセンブラ20を生成する。アッセンブラジェネレータは、ターゲットプロセッサのためのインストラクションのリストを、それらのシンタックスならびに有効オペランド、およびそれらの範囲とともに取り入れ、すべての未解決のシンボルについて、アッセンブラを構築してインストラクションのシンタックスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、あらゆる関連再配置レコードを発行する。リンカジェネレータ22は、ターゲットリンカ24をオブジェクトファイルリンカとともに生成し、それがオブジェクトファイルならびにライブラリを取り入れ、オブジェクトコードに適用されるすべての再配置を用いて実行可能ファイルを生成する。シミュレータジェネレータ24は、パイプライン構造、ISA、インストラクションのセマンティクス、およびハードウエアブロックのそれぞれの特性が定義されているマシン記述を読み込む。アーキテクチャのすべての要素の定義に基づいて、シミュレータジェネレータは、キャッシュモデル、メモリモデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを生成する。ターゲットシミュレータ26は、シミュレータジェネレータによって自動的に生成され、生成されたシミュレータは、実際のハードウエアモデルを正確に反映する。プロファイラジェネレータ28は、インストラクションセットアーキテクチャISAおよびそれらのセマンティクスに基づいてターゲットアーキテクチャのためのプロファイラを自動的に生成する。1つの実施態様においては、ターゲットプロファイラ29が、ターゲットシミュレータ26または実際のプロセッサから生じたトレースを分析し、手元のプログラムの静的実行プロファイルをはじめ、動的実行プロファイルを生成する。別の実施態様においては、ターゲットプロファイラ29が、モジュール内のプロシージャの入口ポイントおよび出口ポイントにプロファイリングコードを追加する。これは、プロシージャが呼び出される回数、プロシージャ内において消費された合計の時間、およびプロシージャ呼び出し当たりの平均の消費時間の詳細な測定を可能にする。測定自体が結果に影響を及ぼすことから、経過時間は互いの関係から考察されなければならない。1つの実装においては、ターゲットデバッガ216の生成にデバッガジェネレータ214を使用することができる。デバッガは、ターゲットマシン上においてユーザアプリケーションのデバッグを行なう有用なツールである。デバッガジェネレータは、ターゲットプロセッサのインストラクションセットの記述を呼び出しスタックレイアウトとともに取り入れ、ターゲットプロセッサに固有のデバッガを生成する。このようにして生成されたデバッガは、上記のサイクルベースのシミュレータまたは実際のハードウエアチップのいずれかへのフックアップが可能である。呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、インストラクションの逆アッセンブリ、ターゲットマシン上のレジスタの数および特性はすべて、デバッガジェネレータの一部として自動的に生成される。ターゲットコンパイラ16、アッセンブラ20、リンカ24、シミュレータ26、およびプロファイラ29は、プログラム、コード、またはコンピュータモデルによって機能が明細に指定されるカスタムICまたはASICデバイスのための最良のアーキテクチャの自動的な決定に使用することが可能である。入力として提供される所定のコンピュータ可読コードまたはプログラムのためのアーキテクチャ定義の獲得においては種々の段階が関与する。1つの実施態様においては、プログラムがC言語で記述されるが、C、MATLABマトラボ、またはジャバJava登録商標といったそのほかの言語も同様に使用可能である。ターゲットコンパイラ16、アッセンブラ20、およびリンカ24を使用してプログラムのコンパイル、アッセンブル、およびリンクが行なわれる。実行可能コードがシミュレータ26または実際のコンピュータ上において走らされる。実行からのトレースがターゲットプロファイラ29に提供される。プロファイラによって生成された情報は、特に、静的実行および動的実行についての呼び出しグラフ、コード実行プロファイル、レジスタ割り付け情報、および現在のアーキテクチャを含み、この情報は、アーキテクチャオプティマイザAOに提供される。アーキテクチャオプティマイザの出力はアーキテクチャ仕様であり、特に、パイプライン情報、コンパイラ呼び出し規約、レジスタファイル、キャッシュ編成、メモリ編成、およびインストラクションセットアーキテクチャISAならびにインストラクションセットエンコーディング情報を含んでいる。その後AOは、アプリケーションの要件に整合するチップ設計を生成する。サイクル精度のシステムレベルのシミュレータから獲得したアルゴリズムの実行プロファイル、およびアルゴリズムの静的プロファイル、およびチップに組み込まれる多様なハードウエアブロックの特性決定に基づいて、AOは、パフォーマンス、電力、およびコストに関するベンダの要件を満たす最適ハードウエア構成を決定する。アルゴリズムの分析に基づき、AOは、パフォーマンス要件を満たすだけでなく、手元のアルゴリズムに対してハードウエアを最適化することになるチップアーキテクチャを提案する。AOは、一連の反復ステップの中で所定のアルゴリズムのための最適ハードウエアに収斂する最適アーキテクチャに行き着く。AOは、ASIPの多様な側面に対してそれが行なう一連の階層的決定に基づき、ベンダの評価基準に整合する所定のアルゴリズムのための最適アーキテクチャを決定し、したがって局所的最小アーキテクチャの達成において、いかなるポイントにおいてもそれがスタックすることはない。むしろAOは、包括的最小アーキテクチャを設計することが可能である。AOは、所定のアルゴリズムの実行プロファイルに基づいて、アルゴリズムのセットを当て嵌める最適コンピュータアーキテクチャを自動的に生成することができる。図3は、アーキテクチャオプティマイザを用いた最適アーキテクチャの決定のための一例のシステムを示している。図3のシステムは、図2の自動的に生成されたツールを使用する。図3において、入力としてユーザアプリケーション30が提供される。それに加えて、初期アーキテクチャ記述32が指定される。アーキテクチャ記述がツールジェネレータ34によって処理され、それが、ターゲット依存度37を用いてコンパイラ36のための、ターゲット依存度39を用いてアッセンブラ38のための、ターゲット依存度41を用いてリンカ40のための、ターゲット依存度43を用いてシミュレータ42のための、およびターゲット依存度45を用いてプロファイラ44のためのターゲット依存情報を生成する。ターゲット依存情報に基づいて、ユーザアプリケーション30のプロファイルが生成される。プロファイルは、クリティカルルーチンおよびそれらのカーネルもっとも実行されるループを識別する。プロファイルはまた、メモリトラフィックパターンも識別する。プロファイルは、アーキテクチャオプティマイザ46に提供される。アーキテクチャオプティマイザ46は、設計データモデラ48からのユーザ入力も使用する。設計モデラ48は、特定のハードウエアについてのタイミング、面積、電力、およびそのほかの関連する情報を提供し、その種の情報は、アーキテクチャオプティマイザ46によるオンデマンドでのクエリが可能である。オプティマイザ46の出力は、新しい最適化後のアーキテクチャ50である。最適化後のアーキテクチャ50は、その後、あらかじめ決定済みの最適化目標が達成されるまでアーキテクチャの反復的最適化のためにツールジェネレータ34に提供される。アーキテクチャ内の構成要素のそれぞれ、およびそれらの全体的な相互接続を最適化することによって新しいアーキテクチャが獲得される。所定のセットのアプリケーション/アルゴリズムによって、最適コンピュータシステムアーキテクチャは、パフォーマンス、コスト、および電力といった多様なファクタに基づいて自動的に決定することが可能である。最適アーキテクチャは、システムレベルのアーキテクチャおよびプロセッサレベルのアーキテクチャを含むことができる。システムレベルのアーキテクチャについて言えば、AO46が、たとえば、必要とされるメモリの量、サポートするメモリ帯域幅、DMAチャンネルの数、クロック、およびペリフェラルを自動的に決定することが可能である。プロセッサレベルのアーキテクチャについて言えば、AOが、システムのためのパフォーマンス評価基準およびアルゴリズム内のパラレリズムに基づいて、演算要素のスカラ度の必要性ならびにその量;特定のアルゴリズムの効率的な実装に必要とされる演算要素のタイプ;アプリケーションの効率的な実装に必要とされる演算要素の数;段数、インストラクション発行レート、スカラ度という観点から見たパイプライン編成、加算器の数、ロード、ストア単位等という観点から見た演算要素の数、およびパイプライン構造内における演算要素の配置;ALU演算要素の幅;レジスタファイルの数および、レジスタの数、それらの幅、読み出しポートならびに書き込みポートの数という観点から見たそれらの構成;コンディションコードレジスタの必要性;インストラクションキャッシュの必要性ならびにその量、および必要とされるデータキャッシュ、およびそれらの階層;インストラクションキャッシュおよびデータキャッシュそれぞれのための別々のキャッシュメカニズム、ラインサイズ、スピル/フィルアルゴリズムを自動的に決定することが可能である。AOは、ユーザのアルゴリズムのコード内においてインストラクションおよびデータのプリフェッチインストラクションを自動的に導入し、オンデマンドおよび適時のプリフェッチを行なうことができる。AOは、それぞれのキャッシュの書き戻しポリシー;メモリに対する読み出しおよび書き込みポートの数;キャッシュとメモリの間におけるバスの幅;および全体的なコスト構造を低減しつつそれでも高いパフォーマンスを維持する、キャッシュのレベルおよび、共有または別々のインストラクションキャッシュおよびデータキャッシュ、または結合キャッシュ、または複数レベルへのそれの編成という観点から見たそれらの編成を決定することができる。AOは、メモリサイズ、メモリマップスキーム、アクセスサイズ、読み出し/書き込みポートの数ならびにそれらの幅、および最大パフォーマンスを得るべくメモリに必要な分割の方法という観点から見てのメモリの階層を自動的に決定することが可能である。AOは、マシンが効率的な形でアルゴリズムを実装するためのISAを自動的に決定すること、さらにはコード空間の量を最小にしつつそれでも高いパフォーマンスを達成するインストラクションセットのための最適エンコーディングを自動的に決定することができる。またAOは、利用可能なレジスタの最適利用を確保する呼び出し規約を自動的に決定することもできる。以上の動作は、反復的に、かつ階層的な態様で行なわれて、アプリケーション30に最適化された、所定のタイミング、コスト、および電力要件を満たすチップに行き着く最適な包括的システムアーキテクチャを決定することが可能である。図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もまた自動的に生成されて、ファームウエアに対する将来的なアップグレードがプロセッサの交換を強いることなく実装されるようにすることが可能である。このシステムは、選択された目標とするアプリケーションに対して完全かつ最適なハードウエアソリューションを自動的に生成する。共通の目標とするアプリケーションは埋め込みアプリケーション空間内にあるが、それらは、必ずしもそれに限定されない。以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。