(57)【要約】  コンピュータ可読コードによって記述されるカスタム集積回路（ＩＣ）のためのプロセッサ・アーキテクチャを自動的に生成するシステムおよび方法が開示されている。ＩＣは、１つまたは複数のタイミングおよびハードウエアの制約を有する。システムは、プロセッサ・アーキテクチャを定義するパラメータをコンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出し、コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまで１つまたは複数のパラメータを変更することによってプロセッサ・アーキテクチャを反復的に最適化し、生成されたプロセッサ・アーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する。
2013541778.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ可読コードによって記述されるカスタム集積回路（ＩＣ）のためのプロセッサ・アーキテクチャを自動的に生成する方法であって、少なくとも前記ＩＣが１つまたは複数のタイミングおよびハードウエアの制約を有し、
ａ．前記プロセッサ・アーキテクチャを定義するパラメータを前記コンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出する工程と、
ｂ．コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまで１つまたは複数のパラメータを変更することによって前記プロセッサ・アーキテクチャを反復的に最適化する工程と、
ｃ．生成された前記プロセッサ・アーキテクチャを半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する工程と、
を有する方法。
【請求項２】
プロセッサのスカラ度およびインストラクションのグループ化規則を最適化する工程を有する請求項１に記載の方法。
【請求項３】
必要とされるプロセッサ・コアの数を最適化する工程と、前記プロセッサ・コアを効果的に使用するべくインストラクション・ストリームを自動的に分割する工程と、を有する請求項１に記載の方法。
【請求項４】
前記プロセッサ・アーキテクチャの最適化の工程は、インストラクション・セットを変更する工程を含み、当該工程には、必要とされるインストラクションの数を低減させる工程と、前記インストラクションをエンコードしてインストラクションのアクセスおよびデコード速度を向上させ、かつインストラクションのメモリ・サイズ要件を向上させる工程とが含まれる請求項１に記載の方法。
【請求項５】
前記プロセッサ・アーキテクチャの最適化の工程は、レジスタ・ファイル・ポート、ポート幅、およびデータ・メモリへのポートの数のうちの１つを変更する工程、を含む請求項１に記載の方法。
【請求項６】
前記プロセッサ・アーキテクチャの最適化の工程は、データ・メモリ・サイズ、データ・キャッシュのプリフェッチ・ポリシー、データ・キャッシュ・ポリシーのインストラクション・メモリ・サイズ、インストラクション・キャッシュのプリフェッチ・ポリシー、およびインストラクション・キャッシュ・ポリシーのうちの１つを変更する工程、を含む請求項１に記載の方法。
【請求項７】
前記プロセッサ・アーキテクチャの最適化の工程は、コプロセッサを追加する工程、を含む請求項１に記載の方法。
【請求項８】
前記コンピュータ可読コードを、
ａ．各ポインタ変数のためのメモリ・ロケーションを決定する工程と、
ｂ．各行のためのインストルメンテーションを挿入する工程と、
によって前処理する請求項１に記載の方法。
【請求項９】
前記プロセッサ・アーキテクチャのパフォーマンスを向上させるべく前記コンピュータ可読コードに対して固有のカスタマイズがなされた新しいインストラクションを自動的に生成することによってプロセッサのインストラクション・セットを変更する工程を有し、さらに、
ａ．ダミー代入を除去する工程と、
ｂ．冗長なループ演算を除去する工程と、
ｃ．必要とされるメモリ帯域幅を識別する工程と、
ｄ．１つまたは複数のハードウエア・フラグとして１つまたは複数のソフトウエア実装されたフラグを置換する工程と、
ｅ．期限切れの変数を再使用する工程と、
有する請求項１に記載の方法。
【請求項１０】
パラメータを抽出する工程は、さらに、
ａ．各行のための実行サイクル時間を決定する工程と、
ｂ．各行のための実行クロック・サイクル・カウントを決定する工程と、
ｃ．１つまたは複数のビンのためのクロック・サイクル・カウントを決定する工程と、
ｄ．演算子統計テーブルを生成する工程と、
ｅ．各関数のための統計を生成する工程と、
ｆ．実行カウントの降順により行をソートする工程と、
を有する請求項１に記載の方法。
【請求項１１】
共通使用されるインストラクションを１つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させる（インストラクション・モールディング）工程を有する請求項１に記載の方法。
【請求項１２】
新しいインストラクション候補内におけるモールディング違反をチェックする工程を有する請求項１１に記載の方法。
【請求項１３】
コスト関数を適用してインストラクション・モールディングの候補（ＩＭＣ）を選択する工程を有する請求項１１に記載の方法。
【請求項１４】
統計的依存に基づいてインストラクション・モールディングの候補（ＩＭＣ）をグループ化する工程を有する請求項１１に記載の方法。
【請求項１５】
前記アーキテクチャ・パラメータの変更のためのタイミングおよび面積のコストを決定する工程を有する請求項１に記載の方法。
【請求項１６】
１つまたは複数のインストラクション・モールディングの候補（ＩＭＣ）によって置換されることになるプログラム内のシーケンスを識別する工程と、シーケンス内のインストラクションをアレンジし直し、コードの機能を保持しつつＩＭＣの利用度を最大化する工程と、を有する請求項１に記載の方法。
【請求項１７】
新しく合成されるインストラクションに使用する候補コードに関係する情報をコンパイラに渡す工程を有する請求項１に記載の方法。
【請求項１８】
ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュ・ポリシーを最適化する工程を有する請求項１に記載の方法。
【請求項１９】
コンピュータ可読コードまたはモデルによって記述されるカスタム集積回路（ＩＣ）を自動的に生成するシステムであって、少なくとも前記ＩＣが浮動小数点パラメータ、パフォーマンス制約、および入力信号のためのスタティック・レンジならびにダイナミック・レンジを有し、
ａ．前記プロセッサ・アーキテクチャを定義するパラメータを前記コンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出するための手段と、
ｂ．タイミングおよびハードウエアの制約がすべて満たされるべく１つまたは複数のパラメータを変更することによって前記プロセッサ・アーキテクチャを反復的に最適化するための手段と、
ｃ．前記生成されたプロセッサ・アーキテクチャを、半導体製造のために、前記カスタム集積回路のコンピュータ可読記述に合成するための手段と、
を備えるシステム。
【請求項２０】
ａ．共通使用されるインストラクションを１つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させる（インストラクション・モールディング）ための手段と、
ｂ．新しいインストラクション候補内におけるモールディング違反をチェックするための手段と、
ｃ．コスト関数を適用してインストラクション・モールディングの候補（ＩＭＣ）を選択するための手段と統計的依存に基づいてＩＭＣをグループ化するための手段と、
を備える請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カスタム集積回路（ＩＣ）または特定用途向け集積回路（ＡＳＩＣ）のための最適アーキテクチャを自動的に生成する方法に関する。
【背景技術】
【０００２】
近代的な電子機器および産業製品は、標準およびカスタム集積回路（ＩＣ）といった電子デバイスに頼っている。特定の目的のために設計され、製造されるＩＣは、ＡＳＩＣと呼ばれる。トランジスタの数に置き換えられる、ＩＣのそれぞれに含まれる機能の数は、半導体テクノロジにおける進歩に起因して年を追って急速に増え続けている。
【０００３】
通常、チップ設計プロセスは、チップが実行しなければならないすべての機能をアルゴリズム設計者が指定するときから始まる。これは、一般に、ＣまたはＭＡＴＬＡＢ（マトラボ）等の言語においてなされる。その後チップ・スペシャリスト、ツール技術者、検証技術者、およびファームウエア技術者のチームが、多くのマン・イヤー（man-year）を費やしてアルゴリズムをハードウエア・チップおよび関連するファームウエアにマップする。チームは、既製のプロセッサを使用することが可能である。既製のプロセッサは、それは分かっていることではあるが、標準的なアーキテクチャがそのアルゴリズムと良好に適合しないことがあるため、パフォーマンスが制限されるおそれがある。
【０００４】
既製のプロセッサを用いる代替案は、所望のアルゴリズムのための高いパフォーマンスを達成することできる、カスタム・アーキテクチャおよびカスタム・ハードウエアを設計することである。コンピュータ・アーキテクチャは、コンピュータ・システムの演算、通信、およびデータ・ストレージの要素（ハードウエア）、それらの構成要素が相互作用する方法（マシンの組織化）、およびそれらがコントロールされる方法（インストラクション・セット）を定める詳細な仕様を規定するものである。マシンのアーキテクチャは、いずれの演算がもっとも効率的に実行可能か、かついずれの形式のデータの組織化およびプログラム設計が最適に動作するか、について決定する。
【０００５】
カスタム・チップ・アプローチは、非常に高価なプロセスであり、かつ予算超過から技術的問題までのリスクもはらんでいる。最先端カスタムＩＣ設計の開発によって、解決されることを必要とする多くの問題が導かれる。より高い処理速度によって、多クロック領域、ますます複雑化するクロック乗算および同期テクニック、ノイズ・コントロール、および高速Ｉ／Ｏ等の、以前は本質的に純粋なデジタルであった条件がアナログ・ドメインに導入されることとなった。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ますます複雑になる設計による別の効果は、設計の成功を達成するために必要となり得る、追加される製造ターンの数に影響を及ぼす。さらに別の問題としては、有能な労働者を利用できるかどうかの点にある。ＡＳＩＣ回路設計における急速な成長は、有能なＩＣ技術者の不足を同時に伴って生じている。
【課題を解決するための手段】
【０００７】
１つの態様においては、コンピュータ可読コードまたはモデルによって記述されるカスタム集積回路（ＩＣ）を自動的に生成するシステムおよび方法が開示される。ＩＣは、１つまたは複数のタイミングおよびハードウエアの制約を有する。システムは、プロセッサ・アーキテクチャを定義するパラメータをコンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出する工程と、コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまで１つまたは複数のパラメータを変更することによってプロセッサ・アーキテクチャを反復的に最適化する工程と、生成された前記プロセッサ・アーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する工程と、を有する。
【０００８】
上記の態様の実装には、次に示す内容のうちの１つまたは複数を含めることができる。システムは、プロセッサのスカラ度およびインストラクションのグループ化規則を最適化することが可能である。システムはまた、必要とされるコアの数を最適化し、それらのコアを効果的に使用するべくインストラクション・ストリームを自動的に分割することも可能である。プロセッサ・アーキテクチャの最適化は、インストラクション・セットの変更を含む。システムが行なうインストラクション・セットの変更には、必要とされるインストラクションの数を低減させること、およびインストラクションをエンコードしてインストラクションのアクセス、デコード速度およびインストラクションのメモリ・サイズ要件を向上させることを含む。プロセッサ・アーキテクチャの最適化は、レジスタ・ファイル・ポート、ポート幅、およびデータ・メモリへのポートの数のうちの１つの変更を含む。プロセッサ・アーキテクチャの最適化は、データ・メモリ・サイズ、データ・キャッシュのプリフェッチ・ポリシー、データ・キャッシュ・ポリシーのインストラクション・メモリ・サイズ、インストラクション・キャッシュのプリフェッチ・ポリシー、およびインストラクション・キャッシュ・ポリシーのうちの１つの変更を含む。プロセッサ・アーキテクチャ最適化は、コプロセッサの追加を含む。システムは、プロセッサ・アーキテクチャのパフォーマンスを向上させるべくコンピュータ可読コードに対して独特のカスタマイズがなされた新しいインストラクションを自動的に生成することが可能である。システムは、各ポインタ変数のためのメモリ・ロケーションを決定すること、および各行のためのインストルメンテーションを挿入することによるコンピュータ可読コードの前処理を含む。システムは、コンピュータ可読コードのパースを含み、さらにダミー代入の除去、冗長なループ演算の除去、必要とされるメモリ帯域幅の識別、１つまたは複数のハードウエア・フラグとしての１つまたは複数のソフトウエア実装されたフラグの置換、および期限切れの変数の再使用を含む。抽出するパラメータは、さらに、各行のための実行サイクル時間の決定、各行のための実行クロック・サイクル・カウントの決定、１つまたは複数のビンのためのクロック・サイクル・カウントの決定、演算子統計テーブルの生成、各関数のための統計の生成、および実行カウントの降順による行のソートを含む。システムは、共通使用されるインストラクションを１つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させることが可能である（インストラクション・モールディング）。システムは、新しいインストラクション候補内におけるモールディング違反のチェックを含む。コスト関数を使用してインストラクション・モールディングの候補（ＩＭＣ）を選択することが可能である。ＩＭＣは、統計的な依存に基づくことが可能である。システムは、アーキテクチャ・パラメータの変更のためのタイミングおよび面積のコストを決定することが可能である。ＩＭＣとの置換が可能なプログラム内のシーケンスが識別される。これは、シーケンス内のインストラクションをアレンジし直し、コードの機能を損なうことなく適合性を最大化する能力を含む。システムは、ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュ・ポリシーを最適化することができる。
【０００９】
またシステムは、コンピュータ可読コードの静的プロファイリングおよび／またはコンピュータ可読コードの動的プロファイリングの実行も含む。システムのチップ仕様は、コンピュータ可読コードのプロファイルに基づいて設計される。さらにチップ仕様は、コンピュータ可読コードの静的および動的プロファイリングに基づいて漸進的に最適化することが可能である。コンピュータ可読コードは、最適アッセンブリ・コードにコンパイルされることが可能であり、それが選択されたアーキテクチャのためのファームウエアを生成するべくリンクされる。シミュレータが、ファームウエアのサイクル精度のシミュレーションを実行することが可能である。システムは、ファームウエアの動的プロファイリングを実行することができる。方法は、さらに、プロファイリングが行なわれたファームウエアに基づいて、またはアッセンブリ・コードに基づいてチップ仕様の最適化を行なうことを含む。システムは、設計されたチップ仕様のために、レジスタ・トランスファ・レベル（ＲＴＬ）コードを自動的に生成することが可能である。またシステムは、ＲＴＬコードの合成を行なってシリコンを製造することも可能である。
【００１０】
好ましい実施態様の利点には、次に示す内容のうちの１つまたは複数を含めることができる。システムは、すべてのコストが考慮に入れられ、かつシステム設計者が評価するべき最良な数表現およびビット幅の候補を獲得するように評価プロセスを自動化する。方法は、与えられたアーキテクチャの面積、タイミング、および電力のコストを迅速かつ自動化された態様で評価することができる。この方法は、コスト計算エンジンとして使用される。方法は、最適態様でアルゴリズムに基づいてＤＳＰを自動的に合成することを可能にする。システム設計者が、別のものではなくこの特定の表現を選ぶことに関連付けされるハードウエア面積、遅延、および電力のコストを意識する必要はない。システムは、ハードウエア面積、遅延、および電力が、アルゴリズム評価段階において可能な限り正確にモデリングされることを可能にする。
【００１１】
システムの好ましい実施態様のこのほかの利点には、次に示す内容のうちの１つまたは複数を含めることができる。このシステムは、チップ設計の問題を軽減し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエア・ツールおよびファームウエア・アプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエア・チップ・ソリューションが設計される方法におけるパラダイムを完全にシフトするものである。ここで述べている自動システムは、システムへのプライマリ入力が、ロー・レベルのプリミティブではなく、コンピュータ可読コード、モデル、またはアルゴリズム仕様であることから、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエア・チップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。
【００１２】
このシステムを使用するこのほかの恩典として、さらに次に示す内容を含めることができる。
（１）スピード：チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、このシステムを使用している会社が、自社の製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。
（２）コスト：一般にチップの実装に必要とされる多数の技術者が不要となる。このことは、このシステムを使用している会社に夥しいコストの節約をもたらす。
（３）最適性：このシステム・プロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。
【００１３】
このシステムは、デジタル・チップ構成要素に向けた、それを有するシステムの設計で使用される方法におけるパラダイムを完全にシフトするものである。このシステムは、Ｃ／ＭＡＴＬＡＢ（マトラボ）で記述されたアルゴリズムからデジタル・ハードウエアを生成する完全に自動化されたソフトウエア・プロダクトである。このシステムは、ＣまたはＭＡＴＬＡＢ（マトラボ）等の高水準言語を採用してハードウエア・チップを実現するプロセスへの独特のアプローチを使用する。要約して言えば、これは、チップ設計を完全に自動化されたソフトウエア・プロセスにする。
【図面の簡単な説明】
【００１４】
【図１】図１は、プログラム、コード、またはコンピュータ・モデルによって機能が明細に指定されるカスタムＩＣまたはＡＳＩＣデバイスのためのアーキテクチャを自動的に生成する一例のシステムを示した説明図である。
【図２】図２は、図１の中で使用されている一例のプリ‐プロセッサをより詳細に示した説明図である。
【図３】図３は、図１の中で使用されている一例のパーサーをより詳細に示した説明図である。
【図４】図４は、図１の一例のパラメータ抽出モジュールをより詳細に示した説明図である。
【図５】図５は、コンピュータ・プログラムからカスタム・ハードウエア・ソリューションのための最適アーキテクチャを反復的に生成する一例のプロセスを示した説明図である。
【図６】図６は、図５に定義されているアーキテクチャを伴うカスタムＩＣを自動的に生成する一例のシステムを示した説明図である。
【発明を実施するための形態】
【００１５】
図１は、プログラム、コード、またはコンピュータ・モデルによって機能が仕様に規定されるカスタムＩＣまたはＡＳＩＣデバイスのための最良のアーキテクチャを自動的に決定する一例のシステムを示している。入力として提供される所定のコンピュータ可読コードまたはプログラム（１）のためのアーキテクチャ定義を得るにあたっては、種々の段階が関与する。１つの実施態様においては、プログラムがＣ言語で記述されるが、ＭＡＴＬＡＢ（マトラボ）、パイソン（Ｐｙｔｈｏｎ）、またはジャバ（Ｊａｖａ（登録商標））といったそのほかの言語も同様に使用可能である。プリ‐プロセッサ（２）においては、入力されるプログラム（１）が、パーサー（３）によってその種のプログラムが解析される前にフォーマットされる。フォーマット・プロセスにおいては、プログラム（１）の機能面が保存される。パーサー（３）は、最初に、基本アーキテクチャを使用してすべての情報を抽出し、データベースを作成する。その後システムは、プログラムの静的および動的プロファイルを収集する。パーサー（３）の出力からアーキテクチャ定義（５）に必要なパラメータがパラメータ抽出（４）によって抽出される。システムは、これらのパラメータ、およびプログラム（１）によって満たされるべきリアルタイムとハードウエア制約を入力として用いて、与えられたＣプログラムのための所定の段階においてもっとも適するアーキテクチャを反復的に決定する。このアーキテクチャが、Ｃプログラムおよびパラメータ抽出のためのパースに使用される。新しいアーキテクチャが再び定義される。このループは、最良の時間、面積、および電力のパフォーマンスを与える最良のアーキテクチャが定義されるまで継続される。
【００１６】
図２は、図１の中で使用されている一例のプリ‐プロセッサをより詳細に示している。プリ‐プロセッサ（２）は、プログラム（１）を受け取り、そのプログラムを１行当たり演算子を１つだけ伴うコードに変換する（１０）。プログラム内のループの『ｉｆ．．ｇｏｔｏ．．ｅｌｓｅ  ｇｏｔｏ．．』形式への変換も行なわれる（１１）。次にシステムは、ディレクティブ『＃  ｄｅｆｉｎｅ  ｖａｒｉａｂｌｅ』の出現を、それらそれぞれの定数値で置き換える（１２）。システムは、各ポインタ変数のためのメモリ・ロケーションを決定し（１３）、各行のためのインストルメンテーションを挿入する（１４）。次に、例示的なＣプログラムに対する図２の動作の実例を考察する。
【００１７】
（１０）においては、Ｃプログラム内の演算子が複数ある行が１行当たり１つの演算子を有する形にフォーマットされる（１０）。したがって、例示的なコードは、次のようになる。
ｉｎｔ  ａ，ｂ，ｃ，ｄ；
ｄ＝ｄ＋（ａ＊ｂ）／ｃ；
は、次のように変更される。
ｉｎｔ  Ｄ１１８２；
ｉｎｔ  Ｄ１１８３；
ｉｎｔ  ａ；
ｉｎｔ  ｂ；
ｉｎｔ  ｃ
ｉｎｔ  ｄ；
Ｄ１１８２＝ａ＊ｂ；
Ｄ１１８３＝Ｄ１１８２／ｃ；
ｄ＝Ｄ１１８３＋ｄ；
【００１８】
（１１）においては、『ｉｆ  ｇｏｔｏ  ｅｌｓｅ  ｇｏｔｏ』変換によって例示的なコード
ｎｔ  ｉ，ａ；
ｆｏｒ（ｉ＝１；ｉ＜１０；ｉ＋＋）
ａ＋＝１０；
が、次のとおりに変換される。
ｉｎｔ  ｉ；
ｉｎｔ  ａ；
ｉ＝１；
ｇｏｔｏ  Ｄ１１８１；
Ｄ１１８０：；
ａ＝ａ＋１０；
ｉ＝ｉ＋１；
Ｄ１１８１：；
ｉｆ（ｉ＜＝９）
｛
ｇｏｔｏ  Ｄ１１８０；
｝
ｅｌｓｅ
｛
ｇｏｔｏ  Ｄ１１８２；
｝
Ｄ１１８２：；
【００１９】
それぞれの定数値への『＃ｄｅｆｉｎｅ』変数の置換（１２）においては、例示的なコード
＃ｄｅｆｉｎｅ  ｄａｔａ  １０
ｍａｉｎ（）
｛
ｉｎｔ  ｉ，ａ；
ｉｆ（ｉ＜ｄａｔａ）
ｉ＝ｉ＋ｄａｔａ；
ｅｌｓｅ
ｉ＝０；
｝
が、次のとおりに変換される。
ｍａｉｎ（）
｛
ｉｎｔ  ｉ；
ｉｎｔ  ａ；
ｉｆ（ｉ＜＝９）
｛
ｉ＝ｉ＋１０；
｝
ｅｌｓｅ
｛
ｉ＝０；
｝
｝
【００２０】
（１３）においては、各ポインタ変数のための、それのデータ型に応じた正確なメモリ・ロケーションが計算される。したがって、次に示す例示的なコード
ｉｎｔ  ＊ａ；
ｃｈａｒ  ＊ｄ；
＊ａ＝１０；
ａ＋＋；
ｄ＝ａ；
＊ｄ＝’ｃ’；
ｄ＋＋；
＊ｄ＝’ｂ’；
が、次のとおりに変換される。
ｉｎｔ  ＊ａ；
ｃｈａｒ  ＊ｄ；
＊ａ＝１０；
ａ＝ａ＋４；
ｄ＝（ｃｈａｒ＊）ａ；
＊ｄ＝９９；
ｄ＝ｄ＋１；
＊＝９８；
【００２１】
（１４）において、プロセスは行毎にインストルメンテーションを挿入してＣプログラムの動的プロファイルを獲得する。たとえば、コード
Ｄ１４５８＝＊ｓｉｇ＿ｏｕｔ；
Ｄ１４５９＝（ｉｎｔ）Ｄ１４５８；
は、次に示すように”ｐｒｉｎｔｆ”関数挿入を用いてインストルメントされる。
Ｄ１４５８＝＊ｓｉｇ＿ｏｕｔ；
ｐｒｉｎｔｆ（”０＼ｔ”）；
ｐｒｉｎｔｆ（”０ｘ％ｘ＼ｎ”，（ｕｎｓｉｇｎｅｄ  ｉｎｔ）Ｄ１４５８）；
Ｄ１４５９＝（ｉｎｔ）Ｄ１４５８；
ｐｒｉｎｔｆ（”１＼ｔ”）；
ｐｒｉｎｔｆ（”０ｘ％ｘ＼ｎ”，（ｕｎｓｉｇｎｅｄ  ｉｎｔ）Ｄ１４５９）；
【００２２】
図３は、図１の中で使用されている一例のパーサーをより詳細に示している。１つの実施態様においては、プリ‐プロセッサ（２）からのフォーマット済みＣプログラムが実行され、実行結果がログされる。この実行は、多様な使用ケース・シナリオをカバーする、完全なテスト・スートである。不完全なテスト・スートは、不適切なアーキテクチャ定義を導く可能性がある。フォーマット済みＣプログラムおよびログされた結果が入力としてパーサー（３）に供給される。１つの実装においては、パーサー（３）が次に示す動作を実行する。
【００２３】
（２０）においては、プロセスによって、プログラム（１）内で使用されるすべての変数のリストが構築される。各変数は、変数を一意的に識別する関連付けされたプロパティを有する。プロパティのうちのいくつかは、データ型、その変数が配列であるか否か、またはポインタであるか否かに関係する情報である。
【００２４】
（２２）においては、プロセスによって、プログラム内で使用されるすべての演算子のリストが構築される。演算子の機能を記述するプロパティのセットも各演算子に与えられる。これらのプロパティは、基本アーキテクチャ（７）の中に定義されている単純な演算子の組み合わせとして複雑な演算子の定義が可能となるように定義される。
【００２５】
（２４）においては、プログラム内の実行可能コードのそれぞれの行がデータ構造内にマップされる。それらの行についてのすべての情報がこのデータ構造内において利用できる。この構造は、変数リストおよび演算子リスト内へのリンクを有する。任意の行は、その行内で使用されている変数および演算子によって一意的に識別される。
【００２６】
（２６）においては、関数が識別されて関数のリストが維持される。
【００２７】
（２８）においては、ログされたＣプログラムの実行からの結果がパースされ、関連のあるすべての動的情報が収集される。これは、コードの行のデータ構造および変数リストの更新に使用される。
【００２８】
（３０）におけるＣプログラムは、コンパイラによって最適化される可能性のある多くの行を含んでいることがあり得る。たとえば、不必要な代入は、コンパイラによって取り除かれることになる。その種のコンパイラによって潜在的に取り除かれる可能性のある行が識別されて『ダミー』行としてマークされる。これを実行するアルゴリズムについては、後述する別の段落の中で説明する。
【００２９】
（３２）においては、システムが、２の累乗による乗算を左シフトによって最適化し、２の累乗による除算を右シフトによって最適化する（正の累乗のみ考慮している）。２の累乗による乗算または除算の演算子を有するすべての行が、右または左シフトと置き換えられる。この処理によって、プログラムの実行に関連付けされる、収集された統計値が正しく識別される。
【００３０】
（３４）においては、ループ内の冗長な演算をプロセスによって最適化される。ループに関する何らかのほかの形式の最適化がコンパイラによって実装されることは可能である。その種のコードの行の追跡にアルゴリズムが使用されて、作成済みの行データ構造内において同一の最適化が繰り返される。このアルゴリズムについても後述の別の段落の中で説明する。
【００３１】
（３６）においては、実行される行がこのとき、アーキテクチャ分類、すなわちデータ操作およびアドレス操作のための２つのプライマリ・ビンに分けられる。これは、それがいくつかの有意なアーキテクチャの決定を推し進めることから、達せられるべき非常に重要な区別である。多くのアドレス操作演算を有するプログラムは、独立したアドレス操作ユニットから恩典を受けることになるが、その一方でその種のハードウエアがほかのアプリケーションにとって過剰となることがある。これを行なうアルゴリズムは、後述する別の段落の中に定義されている。
【００３２】
（３８）においては、必要なデータ・メモリ帯域幅がプロセスによって識別される。１つの重要なアーキテクチャの決定は、プログラムを走らせるために必要なデータ・メモリ帯域幅に関係する。メモリからロードされるデータに依存するすべての行は、この目的のための異なるビンの下にマークされる。メモリからロードされるデータ以外のデータに対して作用したすべての行（たとえば、メモリからロードされるデータに対して作用を及ぼした行の結果に対して作用を及ぼすことが可能である）が個別にマークされる。アルゴリズムが、このデータに適用され、最小限のストールを伴うＣプログラムの行の実行を容易にするために必要とされるデータ・メモリに対するポートの数およびポートの幅が計算される。
【００３３】
（４０）においては、ハードウエア・フラグが識別されて処理される。ネイティブのＣプログラムは、ハードウエア・フラグのコンセプトを有していない。フラグは、通常、グローバル変数としてコードされる。しかしながらパフォーマンスの見地からは、プログラムに必要とされるすべてのハードウエア・フラグを識別することが必須である。これは、現在のところ一般に手作業で行なわれている。ハードウエア・フラグを利用する（かつ、結果としてもたらされるパフォーマンスを得る）べくＣコードがアッセンブリ内で再び手作業でコードされるか、またはプラグマを伴ういくつかのタイプのコーディング構造が使用されてフラグを表わすことが可能となるようにコンパイラがマニュアル調整されるか、のいずれかである。これらのオプションは、いずれも容易ではなく、また拡張性のあるものでもない。発明者らのアプリケーションは、ネイティブのＣコード内の潜在的ハードウエア・フラグを識別し、これらのグローバル変数をフラグとしてマークするアルゴリズムを有する。アーキテクチャ定義の一部として、これらのフラグを表現することを必要とするハードウエアもまた、自動的に記述され、合成される。フラグを識別するアルゴリズムについては、より詳細を後述する。
【００３４】
（４２）においては、プロセスが再使用可能な期限切れ変数を探す。忠実なパラメータを抽出するためには、各行のために使用される変数の数およびレジスタ・ファイル内において利用可能な読み出しおよび書き込みポートの数を考慮することが重要である。整合しない場合には、ペナルティ・サイクルが追加されなければならない。しかしながらネイティブのＣプログラムは、使用される変数の数を最適化するためには記述されない。そのためプログラムをそのまま使用することは、結果として非現実的な多数のペナルティ・サイクルがもたらされる可能性がある。したがって、行のデータ構造がパースされ、新しい変数の使用を最小化するべく修正されなければならない。このアルゴリズムについては後述の別の段落の中で説明する。
【００３５】
次にダミー行の識別を詳細に説明する。ダミー代入のチェックが、コンパイラによって最適化されて除かれそうな代入を含むＣプログラム内の行を識別する。１つの実施態様においては、プロセスが次に示す内容を実行するコードを含む。
（１）代入ステートメントを伴う行を探しながら行のデータ構造を通って進む。
（２）代入ステートメントがヒットしたとき、左辺の変数および右辺の変数をマークする。
（３）さらに下の行を調査して、この代入は必要であるか否か、または代わりに右辺の変数を直接使用することが可能であったか否かを検証する。左辺の変数の参照が行なわれる最後の行に先行する任意の行内の右辺の変数の再代入は、この要件を直接破ることになる。
（４）しかしながら、要件３が充足される場合であっても代入がなおも必要となる場合（条件付きチェック等）が存在し得る。この決定には、分岐の条件および分岐の深度を理解しているロジックが使用される。
（５）これらのチェックがすべて行なわれた後、代入が行なわれる必要がなかったことが認定された場合には、その代入演算を含む行がダミー行としてマークされる。
【００３６】
次に、ダミー変数の再代入について説明する。代入行がダミーとしてマークされた後は、その行内における変数の代入が冗長になっている。そこで行のデータ構造との一貫性を確保するために次に示す擬似コードが変数の再代入を行なう。
（１）ダミー代入行の右辺の変数を識別する。
（２）これより以前にあり、左辺にこの変数が出現した行を識別する。
（３）その左辺の変数をダミー行の左辺の変数に置き換える。分岐の深度のチェックは、ダミー代入チェック・セクションの中ですでに実行済みである。したがって、この置換は一貫することになる。
【００３７】
次に、ループ最適化を説明する。プロセスは、コンパイラがループ内の配列アクセスおよび配列指数に対して実行しそうな可能性のある最適化を追跡する。一例を次に示す。
【００３８】
Ｃコードの行を考える（ｂａｓｅはｉｎｔ  ＊）。
ｂ＝＊（ｂａｓｅ＋ｉ）；
このＣコードの行がプリ‐プロセッサに通されると、結果の行が生成される：
ｔｅｍｐ１＝ｉ＊４；
ｔｅｍｐ２＝ｂａｓｅ＋ｔｅｍｐ１；
ｂ＝＊ｔｅｍｐ２；
【００３９】
この演算が詰まったループの内側で実行されるとき、第１行が冗長である。任意のループにおいて、直前のアドレスに４を加えることによってそれの次のアドレスが容易に計算可能である。プログラム内のその種の行は、追跡され、ダミーとしてマークされる。これが行なわれない場合には、実際にコードがマシンのためにコンパイルされるときには決して存在しない演算の理由を与えるためにアーキテクチャ定義が不当に歪められることになる。そのため、その種の冗長な演算をすべてアーキテクチャ定義段階へ進む前に識別できることが必要不可欠である。ループ最適化のための擬似コードを次に示す。
（１）実行の反復を通じてすべての変数値を追跡する。この情報は、１４に挿入されるインストルメンテーションに起因してログされたＣプログラムの結果のパースから利用可能である。
（２）変数の現在の値とその変数の以前の値を比較し、それを差の値としてストアする。
（３）実行の反復のすべてを通じてこの差の値が不変のまま残り、かつそのコードの行が実際は偶発的にループ内（ループは、すでに識別済み）に存在している場合には、これが最適化の候補になる。行内の演算子が乗算である場合には、この行がダミーとしてマークされる。
【００４０】
次に、データとアドレスの操作の識別について説明する。プロセスは、Ｃプログラムで実行される行をデータとアドレスの操作用のビンに分割する。プログラムの観点からは、これらは変数に対する演算に過ぎず、これらの演算の間にまったく相違が存在しないが、プロセッサ・アーキテクチャの観点からは有意の違いがある。データ操作演算は、メモリからデータをフェッチする以前のアドレス操作演算に頼りがちである。多様な理由から、この区別は非常に重要である。アドレスとデータの操作の演算を識別するために、システムは、次に示す擬似コードを実行する。
（１）ポインタ（Ｃプログラム内においてポインタまたは配列のいずれかとして宣言される）に対する演算を行なうすべての行を識別するコードの各行を検証する。
（２）アドレス操作演算として行をマークする。
（３）結果がメモリからデータをフェッチするためだけであることを確保する。
【００４１】
演算３は、マークされた行がコードの他の行に導く可能性があること、またはそれに依存する可能性があるため、行なわれる。これらの行は、メモリからデータをフェッチする目的だけがこれらの行の結果によって意味されることを確保するために、追跡される。これを実装するためにこれらの行内に含まれる変数が追跡され、プロセスは、これらの変数の値（別の独立した再代入を伴うことなく）がほかの目的のために使用されないことを確かめる。これが当て嵌まる場合には、これらの行もまたアドレス操作演算としてマークされる。アドレスおよびデータの操作の演算両方にデータを供給する行は、データ操作演算として分類される。
【００４２】
次に、フラグ識別について説明する。フラグ検出アルゴリズムは、次に示す擬似コードを使用してＣプログラム内において宣言されているすべてのグローバル変数の検証を行なう。
（１）各グローバル変数が、実行の途中に取得される可能性のある値についてチェックされる。
（２）取得される値が０および１だけであれば、次のステップへ進む。
（３）それらの値がセットされるすべての行をチェックする。これらの値は、即時演算（言い換えると、ｘ＝１等の明示的な代入）を通じてのみセットされて次の段階に進むことが可能である。別の変数の代入の結果としてそれが導出される場合（ｘ＝ｙ等）、右辺の変数がバックトラックされてその変数がこの規則を確立するか否かが調べられる。永続的なロックアップ状況を防止するために適切なところにロジックが存在する。ほかの演算（算術、論理、またはメモリ・フェッチ等）が存在しなければ、その変数はフラグであり得ない。
（４）実際の代入行をチェックする。この代入は、全体のフローの中で値（０または１）のうちの１つだけにしかなり得ない。他方の値の代入は、条件付きチェック・フロー内においてのみ起こり得る。
（５）上記の規則に適合する変数をフラグとしてマークする。
（６）この定義に対応するハードウエア・フラグがプロセッサ・アーキテクチャの中で指定され、自動的に合成されることになる。
（７）この変数の値をセットするすべての行は、フラグ操作行としてマークされる。
（８）アーキテクチャ定義はまた、これらの演算を可能にするインストラクションも作成する。
（９）フラグ操作行としてマークされたこれらすべての行は、標準的なインストラクションではなく、これらの新しく定義されたインストラクションを使用し、特定のハードウエア・フラグを参照する。
【００４３】
次に、変数の再使用について説明する。各行内において使用される変数の数を最小化するプロセスは以下のとおりである。
（１）各行（ダミーとしてマークされていない）において、左辺の変数および右辺の変数をマークする。
（２）右辺の変数が、その後に続く行のいずれにおいても参照されていない場合には、その変数は、既存の左辺の変数の置換に使用される。
（３）それより下にある行内の左辺の変数を参照するすべての行は、それを置換した変数を参照するべく変更される。
（４）上記のプロセスのすべてにおいて、アルゴリズムは、左辺の変数が再代入されないゾーンにサーチ範囲を制限する。
【００４４】
パーサー段階が完了すると、パラメータ抽出モジュールまたはパラメータ抽出（４）が行のデータ構造を再訪する。
【００４５】
図４は、一例のパラメータ抽出モジュール（４）をより詳細に示している。このデータ構造の検証によって多様な関連パラメータが抽出される。たとえば、所定のテスト・ケースのためにプログラムの実行に必要とされる合計サイクルが計算される。これは、任意の所定の行の実行に必要とされるクロック・サイクル数（その行内に使用される演算子のプロパティから導出される値）に注目し、それにデータの依存度またはそのほかの理由に起因してその行によって被るクロック・サイクル・ペナルティを加算し、この値にその行が実行された回数（ログされたＣプログラムの実行の結果のパースによって明らかになる値）を乗ずることによって実行される。この演算がすべての行について反復されて、テスト・ケース全体の実行のために必要となる合計クロック・サイクルに到達する。同様に、アドレス計算、メモリ・ロード、メモリ・ストア、条件分岐、ループ、およびデータ操作に関連付けされるクロック・サイクルの数に到達する。上記の計算のすべてについての演算子の分布にタグを付けるリストが構築される。たとえば、合計サイクルの場合においては、それらのうちのいくつがどの演算子と関連付けされるかが計算される。それに加えて、各演算子について異なるデータ幅にわたる利用度の分布もまた計算される。このプロセスの終了時には、次に一例を示したテーブルが生成される。
【００４６】
【表１】
2013541778.tif 000003
【００４７】
同様に、関数呼び出しについての統計値も構築される。各関数呼び出しについて、それが呼び出される回数およびその関数の実行に費やされるクロック・サイクルが計算される。その後、コードの行が実行カウントの降順でソートされる。
【００４８】
Ｃプログラムのニーズにもっともよく適応するアーキテクチャの定義が、反復プロセスの入力として与えられる。初回のパラメータ抽出が実行され、７において定義されたベース・アーキテクチャを使用してプロセスが統計値を計算する。パラメータ抽出の出力に加えて、Ｃプログラムに関連付けされるリアルタイム制約およびプロダクトに関連付けされるハードウエア制約もまたアーキテクチャ定義ブロックに対する入力として供給される。当該ブロックは、指定されたパフォーマンス要件を満たすことになるアーキテクチャを自動的に生成する。その後、最適アーキテクチャに到達するべくアーキテクチャ・オプティマイザを使用してこのアーキテクチャを精緻化することができる。この段階における最初のステップは、リアルタイム制約を満たすことである。このステップの目標は、合計の実行時間を低減し、プロセッサがリアルタイム制約を満たすことを可能にする新しいインストラクションおよび対応するプロセッサ・アーキテクチャを定義することである。１つの例示的な実装においては、次に示す演算が実行される。
【００４９】
１．手前のセクションから利用可能な実行カウントによってソートされた行のリストをプロセスが検索する。これらの行に沿って進行し、順に生じる行のグループを識別する。たとえば、ソートされたリストは、６５１、６５２、６５９、８０２、８０３、．．．．といった形で現われるとすることができる。この場合において、行６５１から６５９までが、最初のグループのために識別される。単一グループの部分として行をマークする際は、それらが同一の実行カウント数を有している必要がある。この例においては、６５１、６５２、および６５９が同一の実行カウント数（ログされたＣプログラムの実行の結果のパースにおいてこれらの行がカウントされた回数）を有していることが重要である。その後、このリストの最初から最後の行までの間のすべての行がグループとしてマークされる。
【００５０】
２．これらの行のグループは、高い実行カウントを有しており、したがって実行時間のかなりの量を消費する。これらの行が単一のインストラクションでならすことが可能であれば、実行時間の短縮に帰することができる。新しいインストラクションが、これらのインストラクションを１つにモールドすることによって作成される。その種のモールドのための候補は、インストラクション・モールディング候補（ＩＭＣ）と呼ばれる。
【００５１】
３．インストラクションの各グループが、モールディング違反についてチェックされる。たとえば、このグループの最中の無条件ＧＯＴＯ（ジャンプ）または関数呼び出しは、シーケンスを無効にする。そのほかにも、レジスタ・ファイルからアクセス可能であるより多くのデータ変数を必要とする行のグループといった制約がある。たとえば、現在のアーキテクチャが２リード・ポート・レジスタ・ファイルを前提とし、インストラクションのグループが新しいインストラクションの形成に３つの変数を必要とする場合に、このグループを使用するＩＭＣを形成することはできない。レジスタ・ファイルへの書き込みポートが１つしかなく、インストラクションのグループが２つの変数を書き込む場合にもこのグループからＩＭＣを形成することができない。そのためシステムは、ハードウエア関連のアーキテクチャ制約をチェックし、これらの条件に従うサブグループ（存在する場合）として位置付ける。
【００５２】
４．このサブグループ内においては、複数のＩＭＣを形成することが可能である。たとえば、下にリストしたサブグループを形成する行のシーケンスを有することができる。
ａ＝ｂ＋ｃ；
ｄ＝ａ＊２；
ｅ＝ｄ  ＡＮＤ  ｂ；
この場合、３つの演算すべてからなる１つのＩＭＣ、最初の２つのインストラクションだけを含む別の１つ、および最後の２つのインストラクションを含む別の１つを有する。その種の可能性のあるすべてのＩＭＣが形成される。
【００５３】
５．ＩＭＣが定義された行のグループは、これらのインストラクションが順に生じるプログラム内の１つの場所にある。その種のシーケンスがＣプログラム内の別の場所に存在し得る。ここで、その状態が調べられる。注意すべき重要なことは、満たされる必要のある条件にインストラクションのシーケンスだけでなく相対的な演算子の依存度も含まれることである。ポイント４に記述した例を採用する。シーケンス
ｘ＝ｙ＋ｚ；
ｒ＝ｘ＊２；
ｆ＝ｒ  ＡＮＤ  ｘ；
が見つかるコード内の別の場所に来たとしても、これをＩＭＣが使用可能な場所としてカウントすることは可能でない。そこでアルゴリズムは、同一のインストラクションのシーケンスだけでなく、同一の変数依存度構造もチェックする。可能性としてＩＭＣの使用が可能なその種のすべての場所が、ＩＭＣとともにタグ付けされる。
【００５４】
６．ポイント５の結果は、このＩＭＣが新しいインストラクションとして実際に使用されることになったとしたら、プログラムの実行サイクル・カウントをる潜在的に低減するための計算に使用される。
【００５５】
７．この時点において、アルゴリズムがハードウエア・シンセサイザ・ブロックに対してクエリを行ない、インストラクションとしてこのＩＭＣを実装するためのタイミングおよび面積を得る。
【００５６】
８．このプロセスがすべての行について反復される。
【００５７】
９．これらのＩＭＣのうちのいくつかは、完全な関数を潜在的に置換する。その場合には、これらのＩＭＣがインストラクションとして実装されるときにプログラム・フローが有意に変化する。そのためそれらが、特殊ＩＭＣとしてマークされる。
【００５８】
１０．この時点において、現在の段階にとって可能なすべてのＩＭＣのリストが達せられる。最適化コスト関数が使用されて、インストラクションとして実装される必要のあるＩＭＣを拾い出す。アルゴリズムは、特定のコスト関数と結びつけられないが、コスト関数は、新しいインストラクションのタイミングおよびそれがＣプログラムの実行時間にどのような影響を及ぼすかについて考慮に入れたものになることになり得る。実行時間への影響の計算は、瑣末なものではない。現在のクロック・サイクル時間より小さいタイミングを有するＩＭＣは、アーキテクチャに対して有意な影響を与えない。しかしながら、現在のクロック・サイクルより大きいタイミングを有するＩＭＣと遭遇することはありがちである。これらのＩＭＣが受け入れられた場合には、クロック・サイクル時間がすべてのインストラクションについて増加することになり、クロック・サイクル数をより少なくできたとしても、可能性として実行時間が増加することがあり得る。したがって、この計算および決定は、瑣末なものでない。
【００５９】
１１．この計算を実行するためにＩＭＣが従属グループにまとめられてグループ化される。このグループ化を実行するために、完全に統計的に独立した原理が適用される。完全に統計的に独立していないＩＭＣがまとめられてグループ化される。どちらかと言うとこれは保守的なアプローチであるが、それにもかかわらず必要とされる。グループ化は、二重カウントの防止を補助する。サイクル時間の増加に関係する決定が行なわれなければならないときは、常に、すべてのＡＭＣグループが調査されて、このサイクル時間における増加から恩典を受けると見られるＩＭＣが捜し出される（言い換えるとそれらはまた、現在のサイクル時間より大きいが、新しいサイクル時間より小さいサイクル時間を有する）。最良ＩＭＣ（サイクル・カウントの低減を最大にするもの）が恩典を受ける各グループから抽出される。この情報を使用して新しい実行時間が計算され、これが現在の実行時間より小さい場合には、サイクル時間が増加される。
【００６０】
１２．コスト関数がＩＭＣを識別する都度、対応するインストラクションが定義され、この新しいインストラクションを含めるべくアーキテクチャ定義が変更される。ほかのＩＭＣに対するこの新しいインストラクションの効果が調査され、そのＩＭＣが合理化される。
【００６１】
１３．コスト関数が、要件に適合するＩＭＣを見つけ出すことが不可能になると、このプロセスが停止される。
【００６２】
１４．このアーキテクチャが入力としてパーサーに渡される。パラメータが再び抽出されてアーキテクチャ定義が再考される。このループが、要件に適合する新しいＩＭＣをコスト関数が見つけ出すことができなくなるまで走る。
【００６３】
１５．リアルタイム制約がまだ満たされていない場合には、ほかのいくつかのアーキテクチャ変数が考察される。たとえば、レジスタ・ファイルに対する読み出しおよび書き込みポートの数、メモリに対する読み出しおよび書き込みポートの数、これらのポートの幅、プロセッサのスカラ度、ハードウエアを最適使用するインストラクションのグループ化規則などがある。これらは厳密に言えばインストラクションと関係しない変数であるが、実行時間の短縮をさらに補助し得る新しいＩＭＣを見つけ出すには欠かせない。ループが再び反復される。例として述べるが、ここでスカラ度を考察する。アルゴリズムは、行のデータ構造を通って進み、そのコード内に内在するインストラクション・レベルのパラレリズムの量を識別する。これが使用されて、プロセッサの実行ユニットに利用可能なハードウエア・リソースが最適化され、プロセッサのスカラ度が定義される。実行ユニットのために利用可能なハードウエアは、インストラクションのグループ化規則の定義にも同じく使用される。注意すべき重要なことは、この場合に達せられるグループ化規則は、提示されたコードにとって最適であって、それが恣意的に選択されたものではないということである。アイドル・スロットを最小化するコスト関数が使用されてこれを定義する。
【００６４】
１６．リアルタイム制約が、上記のアーキテクチャ変数のいずれかを増加することによってもまだ満たされていない場合には、アルゴリズムがマクロ・パラレリズムを識別し、識別済みパラレリズムに必要なコアの数を最適化する。アルゴリズムはまた、コアのそれぞれにおいて実行されるべくインストラクション・ストリームを分割する。
【００６５】
１７．任意の時点において、リアルタイム・パフォーマンス制約が満たされると、アルゴリズムがループを出る。
【００６６】
１８．すべての変数が調べられた後においてもなおパフォーマンス制約が満たされない場合には、アルゴリズムが、このアプリケーションはプログラマブル・ソリューションに適さないと認定し、機能のうちのいくつかがデータ・パス専用ハードウエアとして実装されるコプロセッサ・アーキテクチャを推奨する。合成されるＩＭＣおよび（現在のサイクル時間よりタイミングが大きかったことから）除かれるＩＭＣのリストが使用されて、このコプロセッサ・アーキテクチャが定義される。
【００６７】
別のアルゴリズムが、ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンに関する統計を構築する。これらの統計は、メモリ依存について獲得された情報に加えて、キャッシュのプリフェッチ・メカニズムおよびキャッシュ・ポリシーの最適化に使用される。
【００６８】
リアルタイム・パフォーマンス制約が満たされた後は、そのほかのハードウエア制約が考察される。ハードウエア制約は、面積、電力、および何らかのそのほかのパラメータにおいて表現することが可能である。その後アルゴリズムは、これらの制約を満たすべく、アーキテクチャを微調整して冗長なパスおよび重要でないセクションを減少させる。別のアルゴリズムが採用されて、利用可能なすべてのインストラクションをチェックし、これらのインストラクションによって提供される恩典を検証する。コスト関数が使用されてこのチェックが実行される。インストラクション・デコーディング時間が最小限のレベルまで低減されるように、リアルタイム・パフォーマンス制約に影響を及ぼさずに安全に取り除くことが可能なすべてのインストラクションがセットから取り除かれる。これらの制約が満たされることもあれば、満たされないこともある。これらは、与えられたアプリケーションにとって定義されたアーキテクチャが大きな過剰とならず、かつアーキテクチャの複雑性を低減する任意の範囲が調べられるように使用される。
【００６９】
図５は、アーキテクチャ定義を自動的に生成する例示的なシステムを示している。このプロセスにおいては、前述したとおり、パーサー（３）からの出力がパラメータ抽出モジュール（４）に提供される。次にプロセスは、あらかじめ決定済みの規則に基づいてプログラム行のセットを伴うグループを形成する（６０）。続いて、モールディング規則のセットが検索される（６１）。プロセスは、モールディング規則違反をチェックし、プログラム行をサブグループに分割する（６２）。プロセスは、ＩＭＣを見つけ出し（６３）、ＩＭＣの利用のための場所を識別する（６４）。次にプロセスは、各ＩＭＣに関連付けされるサイクルを決定する（６５）。ＩＭＣのためのタイミングおよび面積の決定もまた実行される（６６）。その情報は、演算６０および６３にフィードバックされるとともに、完全な関数を置換することが可能なＩＭＣの識別にも提供される（６７）。次に、統計的依存に基づいてＩＭＣがグループ化される（６８）。プロセスは、コスト関数を使用して最良ＩＭＣを抽出し（６９）、その最良ＩＭＣのための新しいインストラクションを実装する（７０）。ほかのＩＭＣに対する新しいインストラクションの効果の反復決定が行なわれ（７１）、決定が最良ＩＭＣを抽出する演算６９へ、そこから新しいインストラクションを実装する演算７０へと提供される。スレッショルドに到達するまでこれが行なわれ、新しいインストラクションがアーキテクチャ定義に追加される（５）。プロセスは、ほかのアーキテクチャ変数に対するこの新しいインストラクションの影響をチェックし（７２）、この新しいインストラクションを受け入れるか、または拒否する。プロセスは、その後、カスタムＩＣに課せられた制約を満たすあらかじめ決定済みのスレッショルドに到達するまで反復される。
【００７０】
図６は、カスタムＩＣを自動的に生成するシステムの一例を示している。図６のシステムは、選択された目標とするアプリケーションに対するカスタムハードウェアソリューションアーキテクチャを自動的に生成することをサポートする。目標とするアプリケーションの仕様は、一般に、Ｃ、ＭＡＴＬＡＢ（マトラボ）、ＳｙｓｔｅｍＣ（システムＣ）、フォートラン、エイダ等の高水準言語またはそのほかのいずれかの言語によるコンピュータ可読コードとして表現されたアルゴリズムを通じてなされる。仕様は、目標とするアプリケーションの記述を含み、またそれには、望ましいコスト、面積、電力、速度、パフォーマンス、およびそのほかのハードウエア・ソリューションの属性といった１つまたは複数の制約も含まれる。
【００７１】
図６においては、ＩＣカスタマがプロダクト仕様１０２を生成する。通常は、所望のプロダクトのすべての主要機能を取り込んだ初期プロダクト仕様が存在する。そのプロダクトから、アルゴリズムの専門家がそのプロダクトに必要とされるコンピュータ可読コードまたはアルゴリズムを識別する。それらのアルゴリズムのうちのいくつかは、サードパーティから、または標準開発委員会からのＩＰとして利用可能となることがある。それらのうちのいくつかは、製品開発の一部として開発されなければならない。この態様においては、さらにプロダクト仕様１０２が、とりわけＣプログラム等のプログラムまたはＭＡＴＬＡＢ（マトラボ）モデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム１０４で詳述される。プロダクト仕様１０２は、また、とりわけコスト、面積、電力、プロセス・タイプ、ライブラリ、およびメモリ・タイプ等の要件１０６も含んでいる。
【００７２】
コンピュータ可読コードまたはアルゴリズム１０４および要件１０６は、自動化されたＩＣジェネレータ１１０に提供される。コードまたはアルゴリズム１０４およびチップ設計に課せられた制約だけに基づいて、ＩＣジェネレータ１１０は、人間の掛かり合いを殆ど、またはまったく伴うことなく、ＧＤＳファイル１１２、ＩＣを実行させるファームウエア１１４、ソフトウエア開発キット（ＳＤＫ）１１６、および／またはテスト・スート１１８を含む出力を自動的に生成する。ＧＤＳファイル１１２およびファームウエア１１４は、カスタム・チップ１２１の製造に使用される。
【００７３】
このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。このシステムは、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わり、アルゴリズムが、そのアプリケーションのために特に最適化されたプロセッサ上において実装されることが常に可能となる。システムは、この最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエア・ツールおよびファームウエア・アプリケーションとともに生成する。この全体的なプロセスは、現在数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。要約して言えば、このシステムは、プロダクト開発のデジタル・チップ設計部分をブラック・ボックス化する。
【００７４】
１つの実施態様においては、このシステム・プロダクトが、次に示すものを入力として取ることが可能である。
Ｃ／ＭＡＴＬＡＢ（マトラボ）で定義されたコンピュータ可読コードまたはアルゴリズム、
必要とされる周辺機器、
面積目標、
電力目標、
マージン目標（将来的なファームウエア更新のためにどの程度のオーバーヘッドを組み込むべきか、またどの程度複雑性が増加するか）、
プロセスの選択肢、
標準セル・ライブラリの選択肢、
テスト可能性スキャン
【００７５】
システムの出力は、関連付けされるファームウエアすべてを伴ったデジタル・ハード・マクロとすることができる。このデジタル・ハード・マクロのために最適化されたソフトウエア開発キット（ＳＤＫ）もまた自動的に生成されて、ファームウエアに対する将来的なアップグレードがプロセッサの交換を強いることなく実装されるようにすることが可能である。
【００７６】
このシステムは、選択された目標とするアプリケーションに対して完全かつ最適なハードウエア・ソリューションを自動的に生成する。共通の目標とするアプリケーションは埋め込みアプリケーション空間内にあるが、それらは、必ずしもそれに限定されない。
【００７７】
次に、例として、自動化されたチップ設計システムをサポートするコンピュータについて考察する。コンピュータは、好ましくは、プロセッサ、ランダム・アクセス・メモリ（ＲＡＭ）、プログラム・メモリ（好ましくは、フラッシュＲＯＭ等の書き込み可能な読み出し専用メモリ（ＲＯＭ））、および入力／出力（Ｉ／Ｏ）コントローラをＣＰＵバスによって結合された形で含んでいる。このコンピュータは、ハードディスクおよびＣＰＵバスに結合されるハード・ドライブ・コントローラをオプションとして含むことができる。ハードディスクは、本発明等のアプリケーション・プログラムおよびデータを記憶するために使用することができる。それに代えて、アプリケーション・プログラムをＲＡＭまたはＲＯＭ内に記憶することができる。Ｉ／Ｏコントローラは、Ｉ／Ｏバスを経由してＩ／Ｏインターフェースに結合される。Ｉ／Ｏインターフェースは、シリアル・リンク、ローカル・エリア・ネットワーク、無線リンク、およびパラレル・リンク等の通信リンクを介してアナログまたはデジタル形式でデータの受信および送信を行なう。オプションとして、表示器、キーボード、およびポインティング・デバイス（マウス）がＩ／Ｏバスに接続されることもある。それに代えて、Ｉ／Ｏインターフェース、表示器、キーボード、およびポインティング・デバイスのために別々の接続（別々のバス）が使用されることもある。プログラマブル処理システムは、あらかじめプログラムすること、または別のソース（たとえば、フロッピー（登録商標）ディスク、ＣＤ‐ＲＯＭ、または別のコンピュータ）からプログラムをダウンロードすることによってそれをプログラムすること（および再プログラムすること）ができる。
【００７８】
各コンピュータ・プログラムは、目に見える形として、コンピュータによってストレージ媒体またはデバイスが読み出されたときに、ここで説明している手順を実行するべくそのコンピュータの構成および動作のコントロールを行なうために、汎用または専用プログラマブル・コンピュータによって読み出されることが可能なマシン可読ストレージ媒体またはデバイス（たとえば、プログラム・メモリまたは磁気ディスク）内に記憶される。また本発明のシステムは、コンピュータ・プログラムを用いて構成されるコンピュータ可読ストレージ媒体内において具体化されると考えてもよく、それにおいてストレージ媒体は、ここで述べている機能を実行するべく特定の、あらかじめ定義済みの態様でコンピュータを動作させるように構成される。
【００７９】
以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。
【図１】
2013541778.tif 000004
【図２】
2013541778.tif 000005
【図３】
2013541778.tif 000006
【図４】
2013541778.tif 000007
【図５】
2013541778.tif 000008
【図６】
2013541778.tif 000009
【国際調査報告】
2013541778.tif 000010