一般に、自動プロセッサ生成処理は、構成可能なプロセッサ定義およびそれのユーザ指定変更、ならびにプロセッサが構成されるべきユーザ指定アプリケーションで始まる。この情報は、ユーザ変更を考慮する構成済プロセッサを生成し、ソフトウエア開発ツール、例えば、このツールのためのコンパイラ、シミュレータ、アセンブラ、逆アセンブラ等を生成するために使用される。さらに、このアプリケーションは、新しいソフトウエア開発ツールを使用して再コンパイルされる。再コンパイル済アプリケーションは、アプリケーションを実行する構成済プロセッサの性能を記述するソフトウエアプロフィールを生成するためにシミュレータを使用してシミュレートされ、構成済プロセッサは、プロセッサ回路インプリメンテーションを特徴とするハードウエアプロフィールを生成するためにシリコンチップエリア使用、電力消費、速度等に対して評価される。ソフトウエアおよびハードウエアプロフィールはフィードバックされ、プロセッサがこの特定のアプリケーションのために最適化できるように他の反復構成を可能にするようにユーザに供給される。
本発明の好ましい実施例による自動プロセッサ生成システム10は、図1に示されるように4つの主要構成要素を有する。すなわち、4つの主要構成要素は、プロセッサを設計することを望むユーザがユーザの構成可能性および伸長性オプションおよび他の設計抑制を入力するユーザ構成インタフェース20と、ユーザによって選択された基準のために設計されたプロセッサのためにカストマイズすることができる一連のソフトウエア開発ツール30と、プロセッサ40のハードウエアインプリメンテーションのパラメータ化伸長記述と、および入力データをユーザインタフェースから受信し、要求されたプロセッサのカストマイズされた統合可能なハードウエア記述を生成し、ソフトウエア開発ツールを変更し、選択された設計を受け入れる形成システム50である。好ましくは、形成システム50は、さらに診断ツールを生成し、ハードウエアおよびソフトウエア設計および推定器を検証し、ハードウエアおよびソフトウエア特性を推定する。
ここで使用され、かつ添付された特許請求の範囲に使用されるような「ハードウエアインプリメンテーション記述」は、プロセッサ設計の物理的インプリメンテーションの態様を記述し、1つあるいはそれ以上の他の記述だけあるいはこの記述とともにこの設計に従ってチップの製造を容易にする1つあるいはそれ以上の記述を意味する。したがって、ハードウエアインプリメンテーション記述の構成要素は、記述をマスクするネットリストおよびマイクロコーティングによるハードウエア記述言語のような比較的高レベルから変化する抽象概念のレベルにあってもよい。しかしながら、本実施例では、ハードウエアインプリメンテーション記述の主構成要素は、HDL、ネットリストおよびスクリプトで記述される。
さらに、ここで使用され、添付された特許請求の範囲で使用されるようなHDLは、マイクロアーキテクチャ等を記述するために使用される一般クラスのハードウエア記述言語を示すことを意図し、このHDLはこのような言語の任意の特定の例を示すことを示すことを意図する。
この実施例では、プロセッサ構成のための基本は図2に示されたアーキテクチャ60である。多数のアーキテクチャの要素は、ユーザによって直接変更できない基本機能である。これらは、プロセッサ制御部62と、整列・復号化部64(ただし、この部分の一部はユーザ指定構成に基づいている)と、ALU・アドレス生成部66と、ブランチロジック・命令フェッチ68と、プロセッサインタフェース70とを含む。他の装置は、基本プロセッサの一部であるが、ユーザ構成可能可能である。これらは、割り込み制御部72と、データおよび命令アドレス監視部74および76と、ウィンドウレジスタファイル78と、データおよび命令キャッシュおよびタグ部80と、書き込みバッファ82と、タイマ84とを含む。図2に示された残りの部分は任意にはユーザによって含まれる。
プロセッサ構成システム10の中央構成要素はユーザ構成インタフェース20である。これは、好ましくはコンパイラの再構成およびアセンブラ、逆アセンブラおよび命令セットシミュレータ(ISS)の再生と、全プロセッサ統合、配置およびルーチングを始める入力の作成を含むプロセッサ機能性を選択できるグラフィックユーザインタフェース(GUI)をユーザに提供するモジュールである。それによって、ユーザも、プロセッサエリア、電力消費、サイクル時間、アプリケーション性能およびプロセッサ構成の他の反復およびエンハンスメントのためのコードサイズの迅速な推定を利用できる。好ましくは、GUIも、構成データベースにアクセスし、デフォルト値を得て、ユーザ入力のエラーチェックを行う。
プロセッサ60を設計するために本実施例による自動プロセッサ生成システム10を使用するために、ユーザは、設計パラメータをユーザ構成インタフェース20に入力する。自動プロセッサ生成システム10は、ユーザの制御の下でコンピュータシステムで実行するスタンドアロンシステムであってもよい。すなわち、しかしながら、このシステム10は、好ましくは自動プロセッサ生成システム10の製造の制御の下で主にシステムで実行する。次に、ユーザアクセスは、通信ネットワークを介して提供されてもよい。例えば、GUIは、HTMLおよびジャバで記述されているデータ入力スクリーンを有するウェバブラウザを使用して提供されてもよい。これは、任意の所有権を主張できるバックエンドソフトウエアの機密性を保有し、保守を簡単にし、バックエンドソフトウエア等を更新するようないくつかの長所を有する。この場合、GUIにアクセスするために、ユーザは、自分のIDを証明するためにシステム10に最初のログオンをしてもよい。
一旦ユーザがアクセス権を有すると、システムは図3に示されるように構成マネージャスクリーン86を表示する。構成マネージャ86は、ユーザによってアクセスできる構成の全てをリストするディレクトリである。図3の構成マネージャ86は、ユーザが2つの構成、「just intr」および「high prio」、を有し、最初のものは既に形成された、すなわち製造のために終了され、第2番目のものは依然として形成されるべきであることを示している。このスクリーン86から、ユーザは選択構成を形成し、削除し、編集し、どの構成および拡張がこの構成のために選択されるかあるいは新しい構成を形成するかを指定するリポートを生成してもよい。「just intr」のような形成されたこれらの構成の場合、それのためにカストマイズされた一連のソフトウエア開発ツール30はダウンロードできる。
新しい構成を作成するかあるいは既存の構成を編集することは、図4に示された構成エディタ88を持ち出す。構成エディタ88は、構成および拡張できるプロセッサ60の様々な一般的な態様を示す左側に「オプション」セクションメニューを有する。オプションセクションが選択される場合、このセクションのための構成セクションを有するスクリーンが右側に表示され、これらのオプションは、当該技術分野で公知であるようにプルダウンメニュー、メモメニュー、メモボックス、チェックボックス、ラジオボタン等でセットできる。ユーザは、オプションを選択し、データをランダムに入力できるけれども、好ましくは、セクション間に論理従属関係があるので、データは各々に逐次入力される。例えば、「割り込み」セクションにオプションを適切に表示するために割り込み数は「ISA Options」セクションで選択されねばならない。
本実施例では、下記の構成オプションは各セクションに対して使用可能である。
目的
推定のための技術
ターゲットASIC技術:.18,.25..35ミクロン
ターゲット作動状態:典型的な、最悪の場合
インプリメンテーション目標
ターゲット速度:任意 ゲート総数:任意
ターゲット電力:任意
目的優先化:速度、領域電力、速度、電力、領域
ISAオプション
数値オプション
40ビットアキュムレータを有するMAC16:イエス、ノー
16ビット乗算器:イエス、ノー
例外オプション
割り込み数:0〜32
高優先順位割り込みレベル:0〜14
イネーブルデバッギング:イエス、ノー
タイマ数:0〜3
その他
バイト配列:リトル・エンディアン、ビッグ・エンディアン
ウィンドウズ(登録商標)を呼び出すために使用可能なレジスタ数:32、64
プロセッサキャッシュ&メモリ
プロセッサインタフェース読み出し幅(ビット):32、64、128
書き込みバッファエントリ(アドレス/値対):4、8、16、32
プロセッサキャッシュ
命令/データキャッシュサイズ(kB):1、2、4、8、16
命令/データキャッシュラインサイズ(kB):16、32、64
周辺構成要素
タイマ
タイマ割り込み数
タイマ割り込みレベル
デバッギングサポート
命令アドレスブレークポイントレジスタ数:0〜2
データアドレスブレークポイントレジスタ数:0〜2
デバッグ割り込みレベル
トレースポート:イエス、ノー
オンチップデバッグモジュール:イエス、ノー
全走査:イエス、ノー
割り込み
ソース:外部、ソフトウエア
優先順位レベル
システムメモリアドレス
ベクトルおよびアドレス計算法:XTOS、マニュアル
構成パラメータ
RAMサイズ、開始アドレス:任意
ROMサイズ、開始アドレス:任意
XTOS:任意
構成特定アドレス
ユーザ例外ベクトル:任意
カーネル例外ベクトル:任意
レジスタウィンドウオーバーフロー/アンダーフローベクトルベース: 任意
リセットベクトル:任意
XTOS開始アドレス:任意
アプリケーション開始アドレス:任意
TIE命令
(ISA拡張を規定する)
ターゲットCAD環境
シミュレーション Verilog(登録商標):イエス、ノー
統合
Design Compiler(登録商標):イエス、ノー
場所&ルート
Apollo(登録商標):イエス、ノー
さらに、システム10は、32ビット整数乗算/除算装置あるいは浮動小数点演算装置、メモリ管理装置、オンチップRAMおよびROMオプション、キャッシュ連想性、機能拡張DSPおよびコプロセッサ命令セット、ライトバックキャッシュ、マルチプロセッサ同期化、コンパイラ指向推測、および付加CADパッケージのためのサポートのような他の付加装置を追加するためのオプションを提供する。たとえどんな構成オプションが所与の構成プロセッサのために使用可能であっても、この構成オプションは好ましくは、一旦ユーザが適切なオプションを選択したとしてもシステム10がシンタックスチェック等のために使用する定義ファイル(例えば、付録Aに示された定義ファイル)に列挙される。
前述から、自動プロセッサ構成システム10は、図5に示されるようにユーザに2つの一般的な種類の構成性300、すなわちユーザがスクラッチからの任意の機能および構造を規定できる伸長性302およびユーザが所定の制約されたオプションのセットから選択できる変更可能性304を提供する。変更可能性内で、システムは、所定の機能、例えばMAC16あるいはDSPが、プロセッサ60に付加されるべきであるかどうかおよび他のプロセッサの機能、例えば割り込み数およびキャッシュサイズのパラメータ仕様308の2進選択306を可能にする。
上記の構成オプションの多くは当業者にはよく知られている。しかしながら、他のものは特別の注意に値する。例えば、RAMおよびROMオプションによって、設計者は、プロセッサ10そのものにスクラッチパッドあるいはファームウエアを含めることができる。プロセッサ10は、命令を取り出し、これらのメモリからのデータを読み出し、書き込む。メモリのサイズおよび配置は構成可能である。この実施例では、これらのメモリの各々は、セットアソシアティブキャッシュの付加セットとしてアクセスされる。メモリのヒットは単一のタグメモリと比較することによって検出できる。
システム10は、割り込みのための別個の構成オプション(レベル1割り込みを実行する)および高優先順位割り込みオプション(レベル2〜15の割り込みおよびノンマスカブル割り込みを実行する)を行う。何故ならば、各高優先順位割り込みレベルは3つの特別レジスタを必要とするので、これらのレジスタはより高価であるためである。
40ビットアキュームレータオプションを有するMAC16(図2の90に示されている)は、40ビットアキュームレータを有する16ビット乗算器/加算機能、8つの16ビットオペランドレジスタおよび乗算、累算、オペランドロードおよびアドレス更新の命令を結合する複合命令のセットを付加する。オペランドレジスタには、乗算/累算演算と並列にメモリから16ビット値の対がロードできる。この装置は、サイクル毎の2つのロードおよび乗算/累算を有するアルゴリズムを持続できる。
オンチップデバッグモジュール(図2の92に示されている)は、JTAGポート94を介してプロセッサ60の内部ソフトウエアビジブルステートをアクセスするために使用される。モジュール92は、プロセッサ60をデバッグモードにする例外生成のためのサポート、全プロセッサビジブルレジスタあるいはメモリロケーションへのアクセス、プロセッサ60が実行するために構成される任意の命令の実行、コードの所望の位置にジャンプするPCの変更、およびJTAGポート94を介するプロセッサ60の外部から作動される通常の動作モードに戻ることができるユーティリティ、を行う。
一旦プロセッサ10がデバッグモードに入ると、プロセッサ10は、有効命令がJTAGポート94を介してスキャンインされたことの外部領域からの指示を待つ。次に、このプロセッサは、この命令を実行し、次の有効命令を待つ。一旦プロセッサ10のハードウエアインプリメンテーションが製造されたとすると、このモジュール92はシステムをデバッグするために使用できる。プロセッサ10の実行は、遠隔ホストで実行するデバッガを介して制御できる。このデバッガは、JTAGポート94を介してプロセッサとインタフェースし、オンチップデバッグモジュール92の機能を使用し、命令の実行を制御するのと同様にプロセッサ10の状態を決定し、制御する。
最高32ビットのカウンタ/タイマ84が構成されてもよい。これは、割り込み機能および同様な機能と併用するために、(各構成タイマに対して)比較レジスタおよび比較レジスタ内容と現クロックレジスタカウントとを比較する比較器と同様に各クロックサイクルを増分する32ビットのレジスタの使用を必要とする。このカウンタ/タイマはエッジトリガされるものとして構成でき、通常あるいは高優先順位の内部割り込みを発生できる。
推測オプションは、ロードが必ずしも実行されない場合、ロードがフローを制御するために推測して移動できることによってより大きいコンパイラスケジューリング融通性を提供する。ロードは例外を生じてもよいために、このロード移動は、例外を最初に生じなかった有効プログラムに導入できる。ロードが実行されない場合、推測ロードは、これらの例外が生じることを防止するが、このデータが必要とされる場合、例外を与える。ロードエラーに対する例外を生じる代わりに、推測ロードは、ディスティネーションレジスタの有効ビットをリセットする(このオプションに関連した新しいプロセッサ状態)。
複数のプロセッサがシステムで使用される場合、コアプロセッサ60は好ましくは若干の基本パイプライン同期機能を有するけれども、プロセッサ間のある種の通信および同期が必要である。いくつかの場合、入出力待ち行列のような自己同期通信技術が使用される。他の場合、共有メモリモデルは通信のために使用され、共有メモリは必要とされるセマンティックスを提供するために、同期のための命令セットサポートを行うことが必要である。例えば、セマンティックスを得て、解除する場合の付加ロード命令およびストア命令を付加できる。これらは、同期基準間の正確な配列が保持されなければならないようにメモリロケーションが同期およびデータのために使用されてもよいマイクロプロセッサシステムでメモリ参照の配列を制御するために役に立つ。
いくつかの場合、共有メモリモデルは通信のために使用され、共有メモリは必要とされるセマンティックスを提供しないために同期に対する命令セットサポートを行う必要がある。これはマイクロプロセッサ同期オプションによって行われる。
おそらく構成オプションの中で最も顕著なものは、設計者定義の命令実行装置96が形成されるTIE命令定義である。カリフォルニア州のサンタクララ市のテンシリカ社によって開発されたTIE(登録商標)(Tensilica Instruction Set Extensions)言語によって、ユーザは、拡張および新しい命令の形でアプリケーションのためのカスタム機能を記述し、ベースISAを拡張できる。さらに、TIEの汎用性のために、TIEは、ユーザによって変更できないISAの部分を記述するために使用されてもよい。このように、全ISAは、ソフトウエア開発ツール30およびハードウエアインプリメンテーション記述40を均一に生成するために使用できる。TIE技術は、多数の形成ブロックを使用し、下記のように新しい命令の属性を記述する。
‥命令フィールド ‥命令クラス
‥命令操作符号 ‥命令セマンティックス
‥命令オペランド ‥一定テーブル
命令フィールドステートメントfieldは、TIEコードの可読性を改善するために使用される。フィールドは、一緒にグループ化され、名前によって参照される他のフィールドの連結のサブセットである。命令のビットの全セットは、最高レベルスパーセットフィールドinstであり、このフィールドはより小さいフィールドに分割できる。例えば、
は、2つの4ビットフィールドを規定し、xおよびyは、最高レベルフィールドinstのサブフィールド(ビット8〜11および12〜15のそれぞれ)として、8ビットフィールドxyはxフィールドおよびyフィールドの連結として規定する。
ステートメント操作符号は特定のフィールドを符号化する操作符号を規定する。このように規定された操作符号によって使用されるオペランド、例えば、レジスタあるいは即値定数を指定することを目的とする命令フィールドは、最初にフィールドステートメントで規定され、次にオペランドステートメントで規定されねばならない。
は、予め規定された操作符号CUSTO(4,b|0000は4ビットの長さの2進定数0000を示す)に基づいて2つの新しい操作符号、acsおよびadselを規定する。好ましいコアISAのTIE仕様はそのベース定義の一部として下記のステートメントを有する。
したがって、acsおよびadselの定義によって、TIEコンパイラは、下記によってそれぞれ示される命令復号化ロジックを生成する。
命令オペランドステートメントオペランドは、レジスタおよび即値定数を識別する。しかしながら、フィールドをオペランドとして規定する前に、このオペランドは前述のようなフィールドとして予め規定されねばならかった。オペランドが即値定数である場合、定数の値はオペランドから生成できるかあるいは定数の値は後述されるように規定された予め規定された定数テーブルからとることができる。例えば、即値オペランドを符号化するために、下記のTIEコードは、
符号付数字およびオフセットフィールドに記憶された数の4倍であるオペランドoffset4を保有する18ビットフィールド名オフセットを規定する。オペランドステートメントの最後の部分は、当業者に明らかであるように、組合せ回路を記述するVerilog(登録商標)HDLのサブセットの計算を実行するために使用される回路を実際に記述する。
ここで、wireステートメントは、tの名前の32ビット幅の論理ワイヤのセットを規定する。wireステートメント後の最初のassignステートメントは、論理ワイヤを駆動する論理信号は右にシフトされたoffset4定数であることを指定し、第2番目のassignステートメントは、tの下部18ビットがoffsetフィールドに入れられることを指定する。まさしく最初のassignステートメントは、offset4オペランドの値をoffsetの連結および2ビットの左シフトが続くその符号ビット(ビット17)の14の複製として直接指定する。
は、テーブルステートメントの使用を行い、定数のアレイプライム(テーブル名に続く数はテーブルの要素の数である)を規定し、オペランドをインデックスとして使用し、テーブルプライムとし、オペランドprime sのための値を符号化する(インデクシングを規定する際のVerilog(登録商標)ステートメントの使用を注目せよ)。
命令クラスステートメントiclassは、操作符号を共通フォーマットのオペランドに関連付ける。iclassステートメントで規定された全命令は、同じフォーマットおよびオペランド使用を有する。命令クラスを規定する前に、その構成要素は、最初にフィールドとして、次に操作符号およびオペランドとして規定されねばならない。例えば、オペランドacsおよびadselを規定する前述の例で使用されるコードで形成すると、下記の付加ステートメント
は、3つのレジスタオペランドart、arsおよびarrを規定するためにオペランドステートメントを使用する(定義のVerilog(登録商標)ステートメントの使用を再び注目せよ)。したがって、iclassステートメント
は、オペランドadselおよびacsが2つのレジスタオペランドartおよびarsを入力として扱う普通のクラスの命令viterbiに属することを指定し、出力をレジスタオペランドarrに書き込む。
命令セマンティックステートメントsemanticは、オペランドを符号化するために使用される同じサブセットのVerilog(登録商標)を使用して1つあるいはそれ以上の命令の働きを記述する。単一セマンティックステートメントで複数命令を規定することによって、いくつかの共通式が共有でき、ハードウエアインプリメンテーションはより有効にされることができる。セマンティックステートメントで許可された変数は、ステートメントの操作符号リストに規定された操作符号のためのオペランドおよび操作符号リストで指定された各操作符号のための単一ビット変数である。この変数は操作符号と同じ名前を有し、操作符号が検出される場合、1に対する数値を求める。この変数は、対応する命令の存在を示すために計算部(Verilog(登録商標)サブセットセクション)で使用される。
例えば、他の32ビットワードのそれぞれの8ビットオペランドとともに32ビットワードの4つの8ビットオペランドの加算を実行する新しい命令ADD8
4および32ビットワードの2つの16ビットオペランドと他の32ビットワードのそれぞれの16ビットオペランドとの間で最少値選択を実行する新しい命令MIN16
2を規定するTIEコードは、下記を読み取ってもよい。
ここで、op2、CUSTO、arr、artおよびarsは、前述のような予め規定されたオペランドおよび前述のようなopcodeおよびiclassステートメント関数である。
セマンティックステートメントは、新しい命令によって実行される計算を指定する。当業者に容易に明らかであるように、セマンティックステートメント内の第2行は、新しいADD8 4命令によって実行された計算を指定し、その中の第3行および第4行は、新しいMIN16 2命令によって実行された計算を指定し、このセクション内の最後の行はarrレジスタに書き込まれた結果を指定する。
ユーザ入力インタフェース20の議論に戻ると、一旦ユーザが望む構成および拡張オプションの全てを入力したとすると、形成システム50が引き継ぐ。図5に示されるように、形成システム50は、ユーザによってセットされたパラメータによって構成された構成仕様およびユーザによって設計された伸長機能を受け取り、これらをコアプロセッサアーキテクチャを規定する付加パラメータ、例えば、ユーザによって変更可能な機能と結合し、全プロセッサを記述する単一構成仕様100を形成する。例えば、ユーザによって選択された構成設定に加えて、形成システム50は、プロセッサの物理的アドレス空間のための物理アドレスビット数を指定するパラメータ、リセット後のプロセッサ60によって実行される第1の命令の位置等を加算してもよい。
テンシリカ社によるXtensa(登録商標)命令セットアーキテクチャ(ISA)基準マニュアル改訂1.0は、構成可能なプロセッサ内でコア命令として実行できる命令および構成オプションの選択によって使用可能である命令の例を示す目的のために参照してここに組み込まれている。
構成仕様100は、ベースISAを指定するTIE言語ステートメントを含むISAパッケージ、コプロセッサパッケージ96(図2を参照)あるいはDSPパッケージのようなユーザによって選択された任意の付加パッケージ、およびユーザによって供給された任意のTIE拡張も含む。さらに、構成仕様100は、所定の構造機能がプロセッサ60に含まれるべきであるかどうかを示すフラグをセットする多数のステートメントを有してもよい。例えば、
は、プロセッサが、オンチップデバッギングモジュール92、割り込み機能72および例外処理を含むが、高優先順位割り込み機能を含まないことを示す。
構成仕様100を使用すると、下記は、後記に示されるように自動的に生成できる。
・ プロセッサ60の命令復号化ロジック
・ プロセッサ60のための不正命令検出ロジック
・ アセンブラ110の特定ISA用部分
・ コンパイラ108のための特定ISA用サポートルーチン
・ 逆アセンブラ100(デバッガによって使用される)の特定ISA用部分
・ シミュレータ112の特定ISA用部分
重要な構成機能は命令のパッケージの包含を指定することにあるために、これらのことを自動的に生成することは有用である。いくつかのことに関して、命令が構成された場合、これをツールの各々において条件付コードで実行し、命令を処理することができるが、これは扱いにくい。より重要なことには、命令によってシステム設計者は設計者のシステムのための命令を容易に加えることができる。
構成仕様100を設計者からの入力として扱うことに加えて、目標を受け入れ、形成システム50を有し、構成を自動的に決定することもできる。設計者はプロセッサ60のための目標を指定できる。例えば、クロック速度、面積、コスト、典型的な電力消費、および最大電力消費は目標であってもよい。目標のいくつかは競合するので(例えば、しばしば性能は、面積あるいは電力消費あるいは両方を増加させることによってのみ増加させることができる)、形成システム50は、目標に対する優先順位配列も行う。次に、形成システム50は、サーチエンジン106を調べ、利用可能な構成オプションのセットを決定し、入力目標を同時に実行しようと試みるアルゴリズムから各オプションをいかにセットするかを決定する。
サーチエンジン106は、いろいろの距離に与える効果を記述するエントリを有するデータベースを含む。エントリは、特定の構成設定が距離に加法的、乗法的、あるいは制限する効果がある。エントリは、前提条件として他の構成オプションを必要とするものとしてあるいは他のオプションと互換性がないものとしても示すことができる。例えば、簡単なブランチ予測オプションは、命令毎のサイクル(CPI‥性能の決定要素)にある乗法あるいは加法の効果、クロック速度への制限、面積への加法効果、および電力への加法効果を指定できる。このオプションは、より手の込んだブランチ予測子と一致しないものとして示すことができ、命令フェッチ待ち行列サイズを少なくとも2つのエントリに設定することに左右される。これらの効果の値は、ブランチ予測テーブルサイズのようなパラメータの関数であってもよい。一般に、データエントリは数値を求められる関数として示すことができる。
いろいろのアルゴリズムは、入力目標を達成することに最も接近する構成設定を探すために可能である。例えば、簡単なナップザックパッキングアルゴリズムは、コストで割られた値の分類配列の各オプションを考察し、コストを特定の制限内に保持している間、値を増加させる任意のオプション仕様を受け入れる。それで、例えば、電力を指定値以下に保持している間に性能を最少にするために、このオプションは、電力で割られた性能によって分類され、電力制限を超えないで構成できる性能を増加させる各オプションが受け入れられ。より込み入ったナップザックアルゴリズムは若干のバックトラッキング量を提供する。
目標および設計データベースから構成を決定する非常に異なる種類のアルゴリズムはシミュレートアニーリングに基づいている。ランダム初期セットのパラメータは、開始点として使用され、次に個別パラメータの変更は、グローバルユーティリティ関数の数値を求めることによって受け入れられるかあるいは拒否される。ユーティリティ関数の改良は常に、マイナスの変更は最適化が進行するときに低下する閾値に確率的に基づいて受け入れられている間に常に受け入れられる。このシステムでは、ユーティリティ関数は入力目標から構成される。例えば、目標性能>200、電力<100、面積<4が与えられる、電力、面積および性能の優先順位に関して、電力消費が100以下で、次にニュートラルになるまで、電力消費の減少に報い、面積が4以下で、次にニュートラルになるまで、面積の減少に報い、性能が200以上で、次にニュートラルになるまで、性能の増加に報いる下記のユーティリティ関数が使用できる。
電力が仕様外面積使用を減少させ、電力あるいは面積が仕様外である場合性能使用を減少させる構成要素もある。
これらのアルゴリズムおよび他のアルゴリズムは、指定された目標を満たす構成を探すために使用できる。重要なことは、構成可能なプロセッサ設計が前提条件、非互換性オプション仕様およびいろいろの距離に及ぼす構成オプションの影響を有する設計データベースに記述されていることである。
我々が示した例は、一般的であり、プロセッサ60で実行された特定のアルゴリズムに左右されないハードウエア目標を使用した。記述されているアルゴリズムは、特定のユーザプログラムに最適の構成を選択するために使用することもできる。例えば、ユーザプログラムは、異なるサイズ、異なるラインサイズおよび異なるセットアソシアティブのような異なる特性を有する、異なる種類のキャッシュに対するキャッシュミス数を測定するためにキャッシュの正確なシミュレータで実行できる。これらのシミュレーションの結果は、ハードウエアインプリメンテーション記述40を選択するのに役立つように記述された検索アルゴリズム106によって使用されるデータベースに付加できる。
同様に、ユーザアルゴリズムは、ハードウエアで任意に実現できる所定の命令の存在に対してプロフィールできる。例えば、ユーザアルゴリズムが乗算を行うかなりの時間を行う。サーチエンジン106は、ハードウエア乗算器を含むことを自動的に示唆し得る。このようなアルゴリズムは1つのユーザアルゴリズムを考察することに限定する必要がない。ユーザは、アルゴリズムのセットをシステムに供給することができ、サーチエンジン106は、平均してユーザプログラムのセットに役に立つ構成を選択できる。
プロセッサ60の予め構成された特性を選択することに加えて、サーチアルゴリズムは、ユーザ可能TIE拡張を自動的に選択するかあるいはユーザ可能TIE拡張に示唆するためにも使用できる。入力目標が与えられ、多分Cプログラミング言語で記述されたユーザプログラムの例が与えられると、これらのアルゴリズムは可能性があるTIE拡張を示唆する。状態がないTIE拡張の場合、コンパイラのようなツールはパターン一致器で具体化される。これらのパターン一致器は、単一命令と取り換えることができる複数の命令パターンを検索するボトムアップ方法で式のノードを移動する。例えば、ユーザCプログラムが下記のステートメントを含むことを示す。
x=(y+z)<<2;
x2=(y2+z2)<<2;
パターン一致器は、2つの異なる位置のユーザが2つの数を加算し、この結果を2ビットを左にシフトすることを見つける。このシステムは、2つの数を加算し、この結果を2ビットを左にシフトするTIE命令を生成する可能性をデータベースに加える。
形成システム50は、TIE命令が何回現れるかのカウントとともに多数の可能性のあるTIE命令について常に知っている。プロフィリングツールを使用すると、システム50は、どのくらい頻繁に各命令がアルゴリズムの全実行中実行されるかについても常に知っている。ハードウエア推定器を使用すると、システム50は、各可能性のあるTIE命令を実行するべきであるハードウエアでどれほど高価であるかについても常に知っている。これらの数は、入力目標、すなわち性能、コードサイズ、ハードウエア複雑さ等のような目標を最大にする可能性のあるTIE命令のセットを選択するために発見的探索アルゴリズムに供給される。
同じであるが、より強力なアルゴリズムは状態を有する可能性のあるTIE命令を見つけるために使用される。いくつかの異なるアルゴリズムは異なる種類の好機を検出するために使用される。1つのアルゴリズムは、コンパイラのようなツールを使用し、ユーザプログラムを走査し、ユーザプログラムがハードウエアで使用可能であるよりも多くのレジスタを必要とするかどうかを検出する。当該技術の専門家に公知であるように、これは、レジスタスピルの数をカウントすることによって検出でき、ユーザコードのコンパイルバージョンに再記憶する。コンパイルのようなツールは、付加ハードウエアレジスタ98を有するコプロセッサをサーチエンジンに示唆するが、多数のスピルを有し、再記憶するユーザのコードの一部で使用される演算だけをサポートする。このツールは、ユーザのアルゴリズムがいかに改善されたかの推定と同様にコプロセッサのハードウエアコストの推定のサーチエンジン106によって使用されるデータベースを知らせる責任を負う。前述のように、本サーチエンジン106は、示唆されたコプロセッサ98が十分な構成をもたらすか否かのグローバルに決定を行う。
それとは別にあるいはそれとともに、ユーザプログラムが、コンパイルのようなツールは、ユーザプログラムが所定の変数が所定の制限よりも決して大きくないことを保証するためにビットマスク演算を使用するかどうかを検査する。この状況では、このツールは、ユーザ制限に合致するデータタイプ(例えば、12ビットあるいは20ビットもしくは任意の他の大きさの整数)を使用するコプロセッサ98をサーチエンジン106に示唆する。C++におけるユーザプログラムために使用される他の実施例で使用される第3のアルゴリズムでは、コンパイルのようなツールは、ユーザ定義の抽象データタイプで演算するのに多くの時間が費やされることが分かる。データタイプの全演算がTIEに適しているけれども、アルゴリズムは、TIEコプロセッサによってデータタイプの全演算を実行することをサーチエンジン106に示唆する。
プロセッサ60の命令復号化ロジックを生成するために、1つの信号が構成仕様で規定された各操作符号のために発生される。このコードは宣言
に単に再書き込みすることにより発生される。
レジスタインターロックおよびパイプラインストールの信号の発生も自動化される。このロジックは構成仕様の情報に基づいても生成される。現命令のソースオペランドが完了しなかった前の命令のディスティネーションオペランドによって決まる場合、命令のiclassステートメントおよび待ち時間に含まれるレジスタ使用情報に基づいて、生成されたロジックはストール(あるいはバブル)を挿入する。このストール機能性を実行する機構はコアハードウエアの一部として実現される。
不正命令検出ロジックは、命令信号のフィールド制限とANDをとられた個別の生成された命令信号と一緒にNORをとることにより生成される。
命令復号化信号および不正命令信号は、復号化モジュールの出力としておよび手で書かれたプロセッサロジックの入力として使用可能である。
他のプロセッサ機能を生成するために、本実施例は、ペリベースプリプロセッサ言語で機能強化された構成可能なプロセッサ60のVerilog(登録商標)記述を使用する。ペリは、複合制御構造、サブルーチンおよびI/O機能を含む全機能言語である。本発明の実施例では、TPP(付録Bに列挙するソースに示されているように、TPPはペリプログラムそのものである)と呼ばれるプリプロセッサは、その入力を走査し、プリプロセッサ言語(TPPの場合はペリ)で記述されたプリプロセッサコードとしての所定の行(これらの行は、TPPの場合、セミコロンでプリフィックスされる)を識別し、抽出された行およびステートメントからなるプログラムを構成し、他の行のテキストを生成する。非プリプロセッサ行は、その場所でTPP処理の結果として生成される式が代入され、埋め込まれた式を有する。したがって、結果として生じるプログラムは、ソースコード、すなわち詳細プロセッサロジック40を記述するVerilog(登録商標)コード(下記で分かるように、TPPもソフトウエア開発ツール30を構成するために使用される)を生成するように実行される。
このコンテキストで使用される場合、TPPは、前述のようにVerilog(登録商標)コードの構成仕様100によって決まり埋め込まれた式を実行するのと同様に構成仕様照会、条件付式およびVerilog(登録商標)コードの反復構造のような構成子の包含を可能にするために、強力な前処理言語である。例えば、データベース照会に基づいたTPP割当は下記のようになりそうである。
ここで、config get valueは、構成仕様100を照会するために使用されるTPP関数であり、IsaMemoryOrderは、構成仕様100でセットされたフラグであり、Sendianは、Verilog(登録商標)コードを生成する際に後で使用されるべきTPP変数である。
であってもよい。
反復ループは、下記のようなTPP構成子によって実行できる。
ここで、Siは、TPPループインデックス変数であり、Sninterruptsは、プロセッサ60のために指定された割り込み数である(config get Valueを使用して構成仕様100から得られる)。
最後に、TPPコードは、下記のようなVerilog(登録商標)式に埋め込むことができる。
ここで、Sninterruptsは、割り込み数を規定し、xtscenflopモジュール(フリップフロッププリミティブモジュール)の幅(ビットに関する)を決定する。
srInterruptEnは、適切なビット数のワイヤであると規定されるフリップフロップの出力である。
srDataIn Wは、フリップフロップの入力であるが、関連ビットだけが割り込み数に基づいて入力される。
srInterruptEnWEnは、フリップフロップの書き込みイネーブルである。
cResetは、フリップフロップのクリア入力である。
CLKは、フリップフロップの入力クロックである。
に与える。
このように生成されたHDL記述114は、ブロック122で例えばSynopsys社によって製造されたデザインコンパイラ(登録商標)を使用してプロセッサインプリメンテーションのためのハードウエアを統合するために使用される。一旦構成要素が経路選択されると、この結果は、例えばSynopsys社によるプライムタイム(登録商標)を使用してブロック132でワイヤ逆注釈およびタイミング検証のために使用できる。この処理の成果物は、他の構成反復のため構成獲得ルーチン20に他の入力を供給するようにユーザによって使用できるハードウエアプロファイルである。
ロジック統合部122に関して述べられているように、プロセッサ60を構成する結果の1つは、特定のゲートレベルインプリメンテーションが多数の商用統合ツールのいずれかを使用することによって得ることができるカスタマイズされたHDLファイルのセットである。1つのこのようなツールは、Synopsys社からのデザインコンパイラ(登録商標)である。正確な、高性能なゲートレベルインプリメンテーションを保証するために、本実施例は、顧客の環境において統合処理を自動化するのに必要なスクリプトを提供する。このようなスクリプトを提供する際の要求は、いろいろのユーザの統合方法論および異なるインプリメンテーション目的をサポートすることにある。第1の要求を取り扱うために、この実施例は、このスクリプトをより小さいスクリプトおよび機能的に完全にスクリプトに分解する。1つのこのような例は、特定プロセッサ構成60に関連する全HDLファイルを読み出すことができる読み出しスクリプト、プロセッサ60に固有のタイミング要求をセットするタイミング抑制スクリプト、およびゲートレベルネットリストの配置および経路選択のために使用できる方法で統合結果を詳しく書くスクリプトを提供することにある。第2の要求を取り扱うために、本実施例は各インプリメンテーション目的のためのスクリプトを提供する。1つのこのような例は、より速いサイクルタイムを達成するスクリプト、最少シリコン領域を達成するスクリプト、および最少電力消費を達成するスクリプトを提供することにある。
スクリプトは、他のフェーズのプロセッサ構成でもまた使用される。例えば、一旦プロセッサ60のHDLが記述されたとすると、シミュレータは、ブロック132に関して前述されたようにプロセッサ60の正しい動作を検証するために使用できる。これは、シミュレートされたプロセッサ60で、多数のテストプログラム、あるいは診断を実行することによってしばしば達成される。シミュレートプロセッサ60でテストプログラムを実行することは、テストプログラムの実行可能な画像を生成し、シミュレータ112によって読み出すことができるこの実行可能な画像の表示を生成し、シミュレーションの結果が将来の解析のために収集できるこの実行可能な画像の表示を形成し、このシミュレーションの結果等を解析するような多数のステップを必要とし得る。従来技術では、これは、多数の廃棄スクリプトで行われた。これらのスクリプトは、どのHDLファイルが含まれるべきであるか、これらのファイルのどの場所がディレクトリ構造にあり得るか、どのファイルがテストベンチのために必要とされるか等のようなシミュレーション環境の若干の組み込み知識を有した。最新の設計では、好ましい実施例は、パラメータ置換によって構成されるスクリプトテンプレートを記述することにある。構成機構は、シミュレーションのために必要であるファイルのリストを生成するためにTPPも使用する。
さらに、ブロック132の検証処理では、設計者が一連のテストプログラムを実行できる他のスクリプトを記述することがしばしば必要である。これは、HDLモデルの所与の変更が新しいバグを導入しないという信用を設計者に与える回帰スイートを実行するためにしばしば使用される。これらの回帰スクリプトも、ファイル名、ロケーション等についての多数の組み込み前提を有するようにしばしば廃棄された。単一のテストプログラムに対する実行スクリプトの形成に対して前述されるように、回帰スクリプトはテンプレートとして記述される。このテンプレートは、構成時パラメータを実際の値の代わりにすることによって構成される。
RTL記述をハードウエアインプリメンテーションに変換する処理の最終ステップは、抽象ネットリストを幾何学的表示に変換するために場所およびルート(P&R)ソフトウエアを使用することにある。P&Rソフトウエアは、ネットリストの結合性を解析し、セルの配置を決定する。次に、このソフトウエアは、全セル間の接続の線を描くことを試みる。クロックネットは、通常特別の注意に値し、最後のステップとして経路選択される。この処理は、両方とも、どのセルが一緒に接近していると予想されるか(ソフトグルーピングとして公知である)、セルの相対配置、どのネットがわずかな伝播遅延等を有すると予想されるかのような若干の情報をツールに提供することによって促進できる。
この処理を容易にするためにおよび所望の性能目標、すなわちサイクル時間、面積、電力消費が達成されることを保証するために、構成機構は、P&Rソフトウエアのためのスクリプトのセットあるいは入力ファイルを生成する。これらのスクリプトは、セルのための相対配置のような前述されたような情報を含む。このスクリプトは、どれくらいの数の電源接続およびアース接続が必要であるか、いかにこれらが境界等に沿って分布されるべきであるかのような情報も含む。このスクリプトは、どれくらいの数のソフトグループを形成するかおよびどんなセルがソフトグループに含まれるべきであるかおよびどのネットが重要なタイミングであるかの情報を含むデータベースを照会することによって生成される。このパラメータは、どのオプションが選択されたかに基づいて変わる。これらのスクリプトは、場所およびルートを変えるために使用されるツールに応じて構成可能でなければならない。
任意には、構成機構は、ユーザからより多くの情報を要求し、P&Rスクリプトに送ることができる。例えば、インタフェースは、ユーザに最終のレイアウトの所望のアスペクト比、どれくらいの数のバッファリングのレベルがクロックツリーに挿入されるべきであるか、どの側面に入出力ピンがこれらのピンの相対あるいは絶対の配置、電源およびアースのストラップ等にあるべきであるかを尋ねることができる。次に、これらのパラメータはP&Rスクリプトに送られ、所望のレイアウトを生成する。
例えばより込み入ったクロックツリーを可能にするより込み入ったスクリプトさえ使用できる。電力消費を減らすために行われた1つの共通最適化はクロック信号をゲートすることにある。しかしながら、全ブランチの遅延をバランスさせることは非常に困難であるので、これは、クロックツリー統合を非常に困難にする。構成インタフェースは、ユーザに、正しいセルがクロックツリーのために使用し、クロックツリー統合の一部あるいは全部を実行することを尋ねることができる。構成インタフェースは、どこのゲートクロックがこの設計にあるかの若干の知識を有し、対象となるゲートからフリップフロップのクロック入力までの遅延を推定することによってこれを行う。したがって、このインタフェースは、クロックバッファの遅延をゲートセルの遅延と一致させるためにクロックツリー統合ツールに抑制を与える。最新のインプリメンテーションでは、これは汎用ペリスクリプトによって行われる。このスクリプトは、どのオプションが選択されるかに基づいて構成エージェントによって発生されたゲートクロック情報を読み出す。一旦設計が配置され、経路選択されたとするが、最終クロックツリー統合が行われる前に、ペリスクリプトが実行される。
更なる改善が前述されたプロフィール処理に対して行うことができる。特に、我々は、ユーザがこれらのCADツールを実行する時間を費やさないで殆ど同時に同様なハードウエアプロフィール情報を得ることができる処理を記述する。この処理はいくつかのステップを有する。
この処理の第1のステップは、ハードウエアプロフィールのグループのオプションの効果が任意の他のグループのオプションとは無関係であるように全構成オプションのセットを直交オプションのグループに分離することにある。例えば、ハードウエアプロフィールに対するMAC16装置のインパクトは任意の他のオプションとは無関係である。それで、MACオプションだけを有するオプショングループが形成される。より複雑な例は、ハードウエアプロフィールに対するインパクトはこれらのオプションの特定の組合せによって決定されるので、割り込みオプション、高レベル割り込みオプションおよびタイマオプションを含むオプショングループである。
第2のステップは、各オプショングループのハードウエアプロフィールのインパクトを特徴とすることにある。特徴付けは、グループのいろいろのオプションの組合せに対するハードウエアプロフィールのインパクトを得ることによって行われる。各組合せに関して、このプロフィールは、実際のインプリメンテーションが得られ、そのハードウエアプロフィールが測定される予め記述された処理を使用して得られる。このような情報は推定データベースに記憶されている。
最後のステップは、曲線取り付けおよび補間技術を使用してオプショングループのオプションの特定組合せによってハードウエアプロフィールを計算する特定の式を得ることにある。オプションの名前に応じて、異なる式が使用される。例えば、各付加割り込みベクトルは同じロジックについてハードウエアに加えるので、我々は、線形関数を使用し、そのハードウエアインパクトをモデル化する。他の例では、タイマ装置を有することは高優先順位割り込みオプションを必要とするので、タイマオプションのハードウエアのインパクトのための式は多数のオプションを含む条件付式である。
いかにアーキテクチャ選択がアプリケーションの実行時間性能およびコードサイズに影響を及ぼすかもしれないかの迅速フィードバックを提供することは役に立つ。複数のアプリケーション領域からのいくつかのセットのベンチマークプログラムがいくつかのセットが選択される。各領域に関して、いかに異なるアーキテクチャ設計決定が領域内のアプリケーションの実行時間性能およびコードサイズに影響を及ぼすかを推定するデータベースは、予め形成される。ユーザはアーキテクチャ設計を変えるので、データベースは、ユーザにあるいは複数の領域のために興味を引き起こさせるアプリケーション領域のために照会される。評価の結果はユーザに提示されるので、ユーザは、ソフトウエアの長所とハードウエアのコストとの間のトレードオフの推定を得る。
迅速な評価システムは、プロセッサをさらに最適化するためにいかに構成を変更するかの示唆をユーザに与えるために容易に拡張できる。1つのこのような例は、各構成オプションを面積、遅延および電力のようないろいろのコスト距離のオプションの増分インパクトを示す一組の数と関連付けることにある。所与のオプションのための増分コスト影響を計算することは迅速な評価システムで容易に行われる。それは、オプションの有無の評価システムに対する2つの呼び出しを単に必要とする。2つの評価に対するコストの差はオプションの増分インパクトを示す。例えば、MAC16オプションの増分領域インパクトは、MAC16のオプションの有無で2つの構成の領域コストを評価することによって計算される。次に、この差異は、対話構成システムのMAC16オプションで表示される。このようなシステムは、一連の単一ステップ改善によって最適解決策の方へユーザを誘導できる。
自動プロセッサ構成処理のソフトウエア側に移ると、本発明の本実施例は、ソフトウエア開発ツール30がプロセッサに固有であるようにソフトウエア開発ツール30を構成する。構成処理は、いろいろの異なるシステムおよび命令セットアーキテクチャに移植できるソフトウエアツール30で始める。このような目標を変えることができるツールは、幅広く研究され、周知である。本実施例は、フリーソフトウエアであり、例えば、GNU Cコンパイラ、GNUアセンブラ、GNUリンカ、GNUプロファイラ、およびいろいろのユーティリティプログラムを含むGNUファミリーのツールを使用する。次に、これらのツール30は、ISA記述からソフトウエアの一部を直接生成し、手で記述されたソフトウエアの一部を変更するためにTPPを使用することによって自動的に構成される。
GNU Cコンパイラはいくつかの異なる方法で構成される。コアISA記述が与えられると、コンパイラの機械依存ロジックの多くが手で記述できる。コンパイラのこの一部は構成可能なプロセッサ命令セットの全構成に共通であり、手で目標を変更することは最善結果を得るための細かい調整を可能にする。しかしながら、コンパイラのこの手で符号された部分の場合さえ、若干のコードはISA記述から自動的に生成される。特に、ISA記述は、いろいろの命令の即値フィールドに使用できる一定値のセットを規定する。各即値フィールドの場合、述語関数は、特定の定数値がフィールドで符号化できるかどうかを試験するために生成される。コンパイラは、プロセッサ60のためのコードを生成する場合、これらの述語関数を使用する。コンパイラ構成のこのアスペクトを自動化することは、ISA記述とコンパイラとの間の不一致に対する機会を取り除き、それは、最少の努力でISAの定数を変えることを可能にする。
コンパイラのいくつかのアスペクトはTPPで前処理を介して構成される。パラメータ選択によって制御された構成オプションの場合、コンパイラの対応するパラメータはTPPによってセットされる。例えば、コンパイラは、ターゲットプロセッサ60がビッグエンディアンあるいはリトルエンディアンバイト配列を使用し、この変数は、構成仕様100からエンディアンネスを読み出すTPPコマンドを自動的に使用してセットされる。TPPは、対応するパッケージが構成仕様100で使用可能であるかどうかに基づいて任意のISAパッケージのためのコードを生成するコンパイラの手で符号化された部分を条件付で使用可能あるいは使用禁止するためにも使用できる。例えば、乗算/累算命令を生成するコードは、構成仕様がMAC16オプション90を含む場合、コンパイラにだけ含まれる。
コンパイラは、TIE言語によって指定された設計者定義の命令をサポートするようにも構成される。このサポートには2つのレベルがある。最低レベルで、設計者定義の命令は、コンパイルされるコードのマクロ関数、組込み関数、あるいはインライン(外部)関数として利用可能である。本発明の本実施例は、「インラインアセンブリ」コードのようなインライン関数を規定するCヘッダ(GNU Cコンパイラの標準機能)を生成する。設計者定義の操作符号および操作符号の対応するオペランドが与えられると、このヘッダファイルを生成することは、GNU Cコンパイラのインラインアセンブリシンタックスに変換する簡単な処理である。他のインプリメンテーションは、インラインアセンブリ命令を指定するCプリプロセッサマクロを含むヘッダファイルを形成する。さらにもう一つの代替は、組込み関数をコンパイラの中に加えるためにTPPを使用する。
設計者定義の命令に対する第2のレベルのサポートは、命令を使用する機会をコンパイラに自動的に認識させることによって提供される。これらの命令は、構成処理中ユーザによって直接規定あるいは自動的に形成できる。ユーザアプリケーションをコンパイルするより前に、TIEコードは、自動的に検査され、Cに等しい機能に変換される。これはTIE命令の高速シミュレーションを可能にするために使用できる同じステップである。Cに等しい機能は、コンパイラによって使用されるツリーベース中間表示に部分的にコンパイルされる。各TIE命令に対するこの表示はデータベースに記憶される。ユーザアプリケーションがコンパイルされる場合、コンパイル処理の一部はパターン一致器である。ユーザアプリケーションはツリーベース表示にコンパイルされる。パターン一致器は、ユーザプログラムのツリー毎にボトムアップで移動する。移動の各ステップで、パターン一致器は、現ポイントにルートされた中間表示がデータベースのTIE命令のいずれかに一致しているかどうかを検査する。一致がある場合、一致が示される。各ツリーを移動することを完了した後、最大のサイズにされた一致のセットは選択される。ツリーの各最大一致は、等価のTIE命令と取り換えられる。
前述のアルゴリズムは、無状態TIE命令を使用する機会を自動的に認識する。付加方式は、状態を有するTIE命令を使用する機会を自動的に認識するためにも使用できる。前述の節は、状態を有する可能性のあるTIE命令を自動的に選択するアルゴリズムを記載した。同じアルゴリズムは、CあるいはC++アプリケーションのTIE命令を自動的に使用するために使用される。TIEコプロセッサがより多くのレジスタであるが限られた演算のセットを有するように規定された場合、コードの領域は、レジスタスピリングを受けるかどうかおよびこれらのレジスタが使用可能な演算のセットを使用するだけであるかどうかを調べるために走査される。このような領域が見つかった場合、これらの領域のコードは、コプロセッサ命令およびレジスタ98を使用するために自動的に変更される。変換動作は、データをコプロセッサ98の内外へ移動させるように領域の境界で発生される。同様に、TIEコプロセッサが異なる大きさの整数で作動するように規定された場合、コードの領域は、この領域の全データがあたかも異なる大きさであるかのようにアクセスされるかどうかを調べるように検査される。一致領域に関しては、このコードが変更され、グルーコードは境界に付加される。同様に、TIEコプロセッサ98がC++抽象データタイプを実行するために規定される場合、このデータタイプの全演算は、TIEコプロセッサ命令と取り換えられる。
TIE命令を自動的に暗示することおよびTIE命令を自動的に使用することの両方とも個別に役立つことを注目せよ。暗示されたTIE命令は、組込み機構を介してユーザによっても手動で使用でき、アルゴリズムを利用することは手動で設計されたTIE命令あるいはコプロセッサ98に加えることができる。
いかに設計者定義の命令がインライン関数あるいは自動認識のいずれかによって生成されたかにかかわらず、コンパイラは、これらの命令を最適化し、スケジュールできるように設計者定義の命令の可能性のある副作用を知る必要がある。性能を改良するために、従来のコンパイラは、実行時間性能、コードサイズあるいは電力消費のような所望の特性を最大にするためにユーザコードを最適化する。当該技術分野で十分熟練した人に公知であるように、このような最適化は、命令を再配置するかあるいは所定の命令を他の意味論的に等価な命令と取り換えるようなものを含む。最適化を十分実行するために、コンパイラは、いかにあらゆる命令がマシンの異なる部分に影響を及ぼすかを知らなければならない。マシン状態の異なる部分を読み書きする2つの命令が自由に再配列できる。従来のプロセッサの場合、異なる命令によって読み出しおよび/または書き込みされる状態は、時々テーブルによってコンパイラの中にハードワイヤードされる。本発明の一実施例では、TIE命令は、内輪に見積もってもプロセッサ60の状態全てを読み書きするものと仮定される。これによって、コンパイラは、正しいコードを生成するがコンパイラの能力を制限し、TIE命令がある場合のコードを最適化できる。本発明の他の実施例では、ツールは、TIE定義を自動的に読み出し、各TIE命令に対してどの状態が前記命令によって読み出しあるいは書き込みされるかを見つける。次に、このツールは、コンパイラの最適化器によって使用されるテーブルを変更し、各TIE命令の効果を正確にモデル化する。
コンパイラのように、アセンブラ110の機械依存部は、自動的に生成された部分およびTPPで構成された手で符号化された部分の両方とも含む。全構成に共通の機能のいくつかは、手で記述されたコードでサポートされる。しかしながら、アセンブラ110の主要タスクは、機械命令を符号化することであり、命令符号化および復号化ソフトウエアはISA記述から自動的に生成できる。
命令符号化および復号化は異なるソフトウエアツールで有用であるために、本発明の本実施例は、ソフトウエアをグループ化し、これらのタスクを実行し、別個のソフトウエアライブラリにする。このライブラリは、ISA記述の情報を使用して自動的に生成される。このライブラリは、操作符号の一覧表、すなわち操作符号ニーモニックのためのストリングを一覧表のメンバー上に効率的にマッピングする関数(stringToOpcode)および各操作符号に対して命令長(instructionLength)、オペランド数(numberOfOperand)、オペランドフィールド、オペランドタイプ(すなわち、レジスタあるいは即値)(operandType)、2進符号化(encodeOpcode)およびニーモニックストリング(opcodeName)を指定するテーブルを規定する。各オペランドフィールドに関しては、ライブラリは、命令ワードの対応するビットを符号化するアクセスサ関数(fieldSetFunction)および復号化するアクセスサ関数(fieldGetSetFunction)を提供する。この情報の全部は、ISA記述で容易に利用可能である。すなわち、ライブラリソフトウエアを生成することは、単にこの情報を実行可能なCコードに変換する問題である。例えば、各エントリが各操作符号フィールドをISA記述のこの命令に対して指定された値に設定することによって生成された特定の命令に対する符号化である場合、命令符号化は、Cアレイ変数に記録される。encodeOpecode関数は、単に所与の操作符号に対してアレイ値に戻る。
ライブラリも、2進命令(decodeInstruction)の操作符号を復号化する関数を提供する。この関数は、最も外側のスイッチが操作符号階層の上部でサブ操作符号をテストする一連のネストスイッチステートメントとして生成され、ネストされたスイッチステートメントは操作符号階層の徐々により低いサブ操作符号をテストする。したがって、この関数に対して生成されたコードは、操作符号そのものと同じ構造を有する。
命令を符号化および復号化するこのライブラリが与えられると、アセンブラ110は容易に実行される。例えば、アセンブラの命令符号化ロジックは全く簡単である。すなわち
2進命令をアセンブリコードに非常に類似している可読形式に変換する逆アセンブラ110を実行することは同様に簡単である。
この逆アセンブラアルゴリズムはスタンドアロン逆アセンブラツールにおいて使用され、またマシーンコードのデバッギングをサポートするためにデバッガ130においても使用される。
リンカはコンパイラやアセンブラ110程機器構成に対してあまり敏感ではない。リンカの多くは標準型であり、機械依存部分でさえ主としてコアISA記述に依存しており、特定のコアISAに対して手動で符号化することができる。endianness等のパラメータはTPPを使用して構成仕様書100から設定される。ターゲットプロセッサ60のメモリマップはリンカが必要とする構成の他の1つの局面である。このように、メモリマップを指定するパラメータは、TPPを使用してリンカに挿入される。本発明のこの実施形態では、GNUリンカが一組のリンカスクリプトによって駆動され、それはメモリマップ情報を含むこれらのリンカスクリプトである。このアプローチの利点は、ターゲットシステムのメモリマップが、プロセッサ60を構成した時に指定されたメモリマップと異なっている場合、プロセッサ60を再構成することなく、またリンカを再構築することなく、付加的なリンカスクリプトを後で発生させることができることである。このように、この実施形態は、異なるメモリマップパラメータを備えた新しいリンカスクリプトを構成するツールを含んでいる。
一度に1つの命令の実行をシングルステップ化し、ブレークポイントを導入し、また他の標準デバッギングタスクを遂行するために、デバッガ130はプログラムを実施するにつれてのプログラムの状態を観察するための機構を提供する。デバッギングされるプログラムは、構成されたプロセッサのハードウエアインプリメンテーション、あるいはISS126のいずれに対しても実施することができる。デバッガはいずれの場合にもユーザに対して同じインターフェイスを呈する。ハードウエアインプリメンテーションに対してプログラムを実施する場合、ユーザのプログラム実行を制御し、シリアルポートを介してデバッガと通信するために、小さなモニタプログラムがターゲットシステムに含まれる。シミュレータ126に対してプログラムを実施する場合、シミュレータ126自体がこれらの機能を果たす。デバッガ130は幾つかの方法でこの構成に依存している。デバッガ130内からの分解機コードをサポートする為に、デバッガ130は上述の命令符号化・復号化ライブラリと接続される。どのレジスタがプロセッサ60に存在するかを見出すために、ISA記述をスキャンすることによってプロセッサのレジスタ状態を表示するデバッガ130の部分、及びデバッガ130に対して情報を提供するデバッグモニタプログラムとISS126の部分が生成される。
他のソフトウエア開発ツール30は標準型であり、各プロセッサ構成のために変更する必要はない。プロファイルビューア及び様々なユティリティプログラムがこのカテゴリに含まれる。プロセッサ60の全ての機器構成が共有するバイナリフォーマットでのファイルに対して作動するために、これらのツールをもう一度目標とすることが必要であるかもしれないが、これらのツールはISA記述あるいは構成仕様書100内の他のパラメータのいずれにも依存しない。
構成仕様書はまた、図13に示すISS126と呼ばれるシミュレータを構成するためにも使用される。ISS126は構成可能なプロセッサ命令セットの機能的な行動をモデル化するソフトウエアアプリケーションである。Synopsys VCSやCadence Verilog XLやNCシミュレータ等のその対応するプロセッサハードウエアモデルシミュレータとは異なり、ISS HDLモデルはその命令実行中はCPUの抽象化である。ISS126は各ゲートに対して各信号の推移をモデル化する必要がなく、また完全なプロセッサ設計に登録する必要もないので、ハードウエアシミュレーションよりはるかに早く実行する。
ISS126はホストコンピュータに対して実行すべき、構成されたプロセッサ60のためにプログラムを生成できるようにする。ISS126はプロセッサのリセットを正確に再生し、デバイスドライバ等の低レベルのプログラムや初期化コードを展開させる行動を遮る。固有のコードを埋め込まれたアプリケーションに接続する場合に、これは特に有用である。
実際の埋め込まれたターゲットにコードをダウンロードする必要なしに、構造上の仮定やメモリオーダリング上の問題点等の潜在的な問題を特定するためにISS126を使用することができる。
この実施形態では、ISSセマンティクスは、命令を機能に変えるCオペレータ構築ブロックを構築するために、Cのような言語を原文通りに使用するものとして表される。例えば、割込みレジスタやビット設定・割込みレベル・ベクトル等の割込みに関する初歩の機能性は、この言語を使用してモデル化される。
構成可能なISS126は、システム設計及び確証プロセスの一部として、以下の4つの目的または目標のために使用される:
- ハードウエアが利用できるようになる前にソフトウエアアプリケーションをデバッギングすること;
- システムソフトウエア(例えば、コンパイラ及びオペレーティングシステム成分)のデバッギング;
- ハードウエア設計検証のためにHDLシミュレーションと比較すること。ISSはISAのリファレンスインプリメンテーションとして作用し、ISS及びプロセッサHDLは共に、プロセッサ設計検証中に診断法及びアプリケーションのために実行され、両者からのトレースが比較される;及び- ソフトウエアアプリケーション性能の分析(これは構成プロセスの一部であってもよいし、あるいはプロセッサ構成が選択された後で同調する更なるアプリケーションのために使用されてもよい)。
全ての目標にとって、構成可能なアッセンブラ110及びリンカを備えて作り出されるプログラムをISS126がロード・デコードできることが必要である。また命令のISS実行が、対応するハードウエア実行及びコンパイラの予測に対して意味論的に同等であることも必要である。これらの理由のために、ISS126は、ハードウエア及びシステムソフトウエアを定義するために使用される同じISAファイルから、そのデコード・実行行為を引き出す。
上記した最初と最後の目標にとって、ISS126が可及的に速く必要な精度に達することが重要である。従って、ISS126はシミュレーションの詳細レベルの動的制御を可能にする。例えば、キャッシュの詳細は必要とされない限りモデル化されず、キャッシュモデリングを動的にオン・オフに切り替えることができる。更に、実行時間にISS126がほとんど構成に依存した所作選択をしないようにISS126をコンパイルする前に、ISS126の部分(例えば、キャッシュ及びパイプラインモデル)が構成される。
上記した最初と最後の目標にとって、設計(ターゲット)下で、システムにとってオペレーティングシステムサービスがOSから利用できない場合、ISS126がアプリケーションに対してこれらのサービスを提供することが重要である。また、それがデバッギングプロセスの関連する部分である場合、これらのサービスがターゲットOSによって提供されることが重要である。この方法で、システムはISSホストとシミュレーションターゲット間でこれらのサービスを柔軟に動かすための設計を提供する。現在の設計はISS動的制御(SYSCALL命令のトラッピングはオン・オフを切り替えてもよい)と、ホストOSサービスを要求するための特別なSIMCALL命令の使用との組み合わせに頼っている。
最後の目標は、ISS126がISAによって指定されるレベル以下であるプロセッサとシステムの行動のうち、一部の局面をモデル化することを必要とする。特に、ISSキャッシュモデルは、機器構成データベース100からパラメータを抽出するパール(Perl)スクリプトからのモデルのためにCコードを発生させることによって構成される。更に、命令のパイプライン行動の詳細(例えば、レジスタの使用及び機能ユニットの利用可能性要件に基づくインタロック)も、機器構成データベース100から引き出される。現在のインプリメンテーションでは、特殊なパイプライン記述ファイルがリスプ状のシンタックス内のこの情報を指定する。
三番目の目標は割込み行動の正確な制御を必要とする。この目的のために、ISS126内の特殊な非構造的レジスタを使用して、割込み可能を抑制する。
ISS126はその使用のために異なる目標をサポートするために幾つかのインターフェイスを提供する。
- バッチまたはコマンドラインモード(一般的に最初と最後の目標との関連で使用される);
- コマンドループモード、これは非象徴的なデバッグ能力、例えば、ブレークポイント・ウォッチポイント・ステップ等、4つ全ての目標のために頻繁に使用されるデバッグ能力を提供する;及び
- 実行バックエンドとして、ISS126がソフトウエアデバッガにより使用されるようにするソケットインターフェイス(これは特定の選択された構成のためにレジスタ状態を読み取り、書き込むように構成されなければならない);
- 非常に詳細なデバッギング及び性能分析を可能にするスクリプタブルインターフェイス。特に、このインターフェイスは異なる構成に対してアプリケーション行動を比較するために使用されてもよい。例えば、どのブレークポイントにおいても、1つの構成に対するランからの状態を別の構成に対するランからの状態と比較してもよいし、あるいは1つの構成に対するランからの状態を別の構成に対するランからの状態に移行させてもよい。
またシミュレータ126は手動でコード化され、自動発生された部分を有している。ISA記述言語から発生されるテーブルから作成される命令デコード及び実行を除いて、手動でコード化された部分は従来よりのものである。これらのテーブルは実行すべき命令ワードに見出される一次的操作符号から開始し、その分野の値でテーブルへと索引付けし、一片の操作符号、つまり、他の操作符号の点から定義されていない操作符号が見つかるまで続けることによって、命令を復号化する。次に、テーブルはその命令に対するセマンティクス宣言書において指定されるTIEコードから翻訳されたコードに対するポインタを与える。このコードは命令をシミュレートするために実行される。
ISS126はシミュレートされているプログラムの実行をプロファイルすることができる。このプロファイリングは業界で公知のプログラムカウンタサンプリング技術を使用する。定期的な間隔で、シミュレータ126はシミュレートされているプロセッサのPC(プログラムカウンタ)をサンプリングする。シミュレータ126は各コード領域におけるサンプル数でヒストグラムを構築する。またシミュレータ126は、1つのコール命令がシミュレートされる度にカウンタを増分することによって、コールグラフ内の各エッジが実行される回数をカウントする。シミュレーションが完了すると、シミュレータ126は、標準のプロファイルビューアによって読み出すことができるフォーマットで、ヒストグラム及びコールグラフのエッジカウントの両方を含む出力ファイルを書く。シミュレートされているプログラム118は(標準のプロファイリング技術におけるように)計測コードで修正する必要がないので、プロファイリングオーバーヘッドはシミュレーション結果に影響を及ぼさないし、プロファイリングは全く非侵略的である。
システムがハードウエアプロセッサエミュレーション及びソフトウエアプロセッサエミュレーションを利用できるようにすることが好ましい。この目的のために、本実施形態はエミュレーションボードを提供する。図6に示すように、エミュレーションボード200は、ハードウエア内でプロセッサ構成60をエミュレートするために、Altera Flex 10K200E等の複合プログラム可能論理装置202を使用する。一旦システムにより発生されたプロセッサネットリストでプログラムされると、CPLD装置202は機能的に最終的なASIC製品と同等になる。それは他の(ISS126またはHDL等の)シミュレーション方法よりはるかに高速で稼動し、周期的に正確である、プロセッサ60の物理的実用化を利用できるという利点を提供する。しかしながら、それは最終的なASIC装置が達成することができる高周波数ターゲットには達することができない。
このボードはデザイナが様々なプロセッサ構成オプションを評価でき、ソフトウエア展開及びデバッギングを設計サイクルの初期に開始できるようにする。それはまたプロセッサ構成の機能的検証のためにも使用することができる。
平易なソフトウエア展開、デバッギング及び検証を許すために、エミュレーションボード200はそれに対して利用できる幾つかの資源を有している。これらの資源には、CPLD装置202自体、EPROM204、SRAM206、同期SRAM208、フラッシュメモリ210及び2つのRS232シリアルチャネル212が含まれる。シリアルチャネル212はユーザプログラムをダウンロードしてデバッギングするために、UNIX(登録商標)またはPCホストに対する通信リンクを提供する。CPLDネットリストを考慮して、装置の機器構成ポート214に対する専用シリアルリンクを通して、あるいは専用機器構成ROM216を通して、プロセッサ60の構成がCPLD202へとダウンロードされる。
ボード200に対して利用できる資源もある程度まで構成可能である。容易に変更可能であるプログラム可能論理装置(PLD)217を通してマッピングが行われるので、ボード上の様々なメモリ要素のメモリマップを容易に変更することができる。更に、プロセッサコアが利用するキャッシュ218及び228は、より大きな記憶装置を使用して、キャッシュ218及び228に接続されるタグバス222及び224を適当な大きさに分けることによって拡張可能である。
特定のプロセッサ構成をエミュレートするためのボードの使用は幾つかのステップを含む。第1のステップはプロセッサの特定の構成を記述する一組のRTLファイルを入手することである。次のステップは多数の商業的統合ツールを使用して、RTL記述からゲートレベルのネットリストを統合することである。1つのこのような例はSynopsysからのFPGAエクスプレスである。次にゲートレベルのネットリストを使用して、業者により典型的に提供されるツールを用いてCPLDインプリメンテーションを入手できる。このようなツールの1つは、アルテラ社(Altera Corporation)のMaxplus2である。最後のステップは、再びCPLD業者により提供されるプログラマを使用して、エミュレーションボードのCPLDチップ上にインプリメンテーションをダウンロードすることである。
エミュレーションボードの目的の1つはデバッギング目的のために迅速なプロトタイプ実用化をサポートすることであるので、前のパラグラフにおいて概説されたCPLD実用化プロセスが自動的であることが重要である。この目的を達成するために、1つのディレクトリに全ての関連ファイルをグループ分けすることによって、ユーザに配送されるファイルがカストマイズされる。そして、完全にカストマイズされた統合スクリプトが提供され、顧客が選択した特定のFPGA装置に特定のプロセッサ構成を統合することができる。業者ツールによって使用される完全にカストマイズされた実用化スクリプトも発生される。このような統合及び実用化スクリプトは、最適の性能で機能的に正しい実用化を保証する。特定のプロセッサ構成に関連する全てのRTLファイルを読み込むために、スクリプト内に適切なコマンドを含むことにより、またプロセッサ構成内のI/O信号に基づいてチップピンの位置を割り当てるための適当なコマンドを含むことにより、またゲート型クロックにおけるようなプロセッサ論理のある重大な部分のために特定の論理実用化を入手するためのコマンドを含むことにより、機能的な正確さが達成される。更に、このスクリプトは、全てのプロセッサI/O信号に詳細なタイミング制限を割り当てることにより、またある重大な信号の特殊処理により、実用化の性能を改善する。タイミング制限の1つの例は、ボード上の1つの信号の遅延を考慮することによって、その信号に対して特定の入力遅延を割り当てることである。重大な信号処理の例は、CPLDチップに対して低クロックスキューを達成するために、専用グローバルワイヤに対してクロック信号を割り当てることである。
好ましくは、該システムは構成されたプロセッサ60用の検証スイートも構成する。マイクロプロセッサのような複雑な設計の検証のほとんどは以下のような流れで構成される:
━ 設計を刺激し、テストベンチ内で、またはISS126のような外部モデルを使用して出力を比較するために、テストベンチを構築する;
━ 刺激を発生させるための診断法を書き込む;
━ 制限された状態の機械カバレッジHDLのラインカバレッジ、下降するバッグ率、設計上移動するベクトルの数等のスキームを使用して、検証カバレッジを測定する;そして
━ そのカバレッジが充分でなければ、更に診断法を書き込み、おそらく診断法を発生させるためのツールを使用して、更に設計を実行する。
本発明は幾分似たような流れを使用するが、設計の構成可能性を説明するために、この流れの全ての成分を修正する。この方法論は以下のステップより成る:
━ 特定の構成用のテストベンチを構築する。テストベンチの構成はHDLのために記述したのと同様のアプローチを使用し、その中で支持される全てのオプション及び拡張、つまり、キャッシュサイズ、バスインターフェイス、クロッキング、及び割込み発生等をサポートする;
━ HDLの特定の構成に対してセルフチェッキング診断法を実行する。診断法自体は特定のハードウエア部品に適応するように構成できる。どの診断法を実行するかの選択も構成に応じて行う。
━ 擬似乱数的に発生された診断法を実行し、ISS126に対する各々の命令実行後のプロセッサ状態を比較する;そして
━ 機能的カバレッジと共にラインカバレッジを測定するカバレッジツールを使用した、検証カバレッジの測定。更に、非合法的な状態を探すために、その診断法に沿ってモニタ及びチェッカを動かす。これらは全て、特定の構成仕様用に構成可能である。
全ての検証成分が構成可能である。構成可能性はTPPを使用して実用化される。
テストベンチは、構成されたプロセッサ60が置かれるシステムのVerilog(登録商標)モデルである。本発明の場合、これらのテストベンチは以下のものを含む:
━ キャッシュ、バスインターフェイス及び外部メモリ;
━ 外部割込み機構及びバスエラー発生;
━ クロック発生。
上記特徴のほとんど全てが構成可能であるので、テストベンチ自体は構成可能性をサポートする必要がある。そこで、例えば、キャッシュサイズ及び外部割込み機構の数は構成に基づいて自動的に調節される。
テストベンチはテスト中の装置、プロセッサ60に刺激を提供する。それはメモリ内に予めロードされるアッセンブリレベルの命令を(診断法から)提供することによって行われる。更にテストベンチはプロセッサ60の行動、例えば割込み、を制御する信号を発生させる。また、これらの外部信号の周波数及びタイミングは制御可能であり、テストベンチによって自動的に発生される。
診断法には2つのタイプの構成可能性がある。まず第一に、診断法はTPPを使用して何をテストするかを決定する。例えば、ソフトウエア割込みをテストするために1つの診断法が書かれている。この診断法は正しいアセンブリコードを発生させるために、幾つのソフトウエア割り込みがあるかを知っている必要がある。
第二に、プロセッサ構成システム10はこの構成にとってどの診断法が適しているかを決定しなければならない。例えば、MACユニットをテストするために書かれた診断法は、このユニットを含んでいないプロセッサ60に対しては適用できない。本実施形態では、これは各診断法についての情報を含むデータベースの使用を通して実施される。データベースは各診断法に対して、以下の情報を含んでいてよい:
━ 或るオプションが選択された場合、その診断法を使用する;
━ その診断法は割込みがあれば実行できないかどうか;
━ その診断法は実行するのに特別なライブラリまたはハンドラを必要とするか否か;及び
━ ISS126とのコシミュレーションがあればその診断法を実行できないかどうか。
好ましくは、プロセッサハードウエア記述は3つのタイプのテストツール:テスト発生器ツール、モニタ及びカバレッジツール(またはチェッカ)及びコシミュレーション機構を含む。テスト発生器ツールとは、知的方法で一連のプロセッサ命令を作り出すツールである。これらのツールは擬似乱数的なテスト発生器のシーケンスである。本実施形態は内部的に2つのタイプ:特別に展開されたRTPGと呼ばれるものと、VERA(VSG)と呼ばれる外部ツールに基づくものを使用する。両者共そのまわりに作られる構成可能性を有する。1つの構成に対する有効な命令に基づいて、それらは一連の命令を発生させる。これらのツールはTIEから新たに定義された命令を処理することができ、これらの新たに定義された命令がテスト用に無作為に発生される。本実施形態は設計検証のカバレッジを測定するモニタ及びチェッカを含む。
モニタ及びカバレッジツールは、リグレッションランと並んで動かされるツールである。カバレッジツールは診断法が何をしているか、それが働かせているHDLの機能及び論理をモニタする。この情報の全てがリグレッションランを通して集められ、後で分析されて、論理のどの部分が更にテストを必要としているかに関するヒントを得る。本実施形態は構成可能である幾つかの機能的カバレッジツールを使用する。例えば、特定の制限された状態の機械にとって、構成に応じて必ずしも全ての状態が含まれているとは限らない。従って、その構成に対して、機能的カバレッジツールはこれらの状態または遷移をチェックしようとしてはならない。これはTPPを通してツールを構成可能にすることによって達成される。
同様に、HDLシミュレーション内で発生する非合法的な条件をチェックするモニタがある。これらの非合法的状態はバグとして現れ得る。例えば3状態バス上で、2つのドライバが同時にオンになるべきではない。これらのモニタは構成可能であり、その構成のために特定の論理が含まれているか否かに基づいてチェックを追加または除去する。
コシミュレーション機構はHDLをISS126に接続する。命令の終りにプロセッサ状態がHDL及びISS126において同じであることをチェックするために、このコシミュレーション機構が使用される。更に、各構成にどのような特徴が含まれているか、また比較のためにどのような状態が必要であるかを知る程度まで、このコシミュレーション機構は構成可能である。従って、例えば、データブレークポイント特徴が特殊なレジスタを追加する。この機構はこの新しい特殊なレジスタを比較するために知っていることが必要である。
ISS126において使用するために、またテスト及び検証のために使用するためのシステムデザイナのために、TIEを介して指定される命令セマンティクスを機能的に同等のC関数に翻訳することができる。機器構成データベース106内の命令セマンティクスは、標準のパーサツールを使用してパーサツリーを作るツールによってC関数に翻訳され、次にそのツリーを歩き、C言語で対応する表現を出力するコードに翻訳される。その翻訳は全ての表現にビット幅を指定し、構文解析木を書き直して一部の翻訳を簡略化するためにプレパスを必要とする。これらの翻訳機構は、HDLからCへの、あるいはCからアッセンブリ言語コンパイラへの他の翻訳機構に比べて比較的簡単であり、TIE及びC言語仕様書から始めて、当業者により書き換えることができる。
機器構成ファイル100及びアッセンブラ/逆アセンブラ100を用いて構成されるコンパイラを使用して、ベンチマークアプリケーションソースコード118が編纂されて組み付けられ、サンプルデータセット124を使用してシミュレートされてソフトウエアプロファイル130を入手し、このソフトウエアプロファイル130はユーザへのフィードバックのためにユーザ構成捕捉ルーチンにも設けられる。
どの構成パラメータ選択に対してもハードウエア及びソフトウエア両方のコスト/利益特性記述を得る能力を有することで、デザイナによるシステムの更なる最適化の新たな機会が開かれる。特に、これはデザイナが最適の構成パラメータを選択できるようにし、最適の構成パラメータはある長所の形式に従ってシステム全体を最適化する。1つの可能なプロセスは、構成パラメータを繰り返し選択する、あるいは選択を解除することによる貪欲な戦略に基づいている。各ステップにおいて、システム全体の性能及びコストに最良の影響を有するパラメータが選択される。システムの性能及びコストを改良するために1つのパラメータも変更できなくなるまでこのステップが繰り返される。他の拡張は、一度に一群の構成パラメータを見ること、あるいはより洗練されたサーチアルゴリズムを使用することを含む。
最適の構成パラメータ選択を得ることに加えて、このプロセスは最適のプロセッサ拡張を構成するためにも使用することができる。プロセッサ拡張における多数の可能性のために、拡張候補数を制限することが重要である。1つの技術は、アプリケーションソフトウエアを分析し、システム性能またはコストを改善することができる命令拡張だけを見ることである。
本実施形態による自動化されたプロセッサ構成システムの操作をカバーしてきたので、次にプロセッサマイクロアーキテクチャ構成に対するシステムのアプリケーションの例について説明する。最初の例は画像圧縮に適用された場合の本発明の利点を示している。
モーション評価は、MPEGビデオ及びH263会議用アプリケーションを含む多くの画像圧縮アルゴリズムの重要な成分である。ビデオ画像圧縮は、各フレームのために必要な記憶量を減少させるために、1つのフレームから次のフレームへの類似性を使用しようとする。最も簡単な場合、圧縮すべき画像の各ブロックを基準画像(圧縮される画像のすぐ前または後の画像)の対応するブロック(同じX、Y位置)と比較することができる。フレーム間の画像差の圧縮は、個々の画像の圧縮より概してビット効率的である。ビデオシーケンスにおいて、明確な画像特徴はしばしばフレームからフレームへと移動するので、異なるフレーム間の最も近い対応関係はしばしば正確に同じX、Y位置にはなく、幾分オフセットしている。画像の重大な部分がフレーム間で移動している場合、その差を計算する前に、その動きを特定し補償することが必要であるかもしれない。この事実は、はっきりした差異のある特徴に対しては、計算された差において使用されるサブ画像内のX、Yオフセットを含む、連続画像間の差を符号化することによって最も濃厚な表示を達成できることを意味する。画像差を計算するために使用される位置でのオフセットはモーションベクトルと称される。
この種の画像圧縮において最も計算上集中的なタスクは、各ブロックに対して最も適切なモーションベクトルの決定である。モーションベクトルを選択することに対する共通の距離は、圧縮される画像の各ブロックと、前の画像の一組の候補ブロック間のピクセル毎の最も低い平均差を備えたベクトルを見出すためである。候補ブロックは圧縮されるブロックの位置近傍にある全てのブロックのセットである。画像のサイズやブロックのサイズ及び近傍のサイズ全てがモーション推定アルゴリズムの実行時間に影響を及ぼす。
単純なブロックベースのモーション推定は、圧縮すべき画像の各サブ画像を基準画像と比較する。基準画像はビデオシーケンスにおいて被写体像の前にあるか、または後に続いているものであってよい。いずれの場合にも、被写体像がデコンプレッションされる前に、減圧システムにとって基準画像を利用可能であることが知られている。圧縮下の画像の一ブロックを基準画像の候補ブロックと比較することについて下記に説明する。
被写体像内の各ブロックに対して、基準画像内の対応する位置付近でサーチを実施する。通常、画像の各カラー成分(例えばYUV)が別々に分析される。時には、モーション推定が1つの成分、特に輝度についてのみ実施される。ピクセルごとの平均差はその被写体像と、基準画像のサーチゾーン内にある全ての可能なブロック間で計算される。その差はピクセル値の大きさの差の絶対値である。その平均は一対のブロックにおけるN2のピクセル(Nはブロックの寸法)全体の合計に比例する。最も小さい平均ピクセル差を作り出す基準画像のブロックが、被写体像のそのブロックに対するモーションベクトルを限定する。
以下の例は簡単な形態のモーション推定アルゴリズムを示しており、小さな特定用途の機能単位のためにTIEを使用するアルゴリズムを最適化する。この最適化は10の因数より大きなスピードアップを生じさせ、多くのビデオ用途のためにプロセッサベースの圧縮を実現可能にする。それは高レベル言語でのプログラミングの容易さと、特殊目的のハードウエアの効率とを組み合わせた構成可能なプロセッサの能力を示している。
この例は、古い画像と新しい画像を各々表すために、2つのマトリックス、OldBとNewBを使用する。画像のサイズはNXとNYによって決定される。ブロックサイズはBLOCKXとBLOCKYによって決定される。従って、画像はNX/BLOCKX×NY/BLOCKYブロックで構成される。1つのブロックのサーチ領域はSEARCHXとSEARCHYによって決定される。最良のモーションベクトル及び値がVectX、VectY及びVectBに格納される。ベース(基準)のインプリメンテーションによって計算される最良のモーションベクトル及び値がBaseX、BaseY及びBaseBに格納される。これらの値は命令拡張を使用するインプリメンテーションによって計算されるベクトルをチェックするために使用される。これらの基本的な定義は以下のCコードセグメントにおいてデータ捕捉される。
モーション推定アルゴリズムは3つの入れ子構造のループで構成される。
1.古い画像内の各ソースブロックに対して。
2.ソースブロックの周囲領域内の新しい画像の各目的ブロックに対して。
3.各ピクセルペア間の絶対差を計算する。
このアルゴリズムに対する完全なコードを下記に記す。
基本的なインプリメンテーションが単純である一方、それはこのブロック対ブロック比較の本質的な平行関係の多くを利用し損ねている。構成可能なプロセッサアーキテクチャは、このアプリケーションのかなりのスピードアップを許容するために2つの主なツールを提供する。
第一に、命令セットアーキテクチャはメモリ内の未整列フィールドの急速抽出を可能にするために、強力な漏斗状シフティング基関数を含む。これはピクセル比較の内部ループがメモリから効率的に隣接するピクセル群をフェッチできるようにする。このループは同時に4つのピクセル(バイト)を操作するために書き換えることができる。特に、この例の目的のために、一度に4つのピクセルペアの絶対差を計算するために新しい命令を定義することが望ましい。しかしながら、この新しい命令を定義する前に、このような命令を利用できるようにアルゴリズムを再実用化することが必要である。
この命令の存在が、ループ展開が同様に魅力的になるような内部ループピクセル差計算の改善を許容する。新しい絶対差合計命令と効率的なシフティングを利用するために、内部ループに対するCコードが書き直される。基準画像の4つの重なり合うブロックの部分を同じループにおいて比較することができる。SAD(x、y)は付加された命令に対応する新しい組込み関数である。SRC(x、y)は、SARレジスタに格納されているシフト量分だけ、xとyの連結状態の右シフトを実施する。
SAD命令を使用するモーション推定の高速バージョン
このインプリメンテーションは最後の新規命令をエミュレートするために以下のSAD関数を使用する。
この新規インプリメンテーションをデバッグするために、以下のテストプログラムを使用して、モーションベクトルと、新規インプリメンテーションとベースインプリメンテーションによって計算された値とを比較する。
この簡単なテストプログラムは開発プロセスを通して使用される。ここで従わなければならない1つの重要な慣例は、エラーが検出された場合、主プログラムが0に復帰しなければならず、その他の場合は1に復帰しなければならないことである。
TIEの使用が新規命令の急速な特定化を可能にする。構成可能なプロセッサ発生器は、ハードウエアインプリメンテーション及びソフトウエア開発ツールの両方においてこれらの命令を完全に実行することができる。ハードウエア統合は新しい関数のハードウエアデータパスへの最適の統合化を生じさせる。C及びC++コンパイラ、アッセンブラ、象徴的デバッガ、プロファイラ及び正確なサイクルの命令セットシミュレータにおいて、構成可能なプロセッサソフトウエア環境が新しい命令を完全にサポートする。ハードウエアとソフトウエアの急速な再生が、特定用途の命令をアプリケーション加速用の素早く確実なツールにする。
本例は簡単な命令を実行して、4つのピクセルに対して、ピクセル区別化、絶対値及び累算を平行して実施するためにTIEを使用する。この簡単な命令は11の基本的な操作(従来のプロセスでは、別々の命令を必要とするかもしれない)を1つの原子操作として実施する。以下はその完全な説明である。
この説明は新規命令を定義するのに必要な最低のステップを表している。まず第一に、その命令のために新しい操作符号を定義する必要がある。この場合、新しい操作符号SADは、CUST0のサブ操作符号として定義される。上記のように、CUST0は以下のように予め定義されている。
ORSTはトップレベルの操作符号であり、CUST0はORSTのサブ操作符号であり、次にSADはCUST0のサブ操作符号であることが容易に解る。この操作符号の階層組織が操作符号スペースの論理的グループ化と管理を許容する。覚えておかなければならない1つの重要な事は、CUST0(及びCUST1)はユーザが新規命令を付加するために取って置かれる操作符号スペースとして定義されることである。ユーザはTIE記述の将来の再利用可能性を保証するために、この割り当てられた操作符号スペース内に留まることが好ましい。
このTIE記述における第2のステップは、新規命令SADを含む新規命令クラスを定義することである。これはSAD命令のオペランドが定義される場合である。この場合、SADは3つのレジスタオペランドと、送出先レジスタarrと、ソースレジスタars及びartよりなる。前述のように、arrは命令のrフィールドによって索引付けられたレジスタとして定義され、ars及びartは命令のs及びtフィールドによって索引付けられたレジスタとして定義される。
この記述における最後のブロックは、SAD命令用の正式の意味論的定義を与える。この記述は組み合わせ論理を説明するために、Verilog HDLのサブセットを使用している。ISSが如何にしてSAD命令をシミュレートし、如何にして付加的な回路が統合され、構成可能なプロセッサハードウエアに付加されて、新規命令をサポートするかを正確に定義するのがこのブロックである。
次に、TIE記述がデバッギングされて、前述のツールを用いて検証される。TIE記述の正確さを確証した後、次のステップはハードウエアサイズ及び性能に対する新規命令の影響力を推定することである。上記のように、これは、例えば、Design Compiler(登録商標)を使用して実施できる。Design Compiler(登録商標)が完了すると、ユーザは詳細な面積及び速度に関するレポートの出力を見ることができる。
TIE記述が正しく効率的であることを確証した後、新しいSAD命令をサポートする構成可能なプロセッサを構成し組み立てる時である。これは上述のようにGUIを使用して実施される。
次に、モーション推定コードが構成可能なプロセッサ用のコードに編集され、そのプロセッサはそのプログラムの正確さを確証するために、またより重要なことには、その性能を測定するために、命令セットシミュレータを使用する。これは3つのステップ:シミュレータを使用してテストプログラムを実行する、ベースインプリメンテーションだけを実行して命令カウントを得る、そして新しいインプリメンテーションだけを実行して命令カウントを得る、ステップにおいて行われる。
以下は第2のステップのシミュレーション出力である。
以下は最後のステップのシミュレーション出力である。
2つのレポートから、約4倍のスピードアップが発生したことが解る。構成可能なプロセッサの命令セットシミュレータは他の多くの有用な情報を提供できることに注意されたい。
プログラムの正確さ及び性能を確証した後、次のステップは上述のようにVerilogシミュレータを使用してテストプログラムを実行することである。当業者なら、アペンディクスCのメイクファイル(アペンディクスCに関連ファイルも示されている)からこのプロセスの詳細を収集することができるであろう。このシミュレーションの目的は、新しいインプリメンテーションの正確さを更に確証し、またより重要なことは、このテストプログラムをこの構成されたプロセッサ用のリグレッションテストの一部とすることである。
最後に、プロセッサ論理は、例えば、Design Compiler(登録商標)を使用して統合し、例えばApollo(登録商標)使用して配置及び経路選択することができる。
本例は、説明を明確かつ簡略にするために、ビデオ圧縮及びモーション推定の簡略化された図を例に取ってきた。実際には、標準の圧縮アルゴリズムには多くの付加的なニュアンスがある。例えば、MPEG2は典型的にモーション推定を行い、サブピクセルの解像度で補正を実施する。ピクセルの2つの隣接した列または縦列を平均化して、その2つの隣接した列または行間の中間の仮想位置に対して補間された一組のピクセルを作り出すことができる。並列したピクセル平均化命令はTIEコードの3つまたは4つのラインで容易に実用化されるので、構成可能プロセッサのユーザが定義する命令はここでも有用である。1つの列内にあるピクセル間の平均化はプロセッサの標準命令セットの効率的な配列操作を使用する。
このように、簡単な絶対差合計命令の組込みは数百ゲートを付加するが、10因数より大きくモーション推定性能を改善する。この加速は最終的なシステムのコスト及び電力効率におけるかなりの改善を表す。更に、新しいモーション推定命令を含むためのソフトウエア開発ツールの縫い目なしの拡張は、急速なプロトタイピング及び性能分析及び完全なソフトウエアアプリケーション解決法のリリースを許す。本発明の解決法は特定用途のプロセッサ構成を簡単な、確実な、そして完全なものにし、最終的なシステム製品のコスト、性能、機能性及び電力効率の劇的なエンハンスメントを提供する。
機能的なハードウエアユニットの付加に焦点を当てた例として、図6に示した基本的な構成を考えてみよう。この構成はプロセッサ制御機能と、プログラムカウンタ(PC)と、ブランチセレクションと、命令メモリまたはキャッシュ及び命令デコーダと、主レジスタファイル、バイパスマルチプレクサ、パイプラインレジスタ、ALU、アドレス発生器及びキャッシュ用データメモリを含む基本的な整数データパスとを含んでいる。
倍率器論理の存在が「倍率器」パラメータが設定されていることを条件として、HDLが書き込まれ、図7に示すように、新しいパイプライン段階として倍率器装置が付加される(正確な特例をサポートすべきである場合、特例処理に対する変更が必要であるかもしれない)。もちろん、倍率器を利用するための命令は好ましくは新しいユニットに付随して付加される。
第2の例として、積算・累算ユニット等のデジタル信号プロセッサのために、完全なコプロセッサを図8に示した基本的な構成に付加してもよい。これは、拡張された命令からのレジスタソース及び送出先の復号化と、制御信号に対する適切なパイプライン遅延の付加と、レジスタ送出先論理の拡張と、累積レジスタからの動きに対するレジスタバイパスマルチプレクサ用の制御の追加と、命令結果用の可能なソースとして積算・累算ユニットの包含とを含む、積算・累算演算用の復号化制御信号の追加等のプロセッサ制御の変化を必然的に伴う。それに加えて、それは付加的なアキュムレータレジスタと、積算・累算アレイと、主レジスタソース用のソースセレクトマルチプレクサとを伴う積算・累算ユニットの追加を必要とする。更に、コプロセッサの追加は、累積レジスタからのソースを取り入れるために、累積レジスタからのレジスタバイパスマルチプレクサの延長と、倍率器の結果からのソースを取り入れるために、ロード/アラインメントマルチプレクサの延長とを必然的に必要とする。やはり、システムは好ましくは実際のハードウエアと共に新しい機能ユニットを使用するための命令を付加する。
デジタル信号プロセッサとの関連で特に有用である別のオプションは、浮動小数点ユニットである。例えば、IEEE754単精度浮動小数点演算基準を実用化するこのような機能単位を、それにアクセスするための命令と共に付加してもよい。浮動小数点ユニットは、例えば、音声圧縮・減圧等のデジタル信号処理アプリケーションにおいて使用しても良い。
更にシステムのフレキシビリティの別の例として、図9に示した4kBメモリインターフェイスを考えてみよう。本発明の構成可能性を使用して、コプロセッサレジスタ及びデータパスは主整数レジスタファイル及びデータパスより幅広くても狭くても良く、ローカルメモリ幅は、メモリ幅が最も幅広いプロセッサまたはコプロセッサ幅に等しくなるように変化してもよい(読取及び書込みに対するメモリのアドレス指定はそれに従って調節される)。例えば、図10は同じアレイにアドレス指定するプロセッサ・コプロセッサの組み合わせに対して32ビットのロード動作と記憶装置をサポートするが、コプロセッサは128ビットのロード動作と記憶装置をサポートする、プロセッサ用のローカルメモリシステムを示している。これはTPPコードを使用して実用化できる。
但し、SBytesは、書き込み信号W1の制御下にデータバスD1を用いるバイトアドレスA1における幅B1バイトとして、あるいは対応するパラメータB2、A2、D2、およびW2を使用してアクセスされる全メモリサイズである。Selectにより定義される一組の信号だけが所定のサイクルにおいて活動している。TPPコードはメモリバンクのコレクションとしてメモリを実用化する。各バンクの幅は最小のアクセス幅によって与えられ、またバンク数は最大及び最小のアクセス幅の比率によって与えられる。ループ用Aは各メモリバンク及びその関連する書き込み信号、つまり書き込みイネーブル及び書込みデータを例示するために使用される。ループ用第2は全てのバンクから読み取られたデータを1つのバスに集めるために使用される。
図11は基本の機器構成にユーザ限定命令を含めた例を示している。この図に示すように、ALUのものと同様のタイミングとインターフェイスを備えたプロセッサパイプラインに簡単な命令を付加することができる。この方法で付加される命令は如何なる機能停止も特例も発生させてはならず、如何なる状態も含んではならず、2つの正常なソースレジスタ値と命令ワードのみを入力として使用し、1つの出力値だけを発生させなければならない。しかしながら、TIE言語がプロセッサ状態を指定する規定を有している場合、このような制限は必要ではない。
図12はこのシステムの下でのユーザが定義したユニットのインプリメンテーションの別の例を示している。この図に示した機能単位、ALUの8/16パラレルデータユニットエクステンション、は以下のISAコードから発生される。
本発明の別の局面において特に関心のあることは、設計者が定義した命令実行ユニット96である。なぜなら、これらの修正プロセッサ状態を含むTIE限定命令が復号化され実行されるのがここにおいてであるからである。本発明のこの局面において、多数の組立てブロックが言語に付加され、新規命令によって読取り・書込みを実施できる付加的なプロセッサ状態を宣言することができる。これらの「状態」ステートメントはプロセッサ状態の付加を宣言するために使用される。宣言はキーワード状態で始まる。状態ステートメントの次のセクションはビット及び状態のサイズと数、及び状態のビットがどのように索引付けられるかを記述する。それに続くセクションは他の記述セクションにおける状態を特定するために使用される状態名である。「状態」ステートメントの最後のセクションはその状態に関連する属性リストである。例えば、
は3つの新しいプロセッサ状態、DATA、KEYC及びKEYDを定義する。状態DATAは64ビット幅であり、ビットは63から0へと索引付けられる。KEYC及びKEYDは共に28ビット状態である。DATAはどのコプロセッサにデータDATAが属しているかを指示するコプロセッサ番号属性cpnを有する。
属性「autopack」は、DATAの値をソフトウエアツールによって読取り、書き込むことができるように、状態DATAがユーザレジスタファイル内にあるレジスタに自動的に配置されることを示す。
user_registerセクションは、ユーザレジスタファイル内のレジスタに対する状態のマッピングを示すために定義される。1つのuser_registerセクションはキーワードuser_registerで始まり、次にレジスタ番号を示す数字が続き、レジスタ上に配置されるべき状態ビットを示す式で終了する。例えば、
は、DATAの下位ワードが第1のユーザレジスタファイルにマッピングされ、上位ワードが第2のユーザレジスタファイルにマッピングされることを明記している。次の2つのユーザレジスタファイルのエントリはKEYC及びKEYDの値を保持するために使用される。明らかに、このセクションにおいて使用される状態情報は、stateセクションのものと一致していなければならない。ここで、コンピュータプログラムによって一貫性を自動的にチェックすることができる。
本発明の別の実施形態では、ユーザレジスタファイルエントリに対する状態ビットのこのような割り当ては、ビンパッキングアルゴリズムを使用して自動的に引き出される。更に別の実施形態では、例えば、上向きの互換性を確実にするために、手動及び自動割当の組み合わせを使用することができる。
命令フィールドステートメントfieldはTIEコードの可読性を改良するために使用される。フィールドは共にグループ分けされ、1つの名前で参照符が付けられる他のフィールドのサブセットまたは連接である。1つの命令における完全なビットセットが最高レベルのスーパーセットフィールドinstであり、このフィールドは更に小さなフィールドに分けることができる。例えば、
は、最高レベルのフィールドinstのサブフィールド(各々ビット8〜11、12〜15)として2つの4ビットフィールド、x及びyを定義し、x及びyフィールドの連接として8ビットのフィールドxyを定義する。
ステートメントopcodeは特殊なフィールドを符号化するための操作符号を定義する。このように定義された操作符号により使用されるオペランド、例えば、レジスタまたは即時定数を指定するための命令フィールドは、まずフィールドステートメントで定義され、次にオペランドステートメントで定義されなければならない。
は、前に定義された操作符号CUST0(4’b000は4ビット長のバイナリ定数0000を示す)に基づいて、2つの新しい操作符号、acs及びadselを定義する。好ましいコアISAのTIE仕様書は、その基本的定義として、以下のステートメントを有する。
このように、acs及びadselの定義は、以下により各々表される命令復号化論理をTIEコンパイラに発生させる。
命令オペランドステートメントoperandはレジスタ及び即時定数を特定する。しかしながら、オペランドとして1つのフィールドを定義する前に、それは上述のように1つのフィールドとして以前に定義されていなければならない。オペランドが即時定数である場合、その定数の値をオペランドから発生させることができるし、あるいは下記のように定義される、以前に定義された定数表からその定数の値を取り出すことができる。例えば、即時オペランドを符号化するために、TIEコード
は有符号数字及びオフセットフィールドに格納された数の4倍であるオペランドoffsets4を保持する、オフセットという名前の18ビットフィールドを定義する。operandステートメントの最後の部分は、当業者にとっては自明であるように、組み合せの回路を説明するためのVerilog(登録商標)HDLのサブセットにおける計算を実施するために使用されるサーキットリを実際に説明している。
ここで、wireステートメントは32ビット幅のtという名前の一組の論理回線を定義している。wireステートメントの後の最初のassignステートメントは、論理回線を駆動する論理信号が右にシフトされたoffsets4定数であることを明記しており、第2のassignステートメントはtの下位18ビットがoffsetフィールドに置かれることを明記している。最初のassignステートメントはoffsetの1連接としてoffsets4オペランドの値と、そのサインビット(bit17)の14の反復及びそれに続く2ビットの左シフトを直接指定している。
は、定数のアレイprimeを限定するためにtableステートメントを利用し(テーブル名に続く数字はそのテーブル内の要素の数である)、テーブルprimeへのインデックスとしてそのオペランドを使用してそのオペランドprime_sを符号化する(索引付けを定義する際にVerilog(登録商標)ステートメントを使用することに注意)。
命令クラスステートメントiclassは共通のフォーマットでのオペランドに操作符号を関連付ける。iclassステートメントにおいて定義される全ての命令は同じフォーマットとオペランド使用法を有する。命令クラスを定義する前に、その成分を、まずフィールドとして、次に操作符号及びオペランドとして定義しなければならない。例えば、操作符号acs及びadselを定義する前述の例において使用したコード上に構築する際に、付加的なステートメント
は3つのレジスタオペランドart・ars・arr(やはりこの場合も、この定義においてVerilog(登録商標)ステートメントを使用することに注意)を定義するためにoperandステートメントを使用する。次に、iclassステートメント
はオペランドadsel及びacsが、命令viterbiの共通のクラスに属し、それは入力として2つのレジスタオペランドart及びarsを取り、レジスタオペランドarrに出力を書き込むことを明記している。
本発明において、命令の状態アクセス情報の指定を許容するために命令クラスステートメント「iclass」が修正される。それはキーワード「iclass」で始まり、次に命令クラス名、続いてその命令クラスに属する操作符号のリスト及びオペランドアクセス情報のリストが続き、状態アクセス情報のために新たに定義されたリストで終了する。例えば、
は幾つかの命令クラスと、如何に様々の新規命令がその状態にアクセスするかを定義している。iclass内の命令によって、その状態が読み取られ、書き込まれ、または修正(読取り及び書込み)されることを示すために、キーワード「in」、「out」及び「inout」が使用される。この例では、状態「DATA」は命令「LDDATA」によって読み取られ、状態「KEYC」及び「KEYD」は命令「STKEY」によって書き込まれ、「KEYC」と「KEYD」と「DATA」が命令「DES」によって修正される。
命令セマンティックステートメントsemanticはオペランドをコード化するために使用されるVerilog(登録商標)の同じサブセットを使用して、1つ以上の命令の所作を説明する。1つのセマンティックステートメントにおいて多数の命令を定義することにより、一部の共通の表現が共有され、ハードウエアインプリメンテーションをより効率的にすることができる。セマンティックステートメントにおいて許容される変数は、ステートメントの操作符号リスト内で定義される操作符号用のオペランドであり、操作符号リスト内で指定される各操作符号用の単ビットの変数である。この変数は操作符号として同じ名前を有し、操作符号が検出された時に1と評価する。それは対応する命令の存在を示すために、計算セクション(Verilog(登録商標)サブセットセクション)において使用される。
上記コードの第1セクションはBYTESWAPと呼ばれる新しい命令用の操作符号を定義する。
ここで、新しい操作符号BYTESWAPはCUST0のサブ操作符号として定義される。下記において詳述するXtensa(登録商標)の命令セットアーキテクチャ参照マニュアル(Instruction Set Architecture Reference Manual)から、CUST0が以下のように定義される。
但し、op0及びop2は命令内のフィールドであることが解る。操作符号は典型的に階層的に組織化される。ここで、ORSTはトップレベルの操作符号であり、CUST0はORSTのサブ操作符号であり、次にBYTESWAPはCUST0のサブ操作符号である。この操作符号の階層組織は操作符号スペースの論理的グループ分けと管理を許容する。
第2の宣言はBYTESWAP命令が必要とする付加的なプロセッサ状態を宣言する。
ここで、COUNTは32ビット状態として宣言され、SWAPは1ビット状態と宣言される。TIE言語はCOUNT内のビットが31から0に索引付けられ、ビット0が最下位ビットであることを明記している。
Xtensa(登録商標) ISAは、特殊なシステムレジスタをセーブしリストアするために、2つの命令、RSRとWSRを提供する。同様に、それはTIE内で宣言される状態をセーブしリストアするために、2つの他の命令、RURとWUR(下記において詳述する)を提供する。TIEにおいて宣言された状態をセーブ・リストアするために、RURとWUR命令がアクセスすることができるユーザレジスタファイルへのエントリに対して、その状態のマッピングを指定しなければならない。上記コードの以下のセクションがこのマッピングを指定し、
以下の命令がa2に対するCOUNTの値とa5に対するSWAPの値をセーブするであろう。
この機構は状態の内容を検証するためにテストプログラムにおいて実際に使用される。Cでは、上記2つの命令は以下のように見えるであろう。
TIE記述における入れ子セクションは、新規命令BYTESWAPを含む新規命令クラスの定義である。
但し、iclassはキーワードであり、bsはiclassの名前である。次の節はこの命令クラス(BYTESWAP)における命令のリストを作成する。thanの後の節はこのクラス内の命令によって使用されるオペランド(この場合、入力オペランドarsと出力オペランドarr)を指定する。iclass定義における最後の節は、このクラスにおける命令によってアクセスされる状態を指定する(この場合、命令は状態SWAPを読み取り、状態COUNTを読み取って書き込むであろう)。
上記コードの最後のブロックはBYTESWAP命令のために正式の意味論的定義を与える。
この記述は組合せ論理を説明するためにVerilog HDL用のサブセットを使用する。命令セットシミュレータがBYTESWAP命令をどのようにシミュレートし、付加的なサーキットリがどのように合成されてXtensa(登録商標)プロセッサハードウエアに付け加えられ、新しい命令をサポートするかを正確に定義するのがこのブロックである。
本発明において、ユーザ定義状態を実用化する際に、状態に格納されている情報にアクセスするための他の変数と同様に、宣言された状態を使用することができる。式の右手側に現れる状態識別子がその状態からの読取りを示す。状態への書込みは、状態識別子に値または式を割り当てることによって行われる。例えば、以下のセマンティックコードセグメントは命令によって状態がどのようにして読み取られ、書き込まれるかを示している。
コア命令及び構成オプションの選択を介して利用できる命令として、構成可能プロセッサ内で実用化することができる命令の例を説明する目的のために、テンシリカ社(Tensilica、Inc.)のXtensa(登録商標)命令セットアーキテクチャ(Instruction Set Architecture)(ISA)参照マニュアル、改訂版1.0がここに参照して組み込まれる。更に、このようなユーザ定義命令を実用化するために使用することができるTIE言語命令の例を示すために、やはりテンシル社の命令エクステンション言語(TIE)参照マニュアル、改訂版1.3がここに参照して組み込まれる。
TIE記述から、例えば、付属書Dに示したものと同じようなプログラムを使用して、命令を実行する新しいハードウエアを発生させることができる。付属書Eは組込み関数として新しい命令をサポートするために必要なヘッダファイル用のコードを示している。
構成仕様書を使用して、以下のものを自動的に発生させることができる。
・ プロセッサ60の命令デコード論理;
・ プロセッサ60用の非合法的命令検出論理;
・ アッセンブラの特定ISA用部分;
・ コンパイラのための特定ISA用サポートルーチン;
・ (デバッガにより使用される)デアッセンブラの特定ISA用部分;及び・ シミュレータの特定ISA用部分。
図16はこれらのソフトウエアツールの特定ISA用部分をどのように発生させるかを示す図である。ユーザが作成したTIE記述ファイル400から、TIEパーサプログラム410が幾つかのプログラム用のCコードを発生させ、ユーザが定義した命令及び状態に関する情報のために、そのプログラムの各々が、ソフトウエア展開ツールの1つ以上によってアクセスされるファイルを作り出す。例えば、プログラムtie2gcc420はxtensa−tie.hと呼ばれるCヘッダファイル470を発生させ、このファイルは新しい命令用の組込み関数定義を含んでいる。プログラムtie2isa430は動的接続ライブラリ(DLL)480を発生させ、これはユーザが定義した命令フォーマットに関する情報を含み、(下記に述べるWilsonらの出願では、これは効果的にここで論じるエンコード・デコードDLLの組み合わせである)。プログラムtie2iss440は性能モデル化ルーチンを発生させ、命令セマンティクスを含むDLL490を作り出し、それは、Wilsonらの出願において論じられているように、シミュレータにより使用されるシミュレータDLLを作り出すためにホストコンパイラによって使用される。プログラムtie2ver450は適切なハードウエア記述言語でユーザが定義した命令に必要な記述500を作り出す。最後に、プログラムtie2xtos460はRUR及びWUR命令が使用するセーブ・リストアコード510を作り出す。
命令及びそれらがどのようにして状態にアクセスするかについての正確な記述が、既存の高性能マイクロプロセッサ設計にプラグインできる効率的な論理を作り出すことを可能にする。本発明の本実施形態との関連で説明した方法は、特にこれらの新しい命令を処理し、それらは1つ以上の状態レジスタから/へと読み取って、書き込む。特に、本実施形態は文脈上状態レジスタ用のハードウエア論理を如何にして引き出すかを示しており、高性能を達成するための技術として、全てパイプライン方式を使用するマイクロプロセッサインプリメンテーションスタイルのクラス。
図17に示したようなもの等のパイプライン式インプリメンテーションにおいて、状態レジスタは典型的に何度も重複しており、各々の具体化が特定のパイプライン段階における状態値を表している。本実施形態では、1つの状態が基礎をなすコアプロセッサインプリメンテーションと矛盾しない多数のレジスタのコピーに移される。やはり基礎をなすコアプロセッサインプリメンテーションと矛盾しない方法で、付加的なバイパス及びフォワード論理も発生される。例えば、3つの実行段階よりなるコアプロセッサインプリメンテーションを目標にするために、本実施形態は1つの状態を図18に示すように接続される3つのレジスタへと移すであろう。このインプリメンテーションでは、各レジスタ610〜630が3つのパイプライン段階の1つにおける状態値を表す。ctrl−1と、ctrl−2とctrl−3は、対応するフリップフロップ610〜630においてデータラッチングを可能化するために使用される制御信号である。
基礎をなすプロセッサインプリメンテーションと矛盾なく状態レジスタの多数のコピーを動作させるために、付加的な論理と制御信号が必要である。「矛盾なく」とは、割込みや特例・パイプラインの機能停止などの状態下で、状態が残りのプロセッサと全く同じようにふるまうべきであることを意味する。典型的に、所定のプロセッサインプリメンテーションは様々なパイプライン状態を表す或る信号を限定する。このような信号はパイプライン状態のレジスタを適切に作動させるために必要である。
典型的なパイプライン式インプリメンテーションにおいて、実行ユニットは多数のパイプライン段階よりなる。1つの命令の計算はこのパイプライン内の多数の段階において実施される。命令ストリームは制御論理により方向付けられるようなシーケンスでパイプラインを通って流れる。所定の時間に、パイプラインにおいて実行されるn個の命令があってよく、nは段階の数である。やはり本発明を使用して実用化できるスーパースカラープロセッサでは、パイプライン内の命令の数はn・wであってよく、wはプロセッサのイシュー幅である。
制御論理の役割は、命令間の依存性に従い、命令間の干渉が散らされることを保証することである。1つの命令が初期の命令により計算されたデータを使用する場合、パイプラインを機能停止させることなく後の命令へとデータを進めるためには特殊なハードウエアが必要である。割込みが発生した場合、パイプライン内の全ての命令を削り、後に再実行することが必要である。1つの命令が必要とするその入力データまたは計算用ハードウエアが利用できないためにその命令を実行できない場合、その命令は機能停止されなければならない。命令を機能停止させる1つの費用効果的な方法は、その第1実行段階でその命令を削り、次のサイクルでその命令を再実行することである。この技術の結果がパイプライン内に無効な段階(バブル)を作り出している。このバブルが他の命令と共にパイプラインを流れる。命令が遂行されるパイプラインの終りで、バブルが捨てられる。
上記の3段階パイプラインの例を使用して、このようなプロセッサ状態の典型的なインプリメンテーションは図19に示した付加的な論理と接続を必要とする。
正常な状態では、1つの段階で計算された値は、データ依存性により導入されるパイプライン機能停止の数を減少させるために、その値がパイプラインの終りに達するのを待つことなく、直ちに次の命令へと進められるであろう。これは、第1のフリップフロップ610の出力を直接セマンティックブロックへと送り、それを次の命令によって直ちに使用できるようにすることによって達成される。割込みや特例等の異常な状態を処理するために、該インプリメンテーションは以下の制御信号、Kill_1、Kill_all、Valid_3を必要とする。
信号「Kill_1」は、収益のために必要とするデータを有していない等の理由のために、現在第1パイプライン段階110にある命令を削らなければならないことを示している。一旦その命令が削られると、次のサイクルにおいて再度試みられるであろう。信号「Kill_all」は、それらの前の命令が特例を発生させたか、または割込みが発生した等の理由のために、現在第1パイプライン段階110にある全ての命令を削らなければならないことを示している。信号「Valid_3」は、現在最後の段階630にある命令が有効であるか否かを示している。このような条件は、しばしば第1のパイプライン段階610内の命令を削り、パイプラインにバブル(無効な命令)を生じさせた結果である。「Valid_3」は単に3番目のパイプライン段階における命令が有効であるかバブルであるかを示している。明らかに、有効な命令だけをラッチすべきである。
図20は状態レジスタを実用化するために必要な付加的な論理及び接続を示している。更に、この状態レジスタインプリメンテーションが上記の要件を満たすように、信号「ctrl−1」、「ctrl−2」、および「ctrl−3」を駆動するための制御論理を如何にして構築するかも示している。以下は図19に示したような状態レジスタを実用化するために自動的に発生されるサンプルHDLコードである。
上記パイプライン式状態レジスタモデルを使用して、セマンティックブロックがその入力として状態を指定する場合、状態の現在の状態値が入力変数としてセマンティックブロックへと送られる。セマンティックブロックが1つの状態に対する新しい値を発生させるための論理を有している場合、出力信号が作られる。この出力信号はパイプライン式状態レジスタへの次の状態入力として使用される。
本実施形態は多数のセマンティック記述ブロックを許容し、その各々が多数の命令に対する所作を説明する。この無制限の記述スタイルの下で、セマンティックブロックの1つのサブセットだけが所定の状態に対する次の状態出力を作り出すことができる。更に、所定の時間にそれがどの命令を実行しているかに応じて条件付きで、所定のセマンティックブロックが次の状態出力を作り出すこともできる。その結果、全てのセマンティックブロックからの次の状態出力を組み合わせて、パイプライン式状態レジスタに対する入力を形成するために、付加的なハードウエア論理が必要である。本発明の本実施形態では、このブロックがその状態に対する新しい値を作り出したかどうかを示す各セマンティックブロックのために、1つの信号が自動的に引き出される。別の実施形態では、このような信号を、設計者が指定するように残すことができる。
図20は幾つかのセマンティックブロックs1〜snからの状態の次の状態出力を如何に組み合わせ、状態レジスタに入力するために如何に適切にその1つを選択するかを示している。この図において、op1_1及びop1_2は第1のセマンティックブロックに対する操作符号信号であり、op2_1及びop2_2は第2のセマンティックブロックに対する操作符号信号である。セマンティックブロックiの次の状態出力はsiである(多数の状態レジスタがある場合、そのブロックに対して多数の次の状態出力がある)。セマンティックブロックiがその状態に対して1つの新しい値を作り出したことを示す信号がsi_weである。信号s_weはいずれかのセマンティックブロックがその状態に対して1つの新しい値を作り出すかどうかを示しており、書込みイネーブル信号としてパイプライン式状態レジスタへの入力として使用される。
多数のセマンティックブロックの表現力が1つのセマンティックブロックのものより低くても、それは、典型的に関連する命令を1つのブロックにグループ分けすることにより、より多くの構造化した記述を与える1つの方法を提供する。多数のセマンティックブロックは、命令が実行される更に制限された範囲のために、命令効果のより簡単な分析へと導くことができる。他方、1つのセマンティックブロックが多数の命令の所作を説明することに対して、しばしば多くの理由がある。最も頻繁に、それはこれらの命令のハードウエアインプリメンテーションが共通の論理を共有するからである。多数の命令を1つのセマンティックブロックで説明することは、通常、より効率的なハードウエア設計ハードウエア設計へと導く。
割込み及び特例のために、ソフトウエアが状態の値をデータメモリへとリストアし、データメモリからロードすることが必要である。新しい状態及び新しい命令の正式の記述に基づいて、このようなリストア・ロード命令を自動的に発生させることができる。本発明の本実施形態では、リストア・ロード命令用の論理が2つのセマンティックブロックとして自動的に発生され、それは次に他のブロックと全く同様に、反復的に実際のハードウエアに移すことができる。例えば、以下の状態宣言書から、
以下のセマンティックブロックを発生させて、「DATA」、「KEYC」、および「KEYD」の値を汎用レジスタに読み込むことができる。
図21はこの種のセマンティックロジックに対応する論理のブロック線図を示している。入力信号「st」を様々な定数と比較して様々な選択信号を形成し、それらはuser_register仕様書と矛盾しない方法で、状態レジスタから或るビットを選択するために使用される。前の状態宣言書を使用して、DATAのビット32を第2のユーザレジスタのビット0に配置する。従って、この図においてMUXの第2入力はDATA状態の32番目のビットに接続されるべきである。
以下のセマンティックブロックを発生させて、状態「DATA」、「KEYC」、「KEYD」に汎用レジスタからの値を書き込むことができる。
図22はi番目のユーザレジスタのk番目のビットに配置される場合の、状態Sのj番目のビットに対する論理を示している。WUR命令内のuser_register番号「st」が「i」である場合、「ars」のk番目のビットがS[j]レジスタ内へとロードされ、他の場合には、S[j]の元の値が再循環される。更に、状態Sのどのビットも再ロードされない場合、信号S_weが可能化される。
TIEのuser_register宣言書が、状態宣言書によって定義された付加的なプロセッサ状態から、これらのRUR及びWUR命令により使用される識別子へのマッピングを指定して、TIE命令とは別個にこの状態を読み取り、書き込む。
付属書FはRUR及びWUR命令を発生させるコードを示している。
RUR及びWURの主な目的はタスク切替えのためである。多重タスク環境では、或るスケジューリングアルゴリズムに従って、多数のソフトウエアタスクがプロセッサを共有する。活動的である場合、タスクの状態はプロセッサレジスタ内にある。スケジューリングアルゴリズムが別のタスクへの切替えを決定した場合、プロセッサレジスタに保持されている状態がメモリにセーブされ、別のタスクの状態がメモリからプロセッサレジスタへとロードされる。Xtensa(登録商標)命令セットアーキテクチャ(ISA)はISAによって定義される状態を読み取り、書き込むためのRSR及びWSR命令を含む。例えば、以下のコードはタスク「メモリにセーブ」の一部である。
また以下のコードはタスク「メモリからリストア」の一部である。
但し、SAR、LCOUNT、LBEG、LENDはコアXtensa(登録商標) ISAのプロセッサ状態レジスタ部分であり、ACCLO、ACCHI、MR_0、MR_1、MR_2、およびMR_3はMAC16 Xtensa(登録商標) ISAオプションの一部である。(レジスタはパイプラインインターロックを避けるために、ペアでセーブ・リストアされる。)
設計者がTIEで新しい状態を定義する場合、上記の状態と同様に、タスク切替えされなければならない。1つの可能性は、設計者が単にタスクスイッチコード(その一部が上述したものである)の編集に進み、次に上記コードに類似したRUR/S32I及びL32I/WUR命令を付加することであろう。しかしながら、ソフトウエアが自動的に発生され、構成によって正しい場合、構成可能プロセッサが最も効果的である。このように、本発明は自動的にタスクスイッチコードを増大させる機構を含んでいる。以下のトップラインが上記セーブタスクに付加される。
また以下のラインが上記リストアタスクに付加される。
最後に、メモリ内のタスク状態エリアはユーザレジスタ記憶装置のために割り当てられる付加的なスペースを有していなければならないし、またタスクセーブポインタのベースからのこのスペースのオフセットがアッセンブラ定数UEXCUREGとして定義される。このセーブエリアは以下のコードによって予め定義されている。
このコードはユーザレジスタ番号のリストと共に、tpp変数@user_registersがあることに依存する。これは単にあらゆるuser_registerステートメントの最初のアーギュメントから作られるリストである。
一部の更に複雑なマイクロプロセッサインプリメンテーションでは、異なるパイプライン状態で1つの状態を計算することができる。これを処理することは、ここで説明するプロセスに幾つかのエクステンション(とはいえ簡単なもの)を必要とする。第1に、セマンティックブロックをパイプライン段階と関連付けることができるようにするために、仕様記述言語を拡張する必要がある。これは幾つかの方法のうちの1つで達成することができる。一実施形態では、関連するパイプライン段階を各セマンティックブロックで明白に指定することができる。別の実施形態では、パイプライン段階の範囲を各セマンティックブロックのために指定することができる。更に別の実施形態では、所定のセマンティックブロック用のパイプライン段階を、必要な計算上の遅延に応じて、自動的に引き出すことができる。
異なるパイプライン段階における状態発生をサポートする際の第2のタスクは、割込み及び特定・機能停止を処理することである。通常これは、パイプライン制御信号の制御下に、適切なバイパス及びフォワードロジックの追加を含む。一実施形態では、状態が発生された時とその状態が使用される時との間の関係を示すために、使用法発生図を発生させることができる。アプリケーション分析に基づいて、適切なフォワードロジックを実用化して、共通の状況を処理することができ、インターロックロジックを発生させて、フォワーディングロジックによって処理されない場合のためにパイプラインを機能停止させることができる。
ベースプロセッサの命令発行論理を修正する方法は、ベースプロセッサにより使用されるアルゴリズムに依存する。しかしながら、概して、ほとんどのプロセッサ用の命令発行論理は、それがシングル・イッシューであろうと、あるいはスーパー・スカラーであろうと、シングルサイクル命令用であろうと、あるいは多重サイクル命令用であろうと、命令が以下の信号を発行するためにテストされることにのみ依存する。
1.命令がその状態をソースとして使用するか否かを各プロセッサ状態成分のために指示する信号;
2.命令がその状態を送出先として使用するか否かを各プロセッサ状態成分のために指示する信号;及び3.命令が機能単位を使用するか否かを各機能単位のために指示する信号。
これらの信号はパイプラインに対する発行及びクロス・イッシューチェックを実施し、パイプライン依存発行論理におけるパイプライン状態を更新するために使用される。TIEは新しい命令のために信号及びその式を増加させるために全ての必要な情報を含んでいる。
まず第1に、各TIE状態宣言書が命令発行論理のために新しい信号が作られるようにする。iclass宣言に対して第3または第4のアーギュメントに表記される各inまたはinoutオペランドまたは状態が、指定されたプロセッサ状態成分に対する第1組の式に対して、第2のアーギュメントに表記される命令に対する命令デコード信号を付加する。
第2に、iclass宣言に対して第3または第4のアーギュメントに表記される各outまたはinoutオペランドまたは状態が、指定されたプロセッサ状態成分に対する第2組の式に対して、第2のアーギュメントに表記される命令に対する命令デコード信号を付加する。
第3に、各TIEセマンティックブロックから作られた論理が新しい機能単位を表し、新しい単位信号が作られ、セマンティックブロックのために指定されたTIE命令用のデコード信号が共にORされて、第3組の式を形成する。
命令が発せられた時、パイプラインステータスを将来の発行決定のために更新しなければならない。ここでも、ベースプロセッサの命令発行論理を修正する方法は、ベースプロセッサにより使用されるアルゴリズムに依存する。しかしながら、やはり幾つかの一般的な考察が可能である。パイプラインステータスは発行論理に対して以下のステータスを戻さなければならない。
4.各々の発行された命令送出先のために、その結果がバイパスのために利用可能になる時を指示する信号;
5.機能単位が別の命令のために実行可能状態になっていることを、各機能単位のために示す信号。
ここで説明した実施形態は、シングル・イッシュープロセッサであり、設計者が定義する命令が論理計算のシングルサイクルに制限される。この場合、上記のことがかなり簡略化される。機能単位がチェックまたはクロス・イッシューチェックをする必要がなく、如何なるシングルサイクル命令もプロセッサ状態成分を次の命令のためにパイプレディにすることができない。このように、発行式は以下のようになる。
またこの場合、src[i]pipeready信号が付加的な命令による影響を受けず、またsrc[i]useが上記において説明したように、記述され修正される第1組の式である。本実施形態では、第4及び第5組の信号を必要としない。マルチサイクルでマルチイッシューである代替実施形態に対しては、各命令が計算をパイプラインで送るサイクル数を与えるために、TIE仕様記述を待ち時間仕様記述で増大させるであろう。
第4組の信号は、仕様書に従ってその段階において完了する各命令のために、命令デコード信号を共にORすることによって、各セマンティックブロックパイプ段階において発生されるであろう。
デフォルトによって、発生された論理が完全にパイプライン化され、TIE発生機能単位が、1つの命令を受け入れてから1サイクル後に、常にレディになっているであろう。この場合、TIEセマンティックブロック用の第5組の信号が常に主張される。多数のサイクルに亘ってセマンティックブロック内の論理を再使用する必要がある場合、機能単位がこのような命令によって如何に多くのサイクルで使用されるかを更なる仕様記述が指定するであろう。この場合、その段階において指定されたサイクルカウントで終了する各命令のために、命令デコード信号を共にORすることによって、各セマンティックブロックパイプ段階において第5組の信号が発生されるであろう。
あるいは、更に異なる実施形態において、設計者が結果レディ信号及び機能単位レディ信号を指定するように、それはTIEに対するエクステンションとして残されてもよい。
本実施形態により処理されたコードの例が添付付属書に示されている。簡潔さのために、これらについて詳細に説明しないが、上述の参照マニュアルを再検討すれば、当業者によって容易に理解されるであろう。付属書GはTIE言語を用いた命令の実行例であり、付属書Hはこれらのコードを使用するコンパイラのためにTIEコンパイラが発生させるものを示している。同様に、付属書IはシミュレータのためにTIEコンパイラが発生させるものを示しており、付属書JはユーザアプリケーションにおけるTIE命令を拡大するマクロのためにTIEコンパイラが発生させるものを示しており、付属書KはネイティブモードにおいてTIE命令をシミュレートするためにTIEコンパイラが発生させるものを示しており、付属書Lは付加的なハードウエアのためのVerilog HDL記述としてTIEコンパイラが発生させるものを示している。また、付属書Mは上記のVerilog HDL記述を最適化して、CPU全体のサイズ及び性能に対するTIE命令のエリア及び速度の影響を推定するために、設計コンパイラスクリプトとしてTIEコンパイラが発生させるものを示している。
上記のように、プロセッサ構成手順を始めるために、ユーザは上述のGUIを介してベースプロセッサ構成を選択することによって開始する。プロセスの一部として、ソフトウエア展開システム30が組み立てられ、図1に示すようにユーザに送られる。ソフトウエア展開システム30は、図6において詳細に示される、本発明の別の局面に関する4つの主な成分、つまり、コンパイラ108と、アッセンブラ110と、命令セットシミュレータ112とデバッガ130とを含んでいる。
当業者に公知であるように、コンパイラはCまたはC++等の高レベルプログラミング言語で書かれたユーザアプリケーションを特定用途用アッセンブリ言語に変換する。CまたはC++等の高レベルプログラミング言語はアプリケーションライタが正確に記載するのが容易なフォームでそれらのアプリケーションを記載できるようにするために設計されている。これらはプロセッサによって理解される言語ではない。アプリケーションライタは必ずしも使用されるプロセッサの特殊な特徴について心配する必要はない。多くの異なるタイプのプロセッサに対して、典型的に同じCまたはC++プログラムをほとんど修正なしに使用することができる。
コンパイラはCまたはC++プログラムをアッセンブリ言語に翻訳する。アッセンブリ言語は機械言語により近く、プロセッサによって直接サポートされる。異なるタイプのプロセッサはそれ自体のアッセンブリ言語を有するであろう。各アッセンブリ命令はしばしば1つの機械命令を表すが、その両者は必ずしも同じでなくてもよい。アッセンブリ命令は人間が読むことのできる文字列であるように設計されている。各命令及びオペランドは意味のある名前または簡略記憶であり、人間がアッセンブリ命令を読み、機械によってどの操作が行われるかを容易に理解できるようにする。アッセンブラはアッセンブリ言語から機械言語へと変換する。各アッセンブリ命令文字列はアッセンブラによって1つ以上の機械命令へと効率的に符号化され、機械命令はプロセッサによって直接かつ効率的に実行され得る。
機械コードはプロセッサ上で直接実行することができるが、物理的なプロセッサは常に直ちに利用できるとは限らない。物理的プロセッサの組立ては時間のかかる高価なプロセスである。可能性のあるプロセッサ構成を選択する場合、ユーザは各々の可能性のある選択のために物理的プロセッサを組み立てることができない。その代わりに、ユーザにはシミュレータと呼ばれるソフトウエアプログラムが提供される。シミュレータ、つまり汎用体コンピュータで実行されるプログラム、はユーザが構成したプロセッサでユーザアプリケーションを実行する効果をシミュレートすることができる。シミュレータはシミュレートされたプロセッサのセマンティクスを真似ることができ、また実際のプロセッサが如何に速くユーザのアプリケーションを実行することができるかをユーザに告げることができる。
デバッガはユーザがソフトウエアと対話形式で問題を見出すことができるようにするツールである。デバッガはユーザが対話形式でそのプログラムを実行することができるようにする。ユーザはいつでもプログラムの実行を停止して、そのCソースコードまたは結果的に生じるアッセンブリコードまたは機械コードを見ることができる。また、ユーザはブレークポイントにおいて、変数またはハードウエアレジスタのどの値も、あるいは全ての値を調べ、または修正することができる。次に、ユーザは実行を、おそらく一度に1つのステートメント、おそらく一度に1つの機械命令を、新しいユーザが選択したおそらく1つのブレークポイントまで続けることができる。
4つ全ての成分108、110、112、および130はユーザが定義した命令750(図3を参照)を知っている必要があり、またシミュレータ112及びデバッガ130も付加的にユーザが定義した状態752を知っていなければならない。システムは、ユーザのC及びC++アプリケーションに付加されるイントリンシックを介して、ユーザが定義した命令750にユーザがアクセスできるようにする。コンパイラ108はユーザが定義した命令750のためにイントリンシックコールをアッセンブリ言語命令738に翻訳しなければならない。ユーザによって直接書かれたか、またはコンパイラ108によって翻訳された時はいつでも、アッセンブラ110は新しいアッセンブリ言語命令738を取り入れ、それらをユーザが定義した命令750に対応する機械命令740に符号化しなければならない。シミュレータ112はユーザが定義した機械命令740をデコードしなければならない。シミュレータ112はその命令のセマンティクスをモデル化し、構成されたプロセッサ上での命令の性能をモデル化しなければならない。シミュレータ112はユーザが定義した状態の値及び性能の含意をモデル化しなければならない。デバッガ130はユーザが定義した命令750を含むアッセンブリ言語命令738をユーザが印刷できるようにしなければならない。またデバッガ130はユーザが定義した状態の値をユーザが調べて修正できるようにしなければならない。
本発明のこの局面では、ユーザはツール、つまりTIEコンパイラ702を呼出して、現在可能性のあるユーザが定義したエンハンスメント736を処理する。TIEコンパイラ702はユーザアプリケーションをアッセンブリ言語738に翻訳するコンパイラ708とは異なっている。TIEコンパイラ702は既に組み立てられているベースソフトウエアシステム30(コンパイラ708、アッセンブリ710、シミュレータ712及びデバッガ730)を可能化して、その新しいユーザが定義したエンハンスメント736を使用できるようにする成分を組み立てる。ソフトウエアシステム30の各要素は幾分異なる成分セットを使用する。
図24はこれらのソフトウエアツールの特定TIE部分が如何に発生されるかを示す図である。ユーザが定義したエクステンションファイル736から、TIEコンパイラ702は幾つかのプログラム用のCコードを発生させ、その各々が、ユーザが定義した命令及び状態に関する情報のために、1つ以上のソフトウエア展開ツールによってアクセスされるファイルを作り出す。例えば、プログラムtie2gcc800は、xtensa−tie.hと呼ばれるCヘッダファイル842(下記に詳述する)を発生させ、それは新しい命令に対する組込み関数定義を含んでいる。プログラムtie2isa810は、動的接続ライブラリ(DLL)844/848を発生させ、これらはユーザが定義した命令フォーマットに関する情報(下記に詳述するエンコードDLL844とデコードDLL848の組み合わせ)を含む。プログラムtie2iss840は性能モデル化及び命令セマンティクス用のCコード870を発生させ、それは、後述するように、ホストコンパイラ846によって使用され、下記に詳述するように、シミュレータ712により使用されるシミュレータDLL849を作り出す。プログラムtie2ver850は適切なハードウエア記述言語でユーザが定義した命令に必要な記述850を作り出す。最後に、プログラムtie2xtos860は、文脈切替えのために、ユーザが定義した状態をセーブ・リストアするためのセーブ・リストアコード810を作り出す。ユーザが定義した状態のインプリメンテーションについての付加的な情報は、前述のWangらの出願に見ることができる。
コンパイラ708
本実施形態では、コンパイラ708はユーザが定義したエンハンスメント736のために、ユーザのアプリケーション内のイントリンシックコールをアッセンブリ言語命令738に翻訳する。コンパイラ708はGNUコンパイラ等の標準コンパイラに見出されるマクロ及びインラインアッセンブリ機構の上で、この機構を実行する。これらの機構に関する更に詳しい情報については、GNU C及びC++コンパイラユーザガイド、EGCSバージョン1.0.3を参照。
2台のレジスタで操作し、結果を第3のレジスタに戻す新しい命令fooを作りたいと望むユーザを考えてみよう。ユーザは特別なディレクトリ内のユーザが定義した命令ファイル750に命令記述を置き、TIEコンパイラ702を呼出す。TIEコンパイラ702はxtensa−tie.h等の標準の名前を付けたファイルを作り出す。このファイルはfooについての以下の定義を含んでいる。
ユーザがそのアプリケーションでコンパイラ708を呼出した時、ユーザは、コマンドラインオプションを介して、あるいは環境変数を介して、ユーザが定義したエンハンスメント736を備えたディレクトリの名前をコンパイラ708に告げる。そのディレクトリはxtensa−tie.hファイル742も含んでいる。コンパイラ708は、あたかもユーザ自身でfooの定義を書いたかのように編集されているユーザのCまたはC++アプリケーションプログラム内に、ファイルxtensa−tie.hを自動的に含める。ユーザはイントリンシックコールをユーザアプリケーション内の命令fooに含んでいる。この含まれている定義のために、コンパイラ708はこれらのイントリンシックコールを含まれた定義に対する呼出しとして処理する。コンパイラ708により提供される標準のマクロ機構に基づいて、コンパイラ708は、あたかもユーザがマクロコールではなく、アッセンブリ言語ステートメント738を直接書いたかのように、そのマクロfooに対する呼出しを処理する。つまり、標準のインラインアッセンブリ機構に基づいて、コンパイラ708はその呼出しを1つのアッセンブリ命令fooに翻訳する。例えば、ユーザはイントリンシックfooに対する呼出しを含む関数を有しているかもしれない。
コンパイラはユーザが定義したイントリンシックfooを使用して、その関数を以下のアッセンブリ言語サブルーチンに翻訳する。
ユーザが新しいユーザ定義エンハンスメント736のセットを作成する場合、新しいコンパイラを再構築する必要はない。TIEコンパイラ702が単にファイルxtensa−tie.h742を作成し、それは予め構築されているコンパイラ78によって、ユーザのアプリケーション内に自動的に包含される。
アッセンブラ710
本実施形態では、アッセンブラ710がエンコードライブラリ744を使用して、アッセンブリ命令750を符号化する。このライブラリ744に対するインターフェイスは以下の機能を含む:
・ 操作符号の簡略記憶文字列を内部操作符号表現に翻訳する;
・ 機械命令740内の操作符号フィールド用の各操作符号のために発生すべきビットパターンを提供する;そして
・ 各命令オペランドに対するオペランド値を符号化し、その符号化されたオペランドビットパターンを機械命令740のオペランドフィールドに挿入する。
一例として、イントリンシックfooを呼出すユーザ関数の以前の例を考えてみよう。アッセンブラは「foo a2、a2、a3」命令を取り入れ、それを16進数0x62230により表される機械命令に変換する。この場合、上位の6と下位の0は共にfooに対する操作符号を表し、2、2、3は各々3つのレジスタa2、a2、a3を表す。
これらの関数の内部インプリメンテーションはテーブルと内部関数の組み合わせに基づいている。テーブルはTIEコンパイラ702によって容易に発生されるが、その表現能力は制限される。例えば、オペランド符号化関数を表す時等、更に柔軟性が必要である場合、TIEコンパイラ702はライブラリ744に含まれるべき任意のCコードを発生させることができる。
再び「foo a2、a2、a3」の例を考えてみよう。全てのレジスタフィールドはレジスタ番号で単に符号化される。TIEコンパイラ702は合法的レジスタ値に対してチェックする以下の関数を作り出し、その値がリーガルである場合、そのレジスタ番号を戻す。
全ての符号化が簡単である場合、符号化関数は必要ではないであろう。1つのテーブルで充分であろう。しかしながら、ユーザはもっと複雑な符号化を選ぶことが許される。TIE言語で記述された以下の符号化は、1024で割られたオペランドの値である数で、全てのオペランドを符号化する。このような符号化は1024の倍数であることが必要な値を密集して符号化するのに有用である。
TIEコンパイラはオペランド符号化記述を以下のC関数に変換する。
そのオペランドにとって可能な値の領域が非常に大きいので、このような符号化のために1つのテーブルを使用することができない。1つのテーブルは非常に大きくなければならないであろう。
エンコードライブラリ744の実施形態では、1つのテーブルが内部操作符号表示に対して操作符号簡略記憶文字列を配置する。効率のために、このテーブルは分類されてもよいし、あるいはそれはハッシュテーブルまたは効率的なサーチを許容する他のデータ構造であってもよい。別のテーブルが各操作符号を機械命令のテンプレートに配置し、その操作符号フィールドがその操作符号用の適切なビットパターンに初期化される。同じオペランドフィールドとオペランドエンコードを備えた操作符号が共にグループ分けされる。これらのグループの1つにある各操作符号のために、ライブラリはオペランド値をビットパターンに符号化するための関数と、これらのビットを機械命令内の適切なフィールドに挿入するための別の関数とを含んでいる。別の内部テーブルが各命令オペランドをこれらの関数に対して配置する。結果レジスタ番号が命令のビット12..15に符号化された例を考えてみよう。TIEコンパイラ702は以下の関数を発生させ、それは命令のビット12..15に結果レジスタの値(番号)を設定する。
アッセンブラ710を再構築することなく、ユーザが定義した命令を変更できるようにするために、エンコードライブラリ744は動的に接続されたライブラリ(DLL)として実用化される。DLLはプログラムがその機能性を動的に伸ばすことができるようにする標準的な方法である。DLL処理についての詳細は異なるホストオペレーティングシステムに応じて変化するが、基本的なコンセプトは同じである。DLLはプログラムコードのエクステンションとして実行中のプログラムに動的にロードされる。ランタイムリンカがDLLと主プログラム間、及びDLLと既にロードされている他のDLL間の象徴的な関係を決定する。エンコードライブラリまたはDLL744の場合、コードのほんの一部がアッセンブラ710に静的に結び付けられる。このコードはDLLをロードすること、予め組み立てられている命令セット746用の既存のエンコード情報(これは別のDLLからロードされていてもよい)とDLL内の情報を組み合わせること、また上述のインターフェイス機能を介してその情報をアクセス可能にすることに対して責任がある。
ユーザが新しいエンハンスメント736を作り出す場合、ユーザはエンハンスメント736の記述に対してTIEコンパイラ702を呼出す。TIEコンパイラ702は内部テーブルと、そのエンコードDLL744を実用化する関数とを定義するCコードを発生させる。次にTIEコンパイラ702はホストシステムコンパイラ746(これは構成中のプロセッサではなく、むしろホストに対して実行するコードを編集する)を呼出して、ユーザが定義した命令750に対して該エンコードDLL144を作成する。ユーザはユーザが定義したエンハンスメント736を含むディレクトリを指摘するフラグまたは環境変数を備えたアプリケーションで、予め組み立てられているアッセンブラ710を呼出す。予め組み立てられているアッセンブラ710はそのディレクトリ内のDLL744を動的に開く。各アッセンブリ命令に対して、予め組み立てられているアッセンブラ710は該エンコードDLL744を使用して操作符号簡略記憶を調べ、機械命令内の操作符号フィールドに対するビットパターンを見つけ、各命令オペランドを符号化する。
例えば、アッセンブラ710がTIE命令「foo a2、a2、a3」を参照する場合、アッセンブラ710は1つのテーブルから、「foo」操作符号がビット位置16〜23において数字6に訳すことを見る。1つのテーブルから、アッセンブラ710は各レジスタ用の符号化関数を見つける。それらの関数はa2を数字2に符号化し、もう1つのa2を数字2に、またa3を数字3に符号化する。1つのテーブルから、アッセンブラ710は適当な集合関数を見つける。Set_r_fieldがその結果値2を命令のビット位置12..15に置く。同様の集合関数が他の2と3を適宜配置する。
シミュレータ712
シミュレータ712は幾つかの方法でユーザが定義したエンハンスメント736と相互作用する。機械命令740を仮定すれば、シミュレータ712は該命令を復号化、つまり、該命令を成分操作符号とオペランドに分解しなければならない。ユーザが定義したエンハンスメント736のデコーディングはデコードDLL748内の関数を介して行われる(エンコードDLL744とデコードDLL748は実際には1台のDLLであることも可能である)。例えば、ユーザが各々命令ビット16〜23におけるエンコーディング0x6、0x16、0x26及びビット0〜3における0で、3つの操作符号;foo1と、foo2とfoo3とを定義する場合を考えてみよう。TIEコンパイラ702は以下のデコード関数を発生させ、それはその操作符号を全てのユーザが定義した命令750の操作符号と比較する。
ユーザが定義した多数の命令750があるので、全ての可能なユーザ定義命令750に対して操作符号を比較することはコストがかかり、そこでTIEコンパイラはその代わりにスイッチステートメントの階層的セットを使用することができる。
デコーディング命令操作符号に加えて、デコードDLL748は命令オペランドをデコードするための関数を含んでいる。これはエンコードDLL744におけるオペランドのエンコーディングと同じ方法で行われる。まず第1に、デコードDLL748は機械命令からオペランドフィールドを抽出するための関数を提供する。前の例を続けて、TIEコンパイラ702は1つの命令のビット12〜15から値を抽出するために以下の関数を発生させる。
オペランドのTIE記述はエンコーディング及びデコーディング両方の仕様記述を含むので、エンコードDLL744がオペランドエンコード仕様記述を使用する一方、デコードDLL748がオペランドデコード仕様記述を使用する。例えば、以下のTIEオペランド仕様記述:
ユーザがシミュレータ712を呼出す場合、ユーザはユーザが定義したエンハンスメント736に対するデコードDLL748を含むディレクトリをシミュレータ712に告げる。シミュレータ712は適切なDLLを開く。シミュレータ712が命令をデコードする時はいつでも、その命令が予め組立てられている命令セット用のデコード関数によってうまくデコードされない場合、シミュレータ712はDLL748内のデコード関数を呼出す。
デコードされた命令750を仮定すると、シミュレータ712はその命令750のセマンティクスを解釈してモデル化しなければならない。これは機能的に行われる。全ての命令750が対応する関数を有しており、それはシミュレータ712が該命令750のセマンティクスをモデル化できるようにする。シミュレータ712はシミュレートされたプロセッサのあらゆる状態のトラックを内部的に保持している。シミュレータ712はプロセッサ状態を更新するか、あるいは尋ねるために固定されたインターフェイスを有している。上述のように、ユーザが定義したエンハンスメント736は、VerilogのサブセットであるTIEハードウエア記述言語で書かれる。新しいエンハンスメント736をモデル化するために、TIEコンパイラ702はハードウエア記述を、シミュレータ712が使用するC関数に変換する。ハードウエア記述言語の演算子は対応するC演算子に直接翻訳される。プロセッサ状態を更新するか、あるいは尋ねるために、状態を読み取るか、または状態を書き込む操作がシミュレータインターフェイスに翻訳される。
本実施形態の一例として、ユーザが2つのレジスタに加えるために1つの命令750を作成する場合を考えてみよう。簡略化のためにこの例を選んだ。ハードウエア記述言語で、ユーザは以下のように、追加のセマンティクスを記述するかもしれない:
内蔵されている名前arrによって示される出力レジスタが、内蔵されている名前arsとartによって示される2つの入力レジスタの合計に指定される。TIEコンパイラ702はこの記述を認めて、シミュレータ712が使用するセマンテック関数を発生させる。
ハードウエア演算子「+」はC演算子「+」に直接翻訳される。ハードウエアレジスタarsとartの読取りがシミュレータ712関数呼出し「ar」の呼出しに翻訳される。ハードウエアレジスタarrの書込みがシミュレータ712関数「set_ar」に対する呼出しに翻訳される。あらゆる命令がプログラムカウンタpcを命令のサイズ分だけ明白に増分するので、TIEコンパイラ702は、追加(add)命令のサイズである3だけsimulatedpcを増分するシミュレータ712関数に対する呼出しを発生させる。
TIEコンパイラ702が呼出されると、TIEコンパイラ702は上述のようにあらゆるユーザ定義命令のためにセマンティック関数を作成する。また関連するセマンティック関数に対する全ての操作符号名を配置するテーブルも作成する。該テーブル及び関数は標準のコンパイラ746を使用してシミュレータDLL749内に編集される。ユーザがシミュレータ712を呼出すと、ユーザはユーザが定義したエンハンスメント736を含むディレクトリをシミュレータ712に告げる。シミュレータ712は適切なDLLを開く。シミュレータ712が呼出される時はいつでも、シミュレータ712はプログラム内の全ての命令をデコードして、関連するセマンティック関数に対して命令を配置するテーブルを作成する。マッピングを作成する場合、シミュレータ712はDLLを開き、適当なセマンティック関数をサーチする。ユーザ定義命令736のセマンティクスをシミュレートする場合、シミュレータ712はDLL内の関数を直接呼出す。
シミュレートされたハードウエアでアプリケーションを実行するのにどの位の時間がかかるかをユーザに告げるために、シミュレータ712は命令750の性能効果をシミュレートすることが必要である。シミュレータ712はこの目的のためにパイプラインモデルを使用する。あらゆる命令が幾つかのサイクルに亘って実行する。各サイクルにおいて、命令は機械の異なる資源を使用する。シミュレータ712は全ての命令を平行して実行しようとし始める。多数の命令が同じサイクルにおいて同じ資源を使用しようとすれば、遅い方の命令は資源が自由になるのを待って立ち往生する。遅い方の命令が後のサイクルにおいて、早い方の命令によって書かれた状態を読む場合、遅い方の命令は書かれた値を待って立ち往生する。シミュレータ712は各命令の性能をモデル化するために機能的インターフェイスを使用する。あらゆるタイプの命令のために1つの関数が作られる。その関数はプロセッサの性能をモデル化するシミュレータのインターフェイスに対する呼出しを含んでいる。
例えば、簡単な3レジスタ命令fooを考えてみよう。TIEコンパイラは以下のシミュレータ関数を作成するかもしれない:
pipe_use_ifetchに対する呼出しが、命令が3バイトをフェッチすることを必要としていることをシミュレータ712に伝える。pipe_useに対する2つの呼出しが、2つの入力レジスタがサイクル1において読み取られることをシミュレータ712に伝える。pipe_defに対する呼出しが、出力レジスタがサイクル2において書き込まれることをシミュレータ712に伝える。pipe_def_ifetchに対する呼出しが、この命令はブランチではなく、従って次の命令を次のサイクルでフェッチできることをシミュレータ712に伝える。
これらの関数に対するポインタがセマンテック関数と同じテーブルに置かれる。関数自体はセマンテック関数と同じDLL749内に編集される。シミュレータ712が呼出されると、シミュレータ712は命令と性能関数間のマッピングを作成する。マッピングを作成する場合、シミュレータ712はDLL749を開いて、適当な性能関数をサーチする。ユーザ定義命令736の性能をシミュレートする場合、シミュレータ712はDLL749内の関数を直接呼出す。
デバッガ730
デバッガはユーザが定義したエンハンスメント750と2つの方法で相互作用する。これを実施するために、デバッガ730は機械命令740をアッセンブリ命令738にデコードしなければならない。これは命令をデコードするためにシミュレータ712が使用するのと同じ機構であり、デバッガ730は好ましくはデコーディングを行うためにシミュレータ712が使用するのと同じDLLを使用する。命令のデコーディングに加えて、デバッガはデコードされた命令を文字列に変換しなければならない。この目的のために、デコードDLL748は各々の内部操作符号表示を対応する簡略記憶文字列に配置するための関数を含む。これは簡単なテーブルを用いて実行できる。
ユーザはユーザが定義したエンハンスメント750を含むディレクトリを指摘するフラグまたは環境変数を備えた予め組み立てられているデバッガを呼出すことができる。予め組み立てられているデバッガは適当なDLL748を動的に開く。
更に、デバッガ730はユーザが定義した状態752とも相互作用する。デバッガ730はその状態752を読み取り、修正できなければならない。それを実施するために、デバッガ730はシミュレータ712と通信する。デバッガ730はシミュレータ712に対して、該状態がどの程度の大きさであるか、また該状態変数の名前が何であるかを尋ねる。デバッガ730が一部のユーザ状態の値を印刷するように求められた時はいつでも、予め定義されている状態について請求するのと同じ方法で、デバッガ730はその値をシミュレータ712に尋ねる。同様に、ユーザ状態を修正するために、デバッガ730は所定の値に状態を設定するようにシミュレータ712に伝える。
このように、本発明によるユーザが定義した命令セット及び状態に対するサポートのインプリメンテーションは、コアソフトウエア展開ツールにプラグインされるユーザ機能性を定義するモジュールを用いて達成することができる。このように、ユーザが定義したエンハンスメントの特定セットのためのプラグインモジュールが、組織及び操作の容易さのために、システム内で1つのグループとして維持されるシステムを開発することができる。
更に、コアソフトウエア展開ツールは特定のコア命令セット及びプロセッサ状態にとって特有のものであってよく、ユーザが定義したエンハンスメント用の一組のプラグインモジュールを、システムに存在する多数組のコアソフトウエア展開ツールとの関連で評価してもよい。