JP2013504115A - 方法および装置および記録されたキャリア - Google Patents

方法および装置および記録されたキャリア Download PDF

Info

Publication number
JP2013504115A
JP2013504115A JP2012527839A JP2012527839A JP2013504115A JP 2013504115 A JP2013504115 A JP 2013504115A JP 2012527839 A JP2012527839 A JP 2012527839A JP 2012527839 A JP2012527839 A JP 2012527839A JP 2013504115 A JP2013504115 A JP 2013504115A
Authority
JP
Japan
Prior art keywords
instruction
compacted
instructions
compaction
view
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.)
Pending
Application number
JP2012527839A
Other languages
English (en)
Inventor
ティジアード ヨハネス ズワセンコット、ヘンドリック
アウグステイン、アレクサンダー
グオ、ユンジン
エルテル、エルゲン ヴォン
アントン ヨハン レイテン、エルン
テナフ、エルワン ヤン モーリス レ
Original Assignee
インテル ベネラックス ビー.ブィー.
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by インテル ベネラックス ビー.ブィー. filed Critical インテル ベネラックス ビー.ブィー.
Publication of JP2013504115A publication Critical patent/JP2013504115A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

プログラマブルプロセッサが処理する命令のサブセット用の命令コンパクションスキームをそれぞれ生成する方法は、a)プログラマブルプロセッサで実行するソフトウェアを表す少なくとも1つの入力コードのサンプルを受信する段階であって、入力コードは第1の命令セットを定義する複数の命令を含む段階(S1)と、b)除去する命令セットを空として初期化する段階(S3)と、c)第1の命令セットの最もコンパクトな表現を決定する段階(S4)と、d)最もコンパクトな表現のサイズを閾値と比較する段階(S5)と、e)サイズが閾値より大きい場合、ステップe1からe3を実行する段階と、f)段階bから段階fを繰り返す段階であって、第1の命令セットは、除去する命令セットから形成される段階(S9、S10)とを備え、ステップe1からe3は、e1)第1の命令セットのどの命令の符号化コストが最も高いかを判断する段階(S6)と、e2)第1の命令セットから、最も高い符号化コストを持つ命令を除去する段階(S7)と、e3)命令を除去する命令セットに追加する段階(S8)とである。
【選択図】図4

Description

本発明は、一式の命令コンパクションスキームを生成する方法に係る。
本発明はさらに、このように生成された一式の命令コンパクションスキームによりプログラムをコンパククト化する方法に係る。
本発明はさらに、これら方法を実行する用途に適するようプログラミングされた装置に係る。
本発明はさらに、装置にこれら方法のうち1以上を実行させるプログラムを含む記録キャリアに関する。
本発明はまたさらに、上述した、コンパクト化されたプログラムを実行することのできるプログラム可能プロセッサに係る。
米国特許出願公開第2002/042909号明細書は、対応する命令セットからの命令を実行するアーキテクチャリソースを有する処理アーキテクチャで利用するプログラム命令シーケンスを生成するコンパイル方法を記載している。
公知のコンパイル方法では、第1の種類の命令ステートメントと第2の種類の命令ステートメントとを少なくとも含む複数のソースコード命令ステートメントを含むソースファイルが入力される。この方法では、第1の命令セットと第2の命令セットとを少なくとも選択する。第2の命令セットは、第1の命令セットがサポートするアーキテクチャリソースサブセットのみをサポートするよう設計されたコンパクトな命令セットである。それぞれ異なるサイズの少なくとも2つの命令セットを利用することにより、オペレーションおよびレジスタを符号化するためにコンパクトコード内に必要となるビット数が少なくなることから、コンパイラは、処理された平均コード長を低減させることができる。
公知の方法では、コンパイラは、ソースコードのタイプがタイム・クリティカルなコードか、管理コードかを検知する。管理コードとして分類されたコードを第1の命令セットで表し、コンパクトな命令セットおよびタイム・クリティカルなコードを第2の命令セットで表す。それぞれ異なるサイズの少なくとも2つの命令セットを利用することにより、オペレーションおよびレジスタを符号化するためにコンパクトコード内に必要となるビット数が少なくなることから、コンパイラは、処理された平均コード長を低減させることができる。
公知のコンパイラの欠点は、タイム・クリティカルコードおよび管理コードの識別ができないと、第1および第2の命令セットの割り当てができないことにある。
本発明の1つの目的は、より一般的な状況においても1以上の命令セットを生成することができる方法を提供することである。
本発明の第1態様では、プログラマブルプロセッサが処理する命令のサブセット用の命令コンパクションスキームをそれぞれ生成する方法は、a)プログラマブルプロセッサで実行するソフトウェアを表す少なくとも1つの入力コードのサンプルを受信する段階であって、入力コードは第1の命令セットを定義する複数の命令を含む段階(S1)と、b)除去する命令セットを空として初期化する段階(S3)と、c)第1の命令セットの最もコンパクトな表現を決定する段階(S4)と、d)最もコンパクトな表現のサイズを閾値と比較する段階(S5)と、e)サイズが閾値より大きい場合、ステップe1からe3を実行する段階と、f)段階bから段階fを繰り返す段階であって、第1の命令セットは、除去する命令セットから形成される段階(S9、S10)とを備え、ステップe1からe3は、e1)第1の命令セットのどの命令の符号化コストが最も高いかを判断する段階(S6)と、e2)第1の命令セットから、最も高い符号化コストを持つ命令を除去する段階(S7)と、e3)命令を除去する命令セットに追加する段階(S8)とである。
公知の方法とは違って、この第1態様による方法は、汎用性に優れる。この方法によると、大幅に相互に対応している命令を共通のグループに分類することができて効果的である。符号化コストの高い、標準から外れた(deviating)命令は、別個のグループを形成するよう選択する。このプロセスを繰り返す。
一部の命令については、最もコンパクトな表現は、元の(コンパクト化されていないもの:uncompacted)表現であろう。ここでいう元の表現とは、「完全なビュー」とも称する。
命令コンパクションスキームの数および各命令コンパクションスキームで要求される圧縮は、固定されていてもよいし、複数の命令の中の異なる命令数、および、要求されている最小の圧縮率を示す閾値を考慮に入れた計算により自動決定されてもよい。一実施形態では、命令コンパクションスキームの数および各命令コンパクションスキームについての圧縮を、ユーザに決めさせ、ユーザがコンパクションプロセスの制御権をとり、どの仕様が最良の結果を出すかを試すようにしている。
この方法の一実施形態では、命令は、個々にコンパクト化された複数の命令フィールドを含む。個々の命令フィールドをコンパクト化することで、命令全体をコンパクト化する場合よりも大きな圧縮が得られる。2つの命令が特定の命令フィールドで同じ値を有しているが、その他の点では異なっている場合には、この命令フィールドの値は共通コードでコンパクト化して、命令全体のコンパクションには異なるコードを用いる。命令フィールドに関する情報は、プロセッサ記述ファイルから得ることが好ましい。コンパクションスキームは、プログラマブルプロセッサの一定のビューに対応している。プロセッサビューは、プロセッサのリソースのサブセットのみが利用可能なシリコンハイブコンパイラの対象として定義されている。プロセッサのリソースに関する情報は、プロセッサ記述ファイルから得られる。
本実施形態の1つの変形例では、個々にコンパクト化される複数の命令フィールドは、少なくともオペコード、書き込みポートのインデックスを示すフィールド、および、読み出しポートのインデックスを示すフィールドを含む。これらフィールドをコンパクトにすることで、コードサイズが、より低減される。加えて、結果ポート(バス)を示すフィールド、書き込みポート選択を示すフィールド、および、即値(immediate value)を含むフィールドも個々にコンパクトにすることができる。
一実施形態では、それぞれ異なるサブセットのための命令コンパクションスキーム同士が、互いに異なるコードワード幅を有しており、これらサブセットの少なくとも1つが最小コードワード幅を有している。サブセットが互いに異なるサイズを有することができる場合には、一部のサブセットを、より小さいコードワードでコンパクトにして、符号化スペースを節約することができる。一部のサブセットは、互いに異なるコンパクションスキームを有することができるが、互いに同じサイズを有するコードワードにより符号化される。
一実施形態では、各サブセットのコンパクションスキームのコードワードサイズが、1×最小コードワード幅以上の整数である。こうすることで命令の読み出しが簡単になる。命令の一部はコンパクションされないままとすることができる。これら命令の長さは、コンパクト化されていてもいなくてもよい命令をそこからフェッチしてくる命令メモリの幅に等しくてよいが、これより小さくてもよい。好適には、命令は、命令メモリの幅以下として、命令フェッチ時間を短く保つとよい。
一実施形態では、互いに異なるサブセットを、互いに異なる方法でコンパクト化する。例えば、第1のビューに従ってコンパクト化される命令は、コンパイル時間プログラマブルレジスタを利用するテーブルルックアップ・デコンパクション(拡張)を利用することができ、第2のビューに従ってコンパクト化される命令は、ハードワイヤルックアップテーブルを利用するテーブルルックアップを利用することができる。サブセットのうちの少なくとも1つが可変長コードにコンパクト化されると好適である。可変長コード(VLC)を命令のサブセットのみに適用することで、そのサブセットの命令については高い圧縮係数が得られるという利点が一方ではあり、他方では、コード量が多くなりすぎず、このサブセット内のコードを簡単にデコンパクト化する(拡張する)ことができる、という利点もある。このコンパクションスキームが課す唯一の制約は、同じビューでコンパクト化された命令は、一定の最大長以下のサイズを有さねばならない、ということである。「ビュー」の長さ以下の長さのVLCでコンパクト化された命令が、このビューに収まる。
本発明の第2態様では、第1態様における方法がさらに、複数の命令を含むプログラムを受信する段階と、各命令について、段階aからfで決定されたものに対応する命令コンパクションを決定する段階と、命令コンパクションに従って命令を圧縮する段階と、コンパクト化された命令を提供する段階とを備える。
このようにコンパクト化されたプログラムは、命令コンパクションスキームのセットを定義するのに利用されたものと同じプログラムであってよい。
コンパクト化された命令は、特定のアドレス範囲に分類され、命令のアドレスから、利用されているコンパクションスキームのタイプを判別することができるようになっている。
一実施形態では、第2態様による方法がさらにコンパクト化された命令を、利用されているコンパクションスキームのタイプを示す少なくとも1つのインジケータとともに提供する段階をさらに備える。これにより、コンパクト化された命令を、元のプログラムと同じシーケンスに格納することができるようになるので、処理がし易くなる。さらに、コンパクト化された命令を整列する必要がなくなる。
一実施形態では、コンパクト化された命令を、複数のセグメントを含むワードに格納して、各セグメントは、該セグメントがコンパクト化された命令の第1のセグメントであるかを示す少なくとも1つのインジケータを含んでいる。
別の実施形態では、コンパクト化された命令は、複数のセグメントを含むワードに格納して、各コンパクト化された命令が、該コンパクト化された命令内の所定の位置にインジケータを含んでおり、該インジケータは、次のコンパクト化された命令のビューを示している。これは、異なるビューによる命令同士が異なるサイズを持っていたとしても、コンパクト化された命令をデコンパクト化する命令拡張器が、コンパクト化された命令の次のコードワードを正しく適時にプリフェッチすることができるようになる、という利点を有する。
本発明の第3態様では、第1態様または第2態様による方法を実行するよう適切にプログラミングされた装置が提供される。
本発明の第4態様では、装置に、第1態様または第2態様による方法を実行させるプログラムを含む記録キャリアが提供される。
本発明の第5態様では、プログラマブルプロセッサは、第1の命令コンパクションスキームに従ってN個のメモリワードセグメントの第1のコードワードとしてコンパクト化された第1の命令群と、第2の命令コンパクションスキームに従ってM個のメモリワードセグメントの第2のコードワードとしてコンパクト化された第2の命令群とを少なくとも含むコンパクト化された命令データとして格納される命令シーケンスを有するプログラムメモリ(10)と、命令復号器(20)と、少なくとも1つのレジスタファイル(40、40a)と、レジスタファイル(40a)に連結された少なくとも1つの発行スロット(50)と、命令拡張器(80)とを備え、命令拡張器(80)は、プログラムメモリからフェッチしたコンパクト化された命令データの命令コンパクションスキームを識別するコンパクションスキーム識別器(17)と、プログラムカウンター(PC)を受信するための入力と、プログラムメモリワードの少なくとも1つのセグメントを一時格納する格納設備(14)と、プログラムメモリ(10)と格納設備(14)とから、コンパクト化された命令データを選択する選択設備(27)と、選択されたコンパクト化された命令を、Kのサイズを有する拡張された命令に拡張する命令拡張ユニット(87)と、プログラムカウンター(PC)に呼応してプログラムメモリ(AD)のアドレスを生成して、選択設備を制御する制御設備(85)とを備え、K、N、Mは、1以上の整数であり、整数N、MはK以下であり、NおよびMのうち少なくともいずれかがKより小さい。
本発明の第1から第5態様は、さらに設計およびテスト設備を含んでもよい環境の一部である。
本発明のこれらおよびその他の態様は、以下に詳述されている。
従来のプログラマブルプロセッサを示す。 別の従来のプログラマブルプロセッサの一部を示す。 図2に一部が示されているプロセッサのプログラムメモリの内容を概略する。 命令コンパクションスキームのセットを決定する方法を示す。 命令コンパクションスキームのセットを生成するツールを示す。 プログラムをコンパクトにするツールを示す。 本発明によるプログラマブルプロセッサの第1の実施形態を概略する。 図7の一部をより詳しく示す。 図8の一部をより詳しく示す。 図9の一部をより詳しく示す。 図7のプロセッサで命令を処理する方法を示す。 本発明によるプログラマブルプロセッサの第2の実施形態を示す。 図12のプロセッサで命令を処理する方法を示す。 本発明によるプログラマブルプロセッサの第3の実施形態を示す。 本発明によるプログラマブルプロセッサのハードウェア記述を生成するツールを概略する。
以下の詳細な記載では、多くの詳細を述べて、本発明の完全な理解を促す。しかし当業者であれば、本発明をこれら特定の詳細がなくても実施することができることを理解する。他の場合には、公知の方法、手順、コンポーネントは詳述を避けて、本発明の側面を曖昧にしないようにしている箇所もある。
本発明を、以下に添付図面を参照して実施形態の形で詳述する。しかし本発明は、多くの異なる形態で実施することもでき、ここに述べた実施形態に限定されるものとして解釈されるべきではない。これら実施形態は、本開示を完全に行い、当業者に本発明の範囲を完全に伝えることを目的として提供されている。あるエレメントが別のエレメントに「接続」または「連結」されている、という場合には、他のエレメントに直接接続または連結されている場合もあれば、介在するエレメントが存在する場合もある。これに対して、あるエレメントが別のエレメントに「直接接続」または「直接連結」されている、という場合には、介在するエレメントは存在しない。図面全体にわたり、同様の番号は同様のエレメントを示している。「および/または」という表現は、関連する一覧にされているアイテムの1以上の任意の全ての組み合わせを含む。
またここでは、第1、第2、第3等の用語が、様々なエレメント、コンポーネント、および/またはセクションを示すために利用される場合があるが、これらエレメント、コンポーネント、および/またはセクションは、この接頭語により限定はされないこれらの接頭語は、単にあるエレメント、コンポーネント、および/またはセクションを、別のエレメント、コンポーネント、および/またはセクションから区別する目的で利用されているにすぎない。従って第1のエレメント、コンポーネント、および/またはセクションは、本発明の教示から逸脱しない範囲であれば、第2のエレメント、コンポーネント、および/またはセクションという名称でも構わない。
そうではないと定義されていない場合には、ここで利用される全ての用語(技術、科学用語を含み)は、本発明の技術分野の当業者が等しく理解する同じ意味を有するものとする。さらに、よく利用されている辞書に定義されているような用語は、関連する技術のコンテキストの意味に合致した意味で解釈されるべきであり、そうとここで特に明記されていない限りは、理想化され、完全にフォーマルな意味で解釈されるべきではない。ここで記載する全ての公報、特許出願、特許、その他の参考文献は、その全体をここに参照として組み込む。コンフリクトがある場合には、定義を含む本明細書のほうが制御権を握る。加えて、材料、方法、および例は例示であり、限定を意図していない。
図1は、プログラマブルプロセッサを概略する。図1に示す例では、プログラマブルプロセッサはVLIWプロセッサである。VLIWプロセッサは、VLIW命令ワードに分類される複数の命令ワードを並列処理する。これらは、通常、ソフトウェア開発ツールが生成により生成される。図1に示すVLIWプロセッサは、プログラムメモリ10と、該プログラムメモリに連結された命令復号器20とを含む。プログラムメモリ10は、VLIW命令ワードを含む。VLIWプロセッサはさらに、複数のバス70に、第1の選択エレメント30a,…,630mを介して連結された複数のレジスタファイル40a,…,40nを含む。1つのレジスタファイルは、1以上の入力ポートと1以上の出力ポートとを有する。1つのレジスタポートは、データ入力または出力、および、アドレス入力からなる。
明瞭化のために、図1には発行スロット50を1つしか示していない。実際には、VLIWプロセッサは複数の発行スロットを有する。複数の発行スロットのそれぞれが、VLIW命令ワードからの特定の命令ワードを処理する。1つの発行スロットは、入力データに限定されたオペレーションセットを実行することのできる1以上の機能ユニットを含む。発行スロット50は、命令復号器51、および、複数の機能ユニットFU53a,…,53k(例えば乗算器、加算器、シフタ等)を有する。発行スロット50はさらに、様々なソース(例えば、即値を提供する復号器20からの出力およびレジスタファイル)から入力データを選択する第2の選択エレメント52a,…,52kを有する。機能ユニット53a,…,53kおよび第2の選択エレメント52a,…,52kのオペレーションは、オペレーション復号器51により制御される。プロセッサはさらに、機能ユニット53a,…,53kをバス70に選択的に連結する複数の第3の選択エレメント60a,…,60kを含む。
命令は通常、複数の命令フィールドを含む。各フィールドが、プログラマブルプロセッサのデータパスの個々のアイテムを制御している。この特定の例では、命令は、結果ポート選択の選択(bus_select)、書き込みポートの選択(wp_select)、書き込みポートのインデックスの指定(wp_index)、読み出しポートのインデックスの選択(rp_index)、および、即値の指定、という6つの命令フィールドをオペコード用に含んでいてよい。
通常、各発行スロットは1つのオペコード命令フィールドを有している。このフィールドは、該発行スロットが実行するべきオペレーションを選択する。オペレーションは、発行スロットの機能ユニットのうちの1つにより実行される。オペコードは、機能ユニット選択信号およびオペレーションタイプ(オペタイプ)へと復号されて、特定のFUおよび該FUの特定のオペレーションを起動する。ときには、発行スロットが1つのオペレーションの処理(例えば即値のロード等)のみに特化している場合等、オペコードが存在しない場合もある。
1を越える数の発行スロット出力を有する各バスは、別個のbus_selectフィールドを有して、バスに接続する発行スロット出力を示す。
各レジスタファイル入力ポートは、1以上のバスに接続されている。1を超える数のバスが1つの書き込みポートに接続されている場合には、マルチプレクサが、レジスタファイルの入力ポートに接続する、正しいバスを選択する。書き込みポート選択(wp_sel)命令フィールドは、このマルチプレクサのための選択値を含んでいる。特別なコードwp_sel="11..11"を利用すると、この書き込みポートには書き込み処理を行うべきではないことを示すことができる。
この命令フィールドは、レジスタファイルに書き込まれるレジスタのアドレスを含んでいる。各レジスタ書き込みポートは、それぞれ別個のwp_indexを有している。
この命令フィールドは、レジスタファイルから読み出されるレジスタのアドレスを含んでいる。各レジスタ読み出しポートは、それぞれ別個のrp_indexを有している。
即値命令フィールドは、発行スロットの機能ユニットのいずれかに対する入力として利用されうる値を含んでいる。
本発明によらないコードコンパクションの1つの方法に即値オーバレイ(immediate overlaying)と称されるものがあり、これは、発行スロットの機能ユニットの入力が、レジスタファイル出力または即値フィールドを入力として利用できる、という事実に基づいたものである。オペタイプは、入力が何であるかを判断し、これは命令ごとに異なりうる。オペコードが、レジスタファイル出力がオペレーションに利用される旨を示している場合には、その発行スロットの即値フィールドは冗長なものになる。従って、即値が入力として選択されている場合は、その発行スロットの入力に接続されているレジスタ出力ポートのレジスタインデックスフィールドが冗長である、ということである。この即値フィールドおよびこのレジスタインデックスフィールドは、同じ命令内では決して利用されないので、これら2つのフィールドを組み合わせることができる。この即値とレジスタインデックスフィールドの(一部の)組み合わせが、即値オーバレイと称されている。
コードコンパクションの別の方法に、互いに異なるビューを利用するものがある。プロセッサビューとは、プロセッサのリソースのサブセットのみを利用可能とする、コンパイラの対象として定義されている。このサブセットは、(1)レジスタファイル特性:入出力ポート数、アドレス範囲、(2)機能ユニット特性:即値範囲、オペコード数、(3)バスの数、(4)完全な発行スロット、機能ユニット、レジスタファイル等の制限により定義される。
コードコンパクションの観点からは、プロセッサビューは、サブセットを制御する命令ビット数が、完全なプロセッサの命令ビット数より大幅に少ない場合に有用である。プロセッサは、1を越える数のビューを有することができる。
ビューのメカニズムをサポートするハードウェアを図2に示す。第1のビュー(ビュー0)では、プロセッサの全てのリソースが利用可能である。プログラムメモリワードは単一の命令を含んでいる。第2のビュー(ビュー1)では、各プログラムメモリワードが2つのコンパクト化された命令を含んでいる。第3のビュー(ビュー2)では、各プログラムメモリワードが4つのコンパクト化された命令を含んでおり、これは図3に概略されている。
完全なビューは、プログラムメモリ幅に必ずしも等しくなくてよい。場合によっては、小さいビューでも圧縮が良好に行われるように、より幅広のプログラムメモリを選択するほうが好ましい場合がある。例えば、プロセッサの全幅が60ビットであり、より小さなビューが16ビット幅である場合を想定する。60というプログラムメモリ幅とすると、小さいほうのビューは60/16=3.75の圧縮となる。これは、2の1乗までに切り捨てられる必要があり、これにより2という圧縮率になる。プログラムメモリの幅が64である場合には、圧縮率は4になる。
図3では、ビュー0の命令が通常配置されており、アドレス0から始まっている。ビュー0の命令については、PCはプログラムメモリアドレスに等しい。ビュー1の命令は、プログラムメモリアドレス0x1Bから始まる。ビュー1の第1の命令のプログラムカウンタは、値0を有する1つのLSB(低位半分のプログラムメモリワード0x1Bに命令が含まれている旨を示している)、値が"01"の2つのMSB(この命令がビュー1命令である旨を示している)、および、プログラムメモリアドレス0x1Bに等しい中間のビットから形成されている。この結果、PCについて0x1036となる。後続命令のPC値は、PCを増分することで得られる。アドレス0x2Aからがビュー2の命令となっている。第1のビュー2命令のPC値は、値"00"であり、ワード内の4つのコンパクト化された命令から1つ目を選択するための値"00である"2lsb、メモリアドレス:"0x2A"および値2の2つのMSB(ビュー番号を表す)から形成される。この結果、0x2150となる。
図2に示すように、ビューのメカニズムをサポートするハードウェアは、第1および第2のコンパクト化された命令セレクタ22、23、第1および第2の命令デコンパクションユニット24、25、および、完全な命令セレクタ26を含む。プログラムを走らせる場合、プロセッサは、プログラムカウンタ(PC)12で実行する命令を示す。プログラムカウンタ12の出力は、第1および第2の命令デコンパクションユニット24、25を制御する第1の部分12a、要求されているプログラムメモリワードをアドレス指定する第2の部分12b、および、完全な命令セレクタ26を制御する第3の部分12cを有する。部分12cはビュー選択を示している。完全なビューモードでは、PCがプログラムメモリアドレスに等しい。完全なビュー(ビュー0)のプログラムメモリワードは、完全な命令を正確に1つ含む。完全な命令セレクタ26は単に、この命令を命令復号器に渡す。
「コンパクト化されたビュー」モードでは、PCは、プログラムメモリアドレスに直接マッピングすることができない。この場合、PCの部分12aは、プログラムメモリワードのどの命令を選択する必要があるか示している。部分12bのアドレスが示すプログラムメモリワードが読み出される場合には、プログラムカウンタの部分12aが制御する第1および第2のコンパクト化された命令セレクタ22、23が選択するコンパクト化された命令を、命令デコンパクションユニット24、25に抽出する。
命令デコンパクションユニット24、25は、コンパクト化された命令を完全な命令に翻訳する。
プロセッサの特定のビューに対応する、実装されたコンパクションスキームそれぞれについて、命令デコンパクター24、25を実装する。デコンパクター24、25の出力は、完全な命令セレクタ26の入力となる。PCの部分12c(view_select)は、完全な命令セレクタ26のどの入力を、命令セレクタ26の出力として選択するかを決定する。
図2および図3を参照して上述したコードコンパクション方法では、プログラマが、どのコードをどのビューで走らせる必要があるかを定義している。基本構築ブロックの全ての命令は1つのビューを対象とする必要がある。ビュー間の切り替えは、ジャンプオペレーションによってのみ可能となる。これは、ジャンプ命令によってのみ行われる。命令選択およびスケジューリングの後に、アセンブラがコンパクト化された命令を定義して、コンパクト化された命令を1つのプログラムメモリワードにどのように配置するかを決定する。リンカが、各構築されたワードについてのプログラムメモリアドレスを定義する。一般的には、1つのビューに対する命令はひとまとめに分類される。あるグループの第1の命令は、常にプログラムメモリワードのビット0から始まる。そして同じ基本構築ブロック内の後続する命令は、プログラムメモリワード内に後続して配置され、コンパクト化された命令のサイズを圧縮率で乗算した値がプログラムメモリ幅より小さい場合には、それらの間にダミービットを充填する。ワードが完全幅である場合には、次の命令を次のプログラムメモリワードのビット0に配置する。
図4は、プログラマブルプロセッサが処理する命令のサブセットに対してそれぞれ命令コンパクションスキームを生成する、本発明による方法を概略する。本方法は、プログラマブルプロセッサで実行するソフトウェアを表す少なくとも1つの入力コードのサンプルを受信する第1のステップであって(S1)、入力コードは、第1の命令セットを定義する複数の命令を含む第1のステップを含む(S1)。
示されている実施形態では、方法は、ユーザに対して、命令コンパクションスキームの数と、各命令コンパクションスキームについて必要な最小圧縮とを指定するように要求する、第2のステップS2も含む。このようにして、ユーザは、コンパクションプロセスの制御権を握り、どの仕様が最良の結果をもたらすかを試すことができる。ステップS2は必須のステップではない。この代わりに、命令コンパクションスキームの数、および、命令コンパクションスキームごとに必要な圧縮を、固定しておくこともできる。また別の実施形態では、命令コンパクションスキームの数、および、命令コンパクションスキームごとに必要な圧縮を、複数の命令における異なる命令の数および閾値を考慮して自動決定することもできる。
第3のステップ(S3)では、除去する命令セットを定義して、この除去する命令セットは、空のセットとして初期化される。
ステップS4では、第1の命令セットの最もコンパクトな表現を決定する。
ステップS5で、最もコンパクトな表現のサイズを閾値と比較する。この比較結果に基づいて、ステップS5の後に、ステップS6からS8を実行する、または、ステップS9からS10を実行する。最もコンパクトな表現のサイズが、閾値より大きい場合には、S6からS8を実行して、そうではない場合にはS9からS10を実行する。
ステップS6では、第1の命令セットのうちのどの命令の符号化コストが最も高いかを判断する。次いでステップS7で、この命令を第1の命令セットから除去して、ステップS8で、除去した命令セットに追加する。プログラムフローは次にステップS4に続く。
最もコンパクトな表現のサイズが閾値以下であると判断された場合には、第1の命令セットを、除去された命令セットとして再定義して(ステップS9)、除去された命令セットを空として再定義する(ステップS10)。
本発明の第1態様による方法は、図5に示すビュー生成ツールVGで利用することができる。ここに示すように、ビュー生成ツールは、ビュー独立再配置可能オブジェクトファイル115(例えばELF(実行言語フォーマット)内のもの)から始まる。ビュー独立再配置可能オブジェクトファイル115は、プロセッサが実行すべき通常のソフトウェアアプリケーションから取得することができる。再配置可能オブジェクトファイル115は、圧縮後に、選択されたプログラムメモリに正確に理想的に収まる。オブジェクトファイル115は、リンクステップにより生じ、このなかにプログラムに必要な全てのモジュールが統合されている。ファイル115は、ジャンプの対象およびデータオブジェクトのシンボルを含んでいる。ビュー生成ツールVGは、シンボルを個々の値として取り扱うべきである。これは真実ではない場合もあるが、2つの異なるシンボルが常に互いに異なる値として参照されることが想定されている。一実施形態では、ビュー生成ツールVGは、同じ値のシンボルを識別するために予め再配置処理をしておくことができる。潜在的にこれにより、表のエントリ数を減らすことができるので、圧縮率が向上する。
示されている実施形態では、プロセッサ記述ファイル105も提供されている。プロセッサ記述ファイル105は、別々にコンパクト化することができる命令フィールドに命令を如何に分割するかについての情報を提供して、最適な命令コンパクションスキームセットを探すための検索スペースの低減を促す。プロセッサのプロセッサ記述ファイル105は、第1のアーキテクチャパラメータ抽出(APEX)モジュール120によって、静止時間命令フォーマット(TSIF:time stationary instruction format)データ構造125へと変換される。APEXモジュール120は、プロセッサのハードウェア記述に定義されているパラメータを抽出するためのアプリケーションプログラマインタフェース(API)を提供する。このAPIは、プロセッサのハードウェアを構築する際に、ハードウェア構築ブロックライブラリの利用により利用される。TSIFデータ構造125およびビュー独立再配置可能オブジェクトファイル115は、ビュー生成モジュール130に提供されるが、これについては後述する。ビュー生成モジュール130はビュー定義ファイル135を生成する。
ビュー生成モジュール130の一実施形態の通常の実装例を以下の擬似コードで示す。この実施形態では、命令コンパクションスキームセットは、再配置可能オブジェクトファイル115によってのみ決定される。
Figure 2013504115
ビュー定義ファイル135は、好適には以下の情報を含んでいる。
Figure 2013504115
図5に示すビュー生成ツールVGは、このプログラマブルプロセッサ上に走らせることが意図されている代表的なプログラムに高い圧縮率が達成されるように、プログラマブルプロセッサのビューを定義する。デコンパクション用のハードウェアが「入手可能(affordable)」であるべきである(つまり、ゲートカウントおよび/またはタイミング数値を超えていてはならない)。
ビュー生成ツールは、命令コンパクションスキームセットを1つ生成する。以下の記載では、各命令コンパクションスキームが、プロセッサの特定のビューに対応していることを想定している。または、命令コンパクションスキームは、プロセッサのビューから独立して決定されてもよい。
ツールVGは、ユーザが提供するソフトウェアカーネル115を利用してビューを生成する。このソフトウェアカーネルは、プロセッサの(将来の)利用の代表であることを想定している。これは、十分な大きさを持ち、プロセッサの全ての側面が可能(address all aspects)であるべきである。例えば、プロセッサがカスタムオペレーションを含んでいる場合、実際にこれらカスタムオペレーションを利用するカーネルを提供することを推奨する。ユーザは、ビューの数およびビューごとの圧縮を示すことで、ビュー生成プロセスを微調整することができる。ビュー生成ツールVGは、供給されるソフトウェアカーネルを走らせるプロセッサの最適なビューを生成することを目標としている。最適なビューとは、最高の圧縮率をもたらすことのできるビューと考えられる。カーネルは、単一のファイルとして供給されるべきである(例えば、ジャンプの対象のシンボルを有するELF(実行言語フォーマット)で)。
ツールVGは、全ての命令を読み出して、個々の命令フィールドそれぞれを格納する。そして、いわゆる最小ビューを決定する。この最小ビューは、プログラムの全ての命令を実行可能な最小のビューとして定義される。通常は、最小ビューの幅は、元の完全なビューの幅より小さい。最小ビューは、一定の数のエントリを有する各命令フィールドの表からなる。エントリの2を底とする対数値は、その命令フィールドのコンパクト化された幅に等しい。コンパクト化された命令フィールド幅の合計は、コンパクト化された命令の幅に等しい。ユーザは、圧縮率を定義することで、ビューのサイズに制約を課すことができる。ビュー生成ツールVGの目的は、この圧縮率および命令セットが与えられたときに、最適なビューを定義することである。最適なビューとは、供給されているセットから最大の命令数をマッピングすることができるビューとして定義される。
最小ビューを作成した後に、供給されたセットから1つの命令を除去して、最小ビューを作成しなおす。次いで、次の命令を除去してから、再度、最小ビューを作成しなおす。命令を除去すると、普通は最小ビューが小さくなる。命令を除去して、最小ビューを再計算する処理は、最小ビューのサイズが、ユーザが意図している目標に達するまで続けられる。次に、第1のビューに収まらない命令から始めて、次のビューを生成することができる。この処理での主な課題は、「どの命令を除去候補とするか」である。
この課題は、各命令のコスト基準を計算して、最も高いコストであるものを除去対象として選択する、ということで解決することができる。アルゴリズムの目的は、最小ビューのビット数を減らすことなので、コストもビット数で表す。最小ビューに必要なビット量は、このビューに収まる全ての命令の結果である。この命令は、表の異なるエントリとなる、それぞれ異なる命令フィールド値を有する。表における異なるエントリの量がビット数を定義する。こうして、ある命令の命令フィールドに応じて、全ての他の命令の命令フィールドとの関連において、ある命令のコストは高くも低くもなる。
定義上は、全ての命令のコストは、最小ビューに必要なビット量に等しくなるはずである。1つの命令のコストは、それが含む全命令フィールドのコストの合計に等しくなるはずである。1つの命令フィールドのコストは、該命令フィールドの値の、全ての命令のフィールド値における頻度に従って決まる。フィールドの値が稀である場合(頻度が低い場合)には、このフィールドの表のエントリを利用する命令が少ないことなので、コストも高くなる。フィールド値がよく利用される場合(頻度が高い場合)には、より多くの他の命令がこの表のエントリを利用するということなので、コストが低くなる。これら2つの場合の1つの表のエントリのコストは等しいが、よく利用される値の場合、コストは数多くの命令により分担負担され、稀な値の場合には、コストは少ない命令で分担負担されることになるので、1つの命令に対するコストが高くなる。
定義上は、1つの命令フィールドの、全ての命令におけるコストは、その命令フィールドの幅に等しい。1つの命令フィールド値のコストが、頻度の繰り返し(reciproke)に応じて決まる場合、全ての命令にわたり1つの命令フィールドついて一定である乗数で補償する必要がある。
公式で表すと、NDifを、全ての命令における1つの命令フィールドifの異なる値の数として、fifvを、全ての命令における命令フィールド値ifvの頻度として、bifを命令フィールドifのビット数として、costifvを命令フィールド値ifvのコストとする場合、Costifv=bif/fifv・NDifとなる。
命令フィールド値コスト関数は、以下の表1A、1Bに一例が示されている。
Figure 2013504115
Figure 2013504115
この例は、11個の命令(insr_nr)からなる小さなプログラムに基づいている。第1の表1Aは、11個の命令についての命令フィールド値を示している。第2の表1Bは、列である表のエントリに示されるもののうちどの命令フィールド値(instr_fld_vl)を表に格納するかを示している。第2の表も、命令フィールド値の頻度(freq2)を示している(つまり、そのエントリをどのくらいの頻度でプログラムが利用しているか、を示している)。第1の表の頻度の列(freq1)は、第2の表の「表のエントリ」列の命令フィールド値(instr_fld_vl)の頻度(freq2)の検索結果である。頻度(freq2)では、異なるエントリの数およびフィールド幅、各命令フィールドのコストを、第1の表の「コスト」の列が示すように計算することができる。この場合、少なくとも一度生じる異なるエントリの数NDは4となる。8つの可能性のある命令フィールド値があることから、フィールド幅(つまり、そのフィールドのビット数)は3である。第1の表の一番下の行は、全ての命令フィールドコストの合計を示している。定義上は、これがフィールド幅に等しくなる。
容易に理解されるだろうように、低い頻度の命令フィールド値は、高い頻度の値よりもコストに対して貢献度が高い。これら表は、さらに、各表のエントリのコストが等しい、ということも示している。表のエントリ5は、命令3と命令6とに、計2回生じている。両方のケースで、コストは0.375であるので、エントリコストは、2*0.375=0.75となる。表のエントリ2は、命令5、8、および9に、計3度生じている。命令1つについてコストが0.25なので、エントリコストは、3*0.25=0.75となり、エントリ5と等しくなる。
本発明によれば、ビューの選択は、基本ブロックレベルでは生じず、命令レベルで生じる。従って、次のビューを各命令に対して別個に選択することができる。命令に基づくビューの選択を導入することで、ビューの生成における検索スペースはより広くなる。以前には、プログラマがどのプログラムをどのビューに適用するか、について明確な構想を持つ必要があったが、今ではプログラマはビューに煩わされなくなる。これにより、プロセッサ設計者は、「論理的な」ビューを生成する務めから解放される。ビューの生成は、本発明の第1態様による方法で自動に実行することができる。
命令コンパクションスキームセットを生成すると、プログラマブルプロセッサのプログラムは、図6に示すようにコンパクト化することができる。
通常、プログラムは1を超える数のモジュールから形成されている。モジュール1つについて、アセンブリ(.s)ファイル165a,…,165nがスケジューラにより生成される。これらのアセンブリファイルは、アセンブラ170によって、ELFフォーマットの再配置可能オブジェクトファイル175a,…,175nに変換される。アセンブラ170は、命令の命令フィールド値を定義するために、プロセッサ記述105とAPEX TSIFデータ構造125とを必要とする。アセンブラ170の出力は、即値フィールドを除いて、全ての命令フィールドの固定値を含んでいる。即値フィールドは、固定値およびシンボルを両方含んでよい。これらシンボルは、分岐対象またはデータオブジェクトを参照することができる。
リンカ180は、アセンブラが生成した再配置可能オブジェクトファイル175a,…,175nを1つの再配置可能オブジェクトファイル185に統合する。即値フィールドの再配置可能シンボルは、シンボルにとどまり、シンボルの定義のみが適合されてよい。
コンパクションツール190は、コンパクト化されていない、再配置可能オブジェクトファイル185の形式のプログラムを、コンパクト化されたプログラムへと変換する。コンパクト化されていないプログラム185は、EFL再配置可能オブジェクトファイルの形式でデコンパクションツール190に入る。ツールコンパクション190は、ビュー定義および完全な命令フォーマットを、APEXによって取得する。APEXは、プロセッサ記述ファイル105から情報を収集して、ビュー記述ファイルを形成する。ビュー生成ツールVG同様に、コンパクションツール190は、再配置可能シンボルをそれぞれ個々の値として扱う必要がある。一実施形態では、互いに異なるシンボルは常に、互いに異なる値を参照する。好適な実施形態では、コンパクションツール190は、再配置前処理(pre relocation)を適用して、同じ値を有するシンボルを識別する。一般的には、これによりプログラムにおける圧縮率が向上する。
プログラムをコンパクト化する間、コンパクションツール190は、シンボルを、あたかも通常の値のように表に配置しておく。ツール190がこれをサポートする。コンパクションプロセスは(1)ビューidと命令ごとの(コンパクト化された)命令値とを含むコンパクト化されたプログラム195、(2)該プログラムについてのビューの表の内容197、という2つの結果を生じて、終了する。
ビューの表197は再配置可能シンボルを含んでいるが、コンパクト化された表195はこれを含まない。
コンパクト化されたプログラム195は、プログラムメモリマップに配置される。この例は続きに示される。結果は、ELFオブジェクトファイルに変換されるべきである。ビューの表の内容もこのオブジェクトファイルに配置されるべきである。
リンカ200は、表のコンテンツのシンボルの再配置を実行して、オブジェクトファイルをバイナリ表現205に転じる(transfer)。
プログラマブルプロセッサが命令をコンパクト化するために利用するビューを識別する手助けをするために、コンパクト化された命令データは、ビュー識別データを有すると好適である。2つの例を以下に示す。
第1の実施形態では、余分のビットをプログラムメモリワードの各セグメントに追加する。1つのセグメントは最小ビューのサイズを有している。追加するビット数は、同じサイズのビューの数に応じて決まる。1つのビット(S)は、そのセグメントが命令の開始(S=1)であるか否かを示している。コンパクト化された命令の長さは、セグメントシーケンスのこれら開始ビットに基づいて決定することができる。同じサイズの複数のビューがソフトウェアのコンパクションに利用される場合には、余分なビットを追加して、正しいビューidを識別する。例えばあるプロセッサが、完全なビューサイズの1/8のサイズを有する最小ビューを持っており、最大の2つのビューが同じサイズである場合を想定する。この場合、2つのビットをセグメント1つについて追加する必要がある。必要となるプログラムメモリビットの総数は、PMsize*8*2=16*PMsizeとなり、ここでPMsizeは、そのプログラムメモリ内のメモリワード数である。この構成では、情報からビュー情報を入手可能なので、もはやプログラムカウンタがビュー情報を含む必要がない。その代わりに、プログラムカウンタは、プログラムメモリの開始セグメントアドレスに等しくなる。
このことを以下の表を参照して説明する。表に示す例では、最小ビューが、1/4の圧縮率を有しており、最大の2つのビューが同じサイズである。さらに、2つのビットS、Vがセグメント1つについて追加されている。表2は、11個の命令のシーケンスの一部の命令情報を示している。第1の列がシーケンスの命令の位置を示しており、第2の列が、命令に対応するビューを示しており、第3の列が、命令の長さを示しており、第4の列がビューのビットを示している。この例では、プロセッサは、完全なビューを含む6つのビュー(0,…,5)を促進している。ビュー3と4とが両方とも同じ長さ(3セグメント)であり、さらに、ビュー1と5とが同じ長さ(1セグメント)である。1つの命令の長さは、開始セグメントビットから(ビュー0と2について)導出することができ、この長さによりビューが直接決定される。この長さの次の1、3,4および5のビューについては、ビューを決定するためにはビューのビットが必要となる。
Figure 2013504115
表3は、プログラムメモリにおける命令の配置法を示している。各セグメントは、そのセグメントが新たな命令(1)の開始部であるか、開始部が前のセグメントにあるような命令の一部を含んでいるか、を示す開始セグメントビットSを有している。命令の長さでこの情報が示されていない場合を想定して、各セグメントは、開始セグメントビットの次に、命令のビューを示すビューのビットVを有している。ビューのビットは、開始セグメントについてのみ必要である。1セグメントよりも長い命令については、ビューの情報を、各セグメントのビューのビットで分割することができる。これは、2を超える数のビューが同じ長さである場合に有用である。
Figure 2013504115
図7は、本発明によるプログラマブルプロセッサを概略する。この図に示すプログラマブルプロセッサは、上述した命令シーケンスを格納するプログラムメモリ10を含む。コンパクト化された命令データは少なくとも、N個のメモリワードセグメントの第1のコードワードとして、第1の命令コンパクションスキームによりコンパクト化された第1の命令と、M個のメモリワードセグメントの第2のコードワードとして、第2の命令コンパクションスキームによりコンパクト化された第2の命令とを含み、NとMとは、互いに異なる、1以上の整数である。この場合、コンパクト化された命令データは、6つの異なるフォーマットでコンパクト化された命令を含む。
プログラマブルプロセッサはさらに、命令復号器20、少なくとも1つのレジスタファイル40、および、レジスタファイル40に連結された少なくとも1つの発行スロット50を含む。さらにプログラマブルプロセッサは、データ選択エレメント30を含む。データ選択エレメント30、レジスタファイル40、および、少なくとも1つの発行スロット50は、命令復号器20によって制御される。プログラマブルプロセッサは、これより多い数の発行スロットを含むこともでき、この場合、各発行スロットが複数の機能ユニットを含んでよい。格納エレメント(like storage elements)、処理エレメント、および、選択エレメント等のさらなるデータ処理エレメントが存在していてもよい。
プログラマブルプロセッサはさらに、命令拡張器80を含む。命令拡張器80は、プログラムメモリ10からフェッチしたコンパクト化された命令データそれぞれに利用される命令コンパクションスキームを識別するコンパクションスキーム識別器17を含む。命令拡張器80は、命令復号器20が生成するプログラムカウンタPCを受信するための入力を有する。プログラマブルプロセッサはさらに、プログラムメモリワードの少なくとも1つのセグメントを一時格納するための格納設備14と、プログラムメモリ10および格納設備14からコンパクト化された命令データを選択するために選択設備(マルチプレクサユニット)27とを含む。選択された、コンパクト化された命令は、命令拡張ユニット87により拡張される。命令拡張器80はさらに、プログラムカウンタPCに呼応して、プログラムメモリ10のアドレスADを生成する制御設備85を含む。制御設備85はさらに、信号Selで選択設備27を制御して、読み出しイネーブル信号Renで格納設備14を制御する。
本発明によるプログラマブルプロセッサでは、好適には、ビューそれぞれの任意の(コンパクト化された)命令が1つのメモリワードの任意のセグメントから始められてよい。このような構成は、プログラムメモリと命令拡張ユニット87との間に格納エレメント14を配置する構成により達成される。こうすることで、2つの連続したメモリワードにまたがり格納される命令をサポートすることができるようになる。
図8は、命令拡張器80を含む図7のプログラマブルプロセッサの第1の実施形態の一部をより詳しく示す図である。
第1の実施形態では、プログラムメモリ10が、セグメント0、セグメント1、セグメント2、およびセグメント3のプログラムデータを、出力P0、P1、P2、およびP3でそれぞれ提供する。格納エレメント14は、プログラムメモリ10が提供するプログラムデータの一部を遅延させる。この場合、格納エレメント14は、プログラムメモリ10の出力P3、P2、およびP1からそれぞれ遅延されたプログラムデータR2、R1、およびR0を提供する。マルチプレクサユニット27は、プログラムメモリ10および格納エレメント14が提供するプログラムデータの一部を、制御を受けながら選択する。本実施形態では、マルチプレクサユニット27は、複数のマルチプレクサモジュール27a、27b、27c、27dを含む。マルチプレクサモジュール27a、27b、27c、27dはそれぞれ、選択信号sel0、sel1、sel2、sel3により制御される。マルチプレクサモジュール27a、27b、27c、27dはそれぞれ、プログラムメモリ10の出力P0、P1、P2、P3に連結される。第1のマルチプレクサモジュール27aは、追加として格納エレメント14の出力R0、R1、R2に連結される。第2のマルチプレクサモジュール27bは、追加として格納エレメント14の出力R1およびR2に連結される。第3のマルチプレクサモジュール27cは、追加として格納エレメント14の出力R2に連結される。
本実施形態では、コンパクションスキーム識別器17は、プログラムメモリ10に直接連結される。
命令拡張ユニット87の入力は、(コンパクト化された)命令を含む1以上のセグメントにより形成される。この命令は、プログラムメモリ10のある位置に格納される。1つのプログラムメモリワードは、n個(ここでは4個の)セグメントを含む。命令は、1以上のセグメントの長さであってよく、1つの命令のセグメントは、異なる(しかし後続する)プログラムメモリワードであってよい。マルチプレクサユニット27は、命令拡張ユニット87が、プログラムメモリワードから直接(つまり、レジスタを介さずに)読み出すことを可能とする。プログラムメモリワードをまたぐ命令(program memory word crossing instructions)をサポートするためには、レジスタ14が、前のメモリワードを格納しておくべきである。最大命令長がnセグメントである場合には、n−1個のセグメントのみを格納する必要がある。
図9に示すように、出力O0..On−2が、命令拡張ユニット87の様々な命令拡張モジュール871−878に接続されている。O0は、全ての命令拡張モジュールにより利用され、O1..On−2は、ビューサイズによりそれが必要な場合にのみ接続される。On−1は、コンパクト化されていない命令のみに利用される。
命令拡張モジュール871−878それぞれは、図10の命令拡張モジュール873の例に示すように、複数の命令デコンパクションセグメント873a,…,873fを含む。ここでは、デコンパクションモジュール873は、コンパクト化されたオペコードであるopcode−sを、デコンパクト化されたオペコードであるopcode−wに変換するオペコードデコンパクションセグメント873aと、コンパクト化された即値であるimmediate−sをデコンパクト化された即値であるimmediate−wに変換する即値デコンパクションセグメント873bと、コンパクト化された書き込みポート選択wp_select−sを、デコンパクト化されたwp_select−wに変換する書き込みポート選択デコンパクションセグメント873cと、音波クトかされたバス選択「bus_select−s」を、デコンパクト化された「bus_select−w」にデコンパクト化するバス選択デコンパクションセグメント873dと、コンパクト化された書き込みポートインデックス「wp_index−s」をデコンパクト化された「wp_index−w」にデコンパクト化する書き込みポートインデックスデコンパクションセグメント873eと、コンパクト化された読み出しポートインデックス「rp_index−s」をデコンパクト化された「rp_index−w」にデコンパクト化する読み出しポートインデックスデコンパクションセグメント873fとを含む。
オペコードデコンパクションセグメント873a、バス選択デコンパクションセグメント873d、および書き込みポート選択デコンパクションセグメント873eは、例えばルックアップテーブル(LUT)により実装される。書き込みポートインデックスデコンパクションセグメント873eおよび読み出しポートインデックスデコンパクションセグメント873fは、0またはより多くの「0」ビットを命令フィールドの最上位側に追加するゼロ拡張セグメントにより実装されてよい。即値デコンパクションセグメント873bは、命令のオペコードに応じて符号拡張またはゼロ拡張(sign extension or zero extension)を実行する。
レジスタ14内のレジスタセグメントRn−2..R0のみが、2つのメモリワードで分割される命令のlsbセグメントのみを格納する。
最小ビューによる命令のサイズが1つのセグメントのサイズに等しいことから、これらの命令は常に、1つのプログラムメモリワードに完全に格納されることになる。従って、最小ビューのマルチプレクサモジュール27dのみが、プログラムメモリ10の出力に直接連結される入力を有することになる。2以上のセグメントの命令サイズを有するビューのマルチプレクサ27a、27b、27cも、レジスタ14からの入力を受ける。これは、これらの命令が、2つのプログラムメモリワードにより分割されうるという事実に起因している。マルチプレクサのレジスタセグメントの入力数は、命令セグメントから1を差し引いた数に等しくなる。
制御設備85が提供するマルチプレクサモジュール27a、27b、27c、27d用の選択信号sel0,…,selnは、それらの前の値と、前の命令のプログラムメモリ・イネーブル信号(つまり、プログラムメモリ出力が新たなものか、既に前に利用されたものか)とに応じて決まる。ある命令の長さによって、出力O0,…Onのいずれが実際に利用されるかが決定される。この実施形態の利点は、選択信号を、命令を利用する前のサイクルにおいて予め計算しておくことができる点である。この、予め計算するサイクルにおいて、前の値をレジスタ14から読み出しておくことができ、プログラムメモリ・イネーブル信号は、プログラムメモリ10を制御する実際の信号に等しい。現在の命令がジャンプ命令に見える場合には、次の命令のPCのLSBを、セレクタの前の値として採用することができる。予め計算する処理によって、sel0,…,seln信号のパイプラインレジスタを利用して、命令選択のタイミングを向上させることができるようになる。
図11のフローチャートに示すように、命令をプログラムメモリ10からフェッチする。
第1のステップS1で、メモリアドレスADを例えば値0に初期化する。第2のステップS2で、セグメントカウンタSGを、このケースでは0に初期化する。そして第3のステップS3では、命令開始アドレスBGを初期化する。命令開始アドレスは、メモリアドレスコンポーネントADとセグメントコンポーネントSGとからなる。各メモリワードがn個のセグメントを含む場合には、命令開始アドレスは、BG=n*AD+SGとして計算される。ステップS4で、値SGが最大値(例えばn―1)に等しいかを検証する。検証結果が肯定的である場合には、ステップS5でメモリアドレスADを1増分して、ステップS6でセグメント数を0にリセットする。検証結果が否定的である場合には、ステップS7でセグメント数を1増分する。ステップS6またはステップS7の後は、利用可能な場合、ステップS8で、セグメントSを、新たなコンパクト化された命令から始まっているかを判断するべく、検証する。検証結果が否定的である場合には、命令フローはステップS4に戻る。検証結果が肯定的である場合には、ステップS9で、L=n*AD+SG−BGに従って前の命令の長さを計算して、ステップS10で、BGの値をBG=n*AD+SGに従って再度計算する。そしてプログラムフローはステップS4に戻る。長さLから、および必要な場合には1以上のさらなるビューのビットVから、命令をコンパクト化する際の規範となるビュー、および、どのビュー復号器が利用可能かを判断する。
以下に、上述した表3のプログラムによってシークエンシングが如何に行われるかを説明する。命令4が命令9へのジャンプを含んでいる場合を想定する。プログラムはPC=0から始まる。プログラムメモリアドレス0を読み出し、コンパクションスキーム識別器17は、プログラムメモリワード内の4つのセグメントの開始セグメントビットSを識別する。これら4つの開始セグメントビットから、コンパクションスキーム識別器17は、このワードが2つの命令(第1の命令(0)はセグメント0から始まり、1セグメントの長さであり、第2の命令(1)は、セグメント1から始まり、3または4セグメントの長さである)を含むと判断する。セグメント0のビューのビットVは「0」なので、命令0はビュー1にマッピングされる。これは、ビュー1命令拡張ユニットを利用してデコンパクト化され、後で実行することができる。命令1は、次のプログラムメモリワードを取得するために格納する必要がある。アドレス1の次のプログラムメモリワードが利用可能となると、コンパクションスキーム識別器17は、このワードのセグメント0が「1」である開始セグメントビットSを含むことが分かるようになる。これは、命令1が、3セグメント長を有しており、デコンパクト化して、復号化および実行することができることを意味している。他のセグメント開始ビットは、命令2について3の長さを示している。命令2および3は格納する必要があり、アドレス2のプログラムメモリワードを取得することができる。このワードを受信すると、命令2をデコンパクト化して、復号化および実行して、命令4およびプログラムメモリワード内のその他の情報を格納して、次のプログラムメモリワードを読み出すことができる。命令4(命令9へのジャンプ)が実行されると、プログラムカウンタに命令9の開始セグメントアドレスをロードする。プログラムメモリアドレスをアドレス7に設定して、命令9を含むプログラムメモリワードを読み出す。次のサイクルで、完全なビューにマッピングされているように見受けられる命令9を実行する。
原則として、コードコンパクションスキームを識別するためのこの解決法は、余分なストールサイクルまたは余分の分岐遅延を導入しない。分岐対象が2つのプログラムメモリワードにより分割される場合、分岐対象命令を取得するためには2つのプログラムメモリワードが読み出されねばならないことから、ストールサイクルが導入される。しかし、これは、コンパクションスキーム/ビュー情報を取得する方法とは関連しない。この解決法に対する重要なパスは、ビュー情報および開始セグメントを決定して、命令およびデコンパクションを選択するための正しいセグメントを選択するシーケンスを全て、1つのクロックサイクルで行う必要があることから、長くかかることが予期される。潜在的には、余分のパイプライン段階が、このパスに挿入され、タイミングゴールを達成する必要がある。
別の実施形態では、ビュー情報は、次のビューid(nxt_vw_ID)フィールドを各(コンパクト化された)命令に加えることで識別される。この一例を、表4および5に示す。このフィールドは、その長さに関わらず、例えば各命令のlsb側という各命令の所定の位置で利用可能である。このフィールドの幅は、ビューの数のlog2に等しい。プログラムをシークエンシングする場合、前の命令の次のビューidおよび現在の命令の位置(現在のPCに含まれている)が、このプログラムメモリの次の命令の位置を決定する。8つのビューおよび1/8の最大圧縮率を有するプロセッサについては、次のビューidフィールドが3ビット幅あれば十分である。プログラムが3という圧縮率でコンパクト化された場合(全ての命令で、1つの命令の圧縮を平均化したとき)、プログラムメモリ1つについての命令の平均数は、3になる。すると、次のビューidを識別するために必要な全ビット数は、PMsize*3*3=9*PMsizeとなる。これは、開始セグメントビットを利用する方法における16*PMsizeよりもかなり少ない。
Figure 2013504115
Figure 2013504115
表4は、一例であるプログラムにおける命令シーケンスを示しており、表5は、この例のプログラムがプログラムメモリにどのように格納されるかを示しており、ここではコンパクト化されている命令が、上述したように、次のビューidフィールド(nxt_vw_ID)を含んでいる。命令の表4は、ビューおよび長さの列の他に、次の命令のview_idを示す余分の列も含んでいる。
図12は、本発明によるプログラマブルプロセッサの第2の実施形態の一部を示しており、これは、上記している表5に示すようなプログラムメモリに格納されているコンパクト化されたプログラムを処理するよう構成されている。
この第2の実施形態は、第1の実施形態と、コンパクションスキーム識別器17が選択設備27の出力に連結されている点が異なる。
命令は、図13のフローチャートに示すように、プログラムメモリ10からフェッチすることができる。
第1のステップS20でメモリワードをプログラムメモリ10から読み出す。第2のステップS21で、コンパクションスキーム識別器17が、次の命令に利用するコンパクションスキームを識別する。ここで、第1の命令のコンパクションスキームが既知であり、メモリワード内の所定の位置に配置されていることを前提とする。第3のステップS22では、次の命令の長さを表から読み出して、ステップS23で、次の命令の最終アドレスを計算する。
最終アドレスは、メモリアドレスコンポーネントADとセグメントコンポーネントSGとからなる。ステップS24で、最終アドレスが次のプログラムワードにあるかを判断する。判断結果が否定的である場合には、アドレスカウンタADを現在の値に維持して、ステップS27で、関連するセグメントを、プログラマブルプロセッサがデコンパクト化して実行する命令のコンパクト化されたデータとして選択する。ステップS24で、現在のコンパクト化されている命令の最終アドレスが実際は次のプログラムワードであると判断されると、現在のプログラムワード内の現在のコンパクト化されている命令のセグメントを一時格納設備に格納して、アドレスADを増分する。
プログラムカウンタは、セグメントアドレス、プログラムメモリアドレス、および現在の命令のビューidからなる。プログラム実行開始時(命令0の、およびPCからのPC点)には、コンパクションスキーム識別器17は、第1の命令がビュー1命令(つまり、第1のビューによりコンパクションスキームに従ってコンパクションされる命令のこと)であることを知っている。ハードウェアルックアップテーブルは、ビュー1命令の長さが1セグメントであることを示している。プログラムメモリワードが出力で利用可能な場合、命令0の次のフィールドidフィールドを読み出し、これにより値3となる。長さルックアップテーブルをインデックス化することで、ビュー3にマッピングされている次の命令の長さが3セグメントであることがコンパクションスキーム識別器17により判断される。この情報は、プログラムメモリ10の読み出しを、1クロックサイクル分保持することができることを示している(なぜなら、命令1が既に現在のプログラムメモリ出力で完全に利用可能になっているからである)。拡張命令1において、プログラムメモリアドレスを1に設定することで、命令2および3の一部を含むプログラムメモリワードを読み出す。命令2を拡張して、さらに処理する場合には、命令2の次のビューidフィールドがビュー2を示しており、つまり、長さが2の命令であることから、制御設備85は、次のプログラムメモリアドレスを読み出す決定を行う。開始セグメントはセグメント3にあり、これは、この次の命令が、次のプログラムメモリワードに拡張されることを示唆している。命令4は、プログラムメモリアドレス7、セグメント3に位置している命令9へのジャンクを含んでいる。ジャンプ命令は、命令9のビューid2を含むPCを、この命令のアドレスに加えて配信する。この情報により、制御設備85は、命令9をデコンパクト化してさらに実行するためには、先ずは2つのプログラムメモリワードを読み出す必要があると判断する。分岐対象9を2つのプログラムメモリワードで分割することにより、分岐対象にジャンプするときにストールサイクルが生じる。
条件付の分岐の場合には、分岐命令は、次の命令のビューIDのインディケーションを含んでおり、さらに、分岐アドレスが、セグメントアドレス、プログラムメモリアドレスおよび、条件付の分岐先であるアドレスにおける命令のビューidを含む。
所望の場合(例えばクリティカルループの場合)には、このスタールサイクルは、プログラムメモリワードのセグメント0に分岐対象を置き、2つのメモリワードで分割されないようにすることで回避することができる。これは、分岐対象命令が2つのプログラムメモリワードで分割される場合にのみ必要な処理である。対象がセグメント0から始まらないが、メモリワードに依然として完全に収まる長さである場合には、置き換える必要がない。
セグメント0に分岐対象を配置することにより、ストールサイクルは除去されるが、別の問題が生じる。つまり、メモリマップにギャップが生じる。分岐対象がジャンプによってではなくて、前の命令からのシークエンシングにより達成される場合、このギャップはパスする必要がある。この問題を回避するためには5つ解決法がある。1つ目は、メモリギャップを示すために、次のビューidフィールド(nxt_vw_ID)をリザーブするというものである。ある命令の次のビューフィールドがメモリギャップを示している場合、次の命令は、次のプログラムメモリワードのセグメント0から読み出しを行う必要がある。この命令のビューidは、ギャップの第1のセグメントの次のビューidフィールドに示されている。2つ目は、最小のビューの「不可能」命令値を、ギャップの第1のセグメントに挿入するというものである。「不可能な」命令値とは、コンパイラが生成できない命令値のことである。一例としては、「非NOP」入力を有するNOP命令が挙げられる。プログラマブルプロセッサは、この命令の発生をモニタする命令セレクタを有している。検知されると、不可能な命令を有するセグメントではなくて、次のプログラムメモリワードのセグメント0を選択する。分岐対象のビューidは、追加される不可能な命令の次のビューidにより識別される。3つ目の方法は、「非NOP」入力を有するNOP命令等の、コンパイラが生成できない完全なビューの「不可能な」命令値を、以下のように利用する、というものである。命令フィールドをリシャッフルして、関連する命令ビットを、完全な命令のlsbセグメントに置く。ギャップの第1のセグメントを、完全な命令のこのlsbセグメントで充填する。このセグメントの次のビューidは、位置合わせされた分岐対象のビューidを示している。ギャップの前の最後の命令は、完全なビューidに似た次のビューidを有している。この完全なビューidに基づいて、制御設備85は次のプログラムメモリワードをロードすることを決める。特別な命令が検知された場合も、制御設備85は、次の位置合わせされた分岐対象にジャンプすると決める。表7にこの解決法を示す。命令4の後には、プログラムメモリは2つのセグメントのギャップを含む。ギャップの第1のセグメントには、「不可能な」命令(IMP)のlsbセグメントを充填して、ギャップの第2のセグメントは、読み出されないので、任意の値(X)を満たしたままにしておいてよい。
Figure 2013504115
Figure 2013504115
4つ目の解決法は、全てのクリティカルな分岐対象を最小ビューに収める、というものである。これは、これらのクリティカルな分岐対象で、圧縮プロセスを開始して、表をこれらの命令フィールド値で満たすことにより達成することができる。5つ目は、プログラムメモリワード1つについて1つの余分なビットをリザーブする、というものである。このビットが「1」である場合、プログラムメモリワードのmsbセグメントが、ギャップの開始点を示す。ギャップの前の最後の命令が、位置合わせされた分岐対象のビューidを含む。
上で提示した5つの解決法は、実行されるプログラムのタイミング、リンカの複雑度、プログラムのコンパクション率、および、ハードウェアの複雑度および(クリティカルな)タイミングパスに影響する場合がある(表8参照)。当業者であれば、これら係数の重みに基づいて、これらの解決法からいずれかを選択することができる旨を理解するだろう。これら係数の影響を、以下の表に概略する。第1列は、上述した解決法を示しており、第2列が、その解決法の実行可能性を示している。この表で、「−」「0」および「+」というシンボルはそれぞれ、おそらく実行可能性がない、いつも実行可能であるわけではない、および、実行可能性がある、ことを示している。第3列は、コンパクション率に対する影響を示す。「−」は、コンパクション率が低くなったことを示す。「0」は、コンパクション率に実質的な影響がないことを示す。最終列は、実装に必要なゲート数の観点から、ハードウェア複雑性に対する影響を示しており、「−」が比較的複雑なハードウェア実装を示しており、「++」は、比較的低い複雑度のハードウェア実装を示している。一般的には、より複雑なハードウェア実装により、組み合わせ経路(combinational path)が長くなり、タイミングは遅くなる。
Figure 2013504115
解決法1は、エレガントな解決法であるが、フィールドidのコストによって、コンパクション率が低減する。解決法は、いつも実行可能であるわけではない。特別な「不可能な」命令は、最小ビューでは利用できない。加えて、プログラムメモリ・イネーブル信号へのタイミングパスが比較的長くなる。解決法3には、これらの問題はないので、好適である。しかし、命令フィールドをリシャッフルする必要があるという欠点はある。解決法4は、最小ビューが最適ではない表のエントリを有しているために、潜在的にコンパクション率が低減する。解決法5は、コンパクション率の低減度は低いが、解決法3を越えるような利点はない。
上述を鑑みると、完全なビューに特別な命令を利用する解決法3が好ましい。
全ての分岐対象を位置合わせすると、プログラムのコンパクション率が大幅に低減する。これを回避するためには、タイム・クリティカルな分岐対象のみを、位置合わせされた境界に配置するべきである。一般的には、タイム・クリティカルな分岐対象は、タイム・クリティカルなループの一部である。ユーザまたはスケジューラが、これらの位置を示す必要がある。アセンブラは、この情報を(ELF)オブジェクトファイルに含み、コンパクションツール190(図6)が、どの命令が位置合わせされたアドレスに位置しているかを知ることができるようにするべきである。
以下の表9は、図12のアーキテクチャのプログラム実行例を示す。この例では、プログラムメモリ幅が4セグメントに等しい。第1列(nr)は、デコンパクト化する命令を示す。第2列(部分的)は、プログラムメモリ10のmsbセグメントが、次のプログラムメモリワードに続く命令の一部である場合に、「1」を含む。列P3からP0までは、プログラムメモリ10の出力を示す。各列はセグメントを表している。数は、命令数を示している。コンパクト化された命令0は、1セグメントの幅を有するように見え、命令1は2セグメント幅であり、といった具合である。列R2、R1およびR0は、レジスタの出力に存在する命令(またはそのセグメント)数を表している。列MおよびRは、プログラムメモリのアドレスADが、増分されたか、および/または、レジスタを更新する必要があるか、を示す。出力セグメント列O3,…,O0は、メモリセグメントP0,…,P3のどれから、または、レジスタセグメントR0,…,R3のどれから、命令セグメントを読み出し、レジスタ入力R2、R1およびR0は、プログラムメモリ10関連のデータのどの部分をレジスタ14に格納するかを示す。レジスタセグメントR0、R1、R2は常に、自身のデータを同じプログラムメモリセグメントP1、P2、P3からそれぞれ取得する点に留意されたい。列MSは、マルチプレクサ27a,…,27dの選択値を示している。全てのマルチプレクサを、この選択値で制御することができるとよい。
この例では、レジスタR0、R1、およびR2は、必要な場合のみ書き込まれる。列O3,…,O0は、マルチプレクサが常にある値を、この値が利用されない場合であっても、選択することを示している。逆マークのエントリのみが実際には命令拡張ユニット87により利用されている。
Figure 2013504115
命令20は、2つのメモリワードで分割されるジャンプ対象である。これによりストールサイクルへ導かれる。
図14は、本発明によるプログラマブルプロセッサの第2の実施形態を示す。この実施形態は、レジスタ14が、入力マルチプレクサユニット16を介してプログラムメモリ10に連結されているシフトレジスタ15に置き換わった点で、第1の実施形態と異なっている。本実施形態では、入力マルチプレクサユニット15は、2つの入力マルチプレクサモジュール16a、16bを含む。この図では、シフトレジスタ15も、S2、S1、およびS0と示されている。シフトレジスタ15の入力は、2つの入力マルチプレクサ16a、16bに接続されている。シフトレジスタ15の1つの入力は、プログラムメモリ10のセグメントP3の出力により形成されている。他の入力も、これもlsbセグメントから始まるシフトレジスタに接続されている。余分な分岐遅延を避けるために、分岐対象は、単一のプログラムメモリワードに配置されるべきである。分岐対象がプログラムメモリ10の出力で利用可能な場合には、出力マルチプレクサユニット27によって供給され、命令拡張ユニット87の適切な命令拡張モジュールにより拡張される。そしてプログラムメモリワードの残り(たった今復号化した命令は除く)を、ともに15と称されるシフトレジスタ(S2、S1、およびS0)にシフトして、次の命令が、シフトレジスタのlsb(lsセグメント)から始まるようにする。次の命令は、レジスタ15の、lsb側から読み出されてよい。シフトレジスタ15で命令の一部のみが利用可能である場合には、残りの部分はプログラムメモリ10の出力から読み出される。シフトマルチプレクサ16a、16bは、プログラムメモリの適切なセグメントを選択するために再利用することができる。
この実施形態の命令フェッチシーケンスは、プログラマブルプロセッサの第1の実施形態と実質的に同じである。出力マルチプレクサのセレクタ信号は、タイミングパスを低減させるためにパイプライン化することができる。
以下の表10は、デバイスのオペレーションを示している。
第1列のnr数は、プログラムカウンタ値PCに等しい。
第2列は、現在のPMワードのP3セグメントが、次のPMワードに続く命令の一部である場合に、「1」を含む。
第3列は、アドレス指定されているプログラムメモリのメモリアドレスADを示す。
P0、P1、P2、P3は、アドレス指定されているメモリワードの各セグメントの命令idを示す。
S0、S1、S2は、そこから命令データをフェッチしてくる、プログラムメモリ10のセグメントを示す。
Mは、次のサイクルでメモリアドレスADを増分するかを示す。
Rは、レジスタ15が、プログラムメモリ10からデータを受けるためにイネーブルされるかを示す。
O0,…,O3は、それぞれ、プログラムメモリセグメントP0、P1、P2、P3およびレジスタセグメントのtS0、S1、S2のいずれをマルチプレクサモジュール27a,…,27dの出力で見ることができるかを示す。
以下の表を参照して示す例から、以下のことが観察される。
この表の第1のラインには、命令拡張器80が値0のプログラムカウンタを受信して、この値がプログラムメモリアドレスと想定される旨が示されている。このメモリアドレスでは、プログラムメモリは、第1のセグメントに、第1の命令ワード(0)用にコンパクト化されたデータを含み、第2および第3のセグメントに、第2の命令ワード(1)用にコンパクト化されたデータを含み、第4のセグメントに、第3の命令ワード(2)用にコンパクト化されたデータの一部を含む。コンパクト化された第1の命令ワードを含む1つのセグメントP0を選択して、出力O0を介して、命令拡張ユニット87に提供する。このケースでは、アドレス指定されるメモリワードが、完全にコンパクト化された第2の命令をセグメントP1、P2に含み、プログラムカウンタPCが増えても、プログラムメモリアドレスADが増えない。そうではなくて、第2の命令(1)を含む2つのセグメントP1、P2を選択して、出力O0およびO1をそれぞれ介して命令拡張ユニット87に提供する。同じサイクルで、出力セグメントP3を、レジスタ15のセグメントS0に読み出す。メモリアドレス0はコンパクト化された次の命令(2)の一部のみを有しているので、制御信号Mは、次のサイクルでメモリアドレスADを増やす。従って、次のサイクルでは、メモリアドレス1をアドレス指定して、命令2用の命令データを、レジスタセグメントS0を選択することで出力O0、O1、O2、O3、および、プログラムメモリセグメントP0、P1、P2それぞれに提供する。後続するサイクルでは、コンパクト化された命令データの1以上のセグメントが取得されるたびに、必要に応じて拡張する。
Figure 2013504115
第1の実施形態では(図12参照)、次の命令の開始セグメントは、現在の命令の開始セグメントおよび現在の命令の長さから計算することができる。この開始セグメントから、sel0のワンホットワードを計算することができる。sel0のLSBの部分は、sel1,…,selnにコピーする。出力セグメントO0..Onは常にデータを含んでいる点に留意されたい。命令拡張ユニット87はこの点を考慮に入れ、命令長に応じてlsbセグメントのみを読み出す必要がある。
第2の実施形態(図14参照)では、開始セグメントの計算が等しい。o_sel0の開始セグメントからワンホットワードセレクタへの変換は、ワンホットワードが小さいが、o_sel0..o_selnの信号が単にシフトされたバージョンではない、という点で少し異なっている。S0..Snで利用可能なセグメント数は、o_sel信号間の関係に影響する。図12に示す実施形態では、2n−1ビットのワンホットワードを利用して、マルチプレクサユニットを制御しており、図14の実施形態では、n+1ビットのワンホットワードを利用している。第2の実施形態では、sh_sel信号を生成する必要がある。これらは、プログラムメモリ10からの入力シフトレジスタSn..S0へのタイミングパス十分短いために、登録される必要はない。選択信号sh_sel0..sh_selnは、次の開始セグメントから生成することができる。
本発明によるプログラマブルプロセッサの仕様は、ハードウェア生成ツールを利用して自動生成することができる。図15は、このようなツールPCを示す。ここでは、従来のプロセッサ(例えば図1に示すようなプロセッサ)ビュー定義ファイル135およびプロセッサ記述ファイル105が、第2のAPEXモジュール140に提供されている。この第2のAPEXモジュール140は、プロセッサ記述ファイル105およびビュー定義ファイル135から情報を集めて、プロセッサの記述に定義されているパラメータを抽出するAPI145を提供する。このAPI145は、ハードウェア構築ブロックライブラリ150が、仕様155を生成する際に利用される。
本発明のプログラマブルプロセッサにおいては、命令または命令フィールドのデコンパクションは、通常、プログラマブル表(ここではデコンパクション表とも称される)のインデックスにより行われる。書き込みおよび読み出し設備は、デコンパクション表に対して書き込みおよび読み出しを行うことを可能とする。一実施形態では、デコンパクション表のためのレジスタは、エントリを書き込みときにだけクロック供給される。通常は、これは、プロセッサに電源を投入した後一度だけ行われる。従って、デコンパクション表レジスタのクロックゲーティングにより、使用電力が大幅に低減される。
一実施形態では、複数のビューによって、少なくとも1つのデコンパクション表を利用して命令をデコンパクト化する。互いに異なるコンパクションスキーム用の命令拡張モジュールが並列実行する必要がないことから、このデコンパクト化実行のために、デコンパクション表にマルチ読み取りポートを設ける必要はない。
デコンパクション表は、命令フィールド用にNOP値を常に含む。NOPコードについて各表のアドレス0をリザーブして、レジスタでこのエントリを実装するのではなくて、これを固定エントリとするとよい。
請求項で、「備える」という用語は、他のエレメントまたは他の段階を排除するものではなく、不定冠詞は複数を含む。単一のコンポーネントまたは他のユニットが、請求項に記載する幾つかのアイテムの機能を達成することもできる。互いに異なる請求項に一定の計測値(measures)が記載されているからといって、これは、これら計測値の組み合わせを利用すると効果がない、と言っているわけではない。請求項で利用される参照番号は、範囲を限定しているとみなされるべきではない。さらに、そうではないと明示していない限りは、「または」は、包含的ORであり、排他的なORではない。例えば、条件AまたはBは、Aが真であり(または存在しており)、Bが偽である(または存在しない)、Aが偽であり(または存在せず)、Bが真である(または存在する)、および、AおよびBの両方が真である(または存在する)、のいずれによっても満たされる。

Claims (18)

  1. プログラマブルプロセッサが処理する命令のサブセット用の命令コンパクションスキームをそれぞれ生成する方法であって、
    a)前記プログラマブルプロセッサで実行するソフトウェアを表す少なくとも1つの入力コードのサンプルを受信する段階であって、前記入力コードは第1の命令セットを定義する複数の命令を含む段階(S1)と、
    b)除去する命令セットを空として初期化する段階(S3)と、
    c)前記第1の命令セットの最もコンパクトな表現を決定する段階(S4)と、
    d)前記最もコンパクトな表現のサイズを閾値と比較する段階(S5)と、
    e)前記サイズが前記閾値より大きい場合、ステップe1からe3を実行する段階と、
    f)段階bから段階fを繰り返す段階であって、前記第1の命令セットは、前記除去する命令セットから形成される段階(S9、S10)と
    を備え、
    前記ステップe1からe3は、
    e1)前記第1の命令セットのどの命令の符号化コストが最も高いかを判断する段階(S6)と、
    e2)前記第1の命令セットから、前記最も高い符号化コストを持つ命令を除去する段階(S7)と、
    e3)前記命令を前記除去する命令セットに追加する段階(S8)とである方法。
  2. 命令コンパクションスキーム数と、命令コンパクションスキーム毎の圧縮の数を要求する前記段階(S2)を備える請求項1に記載の方法。
  3. 複数の命令コンパクションスキームで繰り返しを行い、各命令コンパクションスキームについて達成される圧縮量を決定する段階を備える請求項1に記載の方法。
  4. 前記命令には、個々にコンパクト化される複数の命令フィールドが含まれる請求項1または2に記載の方法。
  5. 個々にコンパクト化される前記複数の命令フィールドは、少なくともオペコード、書き込みポートのインデックスを示すフィールド、および、読み出しポートのインデックスを示すフィールドを含む請求項4に記載の方法。
  6. 互いに異なるサブセット用の前記命令コンパクションスキームは、互いに異なるコードワード幅を有し、前記サブセットのうち、少なくとも1つのサブセットが最小コードワード幅を有する請求項1から5のいずれか一項に記載の方法。
  7. 各サブセットの前記コンパクションスキームの前記コードワードのサイズは、前記最小コードワード幅を整数倍した値であり、前記整数は1以上である請求項6に記載の方法。
  8. 互いに異なるサブセット同士は、互いに異なる方法でコンパクト化される請求項1から7のいずれか一項に記載の方法。
  9. 前記サブセットのうちの少なくとも1つは、可変長コードにコンパクト化される請求項1から8のいずれか一項に記載の方法。
  10. 複数の命令を含むプログラムを受信する段階と、
    各命令について、段階aからfで決定されたものに対応する命令コンパクションを決定する段階と、
    前記命令コンパクションに従って前記命令を圧縮する段階と、
    コンパクト化された命令を提供する段階と
    をさらに備える請求項1から9のいずれか一項に記載の方法。
  11. 前記コンパクト化された命令を、利用した前記コンパクションのタイプを示す少なくとも1つのインジケータとともに提供する段階を備える請求項10に記載の方法。
  12. 前記コンパクト化された命令は、複数のセグメントを含むワードに格納され、各セグメントは、当該セグメントが、コンパクト化された命令の最初のセグメントであるかを示すインジケータを少なくとも含む請求項10または11に記載の方法。
  13. 前記コンパクト化された命令は、複数のセグメントを含むワードに格納され、各コンパクト化された命令は、当該コンパクト化された命令内の所定の位置にインジケータを含み、前記インジケータは、次のコンパクト化される命令に利用するコンパクションのタイプを示す請求項10または11に記載の方法。
  14. プログラマブルプロセッサの仕様を受信する段階と、
    前記仕様と、生成した前記命令コンパクションスキームそれぞれとを利用して、命令デコンパクターのためのハードウェア仕様を決定する段階と
    をさらに備える請求項1に記載の方法。
  15. 請求項1から14のいずれか一項に記載の方法の実行に適すようにプログラミングされた装置。
  16. 請求項1から14のいずれか一項に記載の方法を装置に実行させるプログラムを備える記録キャリア。
  17. プログラマブルプロセッサであって、
    第1の命令コンパクションスキームに従ってN個のメモリワードセグメントの第1のコードワードとしてコンパクト化された第1の命令群と、第2の命令コンパクションスキームに従ってM個のメモリワードセグメントの第2のコードワードとしてコンパクト化された第2の命令群とを少なくとも含むコンパクト化された命令データとして格納される命令シーケンスを有するプログラムメモリ(10)と、
    命令復号器(20)と、
    少なくとも1つのレジスタファイル(40、40a)と、
    前記レジスタファイル(40a)に連結された少なくとも1つの発行スロット(50)と、
    命令拡張器(80)と
    を備え、
    前記命令拡張器(80)は、
    前記プログラムメモリからフェッチしたコンパクト化された命令データの命令コンパクションスキームを識別するコンパクションスキーム識別器(17)と、
    プログラムカウンター(PC)を受信するための入力と、
    プログラムメモリワードの少なくとも1つのセグメントを一時格納する格納設備(14)と、
    前記プログラムメモリ(10)と前記格納設備(14)とから、コンパクト化された命令データを選択する選択設備(27)と、
    選択された前記コンパクト化された命令を、Kのサイズを有する拡張された命令に拡張する命令拡張ユニット(87)と、
    前記プログラムカウンター(PC)に呼応して前記プログラムメモリ(AD)のアドレスを生成して、前記選択設備を制御する制御設備(85)と
    を備え、
    K、N、Mは、1以上の整数であり、整数N、MはK以下であり、NおよびMのうち少なくともいずれかがKより小さいプログラマブルプロセッサ。
  18. 前記格納設備(14)はレジスタであり、前記選択設備(27)は複数のマルチプレクサモジュール(27a,…,27d)を含み、各マルチプレクサモジュールは、コンパクト化された命令データの1またはゼロのセグメントを選択する請求項17に記載のプログラマブルプロセッサ。
JP2012527839A 2009-09-04 2010-09-03 方法および装置および記録されたキャリア Pending JP2013504115A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US24005909P 2009-09-04 2009-09-04
US61/240,059 2009-09-04
PCT/NL2010/050555 WO2011028116A2 (en) 2009-09-04 2010-09-03 Method and apparatus and record carrier

Publications (1)

Publication Number Publication Date
JP2013504115A true JP2013504115A (ja) 2013-02-04

Family

ID=43530867

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012527839A Pending JP2013504115A (ja) 2009-09-04 2010-09-03 方法および装置および記録されたキャリア

Country Status (6)

Country Link
US (1) US8954941B2 (ja)
EP (1) EP2473918B1 (ja)
JP (1) JP2013504115A (ja)
KR (1) KR101401244B1 (ja)
CN (1) CN102741817B (ja)
WO (1) WO2011028116A2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8949222B2 (en) * 2012-05-11 2015-02-03 International Business Machines Corporation Changing the compression level of query plans
US9122494B2 (en) * 2013-05-15 2015-09-01 National Tsing Hua University Method and apparatus for code size reduction
US9672041B2 (en) * 2013-08-01 2017-06-06 Andes Technology Corporation Method for compressing variable-length instructions including PC-relative instructions and processor for executing compressed instructions using an instruction table
CN106250241A (zh) * 2016-08-02 2016-12-21 合肥奇也信息科技有限公司 一种多方向分配数据处理系统资源到应用程序的方法
FR3056782B1 (fr) * 2016-09-26 2019-12-13 Airbus Operations Generation de codes applicatifs a partir d'une specification formelle
CN111628846B (zh) * 2017-09-01 2022-12-06 惠州市德赛西威汽车电子股份有限公司 一种提高数据传输效率的方法
EP3518125A1 (en) * 2018-01-25 2019-07-31 Siemens Aktiengesellschaft Method for the deployment of schema changes in systems involving a database
CN110286711B (zh) * 2019-06-28 2021-04-13 联想(北京)有限公司 信息处理方法、信息处理装置、存储装置和电子设备
CN114138282B (zh) * 2021-11-30 2023-03-31 四川效率源信息安全技术股份有限公司 一种还原iOS类型编码的伪代码的方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0816391A (ja) * 1994-06-21 1996-01-19 Sgs Thomson Microelectron Ltd コンピュータシステム、命令ビット長圧縮方法、命令発生方法、及びコンピュータシステム動作方法
JPH10320172A (ja) * 1997-05-15 1998-12-04 Seiko Epson Corp プログラム圧縮方法およびプログラム復号方法ならびにプログラム格納装置
JPH11509664A (ja) * 1996-05-15 1999-08-24 フィリップス エレクトロニクス ネムローゼ フェンノートシャップ 圧縮された命令フォーマットを処理するvliwプロセッサ
JP2000222203A (ja) * 1999-01-29 2000-08-11 Internatl Business Mach Corp <Ibm> 命令セットの拡張を通じて、risc実行可能コ―ドを圧縮する方法及びシステム
JP2002149399A (ja) * 2000-10-09 2002-05-24 Siroyan Ltd プロセッサ用命令セット
JP2002533815A (ja) * 1998-12-18 2002-10-08 ボプス インコーポレイテッド 動的コンパクト命令を有するスケーラブル命令セットアーキテクチャのための方法及び装置
WO2008118791A1 (en) * 2007-03-27 2008-10-02 Intel Corporation Optimal selection of compression entries for compressing program instructions

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6151618A (en) * 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
JP3658072B2 (ja) * 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
US7036106B1 (en) * 2000-02-17 2006-04-25 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
JP2007514245A (ja) * 2003-12-16 2007-05-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ メモリ効率に優れた命令処理方式
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US7861070B2 (en) * 2008-06-12 2010-12-28 National Tsing Hua University Trace compression method for debug and trace interface wherein differences of register contents between logically adjacent registers are packed and increases of program counter addresses are categorized

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0816391A (ja) * 1994-06-21 1996-01-19 Sgs Thomson Microelectron Ltd コンピュータシステム、命令ビット長圧縮方法、命令発生方法、及びコンピュータシステム動作方法
JPH11509664A (ja) * 1996-05-15 1999-08-24 フィリップス エレクトロニクス ネムローゼ フェンノートシャップ 圧縮された命令フォーマットを処理するvliwプロセッサ
JPH10320172A (ja) * 1997-05-15 1998-12-04 Seiko Epson Corp プログラム圧縮方法およびプログラム復号方法ならびにプログラム格納装置
JP2002533815A (ja) * 1998-12-18 2002-10-08 ボプス インコーポレイテッド 動的コンパクト命令を有するスケーラブル命令セットアーキテクチャのための方法及び装置
JP2000222203A (ja) * 1999-01-29 2000-08-11 Internatl Business Mach Corp <Ibm> 命令セットの拡張を通じて、risc実行可能コ―ドを圧縮する方法及びシステム
JP2002149399A (ja) * 2000-10-09 2002-05-24 Siroyan Ltd プロセッサ用命令セット
WO2008118791A1 (en) * 2007-03-27 2008-10-02 Intel Corporation Optimal selection of compression entries for compressing program instructions

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6013057893; Sergei Y. Larin, Yhomas M. Conte: 'Compiler-Driven Cached Code Compression Schemes for Embedded ILP Processors' Proceedings of the 32nd annual ACM/IEEE International Symposium on Microarchitecture (MICRO-32) , 19991116, Pages:82-92, IEEE *
JPN6013057895; Charles Lefurgy et al.: 'Improving Code Density Using Compression Techniques' Proceedings of the 30th annual IEEE/ACM International Symposium on Microarchitecture (MICRO-30) , 19971201, Pages:194-203, IEEE *

Also Published As

Publication number Publication date
WO2011028116A3 (en) 2011-05-19
CN102741817A (zh) 2012-10-17
KR20120062856A (ko) 2012-06-14
US20120265972A1 (en) 2012-10-18
US8954941B2 (en) 2015-02-10
KR101401244B1 (ko) 2014-05-28
WO2011028116A2 (en) 2011-03-10
EP2473918A2 (en) 2012-07-11
CN102741817B (zh) 2015-12-16
EP2473918B1 (en) 2019-05-08

Similar Documents

Publication Publication Date Title
JP2013504115A (ja) 方法および装置および記録されたキャリア
US5881260A (en) Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
KR101579589B1 (ko) 파이프라인 프로세서를 위한 정적 분기 예측 방법과 이를 위한 컴파일 방법
JP2010503107A (ja) 複数の命令モードを有するデータ処理回路、データ回路の処理方法、およびデータ回路のスケジューリング方法
JP5869125B2 (ja) エントロピ符号化命令シーケンスの記憶および実行可能な形式への変換のための方法および装置
JP2005332361A (ja) プログラム命令圧縮装置および方法
US6725450B1 (en) Program conversion apparatus, processor, and record medium
US7523294B2 (en) Maintaining original per-block number of instructions by inserting NOPs among compressed instructions in compressed block of length compressed by predetermined ratio
JP2006500658A (ja) プログラムを動的に圧縮解除するための装置および方法
US20120096242A1 (en) Method and Apparatus for Performing Control of Flow in a Graphics Processor Architecture
JP2006053830A (ja) 分岐予測装置および分岐予測方法
US7484077B2 (en) Skipping unnecessary instruction by multiplex selector using next instruction offset stride signal generated from instructions comparison results
JP2002073325A (ja) データ処理装置及び方法
JP2007004475A (ja) プロセッサ及びプログラム実行方法
JP3958239B2 (ja) マイクロコントローラ
JP2002171525A (ja) ビットプレーン演算命令を備えたsimd型演算装置
US20050108698A1 (en) Assembler capable of reducing size of object code, and processor for executing the object code
JP2001043082A (ja) 情報処理装置並びに命令コーディング方法及び命令デコーディング方法
US11086627B2 (en) Instruction length decoder system and method
Lin et al. Code Compression for Embedded Systems
JP2004302647A (ja) ベクトルプロセッサおよびレジスタのアドレス指定方法
US20050096919A1 (en) Data simplifying and merging method for a voice decoding memory system
JP2006092158A (ja) デジタル信号処理回路
CN113608785A (zh) 处理器核、处理器及指令处理方法
US20040019772A1 (en) Microprocessor

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131126

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140401

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20140521

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20140521

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140625

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140702

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141007