カスタム集積回路IC設計を自動的に生成する方法であって、a.前記カスタムICによって実行されるべきコンピュータ可読コードを含むカスタムICの仕様を受け取り、b.システム、プロセッサアーキテクチャ、およびマイクロ-アーキテクチャSAMA表現として前記ICのアブストラクションを生成し、c.前記SAMA表現を、少なくともアーキテクチャ最適化ビュー、物理設計ビュー、およびソフトウエアツールビューを有するデータモデルに提供し、d.前記SAMA表現および前記データモデルを反復的に更新することによって前記プロセッサアーキテクチャを最適化し、1つまたは複数の制約を満たす前記コンピュータ可読コードに対して固有のカスタマイズがなされたプロセッサアーキテクチャを自動的に生成し、e.生成された前記アーキテクチャを、半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成する、方法。前記カスタムIC上において前記コンピュータ可読コードを実行する、請求項1に記載の方法。前記データモデルは、前記ICの機能的および物理的なモデルが統一された拡張モデルを含む、請求項1に記載の方法。前記データモデルは、前記ICに関係する物理プリミティブ情報を受け取る、請求項1に記載の方法。ソフトウエアツールを生成する、請求項1に記載の方法。前記ツールは、コンパイラ、アッセンブラ、リンカ、サイクル-ベースのシミュレータのうちの1つまたは複数を含む、請求項5に記載の方法。前記ツールは、ファームウエアを自動的に生成する、請求項6に記載の方法。前記ファームウエアのプロファイリングを自動的に行ない、前記ファームウエアのプロファイルを、最適化するアーキテクチャにフィードバックする、請求項7に記載の方法。あらかじめ決定済みの物理的な制約に基づいて前記プロセッサアーキテクチャを最適化する、請求項1に記載の方法。前記コンピュータ可読コードの静的プロファイリングまたは動的プロファイリングを行なう、請求項1に記載の方法。前記コンピュータ可読コードを走らせる前記カスタム集積回路のためのファームウエアまたはソフトウエア開発キットSDKを自動的に生成する、請求項1に記載の方法。前記コンピュータ可読コードをアッセンブリコードにコンパイルする、請求項1に記載の方法。前記アッセンブリコードをリンクして選択された前記アーキテクチャのためのファームウエアを生成する、請求項8に記載の方法。前記ファームウエアのサイクル精度のシミュレーションを実行する、請求項8に記載の方法。前記ファームウエアの静的または動的プロファイリングを実行する、請求項10に記載の方法。プロファイリングが行なわれたファームウエアに基づいて前記アーキテクチャを最適化する、請求項11に記載の方法。前記アッセンブリコードに基づいて前記アーキテクチャを最適化する、請求項8に記載の方法。前記選択されたアーキテクチャのためのレジスタトランスファレベルのコードを生成する、請求項1に記載の方法。タイミング、面積、または電力に関して最適化された物理設計のためにRTLコードを生成することを包含する、請求項18に記載の方法。前記RTLコードの合成を実行する、請求項11に記載の方法。しかしながら、それにもかかわらずRTLは、ハードウエアの低水準の記述の域を出ない。したがって、RTLを用いた設計の分析およびその後に続く最適化が困難なものとなる可能性がある。1つの態様においては、システムおよび方法が、カスタム集積回路IC設計を、カスタムICによって実行されるべきコンピュータ可読コードを含むカスタムICの仕様を受け取り、システム、プロセッサアーキテクチャ、およびマイクロ-アーキテクチャSAMA表現としてICのアブストラクションを生成し、SAMA表現を、少なくともアーキテクチャ最適化ビュー、物理設計ビュー、およびソフトウエアツールビューを有するデータモデルに提供し、SAMA表現およびデータモデルを反復的に更新することによってプロセッサアーキテクチャを最適化し、1つまたは複数の制約を満たすコンピュータ可読コードに対して固有のカスタマイズがなされたプロセッサアーキテクチャを自動的に生成し、生成されたアーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する、ことによって自動的に生成する。上記の態様の実装には、次に示す内容のうちの1つまたは複数が含まれる。システムは、カスタムICの機能を規定するアルゴリズム、プロセス、またはコード入力上において、実質的に人間の掛かり合いをまったく伴わないか、または最小限に伴って自動的に動作することが可能である。ユーザは、カスタムIC上においてコンピュータ可読コードを実行することが可能である。データモデルは、ICの機能的および物理的なモデルが統一された拡張モデルである。データモデルは、ICの物理プリミティブ情報を受け取ることが可能である。アプリケーションコードを走らせるカスタムICのためのソフトウエアツールは、自動的に生成することが可能である。これらのツールには、コンパイラ、アッセンブラ、リンカ、サイクル-ベースのシミュレータのうちの1つまたは複数が含まれる。ツールは、自動的にファームウエアを生成する。ツールは、ファームウエアのプロファイリングを行なうことが可能であり、ファームウエアのプロファイルを、最適化するアーキテクチャにフィードバックする。システムは、あらかじめ決定済みの物理的な制約に基づいてプロセッサアーキテクチャを反復的に最適化することが可能である。システムは、コンピュータ可読コードの静的プロファイリングまたは動的プロファイリングを実行することが可能である。システムは、コンピュータ可読コードを走らせるカスタム集積回路のためのソフトウエア開発キットSDKを自動的に生成することが可能である。コンピュータ可読コードは、アッセンブリコードに変換され、かつリンクされて、選択されたアーキテクチャのためのファームウエアを生成することが可能である。システムは、ファームウエアのサイクル-ベースのシミュレーションを実行することが可能である。アーキテクチャは、プロファイリングが行なわれたファームウエアおよび/またはアッセンブリコードに基づいて最適化が行われることが可能である。システムは、選択されたアーキテクチャのために、したがって、タイミング、面積、または電力に関して最適化された物理設計のために、レジスタトランスファレベルのコードを生成することが可能である。システムは、RTLコードを合成することが可能である。1つの実施態様においてSAMAは、次に示す内容のうちの1つまたは複数を規定することが可能である。1.システムa.クロックb.パフォーマンス目標c.ピンアウトd.周辺機器e.割り込みスキームf.接続性g.その他2.アーキテクチャa.オンチップメモリb.キャッシュc.レジスタファイルd.メモリマップe.ハードウエア機能ブロックf.パイプラインg.ISA定義h.その他3.ツールa.アッセンブラセッティングb.リンカ変数c.その他4.マイクロアーキテクチャa.電力ドメインb.電力ゲーティングc.その他好ましい実施態様の利点には、次に示す内容のうちの1つまたは複数が含まれる。SAMA表現は、プロセッサアーキテクチャの最適化を容易にするハードウエアの中間アブストラクションを提供する。SAMAベースのシステムは、形式的な処理およびポータビリティを複雑にするRTLより好ましい。SAMAは、マシンの独立性、コード生成に先立つ大域的最適化を可能にする。アーキテクチャは、一般にローカルに動作する単純かつ高速なコードジェネレータを使用することが可能である。SAMAシステムは、使用がより容易であり、コードジェネレータを簡素化し、続いて、RTLコードを使用してなし得なかった方法でアーキテクチャを最適化することが可能である。システムの好ましい実施態様のこのほかの利点には、次に示す内容のうちの1つまたは複数が含まれる。このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わり、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。このプロセスは、従来数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。ここで述べている自動的なシステムは、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエアチップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。システムへの一次的な入力は、CまたはMATLABマトラボ等のより高レベルの言語で記述されたコンピュータ可読コードまたはアルゴリズム仕様となる。図1は、アプリケーションコードまたはアルゴリズムからASICを自動的に製造するワークフローシステムの一例を示している。最初に、アプリケーションコードまたはアルゴリズムがユーザによって生成される110。次に、そのコードが、アーキテクチャオプティマイザ112に提供される。アーキテクチャオプティマイザ112は、ASICのアブストラクト統一表現である、システム、アーキテクチャ、およびマイクロ-アーキテクチャSAMA表現120と呼ばれるアプリケーションコードにカスタマイズされた中間ハードウエア表現を生成する。SAMA120は、高水準の軽量アブストラクトモデルであり、アーキテクチャオプティマイザ112が、SAMA120内に記述された新しいアーキテクチャを最適化し、かつ生成することを可能にする。SAMA120は、データモデルDM130に対して情報を提供するが、これはASICの機能的および物理的なモデルが統一された拡張モデルである。DM130は、ASICの、たとえば加算器、乗算器等といった物理プリミティブ情報114を受け取る。DM130は、ツールジェネレータ134にデータを提供し、続いてそれが、とりわけコンパイラ、アッセンブラ、リンカ、サイクル-ベースのシミュレータといったツール136のセットを駆動する。ツール136は、プロファイリングツール140によってプロファイリングされることが可能なファームウエア138を生成する。ファームウエアのプロファイルは、アーキテクチャオプティマイザ112にフィードバックされ、とりわけ電力、面積、タイミング等のあらかじめ決定済みの物理的な制約150に基づいてASIC設計の最適化が行なわれる。DM130は、これらの制約150に従ったRTLコード132を生成し、アーキテクチャオプティマイザ112に提供されるタイミング、面積、電力フィードバック情報とともに物理設計160に到達することが可能である。たとえば、汎用レジスタファイルは、単純な構造である。生成されたツールによってコンパイルされたファームウエアのプロファイリングに基づいて、アーキテクチャオプティマイザ112は、レジスタファイルのサイズを最適化し、かつ空間および電力を節約するべく縮小されたレジスタファイルとともに新しいSAMA120を生成することができる。結果として得られる新しいツールは、再度のプロファイリングを介して改善を確認することができる。次に図2を参照すると、SAMAとASICの間における関係を示すビューの一例が示されている。SAMA200は、CコードまたはMATLABマトラボコード等のアルゴリズムから要約されたハードウエアの中間表現である。データモデルDM210は、設計の多様なビュー220を用いてSAMA200を表現することが可能である。ビューの分析230を行うことが可能であり、制約が満たされる場合には、実装240を行うことが可能である。SAMAは、ソフトウエア編集とハードウエア合成の間における遷移レイヤとして作用する。その種の遷移レイヤには、コンパイラツールフロー内において利用可能な最適化を利用し、かつ低水準シンセサイザへの自由度の提供、アプリケーション固有の実装のためのオプションの探索も行なうことが意図されている。1つの実施態様においてSAMAは、次に示す内容のうちの1つまたは複数を規定することが可能である。1.システムa.クロックb.パフォーマンス目標c.ピンアウトd.周辺機器e.割り込みスキームf.接続性g.その他2.アーキテクチャa.オンチップメモリb.キャッシュc.レジスタファイルd.メモリマップe.ハードウエア機能ブロックf.パイプラインg.ISA定義h.その他3.ツールa.アッセンブラセッティングb.リンカ変数c.その他4.マイクロアーキテクチャa.電力ドメインb.電力ゲーティングc.その他図3は、データモデル280の一例を示している。DM280は、アプリケーションの多様なビューの生成に使用することが可能である。たとえば、アーキテクチャオプティマイザビュー282は、オプティマイザが制約に対して設計を最良に適合させることができるように、タイミング、面積、電力効率等のアーキテクチャ上の構成要素情報を提供する。空間/サイズ要件等の物理的な制約が割り当てられた物理設計ビュー284を生成することが可能である。ソフトウエアツールビュー286は、DM280をてこ入れして、使用するソフトウエアのためのISAおよびアーキテクチャ上の制約を提供することが可能である。そのほかのビューも同様にDM280から生成することが可能である。1つの実施態様においては、アルゴリズム設計者が、アプリケーション問題を解決するコンピュータ可読コードを生成する。人力作業によるIC設計に代わり、このシステムが、そのコードを受け取り、コードまたはアルゴリズムを分析する。次にシステムは、そのコードに基づいて最適アーキテクチャを自動的に生成する。アーキテクチャは、SAMAにおいて表現され、データモデルとともに、1つまたは複数の反復を通じてそのアーキテクチャを最適化することが可能である。次にはIC製造設備がカスタムICを製造することが可能であり、結果として得られるICは、人間の掛かり合いをまったく伴わないか、または最小限に伴ってアルゴリズムに対して最適化される。ここで図4を参照すると、SAMAを使用するワークフローの一例が示されている。このワークフローは、CまたはMATLABマトラボ等の高水準言語において規定されたアルゴリズムを分析することから始まる10。次にシステムは、アルゴリズムまたはコードに対してカスタマイズされた最適アーキテクチャの最初の設計を生成する12。設計されるアーキテクチャは、SAMAにおいて表現される14。システムは、データモデル内において物理プリミティブ情報およびSAMA情報を適用する16。ソフトウエアツールが、そのデータモデルのために自動的に生成される18。その後システムは、自動的に、ファームウエアを生成し、そのファームウエアのプロファイリングを行う20。システムは、制約が満たされるまでアーキテクチャ設計を反復する22。その後システムが、カスタムICを製造し24、ユーザは、そのカスタムIC上においてファームウエアを走らせることが可能になる26。1つの実施態様においては、アーキテクチャが、可変幅のインストラクションセットのエンコーディングスキームを自動的に設計することが可能である。可変幅のインストラクションセット上に作られるプログラムコードは、さらに、可逆圧縮スキームを使用して圧縮され、ストレージ空間を節約することが可能である。また、その種の圧縮スキームが選択される場合においては、インストラクションが動的にデコーディングされ、かつ発行されるように、対応する解凍スキームもまた自動的に設計される。システムは、可変長のインストラクションセットを使用してインストラクションセットの最適エンコーディングを行うことが可能である。各インストラクションは、特定の幅に対する制限を伴うことなく、最適な任意のインストラクションセット幅でエンコードされることが可能である。これは、伝統的なエンコーディングスキームと比較したとき、より多くのインストラクションがサポートされることを可能にし、かつパフォーマンス上の利益を与えることになる。また、非常に微細な精度によってインストラクションがパックされることも可能であり、また複数のインストラクションが、単一のプログラムメモリアクセスに対してパックされることも可能である。このことは、フェッチされて発行されることが可能な、サイクル当たりのインストラクションの数を増加することになる。アプリケーションコード/アルゴリズムのためにインストラクションセットおよびアーキテクチャがカスタム設計された後は、カスタム集積回路が、人間の掛かり合いをまったく伴うことなく、システムによって自動的に生成され、したがって、プロダクト開発時間およびコストが削減される。このカスタムICは、自動的に生成されたソフトウエア開発キットSDKおよび自動的に生成されたファームウエアを使用し、コード/アルゴリズムを効率的に実行させることが可能である。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わり、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエアツールおよびファームウエアアプリケーションとともに生成する。このプロセスは、従来の数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。図5は、カスタムICを自動的に生成するシステムの一例を示している。図5のシステムは、選択された目標とするアプリケーションに対するプログラマブルハードウエアソリューションにおいて、インストラクションセット圧縮および可変幅エンコーディングを使用する最適インストラクションセットを伴うアーキテクチャを自動的に生成することをサポートする。目標とするアプリケーションの仕様は、一般に、C、MATLABマトラボ、SystemCシステムC、フォートラン、エイダ等の高レベル言語またはそのほかのいずれかの言語によるコンピュータ可読コードとして表現されたアルゴリズムを通じてなされる。仕様は、目標とするアプリケーションの記述を含み、またそれには、望ましいコスト、面積、電力、速度、パフォーマンス、およびそのほかのハードウエアソリューションの属性といった1つまたは複数の制約も含まれる。図5においては、ICカスタマがプロダクト仕様102を生成する。通常は、所望のプロダクトのすべての主要機能を取り込んだ初期プロダクト仕様が存在する。そのプロダクトから、アルゴリズムの専門家が、そのプロダクトに必要とされるコンピュータ可読コードまたはアルゴリズムを識別する。それらのアルゴリズムのうちのいくつかは、サードパーティから、または標準開発委員会からのIPとして利用可能となることがある。それらのうちのいくつかは、製品開発の一部として開発されなければならない。この態様においては、さらにプロダクト仕様102が、とりわけCプログラム等のプログラムまたはMATLABマトラボモデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム104で詳述される。プロダクト仕様102は、また、とりわけコスト、面積、電力、プロセスタイプ、ライブラリ、およびメモリタイプ等の要件106も含んでいる。コンピュータ可読コードまたはアルゴリズム104および要件106は、自動化されたICジェネレータ111に提供される。コードまたはアルゴリズム104およびチップ設計に課せられた制約だけに基づいて、ICジェネレータ111は、人間の掛かり合いを殆ど、またはまったく伴うことなく、GDSファイル113、ICを走らせるファームウエア115、ソフトウエア開発キットSDK116、および/またはテストスート118を含む出力を自動的に生成する。GDSファイル113およびファームウエア115は、カスタムチップ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、または別のコンピュータからプログラムをダウンロードすることによってそれをプログラムすることおよび再プログラムすることができる。各コンピュータプログラムは、目に見える形として、コンピュータによってストレージ媒体またはデバイスが読み出されたときに、ここで説明している手順を実行するべくそのコンピュータの構成および動作のコントロールを行なうために、汎用または専用プログラマブルコンピュータによって読み出されることが可能なマシン可読ストレージ媒体またはデバイスたとえば、プログラムメモリまたは磁気ディスク内に記憶される。また本発明のシステムは、コンピュータプログラムを用いて構成されるコンピュータ可読ストレージ媒体内において具体化されると考えてもよく、それにおいてストレージ媒体は、ここで述べている機能を実行するべく特定の、あらかじめ定義済みの態様でコンピュータを動作させるように構成される。以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。