JP2004502990A - 構成可能なプロセッサを設計する自動化されたプロセッサ生成システムおよびその方法 - Google Patents
構成可能なプロセッサを設計する自動化されたプロセッサ生成システムおよびその方法 Download PDFInfo
- Publication number
- JP2004502990A JP2004502990A JP2001560891A JP2001560891A JP2004502990A JP 2004502990 A JP2004502990 A JP 2004502990A JP 2001560891 A JP2001560891 A JP 2001560891A JP 2001560891 A JP2001560891 A JP 2001560891A JP 2004502990 A JP2004502990 A JP 2004502990A
- Authority
- JP
- Japan
- Prior art keywords
- processor
- instruction
- hardware
- register file
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【選択図】図14
Description
【発明の属する技術分野】
本発明はコンピュータプロセッサと、システムおよびそれを開発する技術に関し、特にユーザのオプションで構成可能な特徴を有するプロセッサと、関連する開発システムおよび技術に関する。
【0002】
【従来の技術】
従来技術のプロセッサは変更または拡張が困難である非常に堅牢なオブジェクトである。レジスタからレジスタへのコンピュータ処理命令および簡単な状態(レジスタファイルではない)を付加する能力を含む、プロセッサとそれらのサポーティングソフトウェアツールに対して程度が限定された拡張性はある種の従来技術のシステムで与えられている。この限定された拡張性は現在の技術において大きく進歩しており、これらの改良を使用している多数のアプリケーションは4倍以上のスピードアップまたは効率の改良を経験している。
【0003】
しかしながら、これらの従来技術のシステムの拡張性における制限は他のアプリケーションが適切にアドレスされないことを意味している。特に、その固定した32ビット幅レジスタにより既存のコアレジスタファイルを使用する必要性は通常、付加的な正確性、または結合したデータオペランド幅が32ビットを超える複製された機能装置を必要とするアプリケーションではこれらの改良を使用することが妨げられる。さらに、コアレジスタファイルは多くはある命令を実行するための十分な読取りまたは書込みポートがない。これらの理由で、読取りおよび書込みポートの幅および数において構成可能である新しいレジスタファイルの付加をサポートすることが技術で必要とされている。
【0004】
【発明が解決しようとする課題】
レジスタファイルの付加により、これらのファイルとメモリとの間でのデータ転送をする必要が生じる。コア命令セットはコアレジスタファイルのこのようなロードおよび記憶命令を含むが、付加的なレジスタファイルは付加的なロードおよび記憶命令を必要とする。これは拡張可能なレジスタファイルの原理の1つが、拡張可能なレジスタファイルを必要とされるデータタイプおよび帯域幅の大きさにすることを可能にするためである。特にレジスタファイルデータの幅は残りの命令セットによりサポートされる幅よりも広い。それ故、コアにより与えられるレジスタへデータを転送することによりデータをロードし記憶することは合理的ではなく、新しいレジスタファイルから直接値をロードし記憶することが可能である。
【0005】
さらに、従来技術のシステムはプロセッサ状態の付加をサポートするが、その状態の量は典型的に小さい。結果として、多数の状態ビットが容易にプロセッサアーキテクチャに付加されることが技術で必要とされている。この状態は多くはオペレーティングシステムにより切換えられるコンテキストである必要がある。一度、状態の量が大きくなると、コンテキストのスイッチ時間を最小にする新しい方法が望ましい。このような方法は従来技術のプロセッサ(例えばMIPS R2000コプロセッサエネーブルビット)で実行される。しかしながら、タイムリーな方法で新しい状態について知りこれを使用する必要のある実時間オペレーティングシステム(RTOS)および他のソフトウェアをサポートするために、入力仕様から自動的にコードシーケンスおよび論理を生成することによってさらにこれを拡張することが技術で必要とされている。
【0006】
さらに、従来技術のプロセッサはコアプロセッサ構造と命令の拡張との間で論理の共有を可能にしない。ロードおよび記憶命令の拡張により、データキャッシュはコアと拡張の間で共有されることが重要である。このことによって、新しく構成された命令によるストアはコアによるロードによってまたはその反対に見られ、それによって、キャッシュの結合を確実にし、別々のキャッシュはこれらを一貫させ、可能にするが不所望な解決策である特別な機構を必要とする。また、データキャッシュはコアプロセッサで大きい回路の1つであり、それを共有することはコアプロセッサのサイズの減少を容易にする。
【0007】
レジスタファイルの付加はまたハイレベル言語変数のこれらのレジスタへの割り当てをサポートするために望ましくする。従来技術のプロセッサは従来技術のコンパイラが既にユーザ変数の割当をサポートするコアレジスタファイルを使用する。したがって、コンパイラ割当が期待され、ユーザ定義レジスタファイルに対してサポートされるべきである。レジスタへ変数を割当てるために、コンパイラがサポートするユーザ定義レジスタファイルは通常のコンパイラ機能を実行するために、このようなレジスタをスピルし、回復し、除去する方法の知識を必要とする。
【0008】
従来技術のプロセッサシステムにおける関連するがさらに一般的な制限は、そのコンパイラサポートレベルである。しばしば命令はアプリケーションに適切な新しいデータタイプをサポートするためにプロセッサに付加される(例えば多くのDSPアプリケーションはプロセッサによって通常サポートされるさらに一般的な2の補数の演算の代わりに、飽和演算を実行するプロセッサを必要とする)。従来技術のシステムは新しいデータタイプをサポートする命令が付加されることを可能にするが、拡張を使用するハイレベルな言語コードを書き込むとき、これらの新しい命令を既存の言語データタイプにマップすることが必要である。幾つかのケースでは、適切な組込みデータタイプは存在しない。
【0009】
例えば、飽和演算の例を考慮する。前述したように、多数のDSPアルゴリズムは、伝統的な2の補数システムのように、アンダーフローの最小値で飽和するかまたはラッピングの代わりに使用されるビット数のオーバーフローの最大値で飽和する演算を利用する。しかしながら、これらのセマンチックを有するCデータタイプは存在せず、C言語は以下、即ち
int a;
int b;
int c=a+b;
がラッピングセマンチックを有し、以下のように書き、
int a;
int b;
int c=SATADD(a,b);
代わりに新しい固有の機能により組込みタイプを仕様するが、これは不適切であり、アルゴリズムを不明確にする(書込み装置はSATADD機能を単に+と考える)。
【0010】
他方で、新しいデータタイプの付加は+演算子がこれらのタイプと異なって機能することを可能にし、Cは既に整数加算と浮動小数点加算オペレーションに対して異なるオペレーションに適用され、それによって拡張は自然である。したがって、加算を飽和する新しいデータタイプの仕様は以下のようにコード化される。
dsp16 a;
dsp16 b;
dsp16 c=a+b;
ここで、dsp16は飽和データタイプを規定する。したがってその両者のオペランドが飽和データタイプであるので、最後のラインは飽和された加算を示唆する。
【0011】
ほとんどのコンパイラはパイプラインストールを最小にする命令をスケジュールする。しかしながら従来技術のシステムでは、命令仕様がデータ構造のコンパイラのスケジュールを拡張するために使用されることは決してない。例えばロード命令は2サイクルの待ち時間でパイプラインされる。したがって、ロードの結果がロード後の次の命令で参照されることを参照するならば、ロードは完了されていないので1サイクルストールが存在する。したがって以下のシーケンス、即ち load r1,addr1
store r1,addr2
load r2,addr3
store r2,addr4
は2ストールサイクルをもつ。コンパイラがこれを以下のように並べ換えると、 load r1,addr1
load r2,addr3
store r1,addr2
store r2,addr4
シーケンスはストールサイクルなく実行する。これは命令スケジューリングと呼ばれる共通の最適化技術である。従来技術の命令スケジューリングはパイプ段を与えるテーブルを必要とし、その命令はそれらの入力および出力を使用するが、新しく付加された命令ではこのような情報を使用しない。
【0012】
従来技術の別の限定は、付加された命令の計算部分がパイプラインの単一サイクルで実行されなければならないことである。大きいオペランドの乗算等の幾つかの計算は典型的なRISCパイプライン段よりも長い論理遅延を有する。従来技術を使用したこのような演算を含むことは、プロセッサクロックレートが計算を完了するための時間をさらに与えるために減少されることを必要とする。それ故、計算が幾つかのパイプライン段にわたって拡散される命令をサポートすることが望ましい。計算が多数のサイクルにわたって実行されることを可能にすることに加えて、オペランドが異なるパイプライン段で消費され生成されることを可能にすることが有効である。
【0013】
例えば、乗算/累算演算は典型的に2つのサイクルを必要とする。第1のサイクルでは、乗算器はキャリー保存形態の積を発生し、第2のサイクルでは、キャリー保存積と累算器はキャリー保存加算の単一レベルを使用して、3つの値から2つの値に減少され、その後、キャリー伝播(propagate )加算器で加算される。最も簡単な定義は、乗算/累算命令が任意のソースオペランドから目的地まで2つのサイクルを取ることであるが、2つのサイクルの待ち時間のために1サイクルストールが存在するので、同一の累算機のレジスタへバックツーバック乗算/累算を行うことは可能ではない。しかしながら、現実には論理は累算器の入力から累算器の出力まで1サイクルだけを必要とし、より良好な方法は以下のようなさらにパワフルな記述を与えることである。
D←A+B*C
これは段1でBとCを取り、段2でAを取り、段3でDを発生するとして記述されている。したがって、BまたはCからDへの待ち時間は3−1=2であり、AからDへの待ち時間は3−2=1である。
【0014】
マルチサイクル命令の付加により、加算された命令に対するターゲットパイプラインに適切なインターロック論理を発生することも必要になる。これは、サイクルの発生毎に1つの命令により、次の命令は常に1サイクルだけ遅延されるので、待ち時間のない1つの命令は次のサイクルでインターロックを生じる結果を発生できる。通常、Kサイクル毎にのみ命令を発生でき、これらの命令の待ち時間はLサイクルであり、L≧Kであるならば、これらの命令はそれらの目的地のオペランドにインターロックを生じることができない(それらのソースオペランドがロード等の2サイクル命令により発生されたならば、命令はそれらのソースオペランドでインターロックできる)。2サイクルの新しく構成された命令を有することが可能ならば、新しく構成された命令の結果でインターロックする以下の命令を有する必要がある。
【0015】
ほとんどの命令セットアーキテクチャは異なるプロセッサアーキテクチャの多数の構成を有する。従来技術のシステムは命令セマンチックの仕様と命令の構成論理とを結合し、これらを分離せず、これは1セットの基準セマンチックスが多数の構成で使用されることを可能にする。基準セマンチックスは命令セット文書化の1つのコンポーネントである。伝統的には、英語とさらに正確な表記との両者で命令セマンチックを説明する。英語はしばしば不明瞭またはエラーを起こしがちであるが、読取りやすい。それ故、命令の紹介、目的、簡単な定義を与える。さらに形式的な定義は命令が行うことの正確な理解をするのに便利である。1つの基準セマンチックスの目的はこの正確な定義としての役目を行うことである。他のコンポーネントは命令ワード、アセンブラ構文、テキスト記述を含んでいる。従来技術のシステムは命令ワードとアセンブラ構文を発生するための拡張言語の十分な情報を有する。基準セマンチックスの付加により、テキスト記述だけがなくなり、通常のISA記述ブックを生成するため、フォーマットされた文書化へ変換されることができる命令記述の仕様を含む必要がある。
【0016】
前述の特徴を含んでいるプロセッサ開発技術は、フレキシブル性とパワーの増加のために従来技術の設計確認方法をもはや有効にしない。それ故、前述の特徴を伴って、生成されたプロセッサの以下を含む多数の特徴の正確さを確認する必要があり、即ち、
−入力基準命令セマンチックの正確さ、
−入力構成命令セマンチックの正確さ、
−命令セマンチックのコンパイラによるアプリケーションプログラミング言語への変換、
−命令セマンチックのコンパイラによるハードウェア記述言語(HDL)への変換、
−命令セマンチックのコンパイラによる命令セットシミュレータプログラミング言語への変換、
−レジスタファイル、インターロック、バイパス、コアインターフェース、例外のための命令セマンチックのコンパイラにより発生されたHDL、
命令セマンチックのコンパイラにより発生されたハードウェア抽象層(HAL)コードのようなプロセス中に発生された任意のシステム関数抽象層(HALについてさらに詳細が説明されている前述のSongerの特許明細書を参照)、
−プログラミング言語コンパイラにおける固有の、およびデータタイプのサポート。
【0017】
基準セマンチックスはまた前述の幾つかの特徴で使用されてもよい。
【0018】
最後に、全ての新しいハードウェア機能は命令セットによりサポートされなければならない。
【0019】
【課題を解決するための手段】
前述の従来技術の問題を考慮して、本発明の目的は読取りおよび書込みポートの幅および数において構成可能な新しいレジスタファイルの付加を含む広い範囲のプロセッサ特徴を拡張することを可能にするプロセッサ開発システムを提供することである。
【0020】
本発明のさらに別の目的はこのような新しいレジスタファイルとメモリとの間でデータを転送する命令の付加をサポートするプロセッサ開発システムを提供することである。
【0021】
本発明の別の目的は、コアプロセッサ構造と命令拡張との間の論理の共有、特にコアと拡張命令との間でのデータキャッシュの共有をサポートするプロセッサ開発システムを提供することである。
【0022】
本発明の付加的な目的は、このようなレジスタをスピル、回復および移動する能力を含む拡張レジスタファイルへのハイレベルな言語変数のコンパイラ割当をサポートするプロセッサ開発システムを提供することである。
【0023】
本発明のさらに別の目的は計算が幾つかのパイプライン段にわたって分散される命令をサポートするプロセッサ開発システムを提供することである。
【0024】
本発明の別の目的はオペランドが異なるパイプライン段で消費され、生成されることを可能にするプロセッサ開発システムを提供することである。
【0025】
本発明さらに別の目的は付加されたマルチサイクル命令のためターゲットパイプラインに適切なインターロック論理の発生をサポートするプロセッサ開発システムを提供することである。
【0026】
本発明のさらに付加的な目的はパイプラインストールを最小にするようにデータ構造のコンパイラスケジューリングを拡張するために命令仕様を使用するプロセッサ開発システムを提供することである。
【0027】
本発明のさらに別の目的は1つのセットの基準セマンチックスが多数の命令構造で使用されることを可能にするために命令セマンチックと命令の論理の仕様をサポートすることである。
【0028】
本発明の別の目的はフォーマットされた文書化へ変換するために命令記述の仕様を使用することができるプロセッサ開発システムを提供することである。
【0029】
本発明のさらに別の目的はプロセッサ設計の広範囲の拡張可能な特徴を確認することができるプロセッサ開発システムを提供することである。
【0030】
本発明のさらに別の目的は入力仕様から自動的に最小の時間コンテキストスイッチングをするためにコードシーケンスおよび論理を発生することのできるプロセッサ開発システムを提供することである。
【0031】
本発明のさらに別の目的は前述の広範囲の拡張可能な機能をサポートできる1命令セットのシミュレータを含んでいるプロセッサ開発システムを提供することである。
【0032】
【発明の実施の形態】
この明細書において参考とされ、その一部分を構成している添付図面には、
本発明のこれらおよび別の目的、特徴および利点は、以下の好ましい実施形態の詳細な説明および添付図面から容易に明らかになるであろう。
本発明はとくに、テンシリカ命令セット拡張(TIE)言語およびそのコンパイラならびにその他のツールが示されているKillian 氏らおよびWilson氏らによる特許出願明細書に記載されている技術に基づいている。本発明の好ましい実施形態は、新しい構成体、およびこれらの構成体をサポートするコンパイラ等の増補ソフトウェアツールとによりTIE言語を拡張する。
【0033】
[拡張されたレジスタファイル]
好ましい実施形態により提供される新しい機能の1つタイプのものは、レジスタファイルをサポートする。既存のプロセッサ技術において、レジスタファイルは、それぞれBビットのN個の記憶位置のセットである。命令の中のフィールドはこのセットのメンバを、その命令の結果に対するソースオペランド値または宛先オペランド値として選択する。典型的に、レジスタファイルはN個のメンバのR個のものの並列読出しと、N個のメンバのW個のものの並列書込みとをサポートするように指定されているので、その命令は1以上のソースオペランドおよび1以上の宛先オペランドを有しており、レジスタファイルアクセスに対して依然として1サイクルしか必要としない。
【0034】
新しいレジスタファイルを宣言するTIE言語構成体は、
regfile <rfname><eltwidth><entries><shortname>
であり、ここで<rfname>は後続するTIE構成体においてレジスタファイルを示すために使用されるハンドルであり、
<eltwidth>はレジスタファイル構成要素(”レジスタ”)のビットで幅であり、
<entries> はレジスタファイル中の構成要素の番号であり、
<shortname> はアセンブリ言語に対するレジスタ名を生成するために使用される短いプレフィックスである(単一文字ことが多い)。レジスタ名は、レジスタ番号が付加された<shortname> である。
【0035】
regfile 構成体は読出しおよび書込みポートの番号を宣言せず、このような物理的構成の詳細は、以下においてさらに詳細に説明されるTIEコンパイラに任せられ、それによってTIEが可能な限り実施形態から独立したままに維持し、TIEを高レベルの仕様説明として維持する。
【0036】
regfile 宣言の結果、発生されたプロセッサはプログラマーに可視の状態の付加的な<eltwidth>*<entries>ビットを、この状態の多数の<eltwidth>値の読出しおよび書込みを行うための論理と共に含むことになるであろう。以下、別の関連したTIE構成体を説明した後に、論理発生アルゴリズムを詳細に示す。
【0037】
TIE構成体
オペランド<oname><fieldname>{<rfname>[<fieldname>]} はこの命令ワードのフィールド<fieldname> により指定されたレジスタファイル<rfname>構成要素を読出すか、あるいは書込むハンドルとして<oname> を宣言する。この構成体は、<rfname>がコアレジスタファイル(“AR”と名付けられた)に加えてregfile により宣言されたレジスタファイルを指定する可能性があることを除いて、Killian 氏らによる特許出願明細書に記載されているものと同じである。Killian 氏らによる特許出願明細書に記載されているように、<oname> ハンドルは命令中のレジスタファイルin、out および inoutオペランドを記述するためにiclassの宣言において使用できる。
【0038】
一例として、TIE設計書:
【数1】
は8ビットデータ値に関する簡単化されたGaloisフィールド演算ユニットを構成する(この例を実施するTIEファイルの全てのセットは付録Aにおいて認められることができる)。16エントリ、8ビットのレジスタファイルが生成され(各レジスタがgfmodで記憶された多項式であるGF(2)モジュロを越えた多項式を保持している)、これらのレジスタに関して動作する2つの命令が規定されている。GFADD8は、命令ワード(“gsレジスタ”)のsフィールドによって特定されたレジスタ中の多項式を、命令ワード(“gtレジスタ”)のtフィールドによって特定されたレジスタ中の多項式に追加し、命令ワード(“grレジスタ”)のrフィールドによって特定されたレジスタにその結果を書込む。GFMULX8はgsレジスタ中の多項式をxモジュロgfmodと乗算し、その結果をgrレジスタに書込む。GFRWMOD8はgfmod多項式レジスタを読出し、および書込むためのものである。
【0039】
この簡単なTIEコードから発生された論理は、それが異なったパイプラインステージに対する種々の演算の割当てを処理するために制御論理を必要とするので、さらに複雑なものになる。TIEはユーザによく知られているレベルの命令セットで命令セットを記述した高いレベルの設計書であり、命令セットの作成者(すなわち、プロセッサ設計者)により書かれたものほど低いレベルのものではない。
【0040】
図1にはTIEコードにより発生されるレジスタパイプライン制御論理の一例が示されている。この図面の左側には、4つのパイプラインレジスタとそれらの対応した入力マルチプレクサにより形成されている読出しデータパイプを含む4ステージパイプラインレジスタが示されている。上部から説明すると、読出しポートにおけるパイプラインレジスタの各対はC0(R) ,C1(E) ,C2(M) ,C3(W) およびC4 パイプラインステージの境界を描写する。各パイプラインレジスタの出力rd0 dataC1 乃至rd0 dataC4 は、読出しおよび書込みポート間に挿入されているレジスタのデータパス(簡明化のために示されていない)に供給される。これらの出力は読出しポートにおける後者のパイプラインレジスタの全ての出力と同様に、次のステージのマルチプレクサへの入力として供給される。以下、読出しポートのマルチプレクサに対する制御信号の発生を詳細に説明する。
【0041】
その図面の右側には、4つのパイプラインレジスタおよび3つの最新のパイプラインステージに対する対応した入力マルチプレクサにより形成されている書込みポートもまた示されている。レジスタのデータパスからの4つの信号w0 dataC1 乃至w0 dataC4 は書込みポートレジスタ入力の対応したものの入力に直接供給され、あるいは前の書込みポートパイプラインレジスタの出力wr0 resultC2 乃至wr0 resultC4 で多重化することによって供給される。これらの出力信号は、レジスタファイルxregfleRFの出力と共に多重化され、読出しポートパイプラインのC0 ステージマルチプレクサに供給される。
【0042】
読出しおよび書込みポート内のマルチプレクサに対する制御信号は、以下のレジスタファイルのコンパイラ発生の説明から当業者により容易に認識されるように、図2の回路を使用してxregfileRFに対する書込みエネーブルおよび機能停止信号stall Rと共に発生される。
【0043】
理解を容易にするために、図1および2の回路の2ステージバージョンを組合せた2ステージレジスタファイルが図3に示されている。
【0044】
[レジスタファイルの発生]
regfileステートメントにより宣言された各レジスタファイルに対して、コンパイラは、
−−レジスタファイル記憶セル;
−−読出しポート;
−−書込みポート;
−−ソースオペランドインターロック論理;
−−ソースオペランドバイパス論理;および
−−宛先オペランド書込み論理
を生成しなければならない。
【0045】
[読出しおよび書込みポート]
レジスタファイルを発生する第1のステップは、読出しおよび書込みポートの数を決定し、それらポートにパイプラインステージを割当て、それらポートにオペランドを割当てることである。これらの動作をするために多くのアルゴリズムが使用されることが可能であり、それぞれにおいて結果的に種々の速度および領域トレードオフが生じる。好ましい実施形態では、以下のアルゴリズムが使用される。
【0046】
ソースオペランドをレジスタファイルから選択するために使用される各フィールドに対して、読出しポートが発生される。いくつかの場合では、これは必要な数より多くの読出しポートを発生するが、しかしそれは、レジスタ読出しが命令デコードと並列に開始することを可能にするために、一般に高速のレジスタ読出しを生じさせる。前のGaloisフィールド演算例を検討する:ここにおいて、
に変更されている。
【0047】
上記のアルゴリズムは、3以上のGFレジスタファイル読出しを同時に使用する命令が存在しなくても、3つのレジスタ読出しポート(命令ワードのr,sおよびtフィールドに対してそれぞれ1つづつ)を発生するであろう。しかしながら、読出しポートが2つしか発生されない場合、rおよびsフィールド間またはrおよびtフィールド間を選択するために読出しポートの1つの正面に2:1の多重化(mux)を有している必要がある。この多重化(mux)は、GFRWMOD命令とGFADD命令とを区別するデコード論理により制御されなければならない。複雑な例において、論理は実在的なものであり、そのレジスタファイル読出しにはるかに長い時間がかかる可能性が高い。好ましい実施形態において使用されるアルゴリズムによって必要とされる余分な領域は一般に、各レジスタファイルを読出すために使用される種々のフィールドの数が任意の命令により使用される読出しの最大数と等しくなるように、命令セット設計者が命令のレジスタファイルアクセスフィールドを構成することにより回避可能である。上記の例においてiclass gfrでオペランドgtがgrの代わりに使用されるのはこのためである。
【0048】
上記のアルゴリズムに対する可能な性能の向上は、各フィールドに対してスケジュールステートメント(以下の“TIEにおけるマルチサイクル命令”セクションでさらに詳細に説明される)において特定された最小ステージ番号を追跡することである。最小ステージ番号が命令デコードが行なわれるステージ番号より大きい場合、読出しポートの番号を減少させるためにフィールドの多重化(muxing)が使用されてもよい。最小ステージ番号が命令デコードステージにある場合、レジスタファイルを読出すために使用された各フィールドに対して別個のポートが使用される。
【0049】
以下の例を検討する:
【数2】
この場合レジスタファイルSRの4つの入力オペランド:sx、sy、suおよびsvが存在している。スケジュール情報によると、suおよびsvの両者は第2のパイプラインステージにおいて使用され、したがってサイクル時間に影響を与えることなく単一の読出しポートにマッピングされることができる。その結果、SRレジスタファイルの4つの読出しポートを生成する必要は全くない。この場合、3つの読出しポートのアドレス信号を、read addr 0,read addr 1およびread addr 2とすると、3つのアドレスに対する論理は次のようなものとなる:
read addr 0=x;
read addr 1=y;
read addr 2=instl?u:v;
【0050】
書込みポートはタイムクリィティカルの程度が低い。非常な短いパイプラインですらサイクル0でレジスタファイルを読出し、サイクル1で計算を行ない、サイクル2でレジスタファイルを書込む。したがって、レジスタファイルを書込むために使用される全てのフィールドをデコードし、それらの間で多重化を行うには多くの時間を要する。もっとクリティカルなタイミングパスはインターロッキングである;サイクル0でレジスタファイルを読出した後、どのレジスタファイルが書込まれているかをサイクル1の始めに知っている必要があるため、レジスタファイルを読出す後続の命令は、必要ならば、その機能が停止されることができる。しかしながら、一般に、1サイクルは、宛先レジスタファイルをデコードし、多重化するのに十分な時間なので、このアルゴリズムは速度に影響を与えずに領域を節約する。
【0051】
プロセッサパイプラインへのレジスタファイル読出しおよび書込みポートのインターフェースは、コアプロセッサのパイプラインアーキテクチャにしたがって変化する。好ましい実施形態では、この明細書において共に参考文献とされているDixit 氏らによる米国特許出願09/192,395号明細書およびKillian 氏らによる米国特許出願09/322,735号明細書に示されているように、コアプロセッサのパイプラインは常に、固定されたパイプラインステージにおいて読出しおよび書込みポートを使用し、この場合4ステージパイプラインレジスタファイルにおいて常に第1のステージの前に読出しポートが使用され、最後(第4)のステージの後に書込みポートが使用される。
【0052】
各読出しポートはソースオペランドとしてそれを使用する任意の命令の最初のステージで読出され、このようなオペランドを後のステージで使用する命令は最初にレジスタファイルを読出し、そのデータを指定されたステージにステージする。このステージングには、レジスタファイルが読出された後に所望の要素を生成する命令が依然として利用できるように、バイパス多重化もまた含まれている。書込みポートに関して、書込みは、たとえばWステージ等の命令引渡しステージが後で生じる場合に、そのステージ中の宛先オペランドとしてそれを使用する任意の命令の最後のステージで行なわれる。図1は、好ましい実施形態のレジスタファイル読出しおよび書込みポートに対する概略的な論理を示している。
【0053】
[バイパス論理]
バイパス論理は図1に示されており、読出しポート論理装置のマルチプレクサによって行なわれる。たとえば、命令がステージ3(wr0 data C3 )において結果を生じ、後続する命令がそのデータをステージ1で使用する必要がある場合、読出しポート論理装置の第1のマルチプレクサに対する制御信号は、左側からの第4の入力が選択されるように設定される。その結果、次のクロックサイクルにおいて、その命令に対してデータ(rd0 data C1 )が利用可能である。
【0054】
[インターロック論理]
図2にはインターロック論理が示されている。命令デコーディング論理はスケジュール情報に基づいて、まさに発せられようとしている命令のために、各読出しポート対してdefN信号を発生すると共に各書込みポートに対してuseN信号を発生する。useNは、命令にはステージNにおいてその入力レジスタオペランドが必要になるであろうということを示している。defNは、命令がステージNにおいてその結果を生成するであろうことを示している。さらに、ある命令に対するdefN信号はパイプライン中の命令と共に伝送される。機能停止信号は、全てのdefNとuseN信号の信号の組合せを検査することにより発生される。以下の例は、2つの読出しポート(rd0およびrd1)と1つの書込みポート(wr0)を備えた4ステージパイプラインレジスタファイルに対する機能停止論理を示した。信号名称( Cn )中の接尾辞は、その信号がパイプラインのステージn中に存在することを示している。
【0055】
したがって、
【数3】
【0056】
以下のパールコードは、好ましい実施形態では機能停止コードを開発するために使用される。wfield()およびrfield()は、簡単な信号名称、ポート名およびステージ番号から信号名称を構成する機能である。その表記は効率的なファクタ化された形式で書かれる。
【数4】
【0057】
[書込み論理]
書込みポートアドレスは、好ましい実施形態では、各書込みポートに関連したハードウェア費用を減少させるために多重化されるため、どのオペランドがどのポートを使用するかを決定するアルゴリズムを有することが必要になる。この多重化に対する1つの基準は、必要とされる論理を最小にすることである。ターゲットのパイプラインにおいて、主要な論理装置の費用は書込みポートステージにデータをステージングする費用である。全ての書込みが同じパイプラインステージで行なわれる場合、この論理装置の費用に差はないが、しかし書込みが多数のステージで行なわれる場合には、類似した書込みステージを有する宛先オペランドをひとまとめにすることによって論理が節約されることができる。
【0058】
以下の例を検討する:
【数5】
ここで、inst1はSRに対して2つの結果を生成し、1つは3サイクルで生成され、他方は8サイクルで生成されたものである。inst2はSRに対して9サイクルで1つの結果を生成する。inst1には2つの書込みポートが必要であり、inst2には1つの書込みポートが必要なので、レジスタファイルSRは2つの書込みポートを有していればよい。そのポートをwr0およびwr1とする。inst1に対して、書込みポートへのオペランドのマッピングは簡単に、
sx−>wr0
sy−>wr1
である。
【0059】
これは、wr0が8つのステージを有する必要があり、wr1が3つのステージを有する必要があることを意味している。inst2に対して、
sz−>wr0
または
sz−>wr1
のいずれかであるという選択肢がある。
【0060】
しかしながら、2つの選択肢の論理費用は異なっている。wr0へのszのマッピングは、wr0にもう1ステージ追加すること(8から9への増加)を意味し、wr1へのszのマッピングは、wr1にもう6ステージ追加すること(3から9への増加)を意味する。
【0061】
好ましい実施形態は、以下のアルゴリズムを使用する。各命令に対して、ステージ番号による降順でオペランドを分類し、それらを書込みポート0乃至書込みポートn−1に順次割当てる。したがって、書込みポート0が有するデータチェーンが最長となり、書込みポートn−1が有するデータチェーンが最短となる。mがnより小さいm個のオペランドを有する命令に対して、それらのオペランドはステージ番号による同様の降順で最初のm個の書込みポートにマッピングされる。以下の例は書込みポート割当てプロセスを示すために使用される:
【数6】
【0062】
上記の書込みポート割当て手順がデータステージング費用を最小化しても、電力消費のような別の費用基準の最適化のためにさらに向上されることができる。上記の例において、ステージング費用を全く増加させずに、inst3のswがwr1にマップされることができる。しかしながら、そうすることにより、データがステージ2の終りにレジスタSR中に書込まれた後、パイプラインをパワーダウンする機会が与えられる。
【0063】
swをwr0に割当てるには、パイプラインが9サイクルのあいだアクティブである必要がある。以下の手順は、電力消費のような付加的な費用考慮事項に対する書込みポート割当てをさらに改善するための第2のパスとして使用されることができる。
【0064】
m<nであるm個のオペランドを有する各命令ならびに逆の順での各オペランドに関して、オペランドの割当てを新しい書込みポートiに移し、ここでiはステージング費用の増加を伴わないで可能な限り大きいものである。前の例を使用してこの手順を説明するために、inst1のオペランドはすでに全ての書込みポートを使用しているため、移動することはできない。inst2に関して、szはステージング費用の増加なしにwr1に再度割当てられることはできない。inst3に関して、swはステージング費用の増加なしにwr0からwr1に再度割当てられることができる。
【0065】
レジスタファイル読出しおよび書込みポートの割当てのためのアルゴリズムに関して多くのバリエーションが可能である。たとえば、いくつかの状況では、データステージングを最小にして消費電力を少くするために厳密に必要とされる個数より多くのポートを設けることが適切かもしれない。読出しおよび書込みポートに関連したハードウェア費用をさらに減少するためにいくつかの命令により必要とされる個数より少いポートを設けることもまた可能である;読出しポートに関して、これはレジスタオペランドを読出すのに多くのサイクルを必要とすることを意味し、書込みポートに関しては、これはあるレジスタ書込みをバッファして、書込みポートの使用されない1サイクル待機することを意味する。別の可能なものは、TIEコードがレジスタファイル読出しおよび書込みポート割当てを特定して、自動アルゴリズムにより望ましくない結果が生じるケースに対処することを可能にすることである。
【0066】
拡張レジスタ構成の上記の概念は、N読出し、M書込みBビットSエントリレジスタファイルを生成するパールプログラムである付録Bのコードにおいて使用される。
【0067】
[ロード/記憶命令]
関連技術の背景において説明されたように、TIEロードおよび記憶命令は、データをTIEレジスタファイルとの間で転送すると共にデータをTIEレジスタファイルからメモリに直接転送する手段を提供するために必要である。したがって、それらはこの要求により、コアパイプラインのメモリ(M)ステージのローカルメモリ、すなわちデータキャッシュ、データRAM、データROM等を共用しなければならない。ローカルメモリを共用することに加えて、コアロード/記憶に使用されるその他のハードウェアリソースを可能な限り共用することが望ましい。リソースを共用することにより、領域およびタイミングに関してさらに最適な解決方法が得られる。以下に説明されるように、アドレス計算論理およびデータ整列論理は、コアとTIEロード/記憶との間で共用される2セットのリソースである。
【0068】
好ましい実施形態において、以下のインターフェース信号がTIEロード/記憶を実施することを要求される:
【数7】
【0069】
これらの信号の大部分は図4に示されている。図6はLSSize927 、MemDataOut<n>901 およびMemDataIn<n>938 を示している。LSSizeはデータ参照のサイズをバイト(好ましい実施形態においては1,2,4,8または16)で示し、MemDataOut<n>はTIEセマンティクスからコアへのデータの記憶を行い、MemDataIn<n>はコアからTIEセマンティクスへのデータのロードを行う。好ましい実施形態において、<n>は8,16,32,64または128であってよい。
【0070】
TIEロード/記憶のメモリアドレスの計算において、TIEロードおよび記憶命令のフォーマットがコアのそれと一致する場合、アドレス加算器を共用することが可能である。アドレス加算器の複製は無駄であり、アドレス計算路における付加的遅延を導入する。インターフェース信号は、図4に示されているコアアドレス加算器への入力を表す。このアドレス論理はアドレシングモード:
I AR[s]+immediate
X AR[s]+AR[t]
のサポートを意図されている。
【0071】
2つのモード間の選択はLSIndexedインターフェース信号によって行なわれる。I形式により使用されるimmediateはVAddrOffset入力上に与えられ、X形式により使用されるAR[t]値はVAddrIndex入力上に与えられる。VAddrBaseはAR[s]を与えるために使用される。AR[s]およびAR[t]以外の他の値がTIEセマンティックブロックによりVAddrBaseおよびVAddrIndex上に与えられることができるが、これらの値を与えることにより、論理最適化は結果的に得られる論理を著しく簡単化することが可能となり、それによってアドレス発生がタイミングクリティカルとなることを阻止する。これは、TIE論理からのVAddrBase(AR[s])がコアのベースアドレスと同じであることを論理最適化が認識してそれを同じ信号に減少するためである。
【0072】
TIEは、この論理に対してコアにより与えられるある修正においてロードおよび記憶整列による利益を得ることができる。整列は大量の論理が実施されることを必要とするため、TIEに対する複製を回避することにより著しい領域の節約が行なわれる。さらに、複製は重いローディングによるタイミング臨界路を導入することを可能にし、それがローカルメモリの出力および整列ならびにデータセンタク制御信号を強制的に駆動させる。もっとも、整列リソースの共用を実行するために、図5および6に例示されている修正が必要である。
【0073】
これらの修正は、コアロード/記憶の32ビットとは対照的にTIEロード/記憶が多数のロード/記憶幅を必要とし/提供することに関連する。これは、整列論理装置内の全てのデータ路がTIEまたはコアデータ幅の最大に整合するように幅を増加させなければならないことを意味する。第2に、TIEロードは、コアにより要求される単なる右シフトとは対照的に、もっと一般的な整列機能を必要とする可能性が高い。これは、整列論理がTIE整列機能とコア右シフトとのスーパーセットを行わなければならないことを意味する。
【0074】
図5は、128ビットアクセス幅の3ウェイセット関連データキャッシュ803 乃至805 および並列データRAM806 に対する従来技術のコアロード整列論理を示している。この例において、キャッシュされていないデータ入力808 はまたキャッシュレフィル都合上128ビット幅であるように選択され、データRAMアクセスは、それが32ビットの最大幅を有するコアロード/記憶によってのみ行なわれるため32ビット幅である。記憶されたデータが後続するロードにバイパスされなければならない場合に使用される32ビット幅の記憶データ入力もまた存在する。
【0075】
使用される主な整列メカニズムは、符号拡張814 乃至819 もまたそうであるように、バイトレベルの右シフトにより後続される4:1マルチプレクサ809 乃至812 である。シフトの量はロードアドレス813 、821 およびワンホットのデコードされたcoreSize信号820 により与えられる。記憶およびデータRAMデータは、それらがすでに32ビット幅なので4:1マルチプレクサを必要としない。その後、一連の後続するマルチプレクサ822 乃至833 によって32ビット幅の整列されたデータが選択され、最終的なコアロードデータ834 が得られる。
【0076】
図6は、この実施形態におけるロード整列構成の一例を示している。主要な違いは、全てのロードデータソース906 乃至911 がここでは128ビット幅のTIEロード命令をサポートするために128ビット幅であり、ロード整列結果もまた128ビット幅であることである。この例において、整列自身は、符号拡張素子921 乃至925 により後続されるバイトレベルロ−タ914 乃至918 を使用して行なわれる。この例では、TIEセマンティクスがたまたまデータ回転(再び、コアロード整列により要求された単なる右シフトに加えて)を要求しているので、バイトレベル回転子が必要とされている。シフトまたは回転の量は、ロードアドレス919 およびワンホットのデコードされたLSSize927 またはcoreSize926 によって与えられる。最終的なロード整列の出力は、128ビット幅全体938 がLSSizeによって特定された多数のロード幅の全てを供給するTIEコプロセッサにより、あるいは3つのコアロード幅32/16/8ビットをcoreSizeにより特定されたものとして供給するコア専用の最下位32ビット部分939 により使用されることができる。
【0077】
コアはメモリデータに加えて、バーチャルアドレスをセマンティックブロックに戻す。バーチャルアドレスはしばしば、ロードデータに関する付加的な処理のために必要とされる。さらに、これによって、バーチャルアドレスを形成するために使用されるレジスタを修正するロードおよび記憶命令が定義されることが可能になる。たとえばコアISAの“更新”モードは以下を行う:
IU vAddr<−AR[s]+offset
AR[s]<−vAddr
XU vAddr<−AR[s]+AR[t]
AR[s]<−vAddr
【0078】
ベースアドレスレジスタAR[s]への束にされた書込みにより、多くの内部ループにおける別々のインクリメント命令が回避される。これはTIEにおいて“in”を“inout”に変更して割当てを追加するのと同じくらい簡単に行なわれる。
【0079】
ベースアドレスレジスタへの束にされた書込みから得られる利益を理解するために、最初に、この特徴を使用しないソフトウェアループを検討する:
【数8】
【0080】
この例は、その要素が8バイト幅である2つの入力アレイ(pxおよびpy)にわたってループし、計算(inst1)を行い、別のアレイ(pz)中に結果を記憶する。このループにおける7つの命令のうち3つのものがロードおよび記憶命令に対するベースポインタをアドバンスするために使用された。束にされた書込みロードおよび記憶命令を使用するので、この例は以下のコード:
【数9】
で示されるようにはるかに効率的なものになる。
【0081】
ここで、tie loadiu(tie storeiu)は1つの命令で、バーチャルアドレスをp+8として計算し、メモリデータをロード(記憶)してpをp+8に変更する。この最初の減算は、その最初のものがpx+8,py+8で始まり、最初にpx+8に記憶するために、px,pyおよびpzを補正するために必要とされる。
【0082】
ここに説明されているロード/記憶インターフェースのようなコア信号のステージ番号はコアパイプラインにより固定され、スケジュール宣言で特定されない。しかしながら、上述のパイプライン挿入アルゴリズムでは適切な値が使用される。たとえば、以下によって、ロードおよび記憶命令が上記のGaloisフィールド演算GFユニット例に加えられる:
【数10】
【数11】
以下は、本発明のためにロードアライナーを生成するtpp入力である:
【数12】
【数13】
以下は、幅128に対する出力である:
【数14】
以下は、幅64に対する出力である:
【数15】
以下は、幅32に対する出力である:
【数16】
【0083】
[コアへのインターフェース]
ロードおよび記憶は典型的に、データキャッシュまたは小型データRAMを使用してプロセッサパイプライン内で処理される。費用および正確さの両方のために、新しいロードおよび記憶命令はまた、TIEおよびコア命令の両方により処理されるキャッシュ/RAMデータの完全性を維持するためにこのデータキャッシュ/RAMを使用しなければならない。従来技術のシステムにおいて、コアに加えられた命令はそのコアと論理を共用しなかった。好ましい実施形態では、このような共用のためのメカニズムが提供される。
【0084】
TIE構成:interface <sname><width><mname>[in|out]は、TIEモジュール<mname> にインターフェースする信号<sname> を宣言する。この信号は<width> ビット幅であり、それは最後のパラメータに応じてこのTIEコードへの入力または出力のいずれかである。コアへのインターフェースについて、<mname> はコアである。
【0085】
TIEiclass構成は、命令により使用されるインターフェース信号を列挙するために拡張される。そのシンタックス(構文)は次のとおりである。
【0086】
iclass<classname>
{<iname>, ・・・}
{<operandspec>, ・・・}
{<statespec>, ・・・}
{<interfacespec>, ・・・}
ここで、<interfacespec> は in<sname>または out<sname> のいずれかであり、<sname> はインターフェース信号名または例外ステートメントで宣言された例外信号名のいずれかである。例外信号名は入力としてではなく、出力としてのみ使用されてもよい。同様にスケジュール構成が拡張され、それによってインターフェース信号名は“in”(入力として)または“out”(出力として)を使用してパイプラインステージ番号を与えられることが可能になる。
【0087】
セマンティックブロックからの各出力インターフェース信号は、その命令のワンホット命令デコード信号の論理和演算と論理積演算をされ、その出力がそれらのiclassのインターフェースセクション中に列挙される。その後、全てのセマンティックブロックからの論理積演算をされたインターフェース信号が論理和演算をされ、コアへの出力信号を形成する。図7は、TIEコンパイラによる出力インターフェース信号snameの構成を示している。sname semIはi番目のセマンティックブロックにより生成されたsnameの値を表している。iN1およびiN2は1ビット命令デコード信号であり、sname semI selは、i番目のセマンティックがsnameを生成する状態を表す信号である。各入力インターフェース信号は、その信号を使用するモジュールに直接供給される。
【0088】
[TIEにおけるコンパイラ/OSサポート]
ここまではTIE構成は、状態および命令が規定されることを可能にしているが、しかしこれらの命令がソフトウェアによりどのようにして自動的に使用されるかに関する手掛かりを与えていない。従来技術のシステムでは、使用される命令は全て、アプリケーション中に書込まれたイントリンシックスによって参照された。したがって、コンパイラはイントリンシックスを命令上にマップするためだけに必要とされ、命令自身の使用方法を知るために必要とはされなかった。ユーザ定義可能なレジスタファイルの追加により、コンパイラがプログラム変数をレジスタファイルの要素に割当てることが望ましいことになる。レジスタ割当て中、コンパイラは、レジスタファイル中に含まれるレジスタにプログラム値を割当てようと試みる。プログラム中のある位置において、全ての値がレジスタに割当てられることができない。これらの位置では、1以上の値がメモリに移動されなければならない。値をレジスタからメモリに移動するには記憶装置が必要であり、値をメモリからレジスタに移動するにはロードが必要である。したがって、最低限、コンパイラは値をメモリからレジスタにロードする方法および値をレジスタからメモリに記憶する方法を知っていなければならない。
【0089】
レジスタ割当て中、コンパイラが値を1つのレジスタから別のレジスタへ移動させることも必要である。たとえば、1つの機能により生成された値はレジスタAに戻され、次の命令には、その値がレジスタBから使用されることが必要かもしれない。コンパイラは、最初にレジスタAを一時記憶位置に記憶し、その後その記憶位置からレジスタBにロードすることにより値をレジスタAからレジスタBに移動させることができる。しかしながら、値をレジスタAからレジスタBに直接移動するほうが、おそらくもっと効率的である。したがって、1つのレジスタから別のレジスタへの値の移動方法をコンパイラが知っていることは、必須ではないが、望ましい。
【0090】
保存および再生シーケンスは、個々のレジスタの保存および再生シーケンスの単なる連結より複雑かもしれない。全レジスタファイルをしたとき、性能および、またはスペース節約対スピル(spill)命令の明らかな連結の機会が生じる可能性がある。これはまた、レジスタファイル中には存在しないコプロセッサ状態を含む可能性がある。
【0091】
各コプロセッサの状態は、種々の異なった潜在的に相互依存したコンポーネントから成る。これらのコンポーネントを保存および再生するために使用される命令シーケンスは、相互依存性に依存している可能性がある。
【0092】
相互依存情報はグラフとして表されることができる。グラフが周期的である場合、その状態を成功的に保存することはどの時点でも不可能である。しかし、依存グラフが非周期的(DAG)であるならば、コプロセッサの状態の全てが任意の時点で保存および再生されることができるように、コンポーネントの保存および再生を配列(order)する方法が存在する。
【0093】
TIMコンパイラは標準的なグラフ構成および解析アルゴリズムを使用して、この依存情報を生成し、解析し、所定のコプロセッサに対する保存および再生シーケンスを生成したときにこの情報を考慮する。
【0094】
たとえば、regfile aおよびregfile bという2つのレジスタファイルを有するコプロセッサを考慮する。regfile aは4つの32ビットレジスタを有し、regfile bは16の128ビット値を有している。付加的な状態は、reg touchedと呼ばれるタッチされているレジスタのビットフィールド、ならびにreg backと呼ばれるregfile aのプッシュレジスタ・ツー・バックレジスタ0である。コプロセッサは以下のロードおよび記憶命令を供給して、そのコプロセッサ状態を保存および再生する:
【数17】
この場合、この保存状態依存性に対するDAGは、次のように見える:
reg touched<−− regfile a,regfile b,
reg back
これは、このコプロセッサに対するTIEにより、regfile a,regfile bまたはreg backがタッチされているのでreg touchedは任意の時点で変化するように構成されているためである。
【0095】
regfile a<−− reg back
これは、regfile aでレジスタを保存するには、regfile a中にフリーレジスタを必要とするためである。regfile a中のフリーレジスタを獲得するには、そのレジスの値がreg back通って移動される必要がある。これはreg backの現在の値を破壊する。
【0096】
regfile a<−−−− regfile b
これは、regfile bに対する保存命令が、記憶すべきものへのアドレスとしてregfile a中のレジスタを使用するためである。これは、regfile aがすでに記憶されている場合にのみregfile bが記憶されることが可能であることを意味する。これは、例示を簡単にするための説明に過ぎず、実際はregfile a中のレジスタは1つだけである。
【0097】
このようにして、保存シーケンスは、その状態が適切な順序で保存されることを確実にする。この場合、その順序は:
reg touched,reg back,regfile a,
regfile b
【0098】
さらに、好ましい実施形態により、組込みタイプの標準プログラミング言語(たとえば、Cにおける64+ビットまたは上述したような飽和演算)で表されることのできない構成要素を有するレジスタファイルの定義がことが可能となるため、規定されたハードウェアに一致するように新しいタイプを追加するメカニズムを有している必要がある。プログラミング言語タイプはまた、変数がどのレジスタファイルに割当てられるかを決定するのに有用である。
【0099】
たとえば、整数計算命令は整数レジスタファイル中のそれらのオペランドだけを採用し、浮動小数点命令は浮動小数点レジスタファイル中のそれらのオペランドだけを採るので、多くのISAでは整数値を1つのレジスタファイルにマップし、浮動小数点値を別のレジスタファイルにマップすることが一般的である。新しいデータタイプを生成する能力が与えられた場合、組込みタイプと新しいタイプとの間および異なった新しいタイプ間で可能な変換を特定するメカニズムを有していることが望ましい。たとえば、Cプログラミング言語では、charタイプ変数とshortタイプ変数との間の変換が可能である(charタイプを符号またはゼロ拡張することにより)。
【0100】
TIE構成:ctype<tnama><size><alignment><rfname>は、プログラミング言語タイプ<tnama>を生成し、それがメモリ中の<alignment>ビット境界に整列された<size>ビットであり、これが<rfname>に割当てられることを宣言する。
【0101】
たとえば、Galoisフィールド演算GFユニットに関して続けると、ステートメントctype gf8 8 8 gfは、8ビット値を8ビットメモリ境界で整列させる“gf8”と名付けられた新しいタイプ(好ましい実施形態ではCプログラミング言語に対する)を宣言し、これらの値は必要に応じて“gf”レジスタファイルに割当てられるレジスタである。
【0102】
TIE構成:proto<pname>{<opsec>,…}{<tpsec>,…}{<inst>…}は、コンパイラがイントリンシックスのオペランドに関するタイプ情報を知っているか、あるいはそれを提供しなければならない種々の機能を行う命令シーケンスを特定するために使用される。<opsec>はオペランドタイプ仕様であり、<tspec>は命令シーケンスにより必要とされる一時レジスタ仕様であり、<inst>はシーケンスの命令である。
【0103】
<ospec>の構文は、
[in|out|inout]<typename>[*]<oname>
であり、ここで<oname>はシーケンスの命令(<inst>)に置換されてもよいオペランド名である。<typename>はオペランドのタイプ名である(オプションのアステリスクが与えられている場合は、そのタイプに対するポインタである)。
【0104】
一時レジスタ仕様<tspec>の構文は、
<rfname><oname>
であり、ここで<oname>は、シーケンスの命令(<inst>)中に代入されてもよいオペランド名称である。<typename>は、<onme>がこのシーケンスに一時的に割当てられなければならないレジスタファイルを識別するタイプ名称である。
【0105】
シーケンス中の命令<inst>の構文は、
<iname>[<oname>|<literal>],…;
であり、ここで<iname>は命令名であり、<oname>は<ospec>または<tspec>で宣言されたオペランド名称であり、<literal>は、protoにより特定された命令シーケンスを発生したときにコンパイラにより不変のまま使用される定数またはストリングである。
【0106】
protoの1つの使用法は、イントリンシックスを規定するために単にタイプを命令オペランドと関連付けることである。この場合、<pname>は命令の名称である;<ospec>はiclassオペランド仕様に一致する(タイプ名称が追加されることを除いて);<tspec>リストは空でなければならない。また<inst>シーケンスは単一の命令から構成されていなければならない。一例を以下に示す:
【数18】
【0107】
protoの別の使用法は、マルチ命令イントリンシックを規定することである。ここでは<tspec>は空でなくてもよい。たとえば:
【数19】
【0108】
protoの付加的な使用法は、ctypeTIE構成を使用して宣言されたプログラミング言語タイプの値のロードおよび記憶方法をコンパイラに命令することである。前に述べたように、メモリとの間でやり取りされる値をロードおよび記憶することができるには、コンパイラがレジスタ割当てを行い、レジスタファイルの内容がタスクスイッチで保存および復元されることを可能にする必要がある。
【0109】
各ctype<tname>宣言に対して、以下の形式のproto宣言が存在しなければならない:
【数20】
【0110】
<tname> loadi protoは、タイプ<tname>の値をメモリからレジスタ中にロードするために使用されなければならない命令シーケンスをコンパイラに知らせる。<tname> storei protoは、タイプ<tname>の値をレジスタからメモリ中に記憶するために使用されなければならない命令シーケンスをコンパイラに知らせる。
【0111】
前に述べたように、コンパイラは、値が1つのレジスタから別のレジスタにどのように移動すべきかを知っていることが望ましい。ロードおよび記憶によるように、protoはレジスタ間において値をどのように移動すべきかをコンパイラに命令するために使用される。各ctype<tname>宣言に対して、以下の形式のproto宣言が存在する可能性がある:
【数21】
【0112】
たとえば、Galoisフィールド演算GFユニットに関して続けると、proto宣言:
【数22】
は、コンパイラにgf8変数のレジスタ割当てを行わせるように好ましい実施形態に入力される必要がある;それらはまた、gfレジスタファイルに対するタスク状態スイッチシーケンスを生じさせるために入力される必要がある。
【0113】
protoの最後の使用法は、組込みタイプと新しいタイプとの間および異なった新しいタイプ間で可能な変換を規定することである。変換プロとタイプは必要ない;たとえば、新しいタイプAと新しいタイプBとの間の変換が特定されていない場合、コンパイラはタイプAの変数がタイプBの変数に変換されることを可能にしない。新しいまたは組込みタイプ<t1name>および<t2name>(組込みタイプであることが可能なのは多くてその1つ;このメカニズムは2つの組込みタイプ間の変換の仕様を許さず、これは、その変換がプログラミング言語よりすでに規定されているためである)の各対に対して、以下の形式の3つまでのproto宣言が存在することができる:
【数23】
【0114】
たとえば、Galoisフィールド演算GFユニットに関して続けると、proto宣言:
【数24】
は、メモリ中のタイプcharの変数とレジスタ中のタイプgf8の変数との間の変換を可能にする。これらのprotoに対して、以下の例は、charタイプの2つのベクトルがGFADDイントリンシックを使用してどのようにして付加されるかを示している:
【数25】
【0115】
従来技術のシステム(たとえば、GNU Cコンパイラ)では、コンパイラは各プログラム変数およびコンパイラ発生一時変数に対するタイプ情報を維持する。これらの組込み変数タイプは、高レベル言語タイプ(たとえば、C、char、short、int、float、double等)に対応する。各組込みタイプに対して、コンパイラは、タイプの名称、そのタイプに対するサイズおよび整列要求、ならびにそのタイプの値が割当てられなければならないレジスタファイルを知っていなければならない。新しいタイプに関して、この情報はctype言語構成により提供される。ctype情報を使用して、コンパイラはそのタイプを表すために内部タイプ構造を発生し、組込みタイプに対して行われたものと同じ方法でプログラム変数およびコンパイラ発生一時変数に対してそのタイプを使用する。
【0116】
従来技術のGNU Cコンパイラは、列挙されたタイプmachine modeを使用してタイプを内部的に表す。関連したタイプはクラスでまとめられ、列挙されたタイプmode classによって記述される。新しいタイプをサポートするために、当業者は、ユーザ定義タイプを表わしているタイプのクラスを表すためにmode classにイニューマレータを追加することができ、ctypeTIE言語構成を使用して宣言された新しいタイプのそれぞれに対してmachine modeに1つのイニューマレータを追加することができる。たとえば、新しいタイプを表わすクラスがMODE USERと呼ばれると仮定すると、ファイルmachmode.hでのmode classの定義は以下のようになる:
【数26】
【0117】
イニューマレータは、ファイルmachmode.defにラインを挿入することによってmachine modeに追加される。各ラインは新しいタイプ、そのクラスおよびそのサイズ(8ビットバイトで与えられる)を規定する。ユーザ定義タイプに対するイニューマレータは、U<n>modeと名付けられ、ここで0<n>はゼロとユーザ定義タイプの総数との間の数である。たとえば、前に説明した例からのユーザ定義タイプgf8を表わすために内部タイプを追加するために、以下のラインが追加される:
DEF MACHMODE(U0mode,“U0”,MODE USER,1,1,VOIDmode)
その後、当業者はGNU Cコンパイラにより与えられた解析および最適化を修正し、MODE USERクラスのタイプに関して正しく行うことができる。
【0118】
従来技術のコンパイラにおいて、コードセレクタ(またはコード発生器)は、内部的に表わされた各命令を低レベル命令のシーケンス(アセンブリ言語に多かれ少かれ対応している)で置換することができる。コードセレクタは、内部命令によって行われた動作の検査および命令に対するオペランドのタイプにより置換すべき命令シーケンスを決定する。たとえば、addを表わす内部命令はタイプintの2つの値を入力として有し、またタイプintの1つの値を出力として有している;あるいは、タイプfloatの2つの値を入力として有し、またタイプfloatの1つの値を出力として有していてもよい。入力および出力値のタイプに基づいて、コードセレクタは整数加算を行う命令のシーケンスまたは浮動小数点加算を行う命令のシーケンスのいずれかを選択する。ユーザ定義タイプに対して、ロード、記憶、移動および変換proto定義は、ユーザ定義タイプを有する1以上のオペランドを有する内部命令と置換するための命令シーケンスを記述する。Galoisフィールド演算GFユニットの例で続けると、内部命令がgf8値のロードを表わす場合、コードセレクタはgf8 loadi protoを調べて、その命令と置換されるべき命令シーケンスを決定する。
【0119】
従来技術のGNUコンパイラにおいて、ターゲットのプロセッサにおいて利用可能な命令は、命令パターンを使用して記述される;さらに詳細な情報はたとえば文献[Stallman, “using and Porting GNU CC”(1995)]に記載されている。これらの命令パターンは、オペランドの番号およびタイプを含む命令を記述している。コンパイラにおいてユーザ定義タイプをサポートするために、ロード、記憶、移動および変換protoは、コンパイラによって期待される命令パターンに変換される。たとえばgf8 load protoは以下のパターンにより表わされる(gf8 ctypeがmachine modeイニューマレータU0modeにマップされていると仮定する):
【数27】
【0120】
一時レジスタを特定するprotoは、適切なタイプのオペランドの重書きあるいは“クロッバー”を行う命令パターンに変換される。コンパイラは、クロッバーされたオペランドがその命令の位置で使用されないことを保証するため、その命令はそれを一時的なものとして使用することができる。たとえば、ユーザ定義タイプttに対する以下のロードprotoはクロッバーを含む命令パターンを発生する:
【数28】
【0121】
[イントリンシック機能宣言]
Killian 氏他による米国特許出願では、GNUasmステートメントを使用する機能として全てのTIE命令の定義を含んでいるイントリンシック機能宣言ファイルが発生される。とくに、各命令機能は、そうしないと発生する可能性の高い最適化を抑制するC揮発性プロパティにより識別される。この方法は安全であるが、TIE命令が安全に再度順序付けされることができる場合、あるコンパイラ最適化を阻止する。本発明は、従来技術のシステムを2つの方法で改善する。第1に、ロードおよび記憶命令だけが揮発性として宣言され、したがってコード最適化中に命令を再度順序付けする最大自由度をコンパイラに提供する。第2の改善では、特別なユーザ宣言されたステートメントを使用する命令が明示的な状態アーギュメントにより宣言され、したがって命令の副作用に関するさらに正確な情報をコンパイラに提供する。以下のヘッダファイルは、GF例中の全ての命令をイントリンシック機能として宣言するためにTIEコンパイラから発生される:
【数29】
【数30】
【0122】
上記のサンプル出力において、GFADD8Iのような演算命令は揮発性として宣言されない。LGF8 Iのようなロードおよび記憶命令は揮発性として宣言される。GFRWMOD8のようなプロセッサ状態を読出すか、あるいは書込む命令は、これらの命令に副作用があることをコンパイラに信号で伝えるもう1つのアーギュメント xt stateを有している。
【0123】
[レジスタ割当て]
従来技術のシステム(たとえば、CNU Cコンパイラ)は、可搬性のために設計されたレジスタ割当てアルゴリズムを含んでいる。可搬性のために、コンパイラは種々のISAをサポートすることが必要になる。これらのISAは、それら自身は構成可能でもなく、拡張可能でもないが、それらの任意のものをターゲットにしなければならないコンパイラは、レジスタ割当てに対する一般的なアプローチをとらなければならない。したがって、従来技術のシステムは多レジスタ割当てを許すことが可能であり、あるものはプログラミング言語タイプをあるレジスタファイルに制限することが可能である。
【0124】
従来技術のGNU Cコンパイラは、ターゲットのマシン記述を修正することにより任意の数のレジスタファイルが特定されることを可能にする。当業者は、文献“Using and Porting GNU CC”に記載されているように、ターゲットに対するマシン記述を修正することによって1以上の新しいレジスタファイルのためにGCCにサポートを追加することができる。
【0125】
各TIE regfile構成に対して、コンパイラは、そのレジスタファイル中のレジスタに値を割当てるように自動的に構成される。regfile構成は、レジスタファイル中のレジスタの数を示している。上述のように、TIE ctype構成は、そのタイプのその値が割当てられなければならないレジスタファイルを特定する。コンパイラは、ユーザ定義タイプを有する各プログラム値を割当てようと試みるときに、この情報ならびにレジスタファイル中のレジスタの数を使用する。Galoisフィールド演算GFユニット例で続けると、gfレジスタに対するregfile構成は:
regfile gf 8 16 g
【0126】
これは、それぞれがサイズ8ビットの16個のgfレジスタが存在していることを示す。gf8タイプに対するctype構成は:
ctype gf8 8 8 gf
であり、タイプgf8の値がgfレジスタファイルに関連付けられなければならないことを示している。このようにして、コンパイラはタイプgf8の全ての値を、16個のレジスタを有するgfレジスタファイルに割当てる。
【0127】
[命令のスケジューリング]
従来技術のシステム(例えばGNU Cコンパイラ)はパイプライン機能停止(ストール)を減少することにより性能を向上するために命令を再度出す命令スケジューリングアルゴリズムを含んでいる。これらのアルゴリズムは発行幅等等のパイプラインの制限と機能装置の有効性とを満たしながら、さらにストールサイクルを最少にする命令発注を決定するためにターゲットプロセッサのパイプラインをシミュレートすることにより動作する。
【0128】
従来技術のGNU Cコンパイラは、任意の対の命令に対して、1つの命令が直ちに次々にスケジュールされる場合に生じるストールサイクル数を決定することによりプロセッサのパイプラインをシミュレートとする。各命令対のストール情報に基づいて、コンパイラは総ストールサイクルを最小にする命令の発注を発見しようとする。新しいTIE命令では、コンパイラはTIE言語スケジュール構成により与えられる情報を使用することによりストールサイクルを決定する。命令Bが命令Aのすぐ後にスケジュールされる場合に生じるストール数を決定するために、コンパイラはAの各出力オペランドの書込みのためのパイプラインステージをBの各対応する入力オペランドの読込みのためのパイプラインステージと比較する。各オペランドに対しては、これらの値の差プラス1(規定されたオペランドパイプラインステージ値に対するスケジュール構成のセマンチックのため)はストールを避けるためにAをBから分離しなければならない最小数のサイクルを示している。値1はストールせずにBがAの後すぐにスケジュールされることができることを示しており、値2はAが1ストールサイクルを生じたすぐ後にBをスケジュールすることを示しており、以下同様である。Aにより書かれる全てのオペランドにわたる最大のストール値はBがAのすぐ後にスケジュールされる場合に生じるストールサイクル数である。
【0129】
以下の例のスケジューリング構成を考慮する。
【数31】
【0130】
以下のコードシーケンスでは、ALD命令のxtオペランドはAADD命令のxaオペランドと同じである。したがって、AADD命令はストールを避けるためALD後に(def xt)−(use xa)+1=2−1+1=2サイクルをスケジュールされなければならない。AADDがALDのすぐ後にスケジュールされるならば、1つのサイクルストールが存在する。
ALD x3, a0, 0
AADD x0, x3, x1
以下のコードシーケンスでは、ALD命令のxtオペランドx3はAADD命令のxbオペランドと同一である。したがって、AADD命令はストールを避けるためにALD後に(def xt)−(use xb)+1=2−2+1=1サイクルをスケジュールされなければならない。この場合、AADDがALDのすぐ後にスケジュールされるならば、ストールは存在しない。
ALD x3, a0, 0
AADD x0, x1, x3
【0131】
[レイジー状態スイッチ]
レジスタファイルをプロセッサに付加することは、ほとんどの実時間オペレーティングシステムにより実行されるようなマルチタスク環境ではタスク切換えの一部分としてセーブされ回復されなければならない状態の量を著しく増加する。付加的な状態はしばしばタスクのサブセットで実行されるある計算に特定であるので、そうすることはタスク切換えサイクルカウントを不必要に増加する理由で、タスク切換え毎にこの付加的な状態をセーブし回復することは望ましくない。これはまた解決策が従来技術にあるので拡張可能ではないプロセッサでは問題である。例えばMIPS R2000 CPENABLEビットは1つのタスクから別のタスクへのコプロセッサのレジスタの“レイジー(lazy)”切換えを可能にする。好ましい実施形態はレイジー切換えがプロセッサ拡張により生成される状態に適用されることを可能にする(TIE状態およびregfile 宣言)。
【0132】
これはセーブおよび回復動作では最も複雑なものの1つである。幾つかの理由で複雑である。即ち、文脈切換えから遅延される時間点で生じることと、実行時間が各プロセッサファイルの妥当性を管理しなければならないことと、コア自体が例外が生じたときにコプロセッサの妥当性を変更することが理由である。
【0133】
これがどのように対処されることができるかを示すため、2つのタスクA、Bを有するシステムが存在すると仮定する。また2つのコプロセッサレジスタcp 0とcp 1も存在する。システムの状態はコアにより維持されている有効なビットと、実時間により維持されているレジスタファイルオウナー記録からなる。その後、以下の表1で示されている事象のシーケンスを考慮する。この例ではコプロセッサの状態は各タスクのスタックのベースに記憶されていると仮定される。
【表1】
【表2】
表1
【0134】
レイジー切換え機構はアクセスがエネーブルまたはディスエーブルされることができるセットへグループ化される状態を必要とし、ディスケーブルされた状態へのアクセスは例外を生成し、例外ハンドラは切換えられなければならない状態を決定でき、例外ハンドラはメモリにセーブされ、メモリから状態および再エネーブルされたアクセスを回復する。
【0135】
好ましい実施形態では、TIEは、
coprocessor <came> <cumber> { <sname>,...}
を構成し、<sname>,... により名称を付けられた状態がレイジー切換えの目的でグループされていることを宣言する。このグループ化は名称<came>と、0乃至7の範囲の番号<cumber>を与えられる。任意の<sname>,... が1よりも多数のコプロセッサステートメントで名称を付けられるならば、これはエラーである。
【0136】
前述の構成では、命令のリストが生成され、これはiclassのin/out/inoutリストでは<sname> を有する。信号がその後生成され、これはこれらの命令に対する命令のワンホットデコードのORである。この信号はCPENABLEビットの補数によりAND処理される。各プロセッサで生成されるこれらの信号はその後、以下の例外セクションで詳細に説明する例外を生成するTIEソースコードと結合される。全てのコプロセッサのディスエーブルされた例外はTIEソースコードからの任意の例外よりも高い優先順位を有する。コプロセッサのディスエーブルされた例外の間には最も低い番号の例外が優先順位を有する。
【0137】
好ましい実施形態のコアプロセッサでは、異なる例外は全て同一のベクトルを使用し、例外によりEXCCAUSEレジスタへロードされたコードによって弁別される。コアプロセッサはこれらの例外に対して8つのコーズコード(32から39)を予約する。コプロセッサステートメントに応答して、TIEコンパイラはビット<cumber>をCPENABLEレジスタへ付加し、<cumber>がクリアであり任意の命令アクセス<sname>,... が実行されるならば、例外を生成させるために論理をプロセッサへ付加し、その例外がコアにより認識されるとき32+<cnumber> をEXCCAUSEレジスタへロードするため論理をプロセッサへ付加する。
【0138】
[TIE中のマルチサイクル命令]
従来のプロセッサ技術では、多数のサイクルの計算を必要とする命令は、計算の組合わせ論理をパイプライン処理し、まだ計算されていない結果に基づく命令が発行されることを防止するために付加的な論理装置を必要とする。さらに、このようなプロセッサのコンパイラはパイプラインストールを最小にするために命令を再整列するためのアルゴリズムを含むべきである。
【0139】
最初のアイテムは典型的に慎重に選択された位置で挿入されるパイプラインレジスタを有する論理を書込むことによりプロセッサ設計者により実行される。第2のアイテムは典型的に、発行される命令のソースオペランドをパイプラインの全てのまだ計算されていない目的地オペランドに対して比較し、一致が存在するならば命令を保持することにより実行される。
【0140】
これらの3つのアイテムは調節されなければならない。計算論理のパイプライン処理が変化を発行論理に一致しないならば、プロセッサは不正確な結果を生む。パイプラインストールを最小にするために再整列することが組合わせ論理のパイプライン化と一致しないならば、次善の性能が生じる(例えば、準備される前に結果の使用をスケジュールすることはパイプラインストールを生成する)。
【0141】
以下の例を採用する。
【数32】
【0142】
MUL論理が2サイクルにわたって実行されるが、制御論理が1つの命令をサイクル毎に発行するならば、a3はADD命令がそれを必要とするときに正確な値をもたないので、a6は不正確な結果を有する。正確であるように、発行論理はMULが2つのステージにわたってパイプライン処理され、ADD命令を発行する前に1サイクルストールすることを知らなければならない。AA命令を1サイクルだけストールすることが正確な論理を生んでも、最適な性能は与えない。ADDとSUB命令の順序を切換えることにより、この例ではもはや任意の命令をストールする必要はなく、それ故最適な性能を生じる。これはMUL論理の実行と、命令発行論理の実行と、命令の再整列(スケジューリング)との間での適切な調節によってのみ実現されることができる。
【0143】
従来技術のシステムでは、これらの3つのアイテム(パイプライン論理、パイプラインストール、命令の再スケジューリング)はしばしば別々に実行され、調整をより困難にし、設計確認要求を増加する。本発明の好ましい実施形態はこれらの特徴で必要とされる情報を一度特定し、その仕様からプロセッサ発生器で3つのアイテムを実行する方法を提供する。
【0144】
さらに、好ましい実施形態の命令セットシミュレータはそのタイミングモデルで情報をスケジュールする同一の仕様を使用する。これは好ましい実施形態の全ての特徴を使用するアプリケーションディベロッパが、低速度のHDLシミュレータでアプリケーションを実行するのではなく、ハードウェアが組み立てられる前に性能の良好な予測を獲得することを可能にする。
【0145】
ここで参考文献とされているKillian とWarthmanのXtensa(商標名)命令セットアーキテクチャ(ISA)基準マニュアルの第10章は、プロセッサパイプラインの性能のモデル化に使用され、パイプラインストールを最小にするための従来技術で使用されているパイプラインハードウェアを説明する方法を開示している。しかしながら、好ましい実施形態では、この説明は前述した最初の2つのアイテムで付加的に使用される。
【0146】
特に、TIE言語は以下の宣言を含んでいる。
【数33】
ここで<iname> は命令の名称であり、
<oname> はオペランドまたは状態名であり、
<stage> はパイプラインステージを示す順序である。
【0147】
TIEにより使用されるdefステージ番号はKillian とWarthmanのXtensa(商標名)命令セットアーキテクチャ(ISA)基準マニュアルの第10章で説明されている値よりも1だけ小さく、したがって命令間の分離はmax(SA−SB,0)の代わりにmax(SA−SB+1,0)である。
【0148】
この仕様に基づいて、Killian とWison のアプリケーションで記載されたTIEコンパイラは以下のようにセマンチック論理仕様にパイプラインレジスタを挿入するように拡張される。ステージ番号がセマンチックブロックへの入力毎に割当てられる。命令デコード信号と即時のオペランドには構成に特有の番号(好ましい実施形態では0)を割当てられる。レジスタソースオペランド、状態レジスタ、インターフェース信号(以下説明する)にはTIEスケジュール宣言からステージ番号(構成に特有のデフォルトにより、好ましい実施形態では1)が割当てられる。次にセマンチックブロックの各ノードはポストオーダー(即ち各その先行ノードがビジットされた後)でビジットされる。ノードNSのステージ番号は任意のその入力の最大のステージ番号である。ステージ番号IS<NSの各入力に対して、コンパイラは入力とノードとの間にNS−ISパイプラインレジスタを挿入する。最後に、出力レジスタオペランド、状態レジスタ、インターフェース信号がビジットされる。セマンチックブロックISからのステージ番号がスケジュールステートメントで宣言されるステージ番号OSよりも大きいならば、入力TIE仕様はエラーである。そうでなく、OS>ISならば、出力の前にOS−ISパイプラインレジスタを挿入する。
【0149】
このプロセスは以下の例により示される。
【数34】
【0150】
この例は命令“example ”がステージ1でオペランドars、art、状態a3を使用し、ステージ2で状態s1とs2を使用することを特定している。これはステージ3で結果オペランドarrを発生する。この説明では、前述のレジスタ挿入処理は図8の(A)の回路を生成する。最大の入力ステージは2であるので、ノード“?”のNSは2である。arsとartのISは1であるので、1つのレジスタがそれぞれのノード“?”の入力で挿入される。同様にノード“+”で、s3入力は他の入力と一致するように1ステージだけ遅延される。最後に、ノード“+”の出力はarrに割当てられる前に1ステージだけ遅延される。前述の例のスケジュール記述では、arrは“out arr1”として宣言されるならば、パイプライン挿入処理手順は図8の(B)の回路を生成する。ノード“+”のNSは2であり、arrのOSは1であるので、処理手順は入力スケジュールの要求が満たされないためにエラーメッセージを発生する。
【0151】
前述のアルゴリズムは必要な時にパイプラインレジスタを正確に挿入するが、これらのレジスタの配置は最適からほど遠い。合成のため許容可能な論理を生成するために初期挿入後、Synopsys’ DesignCompilerで見られるようなパイプラインレジスタ最適化アルゴリズムを使用する必要がある。これは典型的にレジスタの両側の論理遅延をバランスするため組合わせ論理装置を横切ってレジスタを移動することにより行われる・前述の例を使用して、レジスタ最適化は図8の(C)のような回路を生成し、ここではノード“+”の出力におけるレジスタは遅延をバランスし、サイクル時間を減少するため入力に移動される。
【0152】
幾つかのケースでは、2つの命令は幾つかの共通の論理装置を共有してもよいので、1つの命令に対する1つのパイプラインステージのレジスタ、および異なる命令の別のステージのオペランドを使用または規定するセマンチックブロックを有することが望ましい。2つの別々のセマンチックブロックで命令を特定することは不必要な論理の重複を必要とする。
【0153】
これは好ましい実施形態の変形で可能な拡張である。この能力は2つのオペランド、例えば単なる<operand> の代わりに <operand>@<stage> のセマンチックブロックで別々の信号名を使用することによりサポートされる。この変形が一度行われると、前述のアルゴリズムはマルチシステム環境でさえも正確に動作する。
【0154】
例えば、以下の2つの命令、即ち
inst1:arr=ars+art
inst2:arr=ars+art+s1
を有することを望むならば、幾つかの理由でs1はステージ1の入力でなければならず。サイクル時間の要求は、1サイクルで1付加を行う時間だけが存在することである。前述の拡張を使用して、セマンチックの記述を以下示す。
【数35】
【0155】
拡張された信号名ars@2とart@2により単一のセマンチックブロックで2つの命令を記述することにより、2つの命令は、2つの別々のセマンチックブロックで2つの命令を記述する3つの加算器の代わりに2つの加算器だけにより実行されることができる。
【0156】
[例外]
ほとんどのプロセッサは完了のかわりに例外を条件的に生成する命令の幾つかのメカニズムを有する。例えば、分割命令は除数がゼロのときに生じさせる。本発明の好ましい実施形態は最初に以下の新しい例外を宣言することによりTIEからこの能力をサポートする。
exception <ename> <exceptioncode> {<excl>,...} <string>
ここで<ename> はそれを挙げるセマンチックブロックで使用される命令および信号の名称であり、<exceptioncode> はこの例外を他から弁別するためにソフトウェア例外ハンドラに通過される値であり、<excl>等は低い優先順位の例外であり、<string>は文書化で使用される記述ストリングである。
【0157】
一度宣言されると、例外信号は前述のiclass宣言にリストされる。この宣言により、例外の名称を有する単一ビット信号が規定された命令を含んでいるセマンチックのTIEブロック内に生成され、この信号は割当てられなければならない。図9は多数のTIEブロックから例外信号を結合し、1よりも多くのものが単一命令により通報されるときに例外間で優先順位を付けるためにTIEコンパイラにより生成される論理処理を示している。
【0158】
例外信号はスケジュール宣言の所定のステージ番号でもある。しかしながら、好ましい実施形態では、コアプロセッサはそのM個のパイプラインステージの全ての例外を処理する。この構造では、スケジュール宣言により特定されるステージ番号はMステージのステージ番号以下であることを確実にするためにチェックされ、そうでなければエラーがコンパイル時間に通報される。特定のステージ番号がMステージのステージ番号以下であるならば、Mステージのステージ番号が代わりに使用される。したがって図9の論理はMステージで評価される。
【0159】
図9で示されているように、各セマンチックブロックにより生成される例外信号はそれらのインターフェースセクションで例外信号を宣言するワンホット命令デコード信号のORによりAND処理される(これはその例外を挙げた命令が実行されるときにTIEコードが有効な例外信号だけを発生することを可能にする)。次に、全ての例外信号は幾つかの例外が生じていることを示す単一信号を発生するようにOR処理される。この信号は従来技術のようにコアにより処理される。
【0160】
最後に、優先度エンコーダは例外コードがコアプロセッサのEXCCAUSEレジスタへ書込まれるか否かを決定するために使用される。低い優先順位の例外のリストは指令されたグラフを形成するために使用される(1サイクルが検出されたならば、これはコンパイルタイムエラーと考えられる)。このグラフのトポロジの分類(例えばUnix tsortプログラム)が生成され、結果的な順番は種々の例外信号の優先度エンコードを行うために使用される。プリオリティエンコードの結果はその後、muxの対応する例外コードを選択するために使用される。この信号はその後従来技術のようにコアにより処理される。
【0161】
1例として、図9は以下の3つの優先順位を付けられた例外信号のTIE記述の論理を示しており、全てはサイクルNで起こる。
【数36】
【0162】
この場合、例外ex1はC1のinst1と、C3のinst4により挙げられ、ex2はC3のinst2により挙げられ、ex3はC2のinst3により挙げられる。この実施形態では、全ての例外信号はそれらの宣言されたステージで生成され、コミットステージにパイプラインで転送され、その点で例外原因値は前述のTIE記述で特定したように例外信号の優先順位により例外コードを選択することによって計算される。例外信号Exceptionと原因信号ExCauseはコアに与えられる。例外が一度処理されると、パイプラインの全ての命令を消去して実効的に残りの未処理の例外をクリアするためにコアは信号をTIE論理へ返送する。
【0163】
別の例として、図10はコードにより記述される回路を示しており、回路の下では一方は例外を発生し、一方は両者を発生する2つの例外および幾つかの命令を有する。この例では、オーバーフローはゼロによる除算よりも低い優先順位である(実際に両者は除算では同時に生じず、したがって相対的な優先順位は無関係である)。
【0164】
図面では、それぞれ図示されたセマンチックブロックはTIE例外の全体のセットの幾つかのサブセットを生成し、したがって正確なワイヤリングは入力依存性であることに注意する。さらに、セマンチックブロックでは、例外出力はTIEスケジュールメカニズムにより分解ステージにパイプラインされる。
【数37】
【0165】
図10は全てのTIE例外が全てのコア例外に関する単一の固定した優先順位を有する配置を示している。直通拡張によりTIE例外ステートメントが種々のコア例外を明示的に意味することができる。TIEコンパイラはその後、TIEとコア例外を結合する優先度エンコーダを生成することができる。
【0166】
[基準セマンチックス]
Killian とWilsonのアプリケーションで記載されたようなシステムは各命令の単一のセマンチック定義を有する。このセマンチック定義は命令を表すハードウェアとソフトウェアとの両者を生成するために使用された。このようなシステムは多数の命令が共に規定され、ワンホット命令デコード入力信号により微分されることを可能にする(例えば加算および減算命令は加算器を共有できる)。この特性の使用は実効的なハードウェアを生成するため必要である。好ましい実施形態で規定されることができる命令の複雑性を増加することにより、構成セマンチックの実効的なセットは読取り、書込み、検査、理解が困難になる。これらもまたパイプライン化のためにさらに同調され、抽象が少なくされる。これは記述がパイプラインの効果を考慮しなければならず、パイプラインレジスタが移動されることができる信号を発生するためである。
【0167】
例えば、TIEの浮動小数点構造では、3または4サイクルの浮動小数点加算演算と反対に2サイクルの浮動小数点加算演算をターゲットとするために恐らく異なるコードを書込む。これはプログラマーがしばしば明瞭にする目的で少数のゲートを生成するためにコードを最適化するために抽象が少ない。例えば以下のように書かれる。
基準セマンチックス(かなりクリア)では、
x=y*3を割当てるが、
ソフトウェア開発ツールはマニュアル等で実行されるように定数のケースによる乗算を処理しないので、
x=y+{y[30:0],1’ b0}を割当てる。
【0168】
別の例として、乗算−累算命令を参照で説明するため、以下のように簡単にする。
acc=a*b+acc
しかしセマンチック記述では、この命令は2つのパイプラインステージにわたって実行されなければならないことを考慮しなければならない。熟練したハードウェア設計者は、a*bの部分的な結果は第1のステージでキャリー保存加算器ツリーを使用して計算される必要があり、accによる2つの部分的な結果を加算する最終結果は第2のステージで計算されることを知っている。
【0169】
したがって、ネイティブ機械命令に対する対応が失われるので、構成セマンチックはシミュレーションソフトウェアに変換されるとき低速度になる。先の命令を使用して、参照記述は2つの命令を使用してシミュレートされることができる。この場合、セマンチック記述のシミュレートは数百の命令を取る。
【0170】
前述の理由では、好ましい実施形態はセマンチックの2つのセットの仕様を可能にする。1つのセットは基準セマンチックスと呼ばれる。単位命令当り1つの基準セマンチックスが存在し、命令間にはセマンチックの共有はない。このセマンチックの定義は通常、命令の予測されたオペレーションを規定するために明瞭にするために書かれる。第2のセットのセマンチック、即ち構成セマンチックはハードウェア構成のためのものである。これらのセマンチックはハードウェアが多数の命令により共有されることを可能にするために従来技術のシステムの特性を維持し、通常、ゲートレベルの合成により低いレベルで書かれる。
【0171】
これは以下のように、2つの命令ADDとSUBを規定する簡単なTIE例で示されることができる。
【数38】
【0172】
参照記述は簡単で直接的である。しかしながら、セマンチックの記述は構成の効率に関与しなければならず、特に、この場合では3つの命令により必要とされる加算器を共有しなければならない。これを行うため、数の減算はビットに関する補数と定数1との加算と同様である数学的アイデンティティに依存する。
【0173】
基準セマンチックスはまた基準セマンチックスにより命令セットが一度規定され、その後、構成セマンチックの異なるセットにより多数回、実行されることを可能にする。基準セマンチックスは通常形式的ではなくISA文書化でのみ規定されるが、多数の構成による単一のISA規定が産業で共通して実行される。好ましい実施形態はこの典型的な処理手順を逆にし、基準セマンチックスを形式的に規定し、TIE仕様から文書化を獲得する。
【0174】
別々の基準セマンチックスと構成セマンチックはそれらの等価性を検査する必要を生じる。従来のシステムでは、文書化の基準セマンチックスにより、等価性はそれを検査するため人間による文書読取りと、書込み試験によりチェックされる。この処理手順には時間がかかり、正確な言語で特定される基準セマンチックスでは、基準セマンチックスを構成セマンチックと比較するために論理等価ツールを使用できる。好ましい実施形態は2つの異なる方法、即ち、その一方は特定の命令に対して基準セマンチックスと構成セマンチックの等価性をチェックし、その他方は基準セマンチックスを使用して構成される回路全体が構成セマンチックを使用して構成されたものに等しいかをチェックする方法で、均等性チェックツールへ必要な入力を行うことによりこのプロセスを自動化する。第1の方法は構成セマンチック記述のデバッグを容易にする。第2の方法はセマンチックにより特定された論理だけでなく、全てのセマンチックを結合するためのグルー論理を含んでいる全体的な設計を確認する。
【0175】
基準セマンチックスと構成セマンチックから生成される回路は通常等しくない。所定の命令に対して、出力信号のサブセットだけが設定される。残りの出力信号に対しては、基準セマンチックスと構成セマンチックはこれらが論理的に“don’t cares ”、即ち未使用であるので、コスト基準または記述の容易度に基づいて異なる値を割当てるように選択されることができる。好ましい実施形態は付加的な論理を生成することによりこの問題を解決し、したがって特に別の命令によって発生される出力信号は変更されず、残りの出力信号は図11で示されているように強制的に0のような特定の論理値にされる。この図面は、基準記述(x ref)により発生される各出力信号xと、セマンチック記述(x imp1)により発生される各出力信号xは別の信号ignore xでアンド処理され、それによってxが命令出力の一部ではないとき0にされ、それ故等価チェックツールからの誤った否定的な結果を防止する。ICLASSステートメントから、xを設定する命令のセットを知り、それ故、ignore xは単にxを設定しない命令の論理ORである。
【0176】
[組込みモジュール]
ある普通に使用される計算は言語定義演算子をもたない。しかしながら、他の言語構成の使用は記述するのに非常に面倒であるか、効率的に構成するのが非常に困難である。タイはこれらの幾つかの計算において以下の表IIで示されている組込み演算を行う。
【表3】
【0177】
例として、以下の記述はADDとSUB命令間で加算器を共有する。
assign arr=TIEadd(ars, SUB?〜art : art, SUB)
以下のセマンチック記述はキャリー保存加算器(CSA)アレイを使用して4つの数を加算し、全加算器が後続する。
wire [31:0] s1, c1,s2,c2 ;
assign{s1, c1}=TIEcsa(d1, d2, d3);
assign{s2, c2}=TIEcsa(c1 << 1, c1, d4) ;
assign sum=(c1 << 1) +s2
組込みモジュールを使用する利点は、TIEコンパイラが組込みモジュールを認識し、それらのためのさらに効率的な構成を得るためにモジュール発生器を使用することである。
【0178】
[文書化]
基準セマンチックスは命令セット文書化の1つの重要なエレメントでもある。典型的な命令セット基準マニュアルは、その例示的なページが図12に示されており、各命令に対して、そのマシンコードフォーマット、そのパッケージ、アセンブラ構文、概要(命令の1ラインテキストの記述)、命令のフルテキスト記述、命令のより正確な動作定義、ならびにアセンブラノートおよび命令に関連する例外を含むことができる。マシンコードフォーマットを生成するのに必要な全ての情報は、オプコードビットおよびオペランドフィールドを含んでいるので、既にTIE仕様中に認められている。同様に、アセンブラ構文はニモニックおよびオペランド名称から得られる。TIE基準セマンチックスは正確な定義になる。概要およびテキスト記述だけがない。それ故、好ましい実施形態は命令セットの設計者が概要とテキスト記述を特定することを可能にするようにTIEへ構造を付加する。
【0179】
TIEパッケージ仕様は以下のフォーマットを有する。
package <pname> <string>
・
・
・
endpackage <pname>
パッケージ名<pname> はパッケージとエンドパッケージとの間で規定された全ての命令に関連する。以下説明するように、パッケージは文書化以外の他の使用法を有する。<string>パラメータは文書化の目的のためのパッケージの名称を与える(スペースを有してもよい)。
【0180】
TIE概要仕様は以下のフォーマットを有する。
synopsis <iname> <string>
ここで、<string>は命令の短い記述(ほぼ1ラインの半分)である。このテキストではフォーマット制御は必要ない。このテキストは典型的に本の見出しと命令リストの付加的なマテリアルのために使用される。
【0181】
TIE記述仕様は以下のフォーマットを有する。
description <iname> <string>
ここで、<string>は英語または別の自然言語で命令のオペレーションを記述したテキストを含んでいるストリングである。このテキストではテキストフォーマットコマンドが必要とされている。好ましい実施形態は、HTMLのような言語を実行する(HTMLの仕様は例えばhttp://www.w3.org/TR/REC−html40 で見られる)。さらに2つの随意選択的な文書化ストリングが以下のようにサポートされる。
assembly note <iname> <string>
implementation note <iname> <string>
これらの随意選択的な仕様は付加的な命令当りのテキストを与える。
【0182】
HTMLのように、2つの種類、即ちエレメントと文字エンティティのフォーマット制御がサポートされる。目的は正確な外観ではなくデータの属性を特定することである。データはその属性に基づいて出力媒体に適切であるようにレンダリングされる。文字エンティティ&<name>はASCILLで有効ではない文字を特定するか、または特別なレンダリングを使用する。エレメントはパラグラフ、リスト、コード例等のようなHTML定義エンティティを表している。HTML4.0仕様から引用して“[e]各エレメントタイプの宣言は3つの部分、即ちスタートタグ、内容、エンドタグを記述する。エレメントの名称は(<ELEMENT−NAME>と書かれた)スタートタグと、(</ELEMENT−NAME> と書かれた)エンドタグ”で現れ、エンドタグ中のエレメントの名称の前のスラッシュ符号に注意する。
【0183】
換言すると、<ELEMENT−NAME>DOCUMENTATION</ELEMENT−NAME>はDOCUMENTATION に与えられたフォーマットを特定する。HTMLとは異なって、エンドタグ</ELEMENT−NAME> は随意選択的ではない。2つの種類のタグ、即ちブロックおよびインラインが存在する。ブロックタグはパラグラフ状の構造を特定し、インラインタグはこれらのパラグラフ内のテキストのフォーマットの特定に使用される。インラインタグはネストされてもよい。ブロックタグはUL内のLIを除いてネストされない。
【0184】
これらの構造は各命令および命令のインデックスに対するHTMLページをアセンブルする付属資料Cの1つのようなプログラムの一部としてHTML文書化を作成するためにHTMLに容易に変換される。このようなHTML文書化はプロセッサのユーザのオンライン基準マニュアルを設定するために使用されることができる。好ましい実施形態でこれを実行するプログラムはPerlプログラミング言語で書かれ、2つの列、即ち一方はニモニック用でもう一方は概要テキストストリングのHTML表によりindex.htmlファイルを作成することにより動作する。表の行はソートされた順序で命令を処理することにより充填されている。命令ニモニックは各命令に対して作成されるページにHTMLリンクされている。
【0185】
命令当たりのページはHTMLレベル−1の見出し(“H1”)で開始し、ニモニックおよび概要を与える。次に、種々のセクションはHTMLレベル−2の見出し(“H2”)中の固定された名称により紹介される。“Instruction Word”とラベルを付けられた第1のセクションは単位ビット当り1列を有するHTML表により表されるマシンコードフォーマットを与える。オプコードビット( ’0’ または ’1’ )は対応する表のセルに挿入される。オペランドフィールドはフィールド名称で充填されている。多数の隣接ビットに拡がるフィールドは反復を避けるためにHTML表のCOLSPAN 特性を使用する。マシンコードボックスのビットは表の上の行を使用して番号を付けられ、フィールド幅は下の行で与えられる。
【0186】
“Package ”とラベルを付けられた第2のセクションは命令を規定するTIEパッケージ名称を与える。簡単はハッシュは識別子から文書化ストリングへパッケージ名称を変換するために使用される。パッケージ名称自体はHTMLパラグラフのブロック−エレメント(“P”)の内部の出力である。
【0187】
“Assembler Syntax”とラベルを付けられた第3のセクションはこの命令をコード化するために使用されるアセンブリ言語フォーマットを与える。これはコンマで分離されている命令ニモニック、スペース、およびオペランド名称からなる。レジスタオペランド名称はレジスタファイルの短い名称をフィールド名称に連結することにより形成される。即時のオペランド名称は丁度TIEからの即時名称である。アセンブラ構文はHTMLコードのインラインエレメント(“CODE”)を使用したHTMLパラグラフのブロックレベルエレメント(“P”)の内部の出力である。コードのインラインエレメントはプログラミング言語のコードが通常レンダリングされる方法と類似した固定幅のフォントでテキストをレンダリングする。
【0188】
“Description ”とラベルを付けられた第4のセクションはTIEからHTMLへ変換されたテキスト記述を含んでいる。TIEのフォーマットコードはHTMLのものと類似しているので、この変換は非常に簡単である。主な必要性はINSTREFエレメントをHTMLリンクから名称を有する命令へ変換することである。
【0189】
“Assembler Note”とラベルを付けられた随意選択的な第5のセクションはTIEからHTMLへ変換されるテキストを含んでいる。
【0190】
“Exception ”とラベルを付けられた第6のセクションは、この命令が挙げることができる例外のリストを含んでいる。ロードおよび記憶命令はTIEコンパイラによるリストに付加されるロード記憶エラー例外を自動的に有する。対応する例外信号が命令のiclassの信号リストセクションにリストされるならば、他の例外がリストされる。例外は優先順にリストされる(前述のトポロジ分類の結果)。
【0191】
“Implementation Notes”とラベルを付けられた随意選択的な第7のセクションは、TIEからHTMLへ変換されるテキストを含んでいる。
【0192】
これは時には読者に便利であるので、以下説明するTIE仕様から文書化へ試験ケースリストをコピーすることも可能である。
【0193】
プロセッサ命令の文書化の例を以下示す。
【数39】
【0194】
【数40】
【0195】
【数41】
【0196】
【数42】
【0197】
HTMLは好ましい実施形態では文書化フォーマット言語として使用されるが、当業者はAdobe Frame Maker MIF フォーマット等の他の等価仕様言語が使用されてもよいことを認識するであろう。
【0198】
[サブフィールド]
プログラム実行特性を変化するプロセッサ構造オプションに対する感受性を少なくする技術の開発は、フィールドを別のフィールドのサブフィールドとして規定する能力である。これはフィールドの定義を命令ワードの特別な部分に限定し、これらが他のフィールド部分として規定されることを許容しない従来の構成可能なプロセッサシステムと対照的である。フィールドを他のフィールドの部分として規定する能力は構成されたプロセッサのエンディアンとソフトウェアが部分的に独立することを可能にする。
【0199】
例えば、従来のシステムでは、tフィールドの最初の2ビットに対応する新しいフィールドt10は以下のTIEステートメントの一方でのみ規定されることができる。
field t10 inst[5:4] /*for field memory order*/
または、
field t10 inst[15:14] /*for big endian memory order*/
この配置では、メモリ順と独立してt10を規定することはできない。サブフィールドの使用を許容することにより、本発明はt10が以下のように規定されることを可能にする。
field t10 t[1:0]
tはプロセッサコアによりリトルエンディアンではinst[7:4] であり、ビッグエンディアンに対してはinst[17:14] であるように規定されるので、t10はメモリ順と独立する。
【0200】
[テストケース]
ユーザ特定されたTIEの検査の2つの特徴が存在する。第1の特徴はコアとTIEブロックとユーザ定義された状態とレジスタファイルとの間のインターフェースの正確さを確実にすることである。第2の特徴はユーザセマンチックスのハードウェアへの変換、換言するとTIEコンパイラの正確さを確認することである。第1の特徴はTIE命令セマンチックスに依存せず、TIE仕様の特性から得られることができる。
【0201】
ユーザ特定されたTIEの任意の命令された予め定められた試験または診断を書き込むことはできない。この問題はユーザTIE仕様から試験を導出し、同時にTIEのハードウェアおよびソフトウェアが生成されることにより対処される。TIEコンパイラはユーザ命令のためのISA記述を生成する。TIEに対する診断発生器はTIE命令のISA記述を読取る。これもユーザ特定された状態およびレジスタファイルについての知識を含んでいる。この情報はユーザTIEの幾つかの意味のある診断セットを作成するために発生器により使用される。
【0202】
基準セマンチックスは基準セマンチックスの検査方法を与える。基準セマンチックスはこれらをターゲットアプリケーションで使用することにより確認される。Killian とWilsonの明細書に記載されたように、アプリケーションは設計者によってイントリンシックにより新しい命令を使用するように変更されることができる。変更されたアプリケーションおよび命令定義は共にシミュレータまたはネイティブのいずれかにおいて試験される。ネイティブ実行は(従来技術のように)機能としてイントリンシックの通常のプログラミング言語(例えばC)定義を生成するTIEコンパイラの能力により容易にされる。ターゲットアプリケーションの使用は通常、命令定義の最良の試験である。
【0203】
Cコードを生成するTIEコンパイラの正確さはこのプロセスによりチェックされるが、アプリケーションがHDLシミュレータでも実行されていない限り、TIEコードからHDLへの変換はチェックされない。しかしながらHDLシミュレータは通常非常に遅いために多くのアプリケーションでこれを行うことができない。それ故、入力セマンチックからHDLへのTIEコンパイラの変換の正確さを試験するための幾つかの他の方法を有することが望ましい。
【0204】
また、設計者はアプリケーションが命令により処理されなければならない全てのケースをカバーするかについて確信をもたない可能性がある。これはプロセッサが生成された後にアプリケーションが変更するか、または新しいアプリケーションがこのプロセッサを使用するならば重要である。この場合、他の方法に命令を試験させることが望ましい。従来技術のシステムでは、プロセッサの命令は、通常、選択されたソースオペランド値のセットで命令を実行し、予測値に対する結果のオペランドをチェックする手書き診断を実行することにより試験される。好ましい実施形態はTIE仕様から有効である付加的な情報を使用することによってこのプロセスを自動化する。
【0205】
TIEのiclass仕様は各命令の全ての入力および出力と、レジスタファイルオペランド、即値、またはプロセッサ状態レジスタであるかをリストする。TIE構造、即ち、
これはソースオペランド値と、命令<iname> に対する予期された結果のリストを与える。ここで、<oname> はオペランドまたは状態レジスタの名称であり、<value> は(リスト中の試験しているinまたはinout オペランドまたはレジスタの)対応する入力値または(リスト中の試験しているinまたはinout オペランド、レジスタまたは例外信号の)予測値である。
【0206】
TIEコンパイラは、inおよびinout プロセッサがWURイントリンシックおよび、Wilsonの明細書に記載されているTIE user register構成で宣言されている数とを使用してリスト中の試験の値に登録する通常のプログラミング言語(例えばC)でテストプログラムを生成する。その後、これはローディングレジスタのproto 宣言により特定されるイントリンシックを使用して、inおよびinout レジスタファイルオペランドを設定する。コアレジスタファイル中のオペランド(例えば好ましい実施形態ではAR)は組込み言語タイプを使用する。次にTIEコンパイラはiclassにより特定される順序でリストされたオペランドによりイントリンシックを呼出す。次に、テストのout リストで特定されているinまたはinout オペランドが読出され、所定の予測値と比較される。最後に、テストのout リストのプロセッサレジスタRURイントリンシックと、user register構成のためのレジスタ数とを使用して読出され、所定の値と比較される。
【0207】
この自動的に発生されたプログラミング言語診断は命令セットシミュレータまたはハードウェアRTLモデルで、或いはターゲットプログラミング言語への変換によりTIEコンパイラによって生成されたイントリンシックエミュレート機能をネイティブに使用することにより実行されてもよい。
【0208】
1例として、仕様、即ち、
【数43】
これは以下のC診断を生成する。
【0209】
【数44】
【0210】
[テストケースを生成するためのテストベクトルの自動サンプリング]
アプリケーションの実行が入力命令セマンチックの正確さを試験するのに十分である場合、入力セマンチックのTIE変換を試験するためにHDLシミュレータを動作するためのテストケースを有することが望ましい。HDLシミュレータは多くの場合に非常に遅いのでアプリケーションを動作できない。それ故、ネイティブにまたは命令セットシミュレータで実行するアプリケーションからテストを抽出する方法を有することが望ましい。
【0211】
TIEコンパイラはそれ故、入力を書込み、命令のオペランドをファイルに出力するコードによってアプリケーションプログラミング言語への入力セマンチックの変換を増補するオプションを有する。このファイルはその後、重複を除去し統計的なサンプリングを使用することにより後処理されることができ、それによってHDLシミュレータでシミュレートするのために合理的な複数のテストケースを抽出する。これらの記録はその後、前述したTIEテスト構成に変換されることができ、それによってその構成は残りのプロセスで影響を与える(leverage)ことができる。
【0212】
このアーキテクチャとマイクロアーキテクチャテストを生成する方法論を使用する動機はユーザTIEの構成の体系的な確認プロセスを与えることである。ユーザのアプリケーションはTIE構成のマイクロアーキテクチャを試験するのに十分ではないのでこれは非常に重要である。このような診断をTIE記述から生成するために、ISA記述からの必要な情報と、TIEコンパイラにより生成されるパイプライン情報とを獲得する装置を使用する。この方式を以下説明する。
【0213】
[TIE命令のISA記述]
ユーザの要求にしたがってプロセッサコアを構成することができるように、1つの構造が使用される。構造は基本的にパーツのリストと、ウェブベースインターフェースを通ってユーザによりカスタマイズされることができるプロセッサコアの属性である。これらのプロセッサ属性は構成パラメータと呼ばれる。構成パラメータの完全なリストはそれらのデフォルト値および、値が想定することができる範囲と共に、プロセッサコアの構成スペースを規定する。プロセッサコアの具体的な例示、即ち全ての構成パラメータが具体値を割当てられているコアの例はコア構成である。
【0214】
現在、構成スペースと具体的なコア構成との両者は構成パラメータおよびそれらの値をリストするテキストファイルとして表される。全ての構成パラメータのフラットリストとテキストファイルで数えられるそれらの値は人が容易に読むことができる利点を有するが、これはハードウェアおよびソフトウェアの個々のピースを構成するプロセスを複雑にする。その理由で、構造情報を読取り、プロセッサの種々の部分のオブジェクト指向表示と構成パラメータ値を作成する1セットのツールが開発されている。このツールおよび構成の表示は総称して構成環境または構成データベースとして知られている。
【0215】
ソフトウェアおよびハードウェアの構成中、tppはディベロッパが構成情報をプログラムでアクセスし、ソースコードの部分を容易に計算することを可能にする構成環境へのハンドルを与える。さらに、計算は構成環境で実行され、したがって全ての構成されたソースを横切って共有されるので、構成ソースコードの開発は簡単にされる。
【0216】
ISAを記述するPERLライブラリが開発されている。TIEでは、TIEコンパイラはユーザ定義命令のためのPERLオブジェクトを生成するように動作し、これはコアISAに付加される。そこから、全ての確認ツールはISAと、ユーザ定義TIEのパイプライン情報を獲得するためにこれらのPERLオブジェクトに問合わせる。
【0217】
以下の例はこれが行われる態様を示している。簡単なTIE記述で開始する。
【数45】
【0218】
TIEコンパイラはTIEユーザ状態と、それを使用する命令のセマンチックについての以下の情報を生成する。
【数46】
【0219】
前述の情報から、TIE命令accに対するアセンブリコードを生成することが可能である。命令は、共にタイプARである2つのレジスタオペランドを有することが知られており、それに基づいて幾つかのランダムなレジスタ割当が行われることが可能であり、さらに良好には出力および入力フィールドが知られているので、幾つかのインテリジェントレジスタ割当を行うことが可能である。それ故、以下のようなこの命令に対するアセンブリコードを自動的に生成することができる。
acc $a7,$a13
ここでa7aとa13はARのregfile 定義を見るレジスタ割当アルゴリズムにより生成されるsおよびtフィールドである。TIE命令のISA記述の幾つかのさらに別の例を以下示す。
【数47】
【0220】
命令の予測された結果についての十分な情報を獲得することができないので、TIEセマンチックの正確性をチェックすることができない。例えばacc命令の結果がテストで正しいか否かをチェックすることができない。しかしながら、ハードウェアが状態累算器で誤った結果を生成した場合には、これは別のセクションでさらに詳細に説明するように全ての命令の境界でRTLとISSとの間の全てのユーザ状態およびレジスタファイルを比較するコシミュレーション機構によって検出される。以下のセクションは疑似コードのようなアルゴリズムを表現するために幾つかのPERLを使用する。診断発生器はほとんどPERLベースのプログラムである。
【0221】
正しいTIE命令を発生するために診断発生器により使用されるアルゴリズムを以下示す。
【数48】
【0222】
また、TIE命令を実行し始めることができる前に、TIE状態およびレジスタファイルを初期化する必要がある。これは以下の方法で行われる。
【0223】
【数49】
【0224】
[TIEに対するパイプライン情報]
TIEのバイパスおよびインターロック論理装置を試験するマイクロアーキテクチャの診断を生成するために、TIE命令のパイプライン情報が必要とされる。これはレジスタおよび状態のようなリソースがTIE命令により読取られ書込まれるステージの知識を与える。TIEコンパイラはこの情報を提供し、これはPERLオブジェクトで表され、検査ツールにより使用される。ユーザ定義レジスタファイルと、単にパイプラインの異なるステージでデータを移動する1組の命令に付いての以下の例を取り、コンベンション1:Eステージ、2:Mステージ、3:Wステージに注意する。
【数50】
【0225】
これはPERLデータベースで以下のように変換する。
【数51】
【0226】
この情報がどのようにして次のセクションで診断を生成するために使用されるかを見ることができる。
【0227】
[TIEに対するマイクロアーキテクチャ試験]
このセクションの目的は、TIEとコアとの間のインターフェースの構成と、ならびにもしも存在すればTIE状態とレジスタファイルとの間のインターフェースの構成についての知識に基づいてTIE論理装置のマイクロアーキテクチャ診断を生成することである。TIE自体のISAとパイプライン記述が使用されるが、前述したようにTIE命令の構成の“正確性”は直接テストでは確認されていない。
【0228】
MVP診断のセットは以下の構成の特徴をテストするために生成される。 −コア/タイインターフェースの制御論理、
−ロード/記憶およびバイパスとインターロック論理を含むユーザ状態とレジスタファイルとの構成。
【0229】
[コアとTIEとの間の制御信号]
例外、中断、リプレイ信号はテストの生成により試験され、ここではそれぞれのユーザ命令はコア(例えばブランチ)、例外およびリプレイ信号の制御フロー変化により削除される。命令はその実行の全てのステージで、丁度完了ステージまで削除されるべきである。
【0230】
これらのテストを生成するアルゴリズムは、TIEコンパイラにより生成されるISA記述中の全てのTIE命令コードにわたって単に反復し、以下の各ケースを構成する。
ケースa)フローの変化により削除されるTIE命令
【数52】
【0231】
ケースb)例外により削除されるTIE命令
【数53】
【0232】
認められるように、例外を発生する命令と、TIE命令との間のノーオペレーション数はTIE命令実行のステージを制御し、それによって削除される。
【0233】
ケースc)パイプラインによりリプレイされるTIE命令
【0234】
【数54】
【0235】
[ユーザ状態とレジスタファイルのバイパス論理]
これらの試験はそれらを書込み/読取る“ペアリング”命令によりTIE状態とレジスタファイルに対してバイパス論理を実行する。テストは命令に関してストールが存在しないことを確実にし、データを取出し、(構造が許容するならば)不必要なストールとエラーとしてのフラグを探すために命令シーケンスの前および後にサイクルカウントレジスタをチェックする。そのアルゴリズムを以下に示す。
【0236】
特定のレジスタファイルまたは状態に対して全ての読取り/書込みステージのリスト[instr, field]を生成する。この状態/レグファイル(regfile )の最大の完了ステージをチェックする。書込みおよび読取り命令を対として組合わせ、最大の完了ステージまでの間のノーオペレーション数を変化する。
【数55】
【0237】
命令シーケンスを二度実行することによりI$とD$が存在しないことを保証する必要がある。第2回の反復では、サイクルカウントチェックが行われる。予測された数のサイクルは読取り/書込みステージとノーオペレーションに基づいている。前述の例の幾つかの例のケースが以下のものである。
【0238】
【数56】
【0239】
[インターロックおよびハザード]
このテストは、リードアフタライトのケース、ライトアフタライトのケースおよび(恐らく)ライトアフタリードハザードケースでストールを補正するものである。
【0240】
ハザードケースのアルゴリズムは前述のバイパスケースのアルゴリズムと類似して得られる。ステージ2および3で同一のレグファイルを書込む2つの命令が存在し、それに続いてステージ1でそれを読取る命令が続く。第3の命令は第2の書込み結果をストール(機能停止)する。
【0241】
【数57】
【0242】
[ロード/記憶]
全てのレジスタファイルへのロードおよび記憶は以下のアルゴリズムを使用して、全ての整列および誤整列されたアドレスに対して包括的に試験される。
【数58】
【0243】
ロードの予測された結果はロードのセマンチックに基づき、ほとんどのケースで決定されることができるが、全ての可能なセマンチックでそうすることは可能ではなく、その場合、チェックをその状態のままにしメモリを比較することが必要である。
【0244】
TIEロード/記憶命令のデータのブレークポイントはまた構成がデータのブレークポイントをサポートする場合にTIEロード/記憶命令について試験される。データのブレークポイントがTIE命令で作用する態様の詳細はロード/記憶アーキテクチャセクションで見られる。生成された診断はデータブレークアドレスレジスタ、制御マスクレジスタ、ロード/記録のバーチャルアドレスの全ての可能な組合わせに対してデータのブレークポイントを試験する。
【数59】
【0245】
整合するデータのブレークポイントはデバッグ例外を生じる。前述の試験のデバッグ例外ハンドラは例外が本当に生じたことを確認するためにチェックされるカウンタを更新する。これに加えて、さらに複雑なケースも構成され、ここではデータのブレークポイントを有するロード/記憶はこのような例外の正確な優先順位を確認するために(レジスタウィンドウイング作用について)オーバーフロー/アンダーフロー例外と一致する。
【0246】
[TIE命令のランダム診断発生器]
ランダム診断はコアISAと、その構造のマイクロアーキテクチャの確認において主要な役目を行う。命令のランダムシーケンスは指令された試験によりカバーされる可能性の少ない境界のケースおよび他のシナリオに衝突する可能性がある。これらは設計確認のカバー計量にも付加される。付加的なインテリジェンスは幾つかの特徴を付加することによりこれらのランダム発生器に付加されている。例えば、命令シーケンスのテンプレートはターゲット特定の興味のあるシナリオに対して作成されることができる。これの例は書込みバッファ、またはゼロオーバーラップループを単一命令で充填するバックツーバック記憶装置である。各命令タイプまたは命令シーケンスに添付された相対的な確率は特定の種類の命令を生成しようとする頻度を決定することができ、例えばブランチ命令が高い相対的な確率(または加重)を有するならば、生成される試験はさらに多くのブランチを有する。ユーザ制御されたパラメータは生成される試験特性を調節できる。例えばコマンドラインアーギュメントはある命令の相対的な加重、テストの長さ、ネストされた機能呼の数等を制御できる。ランダム診断発生器は、同様にユーザ定義されたTIE命令を生成することができる。
【0247】
基礎的なメカニズムはマイクロアーテキテクチャ試験のメカニズムに類似している。ランダム発生器はコアISAと同様にTIE命令を含んでいるISA記述を読取る。有効なTIE命令は特定のTIE命令のISA記述を見て、幾つかのレジスタ割り当て機構を使用することにより構成される。
【数60】
【0248】
ランダム発生器は、構成システムのエンドユーザによりアクセス可能ではないが、内部確認と、前述したようなTIE記述の範囲全体で使用されることが好ましく、8、16、32、64、128 ビットのような可変幅、および状態のTIEレジスタファイルの完全なケースをさらに含んでいる。さらに、エンドユーザはさらに別の確認で使用するためにランダム発生器へのアクセスを与えられてもよい。
【0249】
[TIE検査のカバー区域測定]
前述したように、この確認の目標はコアとTIEインターフェースの正確性と、ユーザ定義状態、レジスタファイル、関連する論理、TIE命令のハードウェアへの正確な変換の構成を確実にする。これらの領域の幾つかのカバー区域計量が必要である。
【0250】
これはTIEコンパイラにより生成されるRTLの基本的な設計のカバー区域を指すことを意味するのではなく、前述の領域の機能的なカバー区域を指す。TIEに対するこのようなカバー区域評価を行うことは非常に困難であるが、RTLと共に作動する幾つかの機能的なカバー区域モジュールを生成し、幾つかのカバー区域の測定を報告するための方法が開発されている。例えば1つの重要な領域は、TIEレジスタファイルと状態との間の全てのバイパス路である。バイパスを試験するために生成された診断は全ての可能なバイパス路をカバーするが、目標はRTLの確認と独立した確認を有することである。そうするために、幾つかのVerilog /VERAモジュールはTIE記述とパイプライン情報から自動的に生成される。これらのモジュールはカバーされたバイパス路を報告するためにRTLシミュレーション時間中に動作する。
【0251】
既に先のセクションで見られた128ビットレジスタファイルi128の例を取ると、図13はハードウェアにおけるこのような汎用目的のレジスタファイルと、その構造を示している。図面は1つの読取りポートRd0と1つの書込みポートWdを示している。典型的にレジスタファイルには2つの読取りポートと1つの書込みポートが存在する。信号のネーミングコンベンションは、
<port name> <signal name> <stage name>
ここで、
port name:レジスタファイルの名称(Rd0、Rd1、Wd)
signal name:信号名称は、
read port :mux:muxの出力
data:TIEのデータパス装置へ行くフリップフロップ の出力
write port:mux:muxの出力
data:データパス装置の出力
result:フリップフロップの出力
stage name:これはパイプラインのステージを示す。
先のセクションで説明したように、ここでのコンベンションは、
C0:Rステージ、C1:Eステージ、C2:Mステージ、C3:Wステージ 簡単にする目的で、以下の説明は全てのTIE命令をMステージの終了した後ではなくレジスタファイルを書き込むことに限定する。
【0252】
ブロック図はこれらのステージの異なるバイパス路を示している。(前に述べたセクションではレジスタファイルの使用として表された)ステージ1および2のデータパスにより読取られる読取りポートRD0において、以下はブロック図を示しまたは説明している。【数61】
ステージ2および3で書き込まれた書込みポートWdは類似のバイパス路を有する。
【0253】
【数62】
【0254】
[バイパス路のカバー区域]
好ましい実施形態の目標は、前述のブロック図の全てのバイパス路が検査されているか否かをチェックするモニタを生成することである。1例のバイパス路は図13では破線のパスで示されている。モニタは基本的にパスを通るデータを追跡し、したがって非常に重要な仮定を行うことが必要であり、これはデータがTIEのデータパス装置で変化されていないことである。これは以下のチェックが行われることができることを意味している。
Wd data C1==Rd0 data C1
TIE命令がEステージ(C1)でデータを読取り、Eステージで出力データを発生する仮定により、データは変更されない。これは勿論、任意の真のTIE命令では当てはまらない。しかしながら、試験するため、(本物のハードウェアでは除去される)ユーザTIEにおける幾つかの“アイデンティティ”が紹介される。これらの命令は特にコピーデータを単に試験するものである。この例では、2つのアイデンティティ命令が得られる。
Identity 1:use C1, def C1:これはEステージでレジスタファイルを読み、Eステージで同一のデータを生成する。
Identity 2:use C1, def C2:これは1サイクル遅延後にデータを発生する。
【0255】
モニタ生成の冒頭で説明したが、全てのバイパス路が検査されたか否かを試験するVeraモジュールを生成するアルゴリズムを説明する。TIEコンパイラにより生成される情報が使用され、前述の信号名称コンベンションを以下示す。
【数63】
【0256】
信号リストを作成するサブルーチンの動作は簡単にするために省略されているが、当業者には明白であろう。1つの重要な注意は、データパスが信号のリストでどのように表されるかである。データパスが書込みステージ>読取りステージ(例えば前述のIdentity 2命令)を有するならば、データパス装置で費やされるサイクル数(この説明では2サイクルのTIE命令の限定にしたがって1まで)が単に付加される。
【0257】
図13で破線で示されているパスは以下のように信号リストとしてまたは前述のアルゴリズムからのトレースから生成される。
i128 wd data c2−>
i128 rd0 mux c0−>
i128 rd0 data c1−>
waitcycles1−>
i128 wd data c2−>
i128 wd mux c2−>
i128 wd result c3
ここで、i128はレジスタファイル名称である。XtensaのトップレベルからTIEレジスタファイルi1128へのパスはこれにプリペンドされている。図13からのデータパスのrd0 data c1−>wd data c2は信号トレースにおいて待ちサイクル1として表されていることに注意する。
【0258】
このような信号トレースのリストは、全てのバイパス路で生成される。信号トレースに基づいて、小さいモニタモジュールはこの通路がトレースされているか否かをチェックするためにVerilog /Veraで生成される。トレースされているならば、シミュレートの終了時にこのパスで1を報告する。各モニタは基本的に以下のアルゴリズムにより生成される小さい状態マシーンである。
a)状態マシーンの状態数を決定し、
状態数=信号トレース+の(Eからの)ステージ数
状態におけるデータパスのm/cサイクル数
b)状態にしたがって信号をグループ化し、
c)以下のコードを生成する。
【数64】
【0259】
例えばバイパス路を生成する状態マシーンを以下に示す。
【0260】
【数65】
【0261】
[確認の要約]
入力基準命令セマンチックの正確性を試験するために、TIEコーダはイントリンシックスを使用して新しい命令を使用するためにアプリケーションを変更し、その後(1)これをマシーンコードにコンパイルし、命令セットシミュレータによりアプリケーションを作動するか、または(2)ネイティブコードにコンパイルし、イントリンシックの互換性を与えるためにTIEコンパイラにより出力されたマクロおよび機能を使用する。アプリケーションの正確性はこれらの2つのオプションのいずれか一方により命令基準セマンチックスの正確性を確認する。基準セマンチックスの変換はオプション2により確認され、拡張されたコンパイラおよびシミュレータの正確性はオプション1により確認される。アプリケーションにより与えられたものを超える付加的なカバー区域は、特別なケース(例えば普通でないまたは“コーナー”の場合)の試験を生成するためにテストケースTIE構造の使用によるものである。
【0262】
構成セマンチックは前述の方法と同一方法を使用する基準セマンチックスの代わりにこれらを変換するためにTIEコンパイラオプションを使用することによって確認されてもよい。構成セマンチックとそれらのHDLへの変換もまた、それぞれHDLへの変換において動作する市場で等価のチェックツールにより基準セマンチックスに類似して形式的に確認されてもよい。構成セマンチックとそれらの変換もまたHDLシミュレータで動作するTIE規定のテストのケースの使用によりチェックされる。
【0263】
レジスタファイルのTIEコンパイラ、インターロック、バイパス、コアインターフェース、および例外によって生成されるHDLはTIE入力に基づいて自動的に生成された試験を動作し結果を確認するためのコシミュレーションを使用することにより確認される。これらの試験はインターロック、バイパスおよび例外の全ての組合わせを徹底的に試験するためパイプライン仕様を使用する。
【0264】
TIEコンパイラにより生成されるHALコードは命令セットシミュレータでそれを実行することにより検査される。新しい命令のアセンブラおよびコンパイラサポートはほとんど前述のようにして検査される。
【0265】
[プロセッサのコシミュレーション]
コシミュレーションはRTLと参照モデルを並列に動作し、特定された境界においてISAで規定された構造的な可視状態を比較するプロセスである。
【0266】
コシミュレータ(以後“cosim”とする)は、RTLシミュレータ、ISS、および多数の他のモニタ/チェッカタスクとの間のシンクロナイザおよびゲートウェイとして作用する。診断はRTLとISSとの間にミスマッチが生じるとすぐに、またはアサーションチェッカが破局的事象を通報するときに失敗する。
【0267】
コシミュレーションの使用には幾つかの利点がある。第1に、失敗した診断を容易にデバッグすることである。これは問題が生じたサイクル(またはその近く)でシミュレーションを停止させ、デバッグ時間と労力を著しく減少させる。
【0268】
第2に、さらに状態チェックを行う。これはプログラム実行を通じてプロセッサ状態の観察を可能にし、それによって正確な最終結果を生成しながら、エラーのある中間結果を生成するケースを通報する。
【0269】
最後に、コシミュレーションにより、自己チェックの必要はない。ランダム診断が実行され、チェックされることができる。
【0270】
好ましい実施形態では、ISSは参照モデルであり、境界は命令の退去と外部イベントが生じるときにはいつでも規定される。比較される構造的な可視の状態のセットは構成可能である。構成可能なプロセッサによりcosimを使用する1つの挑戦はRTLとISSを比較するプロセスに関する完全な知識がないことである。RTLとISSとの比較について知られていることは、比較は命令退去境界と外部イベントの発生で生じることを必要とすることである。しかしながら、RTLとISSで比較されるべきプロセッサ状態はユーザがその構成に含まれるように選択するプロセッサオプションに依存する。プロセッサオプションがプロセッサコアの特別な構成に含まれないとき、状態はRTLまたはISSのいずれにも存在しないので、cosim環境はオプションにより導入される状態を比較しようと試みてはならない。したがって、好ましい実施形態は、構成可能で、プロセッサ構成中にソフトウェアおよびハードウェアと共にカスタマイズされるcosim環境を使用する。
【0271】
[TIEによりcosimを動作させる態様]
ユーザがTIEを使用してプロセッサ状態と命令セットを拡張する能力は、cosim環境がプロセッサ状態および命令セットについての事前に完全な知識なしに開発される必要があるので、cosimプロセスを複雑にする。TIEの存在する場合、cosim環境は新しいプロセッサ状態を決定できる必要があり、その新しいプロセッサ状態は比較され/確認にされ、新しい状態がRTLとISSの間で比較される境界を決定する。cosimがこれらの2つの要求/目標を実現できるようにするために、TIEで定義されている新しいプロセッサ状態に関する情報を必要とする。cosimにより必要とされる情報は新しい状態の名称と、状態エレメントの幅と、状態を定義する完全なRTL階級(パス)と、状態がリセットで定義されるか否かと、これが個々の状態またはレジスタファイルであるか否かと、状態がレジスタファイルであるときのエントリ数とを含んでいる。
【0272】
cosimにより必要とされる情報は3つのステップでユーザのTIE記述から生成される。最初に、図14で示されているように、TIEコンパイラはTIE記述をパーズし、入力ファイルに定義されている状態の中間表示を生成する。この中間表示はその後、cosimプリプロセッサにより新しいTIE状態の確認に必要なcosimソースコードを生成するために使用される。最後に、生成されたcosimコードは所定の構成に特定のcosim環境を生成するために残りのcosimフレームワークと一体化される。これは好ましくは例えばカリフォルニア州マウンテンビューのSynopsys社によるVera(商標名)System Verifier で構成されるようなVera(商標名)コシミュレーション言語でコードを生成するためtppを使用して行われる。
【0273】
以下のセクションはcosimプリプロセッサと、前述のガロアフィールドのTIE例と連結して得られた発生されたcosimソースコードの例を含んでいる。
【数66】
cosimソースコード(レジスタファイルの比較):
【数67】
cosim出力プログラム(レジスタファイルの比較):
【数68】
cosimソースコード(TIE状態の比較):
【数69】
cosim出力プログラム(TIE状態の比較):
【数70】
【0274】
したがって、要約すると、Killian の明細書に記載されているシミュレータを好ましい実施形態で動作するように適合するため、主に状態への一般化に対処するための多数の変化を行わなければならない。TIE状態は任意の幅であるので、インターフェースは任意の大きさのレジスタ値を必要とされるが、インターフェースは性能の理由でいつでも使用されるわけではないことが好ましい。このため、レジスタはクラスに区分され、gdbとcosimインターフェースはこれらが1つのクラスと、単一の整数コードから1つのクラス内のインデックスを発見することができるように変更される。ソケットインターフェースは任意の幅値が送信および受信されることができるように変更される。新しいメモリインターフェースは広いロードと記憶域をサポートするために付加される。TIE状態の初期化はレジスタファイルと、レジスタのコプロセッサへの割当てをサポートするために一般化される。TIE状態のアクセスに関連するシミュレートパイプライン遅延のサポートも付加される。TIE状態へのインターフェースはCPENABLE例外をシミュレートするために変更される。
【0275】
[要約]
前述した主要な新しいTIE構造を要約すると、これらが影響する生成されたファイルおよびそれらの通常目的が以下の表III に与えられている。
【表4】
本発明を好ましい実施形態を伴って前述したが、これは単に例示の目的で行われたものであり、本発明はそれに限定されない。本発明の変形は当業者に容易に明白であり、それらは本発明の技術的範囲内に含まれる。
[付属資料]
【数71】
【0276】
【図面の簡単な説明】
【図1】
好ましい実施形態にしたがった4ステージのパイプライン化された拡張可能なレジスタに関する制御論理の構成図。
【図2】
好ましい実施形態にしたがった4ステージのパイプライン化された拡張可能なレジスタに関する制御論理の構成図。
【図3】
図1および2のレジスタの2ステージバージョンの構成図。
【図4】
第1の実施形態にしたがったコア加算器への信号インターフェースの説明図。
【図5】
従来のロード整列装置の構成図。
【図6】
好ましい実施形態にしたがったロード整列装置の構成図。
【図7】
好ましい実施形態にしたがったセマンチックブロック信号出力インターフェースの構成図。
【図8】
好ましい実施形態にしたがったパイプラインレジスタ最適化の説明図。
【図9】
好ましい実施形態の例外処理の説明図。
【図10】
好ましい実施形態のさらに別の例外処理の説明図。
【図11】
好ましい実施形態の基準セマンチックス情報処理の構成図。
【図12】
好ましい実施形態にしたがった自動的に生成された命令文書化の構成図。
【図13】
好ましい実施形態にしたがったTIE検査プロセスの説明図。
【図14】
好ましい実施形態のコシミュレーションプロセスの説明図。
Claims (49)
- 構成可能なプロセッサを設計するシステムにおいて、
予め定められた部分とユーザ定義部分とを含んでいる構成可能な仕様に基づいてプロセッサのハードウェア構成の記述を生成するハードウェア生成手段と、
構成仕様に基づいてハードウェア構成に特別なソフトウェア開発ツールを生成するソフトウェア生成手段とを具備し、
ハードウェア生成手段は、構成仕様のユーザ定義部分に基づいてプロセッサのハードウェア構成の記述のユーザ定義レジスタファイルを含むものであり、
ソフトウェア生成手段は、ソフトウェア開発ツールのユーザ定義プロセッサレジスタファイルに関連するソフトウェアを含むものであるシステム。 - ユーザ定義プロセッサレジスタファイルに関連するソフトウェアは命令のフィールドにしたがってレジスタファイルの素子をアクセスする命令を含んでいる請求項1記載のシステム。
- ハードウェア生成手段は、レジスタ転送レベルのハードウェア記述言語に少なくとも一部分のハードウェア構成記述を生成する請求項2記載のシステム。
- 構成仕様はレジスタファイル中の素子幅を特定するステートメントを使用してレジスタファイルを規定する請求項1記載のシステム。
- 構成仕様はレジスタファイルの素子数を特定するステートメントを使用してレジスタファイルを規定する請求項1記載のシステム。
- ハードウェア生成手段は、構成仕様と独立してレジスタファイルの少なくとも1つの読取りポートと書込みポートの数を決定する請求項1記載のシステム。
- ハードウェア生成手段は、構成仕様中のスケジューリング情報に基づいて読取りポートの数を決定する請求項6記載のシステム。
- ハードウェア生成手段は、プロセッサのハードウェア構成記述の一部分として、データのステージング価格を最小にするために命令オペランドへユーザ定義レジスタファイルの書込みポートを割当てるための論理記述を生成する請求項1記載のシステム。
- ハードウェア生成手段はレジスタファイルにアクセスするパイプライン論理を生成する請求項1記載のシステム。
- ユーザ定義レジスタファイルの読取りポートは、それらをソースオペランドとして使用する任意の命令の最も早期の段で読取られる請求項9記載のシステム。
- ユーザ定義レジスタファイルの書込みポートはそれを目的地オペランドとして使用する任意の命令の最終段、またはその後であるならば命令コミット段で読み取られる請求項9記載のシステム。
- ハードウェア生成手段は、プロセッサのハードウェア構成の部分として、レジスタファイルをアクセスする命令内で、レジスタファイルからソースオペランドを選択するために使用される各フィールドのレジスタファイルの読取りポートを与える論理を発生する請求項1記載のシステム。
- ハードウェア生成手段は、プロセッサのハードウェア構成の一部分としてレジスタファイルにアクセスするためのバイパス論理を生成する請求項1記載のシステム。
- ハードウェア生成手段は、命令オペランドに基づいた構成仕様と、構成仕様の状態使用記述により説明されたプロセッサの所定のパイプラインのインターロック論理を生成する請求項13記載のシステム。
- ハードウェア生成手段は、プロセッサのハードウェア構成の一部分として、レジスタファイルをアクセスするインターロック論理を生成する請求項1記載のシステム。
- ハードウェア生成手段は、構成仕様のスケジューリング情報に基づいてインターロック論理を生成する請求項15記載のシステム。
- ハードウェア生成手段は、命令オペランドに基づいた構成仕様と、構成仕様の状態使用記述により説明されたプロセッサの所定のパイプラインのインターロック論理を生成する請求項15記載のシステム。
- ハードウェア生成手段は、ユーザ定義レジスタファイルのアクセスをサポートするために構成仕様の予め定められた部分により記述されるプロセッサ論理装置の少なくとも1部分を使用するようにプロセッサハードウェア構成記述を生成する請求項1記載のシステム。
- プロセッサ論理装置の少なくとも一部分はアドレス計算論理装置を含んでいる請求項18記載のシステム。
- アドレス計算論理装置はアドレス加算器論理装置を含んでいる請求項19記載のシステム。
- プロセッサ論理装置の少なくとも一部分は予め定められた部分とユーザ定義部分との間で共有されるデータ整列論理装置を含んでいる請求項19記載のシステム。
- プロセッサ論理の少なくとも一部分はデータメモリである請求項19記載のシステム。
- 構成仕様のユーザ定義部分は条件的にユーザ定義レジスタファイルに書込みをする命令の記述を含んでいる請求項1記載のシステム。
- ソフトウェア生成手段は、ユーザ定義レジスタファイルに関するソフトウェアの部分として、構成仕様に基づいて設計確認とプロセッサの製造の診断試験を行う請求項1記載のシステム。
- 構成仕様は、プロセッサの命令に対する基準および構成セマンチックスの両者を含んでおり、
基準セマンチックスは構成セマンチックの設計の正確さを確認するために使用されることができる請求項1記載のシステム。 - プロセッサ命令セット記述言語は命令試験のケースを含んでおり、
ソフトウェア生成手段は試験のケースの診断を行う請求項1記載のシステム。 - ソフトウェア生成手段は、アプリケーションを実行しながらオペランドをプロセッサ命令セット記述言語の命令にサンプリングすることによって試験ベクトルを自動的に生成する請求項1記載のシステム。
- ソフトウェア生成手段はユーザ定義状態とレジスタファイルに関するソフトウェアの一部分としてオペレーティングシステムの少なくとも一部を生成する請求項1記載のシステム。
- 発生されたオペレーティングシステム部分はプロセッサ状態の保存および回復シーケンスを含んでいる請求項28記載のシステム。
- 保存および回復シーケンスはコンポーネント状態の相互依存性に関して生成され、相互依存性に対して確認される請求項29記載のシステム。
- オペレーティングシステムはタスク交換中にプロセッサ状態全体より少なくしか記憶できない請求項28記載のシステム。
- 構成仕様のユーザ定義部分は構成仕様の予め定められた部分でみられないソフトウェアデータタイプを規定し、
コンパイラはソフトウェアデータタイプをサポートする請求項28記載のシステム。 - ソフトウェア生成手段はユーザ定義レジスタファイルに関するソフトウェアの一部分としてコンパイラ、リンカ、シミュレータ、デバッガの少なくとも1つを生成する請求項1記載のシステム。
- ソフトウェア生成手段はユーザ定義レジスタファイルに関するソフトウェアの一部分としてコンパイラを生成し、
コンパイラはユーザ特定レジスタファイル中のレジスタへプログラム変数を割当てることができる請求項1記載のシステム。 - コンパイラはさらに、メモリからユーザ定義レジスタファイルのレジスタへ値をロードし、ユーザ定義レジスタファイルのレジスタ中の値をメモリに記憶することができる請求項34記載のシステム。
- コンパイラはさらに、ユーザ定義レジスタファイルの1つのレジスタからユーザ定義レジスタファイルの別のレジスタへ値を移動できる請求項34記載のシステム。
- コンパイラはユーザ定義レジスタファイルをアクセスするソフトウェア生成手段により生成されるソフトウェアの命令のストールサイクルを決定するために構成仕様でスケジューリング情報を使用する請求項34記載のシステム。
- ソフトウェア生成手段はバイパス通路のカバー範囲をチェックするためにモニタを自動的に生成する請求項1記載のシステム。
- 構成可能なプロセッサを設計するシステムにおいて、
予め定められた部分とユーザ定義部分を含んでいる構成仕様に基づいて、プロセッサのハードウェア構成の記述を生成するハードウェア生成手段と、
構成仕様に基づいて、ハードウェア構成に特定のソフトウェア開発ツールを生成するソフトウェア生成手段とを具備し、
構成仕様はソフトウェア開発ツールで使用される命令のスケジューリング情報を特定するステートメントを含んでおり、
ハードウェア生成手段は、構成仕様に基づいて、少なくとも1つのパイプライン論理と、パイプラインストーリング論理と、命令再スケジューリング論理との少なくとも1つの記述を生成するシステム。 - スケジューリング情報は命令のオペランドが所定の段でプロセッサのパイプラインに入るステートメントを含んでいる請求項39記載のシステム。
- スケジューリング情報は命令の演算が所定の段でプロセッサのパイプラインを出るステートメントを含んでいる請求項39記載のシステム。
- ソフトウェア生成手段により生成されたソフトウェアは構成仕様のユーザ定義部分に記述されている命令を使用するコンパイラを含んでおり、
コンパイラは構成仕様のユーザ定義部分に説明されている命令をスケジュールするために命令スケジュール中にスケジューリング情報を使用する請求項39記載のシステム。 - 構成仕様は複数のプロセッササイクルが処理されることを必要とする命令の記述を含んでいる請求項39記載のシステム。
- 構成仕様は、プロセッサのターゲットパイプラインと独立している命令のセマンチックの記述を含んでおり、
ハードウェア生成手段は命令セマンチックから分離したパイプライン記述に基づいてパイプラインのプロセッサハードウェア構成の一部分としてパイプラインを生成する請求項43記載のシステム。 - 構成可能なプロセッサを設計するシステムにおいて、
予め定められた部分とユーザ規定部分とを含んでいる構成仕様に基づいて、プロセッサのハードウェア構成の記述を生成するハードウェア生成手段と、
構成仕様に基づいて、ハードウェア構成に特有のソフトウェア開発ツールを生成するソフトウェア生成手段と、
構成仕様に基づいて構成仕様により記述されたプロセッサ命令セットの文書を生成する文書生成手段とを具備しているシステム。 - 文書生成手段はプロセッサ命令セットの文書を生成するために構成仕様中に規定されている命令の基準セマンチックスを使用する請求項45記載のシステム。
- 構成仕様のユーザ定義部分は、ここで規定されている命令の基準セマンチックと、ユーザ定義命令の概要とユーザ定義命令のテキスト記述の少なくとも一方のユーザ規定仕様を含んでおり、
文書生成手段は、プロセッサ命令セットの文書を生成するために概要とテキスト記述の少なくとも一方を使用する請求項45記載のシステム。 - 構成可能なプロセッサを設計するシステムにおいて、
予め定められた部分とユーザ定義部分とを含んでいる構成仕様に基づいて、プロセッサのハードウェア構成の記述を生成するハードウェア生成手段と、
構成仕様に基づいて、ハードウェア構成に特有のソフトウェア開発ツールを生成するソフトウェア生成手段とを具備し、
構成仕様はプロセッサ命令が例外を挙げたときプロセッサ例外の仕様を含んでおり、
ハードウェア生成はプロセッサハードウェア構成の一部分としてその例外をサポートするハードウェアを生成するシステム。 - 拡張可能なプロセッサのハードウェア記述を実行するハードウェアシミュレーション手段と、
拡張可能なプロセッサのソフトウェア基準モデルを実行するソフトウェアシミュレーション手段と、
ハードウェアシミュレーション手段とソフトウェアシミュレーション手段とを動作し、そこからのシミュレーション結果を比較して拡張可能なプロセッサのハードウェア記述と拡張可能なプロセッサのソフトウェア参照モデルとの対応を設定するコシミュレーション手段とを具備しているプロセッサシミュレーションシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/506,502 US7036106B1 (en) | 2000-02-17 | 2000-02-17 | Automated processor generation system for designing a configurable processor and method for the same |
PCT/US2001/005051 WO2001061576A2 (en) | 2000-02-17 | 2001-02-15 | Automated processor generation system for designing a configurable processor and method for the same |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2004502990A true JP2004502990A (ja) | 2004-01-29 |
JP2004502990A5 JP2004502990A5 (ja) | 2008-04-03 |
JP4619606B2 JP4619606B2 (ja) | 2011-01-26 |
Family
ID=24014856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001560891A Expired - Fee Related JP4619606B2 (ja) | 2000-02-17 | 2001-02-15 | 構成可能なプロセッサを設計する自動化されたプロセッサ生成システムおよびその方法 |
Country Status (8)
Country | Link |
---|---|
US (4) | US7036106B1 (ja) |
JP (1) | JP4619606B2 (ja) |
KR (1) | KR100589744B1 (ja) |
CN (1) | CN1288585C (ja) |
AU (1) | AU2001238403A1 (ja) |
GB (1) | GB2376546B (ja) |
TW (1) | TW571206B (ja) |
WO (1) | WO2001061576A2 (ja) |
Families Citing this family (114)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1378665A (zh) | 1999-06-10 | 2002-11-06 | Pact信息技术有限公司 | 编程概念 |
WO2001069411A2 (en) * | 2000-03-10 | 2001-09-20 | Arc International Plc | Memory interface and method of interfacing between functional entities |
FR2811093A1 (fr) * | 2000-06-30 | 2002-01-04 | St Microelectronics Sa | Dispositif et procede d'evaluation d'algorithmes |
DE10034869A1 (de) * | 2000-07-18 | 2002-02-07 | Siemens Ag | Verfahren zum automatischen Gewinnen einer funktionsfähigen Reihenfolge von Prozessen und Werkzeug hierzu |
US8058899B2 (en) | 2000-10-06 | 2011-11-15 | Martin Vorbach | Logic cell array and bus system |
GB0028079D0 (en) * | 2000-11-17 | 2001-01-03 | Imperial College | System and method |
US9552047B2 (en) | 2001-03-05 | 2017-01-24 | Pact Xpp Technologies Ag | Multiprocessor having runtime adjustable clock and clock dependent power supply |
US9436631B2 (en) | 2001-03-05 | 2016-09-06 | Pact Xpp Technologies Ag | Chip including memory element storing higher level memory data on a page by page basis |
US9250908B2 (en) | 2001-03-05 | 2016-02-02 | Pact Xpp Technologies Ag | Multi-processor bus and cache interconnection system |
US9411532B2 (en) | 2001-09-07 | 2016-08-09 | Pact Xpp Technologies Ag | Methods and systems for transferring data between a processing device and external devices |
US10031733B2 (en) | 2001-06-20 | 2018-07-24 | Scientia Sol Mentis Ag | Method for processing data |
US6941548B2 (en) | 2001-10-16 | 2005-09-06 | Tensilica, Inc. | Automatic instruction set architecture generation |
DE10305584A1 (de) * | 2002-02-04 | 2003-08-07 | Arthrex Inc | Knotenschieber und Fadengreifer |
DE10205523A1 (de) * | 2002-02-08 | 2003-08-28 | Systemonic Ag | Verfahren zum Bereitstellen einer Entwurfs-, Test- und Entwicklungsumgebung sowie ein System zur Ausführung des Verfahrens |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
JP2003316838A (ja) * | 2002-04-19 | 2003-11-07 | Nec Electronics Corp | システムlsiの設計方法及びこれを記憶した記録媒体 |
JP4202673B2 (ja) * | 2002-04-26 | 2008-12-24 | 株式会社東芝 | システムlsi開発環境生成方法及びそのプログラム |
US7376812B1 (en) | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
US7346881B2 (en) | 2002-05-13 | 2008-03-18 | Tensilica, Inc. | Method and apparatus for adding advanced instructions in an extensible processor architecture |
US7937559B1 (en) | 2002-05-13 | 2011-05-03 | Tensilica, Inc. | System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes |
GB0215033D0 (en) * | 2002-06-28 | 2002-08-07 | Critical Blue Ltd | Instruction set translation method |
GB0215034D0 (en) * | 2002-06-28 | 2002-08-07 | Critical Blue Ltd | Architecture generation method |
FR2843214B1 (fr) * | 2002-07-30 | 2008-07-04 | Bull Sa | Procede de verification fonctionnelle d'un modele de circuit integre pour constituer une plate-forme de verification, equipement emulateur et plate-forme de verification. |
EP1537486A1 (de) | 2002-09-06 | 2005-06-08 | PACT XPP Technologies AG | Rekonfigurierbare sequenzerstruktur |
US7228531B1 (en) * | 2003-02-03 | 2007-06-05 | Altera Corporation | Methods and apparatus for optimizing a processor core on a programmable chip |
US7305391B2 (en) * | 2003-02-07 | 2007-12-04 | Safenet, Inc. | System and method for determining the start of a match of a regular expression |
US7194705B1 (en) * | 2003-03-14 | 2007-03-20 | Xilinx, Inc. | Simulation of integrated circuitry within a high-level modeling system using hardware description language circuit descriptions |
ATE409904T1 (de) * | 2003-04-09 | 2008-10-15 | Jaluna Sa | Betriebssysteme |
US8612992B2 (en) * | 2003-04-09 | 2013-12-17 | Jaluna Sa | Operating systems |
EP1503286B1 (en) * | 2003-07-30 | 2014-09-03 | Jaluna SA | Multiple operating system networking |
KR20070005917A (ko) * | 2003-09-30 | 2007-01-10 | 쟈루나 에스에이 | 운영체제 |
US7290174B1 (en) * | 2003-12-03 | 2007-10-30 | Altera Corporation | Methods and apparatus for generating test instruction sequences |
US7770147B1 (en) * | 2004-03-08 | 2010-08-03 | Adaptec, Inc. | Automatic generators for verilog programming |
US20050216900A1 (en) * | 2004-03-29 | 2005-09-29 | Xiaohua Shi | Instruction scheduling |
US7398492B2 (en) | 2004-06-03 | 2008-07-08 | Lsi Corporation | Rules and directives for validating correct data used in the design of semiconductor products |
US7404156B2 (en) * | 2004-06-03 | 2008-07-22 | Lsi Corporation | Language and templates for use in the design of semiconductor products |
US7334201B1 (en) * | 2004-07-02 | 2008-02-19 | Tensilica, Inc. | Method and apparatus to measure hardware cost of adding complex instruction extensions to a processor |
US7324106B1 (en) * | 2004-07-27 | 2008-01-29 | Nvidia Corporation | Translation of register-combiner state into shader microcode |
US7389490B2 (en) * | 2004-07-29 | 2008-06-17 | International Business Machines Corporation | Method, system and program product for providing a configuration specification language supporting selective presentation of configuration entities |
US7386825B2 (en) | 2004-07-29 | 2008-06-10 | International Business Machines Corporation | Method, system and program product supporting presentation of a simulated or hardware system including configuration entities |
EP1806847B1 (en) * | 2004-10-28 | 2010-02-17 | IP Flex Inc. | Data processing device having reconfigurable logic circuit |
CN100389419C (zh) * | 2004-12-11 | 2008-05-21 | 鸿富锦精密工业(深圳)有限公司 | 系统设定档案储存系统及方法 |
US7664928B1 (en) * | 2005-01-19 | 2010-02-16 | Tensilica, Inc. | Method and apparatus for providing user-defined interfaces for a configurable processor |
US7712081B2 (en) * | 2005-01-19 | 2010-05-04 | International Business Machines Corporation | Using code motion and write and read delays to increase the probability of bug detection in concurrent systems |
US7386814B1 (en) * | 2005-02-10 | 2008-06-10 | Xilinx, Inc. | Translation of high-level circuit design blocks into hardware description language |
JP4342464B2 (ja) * | 2005-03-29 | 2009-10-14 | 富士通マイクロエレクトロニクス株式会社 | マイクロコントローラ |
JP2009505171A (ja) * | 2005-06-27 | 2009-02-05 | イコア コーポレイション | ステートフルなトランザクション指向のシステムを指定する方法、及び半導体デバイスの構造的に構成可能なイン・メモリ処理へ柔軟にマッピングする装置 |
DE102005041312A1 (de) * | 2005-08-31 | 2007-03-15 | Advanced Micro Devices, Inc., Sunnyvale | Speicherzugriff auf virtuelles Targetgerät |
US7523434B1 (en) * | 2005-09-23 | 2009-04-21 | Xilinx, Inc. | Interfacing with a dynamically configurable arithmetic unit |
US20070074078A1 (en) * | 2005-09-23 | 2007-03-29 | Potts Matthew P | Test replication through revision control linking |
US7478356B1 (en) * | 2005-09-30 | 2009-01-13 | Xilinx, Inc. | Timing driven logic block configuration |
US7366998B1 (en) * | 2005-11-08 | 2008-04-29 | Xilinx, Inc. | Efficient communication of data between blocks in a high level modeling system |
JP2009524134A (ja) * | 2006-01-18 | 2009-06-25 | ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト | ハードウェア定義方法 |
US7757224B2 (en) | 2006-02-02 | 2010-07-13 | Microsoft Corporation | Software support for dynamically extensible processors |
JP2007272797A (ja) * | 2006-03-31 | 2007-10-18 | Toshiba Corp | パイプライン高位合成システム及び方法 |
US7827517B1 (en) * | 2006-05-19 | 2010-11-02 | Altera Corporation | Automated register definition, builder and integration framework |
JP4707191B2 (ja) * | 2006-09-26 | 2011-06-22 | 富士通株式会社 | 検証支援プログラム、該プログラムを記録した記録媒体、検証支援装置、および検証支援方法 |
CN101542434A (zh) * | 2006-11-21 | 2009-09-23 | 日本电气株式会社 | 指令操作码生成系统 |
US7529909B2 (en) * | 2006-12-28 | 2009-05-05 | Microsoft Corporation | Security verified reconfiguration of execution datapath in extensible microcomputer |
US7971132B2 (en) * | 2007-01-05 | 2011-06-28 | Dialogic Corporation | Universal multimedia engine and method for producing the same |
JP2008176453A (ja) * | 2007-01-17 | 2008-07-31 | Nec Electronics Corp | シミュレーション装置 |
US8726241B1 (en) * | 2007-06-06 | 2014-05-13 | Rockwell Collins, Inc. | Method and system for the development of high-assurance computing elements |
US7873934B1 (en) | 2007-11-23 | 2011-01-18 | Altera Corporation | Method and apparatus for implementing carry chains on field programmable gate array devices |
US7913203B1 (en) | 2007-11-23 | 2011-03-22 | Altera Corporation | Method and apparatus for designing a system on multiple field programmable gate array device types |
US8176406B2 (en) * | 2008-03-19 | 2012-05-08 | International Business Machines Corporation | Hard error detection |
US7974967B2 (en) * | 2008-04-15 | 2011-07-05 | Sap Ag | Hybrid database system using runtime reconfigurable hardware |
US8429472B2 (en) * | 2008-08-20 | 2013-04-23 | National University Corporation Kyushu University Institute of Technology | Generating device, generating method, and program |
US8136063B2 (en) * | 2008-11-14 | 2012-03-13 | Synopsys, Inc. | Unfolding algorithm in multirate system folding |
US8843862B2 (en) * | 2008-12-16 | 2014-09-23 | Synopsys, Inc. | Method and apparatus for creating and changing logic representations in a logic design using arithmetic flexibility of numeric formats for data |
US8127262B1 (en) * | 2008-12-18 | 2012-02-28 | Xilinx, Inc. | Communicating state data between stages of pipelined packet processor |
KR101553652B1 (ko) * | 2009-02-18 | 2015-09-16 | 삼성전자 주식회사 | 이종 프로세서에 대한 명령어 컴파일링 장치 및 방법 |
EP2473918B1 (en) * | 2009-09-04 | 2019-05-08 | Intel Corporation | Method for generating a set of instruction compaction schemes, method for compacting a program according to the generated set, and programmable processor capable of executing a program thus compacted |
US8156459B1 (en) * | 2009-11-10 | 2012-04-10 | Xilinx, Inc. | Detecting differences between high level block diagram models |
US8548798B2 (en) * | 2010-02-26 | 2013-10-01 | International Business Machines Corporation | Representations for graphical user interfaces of operators, data types, and data values in a plurality of natural languages |
US8972953B2 (en) * | 2010-04-16 | 2015-03-03 | Salesforce.Com, Inc. | Methods and systems for internally debugging code in an on-demand service environment |
US8839214B2 (en) * | 2010-06-30 | 2014-09-16 | Microsoft Corporation | Indexable type transformations |
US8358653B1 (en) * | 2010-08-17 | 2013-01-22 | Xilinx, Inc. | Generating a pipeline of a packet processor from a parsing tree |
US8385340B1 (en) * | 2010-08-17 | 2013-02-26 | Xilinx, Inc. | Pipeline of a packet processor programmed to concurrently perform operations |
JP2012099035A (ja) * | 2010-11-05 | 2012-05-24 | Fujitsu Ltd | プロセッサの動作検証方法、プロセッサの動作検証装置、及びプロセッサの動作検証プログラム |
CN102567149B (zh) * | 2010-12-09 | 2016-03-23 | 上海华虹集成电路有限责任公司 | Soc系统验证方法 |
US8392866B2 (en) * | 2010-12-20 | 2013-03-05 | International Business Machines Corporation | Task-based multi-process design synthesis with notification of transform signatures |
US8341565B2 (en) | 2010-12-20 | 2012-12-25 | International Business Machines Corporation | Task-based multi-process design synthesis with reproducible transforms |
US8407652B2 (en) | 2010-12-20 | 2013-03-26 | International Business Machines Corporation | Task-based multi-process design synthesis |
US8423343B2 (en) * | 2011-01-24 | 2013-04-16 | National Tsing Hua University | High-parallelism synchronization approach for multi-core instruction-set simulation |
US8707266B2 (en) * | 2011-03-21 | 2014-04-22 | Cisco Technology, Inc. | Command line interface robustness testing |
US8520428B2 (en) * | 2011-03-25 | 2013-08-27 | Intel Corporation | Combined data level-shifter and DE-skewer |
CN102521011B (zh) * | 2011-11-18 | 2014-08-06 | 华为技术有限公司 | 一种模拟器的生成方法及装置 |
TWI505636B (zh) * | 2012-04-10 | 2015-10-21 | Univ Lunghwa Sci & Technology | 具有最佳多重取樣率之有限脈衝濾波器及其製造方法 |
CN103543983B (zh) * | 2012-07-11 | 2016-08-24 | 世意法(北京)半导体研发有限责任公司 | 用于提高平衡吞吐量数据路径架构上的fir操作性能的新颖数据访问方法 |
GB2508233A (en) | 2012-11-27 | 2014-05-28 | Ibm | Verifying logic design of a processor with an instruction pipeline by comparing the output from first and second instances of the design |
US9696998B2 (en) * | 2013-08-29 | 2017-07-04 | Advanced Micro Devices, Inc. | Programmable substitutions for microcode |
US9811335B1 (en) | 2013-10-14 | 2017-11-07 | Quicklogic Corporation | Assigning operational codes to lists of values of control signals selected from a processor design based on end-user software |
US9336072B2 (en) * | 2014-02-07 | 2016-05-10 | Ralph Moore | Event group extensions, systems, and methods |
US9660650B1 (en) * | 2014-03-13 | 2017-05-23 | Altera Corporation | Integrated circuits with improved register circuitry |
US9268597B2 (en) * | 2014-04-01 | 2016-02-23 | Google Inc. | Incremental parallel processing of data |
JP2017525272A (ja) * | 2014-07-07 | 2017-08-31 | トムソン ライセンシングThomson Licensing | メタデータに従ったビデオコンテンツの拡張 |
CN105279062A (zh) * | 2014-07-24 | 2016-01-27 | 上海华虹集成电路有限责任公司 | 调整随机权重的方法 |
US9250900B1 (en) | 2014-10-01 | 2016-02-02 | Cadence Design Systems, Inc. | Method, system, and computer program product for implementing a microprocessor with a customizable register file bypass network |
US10528443B2 (en) * | 2015-01-30 | 2020-01-07 | Samsung Electronics Co., Ltd. | Validation of multiprocessor hardware component |
US9507891B1 (en) | 2015-05-29 | 2016-11-29 | International Business Machines Corporation | Automating a microarchitecture design exploration environment |
US10642617B2 (en) * | 2015-12-08 | 2020-05-05 | Via Alliance Semiconductor Co., Ltd. | Processor with an expandable instruction set architecture for dynamically configuring execution resources |
US9542290B1 (en) | 2016-01-29 | 2017-01-10 | International Business Machines Corporation | Replicating test case data into a cache with non-naturally aligned data boundaries |
CN105912264A (zh) * | 2016-04-01 | 2016-08-31 | 浪潮电子信息产业股份有限公司 | 一种升级硬盘扩展器的方法及系统、一种硬盘扩展器 |
US10169180B2 (en) | 2016-05-11 | 2019-01-01 | International Business Machines Corporation | Replicating test code and test data into a cache with non-naturally aligned data boundaries |
US10055320B2 (en) | 2016-07-12 | 2018-08-21 | International Business Machines Corporation | Replicating test case data into a cache and cache inhibited memory |
US10223225B2 (en) | 2016-11-07 | 2019-03-05 | International Business Machines Corporation | Testing speculative instruction execution with test cases placed in memory segments with non-naturally aligned data boundaries |
US10261878B2 (en) | 2017-03-14 | 2019-04-16 | International Business Machines Corporation | Stress testing a processor memory with a link stack |
CN108920232B (zh) * | 2018-06-20 | 2021-06-22 | 维沃移动通信有限公司 | 一种目标对象的处理方法及终端设备 |
CN109101239B (zh) * | 2018-08-30 | 2021-09-14 | 杭州电子科技大学 | 一种在线Verilog代码自动判决系统的标准答案生成方法 |
CN111814093A (zh) * | 2019-04-12 | 2020-10-23 | 杭州中天微系统有限公司 | 一种乘累加指令的处理方法和处理装置 |
CN111523283B (zh) * | 2020-04-16 | 2023-05-26 | 北京百度网讯科技有限公司 | 一种验证处理器的方法、装置、电子设备及存储介质 |
US11662988B2 (en) * | 2020-09-29 | 2023-05-30 | Shenzhen GOODIX Technology Co., Ltd. | Compiler for RISC processor having specialized registers |
TWI783310B (zh) * | 2020-11-26 | 2022-11-11 | 華邦電子股份有限公司 | 計數方法以及計數裝置 |
CN113392603B (zh) * | 2021-08-16 | 2022-02-18 | 北京芯愿景软件技术股份有限公司 | 门级电路的rtl代码生成方法、装置和电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09251477A (ja) * | 1996-03-15 | 1997-09-22 | Mitsubishi Electric Corp | プロセッサ合成システム及びプロセッサ合成方法 |
Family Cites Families (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287511A (en) * | 1988-07-11 | 1994-02-15 | Star Semiconductor Corporation | Architectures and methods for dividing processing tasks into tasks for a programmable real time signal processor and tasks for a decision making microprocessor interfacing therewith |
US5867399A (en) | 1990-04-06 | 1999-02-02 | Lsi Logic Corporation | System and method for creating and validating structural description of electronic system from higher-level and behavior-oriented description |
US5623418A (en) | 1990-04-06 | 1997-04-22 | Lsi Logic Corporation | System and method for creating and validating structural description of electronic system |
US5555201A (en) | 1990-04-06 | 1996-09-10 | Lsi Logic Corporation | Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including interactive system for hierarchical display of control and dataflow information |
US5572437A (en) | 1990-04-06 | 1996-11-05 | Lsi Logic Corporation | Method and system for creating and verifying structural logic model of electronic design from behavioral description, including generation of logic and timing models |
US5544067A (en) | 1990-04-06 | 1996-08-06 | Lsi Logic Corporation | Method and system for creating, deriving and validating structural description of electronic system from higher level, behavior-oriented description, including interactive schematic design and simulation |
US5613098A (en) | 1991-03-07 | 1997-03-18 | Digital Equipment Corporation | Testing and debugging new Y architecture code on existing X architecture system by using an environment manager to switch between direct X code execution and simulated Y code execution |
US5361373A (en) | 1992-12-11 | 1994-11-01 | Gilson Kent L | Integrated circuit computing device comprising a dynamically configurable gate array having a microprocessor and reconfigurable instruction execution means and method therefor |
US5748979A (en) | 1995-04-05 | 1998-05-05 | Xilinx Inc | Reprogrammable instruction set accelerator using a plurality of programmable execution units and an instruction page table |
US5918035A (en) | 1995-05-15 | 1999-06-29 | Imec Vzw | Method for processor modeling in code generation and instruction set simulation |
EP0772140B1 (en) | 1995-10-23 | 2004-01-07 | Interuniversitair Micro-Elektronica Centrum Vzw | A design environment and a design method for hardware/software co-design |
US5696956A (en) | 1995-11-08 | 1997-12-09 | Digital Equipment Corporation | Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents |
US6035123A (en) | 1995-11-08 | 2000-03-07 | Digital Equipment Corporation | Determining hardware complexity of software operations |
US5819064A (en) | 1995-11-08 | 1998-10-06 | President And Fellows Of Harvard College | Hardware extraction technique for programmable reduced instruction set computers |
US5887169A (en) | 1996-03-15 | 1999-03-23 | Compaq Computer Corporation | Method and apparatus for providing dynamic entry points into a software layer |
US5857106A (en) | 1996-05-31 | 1999-01-05 | Hewlett-Packard Company | Runtime processor detection and installation of highly tuned processor specific routines |
US5748875A (en) | 1996-06-12 | 1998-05-05 | Simpod, Inc. | Digital logic simulation/emulation system |
US6031992A (en) | 1996-07-05 | 2000-02-29 | Transmeta Corporation | Combining hardware and software to provide an improved microprocessor |
US5693956A (en) * | 1996-07-29 | 1997-12-02 | Motorola | Inverted oleds on hard plastic substrate |
US5832205A (en) | 1996-08-20 | 1998-11-03 | Transmeta Corporation | Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed |
US5889990A (en) | 1996-11-05 | 1999-03-30 | Sun Microsystems, Inc. | Information appliance software architecture with replaceable service module providing abstraction function between system library and platform specific OS |
US6006022A (en) | 1996-11-15 | 1999-12-21 | Microsystem Synthesis, Inc. | Cross-linked development and deployment apparatus and method |
US6028996A (en) | 1997-03-18 | 2000-02-22 | Ati Technologies, Inc. | Method and apparatus for virtualizing system operation |
US6075938A (en) | 1997-06-10 | 2000-06-13 | The Board Of Trustees Of The Leland Stanford Junior University | Virtual machine monitors for scalable multiprocessors |
US6058466A (en) * | 1997-06-24 | 2000-05-02 | Sun Microsystems, Inc. | System for allocation of execution resources amongst multiple executing processes |
US6321323B1 (en) | 1997-06-27 | 2001-11-20 | Sun Microsystems, Inc. | System and method for executing platform-independent code on a co-processor |
US5995736A (en) | 1997-07-24 | 1999-11-30 | Ati Technologies, Inc. | Method and system for automatically modelling registers for integrated circuit design |
US6078736A (en) | 1997-08-28 | 2000-06-20 | Xilinx, Inc. | Method of designing FPGAs for dynamically reconfigurable computing |
US6269409B1 (en) | 1997-09-02 | 2001-07-31 | Lsi Logic Corporation | Method and apparatus for concurrent execution of operating systems |
US5999730A (en) | 1997-10-27 | 1999-12-07 | Phoenix Technologies Limited | Generation of firmware code using a graphic representation |
US6230307B1 (en) | 1998-01-26 | 2001-05-08 | Xilinx, Inc. | System and method for programming the hardware of field programmable gate arrays (FPGAs) and related reconfiguration resources as if they were software by creating hardware objects |
US6052524A (en) | 1998-05-14 | 2000-04-18 | Software Development Systems, Inc. | System and method for simulation of integrated hardware and software components |
US6496847B1 (en) | 1998-05-15 | 2002-12-17 | Vmware, Inc. | System and method for virtualizing computer systems |
US6275893B1 (en) | 1998-09-14 | 2001-08-14 | Compaq Computer Corporation | Method and apparatus for providing seamless hooking and intercepting of selected kernel and HAL exported entry points in an operating system |
EP0992916A1 (en) * | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Digital signal processor |
US6216216B1 (en) | 1998-10-07 | 2001-04-10 | Compaq Computer Corporation | Method and apparatus for providing processor partitioning on a multiprocessor machine |
US6282633B1 (en) | 1998-11-13 | 2001-08-28 | Tensilica, Inc. | High data density RISC processor |
US6477683B1 (en) | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6477697B1 (en) * | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Adding complex instruction extensions defined in a standardized language to a microprocessor design to produce a configurable definition of a target instruction set, and hdl description of circuitry necessary to implement the instruction set, and development and verification tools for the instruction set |
US6295571B1 (en) | 1999-03-19 | 2001-09-25 | Times N Systems, Inc. | Shared memory apparatus and method for multiprocessor systems |
US6385757B1 (en) * | 1999-08-20 | 2002-05-07 | Hewlett-Packard Company | Auto design of VLIW processors |
US6640238B1 (en) * | 1999-08-31 | 2003-10-28 | Accenture Llp | Activity component in a presentation services patterns environment |
US6415379B1 (en) | 1999-10-13 | 2002-07-02 | Transmeta Corporation | Method and apparatus for maintaining context while executing translated instructions |
US6615167B1 (en) | 2000-01-31 | 2003-09-02 | International Business Machines Corporation | Processor-independent system-on-chip verification for embedded processor systems |
-
2000
- 2000-02-17 US US09/506,502 patent/US7036106B1/en not_active Expired - Lifetime
-
2001
- 2001-02-15 JP JP2001560891A patent/JP4619606B2/ja not_active Expired - Fee Related
- 2001-02-15 AU AU2001238403A patent/AU2001238403A1/en not_active Abandoned
- 2001-02-15 GB GB0217221A patent/GB2376546B/en not_active Expired - Fee Related
- 2001-02-15 KR KR1020027010522A patent/KR100589744B1/ko not_active IP Right Cessation
- 2001-02-15 WO PCT/US2001/005051 patent/WO2001061576A2/en active Search and Examination
- 2001-02-15 CN CNB018052401A patent/CN1288585C/zh not_active Expired - Lifetime
- 2001-05-11 TW TW090103671A patent/TW571206B/zh not_active IP Right Cessation
-
2005
- 2005-11-16 US US11/281,217 patent/US7437700B2/en not_active Expired - Lifetime
-
2008
- 2008-10-09 US US12/248,890 patent/US8161432B2/en not_active Expired - Lifetime
- 2008-10-09 US US12/248,883 patent/US9582278B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09251477A (ja) * | 1996-03-15 | 1997-09-22 | Mitsubishi Electric Corp | プロセッサ合成システム及びプロセッサ合成方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20030016226A (ko) | 2003-02-26 |
CN1288585C (zh) | 2006-12-06 |
WO2001061576A2 (en) | 2001-08-23 |
US7036106B1 (en) | 2006-04-25 |
US20090172630A1 (en) | 2009-07-02 |
US20060101369A1 (en) | 2006-05-11 |
AU2001238403A1 (en) | 2001-08-27 |
US20090177876A1 (en) | 2009-07-09 |
GB2376546A (en) | 2002-12-18 |
WO2001061576A3 (en) | 2003-03-27 |
KR100589744B1 (ko) | 2006-06-15 |
US8161432B2 (en) | 2012-04-17 |
GB0217221D0 (en) | 2002-09-04 |
CN1436335A (zh) | 2003-08-13 |
JP4619606B2 (ja) | 2011-01-26 |
TW571206B (en) | 2004-01-11 |
GB2376546B (en) | 2004-08-04 |
US9582278B2 (en) | 2017-02-28 |
US7437700B2 (en) | 2008-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4619606B2 (ja) | 構成可能なプロセッサを設計する自動化されたプロセッサ生成システムおよびその方法 | |
Hoffmann et al. | A novel methodology for the design of application-specific instruction-set processors (ASIPs) using a machine description language | |
JP4482454B2 (ja) | 高級プログラミング言語におけるプログラムをハイブリッド計算プラットフォームの統一された実行可能要素に変換するためのプロセス | |
JP4403080B2 (ja) | 再構成可能なハードウェアエミュレーションによる制御データフローグラフを用いたデバッグ | |
EP0743599A2 (en) | Method of generating code for programmable processor, code generator and application thereof | |
US20050049843A1 (en) | Computerized extension apparatus and methods | |
JP2006505056A (ja) | 制御フローグラフ表現を制御データフローグラフ表現に変換するためのシステムおよび方法 | |
JP2006505057A (ja) | 制御データフローグラフ表現を区分化するためのシステムおよび方法 | |
Huang et al. | Synthesis of instruction sets for pipelined microprocessors | |
Chattopadhyay et al. | LISA: A uniform ADL for embedded processor modeling, implementation, and software toolsuite generation | |
Kassem et al. | Harmless, a hardware architecture description language dedicated to real-time embedded system simulation | |
Lanzagorta et al. | Introduction to reconfigurable supercomputing | |
Moreno et al. | Simulation/evaluation environment for a VLIW processor architecture | |
Karuri et al. | Design and implementation of a modular and portable IEEE 754 compliant floating-point unit | |
Potop-Butucaru et al. | Synchronous hypothesis and polychronous languages | |
US8433553B2 (en) | Method and apparatus for designing a processor | |
Schwarz et al. | Cycle-accurate software modeling for RTL verification of embedded systems | |
de Sousa | Specializing RISC-V Cores for Performance and Power | |
Marwedel | MIMOLA—a fully synthesizable language | |
Agarwal | Hardware Synthesis from C with Multiple Register Files in Data Path | |
Moreira | Simulador para Processadores de Sinal Digital de Arquitectura VLIW | |
Ramarao | A hybrid partitioning and scheduling technique for branch decoupling | |
Woop et al. | HWML: RTL/Structural Hardware Description using ML | |
Radetzki et al. | Modeling of a Multi core MicroBlaze System at TL and TLM Abstraction Levels in SystemC | |
Williams | Verification of VIRAM1 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080215 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080215 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091215 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100315 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100323 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100615 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100928 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101027 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131105 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |