(57)【要約】  自動的に生成されるプロセッサ・アーキテクチャのためのソフトウエア開発ツールを、ターゲット・プロセッサの記述を受け取ることと、コンパイラ・ジェネレータを使用してターゲット・コンパイラを自動的に生成することと、アッセンブラ・ジェネレータを使用してターゲット・アッセンブラを自動的に生成することと、リンカ・ジェネレータを使用してターゲット・リンカを自動的に生成することと、シミュレータ・ジェネレータを使用してターゲット・シミュレータを自動的に生成することと、プロファイラ・ジェネレータを使用してターゲット・プロファイラを自動的に生成することと、生成されたターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用してすべてのユーザ制約または要件が満たされるまでプロセッサ・アーキテクチャの１つまたは複数のパラメータを変更することによって新しいプロセッサ・アーキテクチャを反復的に生成することであって、それぞれの新しいプロセッサ・アーキテクチャについて新しいプロセッサ・アーキテクチャごとにターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを再生成しつつそれを行なうことと、最適の生成されたプロセッサ・アーキテクチャを半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成することと、によって自動的に生成するシステムおよび方法が開示されている。
2014510960.tif 000002
【特許請求の範囲】
【請求項１】
自動的に生成されたプロセッサ・アーキテクチャのためのソフトウエア開発ツールを自動的に生成するための方法であって、
ａ．  ターゲット・プロセッサの記述を受け取り、
ｂ．  コンパイラ・ジェネレータを使用してターゲット・コンパイラを自動的に生成し、
ｃ．  アッセンブラ・ジェネレータを使用してターゲット・アッセンブラを自動的に生成し、
ｄ．  リンカ・ジェネレータを使用してターゲット・リンカを自動的に生成し、
ｅ．  シミュレータ・ジェネレータを使用してターゲット・シミュレータを自動的に生成し、
ｆ．  プロファイラ・ジェネレータを使用してターゲット・プロファイラを自動的に生成し、
ｇ．  前記生成されたターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用してすべてのユーザ制約または要件が満たされるまでプロセッサ・アーキテクチャの１つまたは複数のパラメータを変更することによって新しいプロセッサ・アーキテクチャを反復的に生成するとともに、それぞれの新しいプロセッサ・アーキテクチャについて前記新しいプロセッサ・アーキテクチャごとに前記ターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを再生成し、
ｈ．  生成された最適のプロセッサ・アーキテクチャを半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成する、
方法。
【請求項２】
前記コンパイラ・ジェネレータは、プロセッサのインストラクション・セット・アーキテクチャ内のインストラクションのセマンティクスを含む前記ターゲット・プロセッサの高レベルの記述を読み込み、
前記コンパイラ・ジェネレータは、ターゲット・プロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティック・ツリーを構築し、前記ターゲット・プロセッサのためのターゲット・コンパイラを生成する、
請求項１に記載の方法。
【請求項３】
前記ターゲット・コンパイラは、呼び出しスタック・レイアウト、レジスタ・アロケーション、インストラクション・スケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、および前記ターゲット・プロセッサの最適化を取り扱う、
請求項２に記載の方法。
【請求項４】
前記アッセンブラ・ジェネレータは、インストラクションのシンタックス、インストラクションのバイナリ・エンコーディング、および前記インストラクションのための可能性のある再配置を読み込み、前記ターゲット・アッセンブラを生成する、
請求項１に記載の方法。
【請求項５】
前記ターゲット・アッセンブラは、前記インストラクションのシンタックスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、未解決のシンボルを出力する、
請求項４に記載の方法。
【請求項６】
前記ターゲット・リンカは、オブジェクト・ファイルならびにライブラリを取り入れて前記オブジェクト・コードに適用されるすべての前記再配置を用いて実行可能ファイルを生成するオブジェクト・ファイル・リンカを生成する、
請求項１に記載の方法。
【請求項７】
前記シミュレータ・ジェネレータは、パイプライン構造、インストラクション・セット・アーキテクチャ、インストラクションのセマンティクス、および各ハードウエア・ブロックの特性を読み込む、
請求項１に記載の方法。
【請求項８】
前記ターゲット・シミュレータは、キャッシュ・モデル、メモリ・モデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを含む、
請求項７に記載の方法。
【請求項９】
デバッガ・ジェネレータを使用してターゲット・デバッガを生成する
請求項１に記載の方法。
【請求項１０】
前記ターゲット・デバッガは、呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、およびインストラクションの逆アッセンブリ、ターゲット・マシン上のレジスタの数ならびに特性を取り扱う、
請求項９に記載の方法。
【請求項１１】
自動的に生成されたプロセッサ・アーキテクチャのためのソフトウエア開発ツールを自動的に生成するためのシステムであって、
ａ．  コンパイラ・ジェネレータを使用してターゲット・コンパイラを自動的に生成するための手段と、
ｂ．  アッセンブラ・ジェネレータを使用してターゲット・アッセンブラを自動的に生成するための手段と、
ｃ．  リンカ・ジェネレータを使用してターゲット・リンカを自動的に生成するための手段と、
ｄ．  シミュレータ・ジェネレータを使用してターゲット・シミュレータを自動的に生成するための手段と、
ｅ．  プロファイラ・ジェネレータを使用してターゲット・プロファイラを自動的に生成するための手段と、
ｆ．  前記ターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用してコスト関数として表わされるタイミング、面積、電力およびハードウエア制約のすべてが満たされるまでプロセッサ・アーキテクチャの１つまたは複数のパラメータを変更することによって新しいプロセッサ・アーキテクチャを反復的に生成するための手段であって、各ターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラが、それぞれの前記ジェネレータを使用してプロセッサ・アーキテクチャごとにカスタム生成される、新しいプロセッサ・アーキテクチャを反復的に生成するための手段と、
ｇ．  最適の生成されたプロセッサ・アーキテクチャを半導体製造のために前記カスタム集積回路のコンピュータ可読記述に合成するための手段と、
備えるシステム。
【請求項１２】
前記コンパイラ・ジェネレータは、プロセッサのインストラクション・セット・アーキテクチャ内のインストラクションのセマンティクスを含む前記ターゲット・プロセッサの高レベルの記述を読み込み、
前記コンパイラ・ジェネレータは、ターゲット・プロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティック・ツリーを構築し、前記ターゲット・プロセッサのためのターゲット・コンパイラを生成する、
請求項１１に記載のシステム。
【請求項１３】
前記ターゲット・コンパイラは、呼び出しスタック・レイアウト、レジスタ・アロケーション、インストラクション・スケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、および前記ターゲット・プロセッサの最適化を取り扱う、
請求項１２に記載のシステム。
【請求項１４】
前記アッセンブラ・ジェネレータは、インストラクションのシンタックス、インストラクションのバイナリ・エンコーディング、および前記インストラクションのための可能性のある再配置を読み込み、前記ターゲット・アッセンブラを生成する、
請求項１１に記載のシステム。
【請求項１５】
前記ターゲット・アッセンブラは、前記インストラクションのシンタックスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、未解決のシンボルを出力する、
請求項１４に記載のシステム。
【請求項１６】
前記ターゲット・リンカは、オブジェクト・ファイルならびにライブラリを取り入れて前記オブジェクト・コードに適用されるすべての前記再配置を用いて実行可能ファイルを生成するオブジェクト・ファイル・リンカを生成する、
請求項１１に記載のシステム。
【請求項１７】
前記シミュレータ・ジェネレータは、パイプライン構造、インストラクション・セット・アーキテクチャ、インストラクションのセマンティクス、および各ハードウエア・ブロックの特性を読み込む、
請求項１１に記載のシステム。
【請求項１８】
前記ターゲット・シミュレータは、キャッシュ・モデル、メモリ・モデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを含む、
請求項１７に記載のシステム。
【請求項１９】
デバッガ・ジェネレータを使用してターゲット・デバッガを生成することを含む、
請求項１１に記載のシステム。
【請求項２０】
前記ターゲット・デバッガは、呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、およびインストラクションの逆アッセンブリ、ターゲット・マシン上のレジスタの数ならびに特性を取り扱う、
請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カスタム集積回路（ＩＣ）または特定用途向け集積回路（ＡＳＩＣ）のためのソフトウエア開発ツールを自動的に生成するための方法に関する。
【背景技術】
【０００２】
プロセッサのためのソフトウエアの開発には、ソフトウエア開発ツールのセットが必要とされる。これらのツールは、以下のものに限られないが、図１に示されているコンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラが含まれる。
【０００３】
コンパイラは、Ｃ／Ｃ＋＋等々の高レベル言語を取り入れ、それを、たとえばｘ８６、ＭＩＰＳ、ＡＲＭ等の特定のプロセッサのアッセンブリ言語に変換する。アッセンブラは、手作業で記述されるかまたはコンパイラによって生成されたアッセンブリ言語を取り入れてオブジェクト・ファイルを作成する。オブジェクト・ファイルは、特定のプロセッサによって理解される一連のバイナリ・インストラクションを含む。したがってアッセンブラは、アッセンブリ・コードを、特にｘ８６、ＭＩＰＳ、ＡＲＭといった特定のプロセッサによって理解されるバイナリ形式に変換する。リンカは、アッセンブラによって作成された１つまたは複数のオブジェクト・ファイルを取り入れ、バイナリ・コード上におけるあらゆる再配置を行なうことによってそれらをまとめてリンクし、実行可能ファイルを生成する。
【０００４】
新しいプロセッサの開発プロセスにおいては、そのプロセッサがまだ存在していないことから、通常、設計中のプロセッサをシミュレーションするシミュレータが開発される。シミュレータは、開発中のプロセッサのためのソフトウエア・モデルである。モデルは、プロセッサの機能的等価モデルからプロセッサのサイクル精度のモデルに至るまでの範囲で多様化し得る。モデルは、シミュレータを開発するために採用され、設計中のプロセッサを忠実に反映し、したがって設計中のプロセッサに対して極めて特有なものとなる。シミュレータは、１つまたは複数の実行可能ファイル（プログラム）およびそれらの対応データ・ベクトルを取り入れ、それがシミュレーションしているプロセッサが行なうとおりに、そのプログラムを実行する。シミュレータは、オプションとして、インストラクション・トレースおよびデータ・トレースに等しい実行トレースを発行する能力を有する。
【０００５】
ソフトウエア開発キット（ＳＤＫ）は、ユーザ・アプリケーションをデバッグするためのデバッガを必ず含んでいる。デバッガは、ユーザ・プログラムのデバッグに使用され、たとえばブレークポイント、ウォッチ・ポイント、シングル・ステッピング、スタック・トレースバック等の多様なデバッグ・コマンドをサポートする。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ソフトウエア開発に必要とされるこれらすべてのソフトウエア・ツールはプロセッサに固有であり、言い換えると、たとえばＭＩＰＳプロセッサ、ＩＢＭのＰｏｗｅｒＰＣ、またはＳＵＮ‐ＳＰＡＲＣのためのソフトウエアの開発を希望するのであれば、ＭＩＰＳプロセッサのためのＣコンパイラ、アッセンブラ、リンカ、シミュレータ、およびデバッガが開発される必要がある。これらのツールをすべて開発するには、それぞれのプロセッサごとに数人年（several man years）を要する。
【課題を解決するための手段】
【０００７】
自動的に生成されるプロセッサ・アーキテクチャのためのソフトウエア開発ツールを、ターゲット・プロセッサの記述を受け取り、コンパイラ・ジェネレータを使用してターゲット・コンパイラを自動的に生成し、アッセンブラ・ジェネレータを使用してターゲット・アッセンブラを自動的に生成し、リンカ・ジェネレータを使用してターゲット・リンカを自動的に生成し、シミュレータ・ジェネレータを使用してターゲット・シミュレータを自動的に生成し、プロファイラ・ジェネレータを使用してターゲット・プロファイラを自動的に生成し、生成されたターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを使用し、すべてのユーザ制約または要件が満たされるまでプロセッサ・アーキテクチャの１つまたは複数のパラメータを変更することによって新しいプロセッサ・アーキテクチャを反復的に生成するとともに、それぞれのプロセッサ・アーキテクチャについてそれぞれのプロセッサ・アーキテクチャごとにターゲット・コンパイラ、アッセンブラ、リンカ、シミュレータ、およびプロファイラを再生成し、最適の生成されたプロセッサ・アーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する、ことによって自動的に生成するシステムおよび方法が開示されている。
【０００８】
上記の態様の実装には、次に示す内容のうちの１つまたは複数を含めることができる。コンパイラ・ジェネレータは、考察中のプロセッサの高レベルの記述を読み込む。コンパイラ・ジェネレータは、プロセッサＩＳＡ内の多様なインストラクションのセマンティクスを読み込み、ターゲット・プロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティック・ツリーを構築し、ターゲット・プロセッサ・コードの生成、呼び出しスタック・レイアウト、レジスタ・アロケーション、インストラクション・スケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、およびそのほかの、ターゲット・プロセッサ上において可能な多様な最適化のために必要とされるコードを生成する。アッセンブラ・ジェネレータは、多様なインストラクションのシンタクス、それらのバイナリ・エンコーディング、および多様なインストラクションに適用するために必要な可能性のある再配置を読み込む。この情報に基づいてその後アッセンブラ・ジェネレータがアッセンブラを生成する。アッセンブラ・ジェネレータは、ターゲット・プロセッサのためのインストラクションのリストを、それらのシンタクスならびに有効オペランド、およびそれらの範囲とともに取り入れ、すべての未解決のシンボルについて、アッセンブラを構築してインストラクションのシンタクスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、あらゆる関連再配置レコードを発行する。リンカ・ジェネレータは、オブジェクト・ファイル・リンカを生成し、それがオブジェクト・ファイルならびにライブラリを取り入れ、オブジェクト・コードに適用されるすべての再配置を用いて実行可能ファイルを生成する。シミュレータ・ジェネレータは、パイプライン構造、ＩＳＡ、インストラクションのセマンティクス、およびハードウエア・ブロックのそれぞれの特性が定義されているマシン記述を読み込む。アーキテクチャのすべての要素の定義に基づいて、シミュレータ・ジェネレータは、キャッシュ・モデル、メモリ・モデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを生成する。このシミュレータは、シミュレータ・ジェネレータによって自動的に生成され、生成されたシミュレータは、実際のハードウエア・モデルを正確に反映する。プロファイラ・ジェネレータは、特にターゲット・マシンのレジスタの記述およびインストラクション・セットを取り入れ、ターゲット・マシン上で実行されるアプリケーションの静的実行プロファイルをはじめ、動的実行プロファイルを生成するターゲット・プロセッサのためのプロファイラを生成する。デバッガ・ジェネレータは、ターゲット・プロセッサのインストラクション・セットの記述を呼び出しスタック・レイアウトとともに取り入れ、ターゲット・プロセッサに固有のデバッガを生成する。このようにして生成されたデバッガは、上記のサイクル・ベースのシミュレータまたは実際のハードウエア・チップのいずれかへのフックアップが可能である。呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、インストラクションの逆アッセンブリ、ターゲット・マシン上のレジスタの数および特性はすべて、デバッガ・ジェネレータの一部として自動的に生成される。
【０００９】
そのほかの実装としては次に示す内容を含めることができる。それぞれのアーキテクチャ最適化の繰り返しごとに、システムは、プロセッサのスカラ度およびインストラクション・グルーピング規則を最適化することが可能である。システムはまた、必要とされるコアの数を最適化し、それらのコアを効果的に使用するべくインストラクション・ストリームを自動的に分割することも可能である。プロセッサ・アーキテクチャの最適化は、インストラクション・セットの変更を含む。システムが行なうインストラクション・セットの変更には、必要とされるインストラクションの数を低減させること、およびインストラクションをエンコードしてインストラクションのデコード速度およびインストラクションのメモリ・サイズ要件を向上させることを含む。プロセッサ・アーキテクチャの最適化は、レジスタ・ファイル・ポート、ポート幅、およびデータ・メモリへのポートの数のうちの１つまたは複数の変更を含む。プロセッサ・アーキテクチャの最適化は、データ・メモリ・サイズ、データ・キャッシュのプリフェッチ・ポリシー、データ・キャッシュ・ポリシー、インストラクション・メモリ・サイズ、インストラクション・キャッシュのプリフェッチ・ポリシー、およびインストラクション・キャッシュ・ポリシーのうちの１つまたは複数の変更を含む。プロセッサ・アーキテクチャ最適化は、コプロセッサの追加を含む。システムは、プロセッサ・アーキテクチャのパフォーマンスを向上させるべくコンピュータ可読コードに対して独特のカスタマイズがなされた新しいインストラクションを自動的に生成することが可能である。システムは、コンピュータ可読コードのパーズを含み、さらにダミー代入の除去、冗長なループ演算の除去、必要とされるメモリ帯域幅の識別、１つまたは複数のハードウエア・フラグとしての１つまたは複数のソフトウエア実装されたフラグの置換、および期限切れの変数の再使用を含む。抽出するパラメータは、さらに、各行のための実行サイクル時間の決定、各行のための実行クロック・サイクル・カウントの決定、１つまたは複数のビンのためのクロック・サイクル・カウントの決定、演算子統計テーブルの生成；各関数のための統計の生成；および実行カウントの降順による行のソートを含む。システムは、共通使用されるインストラクションを１つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させることが可能である（インストラクション・モールディング）。システムは、アーキテクチャ・パラメータの変更のためのタイミングおよび面積のコストを決定することが可能である。ＩＭＣとの置換が可能なプログラム内のシーケンスが識別される。これは、シーケンス内のインストラクションをアレンジし直し、コードの機能を損なうことなく適合性を最大化する能力を含む。システムは、ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュ・ポリシーを最適化することができる。
【００１０】
またシステムは、コンピュータ可読コードの静的プロファイリングおよび／またはコンピュータ可読コードの動的プロファイリングの実行も含む。システムのチップ仕様は、コンピュータ可読コードのプロファイルに基づいて設計される。さらにチップ仕様は、コンピュータ可読コードの静的および動的プロファイリングに基づいて漸進的に最適化することが可能である。コンピュータ可読コードは、最適アッセンブリ・コードにコンパイルされることが可能であり、それが選択されたアーキテクチャのためのファームウエアを生成するべくリンクされる。シミュレータは、ファームウエアのサイクル精度のシミュレーションを実行することが可能である。システムは、ファームウエアの動的プロファイリングを実行することができる。方法は、さらに、プロファイリングが行なわれたファームウエアに基づいて、またはアッセンブリ・コードに基づいてチップ仕様の最適化を行なうことを含む。システムは、設計されたチップ仕様のために、レジスタ・トランスファ・レベル（ＲＴＬ）コードを自動的に生成することが可能である。またシステムは、ＲＴＬコードの合成を行なってシリコンを製造することも可能である。
【００１１】
好ましい実施態様の利点には、次に示す内容のうちの１つまたは複数を含めることができる。システムは、ＡＳＩＣおよびＡＳＩＰのためのソフトウエア開発ツールを開発するためのターンアラウンド時間および設計コストを有意に低減する。これは、特定の『チップ』設計ではなく、頭の中にある基礎をなすアルゴリズムを用いて『Ｃ』により記述されたアプリケーションを利用することによってなされる。その後システムは、必須のソフトウエア開発キットおよびチップ上で走るファームウエアとともにそのアルゴリズムを実装するプロセッサ・ベースのチップ設計を自動的に生成する。このプロセスは、ＡＳＩＰ／ＡＳＩＣのための数人年の努力に対し、設計に行き着くまで数週間しか要さない。
【００１２】
システムは、『アーキテクチャ・オプティマイザ（ＡＯ）』に頼ることによってアプリケーションの要件と整合するチップ設計を自動的に生成することが可能である。サイクル精度のシステム・レベルのシミュレータから獲得されたアルゴリズムの実行プロファイル、およびアルゴリズムの静的プロファイル、およびチップに組み込まれる多様なハードウエア・ブロックの特性決定に基づいて、ＡＯは、パフォーマンス、電力、およびコストに関するベンダの要件を満たす最適ハードウエア構成を決定する。アルゴリズムの分析に基づき、ＡＯは、パフォーマンス要件を満たすだけでなく、手元のアルゴリズムに対してハードウエアを最適化することになる提案チップ・アーキテクチャに行き着く。ＡＯは、一連の反復ステップを取る中で所定のアルゴリズムのための最適ハードウエアに収斂する最適アーキテクチャに行き着く。
【００１３】
システムは、すべてのコストが考慮に入れられ、かつシステム設計者が評価するべき最良可能な数表現およびビット幅の候補を獲得するように評価プロセスを自動化する。方法は、与えられたアーキテクチャの面積、タイミング、および電力のコストを迅速かつ自動化された態様で評価することができる。この方法は、コスト計算エンジンとして使用される。方法は、最適態様でアルゴリズムに基づいてＤＳＰを自動的に合成することを可能にする。システム設計者が、別のものではなくこの特定の表現を選ぶことに関連付けされるハードウエア面積、遅延、および電力のコストを意識する必要はない。システムは、ハードウエア面積、遅延、および電力が、アルゴリズム評価段階において可能な限り正確にモデリングされることを可能にする。
【００１４】
システムの好ましい実施態様のこのほかの利点には、次に示す内容のうちの１つまたは複数を含めることができる。このシステムは、チップ設計の問題を軽減し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエア・ツールおよびファームウエア・アプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエア・チップ・ソリューションが設計される方法におけるパラダイムを完全にシフトするものである。ここで述べている自動システムは、システムへのプライマリ入力が、ロー・レベルのプリミティブではなく、コンピュータ可読コード、モデル、またはアルゴリズム仕様であることから、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエア・チップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。
【００１５】
このシステムを使用するこのほかの恩典として、さらに次に示す内容を含めることができる。
（１）スピード：チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、このシステムを使用している会社が、自社の製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。
（２）コスト：一般にチップの実装に必要とされる多数の技術者が不要となる。このことは、このシステムを使用している会社に夥しいコストの節約をもたらす。
（３）最適性：このシステム・プロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。
【００１６】
このシステムは、デジタル・チップ構成要素に向けた、それを有するシステムの設計で使用される方法におけるパラダイムを完全にシフトするものである。このシステムは、Ｃ／ＭＡＴＬＡＢ（マトラボ）で記述されたアルゴリズムからデジタル・ハードウエアを生成する完全に自動化されたソフトウエア・プロダクトである。このシステムは、ＣまたはＭＡＴＬＡＢ（マトラボ）等の高水準言語を採用してハードウエア・チップを実現するプロセスへの独特のアプローチを使用する。要約して言えば、これは、チップ設計を完全に自動化されたソフトウエア・プロセスにする。
【図面の簡単な説明】
【００１７】
【図１】図１は、特定のプロセッサのためのソフトウエア開発ツールの一例のセットを示した説明図である。
【図２】図２は、ソフトウエア開発ツールを自動的に生成する一例のシステムを示した説明図である。
【図３】図３は、図２のツール・ジェネレータを使用して自動的に生成されたコンピュータ・アーキテクチャに対してカスタマイズされたツールを生成するための一例のシステムを示した説明図である。
【図４】図４は、アーキテクチャ・オプティマイザによって定義されたアーキテクチャを伴うカスタムＩＣを自動的に生成する一例のシステムを示した説明図である。
【発明を実施するための形態】
【００１８】
図２は、自動的に生成されたコンピュータ・アーキテクチャに対してカスタマイズされたツールを生成するための一例のシステムを示している。ツール・ジェネレータは、ターゲット・プロセッサ記述ファイルのセット１２を受け取る。ツール・ジェネレータは、ソフトウエア・モジュールであり、ターゲット・プロセッサの記述を取り入れて多様なソフトウエア開発ツールを作る。
【００１９】
図２の実施態様においては、ツール・ジェネレータが、ターゲット・コンパイラ・ジェネレータ１４、ターゲット・アッセンブラ・ジェネレータ１８、ターゲット・リンカ・ジェネレータ２２、ターゲット・シミュレータ・ジェネレータ２４、ターゲット・プロファイラ・ジェネレータ２８、ターゲット・デバッガ・ジェネレータ２１４からなる。すべてのソフトウエア開発ツールが、その後多様なツール・ジェネレータによって、人間の介入をまったく伴うことなくターゲット・プロセッサの記述のみに基づいて生成される。
【００２０】
コンパイラ・ジェネレータ１４は、考察中のプロセッサの高レベルの記述を読み込む。コンパイラ・ジェネレータ１４は、プロセッサのインストラクション・セット・アーキテクチャ（ＩＳＡ）内の多様なインストラクションのセマンティクスを読み込み、ターゲット・プロセッサのパイプラインのモデルおよびインストラクションのための注釈付きのセマンティック・ツリーを構築し、ターゲット・プロセッサ・コードの生成、呼び出しスタック・レイアウト、レジスタ・アロケーション、インストラクション・スケジューリング、分岐予測、インストラクションおよびデータのプリフェッチ、およびそのほかの、ターゲット・プロセッサ上において可能な多様な最適化のために必要とされるコードを生成する。結果がターゲット・コンパイラ１６になる。
【００２１】
アッセンブラ・ジェネレータ１８は、多様なインストラクションのシンタックス、それらのバイナリ・エンコーディング、および多様なインストラクションに適用するために必要な可能性のある再配置を読み込む。この情報に基づいて、その後アッセンブラ・ジェネレータ１８がターゲット・アッセンブラ２０を生成する。アッセンブラ・ジェネレータは、ターゲット・プロセッサのためのインストラクションのリストを、それらのシンタックスならびに有効オペランド、およびそれらの範囲とともに取り入れ、すべての未解決のシンボルについて、アッセンブラを構築してインストラクションのシンタックスをチェックし、プロセッサ仕様に従ってインストラクションをエンコードし、あらゆる関連再配置レコードを発行する。
【００２２】
リンカ・ジェネレータ２２は、ターゲット・リンカ２４をオブジェクト・ファイル・リンカとともに生成し、それがオブジェクト・ファイルならびにライブラリを取り入れ、オブジェクト・コードに適用されるすべての再配置を用いて実行可能ファイルを生成する。
【００２３】
シミュレータ・ジェネレータ２４は、パイプライン構造、ＩＳＡ、インストラクションのセマンティクス、およびハードウエア・ブロックのそれぞれの特性が定義されているマシン記述を読み込む。アーキテクチャのすべての要素の定義に基づいて、シミュレータ・ジェネレータは、キャッシュ・モデル、メモリ・モデル、および割り込みモデルを含むプロセッサのサイクル精度のモデルを生成する。ターゲット・シミュレータ２６は、シミュレータ・ジェネレータによって自動的に生成され、生成されたシミュレータは、実際のハードウエア・モデルを正確に反映する。
【００２４】
プロファイラ・ジェネレータ２８は、インストラクション・セット・アーキテクチャ（ＩＳＡ）およびそれらのセマンティクスに基づいてターゲット・アーキテクチャのためのプロファイラを自動的に生成する。１つの実施態様においては、ターゲット・プロファイラ２９が、ターゲット・シミュレータ２６または実際のプロセッサから生じたトレースを分析し、手元のプログラムの静的実行プロファイルをはじめ、動的実行プロファイルを生成する。別の実施態様においては、ターゲット・プロファイラ２９が、モジュール内のプロシージャの入口ポイントおよび出口ポイントにプロファイリング・コードを追加する。これは、プロシージャが呼び出される回数、プロシージャ内において消費された合計の時間、およびプロシージャ呼び出し当たりの平均の消費時間の詳細な測定を可能にする。測定自体が結果に影響を及ぼすことから、経過時間は互いの関係から考察されなければならない。
【００２５】
１つの実装においては、ターゲット・デバッガ２１６の生成にデバッガ・ジェネレータ２１４を使用することができる。デバッガは、ターゲット・マシン上においてユーザ・アプリケーションのデバッグを行なう有用なツールである。デバッガ・ジェネレータは、ターゲット・プロセッサのインストラクション・セットの記述を呼び出しスタック・レイアウトとともに取り入れ、ターゲット・プロセッサに固有のデバッガを生成する。このようにして生成されたデバッガは、上記のサイクル・ベースのシミュレータまたは実際のハードウエア・チップのいずれかへのフックアップが可能である。呼び出しスタックのインタープリテーション、呼び出しスタックの巻き戻し、インストラクションの逆アッセンブリ、ターゲット・マシン上のレジスタの数および特性はすべて、デバッガ・ジェネレータの一部として自動的に生成される。
【００２６】
ターゲット・コンパイラ１６、アッセンブラ２０、リンカ２４、シミュレータ２６、およびプロファイラ２９は、プログラム、コード、またはコンピュータ・モデルによって機能が明細に指定されるカスタムＩＣまたはＡＳＩＣデバイスのための最良のアーキテクチャの自動的な決定に使用することが可能である。入力として提供される所定のコンピュータ可読コードまたはプログラムのためのアーキテクチャ定義の獲得においては種々の段階が関与する。１つの実施態様においては、プログラムがＣ言語で記述されるが、Ｃ＋＋、ＭＡＴＬＡＢ（マトラボ）、またはジャバ（Ｊａｖａ（登録商標））といったそのほかの言語も同様に使用可能である。ターゲット・コンパイラ１６、アッセンブラ２０、およびリンカ２４を使用してプログラムのコンパイル、アッセンブル、およびリンクが行なわれる。実行可能コードがシミュレータ２６または実際のコンピュータ上において走らされる。実行からのトレースがターゲット・プロファイラ２９に提供される。プロファイラによって生成された情報は、特に、静的実行および動的実行についての呼び出しグラフ、コード実行プロファイル、レジスタ割り付け情報、および現在のアーキテクチャを含み、この情報は、アーキテクチャ・オプティマイザ（ＡＯ）に提供される。アーキテクチャ・オプティマイザの出力はアーキテクチャ仕様であり、特に、パイプライン情報、コンパイラ呼び出し規約、レジスタ・ファイル、キャッシュ編成、メモリ編成、およびインストラクション・セット・アーキテクチャ（ＩＳＡ）ならびにインストラクション・セット・エンコーディング情報を含んでいる。
【００２７】
その後ＡＯは、アプリケーションの要件に整合するチップ設計を生成する。サイクル精度のシステム・レベルのシミュレータから獲得したアルゴリズムの実行プロファイル、およびアルゴリズムの静的プロファイル、およびチップに組み込まれる多様なハードウエア・ブロックの特性決定に基づいて、ＡＯは、パフォーマンス、電力、およびコストに関するベンダの要件を満たす最適ハードウエア構成を決定する。アルゴリズムの分析に基づき、ＡＯは、パフォーマンス要件を満たすだけでなく、手元のアルゴリズムに対してハードウエアを最適化することになるチップ・アーキテクチャを提案する。ＡＯは、一連の反復ステップの中で所定のアルゴリズムのための最適ハードウエアに収斂する最適アーキテクチャに行き着く。
【００２８】
ＡＯは、ＡＳＩＰの多様な側面に対してそれが行なう一連の階層的決定に基づき、ベンダの評価基準に整合する所定のアルゴリズムのための最適アーキテクチャを決定し、したがって局所的最小アーキテクチャの達成において、いかなるポイントにおいてもそれがスタックすることはない。むしろＡＯは、包括的最小アーキテクチャを設計することが可能である。
【００２９】
ＡＯは、所定のアルゴリズムの実行プロファイルに基づいて、アルゴリズムのセットを当て嵌める最適コンピュータ・アーキテクチャを自動的に生成することができる。図３は、アーキテクチャ・オプティマイザを用いた最適アーキテクチャの決定のための一例のシステムを示している。図３のシステムは、図２の自動的に生成されたツールを使用する。
【００３０】
図３において、入力としてユーザ・アプリケーション３０が提供される。それに加えて、初期アーキテクチャ記述３２が指定される。アーキテクチャ記述がツール・ジェネレータ３４によって処理され、それが、ターゲット依存度３７を用いてコンパイラ３６のための、ターゲット依存度３９を用いてアッセンブラ３８のための、ターゲット依存度４１を用いてリンカ４０のための、ターゲット依存度４３を用いてシミュレータ４２のための、およびターゲット依存度４５を用いてプロファイラ４４のためのターゲット依存情報を生成する。ターゲット依存情報に基づいて、ユーザ・アプリケーション３０のプロファイルが生成される。プロファイルは、クリティカル・ルーチンおよびそれらのカーネル（もっとも実行されるループ）を識別する。プロファイルはまた、メモリ・トラフィック・パターンも識別する。プロファイルは、アーキテクチャ・オプティマイザ４６に提供される。アーキテクチャ・オプティマイザ４６は、設計データ・モデラ４８からのユーザ入力も使用する。設計モデラ４８は、特定のハードウエアについてのタイミング、面積、電力、およびそのほかの関連する情報を提供し、その種の情報は、アーキテクチャ・オプティマイザ４６によるオンデマンドでのクエリが可能である。オプティマイザ４６の出力は、新しい最適化後のアーキテクチャ５０である。最適化後のアーキテクチャ５０は、その後、あらかじめ決定済みの最適化目標が達成されるまでアーキテクチャの反復的最適化のためにツール・ジェネレータ３４に提供される。
【００３１】
アーキテクチャ内の構成要素のそれぞれ、およびそれらの全体的な相互接続を最適化することによって新しいアーキテクチャが獲得される。所定のセットのアプリケーション／アルゴリズムによって、最適コンピュータ・システム・アーキテクチャは、パフォーマンス、コスト、および電力といった多様なファクタに基づいて自動的に決定することが可能である。最適アーキテクチャは、システム・レベルのアーキテクチャおよびプロセッサ・レベルのアーキテクチャを含むことができる。システム・レベルのアーキテクチャについて言えば、ＡＯ  ４６が、たとえば、必要とされるメモリの量、サポートするメモリ帯域幅、ＤＭＡチャンネルの数、クロック、およびペリフェラルを自動的に決定することが可能である。プロセッサ・レベルのアーキテクチャについて言えば、ＡＯが、システムのためのパフォーマンス評価基準およびアルゴリズム内のパラレリズムに基づいて、演算要素のスカラ度の必要性ならびにその量；特定のアルゴリズムの効率的な実装に必要とされる演算要素のタイプ；アプリケーションの効率的な実装に必要とされる演算要素の数；段数、インストラクション発行レート、スカラ度という観点から見たパイプライン編成、加算器の数、ロード、ストア単位等という観点から見た演算要素の数、およびパイプライン構造内における演算要素の配置；ＡＬＵ（演算要素）の幅；レジスタ・ファイルの数および、レジスタの数、それらの幅、読み出しポートならびに書き込みポートの数という観点から見たそれらの構成；コンディション・コード・レジスタの必要性；インストラクション・キャッシュの必要性ならびにその量、および必要とされるデータ・キャッシュ、およびそれらの階層；インストラクション・キャッシュおよびデータ・キャッシュそれぞれのための別々のキャッシュ・メカニズム、ライン・サイズ、スピル／フィル・アルゴリズムを自動的に決定することが可能である。
【００３２】
ＡＯは、ユーザのアルゴリズムのコード内においてインストラクションおよびデータのプリフェッチ・インストラクションを自動的に導入し、オンデマンドおよび適時のプリフェッチを行なうことができる。ＡＯは、それぞれのキャッシュの書き戻しポリシー；メモリに対する読み出しおよび書き込みポートの数；キャッシュとメモリの間におけるバスの幅；および全体的なコスト構造を低減しつつそれでも高いパフォーマンスを維持する、キャッシュのレベルおよび、共有または別々のインストラクション・キャッシュおよびデータ・キャッシュ、または結合キャッシュ、または複数レベルへのそれの編成という観点から見たそれらの編成を決定することができる。
【００３３】
ＡＯは、メモリ・サイズ、メモリ・マップ・スキーム、アクセス・サイズ、読み出し／書き込みポートの数ならびにそれらの幅、および最大パフォーマンスを得るべくメモリに必要な分割の方法という観点から見てのメモリの階層を自動的に決定することが可能である。ＡＯは、マシンが効率的な形でアルゴリズムを実装するためのＩＳＡを自動的に決定すること、さらにはコード空間の量を最小にしつつそれでも高いパフォーマンスを達成するインストラクション・セットのための最適エンコーディングを自動的に決定することができる。またＡＯは、利用可能なレジスタの最適利用を確保する呼び出し規約を自動的に決定することもできる。
【００３４】
以上の動作は、反復的に、かつ階層的な態様で行なわれて、アプリケーション３０に最適化された、所定のタイミング、コスト、および電力要件を満たすチップに行き着く最適な包括的システム・アーキテクチャを決定することが可能である。
【００３５】
図４は、カスタムＩＣを自動的に生成するシステムの一例を示している。図４のシステムは、選択された目標とするアプリケーションに対するカスタムハードウェアソリューションアーキテクチャを自動的に生成することをサポートする。目標とするアプリケーションの仕様は、一般に、Ｃ、ＭＡＴＬＡＢ（マトラボ）、ＳｙｓｔｅｍＣ（システムＣ）、フォートラン、エイダ等の高水準言語またはそのほかのいずれかの言語によるコンピュータ可読コードとして表現されたアルゴリズムを通じてなされる。仕様は、目標とするアプリケーションの記述を含み、またそれには、望ましいコスト、面積、電力、速度、パフォーマンス、およびそのほかのハードウエア・ソリューションの属性といった１つまたは複数の制約も含まれる。
【００３６】
図４においては、ＩＣカスタマがプロダクト仕様１０２を生成する。通常は、所望のプロダクトのすべての主要機能を取り込んだ初期プロダクト仕様が存在する。そのプロダクトから、アルゴリズムの専門家がそのプロダクトに必要とされるコンピュータ可読コードまたはアルゴリズムを識別する。それらのアルゴリズムのうちのいくつかは、サードパーティから、または標準開発委員会からのＩＰとして利用可能となることがある。それらのうちのいくつかは、製品開発の一部として開発されなければならない。この態様においては、さらにプロダクト仕様１０２が、とりわけＣプログラム等のプログラムまたはＭＡＴＬＡＢ（マトラボ）モデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム１０４で詳述される。プロダクト仕様１０２は、また、とりわけコスト、面積、電力、プロセス・タイプ、ライブラリ、およびメモリ・タイプ等の要件１０６も含んでいる。
【００３７】
コンピュータ可読コードまたはアルゴリズム１０４および要件１０６は、自動化されたＩＣジェネレータ１１０に提供される。コードまたはアルゴリズム１０４およびチップ設計に課せられた制約だけに基づいて、ＩＣジェネレータ１１０は、人間の掛かり合いを殆ど、またはまったく伴うことなく、ＧＤＳファイル１１２、ＩＣを実行させるファームウエア１１４、ソフトウエア開発キット（ＳＤＫ）１１６、および／またはテスト・スイート１１８を含む出力を自動的に生成する。ＧＤＳファイル１１２およびファームウエア１１４は、カスタム・チップ１２１の製造に使用される。
【００３８】
このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。このシステムは、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わり、アルゴリズムが、そのアプリケーションのために特に最適化されたプロセッサ上において実装されることが常に可能となる。システムは、この最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエア・ツールおよびファームウエア・アプリケーションとともに生成する。この全体的なプロセスは、現在数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。要約して言えば、このシステムは、プロダクト開発のデジタル・チップ設計部分をブラック・ボックス化する。
【００３９】
１つの実施態様においては、このシステム・プロダクトが、次に示すものを入力として取ることが可能である。
Ｃ／ＭＡＴＬＡＢ（マトラボ）で定義されたコンピュータ可読コードまたはアルゴリズム、
必要とされる周辺機器、
面積目標、
電力目標、
マージン目標（将来的なファームウエア更新のためにどの程度のオーバーヘッドを組み込むべきか、またどの程度複雑性が増加するか）、
プロセスの選択肢、
標準セル・ライブラリの選択肢、
テスト可能性スキャン
【００４０】
システムの出力は、関連付けされるファームウエアすべてを伴ったデジタル・ハード・マクロとすることができる。このデジタル・ハード・マクロのために最適化されたソフトウエア開発キット（ＳＤＫ）もまた自動的に生成されて、ファームウエアに対する将来的なアップグレードがプロセッサの交換を強いることなく実装されるようにすることが可能である。
【００４１】
このシステムは、選択された目標とするアプリケーションに対して完全かつ最適なハードウエア・ソリューションを自動的に生成する。共通の目標とするアプリケーションは埋め込みアプリケーション空間内にあるが、それらは、必ずしもそれに限定されない。
【００４２】
以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。
【図１】
2014510960.tif 000003
【図２】
2014510960.tif 000004
【図３】
2014510960.tif 000005
【図４】
2014510960.tif 000006
【国際調査報告】
2014510960.tif 000007