(57)【要約】実行のためにプロセッサに後に送出されるプログラム語を圧縮解除するためのシステム。プログラム語のフィールドは、演算とオペランドとの間の規則性に基づいて圧縮される。結果的に得られたマイクロコードは、プログラムメモリに格納され、動的プログラム圧縮解除装置、すなわちdyprode（２０）に与えられる（２８）。dyprode（２０）は、レジスタ（３２，３４，３６，３８，４４）およびマルチプレクサ（４０，４２）を用いて組立てられ、クロック（２４）、リセット信号（２２）、およびマイクロコード（２６）によって駆動される。dyprode（２０）は、各サイクルにおいて、プログラム語の圧縮されていないフィールド（３０）を生じる。リアセンブルされたプログラム語は次に、プロセッサに渡される。dyprodeシステムは、必要とされるプログラムメモリを減らし、オフチップのプログラムメモリにマイクロプロセッサを接続するのに必要とされるバスのサイズを縮小し、ＣＭＯＳプロセッサの設計における消費電力を減らす。なぜなら、未使用のサイクル中においてレジスタファイル内のトグル率が低下するためである。dyprodeは、最後の有用な演算中に割当てられた値に、制御および読出アドレスをフリーズする。
2006500658.tif 000002
【特許請求の範囲】
【請求項１】
実行のためにプロセッサに送出されるべき圧縮されていないプログラム語の少なくとも１つのフィールドを生成するためにデータストリームを圧縮解除するための装置であって、
ａ）  Ｎビットの第１の値を格納するための少なくとも１つのレジスタと、
ｂ）  第１の入力を受取るための第１の手段とを含み、前記第１の入力は、Ｎビットの第２の値であり、前記装置はさらに、
ｃ）  第２の入力を受取るための第２の手段を含み、前記第２の入力は、Ｎビットの第１の値および第２の値をどのように処理すべきかについての命令を表わすマイクロコードであり、前記装置はさらに、
ｄ）  Ｎビットの第１の値および第２の値を多重化するための複数のマルチプレクサを含み、複数のマルチプレクサの１つはＮビットの出力を生成し、前記出力は、実行のためにプロセッサに送出されるべき圧縮解除されたプログラム語の少なくとも１つのフィールドであり、前記プロセッサは前記装置と電気的に通信する、装置。
【請求項２】
Ｎビットの複数の値を格納するための複数のレジスタをさらに含む、請求項１に記載の装置。
【請求項３】
複数のマルチプレクサは、Ｎビットの値を多重化するための手段を有し、前記Ｎビットは、
ａ）  複数のレジスタに格納された複数のＮビット、ならびに
ｂ）  少なくとも１つのレジスタからの少なくとも１つのＮビット値およびＮビットの第１の入力からなる群から選択される、請求項１に記載の装置。
【請求項４】
第３の入力を受取るための第３の手段をさらに含み、前記第３の入力はリセット信号である、請求項１に記載の装置。
【請求項５】
第４の入力を受取るための第４の手段をさらに含み、前記第４の入力はクロック信号である、請求項１に記載の装置。
【請求項６】
ａ）  少なくとも１つのレジスタからの少なくとも１つのＮビット値、ならびに
ｂ）  少なくとも１つのレジスタからの少なくとも１つのＮビット値および第１の入力からのＮビット値からなる群からのＮビットの値を処理するための少なくとも１つの処理手段をさらに含む、請求項１に記載の装置。
【請求項７】
少なくとも１つの処理手段は加算器である、請求項６に記載の装置。
【請求項８】
Ｎビットの値を格納するための少なくとも１つのレジスタは、Ｎビットの傾斜値を格納する、請求項１に記載の装置。
【請求項９】
Ｎビットの値を格納するための少なくとも１つのレジスタは、Ｎビットの開始値を格納する、請求項１に記載の装置。
【請求項１０】
第１の入力は、Ｎビットの傾斜値である、請求項１に記載の装置。
【請求項１１】
第１の入力は、Ｎビットのオペコードのstoreである、請求項１に記載の装置。
【請求項１２】
第１の入力は、Ｎビットの数値である、請求項１に記載の装置。
【請求項１３】
出力は、オペコードのstoreである、請求項１に記載の装置。
【請求項１４】
出力は、数値である、請求項１に記載の装置。
【請求項１５】
出力は、レジスタファイルのアドレスである、請求項１に記載の装置。
【請求項１６】
装置は、マイクロプロセッサのチップ上に配置される、請求項１に記載の装置。
【請求項１７】
最後の有用な演算中に割当てられた値に読出アドレスをフリーズするための手段をさらに含む、請求項１に記載の装置。
【請求項１８】
デフォルトサイクル中に書込不能信号を生成するための手段をさらに含む、請求項１に記載の装置。
【請求項１９】
データストリームを圧縮解除して、実行のためにプロセッサに送出されるべき圧縮されていないプログラム語の少なくとも１つのフィールドを生成するための方法であって、
ａ）  プロセッサと電気的に通信する装置内のレジスタにＮビットの第１の値を格納するステップと、
ｂ）  装置においてＮビットの第２の値の入力を受取るステップと、
ｃ）  装置において、Ｎビットの第１の値および第２の値をどのように処理すべきかについての命令を表わすマイクロコードを受取るステップと、
ｄ）  装置において、Ｎビットの第１の値および第２の値を処理するステップと、
ｅ）  装置においてＮビットの出力を生成するステップとを含み、前記出力は、実行のためにプロセッサに送出されるべき圧縮解除されたプログラム語の少なくとも１つのフィールドである、方法。
【請求項２０】
リセット信号を受取るステップをさらに含む、請求項１９に記載の方法。
【請求項２１】
クロック信号を受取るステップをさらに含む、請求項１９に記載の方法。
【請求項２２】
マイクロコードは１ビットである、請求項１９に記載の方法。
【請求項２３】
マイクロコードは２ビットである、請求項１９に記載の方法。
【請求項２４】
Ｎビットの第２の値は、傾斜値である、請求項１９に記載の方法。
【請求項２５】
Ｎビットの第２の値は、オペコードのstoreである、請求項１９に記載の方法。
【請求項２６】
Ｎビットの第２の値は数値である、請求項１９に記載の方法。
【請求項２７】
前記処理するステップは、Ｎビットの値を加えるステップを含む、請求項１９に記載の方法。
【請求項２８】
前記処理するステップは、Ｎビットの値を多重化するステップを含む、請求項１９に記載の方法。
【請求項２９】
出力は、オペコードのstoreである、請求項１９に記載の方法。
【請求項３０】
出力は、数値である、請求項１９に記載の方法。
【請求項３１】
出力は、レジスタファイルのアドレスである、請求項１９に記載の方法。
【請求項３２】
前記生成するステップは、出力を生成するためにＮビットの少なくとも１つの値を多重化するステップを含む、請求項２１に記載の方法。
【請求項３３】
最後の有用な演算中に割当てられた値に読出アドレスをフリーズするステップをさらに含む、請求項１９に記載の方法。
【請求項３４】
デフォルトサイクル中に書込不能信号を生成するステップをさらに含む、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明は、プログラム語、特に超長命令語（ＶＬＩＷ）プロセッサ用のプログラム語の圧縮および圧縮解除に関する。
【背景技術】
【０００２】
発明の背景
或る一定のタスク、たとえばゲームエンジン、グラフィックレンダリングシステム、複合システムシミュレータ、マルチメディア、およびリアルタイムのデジタル信号処理には高性能の処理が必要とされているため、大量のデータを迅速に処理することのできる高速プロセッサが求められている。一度に２つ以上の命令を実行することのできるスーパースカラプロセッサは、高性能の装置に必要な構成要素となっている。従来のマイクロプロセッサの設計、たとえば複雑命令セットコンピューティング（ＣＩＳＣ）および限定命令セットコンピューティング（ＲＩＳＣ）を用いていくつかの命令を同時に実行することができるが、このことは、極めて高価であることが考えられる複雑な制御回路を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＶＬＩＷプロセッサは、クロックサイクルごとに、複数の個々の機能ユニットに対する複数の個々の命令を処理することができる。ＶＬＩＷプロセッサは、ＣＩＳＣチップおよびＲＩＳＣチップよりも単純な設計を有する。ＶＬＩＷチップは、ＣＩＳＣチップまたはＲＩＳＣチップに比べて費用がかからず、消費電力が少なく、高い性能を達成することが可能である。しかしながら、ＶＬＩＷチップの設計が先行のチップの設計よりも単純であるにもかかわらず、ＶＬＩＷチップを効率よく作動させることのできるコードを作成およびコンパイルすることが困難であり得るのが欠点である。ＶＬＩＷプロセッサ用の命令語が、いくつかの命令に対するコードであることから、ＶＬＩＷプロセッサ用の命令語は、数百ビットの長さに至る極めて長いものとなり、格納用の大量のプログラムメモリに加え、オフチップメモリからプロセッサに命令語を転送することのできる大きなバスをも必要とする。装置の物理的な寸法が、その装置内で用いられ得るプロセッサ、バス、およびメモリのサイズを制限する一層小型の手持ち式装置において、このことは特に問題となる。
【０００４】
ミラー（Miller）他への米国特許第５，８１９，０５８号「プロセッサのための、命令の圧縮および圧縮解除のシステムおよび方法（Instruction Compression and Decompression System and Method for a Processor）」は、ＶＬＩＷプロセッサに超長命令語を格納するのに必要とされるメモリの量を減らすためのシステムおよび方法を記載している。ＶＬＩＷは多数の態様で圧縮される。これらの態様には、デフォルト命令を短縮すること、命令の実行に必要とされないビットを圧縮すること、および、実行時に展開される長い命令に短いコードを割当てることが含まれる。
【０００５】
ハムパプラム（Hampapuram）他への米国特許第５，８７８，２６７号「ＶＬＩＷプロセッサで用いるための圧縮された命令フォーマットおよびこのような命令を処理するためのプロセッサ（Compressed Instruction Format for Use in a VLIW Processor and Processor for Processing Such Instructions）」は、メモリに格納され、その後、キャッシュから読出された後に「その場で」圧縮解除されるＶＬＩＷ命令を圧縮するソフトウェアを記載している。各命令は、いくつかの演算を含む。各演算は、その特定の演算に対する圧縮方式に従って圧縮され、この圧縮方式は、圧縮された演算長を各演算に割当てる。圧縮は、演算の少なくとも１つの特徴に依存する。分岐ターゲットは圧縮されていない。
【０００６】
この発明の目的は、ＶＬＩＷアーキテクチャに対するプログラムメモリのサイズを最小化するための装置および方法を提供することである。
【０００７】
この発明の別の目的は、ＶＬＩＷアーキテクチャのプログラムのバスサイズを縮小することである。
【０００８】
この発明のさらに別の目的は、ＣＭＯＳプロセッサの設計において消費電力を減らすことである。
【課題を解決するための手段】
【０００９】
発明の概要
これらの目的は、動的にプログラムを圧縮解除するための装置および方法によって達成される。プログラムは、各アセンブラ命令に対応する、時系列のシーケンスのマイクロコードから、水平型ＶＬＩＷマイクロコードに変換される。（説明のために、ＶＬＩＷアーキテクチャが主に論じられているが、このことは、開示される装置およびシステムの適用例がＶＬＩＷアーキテクチャに限定されることを意味するものではない。この装置および方法は、情報の一般的なフローを圧縮解除することもできる。）次に、水平型ＶＬＩＷマイクロコードは、ビットシーケンスに圧縮され、このビットシーケンスはプログラムメモリに格納される。
【００１０】
ビットシーケンスを生じる圧縮アルゴリズムは、水平型ＶＬＩＷマイクロコードの各フィールドに経時的に割当てられた値のシーケンスに生じる規則性を利用する。各サイクルにおいて実行されるべき演算およびオペランドの空間内の軌跡を示すことができる。この軌跡を経時的に考慮した場合、１つの命令を指定するのに必要とされる情報は、たとえば、命令自体を表現せずに起点および増分の観点で軌跡を記述することにより、所定のサイクルにおいてプロセッサに発行されるべき１組のオペランド（および／またはオペコード）と、以前のサイクルにおいて発行されたオペランド（および／またはオペコード）との関係を指定することによって減らすことができる。
【００１１】
次に、結果的に得られたビットシーケンスは、動的なプログラム圧縮解除装置、すなわちdyprodeに与えられる。これらの装置の各々には、１ビットまたは２ビットのマイクロコードの連続ストリーム、すなわち、プログラムの軌跡の主な特徴を記述するビットシーケンスが与えられる。dyprodeは、レジスタおよびマルチプレクサを用いて組立てられており、クロック、リセット信号、およびマイクロコードにより駆動され、内部メモリまたは外部メモリからのマイクロコードと、適切であれば内部メモリまたは外部メモリからの入力とを用いて、プログラム語の圧縮されていないフィールドを生じる。圧縮されていないプログラム語の全体は、一連のdyprodeを用いることによって再構築され得、実行のためにプロセッサに渡され得る。
【００１２】
dyprodeシステムを用いることにより、プログラムメモリのサイズを大いに減らすことができるだけでなく、オフチップのプログラムメモリに接続されるバスのサイズを縮小することもできる。ＣＭＯＳプロセッサの設計における消費電力もまた減少する。なぜなら、プロセッサ装置が使用されないサイクル中において、dyprodeが、有用な最後の演算中に割当てられた値に制御および読出アドレスをフリーズする際に、プロセッサのレジスタファイルおよびプロセッサ装置内のトグル率が低下するためである。
【００１３】
dyprodeを変形して、プログラム語の様々な部分を圧縮解除することができる。或るdyprodeは、オペコードおよび即値の圧縮解除に最もよく適しており、また或る種のdyprodeは、レジスタファイルのアドレスを圧縮解除する。
【発明を実施するための最良の形態】
【００１４】
発明を実施するための最良の態様
以下の議論は、ＶＬＩＷプログラム語に焦点を絞っているが、この明細書に論じる方法およびシステムの適用例はＶＬＩＷアーキテクチャに限定されず、これらの適用例を用いて、情報の一般的なフローを圧縮および圧縮解除することができる。
【００１５】
圧縮型のコンパイラが、各アセンブラ命令に対応する、時系列のシーケンスのマイクロコードを水平型ＶＬＩＷマイクロコードに変換すると、ＶＬＩＷプログラム語が作成される。図１Ａにおいて、先行技術からのサンプルのＶＬＩＷプログラム語１６２および１７０は、命令レベル並列（Instruction Level Parallellism）を利用するのに必要とされるさまざまなオペコードおよびオペランドを伝達する多数のフィールド１６４、１６６、１６８、１７２、１７４、および１７６を含む。フィールド１６４、１６６、１６８、１７２、１７４、および１７６の数およびサイズは、実行サイクルの全体にわたって異なることが考えられるが、１つのＶＬＩＷプロセッサは、復号されるべき語の大きさにより、限られた数の復号方式を採用する。たとえば、語Ａ１６２およびＢ１７０は、異なる方式を用いて復号され得る。
【００１６】
図１Ｂを参照すると、プログラム語１７８は、サンプル復号方式において、プロセッサに同時に発行され得る多数の独立したフィールドを含む。たとえば、これらのフィールドは、フロー制御１８０、８ポートレジスタファイルについてのアドレス１８２、２つのアドレス生成ユニットに対するオペコード１８４、および２つの演算子のブロックに対するオペコード１８６を含み得る。
【００１７】
この発明の好ましい実施例では、次に、水平型ＶＬＩＷマイクロコードがビットシーケンスに圧縮され、このビットシーケンスがプログラムメモリに格納される。ビットシーケンスを生成する圧縮アルゴリズムは、水平型ＶＬＩＷマイクロコードの各フィールドに経時的に割当てられた値のシーケンスに生じる規則性を利用する。各サイクルにおいて実行されるべき演算およびオペランドの空間内の軌跡を示すことができる。この軌跡を経時的に考慮した場合、１つの命令を指定するのに必要とされる情報は、たとえば、命令自体を表現するのではなく起点および増分の観点で軌跡を記述することにより、所定のサイクルにおいてプロセッサに発行されるオペランド（および／またはオペコード）と、以前のサイクルにおいて実行されたオペランド（および／またはオペコード）との関係を指定することによって減らすことができる。
【００１８】
コードをどのように圧縮することができるかについての例を以下に示す。以下のコードを考えられたい。
【００１９】
【数１】
2006500658.tif 000003
【００２０】
３つのベクトル、すなわち、Result、FirstOper、およびSecondOperを格納するのに十分な大きさのレジスタファイルを有するプロセッサに対してこのコードが実行されるものと仮定されたい。コンパイラは、レジスタＲ０〜Ｒ７上にFirstOperをマッピングし、Ｒ８〜Ｒ１４上にSecondOperをマッピングし、Ｒ１５〜Ｒ３０上にResultをマッピングすることができる。コンパイラは、以下のようなアセンブラを生成することができる（imulは、レジスタを乗算するアセンブラ命令であり、結果レジスタを生成する）。
【００２１】
【数２】
2006500658.tif 000004
【００２２】
図２に示すように、Result、FirstOper、およびSecondOperについてのレジスタアドレスのダイナミックをプロットすることができる（ここで、時間は、プログラムの実行サイクルの単位で測定されており、ｙ軸はレジスタアドレスを示す）。オペランドのアドレスの軌跡を調べることにより、オペランドのアドレス間の関係を求めることができる。このことが、この明細書で用いられる圧縮法の鍵となる。圧縮を用いない場合、各レジスタのアドレスを指定せよという１つの命令に対し、２４ビットのプログラムメモリが必要とされる。しかしながら、図２に示すレジスタアドレスのダイナミックを調べることにより、個々のアドレスを格納するのではなくアドレスの軌跡に関連する値を格納することによってプログラムメモリが節約され得ることが示される。プログラムメモリは、以下に論じるように、限られた組の値において１組の記号の確率がピークに達する傾向を有するオペランドの軌跡に関連する値を格納することによっても節約され得る。
【００２３】
FirstOperの線を考えられたい。以下の値が格納されているものと仮定する。
【００２４】
１）  起点（ここでは０）
２）  最初の４つの点を連結する上向きの傾斜（ここで傾斜は２）
３）  点４および５ならびに点８および９を連結する下向きの傾斜（ここで傾斜は−４）
実際のレジスタアドレスではなく、各サイクルで用いられるべき傾斜が指定される場合、必要なプログラムメモリのビット数が減少する。また、FirstOperおよびSecondOperの傾斜が同じサイクルにおいて変化していることにも注目されたい。同じ演算子に関連付けられたオペランドの軌跡のこのような同時変化は、極めて一般的なものである。このパターンにより、より一層多くのプログラムメモリの節約が可能になる。なぜなら、圧縮されるべき１つのパケットが、１）FirstOperおよびSecondOperのアドレスを指定する１６ビットか、２）３つのオペランド、すなわち、FirstOper、SecondOper、およびResultのすべてに関連付けられた２４ビットか、または、３）演算中のマイクロコードおよび３つのオペランドに関連付けられた２４ビット、を表現することができるためである。
【００２５】
動的圧縮解除装置、すなわちdyprodeは、演算子とオペランドとの間のこの関係を用いて、上で論じたビットシーケンスからプログラム語のフィールドを生成する。dyprodeの構造は、圧縮されていないプログラム語を生成するために、すべてのオペランドに関連付けられた全２４ビットを各サイクル中に格納することを要求しない。その代わりに、以下に示すように、２４ビットは、dyprodeに格納された情報から各サイクルごとに再生成され得る。
【００２６】
図３において、dyprode１４は、圧縮解除システムの一部を形成するオンチップデバイスである。dyprode１４は、オンチップまたはオフチップのプログラムメモリ１８から機構１６を介して命令および値を受取る。機構１６は、メモリ１８から圧縮された語をフェッチして、圧縮解除のために、その語のフィールドを適切なdyprode１４に送出する。一実施例におけるこの機構１６は、圧縮解除を可能にするためのステートマシンと、格納された語をメモリからフェッチして、それらの語を適切な数のビットだけシフトして、圧縮のために、その語のフィールドを適切なdyprodeに分配するシフトユニットとを含み得る。４つのdyprode１４がここに表示されているが、他の実施例では任意の数のdyprode１４を用いることができる。
【００２７】
図４に関し、この発明の一実施例で用いられる、圧縮されたＶＬＩＷ語１５４は、８ビットのスーパーヘッダ１５６と、１６ビットのフィールドヘッダ１５８と、７つの１６ビットのフィールドおよび１つの８ビットのフィールドを有するフィールド１６０とを有する。スーパーヘッダ１５６のビットは、圧縮された語の構造を圧縮解除機構に伝えるか、または、ジャンプ命令もしくはプロシージャ呼出が生じたときに再アライメントを実施する。フィールドヘッダ１５８は、８対のビットを含み、それらの各々は、対応するdyprode装置に対する演算コード（store、default、same、およびswap）である（圧縮解除システムにおいて８つのdyprodeが存在するものと仮定されたい）。残りのフィールド１６０は、それらの演算コードが値の「store」を取る際にdyprodeにより読出されるべき１６ビット値および８ビット値である。圧縮された語１５４に存在するフィールド１６０の数は、値のstoreを取る演算コードの数により、サイクルごとに決定される。他の実施例において、フィールドヘッダ１５８は、各サイクルに存在しないことが考えられる（たとえば、圧縮された語のすべてのフィールドが存在する場合であり、この場合、スーパーヘッダは、dyprodeに対する演算コードとして用いられる（以下の表１を参照）。たとえば、「All Store」のコードは、圧縮解除器に対し、圧縮された語のすべてのフィールドが存在していることと、フィールドヘッダ１５８が必要ではないこととを伝える。しかしながら、
演算コードが「Mixed」である場合、フィールドヘッダ１５８は必要である。）。加えて、他の実施例では、個々のフィールドのすべてが必ずしも存在しないことが考えられる。この実施例において、圧縮解除されたＶＬＩＷ語は、長さが１２０ビットである。
【００２８】
表１は、スーパーヘッダ１５６のビットの、考え得る配列をまとめたものである。
【００２９】
【表１】
2006500658.tif 000005
【００３０】
表２は、フィールドヘッダ１５８に含まれ得る、dyprode装置に対する演算コードの意味をまとめたものである。これらの演算コードの完全な記述内容を以下の表４に提示する。
【００３１】
【表２】
2006500658.tif 000006
【００３２】
傾斜dyprode２０（「Dyprode1」）を図５に示す。Dyprode1  ２０は、リセット信号２２、クロック２４、および２ビットのマイクロコードの連続ストリームによって駆動される。この傾斜dyprode２０は、３つのＮビットレジスタ、すなわち、previous_value３２、same_slope３４、およびswap_slope３６を特徴とする。２つのＮビットの定数、すなわち、previous_reset４４およびslope_reset３８が存在する。Dyprode1  ２０はまた、Ｎビットの入力を有する４つのマルチプレクサ（「mux」）４０と、４つのＮビットの入力を有する１つのマルチプレクサ４２とを含む。また、１つのＮビット加算器４６（モジュール２N、キャリーアウトが無視される）、または１組の接続していない加算器（たとえば、２つのＮ／２ビット加算器か、もしくは３つのＮ／３ビット加算器）も存在する。Dyprode1  ２０は、Ｎビットイン２８（Ｎは特定の実現例により一定にされる）を有し、各サイクルにおいてＮビットアウト３０を生成する。この実施例において、Ｎビットイン２８の更新は、このような更新が、２ビットのマイクロコードであるコマンドの「store」により要求されたときにのみ、（内部または外部の）メモリまたは環境から行なわれる。
【００３３】
上述のように、２ビットのマイクロコードは、水平型ＶＬＩＷマイクロコードをビットシーケンスに圧縮することから生じる。以下の表３に、この種のdyprodeに関する、このマイクロコードのニーモニック値および２進値を示す。
【００３４】
【表３】
2006500658.tif 000007
【００３５】
この傾斜dyprode２０がリセット信号２２を受取る場合、CONSTANTprevious_resetの値がprevious_valueレジスタ３２内にロードされ、CONSTANTreset_slope３８の値がsame_slopeレジスタ３４およびswap_slopeレジスタ３６内にロードされる。リセット信号２２が存在しない場合、Dyprode1  ２０は、マイクロコード２６により制御される。リセット信号２２およびマイクロコード信号２６（default４８、same５０、store５２、swap５４、およびreset５６）についてのデータ経路も図５に示す。以下の表４は、マイクロコード２６の挙動をまとめたものである。
【００３６】
【表４】
2006500658.tif 000008
【００３７】
上の表４ａから認識できるように、マイクロコードが「default」４８であると、previous_value３２がNビットアウトを決定する。「default」４８のマイクロコードを用いることにより、乗算器または加算器等のプロセッサ装置がクロックサイクル中に用いられていないときに、ＣＭＯＳ設計のプロセッサにおけるトグル率の低下を可能にする。たとえば、４ポート読出および２ポート書込のレジスタファイルにより入力を受ける乗算器および加算器を有するシステムにおいて、１つのサイクルにおいて加算器が用いられない場合、加算器についてのファイルアドレスおよび演算上のオペコードを生成するdyprodeが「default」４８のマイクロコードを実行すると、以下の段階が踏まれる。１）最後の有用なアドレスに、プロセッサのレジスタファイルをフリーズする（このことは、加算器に接続されたプロセッサのレジスタファイルの出力ポートに関連付けられた傾斜dyprodeにより行なわれ得る）。２）最後に実行されたマイクロコードに、加算器に対する制御をフリー
ズする（このことは、加算器に関連付けられた値dyprodeにより行なわれ得る）。３）加算の結果が書込まれることになっている、プロセッサのレジスタファイルの書込ポートに書込不能を生成する。最後の有用な演算中に割当てられた値に対し、制御および読出アドレスをフリーズするためのこれらのステップにより、プロセッサのレジスタファイル内および装置自体の内部におけるトグル率が低下する。
【００３８】
傾斜dyprode２０の興味深い変形例は、デフォルト作動コードを実行する際に、previous_reset４４の値を出力することができる。その利点は、プロセッサ全体の設計における圧縮解除システムの実施例が、より単純である（かつ、より侵入的ではない）ことであり、その欠点は、得られるトグル率の低下がより少ないことである。
【００３９】
傾斜dyprode２０の別の興味深い変形例は、入力にsoftware_reset xxx信号を加えることによって得られる。この信号は、dyprode内のすべてのレジスタがリセット値を取らなければならない分岐を実行する際に、実行時における待ち時間を短縮することができる。実際には、コンパイル時において、条件付き分岐が実行されるか否かを確認することはほぼ不可能である。したがって、分岐ターゲット（LABELS）に対応するサイクルの実行に対し、リセットが発行されるべきである。このことは、dyprodeの内部レジスタの従来のリセットを実行するのに必要とされる待ち時間サイクルを生じる。software_reset信号を加えることにより、その待合せコードの挿入を回避することができる。表４ｂは、これらの変形例を示す。
【００４０】
【表５】
2006500658.tif 000009
【００４１】
以下の表５は、この発明の圧縮／圧縮解除の手法を用いてプログラムメモリがどのように節約されるかを示す。以下の例では、アセンブラコードの圧縮の結果を示す。ここでは、Resultのフィールドが、FirstOperおよびSecondOperのフィールドとは別に圧縮される。これらの圧縮されたフィールドの各々は、別個の傾斜dyprodeに与えられ、この場合、別個の傾斜dyprodeは、resultフィールドを圧縮解除するための８ビットの傾斜dyprodeと、FirstOperおよびSecondOperのフィールドを圧縮するための１６ビットのdyprodeとである。１６ビットのdyprodeにおいて、加算器は、２つの接続していない８ビット加算器に分割される。「その他」は、デフォルトマイクロコードに関連付けられた、乗算器を用いない任意のアセンブラ演算を示す。0×FAFE値は、stepbeyondに必要な負の傾斜、たとえばＲ６からＲ０およびＲ１１からＲ９に対応する−６および−２のモジュロ８ビット減算を生じるのに必要である。
【００４２】
【表６】
2006500658.tif 000010
【００４３】
圧縮が用いられない場合、ここに列挙した２１個のサイクルに対する命令についてのレジスタアドレスを格納するために、全部で５０４個のビットが必要となる（２１サイクル＊２４ビット／サイクル＝５０４ビット）。FirstOperおよびSecondOperのフィールドと、 Resultのフィールドとを圧縮することにより、３．４の圧縮率（５０４ビット／１４８ビット）を目指して１６ビットのdyprodeが８ビットのdyprodeと組合せられると、１４８個のビットのみが必要となる。
【００４４】
３つの８ビット加算器を含む１つの２４ビットdyprodeによって３つのすべてのレジスタフィールドが圧縮解除される場合、より高い圧縮率を達成することができる。以下の表６は、この手法を用いた結果を示す。
【００４５】
【表７】
2006500658.tif 000011
【００４６】
２４ビットの傾斜dyprodeが用いられると、レジスタアドレスを格納するために１１４個のビットのみが必要となる。ここで、圧縮率は４．４である（５０４ビット／１１４ビット）。
【００４７】
別の種類のdyprodeである、値dyprodeは、各々が限られた数の値で構成されるサブセットにおいて、１組の記号の確率が経時的にピークに達する傾向を有するときに用いることができる。たとえば、プログラムセクションが、限定された組の演算マイクロコードの頻繁な使用をローカルに表示した場合、適切に設計された値dyprodeは、ＣＭＯＳ設計においてプログラムメモリの使用量と消費電力とを減らすことができる。なぜなら、値dyprodeが、最後の有用なマイクロコードに未使用の装置の制御をフリーズすることができるためである。値dyprodeは、デフォルトサイクル中に、書込不能信号を生成し、上述のようにプロセッサ内のトグル率を低下させる。
【００４８】
図６を参照すると、値dyprode６４（「Dyprode2」）は、クロック６０と、リセット信
号５８と、２ビットマイクロコード６２とによって駆動される。Dyprode2  ６４は、２つのＮビットレジスタ、すなわちswap_value７０およびsame_value７２と、１つのＮビットCONSTANT reset_value６６とを特徴とする。この値dyprode６４はまた、４つのＮビット入力を有する３つのマルチプレクサ６８も特徴とする。Dyprode2  ６４は、各サイクル中に、Ｎビットの出力７６を生成する。
【００４９】
以下の表７に、Dyprode2  ６４を制御するマイクロコードのコマンド６２をまとめる。
【００５０】
【表８】
2006500658.tif 000012
【００５１】
上の図５で論じたDyprode1におけるように、図６に示すDyprode2  ６４に対するＮビットインの値７４は、マイクロコードのコマンドが「store」でない限り重要ではない。マイクロコードのコマンド（default７８、same８０、store８２、およびswap８４）ならびにリセット信号８６に対するデータ経路も図６に示す。
【００５２】
Dyprode1におけるように、Dyprode2  ６４の興味深い変形例は、デフォルト作動コードを実行する際に、reset_value６６の値を出力することができる。ここでもまた、その利点は、プロセッサ全体の設計における圧縮解除システムの実施例が、より単純である（かつ、より侵入的ではない）ことであり、その欠点は、得られるトグル率の低下が少ないことである。Dyprode1におけるように、値dyprode６４の別の興味深い変形例は、分岐の実行における待ち時間を短縮するために、入力にsoftware_reset xxx信号を加えることによって得られる。
【００５３】
図５および図６において、傾斜dyprodeおよび値dyprodeが、上述の２ビットのマイクロコードにより駆動されることに加え、dyprodeは、１つのビットコードによって制御され得る。図７を参照すると、傾斜dyprode８８（「Dyprode3」）は、リセット信号９０と、クロック９２と、１ビットマイクロコード９４とによって駆動される。Dyprode3  ８８は、２つのＮビット入力の３つのマルチプレクサと、３つのＮビット入力の１つのマルチプレクサと、１つのＮビット加算器１１６とを特徴とする（他の実施例において、加算器１１６は、接続していないＮビットのサブグループ、たとえば２つのＮ／２ビット加算器に作用する１組の加算器であり得る）。CONSTANT reset１０６と、２つのＮビットレジスタ、すなわちprevious_value１１２およびsame_slope１１４とが存在する。Dyprode3  ８８は、各サイクルにおいてＮビットの出力１０４を生成する。
【００５４】
以下の表８に、Dyprode3を制御するマイクロコードのコマンド９４をまとめる。
【００５５】
【表９】
2006500658.tif 000013
【００５６】
マイクロコードのコマンドが「store」でない限り、図７に示すDyprode3に対するＮビットインの値１０２は重要ではない。マイクロコードのコマンド（same９６およびstore９８）ならびにリセット信号１００に対するデータ経路も示される。
【００５７】
図７において、値dyprode１１８（「Dyprode4」）は、クロック１２０および１ビットマイクロコード１２２とによって駆動される。Dyprode4  １１８は、２つのＮビットマルチプレクサ１２８と、１つのＮビットレジスタsame_value１３０とを特徴とする。このdyprode１１８は、各サイクルにおいてＮビットの出力１３４を生成する。
【００５８】
以下の表９に、マイクロコードのコマンド１２２をまとめる。
【００５９】
【表１０】
2006500658.tif 000014
【００６０】
マイクロコードのコマンドが「store」でない限り、図８に示すDyprode4に対するＮビットインの値１３２は重要ではない。マイクロコードのコマンド（same１２４およびstore１２６）に対するデータ経路も示される。
【００６１】
図９を参照すると、dyprodeを用いてプログラム語を圧縮および圧縮解除するためのこの発明の手法が要約される。まず、時系列のシーケンスのマイクロコードが、水平型マイクロコードまたはプログラム語に圧縮される（ブロック１４６）。次に、この水平型マイクロコードが１ビットまたは２ビットのシーケンスのマイクロコードに圧縮される（ブロック１４８）。マイクロコードのこの圧縮されたシーケンスは次に、プログラムメモリに格納される（ブロック１５０）。次に、このビットシーケンスおよび必要とされる任意の値が適切なdyprodeに与えられて、プログラム語のフィールドを圧縮解除し、圧縮されていないプログラム語をリアセンブルする（ブロック１５２）。次に、リアセンブルされたこのプログラム語をプロセッサに送出して実行する（ブロック１５４）。
【図面の簡単な説明】
【００６２】
【図１Ａ】先行技術のサンプルのＶＬＩＷプログラム語のブロック図である。
【図１Ｂ】先行技術のサンプルのＶＬＩＷプログラム語のブロック図である。
【図２】各サイクルにおいて実行されるべきプログラムの演算およびオペランドの空間内の軌跡を示すグラフである。
【図３】マイクロプロセッサのチップ上におけるdyprodeシステムを示すブロック図である。
【図４】この発明の一実施例で用いられる、圧縮されたＶＬＩＷプログラム語のブロック図である。
【図５】この発明に従った、２ビットのマイクロコードにより駆動される傾斜dyprodeのブロック図である。
【図６】この発明に従った、２ビットのマイクロコードにより駆動される値dyprodeのブロック図である。
【図７】この発明に従った、１ビットのマイクロコードにより駆動される傾斜dyprodeのブロック図である。
【図８】この発明に従った、１ビットのマイクロコードにより駆動される値dyprodeのブロック図である。
【図９】この発明に従った、プログラム語の圧縮および圧縮解除を説明するフロー図である。
【図１Ａ】
2006500658.tif 000015
【図１Ｂ】
2006500658.tif 000016
【図２】
2006500658.tif 000017
【図３】
2006500658.tif 000018
【図４】
2006500658.tif 000019
【図５】
2006500658.tif 000020
【図６】
2006500658.tif 000021
【図７】
2006500658.tif 000022
【図８】
2006500658.tif 000023
【図９】
2006500658.tif 000024
【手続補正書】
【提出日】平成16年10月8日(2004.10.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
実行のためにプロセッサに送出されるべき圧縮されていないプログラム語の少なくとも１つのフィールドを生成するためにデータストリームを圧縮解除するための装置であって、
ａ）  Ｎビットの第１の値を格納するための少なくとも１つのレジスタと、
ｂ）  第１の入力を受取るための第１の手段とを含み、前記第１の入力は、Ｎビットの第２の値であり、前記装置はさらに、
ｃ）  第２の入力を受取るための第２の手段を含み、前記第２の入力は、Ｎビットの第１の値および第２の値をどのように処理すべきかについての命令を表わすマイクロコードであり、マイクロコードは、
ｉ）  起点もしくは増分、または
ii）  プログラムセクションに頻繁に現われる、限定された組の値の１つ
のうちの一方を含む観点で、各サイクルにおいて実行されるべき演算およびオペランドの空間内の軌跡を記述し、前記装置はさらに、
ｄ）  Ｎビットの第１の値および第２の値を多重化するための複数のマルチプレクサを含み、複数のマルチプレクサの１つはＮビットの出力を生成し、前記出力は、実行のためにプロセッサに送出されるべき圧縮解除されたプログラム語の少なくとも１つのフィールドであり、前記プロセッサは前記装置と電気的に通信する、装置。
【請求項２】
Ｎビットの複数の値を格納するための複数のレジスタをさらに含む、請求項１に記載の装置。
【請求項３】
複数のマルチプレクサは、Ｎビットの値を多重化するための手段を有し、前記Ｎビットは、
ａ）  複数のレジスタに格納された複数のＮビット、ならびに
ｂ）  少なくとも１つのレジスタからの少なくとも１つのＮビット値およびＮビットの第１の入力からなる群から選択される、請求項１に記載の装置。
【請求項４】
第３の入力を受取るための第３の手段をさらに含み、前記第３の入力はリセット信号である、請求項１に記載の装置。
【請求項５】
第４の入力を受取るための第４の手段をさらに含み、前記第４の入力はクロック信号である、請求項１に記載の装置。
【請求項６】
ａ）  少なくとも１つのレジスタからの少なくとも１つのＮビット値、ならびに
ｂ）  少なくとも１つのレジスタからの少なくとも１つのＮビット値および第１の入力からのＮビット値からなる群からのＮビットの値を処理するための少なくとも１つの処理手段をさらに含む、請求項１に記載の装置。
【請求項７】
少なくとも１つの処理手段は加算器である、請求項６に記載の装置。
【請求項８】
Ｎビットの値を格納するための少なくとも１つのレジスタは、Ｎビットの傾斜値を格納する、請求項１に記載の装置。
【請求項９】
Ｎビットの値を格納するための少なくとも１つのレジスタは、Ｎビットの開始値を格納する、請求項１に記載の装置。
【請求項１０】
第１の入力は、Ｎビットの傾斜値である、請求項１に記載の装置。
【請求項１１】
第１の入力は、Ｎビットのオペコードのstoreである、請求項１に記載の装置。
【請求項１２】
第１の入力は、Ｎビットの数値である、請求項１に記載の装置。
【請求項１３】
出力は、オペコードのstoreである、請求項１に記載の装置。
【請求項１４】
出力は、数値である、請求項１に記載の装置。
【請求項１５】
出力は、レジスタファイルのアドレスである、請求項１に記載の装置。
【請求項１６】
装置は、マイクロプロセッサのチップ上に配置される、請求項１に記載の装置。
【請求項１７】
最後の有用な演算中に割当てられた値に読出アドレスをフリーズするための手段をさらに含む、請求項１に記載の装置。
【請求項１８】
デフォルトサイクル中に書込不能信号を生成するための手段をさらに含む、請求項１に記載の装置。
【請求項１９】
データストリームを圧縮解除して、実行のためにプロセッサに送出されるべき圧縮されていないプログラム語の少なくとも１つのフィールドを生成するための方法であって、
ａ）  プロセッサと電気的に通信する装置内のレジスタにＮビットの第１の値を格納するステップと、
ｂ）  装置においてＮビットの第２の値の入力を受取るステップと、
ｃ）  装置において、Ｎビットの第１の値および第２の値をどのように処理すべきかについての命令を表わすマイクロコードを受取るステップとを含み、マイクロコードは、
ｉ）  起点もしくは増分、または
ii）  プログラムセクションに頻繁に現われる、限定された組の値の１つ
のうちの一方を含む観点で、各サイクルにおいて実行されるべき演算およびオペランドの空間内の軌跡を記述し、前記方法はさらに、
ｄ）  装置において、Ｎビットの第１の値および第２の値を処理するステップと、
ｅ）  装置においてＮビットの出力を生成するステップとを含み、前記出力は、実行のためにプロセッサに送出されるべき圧縮解除されたプログラム語の少なくとも１つのフィールドである、方法。
【請求項２０】
リセット信号を受取るステップをさらに含む、請求項１９に記載の方法。
【請求項２１】
クロック信号を受取るステップをさらに含む、請求項１９に記載の方法。
【請求項２２】
マイクロコードは１ビットである、請求項１９に記載の方法。
【請求項２３】
マイクロコードは２ビットである、請求項１９に記載の方法。
【請求項２４】
Ｎビットの第２の値は、傾斜値である、請求項１９に記載の方法。
【請求項２５】
Ｎビットの第２の値は、オペコードのstoreである、請求項１９に記載の方法。
【請求項２６】
Ｎビットの第２の値は数値である、請求項１９に記載の方法。
【請求項２７】
前記処理するステップは、Ｎビットの値を加えるステップを含む、請求項１９に記載の方法。
【請求項２８】
前記処理するステップは、Ｎビットの値を多重化するステップを含む、請求項１９に記載の方法。
【請求項２９】
出力は、オペコードのstoreである、請求項１９に記載の方法。
【請求項３０】
出力は、数値である、請求項１９に記載の方法。
【請求項３１】
出力は、レジスタファイルのアドレスである、請求項１９に記載の方法。
【請求項３２】
前記生成するステップは、出力を生成するためにＮビットの少なくとも１つの値を多重化するステップを含む、請求項２１に記載の方法。
【請求項３３】
最後の有用な演算中に割当てられた値に読出アドレスをフリーズするステップをさらに含む、請求項１９に記載の方法。
【請求項３４】
デフォルトサイクル中に書込不能信号を生成するステップをさらに含む、請求項１９に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
傾斜dyprode２０（「Dyprode1」）を図５に示す。Dyprode1  ２０は、リセット信号２２、クロック２４、および２ビットのマイクロコードの連続ストリームによって駆動される。この傾斜dyprode２０は、３つのＮビットレジスタ、すなわち、previous_value３２、same_slope３４、およびswap_slope３６を特徴とする。２つのＮビットの定数、すなわち、previous_reset４４およびslope_reset３８が存在する。Dyprode1  ２０はまた、Ｎ
ビットの入力を有する４つのマルチプレクサ（「mux」）４０と、４つのＮビットの入力を有する１つのマルチプレクサ４２とを含む。また、１つのＮビット加算器４６（モジュール２N、キャリーアウトが無視される）、または１組の接続していない加算器（たとえば、２つのＮ／２ビット加算器か、もしくは３つのＮ／３ビット加算器）も存在する。Dyprode1  ２０は、Ｎビットイン２８（Ｎは特定の実現例により一定にされる）を有し、各サイクルにおいてＮビットアウト３０を生成する。この実施例において、Ｎビットイン２８の更新は、このような更新が、２ビットのマイクロコードであるコマンドの「store」により要求されたときにのみ、（内部または外部の）メモリまたは環境から行なわれる（実施例に依存して、dyprodeへのＮビットの入力は、傾斜値、オペコードのstore、または数値を含み得る）。


【国際調査報告】
2006500658.tif 000025
2006500658.tif 000026