JP3556556B2 - 命令コード変換装置及び情報処理システム - Google Patents
命令コード変換装置及び情報処理システム Download PDFInfo
- Publication number
- JP3556556B2 JP3556556B2 JP2000030948A JP2000030948A JP3556556B2 JP 3556556 B2 JP3556556 B2 JP 3556556B2 JP 2000030948 A JP2000030948 A JP 2000030948A JP 2000030948 A JP2000030948 A JP 2000030948A JP 3556556 B2 JP3556556 B2 JP 3556556B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instruction code
- address
- memory
- compressed
- 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.)
- Expired - Fee Related
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/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Description
【発明の属する技術分野】
本発明は、圧縮命令を含む命令コードを変換する命令コード変換装置、及び前記命令コード変換装置を含んで情報処理を行う情報処理システムに関する。
【0002】
【従来の技術】
CPU、特にRISCプロセッサの場合に、多ビットの固定長命令コード(32ビット長が多い)は、一般的に可変長命令コード(8〜32ビット長が多い)のCISCプロセッサに比べてコード効率が低く、プログラムメモリの使用量が増える。コストにセンシビリティなパーソナル機器においては、より大容量なメモリの使用やより多くのメモリチップの搭載が必要となるプロセッサの採用は困難であった。コード効率が悪くなるのは、そのRISCプロセッサのアーキテクチャによって差違があるが、以下の2点が大きな要因である。
【0003】
(a)命令コードが32ビット長固定と長いこと。
【0004】
(b)命令の種類が少ないこと。
【0005】
そこで、コード効率を改善するため、要因(a)に対する施策としては、16ビット固定長のRISCプロセッサや16/32ビットの可変長のRISCプロセッサが開発された。また、要因(b)に対する施策としては、CISC並みの豊富な命令を持つRISCプロセッサが開発された。16ビット固定長のプロセッサは、命令が16ビット長なので、命令数に制約があることと、扱えるイミディエイト値に制約(例えば16ビットデータは直接扱えない)があることの2点で要因(b)が残り、コード効率は大きく改善されない。また、必要命令数が増えるため、32ビット固定長のプロセッサに比べて周波数あたりの性能が低くなる。
【0006】
そこで、16/32ビットの可変長のRISCプロセッサが登場した。高速処理は32ビット長命令で実行し、コード効率優先の処理は16ビット長命令又は16ビット/32ビット長命令の混在で実行させる。
【0007】
既存のプロセッサに追加する命令セットとしては、命令モード(元の32ビット長の命令を実行するモードと、追加された16ビット長又は16ビット/32ビット長の命令を実行するモードとがある)を切り換える命令や、元の32ビット長命令セットにはない独自命令を追加しているため、CPUの改変が必要である。例えば追加された圧縮命令セットを伸張する命令コード伸張回路をCPU内に追加するとともに、元の32ビット長命令セットにはない独自命令のための命令解読回路が追加されている。さらに、パイプライン制御回路などCPU内の回路の変更が行われている。命令モードを示すレジスタは、プログラムカウンタの最下位ビットに割り当て、このレジスタの値で命令コード伸張回路と命令解読回路とを制御させる。
【0008】
CISC風の複雑な命令を搭載したRISCプロセッサでは、CPUの命令実行回路が複雑となり、RISC本来の思想である命令を単純化し、周波数を上げて高速処理を行うことが困難である。したがって、比較的低速(100MHz未満)のプロセッサしか現在は開発されていない。
【0009】
一方、コード効率を上げるには、下記に示すような様々な手法が従来から提案されている。
【0010】
第1の方法は、プログラムのコードを生成するコンパイラ/アセンブラを改良して、よりステップ数の少ない、あるいはコードの短い命令コード列を生成させる方法である。ソースプログラムはC言語などの高級言語で一般的に記述されている。ソースプログラムはコンパイラによってアセンブリ言語で記述されたプログラムに変換される。アセンブリ言語のプログラムはアセンブラによってCPUが認識可能な命令コードで記述されたオブジェクトプログラムに変換される。ステップ数とは、命令コードの数を指し、同じソースプログラムからできるだけ少ない数の命令コードに変換されるようにこれらのコンパイラ/アセンブラを改良する。一方、CPUによっては、同一の機能を果たす命令コードを複数持っている。アセンブラはその命令コードの中からより短いコード長の命令コードに変換するようアセンブラを改良する。このアセンブラの機能は最適化と呼ばれ、この機能を改良することでコードを短くする。
【0011】
第2の方法は、CPUに命令を追加して、よりステップ数の少ないあるいはコードの短いコード列を生成させる方法である。既存の命令では複数の命令で表現せざるを得なかったものを、1つの命令で表現できるようにする場合と、既存の命令をより短いコードで表現する場合とがある。
【0012】
第3の方法は、第2の方法の変形で、追加された命令を1命令単位に元からCPUが持っている命令コードに伸張する方法で、追加命令として、既存の命令コードより短い命令コードを用意する。
【0013】
第4の方法は、CPUの命令を新規の命令に変更し、よりステップ数の少ない、あるいはコードの短いコード列を生成させる方法である。
【0014】
第5の方法は、CPUが持つ命令のコードで記述されたプログラムを、その全体あるいは一部をソフトウェアで圧縮し、実行前にソフトウェアまたはハードウェアで伸張する方法である。この方法は、ファイルの圧縮/解凍と同様、ZIP形式やLZH形式など様々な手法に基づき、実行前のプログラムメモリ使用容量を削減することができる。
【0015】
第6の方法は、第5の方法の変形で、プログラムを複数のブロックに分割し、そのブロック毎にソフトウェアで圧縮し、ブロック毎にハードウェアで伸張しながら実行させる方法である。
【0016】
上記第1の方法では、CPUの持つ命令コードを最も有効に活用するところまでしかコード効率の改善ができないので限界がある。さらなる改善が必要となった場合は第2〜6の方法を取る必要がある。第2および第4の方法は、新しいCPUを開発することを意味し、コンパイラ/アセンブラなどの言語ツール、ICE/デバッガなどの検証ツール、OS,Co−simulationなどのCPUとプログラムやシステムの開発支援ツールの開発には、膨大なリソースと開発期間とを要する。特に汎用CPUの場合、ユーザによって開発環境が異なるため、複数の開発支援ツールを揃える必要があり、その開発負担は極めて大きい。
【0017】
第3の方法は、追加された命令が既存の命令に比べてコード長が短くなるため、その追加命令をプログラムメモリから読み出すためにプログラムメモリに与えるアドレスが、CPUアドレスと一致するようCPUの改変が行われる。例えば図23に示すように、既存の命令が32ビット固定長で、追加の命令が16ビット長である場合は、32ビット長の命令コードは4バイトのメモリを使用するため、命令が追加される前のCPUアドレスは4の倍数であるが、16ビット長の命令コードは2バイトのメモリを使用するため、追加後は2の倍数でなければならない。そのため、CPUアドレスが2の倍数となるようCPUの改造を行っている。また、追加された命令セットと元の命令セットとを混在させることができるよう、どちらの命令セットであるかを選択するための命令も追加している。第3の方法は、上記第2の方法に比べれば、CPUの改変、プログラム開発支援ツールの開発にかかるリソース、期間は節約できるものの、開発は容易でない。
【0018】
第5の方法では、データも含めて圧縮できるので、大きな圧縮効果が得られる可能性があるが(圧縮効果はプログラムに依存する)、命令の伸張に時間がかかり、また圧縮されたプログラム/データを格納したメモリ以外に、伸張したプログラム/データを格納できるメモリが必要となり、その実施は限定された分野になる。特にソフトウェアで伸張する場合は、伸張そのものに大幅な時間を要し、伸張されるまで実行できない。ハードウェアで伸張するにしても、圧縮されたプログラム/データが格納されたメモリをすべて読み出すため、時間がかかる。
【0019】
第6の方法では、ブロック単位にプログラムを分割して圧縮/伸張するため、その伸張に要する時間はブロックのサイズにもよるが、第5の方法に比べて大幅に改善される。また、圧縮後のプログラムはブロック毎にサイズが異なるため、伸張用にCPUアドレスとメモリアドレスとの対応情報をプログラムメモリに格納しておかなければならない。すなわち、CPUからのアドレスから圧縮された命令の格納アドレスを得るためのインデックステーブルをプログラムメモリに格納し、圧縮された命令コードを伸張するには、メモリからインデックステーブルを読み出し、その読み出した情報から生成されたアドレスで再びプログラムメモリから圧縮された命令コードを読み出し、さらに圧縮の際に使った情報を格納したデコードルックアップテーブルがプログラムメモリ以外に用意され、そのデコードルックアップテーブルから読み出す必要があり、伸張作業に相当な時間がかかり、さらにデコードルックアップテーブルによるチップコストへの影響も多大である。
【0020】
また、従来の情報処理システムにおいて、プロセッサとプログラムメモリとのバス幅を多ビットにすると、1回のバスサイクルで命令を取り込め、性能向上に貢献する。しかしながら、バス幅が大きいと多ピンパッケージ品が必要となり、バス本数に応じて基板面積が増大し、複数のメモリチップが必要になるなど、コストやサイズに大きな影響を与えることになる。一方、バス幅を減らすだけだと、1つの命令が1回のバスサイクルで読み込めず、性能を低下させてしまう。そこで、16ビット長の命令にすれば、16ビットバスで1回で読み込めるため、コストサイズを抑え、かつ性能の低下をミニマイズできる。
【0021】
【発明が解決しようとする課題】
以上説明したように、従来の情報処理装置において、32ビット固定長のプロセッサに、16ビット固定長あるいは16/32ビット可変長の命令を追加する場合には、CPUを新規に開発あるいは新規に近いCPUの改変を行って、実現していた。このため、CPU改変やプログラムやシステムの開発支援ツールの開発に多くの手間と時間がかかるといった不具合を招いていた。また、CPUの改変等を行うことなくコード効率を改善するために命令の圧縮手法を採用しているが、従来の圧縮手法にあっては、圧縮された命令を元に戻す伸張作業に時間がかかり、伸張作業のためにシステムのサイズやコストに大きな影響を及ぼす構成が必要になるといった不具合を招いていた。
【0022】
そこで、この発明は、上記に鑑みてなされたものであり、その目的とするところは、CPUを新規設計/改変することなく、命令の追加を実現してコード効率を向上させ、命令を格納するプログラムメモリの容量を削減できる命令コード変換装置、ならびに情報処理システムを提供することにある。
【課題を解決するための手段】
上記目的を達成するために、課題を解決する第1の手段は、外部から与えられる第1のアドレスでアクセスするアドレス空間が、圧縮命令を格納する圧縮命令格納領域又は非圧縮命令を格納する非圧縮命令格納領域であるかを識別する識別手段と、外部から与えられる前記識別手段の前記圧縮命令格納領域と前記非圧縮領域とをそれぞれ任意のアドレスに設定するレジスタと、1つのメモリ内に前記圧縮命令格納領域と前記非圧縮命令格納領域の2つの領域があり、前記メモリをアクセスするために、これらの2つの領域にそれぞれ対応する第2のアドレスを前記識別手段の結果に基づいて、生成するアドレス生成手段と、前記第2のアドレスで前記メモリをアクセスし、前記メモリから読み出された命令コードを前記識別手段の結果に基づいて、前記圧縮命令格納領域である場合には伸張変換し、あるいは前記非圧縮命令格納領域である場合には無変換する命令コード変換回路とを有することを特徴とする。
【0023】
第2の手段は、外部から与えられる第1のアドレスでアクセスするアドレス空間が、圧縮命令を格納する圧縮命令格納領域又は非圧縮命令を格納する非圧縮命令格納領域であるかを識別する識別手段と、1つのメモリ内に前記圧縮命令格納領域と前記非圧縮命令格納領域の2つの領域があり、前記メモリをアクセスするために、これらの2つの領域にそれぞれ対応する第2のアドレスを前記識別手段の結果に基づいて、生成するアドレス生成手段と、前記第2のアドレスで前記メモリをアクセスし、前記メモリから読み出された命令コードを前記識別手段の結果に基づいて、前記圧縮命令格納領域である場合には伸張変換し、あるいは前記非圧縮命令格納領域である場合には無変換する命令コード変換回路とを有し、前記圧縮命令領域と前記非圧縮命令領域は、メモリ・マネージメント・ユニットを用いて物理アドレス空間をプログラマブルに分割されたページ単位に割り当てられていることを特徴とする。
【0024】
第3の手段は、前記第1又は第2の手段の命令コード変換装置と、圧縮命令コード、又は前記圧縮命令コード及び非圧縮命令コードを格納するメモリと、前記命令コード変換装置と前記メモリとの間に置かれ、前記命令コード変換装置から出力されたメモリアドレスとメモリリード要求信号に従い、前記メモリをアクセスし、前記メモリから前記圧縮命令コード又は非圧縮命令コードを読み出し、前記命令コード変換装置に出力するメモリインタフェースと、前記命令コード変換装置と接続され、前記命令コード変換装置に実行すべき命令を読み出すためのCPUアドレスとリード要求信号を前記命令コード変換装置に出力し、前記CPUアドレスは前記命令コード変換装置で前記メモリアドレスに変換され、また、前記リード要求信号は前記命令コード変換装置で前記メモリリード要求信号を生成し、前記メモリインタフェース経由で受け取った前記圧縮命令コード又は非圧縮命令コードを前記命令コード変換装置で変換した命令コードを受信して実行するCPUとを有することを特徴とする。
【0028】
【発明の実施の形態】
以下、図面を用いてこの発明の実施形態を説明する。
【0029】
図1は本発明の一実施形態に係る情報処理システムの構成を示す図である。
【0030】
図1において、情報処理システムは、プログラムメモリ1と、メモリインタフェース2と、命令コード変換装置3と、CPU4を備え、既存のCPU4を改変することなくプログラムのコード効率を向上させ、命令を格納するプログラムメモリ1の使用容量を削減するために、CPU4に実行させるプログラム(命令コード列)を圧縮ソフトウェアによって圧縮し、生成されたオブジェクト(圧縮命令コード列)を、プログラムメモリ(CPUチップの外部に置かれたメモリあるいはCPUチップに内蔵されたメモリ、内蔵メモリの場合には、当然メモりインタフェースも命令コード変換装置も内蔵される)1に格納し、CPU4から出力される命令コード読み出し(フェッチ)のためのアドレスとプログラムメモリ1に入力されるアドレスとが単純な操作(シフト)で得られるように関連付け、CPU4からの命令コード読み出し要求で、CPUアドレスをプログラムメモリアドレスに変換し、そのアドレスでメモリインタフェース2を介してプログラムメモリ1をアクセスして圧縮命令コードを読み出し、CPU4とメモリインタフェース2との間に設けられた命令コード変換装置3によって圧縮命令コードをCPU4が実行できる命令コードに伸張してCPU4に渡し、CPU4に伸張された命令コードで実行する。伸張された命令コードはCPU4が元から持っていた命令と同一である。
【0031】
圧縮命令コードが格納されるプログラムメモリ1のアドレスとCPU4からのアドレスの関連付けを図2に示すように単純化する。例えば、CPU4の命令コードが32ビット固定長で、圧縮命令コードが16ビット固定長である場合は、CPU4のアドレスは4の倍数、プログラムメモリ1のアドレスは2の倍数となるが(図2(a))、CPUアドレスを右(下位側)へ1ビットシフトした値をプログラムメモリアドレスとすれば(図2(b))、前述した従来の第3の方法にあるように、CPUを改変してCPUアドレスを2の倍数にする必要はなく、CPU4からのアドレス出力は4の倍数のままでよい。プログラムメモリ1へ与えるアドレスは命令コード変換装置3で2の倍数になるようにアドレス変換する。
【0032】
詳細に説明すると、32ビット固定長の命令コードを実行するCPU4に、16ビット固定長の圧縮命令コードを扱わせる場合では、CPU4は32ビット固定長の命令をフェッチしようとしてアドレスの下位4ビットに0→4→8→C(16進数)を出力する。プログラムメモリ1は、このCPU4からのアドレスを1ビット右シフトした0→2→4→6番地に16ビット長の圧縮命令を格納する。CPU4からの出力アドレスの下位ビットが4のとき、プログラムメモリ1の2番地から16ビット長の圧縮命令コードが読み出され、命令コード変換装置3によりCPU4が実行可能な32ビット長の命令コードに変換してCPU4に渡す。CPU4はこの32ビット長コードの命令を実行し、アドレス出力の下位4ビットは4から8に切り換わる。
【0033】
圧縮命令コードが16ビット固定長ではなく、図3(a)に示すように16/32ビットの可変長である場合について、図3を参照して説明する。
【0034】
可変長の場合は、例えばプログラムメモリ1の2番地と4番地に32ビット長の圧縮命令コード(命令2)が入っている場合がありうる。この命令2をフェッチする場合は、(図3(b))に示すようにCPU4はまずアドレスの下位4ビットが4となるアドレスを出力し、右に1ビットシフトした2番地のプログラムメモリ1から圧縮命令コード(命令2)の上位16ビットをまず読み出し、CPU4にはノーオペレーション命令(NOP)の32ビットコードを渡す。CPU4はNOPを実行し、アドレス出力の下位4ビットは4から8に切り換わる。次に、8を右シフトした4番地のプログラムメモリ1から圧縮命令コード(命令2)の下位16ビットが読み出され、この32ビットの圧縮命令コードに対応したCPU4が実行可能な32ビット長の命令コード(命令2B’)に命令コード変換装置3が変換してCPU4に渡す。CPU4はこの32ビット長コードの命令2B’を実行し、アドレス出力の下位4ビットは8からCに切り換わる。このようにして、NOPをCPU4に実行させることで、CPUアドレスとプログラムメモリアドレスの関連付けの単純化を維持させる。
【0035】
なお、圧縮命令コードによっては、NOPではなく他の32ビットコードの命令2A’に変換してもよい。この場合には、CPU4の既存命令2つ(各32ビット長で合わせて64ビット)を1つの32ビット長の圧縮命令コードで記述したことになり、図4に示すように圧縮効果が上がる。一方、NOPに変換された場合は、その32ビット長の圧縮命令コードは2命令サイクルの実行時間が少なくともかかるので、実行時間よりもコード効率を優先する場合に、この命令コード変換を使用するものとする。
【0036】
また、このアドレスの関連付けの単純化は、前述した従来の第6の方法で問題となるアドレス変換のためのアドレス対応情報をプログラムメモリ1に格納する必要がなくなるため、伸張にかかる時間はアドレス対応情報を読み出す時間がなくなる分、大幅に削減される。さらに、前述した第6の方法では、アドレス対応情報をプログラムメモリに置くので、その分コード効率を低下させているが、本発明ではアドレス対応情報はプログラムメモリ1に置く必要はなく、コード効率が上がる。
【0037】
一般的には、圧縮命令コードは、CPU4の既存の命令コードに比べて表現できる情報が少なくなるため、命令数が減る。そのため、コンパイラは圧縮をかける対象となるプログラムに関しては、サブセットのCPU命令しかないものとしてコンパイルしなければならない。場合によっては、圧縮命令コードで記述されたプログラムの方が、既存の命令コード(非圧縮命令コード)で記述されたプログラムより大きくなることも有り得るが、非圧縮命令コードには命令によって使用されないビットがあったり、扱うデータが小さい値が多く、命令コード中のデータ領域の上位ビットがすべて“0”であったり“1”であったりなど、なくてもよい部分がある。例えばプログラムで扱うデータとしては、1〜8ビット程度で表現できる数値が多い。しかしながら、CPU4の既存命令の多くは命令コード中に16ビット程度のデータフィールドを持つ。したがって、15〜8ビット程度の無駄がある場合が多々プログラムに存在する。この部分を削除した命令コードを圧縮命令コードとして用意することで、プログラムを圧縮する。
【0038】
圧縮には上記のように1命令コード単位に圧縮するだけでなく、複数の非圧縮命令コードをそれより少ない圧縮命令コードに圧縮する方法も考えられる。例えば、非圧縮命令コード2命令分を圧縮命令コード1命令にすることで、さらなる圧縮を図ることができる。図5に圧縮のための新命令とそれを伸張した既存命令のそれぞれの命令コードを示す。
【0039】
このような圧縮は、図6に示すように以下の手順で行われる。
【0040】
まず、コンパイラは、コンパイラ言語(C言語などの高級言語)で記述されたソースプログラムからサブセットの非圧縮命令で表現したアセンブラソースプログラムを生成する。アセンブラは、アセンブラソースプログラムをリロケータブルオブジェクトに変換し、さらにリンカによって非圧縮命令コードで記述されたアブソリュートオブジェクトファイルを生成する。このファイルは、さらにオブジェクトコンバータによってhexフォーマット等のオブジェクトに変換される。あるいは、圧縮ソフトウェアによって、上記アブソリュートオブジェクトファイルを圧縮命令コードで記述されたアブソリュートオブジェクトファイルに変換して圧縮する。圧縮されたファイルは、さらにオブジェクトコンバータによって、hexフォーマット等のオブジェクトに変換される。これらのオブジェクトをプログラムメモリ1に格納する。
【0041】
圧縮命令コードとしては、すべて同一の長さ(ビット長)である固定長、あるいは長さが異なる複数のビット長を持つ可変長のいずれかが考えられる。可変長の場合は、その命令コードとして、例えば図7(a)に示したように、常に命令コードの最上位コードでしかビット長を判別できないエンコード方式があり、例えば32ビット長の命令コードの上位16ビットの一部を判別に使用する。一方、どのコード位置でもビット長を識別できるエンコード方式があり、例えば32ビット長の命令コードの上位16ビットの一部でも下位16ビットの一部でも判別に使用可能な方式が考えられる(図7(b))。一般的には、前者のエンコード方式がオペコード(命令の種類を識別するための命令コード中の特定のビットフィールド)が少ないため、コード効率のよい命令コードとなる。
【0042】
前者のエンコード方式の圧縮命令コードを使う場合には、図8ならびに図9に示すように、1命令ずつ命令コード変換するのではなく、あるサイズのブロック単位で命令コード変換を行う必要がある。これは、割り込みなどの例外が発生した場合に、例外からの復帰で32ビット長の命令コード変換を正しく行うためである。例えば、32ビット長の圧縮命令コード(命令2)が命令コード変換装置3により、CPU4の元の命令2A’と命令2B’に伸張され、命令2B’を実行途上で例外が起きた場合に、例外復帰後32ビット長の圧縮命令コードの下位16ビットが格納されているアドレス(CPUアドレスの8番地)から再開するため、圧縮命令コードの上位16ビットが再フェッチされないので、命令コード変換を正しく行うことができない。これを防ぐため、ブロックに分割し、ブロックの先頭は必ず16ビット長の圧縮命令コード又は32ビット長の上位16ビットの圧縮命令コードになるようにオブジェクトを生成し、ブロックの先頭から伸張をすれば、常に正しい伸張を行うことが可能となる。
【0043】
このブロック単位の伸張には、上記制約すなわちブロックをまたぐ32ビット長のコードは許されないこと以外に、ブロック内にデータを置くことはできない。データと命令コードの区別ができないため、伸張すべきか否かが決定できないからである。前述した圧縮ソフトウェアによりブロックをまたぐ場合はNOPを挿入してまたがないように調整を行うものとする。ブロックのサイズを大きくすることで、またぐ可能性を減らすことが可能であるが、サイズが大きすぎると、コード変換された命令を格納するバッファメモリの容量が大きくなり、コストに影響を与える。また、サイズ分の命令読み出し/変換作業時間が必要なので、実行時間に影響を与える。これらのトレードオフを勘案してバッファサイズが決められる。
【0044】
次に、図10を参照して本発明をさらに詳細に説明する。
【0045】
CPU4は、例えば32ビット固定長の非圧縮命令コードC1,C2,C3…を実行できるものとする。コード効率が上がる圧縮命令コードとして、例えば16ビットあるいは32ビットの可変長の命令コードA1,A2,A3…を用意し、前述したソフトウェアで圧縮命令コードによるオブジェクトを生成する。プログラムソースの一部は、圧縮をかけない場合を想定する。これは、(a)圧縮命令コードだけでは命令数が不足しプログラムのすべてを圧縮命令コードで実現できないことがあり(非圧縮命令の数と圧縮命令コード長に左右されるが、特定のCPUリソースを扱う命令コードを圧縮命令コードで用意できなかった場合などが考えられる)、(b)圧縮命令コードは、命令数が非圧縮命令よりも通常少なくなるため、命令ステップ数が増え、圧縮の効果が失われることがあり、(c)圧縮命令コードは伸張してから実行されるため、非圧縮命令に比べて実行時間が延びる場合があり、プログラムの実行時間に制約がある部分が存在したりする。上記(a)〜(c)の場合には圧縮をかけられない、あるいは圧縮をかけるべきではない。したがって、非圧縮命令コード(32ビット固定長の命令コードB1,B2,B3…)によるオブジェクトも生成される。圧縮命令コードと非圧縮命令コードで表現されるオブジェクトがともにプログラムメモリ(メモリは1つでも複数でもよい)1に格納される。
【0046】
可変長の命令コードA1、A2、A3…は、最上位コードにオペコードを置くエンコード方式とする。この場合は、本発明では読み出された命令が何ビットの命令コードであるかを認識するため、圧縮命令コードを置くプログラムメモリは、あるサイズ、例えば16ビット長の命令で32命令分のブロックに分割する。ブロックの先頭は必ず圧縮命令コードの最上位コードが来るように、またブロック内にはデータが入らないように、図11ならびに図12に示すように、前述したソフトウェアでオブジェクトを生成する。
【0047】
プログラムメモリ1から命令コードA1,A2,A3…(圧縮命令コード)およびB1,B2,B3…(非圧縮命令コード)を読み出す際、圧縮命令コードあるいは非圧縮命令コードを区別する手段として、CPU4からのアドレスを使う。例えば、アドレスがある範囲にある場合を圧縮命令コード領域とみなし、この範囲外を非圧縮命令コード領域とする。アドレス範囲は固定されていてもよいが、レジスタを設けて任意に設定できるようにした方がメモリの無駄な空きが少なくて済み、よりコード効率を上げることができる。この例では、アドレス範囲を使う場合を説明する。
【0048】
例えば、圧縮/非圧縮命令コードのプログラム領域は、CPU4からのアドレスの上位8ビットを使って区別する。上位8ビットが04〜7Fの範囲は圧縮命令コードでプログラムをプログラムメモリ1に格納し、これ以外の範囲には非圧縮命令コードで書かれたプログラムをプログラムメモリ1に格納する。命令コード変換装置3はCPU4からのアドレス上位8ビットを見て、圧縮命令コードか否か判断し、圧縮されているときは伸張し、されていないときはそのままCPU4に命令コードを渡す。
【0049】
命令コードの一部を使う場合には、例えば命令コードの上位何ビットかを圧縮命令コードと非圧縮命令コードとで異なる値となるよう割り当てる。この場合は、圧縮命令コードと非圧縮命令コードが1命令毎に混在させることが可能で、より高いコード効率を得ることができる場合もある。CPU4の外に、CPU4の命令で値をセット可能なレジスタを設ける場合には、そのレジスタの値に応じて区別する。例えばそのレジスタをある分岐命令が実行されたことをCPU4の外部で検出可能であれば、その検出結果でCPU4の外部のレジスタの値を反転させる。
【0050】
別の例を挙げると、MMU(メモリ・マネージメント・ユニット)を使用する場合には、属性の1つとしてレジスタを設けておき、CPU4から出力された仮想アドレスに対応してその属性レジスタの値を使って区別する。属性レジスタはCPU4の命令で値がセット可能である。外部から入力される信号で区別する場合には、例えばプログラムメモリ1毎に属性の1つとして命令コードの区別を持たせ、そのプログラムメモリ1がアクセスされた際、その属性を命令コード変換装置3に入力する。
【0051】
CPU4から命令をフェッチするために出力される信号は、そのCPU4のアーキテクチャによって異なる。非ハーバードアーキテクチャの場合は、CPU4から命令フェッチであることを示す信号(この信号はデータアクセスであるか命令フェッチであるかを区別する)、読み出しを示す信号およびアドレス信号が出力される。上記で命令フェッチ用の読み出し信号とデータアクセス用の読み出し信号が独立している場合には、前記命令フェッチであることを示す信号はなくてもよい。また、メモリがプログラム用とデータ用とに分かれている場合には、アドレス信号をデコードすることで命令フェッチであるか否かが判別できるので、命令フェッチであることを示す信号は必要ない。この例では、アドレス範囲で命令フェッチか否か判別できる場合を説明する。
【0052】
一方、ハーバードアーキテクチャの場合には、命令フェッチ用のアドレス信号はデータアクセス用のアドレス信号と独立しているため、命令フェッチであることを示す信号は必要ない。
【0053】
CPU4から命令フェッチの要求があると、CPU4からのアドレス信号をデコードして、命令フェッチであることを認識するとともに圧縮/非圧縮命令コードのどちらのアクセスであるかも認識する。圧縮命令のコードのフェッチ要求であった場合は、CPU4からのアドレス信号からまずブロックの先頭アドレスを算出する。この例では16ビット長命令×32命令分/1ブロックなので、アドレス信号の下位7ビットを“0”にマスクする。さらに、その先頭アドレスを右に1ビットシフトする。シフトされたアドレスから1ブロック分のプログラムメモリ1を順次読み出すようメモリインタフェース2に要求を出す。メモリインタフェース2は、読み出し要求されたアドレスに従いプログラムメモリ1をアクセスし、圧縮命令コードを読み出し、命令コード変換装置3へ返す。
【0054】
まず、ブロックの先頭は必ず命令の最上位コードとなることから、命令コードのオペコードをデコードしてその命令に必要な圧縮命令コードをすべて読み出し、その圧縮命令コードに対応する元の32ビットの命令コードに伸張する。例えば、先頭の圧縮命令コードが16ビット長の命令であった場合は、即32ビットの命令コードに伸張される。先頭の圧縮命令コードが32ビット長であった場合には、まず先頭のアドレスから圧縮命令コードの上位16ビットを読み出し、32ビット長であることを認識し、先頭に引き続く次のアドレス、すなわち先頭アドレス+2のプログラムメモリ1から下位16ビットを読み出し、対応する32ビットの命令コード2個に伸張する。32ビットの圧縮命令コードが元の命令の1個にしか機能的に対応できない場合には、2個のうち一方はNOPの命令コードに伸張する。必ず2個にするのは、CPUアドレスとプログラムメモリ1が1対1に対応し、アドレス変換が右への1ビットシフトという単純な関連付けとなるからである。
【0055】
伸張された命令は、命令コード変換装置3内に設けられたバッファメモリに格納される。バッファメモリのサイズは、この例では32ビット×32命令分必要となる。先頭の圧縮命令コードの伸張が済むと、次の圧縮命令コードの読み出しと伸張とバッファメモリへの格納を同様に行い、CPU4からの出力アドレスと一致するアドレスまで伸張が済んだところでCPU4に伸張された命令コードを返し、命令を実行させる。
【0056】
命令コード変換装置3は、CPU4に伸張した命令コードを返した後も圧縮命令コードの読み出し/伸張および格納をブロックの最終アドレスまで続けて行う。ただし、CPU4が分岐命令を実行あるいは割込みなどの例外を検出して、出力アドレスがブロック外に出た場合は、そのブロックでの伸張作業を中止し、直ちに新しいブロックでの伸張作業を行う。これは、伸張における実行時間が必要以上に延びることを防ぐためである。なお、ブロックの境界をまたぐループ処理に伴う分岐が頻繁に行われると、何度も同じブロックの伸張作業が発生するため、バッファメモリは少なくとも2ブロック分用意することで、この問題を回避することができる。バッファメモリのサイズとループ処理における分岐距離の分布次第では、バッファメモリをさらに用意すべきである。分岐距離の分布は、プログラムに依存するが、CPU4の命令セットアーキテクチャが支配的であるので、CPU4に応じて最適なバッファメモリのサイズと数を設定するようにすればよい。
【0057】
非圧縮命令コードの命令フェッチ要求であった場合は、CPU4からのアドレスを変換せず、メモリインタフェース2に与え、プログラムメモリ1から非圧縮命令コードを読み出す。読み出された非圧縮命令コードは、そのままCPU4に渡される。一方、命令フェッチでなく、データのアクセス(読み出しあるいは書き込み)要求であった場合は、CPU4のアドレスを変換せず、メモリインタフェース2に与え、プログラムメモリ1からデータを読み出し/プログラムメモリ1へデータの書き込みをを行う。
【0058】
バッファメモリを再利用できるよう、すなわち伸張された命令コードがバッファメモリに格納されて、その命令コードが保持されている場合に、再度伸張することなくバッファメモリの内容を利用することができるよう、バッファメモリは、図13に示すように、伸張された命令コード群を記憶するメモリ(レジスタでもよい)の他に、以下の付加情報を記憶するレジスタとで構成される。
【0059】
(a)どのCPUアドレスに対応した伸張命令コードが格納されているかを示すため、その上位アドレスを記憶するレジスタ(以下、ブロックアドレス記憶レジスタと呼ぶ)を1ブロック単位に1つ持つ。(b)伸張された命令コードが格納済みか否かを示すレジスタを持つ。各アドレスに1ビットの有効ビットを持ってもよいし、先頭から順次格納するわけだから何番目まで格納したかを示すレジスタ(以下、有効アドレス記憶レジスタと呼ぶ)を1ブロック単位に1つ持ってもよい。
【0060】
伸張途上のブロックを無効とする場合は、上記(b)の付加情報は必須ではない。この場合には、伸張が完了しているブロックか否かを示す少なくとも1ビットのレジスタを代わりに持つ。なお、上記(b)のレジスタは、リセット時、あるいは上記(a)の付加情報が書き換えられたとき、すべてのバッファメモリの内容が無効であることを示すよう初期化される必要がある。例えば、前者のアドレス毎の有効ビットの場合は、有効ビットの内容が“1”のとき、そのアドレスのバッファメモリに伸張された命令コードが格納済みで、有効ビットの内容が“0”のとき未格納であるとすると、初期化で全有効ビットを“0”にする。また、後者のブロック毎の有効記憶レジスタの場合、バッファメモリに伸張された命令コードがいっさい無い状態のとき、このレジスタの内容が“0”になっており、アドレスの下位ビット(この例では、下位7ビット)が“0”に伸張命令コードが格納されると“2”に変化し、最終アドレスまで格納されると40(16進数)となるものとすると、初期化でこのレジスタは“0”に設定されればよい。
【0061】
バッファメモリは、少なくとも2ブロック分用意されているため、例外検出や分岐命令実行により、現在伸張作業途上のブロックあるいはブロックの最終アドレスに置かれた命令の実行により(例外検出や分岐命令実行による場合を含む)、伸張作業の完了したブロックの外へ飛び出した後、再びこのブロックに戻った場合には、上述した付加情報を記憶したレジスタ群によって伸張が完了していることが判明した場合は、プログラムメモリ1から読み出すのではなく、バッファメモリから読み出すことで命令フェッチの応答時間を短縮できる。
【0062】
また、伸張作業がブロックの最終アドレスまで完了していない場合は、バッファメモリからCPUがフェッチした命令コードを返している間に残っている圧縮命令コードの読み出し/伸張/バッファメモリへの格納を実行させて、さらに命令フェッチの応答時間を短縮すこともできる。
【0063】
バッファメモリを少なくとも2ブロック分用意しているので、上述した付加情報に加え、図13に示すように、どのブロックのバッファメモリを次に使用するかを示すレジスタ(以下、バッファメモリ使用指定レジスタと呼ぶ)が必要となる。例えば、バッファメモリが2ブロック分用意されている場合には、このレジスタは少なくとも1ビットで構成され、例えばこのレジスタの内容が“0”の時は、バッファメモリ0が次に使用され、“1”の時はバッファメモリ1が次に使用される。リセット時は、どちらを使用してもよいので、このレジスタは必ずしも初期化しなくてもよい。一方のブロックを使用して伸張した命令コードの格納が行われた場合には、このレジスタは不使用のブロック番号を示すように変化する。一方、両方のブロックを使用すると、古い方のブロック番号を示すようにこのレジスタの内容を変化させる。
【0064】
割り込み例外やオーバーフロー例外等の例外が頻繁に起こるプログラムの場合は、バッファメモリは、メインルーチン格納用と例外ルーチン格納用と複数持たせた方がさらにバッファメモリ再利用効率が上がる。また、頻繁に使用されるサブルーチン、例えば割り込みを一時的に禁止する処理などがある場合も、バッファメモリは、メインルーチン格納用とサブルーチン格納用と複数持たせる方がよい。メインルーチンなのか否かは、一般的にCPUからのアドレス出力を利用して、アドレス空間でバッファメモリを使い分ける。図14にCPUのアドレス空間の分割例とバッファメモリの対応例を示す。
【0065】
本発明は、上述した7つのキーワードの組み合わせにより、図15に示すように多種多様な実施形態が想定される。
【0066】
キーワード1:圧縮命令が、固定長命令又は可変長命令を扱う。可変長の場合は、さらに命令の長さを判別するオペコードが特定のコードにのみ存在するか、あるいはすべてのコードに存在するかに分かれる。
【0067】
キーワード2:伸張後の命令が1命令か複数の命令か。複数の命令の場合には、さらに可変長命令で2語以上の長さのときだけその長さ分だけ複数になるか、圧縮命令コードの長さにかかわらず複数になるかに分かれる。
【0068】
キーワード3:圧縮命令コードと非圧縮命令コードを混在可能か、圧縮命令だけが使用可能か。混在の場合は、さらに非圧縮命令か圧縮命令かを識別する手段として、CPUからのアドレス、命令コードの一部、レジスタの値、あるいは外部からの信号に細分化される。
【0069】
キーワード4:CPUからのアクセスが命令フェッチかデータアクセスかを識別する方法として、上述した4つの方法が考えられる。
キーワード5:ブロック外にCPUのアドレスが命令フェッチで変化した場合には、そのブロックの伸張作業を継続するか中止するか。
【0070】
キーワード6:バッファメモリの再利用のための付加情報として、伸張された命令コードが格納済みであるか否かを示すレジスタとして、アドレス毎に有効ビットを設けるか、どのバッファメモリ内アドレスまで格納が完了しているかを示すレジスタをブロック毎に設けるか、あるいはブロックの最終アドレスまで格納が完了していることを示すレジスタをブロック毎に設けるか。
【0071】
キーワード7:伸張が最終アドレスまで完了していない場合は、先行して伸張作業を開始するか、要求があるまで放置するか。
【0072】
上記キーワードは、命令コード変換装置3をプログラムメモリ(外部メモリでも内蔵メモリでもよい)1をアクセスするメモリインタフェース2とCPU4との間に置いたものであったが、他の変形例として、命令コード変換装置3を命令キャッシュをアクセスする命令キャッシュインタフェースとCPU4との間に置く場合も実施できる。図1において、プログラムメモリ1を命令キャッシュ、メモリインタフェース1を命令キャッシュインタフェースと置き換えた場合である。
【0073】
内蔵プログラムメモリや命令キャッシュメモリを対象とする場合は、そのメモリインタフェースはバンド幅を上げる、すなわち一度に複数の圧縮命令コードを読み出せるようにすることで伸張の際のメモリの読み出しにかかる時間を短縮できるので、より伸張作業時間を大きく削減できる。
【0074】
外部プログラムメモリを対象とする場合において、命令キャッシュのリフィルサイズとバッファメモリのサイズを合わせると、ブロックの途中にある圧縮命令コードの伸張の際に、必ずブロックの先頭アドレスからCPUが命令フェッチ要求するので、伸張の際のメモリの読み出しペナルティが命令キャッシュのリフィルで隠れる。
【0075】
また、専用のバッファメモリではなく、二次キャッシュあるいは一次キャッシュをバッファメモリの代わりに使用するようにすれば、コスト/命令フェッチ時間の点でさらに有利となる。
【0076】
図10に示す構成では、16ビットの圧縮命令コードあたり、1つの32ビットのCPU命令コードに伸張する場合を説明した。コード効率をさらに上げるには、16ビットの圧縮命令コードあたり、1を越えるCPU命令コードに伸張する。CPUアドレスとメモリアドレスの関連づけの単純化を維持して、1を越えるCPU命令コードに伸張するには、サブルーチンコールを利用するのがよい。例えば32ビット長の1つの圧縮命令コードから4つのCPU命令コードを伸張したい場合は、サブルーチンコール命令とリターン命令を追加した6つのCPU命令コードに伸張する。サブルーチンはある限られたアドレス空間(命令コード変換装置が占有する予約領域とする)を使用する。
【0077】
具体的な例として、図16に示すように、プログラムメモリ1のビットセット処理を行う圧縮命令コードからサブルーチンコール命令+ロード命令+オア命令+リターン命令+ストア命令の5つのCPU命令に伸張する。最初の2つの命令(コール命令およびロード命令)は32ビットの圧縮命令コードの置かれていたアドレスに相当するバッファメモリに格納し、残る3命令はコールされたアドレスX番地から始まる3ワードのサブルーチン用メモリ(ROM)にあらかじめ格納しておく。このROMは命令コード変換装置3内に置かれる。アドレスXは圧縮命令コードと1対1に対応させておく。1対1に対応させることで、サブルーチンが実行途上に例外が検出された場合は、元の圧縮命令コードを読み出さないで、ROMから再開するアドレスにある命令コードを読み出してCPU4に返す。
【0078】
サブルーチン用メモリはROMでなくRAMで構成されてもよい。サブルーチン用メモリの容量は圧縮命令コードから展開される命令数分だけ最大必要となる。サブルーチン内で展開される命令が、単純な命令コードならばROMでなくロジックで組んでもよい。例えば前述のビットセット処理ならば、サブルーチンに置かれる3つの命令コードは、(a)オア命令:セットしたいビット位置にのみ1が立ち、残りが0となるイミディエイト(即値)を持つ命令コードとなり、この即値はアドレスXと1対1に対応するから簡単なロジックで構成できる。アドレスXのビット6〜4を即値と対応づけるとアドレスXのビット6〜4が000(2進数)の時、即値は0000000000000001(2進数)とする。即値以外の命令コードフィールドはオア命令として固定の値となる。例えばある命令コードの場合には、即値以外は0011010000100001(2進数)となる。(b)ストア命令:セットしたいメモリのアドレスを指定するためのオフセット値とベースレジスタ番号が上記(a)と同様、アドレスXに対応づけられていれば簡単なロジックで構成できる。図16に示す例ではベースレジスタはr0に限定している。(c)リターン命令:常に一定の命令コードなので、アドレスXから単純に生成される簡単なロジックで構成される。
【0079】
次に、この発明の実施形態をさらに詳細に説明する。
図17は図10に示す命令コード変換装置3を具体的に構成したシステム全体の一実施形態を示す図である。
【0080】
図17において、この情報処理システムは、複数の16ビット固定長の圧縮命令コードA1、A2、A3…および32ビット固定長の非圧縮命令コードB1、B2、B3…を格納したプログラムメモリ1(プログラムメモリ1は1つでも複数でもよい)と、プログラムメモリ1から命令コードを読み出すメモリインタフェース2と、圧縮命令コードを非圧縮命令コードに変換する命令コード変換装置3と、32ビット固定長の命令コードを実行できるCPU4とを備え、命令コード変換装置3は、CPU4から出力されるCPUアドレスCA4をデコードして、圧縮命令コード領域か非圧縮命令コード領域かを識別して領域判定信号S5を出力するアドレスデコーダ5と、アドレスデコーダ5によってCPUアドレスCA4が圧縮命令コード領域であると判定された場合は、CPUアドレスCA4を右へ1ビット(32ビット÷16ビット÷2=1ビット)シフトし、非圧縮命令コード領域であると判定された場合には、CPUアドレスCA4をそのままメモリインタフェース2に出力するアドレスシフタ6と、メモリインタフェース2を介してプログラムメモリ1から読み出された命令コードA1、A2、A3…またはB1、B2、B3…をアドレスデコーダ5のデコード結果(領域判定信号S5)に応じて圧縮命令コードである場合は、命令コードA1、A2、A3…に対応する命令コードC1、C2、C3…に変換して出力し、非圧縮命令コードである場合は、命令コードB1、B2、B3…をそのまま出力する命令コード変換回路7と、命令コード変換回路7で変換された命令コードC1、C2、C3…を格納するバッファメモリ8と、バッファメモリ8に格納される命令コードの変換前の命令コードが置かれていたプログラムメモリ1のメモリアドレスの上位ビットを記憶するブロックアドレス記憶レジスタ9と、バッファメモリ8の命令コード毎に設けられた有効ビットと、アドレスシフタ6の出力アドレスの上位ビットとブロックアドレス記憶レジスタ9に記憶されたアドレスとを比較する比較回路10と、バッファメモリ8からアドレスシフタ6の出力アドレスに対応したアドレス(アドレスシフタ6の出力アドレスの下位6ビット)から読み出された命令コードC1、C2、C3…と命令コードB1、B2、B3…とをアドレスデコーダ5のデコード結果に応じて選択する選択回路11と、アドレスシフタ6の出力アドレスの下位ビットに対応した有効ビットの出力とアドレスデコーダ5のデコード結果と比較回路10の比較結果(一致信号S10)とCPU4からのリード要求信号S4とから、メモリインタフェース2に対するメモリリード要求信号S12を生成するメモリリード要求制御回路12と、アドレスデコーダ5のデコード結果である領域判定信号S5とメモリリード要求制御回路12の出力であるメモリリード要求信号S12と比較回路10の出力である一致信号S10の値に応じて前記有効ビットの初期化、及びブロックアドレス記憶レジスタ9の書き込みを行う書き込み信号S13a、ならびにアドレスシフタ6の出力アドレスの下位ビットに対応するバッファメモリ8の有効ビットの書き込みを行う書き込み信号S13bを生成する制御回路13とを備えて構成される。プログラムメモリ1には、圧縮命令コードA1、A2、A3…が格納された領域と非圧縮命令コードB1、B2、B3…が格納された領域があり、CPU4からのCPUアドレスCA4の値で区分されている。
【0081】
次に、命令のフェッチから実行まてのシーケンスを、圧縮命令コード領域におけるアクセスのタイミングチャートを示す図18、ならびに非圧縮命令コード領域におけるアクセスのタイミングチャートを示す図19を参照して説明する。
【0082】
例えばCPU4から命令フェッチのためのCPUアドレスCA4は、32ビット出力され、そのアドレス範囲が00000000〜3FFFFFFF(16進数)のときは圧縮命令コードを使い、これ以外の範囲のときは非圧縮命令コードを使うものとする。図17に示すように、プログラムメモリ1の00000900番地から圧縮命令コードA1、A2、A3、A4…が、40000000番地から非圧縮命令コードB1、B2、B3…が、それぞれあらかじめ格納されているものとする。CPU4から命令フェッチのためのCPUアドレスCA4として、00001204が出力された場合は、アドレスデコーダ5は、CPUアドレスCA4の値が圧縮命令コード領域であることを判定し、アドレスシフタ6は、CPUアドレスCA4を1ビット右にシフトし、シフトしたアドレス00000902をメモリインタフェース2に出力し、メモリインタフェース2はシフトされたアドレス00000902をプログラムメモリ1に与える。プログラムメモリ1の00000902番地から圧縮命令コードA2が読み出され、メモリインタフェース2が圧縮命令コードA2を取り込み、命令コード変換回路7に渡す。CPUアドレスCA4の値が圧縮命令コード領域であるとアドレスデコーダ5が判定しているので、命令コード変換回路7は、圧縮命令コードA2に対応する32ビットの命令コードC2に変換する。命令コードC2はCPU4に渡されて、CPU4は命令コードC2を実行する。
【0083】
CPU4が命令コードC2を実行すると、CPUアドレスCA4を更新し、通常アドレス00001208が出力される。命令コードC2が分岐命令や例外発生命令などプロクラムの流れを変える命令であった場合は、その飛ひ先のアドレスが出力される。アドレス00001204のときと同様なシーケンスで、00001208に対応するアドレスから読み出された圧縮命令コードA3は、命令コードC3に変換されて実行される。
【0084】
次に、CPU4がCPUアドレスCA4として、アドレス40000000を出力した場合を説明する。アドレスデコーダ5は、CPUアドレスCA4の値が非圧縮命令コード領域であることを判定し、アドレスシフタ6は、CPUアドレスCA4をシフトせず、アドレス40000000のままメモリインタフェース2に出力し、メモリインタフェース2はアドレス40000000をプログラムメモリ1に与える。プログラムメモリ1のアドレス40000000番地から非圧縮命令コードB1が読み出され、メモリインタフェース2が取り込み、命令コード変換回路7に渡す。アドレス40000000は、アドレスデコーダ5により非圧縮命令コード領域と判定されているので、命令コード変換回路7は、非圧縮命令コードB1を変換せず、そのままCPU4に渡す。CPU4は命令コードB1を実行する。
【0085】
命令コードB1が分岐命令などプログラムの流れを変える命令でなけれは、CPU4はCPUアドレスCA4をアドレス40000000から+4した40000004を出力する。アドレス40000000のときと同様なシーケンスで非圧縮命令コードB2が読み出され、CPU4に変換されずに渡されて実行される。このようにCPU4は、既存の命令セットてある命令コードC1、C2、C3…あるいはB1、B2、B3…しか受け取らないため、圧縮命令コードA1、A2、A3の追加によって、CPU4を改変する必要は全くない。
【0086】
ブロックアドレス記憶レジスタ9は、アドレスシフタ6の出力であるメモリアドレスMA6の代わりにCPUアドレスCA4を記憶させてもよい。この場合には、比較回路10は、ブロックアドレス記憶レジスタ9の出力のブロックアドレスBA9とCPUアドレスCA4の上位ビットとを比較するように変える。
【0087】
選択回路11は、バッファメモリ8から読み出された命令コードOC8と命令コード変換回路7から出力される命令コードOC7とをアドレスデコーダ5の出力の領域判定信号S5で選択するマルチプレクサで構成してもよい。また、メモリリード要求制御回路12の出力であるメモリリード要求信号S12に応じて図20に示すようにマルチプレクサで構成してもよい。
【0088】
バッファメモリ8は、命令コード変換された命令コードが格納されている場合に、再度プログラムメモリ1から圧縮命令コードA1、A2、A3…を読み出さず、バッファメモリ8から読み出すことで、命令コードC1、C2、C3…をCPU4に速やかに返すことを目的とする。バッファメモリ8にCPU4から要求された命令コードが格納済みであるかを判断するため、プログラムメモリ1はあるサイズ(例えば16ビット長の命令で32命令分)のブロックに分割され、そのブロックのアドレスの上位ビット(この実施形態では32ビット−6ビット=26ビット)をブロックアドレス記憶レジスタ9に格納する。格納するか否かは、まず格納前にブロックアドレス記憶レジスタ9の出力であるブロックアドレスBA9とアドレスシフタ6の出力のメモリアドレスMA6の上位ビットとを比較回路10で比較し、不一致ならばブロックアドレス記憶レジスタ9にブロックのアドレスの上位ビットを格納するとともに有効ビットの内アドレスシフタ6の出力のメモリアドレスMA6の下位ビット(この実施形態では6ビット)で指定されるビットを“1”に、他のビットをすべて“0”に設定する。なお、ブロックアドレス記憶レジスタ9と有効ビットの書き込みはメモリインタフェース2を介して命令コードを読み出して変換を行い、バッファメモリ8へ書き込む際に行う。一方、一致ならば、ブロックアドレス記憶レジスタ9への格納は行っても行わなくともよいが、有効ビットは以下のように処理する。有効ビットが既に“1”になっている場合は、バッファメモリ8に変換後の命令コードが格納されているからメモリインタフェース2へはメモリリード要求を行わず、バッファメモリ8からアドレスシフタ6の出力のメモリアドレスMA6の下位ビットで指定されるアドレスから命令コードを読み出し、CPU4に渡す。なお、処理時間の短縮を図るために有効ビットのチェックと同時にバッファメモリ8の読み出しを開始する。有効ビットが“0”ならばバッファメモリ8から読み出した命令コードは捨てる。一方、有効ビットが“0”の場合には、メモリインタフェース2に対してメモリリード要求を行い、メモリインタフェース2を介して読み込まれた命令コードが変換され、バッファメモリ8に書き込む際に、有効ビットを“1”に書き換える。
【0089】
上記実施形態において、コード効率をさらに上げるため、命令コード変換装置3によって圧縮命令コードを使用する領域をプログラマブルに設定てきる1つ以上の領域設定用レジスタを追加して、非圧縮命令コードで格納されるメモリ領域と圧縮命令コードで格納されるメモリ領域を連続させるようにしてもよい。この場合には、アドレスデコーダ5はアドレス00000000から3FFFFFFFの固定アドレス空間のデコードではなく、上記領域設定レジスタの内容とCPUアドレスCA4とを比較するデコードとなる。
【0090】
なお、初期化プログラムが圧縮命令コードを使えないようにするには、上記領域設定レジスタのデフォルト値を、リセットハンドラプログラム領域を含まないようにするか、あるいは別の初期化用レジスタを追加し、この初期化用レジスタの内容で圧縮命令コードの許可/禁止を行い、かつ圧縮命令コード許可レジスタの初期値を“禁止”に設定する。CPU4がデバツグモードの際は、上記圧縮命令コード許可レジスタによって圧縮命令コードの禁止を行い、かつプログラムメモリ1には圧縮前の命令コードを置くことで、デバッグ装置やデバッガは既存のものを流用することが可能となる。
【0091】
プログラムメモリ1に圧縮命令コードを置いてデバッグする際には、デバッガの負担を軽減するために、圧縮前の命令コードをCPU4を使ってプログラムメモリ1に書き込む際、命令コード変換装置3に圧縮処理(すなわち、与えられた命令コードを命令コードを圧縮命令コードに変換する)を行う命令コード逆変換回路を付加してもよい。
【0092】
次に、先の実施形態に対してさらにコード効率を上げるため、図17に示す構成の命令コード変換装置3の構成を変え、圧縮命令コードとして16ビット固定長ではなく、16ビット/32ビットの可変長を導入した実施形態を、新たな命令コード変換装置30の構成を含むシステム全体の構成を示す図21及び図22を参照して説明する。なお、図21に示す構成と図22に示す構成は、※1、※2で示す箇所で連結されているものとする。
【0093】
32ビット長の圧縮命令コードは、上位16ビットIH1、IH2、IH3、…と下位16ビットIL1、IL2、IL3…から構成されているものとする。IH1とIL1がペアとなって1つの32ビット長の命令コードとなる。また、32ビット長の圧縮命令コードに対応するCPU4の命令コードペア(32ビット×2命令)はDH1/DL1、DH2/DL2、DH3/DL3…とする。16ビット長の圧縮命令コードA1、A2、A3…に対応するCPU4の命令コードは、前記実施形態と同様の命令コードC1、C2、C3…とする。圧縮命令コードは、32ビット長の上位16ビットのコードの上位6ビット、または16ビット長のコードの上位6ビットを使ってビット長が識別できるものとする。例えば上位6ビットが000000〜000011,010011(2進数)の場合は32ビット長、000100〜010010,011000の場合は16ビット長とする。命令コード例は、前述した図5に示す。
【0094】
プログラムメモリ1の圧縮命令コード領域は、例えば16ビット長で32命令単位のブロックに分割され、32ビット長の圧縮命令コードがブロックをまたがないよう、またデータがブロック内に置かれないよう前述した圧縮ソフトウエアによりオブジェクトが生成され、プログラムメモリ1にあらかじめ格納されているものとする。この実施形態の命令コード変換装置30は、前述した実施形態の命令コード変換装置3に比べて、1つのバッファメモリ8に代えて2つのバッファメモリ8a、8bとし、1つのブロックアドレス記憶レジスタ9に代えて2つのブロックアドレス記憶レジスタ9a、9bとし、メモリインタフェース2に与えるアドレスMA14を生成するアドレスジェネレータ14と、上位コード記憶レジスタ16a、16bの内容をバッファメモリ使用指定レジスタ27の出力S27で選択する選択回路17、コード長記憶レジスタ19a、19bの内容をバッファメモリ使用指定レジスタ27の出力S27で選択する選択回路20、バッファメモリ8a、8bの内容をバッファメモリ使用指定レジスタ27の出力S27で選択する選択回路22、上位コード記憶レジスタ16a、16bの書き込み信号S15a、S15bを生成する制御回路15、選択回路11の選択信号S21を生成する制御回路21、有効アドレス記憶レジスタ24a、24bのリセット信号S23a、S23b、及びカウントアップ信号S23c、S23dとアドレスジェネレータ14のカウントアップ信号S23eとを生成する制御回路23、有効アドレス記憶レジスタ24a、24bの内容SA24a、SA24bをバッファメモリ使用指定レジスタ27の出力S27で選択する選択回路25、選択回路25の出力A25とアドレスシフタ6の出力アドレスMA6の下位ビットとを大小比較する比較回路26、ブロックアドレス記憶レジスタ9a、9bの内容アドレスBA9a,BA9bとアドレスMA6の上位ビットとが一致しているかをチェックする比較回路10a、10b、メモリインタフェース2を介して読み込まれた命令コードOC2が32ビット長の圧縮命令コードの上位16ビットであった場合にこれを記憶する上位コード記憶レジスタ16a、16b、メモリインタフェース2を介して読み込まれた命令コードOC2が16ビット長の圧縮命令コードか32ビット長の圧縮命令コードかを検出するコード長検出回路18、メモリインタフェース2を介して読み込まれた命令コードOC2が16ビット長の圧縮命令コードか32ビット長の圧縮命令コードかを記憶するコード長記憶レジスタ19a、19b、バツファメモリ8a、8bのどこまでコード変換されて格納されているかを示す有効アドレス記憶レジスタ24a、24b、どのバッファメモリ8a、8bを次回使用するかを記憶するバッファメモリ使用指定レジスタ27を備えて構成される。
【0095】
プログラムメモリ1の圧縮命令コード領域は、16ビット×32命令=512ビット(64バイト)単位のブロックに分割されているので、バッファメモリ8a、8bのサイズは、それぞれ32ビット×32命令=1024ビット(128バイ卜)となる。有効アドレス記憶レシスタ24a、24bは、例えばその値が“0”のときはバッファメモリ8a、8bに有効な(コード変換済み)の命令コードか格納されていないことを示し、1命令コードがバッファメモリ8a、8bに格納される毎に前記カウントアップ信号S23c、S23dによって+2される。したがって、1ブロック分32命令がすべて格納されると、32×2=64(10進数)が有効アドレス記憶レシスタ24a、24bにセットされる。バッファメモリ使用指定レジスタ27の内容が、例えば“0”のときバッファメモリ8a、ブロックアドレス記憶レシスタ9a、有効アドレス記憶レジスタ24a、コード長記憶レジスタ19aが選択されるものとする。
【0096】
次に、命令コードの読み出しからCPU4による命令実行のシーケンスを説明する。
【0097】
CPU4が圧縮命令コードを格納した領域のプログラムメモリ1をアクセスしようとすると、CPU4からのCPUアドレスCA4からアドレスデコーダ5によって圧縮命令コード領域であると判定されると、アドレスシフタ6によってCPUアドレスCA4を右に1ビットシフトしたアドレスMA6を出力する。バッファメモリ8a、8bのサイズに対応したブロックの上位アドレスとなる前記アドレスMA6の上位ビット(この例では32ビット−6ビット=26ビット)が、各バッファメモリ8a、8bに対応するブロックアドレス記憶レジスタ9a、9bの内容と一致しているか否かがチェックされる。一致していた場合は、一致した方のバッファメモリ側の有効アドレス記憶レジスタ24a、24bの内容をチェックし、有効アドレス記憶レジスタ24a、24bの内容が“0”の場合、あるいはブロツクアドレス記憶レジスタ9a、9bがともに不一致の場合は、前記ブロックの先頭アドレスから圧縮命令コードを読み出すべく、アドレスジェネレータ14の出力であるメモリアドレスMA14を前記ブロックの先頭アドレスに設定し、メモリインタフェース2に前記ブロックの先頭アドレスを与え、プログラムメモリ1から圧縮命令コードIH1、IH2、IH3…、あるいは圧縮命令コードA1、A2、A3…を読み込む。
【0098】
バッファメモリ使用指定レジスタ27の内容で選ばれたブロツクアドレス記憶レジスタ9a、9bのいずれかに、前記ブロックの先頭アドレスを書き込むとともに、バッファメモリ使用指定レジスタ27の内容で選ばれた有効アドレス記憶レジスタ24a、24bのいずれかを“0”にクリアする。読み込まれた圧縮命令コードの上位6ビットをコード長検出回路18で16ビット長か32ビット長かを判定し、バッファメモリ使用指定レジスタ27の内容て選ばれたコード長記憶レジスタ19a、19bに判定結果をセットする。判定結果は、例えば16ビット長のときは00(2進数)、32ビット長のときは10(2進数)とする。コード長記憶レジスタ19a、19bは、16ビット長の命令コードを処理中が“00”、32ビット長の命令コードの上位16ビットを処理中が“10”、下位16ビットの処理中が“11”となるものとする。
【0099】
16ビット長の圧縮命令コード(A1、A2、A3…)であった場合は、直ちに命令コード変換回路7でコード変換され、バッファメモリ使用指定レジスタ27の内容で選ばれたバッファメモリ8a、8bのいずれかに格納される。格納されると、バッファ使用レジスタ27て選ばれた有効アドレス記憶レジスタ24a、24bのいずれかは+2される。32ビット長の圧縮命令コード(IH1、IH2、IH3…)であった場合には、バッファメモリ使用指定レジスタ27の内容で選ばれた上位コード記憶レジスタ16a、16bのいずれかに上位コード(IH1、IH2、IH3…)を記憶し、またバッファメモリ使用指定レジスタ27の内容で選ばれたコード長記憶レシスタ19a、19bの内容を“00”から“10”に更新するとともに、下位16ビット分の命令コードを読み出すために、ブロック先頭アドレスに+2したアドレスをアドレスジェネレータ14によって生成し、メモリインタフェース2を介してプログラムメモリ1をアクセスする。プログラムメモリ1から下位16ビットの圧縮命令コード(IL1、IL2、IL3…)を読み出し、命令コード変換回路7に与える。
【0100】
命令コード変換回路7は、先に読み出した上位16ビットの命令コードと後で読み出した下位16ビットの命令コードを連結した32ビットの圧縮命令コードを、少なくとも2つの32ビット長のCPU命令コード(命令コードペアDH1/DL1、DH2/DL2、DH3/DL3…の中から選択される)に変換し、バッファメモリ使用指定レジスタ27の内容で選ばれたバッファメモリ8a、8bの2ワードに格納する。格納とともにバッファ使用レジスタ27て選はれた有効アドレス記憶レジスタ24a、24bのいずれかは+4される。
【0101】
CPU4が命令フェッチのために要求したアドレスを右に1ビットシフトしたアドレスの下位6ビット値(バッファメモリ8a、8bのサイズが32命令分であるため)と、バッファメモリ使用指定レジスタ27て選ばれた有効アドレス記憶レジスタ24a、24bの内容との比較を比較回路26が行い、6ビット値がバッファメモリ使用指定レジスタ27の内容で選ばれた有効アドレス記憶レジスタ24a、24bの内容より小さくなるまで、アドレスジェネレータ14は生成アドレスを+2づつ更新し、メモリインタフェース2を介してプログラムメモリ1から圧縮命令コードの読み出し、命令コード変換回路7による命令コードの変換、バッファメモリ8a、8bへの格納、有効アドレス記憶レジスタ24a、24bの更新を繰り返し行う。
【0102】
上記6ビットの値が有効アドレス記憶レジスタ24a、24bの内容より小さくなると、CPU4の要求した命令が読み込まれ、変換されてバッファメモリ8a、8bに格納されたこととなるので、直ちに変換された命令コードを、命令コード変換回路7からCPU4に渡し、実行させる。命令実行と並行して、1ブロック分の圧縮命令コードの読み出し、命令コード変換、バッファメモリ8a、8bヘの格納を継続する。CPU4が命令を実行すると、CPUアドレスCA4が更新される。CPUアドレスCA4が命令コード変換途上あるいは変換完了のブロック内のアドレスであるか否かを、CPUアドレスCA4を右に1ビットシフトするアドレスシフタ6の出力の上位ビット(下位6ビット以外のビット)と、ブロックアドレス記憶レジスタ9a、9bとを比較して判断し、一致していればブロック内と判断され、バッファメモリ使用指定レジスタ27の値を一致した方のバッファメモリ8a、8b側を示す値にセットする。不一致ならばブロック外に飛び出したこととなり、最後に使用したバッファメモリ8a、8bでない方のバッファメモリ8a、8b側を示す値として、バッファメモリ使用レシスタ27を更新する。
通常は、CPU4が実行する命令は、プログラムの流れが変わらないため、CPU4の要求する命令は既にバッファメモリ8a、8bに格納されているコードが多く、格納済みであるコードを有効アドレス記憶レジスタ24a、24bから判定して、メモリインタフェース2にアクセス要求を出さずに、すなわちプログラムメモリ1から再び圧縮命令コードを読み出さず、バッファメモリ8a、8bからCPU4に伸張された命令コードを返す。CPU4が分岐命令を実行したり、例外を検出すると、プロクラムの流れが変わりブロック外に飛び出すことがある。ブロック外に飛び出した場合には、飛び先の命令フェッチをすみやかに始められるよう、変換途上のブロックの命令読み出し/命令コード変換/バッファメモリ8a、8bへの格納を直ちに中止させる。中止しても既に変換された命令コードはバッファメモリ8a、8bがオーバーライトされない限り残っているので、再びこのブロックに戻ってきた場合の伸張作業は途中から再開できるので、伸張にかかる時間を短縮できる。この短縮をより効果的にするために、バッファメモリとして、サブルーチン用、例外ルーチン用を追加してもよい。本実施例ては、これらのバッファモリは省略しているが、バッファメモリは少なくとも6ブロック分あることが望ましい。
【0103】
命令コード変換回路7は、32ビット長の圧縮命令コードの変換に際し、一方をNOP命令コードする場合、上位16ビットIH1、IH2、IH3…であることを、上位16ビットコードの一部ビットから認識すると、命令コード変換回路7はNOP命令コードを発生し、バッファメモリ8a、8bに格納する。後続の32ビット長の圧縮命令コードの下位16ビットIL1、IL2、IL3をプログラムメモリ1から読み出し、命令コードDL1、DL2、DL3…にコード変換し、バッファメモリ8a、8bに格納する。例えばプログラムメモリ1の2番地、4番地に、32ビット長の圧縮命令コードの上位16ビットIH1、下位16ビットIL1が格納されていたとすると、バッファメモリ8a、8bの4番地にNOP命令コードを、8番地に命令コードDL1を格納する。
【0104】
なお、NOP命令コードと命令コードDL1とを逆にバッファメモリ8a、8bに格納してもよい。すなわちNOPから実行されてもよいし、NOPが後で実行されてもよい。この選択はCPU4のアーキテクチャで決めればよい。また、前後の命令との関係で、動的にNOP命令コードを先に実行するように変換したり、後に実行するように変換してもよい。また、32ビット長の圧縮命令コードによっては、一方をNOPに伸張するのてはなく、2つの32ビット長のCPU命令コードDH1、DL1に伸張することで、さらにコード効率を上けることが可能となる。
【0105】
上記実施形態では、32ビット長の命令コードは、ブロック境界をまたがないようオブジェクト生成の際に制約を持たせることを前提とした実施形態を説明したが、この発明のさらに他の実施形態として、ブロックに対応したプログラムメモリにブロックに格納されている命令が16ビット長なのか32ビット長なのか表す情報をプログラムとは別に持たせてもよい。この場合には、ブロック境界をまたぐことも可能である。例えば16ビット長ならば“0”、32ビット長の上位16ビットならば同じく“0”、下位16ビットならば“1”とする32ビットの情報をプログラムメモリにおいて、伸張に先立ち、この情報を読み出せば、ブロック境界で32ビット長のコードがまたいでいる場合に、そのブロックの先頭の情報が“1”となっているので認識できる。また、例外からの復帰で32ビット長のコードの下位16ビットから再開しようとしていることも情報が“1”となっていることから認識でき、直前のアドレスから32ビット長の上位16ビットを読み出せばよいことがわかり、ブロックの先頭から読み出すというペナルティはなくなる。ただし、32命令(16ビット×32命令=64バイト)毎に32ビット(4バイト分)プログラムメモリを消費する。すなわち、元々32ビット×32命令=128バイトがワースト4バイト増えた132バイト、ベスト64バイト+4バイト=68バイトとなる。
【0106】
この情報ペナルティをさらに低減するため、16ビット長なら00又は01、32ビット長の上位16ビットは10、下位16ビットは11と各2ビット化した情報とし、かつ16ビット長と32ビット長のオペコードを同一のものを使うことができる(16ビット長か32ビット長かの区別は、この2ビットの情報で行うことができるため)ことを利用して、16ビット長の命令を増やし、ほとんど16ビット長の命令コードにオブジェクトが生成できれば、プログラムはブロックあたり64バイト+8バイト=72バイトに近づく。したがって、72/128=56.25%ピークのコード効率が得られる。
【0107】
前記命令コードのビット長を表す情報を命令コードの一部ととらえると、前述の「どの位置でもビット長を識別できるエンコード方式」(図7参照)に相当する。
【0108】
このように、上記実施形態においては、CPUアドレスとプログラムメモリアドレスとの対応を単純化することで、アドレス変換のためのインデックステーブルなとを持つ必要はなく、単純に右へ1ビットシフトするだけてあるため、コスト/伸張時間の点において優れている。また、シフト回路は、マルチプレクサで構成可能で、そのアドレス変換は1ns未満となり、一方従来のインデックステーブルの場合にはメモリの種類にもよるが、数nsから数百nsかかることになる。
【0109】
さらに、CPUが応用されるシステムによってプログラムは異なるため、多用される命令コードも異なり、本発明は、CPUの外部で命令コードを変換するので、応用システムに合わせて異なる圧縮命令セットを用意することも、CPUを改変するよりはるかに容易に、よりコード効率の高い命令セットをインプリメントできる。
【0110】
命令コード変換装置3、30の命令コード変換装置7に、コード変換テーブルメモリを付加し、このメモリに予め圧縮前の命令コードと圧縮後の命令コードの対応情報を書き込んでおき(例えば、このメモリがマスクROMであった場合は、マスクROMの製造工程で書き込み、SRAMやフリップフロップなど書き換えできる場合は、CPU4からデータとして書き込めるようにしておき、圧縮命令コード実行に先立って書き込みを行う)、伸張の際、一部又はすべての圧縮コードをこのメモリに書き込まれた対応情報に基づき命令コード変換を行う。このような構成をとることで、プログラムに応じて最も多用される命令コードをより短い圧縮命令コードに割り当てることが可能となり、よりコード効率を改善することが容易に実現できる。
【0111】
また、実行時間よりもコード効率を上げてプログラムメモリ容量を削減することができる。このような削減が要求される応用システムとして、例えばCPUチップの扱うことができるプログラムメモリ空間を越える容量を必要とする応用システムに好適である。例えばCPUは32ビットのプログラムアドレスを持つがCPUチップとしては28ビット分しか外部にアドレスを出力しない場合に、28ビット分のアドレス空間を越えたプログラムが必要な応用で、圧縮することで28ビット分のアドレス空間に収まる場合などである。
【0112】
また、プログラムメモリにコストの高いメモリを使用する応用システムでは、メモリコストを削減することによりシステム全体のコストを削減できる。コード効率の向上により、プログラムメモリチップの個数が削減され、応用システムのコストが低減でき、プログラムメモリチップ自身のコストだけでなく、アセンブリ/テスト/基板/配線などのコストも削減できる。さらに、コード効率の向上により、プログラムメモリチップが減少し、応用システムの実装容積が削減できる。内蔵プログラムメモリの場合には、CPUチップに内蔵プログラムメモリ容量を越えることは回避され、内蔵プログラムメモリ容量が低減され、チップサイズは縮小可能となり、パッケージの小型化も可能となる。また、チップサイズの縮小により信頼性/性能を向上させることもできる。
【0113】
一方、プログラムメモリとのバス幅に制約があるが、実行時間は上げたいというような応用システムに好適である。例えば16ビットバスでプログラムメモリに接続されたシステムにおいて、非圧縮命令コードが32ビット長である場合は、32ビットの命令コードを読み出すのに2回のバスサイクルがかかる。圧縮命令コードを16ビット長にすれば1回のバスサイクルで読み出させるので、実行時間が短縮できる。
【0114】
【発明の効果】
以上説明したように、この発明によれば、CPUを新規設計/改変することなく、命令の追加を実現してコード効率を向上させ、命令を格納するプログラムメモリの容量を削減できる命令コード変換装置、命令コード生成方法ならびに情報処理システムを提供することができる。
【図面の簡単な説明】
【図1】本発明の一実施形態に係る情報処理システムの構成を示す図である。
【図2】CPUアドレスとプログラムメモリとのアドレス対応関係を示す図である。
【図3】CPUアドレスとプログラムメモリとのアドレス対応関係を示す図である。
【図4】圧縮命令コードの例を示す図である。
【図5】命令コードの一例を示す図である。
【図6】命令コードの圧縮手順を示す図である。
【図7】命令コードのエンコード方式を示す図である。
【図8】プログラムメモリにおける例外復帰後の再開を実行する際の格納例を示す図である。
【図9】ブロック概念の有無における、プログラムメモリにおける例外復帰後の再開を実行する際の格納例を示す図である。
【図10】本発明の一実施形態に係る情報処理システムの構成を示す図である。
【図11】プログラムメモリとバッファメモリとの対応関係を示す図である。
【図12】図11におけるブロック境界の制約を示す図である。
【図13】バッファメモリと付加情報レジスタ群との対応関係を示す図である。
【図14】アドレス空間の分割とバッファメモリとの関係を示す図である。
【図15】本発明のキーワードの組み合わせを示す図である。
【図16】サブルーチン用メモリに展開される圧縮命令コードの一例を示す図である。
【図17】本発明の一実施形態に係る情報処理システムの構成を示す図である。
【図18】図17に示すシステムの一タイミングチャートを示す図である。
【図19】図17に示すシステムの他のタイミングチャートを示す図である。
【図20】図17に示す選択回路11をマルチプレクサで構成した場合の選択例を示す図である。
【図21】本発明の他の実施形態に係る情報処理システムの構成を示す図である。
【図22】本発明の他の実施形態に係る情報処理システムの構成を示す図である。
【図23】従来のコード効率を上げる方法におけるアドレスの対応関係を示す図である。
【符号の説明】
1 プログラムメモリ
2 メモリインタフェース
3 命令コード変換装置
4 CPU
5 アドレスデコーダ
6 アドレスシフタ
7 命令コード変換回路
8,8a,8b バッファメモリ
9,9a,9b ブロックアドレス記憶レジスタ
10,10a,10b,26 比較回路
11,17,20,22,25 選択回路
12 メモリリード要求制御回路
13,15,21,23 制御回路
14 アドレスジェネレータ
16a、16b 上位コード記憶レジスタ
18 コード長検出回路
19a、19b コード長記憶レジスタ
24a、24b 有効アドレス記憶レジスタ
27 バッファメモリ使用指定レジスタ
Claims (6)
- 外部から与えられる第1のアドレスでアクセスするアドレス空間が、圧縮命令を格納する圧縮命令格納領域又は非圧縮命令を格納する非圧縮命令格納領域であるかを識別する識別手段と、
外部から与えられる前記識別手段の前記圧縮命令格納領域と前記非圧縮領域とをそれぞれ任意のアドレスに設定するレジスタと、
1つのメモリ内に前記圧縮命令格納領域と前記非圧縮命令格納領域の2つの領域があり、前記メモリをアクセスするために、これらの2つの領域にそれぞれ対応する第2のアドレスを前記識別手段の結果に基づいて、生成するアドレス生成手段と、
前記第2のアドレスで前記メモリをアクセスし、前記メモリから読み出された命令コードを前記識別手段の結果に基づいて、前記圧縮命令格納領域である場合には伸張変換し、あるいは前記非圧縮命令格納領域である場合には無変換する命令コード変換回路と
を有することを特徴とする命令コード変換装置。 - 外部から与えられる第1のアドレスでアクセスするアドレス空間が、圧縮命令を格納する圧縮命令格納領域又は非圧縮命令を格納する非圧縮命令格納領域であるかを識別する識別手段と、
1つのメモリ内に前記圧縮命令格納領域と前記非圧縮命令格納領域の2つの領域があり、前記メモリをアクセスするために、これらの2つの領域にそれぞれ対応する第2のアドレスを前記識別手段の結果に基づいて、生成するアドレス生成手段と、
前記第2のアドレスで前記メモリをアクセスし、前記メモリから読み出された命令コードを前記識別手段の結果に基づいて、前記圧縮命令格納領域である場合には伸張変換し、あるいは前記非圧縮命令格納領域である場合には無変換する命令コード変換回路と
を有し、
前記圧縮命令領域と前記非圧縮命令領域は、メモリ・マネージメント・ユニットを用いて物理アドレス空間をプログラマブルに分割されたページ単位に割り当てられていることを特徴とする命令コード変換装置。 - 前記圧縮命令コードは、mビット固定長、又はmビット/n(n≧m)ビット可変長とし、前記非圧縮命令コードはnビット固定長とする
ことを特徴とする請求項1又は2に記載の命令コード変換装置。 - 前記命令コード変換回路により伸張変換された非圧縮命令コードを格納するバッファメモリと、
前記バッファメモリに格納されたアドレスの連続する複数個の前記非圧縮命令コードを1ブロックとして、そのブロックの先頭アドレスである前記第1のアドレス又は第2のアドレスの上位ビットを格納するブロックアドレス記憶レジスタと、
前記ブロックアドレス記憶レジスタに格納したアドレスと同じビット数の前記第1又は第2のアドレスの上位ビットと、前記ブロックアドレス記憶レジスタに格納されたアドレスを比較する比較回路と、
前記識別手段の結果に基づいて、非圧縮命令格納領域の場合には、前記命令コード変換回路から出力された無変換の非圧縮命令コードを選択し、圧縮命令格納領域の場合には、前記比較回路の結果に基づいて、前記アドレスが一致の場合には前記バッファメモリに格納済みの前記非圧縮命令コードを前記バッファメモリから出力する非圧縮命令コード、あるいは前記アドレスが不一致の場合には前記命令コード変換回路で伸張変換された非圧縮命令コードを前記バッファメモリに格納するとともに出力する非圧縮命令コードを選択する選択回路と
を有することを特徴とする請求項1,2及び3のいずれか1項に記載の命令コード変換装置。 - 前記バッファメモリは、さらに前記非圧縮命令コードが前記ブロックの何番目まで格納されているかを示す有効アドレス記憶レジスタを有し、
前記有効アドレス記憶レジスタのビット数と同じビット数の前記第1又は第2のアドレスの下位ビットより前記有効アドレス記憶レジスタの内容が大きく、かつ前記比較回路の結果が一致の場合は、前記バッファメモリから前記非圧縮命令コードを出力し、それ以外の場合は、前記有効アドレス記憶レジスタのビット数と同じビット数の前記第1又は第2のアドレスの下位ビットより前記有効アドレス記憶レジスタの内容が大きくなるまで前記命令コード変換回路で伸張変換された非圧縮命令コードを前記バッファメモリに格納して前記有効アドレス記憶レジスタの内容を更新し、前記有効アドレス記憶レジスタの内容が前記第1又は第2のアドレスより大きくなった時点での非圧縮命令コードを前記選択回路に出力すること特徴とする請求項4記載の命令コード変換装置。 - 前記請求項1,2,3,4及び5のいずれか1項に記載の命令コード変換装置と、
前記圧縮命令コード及び非圧縮命令コードを格納するメモリと、
前記命令コード変換装置と前記メモリとの間に置かれ、前記命令コード変換装置から出力されたメモリアドレスとメモリリード要求信号に従い、前記メモリをアクセスし、前記メモリから前記圧縮命令コード又は非圧縮命令コードを読み出し、前記命令コード変換装置に出力するメモリインタフェースと、
前記命令コード変換装置と接続され、前記命令コード変換装置に実行すべき命令を読み出すためのCPUアドレスとリード要求信号を前記命令コード変換装置に出力し、前記CPUアドレスは前記命令コード変換装置で前記メモリアドレスに変換され、また、前記リード要求信号は前記命令コード変換装置で前記メモリリード要求信号を生成し、前記メモリインタフェース経由で受け取った前記圧縮命令コード又は非圧縮命令コードを前記命令コード変換装置で変換した命令コードを受信して実行するCPUと
を有することを特徴とする情報処理システム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000030948A JP3556556B2 (ja) | 2000-02-08 | 2000-02-08 | 命令コード変換装置及び情報処理システム |
US09/778,069 US6801996B2 (en) | 2000-02-08 | 2001-02-07 | Instruction code conversion unit and information processing system and instruction code generation method |
EP01301062.4A EP1124180B1 (en) | 2000-02-08 | 2001-02-07 | Information processing system with instruction code conversion unit, and instruction code generation method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000030948A JP3556556B2 (ja) | 2000-02-08 | 2000-02-08 | 命令コード変換装置及び情報処理システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001222426A JP2001222426A (ja) | 2001-08-17 |
JP3556556B2 true JP3556556B2 (ja) | 2004-08-18 |
Family
ID=18555890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000030948A Expired - Fee Related JP3556556B2 (ja) | 2000-02-08 | 2000-02-08 | 命令コード変換装置及び情報処理システム |
Country Status (3)
Country | Link |
---|---|
US (1) | US6801996B2 (ja) |
EP (1) | EP1124180B1 (ja) |
JP (1) | JP3556556B2 (ja) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7028286B2 (en) * | 2001-04-13 | 2006-04-11 | Pts Corporation | Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture |
JP2003108367A (ja) * | 2001-09-27 | 2003-04-11 | Yamaha Corp | プログラムメモリ削減方法およびプログラムメモリ読出回路 |
US7278137B1 (en) * | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
US6912649B2 (en) * | 2002-03-13 | 2005-06-28 | International Business Machines Corporation | Scheme to encode predicted values into an instruction stream/cache without additional bits/area |
US7398276B2 (en) * | 2002-05-30 | 2008-07-08 | Microsoft Corporation | Parallel predictive compression and access of a sequential list of executable instructions |
US6907516B2 (en) * | 2002-05-30 | 2005-06-14 | Microsoft Corporation | Compression of program instructions using advanced sequential correlation |
GB2400198B (en) * | 2003-04-04 | 2006-04-05 | Advanced Risc Mach Ltd | Controlling execution of a block of program instructions within a computer processing system |
GB2402763B (en) * | 2003-06-13 | 2006-03-01 | Advanced Risc Mach Ltd | Data access program instruction encoding |
US20040252687A1 (en) * | 2003-06-16 | 2004-12-16 | Sridhar Lakshmanamurthy | Method and process for scheduling data packet collection |
TWI224281B (en) * | 2003-07-16 | 2004-11-21 | Sunplus Technology Co Ltd | A processor executing script with different length and method thereof |
WO2005103922A2 (en) * | 2004-03-26 | 2005-11-03 | Atmel Corporation | Dual-processor complex domain floating-point dsp system on chip |
US7278122B2 (en) * | 2004-06-24 | 2007-10-02 | Ftl Systems, Inc. | Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization |
US7676799B1 (en) * | 2005-06-10 | 2010-03-09 | Sun Microsystems, Inc. | Address simplification by binary transformation |
US20070226724A1 (en) * | 2006-03-24 | 2007-09-27 | Mediatek Inc. | Method and apparatus for firmware execution and provision |
CN101398752B (zh) * | 2007-09-29 | 2011-08-31 | 国际商业机器公司 | 重叠指令存取单元和重叠指令存取方法 |
US20100023733A1 (en) * | 2008-04-15 | 2010-01-28 | Vns Portfolio Llc | Microprocessor Extended Instruction Set Precision Mode |
CN102057359A (zh) * | 2009-04-10 | 2011-05-11 | 松下电器产业株式会社 | 高速缓冲存储器装置、高速缓冲存储器控制方法、程序及集成电路 |
US20110072238A1 (en) * | 2009-09-20 | 2011-03-24 | Mimar Tibet | Method for variable length opcode mapping in a VLIW processor |
EP2668565B1 (en) * | 2011-01-27 | 2019-11-06 | Intel Corporation | Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor |
WO2012103245A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines Inc. | Guest instruction block with near branching and far branching sequence construction to native instruction block |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012103373A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Variable caching structure for managing physical storage |
WO2012103253A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
US9201652B2 (en) | 2011-05-03 | 2015-12-01 | Qualcomm Incorporated | Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy |
US10120692B2 (en) | 2011-07-28 | 2018-11-06 | Qualcomm Incorporated | Methods and apparatus for storage and translation of an entropy encoded instruction sequence to executable form |
US20140115304A1 (en) * | 2012-10-18 | 2014-04-24 | Synopsys, Inc. | Compressed instruction code storage |
TWI584197B (zh) * | 2013-01-25 | 2017-05-21 | 凌通科技股份有限公司 | 程式碼之動態產生系統及其方法 |
WO2014151691A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | Method and apparatus for guest return address stack emulation supporting speculation |
WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
JP2015049832A (ja) | 2013-09-04 | 2015-03-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム |
US9372696B2 (en) * | 2013-10-18 | 2016-06-21 | Via Technologies, Inc. | Microprocessor with compressed and uncompressed microcode memories |
KR102143521B1 (ko) | 2014-04-21 | 2020-08-11 | 삼성전자 주식회사 | 불휘발성 메모리 시스템, 이를 포함하는 메모리 카드 및 불휘발성 메모리 시스템의 동작방법 |
US9910787B2 (en) * | 2014-06-05 | 2018-03-06 | Micron Technology, Inc. | Virtual address table |
US9928066B2 (en) * | 2015-06-25 | 2018-03-27 | Intel Corporation | Instruction and logic for encoded word instruction compression |
US10621353B2 (en) * | 2016-12-28 | 2020-04-14 | Intel Corporation | Firmware loading for exploit resistance |
CN107562442B (zh) * | 2017-09-22 | 2020-03-17 | 广州酷狗计算机科技有限公司 | 一种读取数据的方法和装置 |
CN116466995B (zh) * | 2023-06-16 | 2024-06-11 | 紫光同芯微电子有限公司 | 基于复合指令的指令及其操作数的优化方法及装置 |
CN117118570B (zh) * | 2023-09-06 | 2024-04-02 | 上海交通大学 | 有限位数的最大码距遥控指令码生成系统及方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5115500A (en) * | 1988-01-11 | 1992-05-19 | International Business Machines Corporation | Plural incompatible instruction format decode method and apparatus |
JPH0520086A (ja) | 1991-07-11 | 1993-01-29 | Nec Corp | 数値演算処理装置 |
AU2939892A (en) * | 1991-12-06 | 1993-06-28 | Richard S. Norman | Massively-parallel direct output processor array |
JPH06348490A (ja) | 1993-06-08 | 1994-12-22 | Hitachi Ltd | 演算処理方法、及びマイクロコンピュータ |
JPH0962504A (ja) | 1995-08-23 | 1997-03-07 | Oki Electric Ind Co Ltd | 命令処理装置 |
US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
JP2000501217A (ja) | 1996-01-24 | 2000-02-02 | サン・マイクロシステムズ・インコーポレイテッド | 配列アクセス境界チェックを加速したプロセッサ |
JP3201716B2 (ja) | 1996-02-22 | 2001-08-27 | シャープ株式会社 | コンピュータ装置 |
US5881258A (en) * | 1997-03-31 | 1999-03-09 | Sun Microsystems, Inc. | Hardware compatibility circuit for a new processor architecture |
JP4018158B2 (ja) * | 1997-10-02 | 2007-12-05 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 可変命令セットコンピュータ |
US6529635B1 (en) * | 1997-12-15 | 2003-03-04 | Intel Corporation | Shape-based image compression/decompression using pattern matching |
JPH11306015A (ja) | 1998-04-22 | 1999-11-05 | Matsushita Electric Ind Co Ltd | 演算処理方法及びそれを用いたマイクロコンピュータ |
US6141635A (en) * | 1998-06-12 | 2000-10-31 | Unisys Corporation | Method of diagnosing faults in an emulated computer system via a heterogeneous diagnostic program |
US6128094A (en) * | 1998-07-08 | 2000-10-03 | Hewlett-Packard Company | Printer having processor with instruction cache and compressed program store |
US6397324B1 (en) * | 1999-06-18 | 2002-05-28 | Bops, Inc. | Accessing tables in memory banks using load and store address generators sharing store read port of compute register file separated from address register file |
JP2001195250A (ja) | 2000-01-13 | 2001-07-19 | Mitsubishi Electric Corp | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 |
-
2000
- 2000-02-08 JP JP2000030948A patent/JP3556556B2/ja not_active Expired - Fee Related
-
2001
- 2001-02-07 US US09/778,069 patent/US6801996B2/en not_active Expired - Lifetime
- 2001-02-07 EP EP01301062.4A patent/EP1124180B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US20010013093A1 (en) | 2001-08-09 |
US6801996B2 (en) | 2004-10-05 |
EP1124180A3 (en) | 2003-05-02 |
JP2001222426A (ja) | 2001-08-17 |
EP1124180B1 (en) | 2015-11-04 |
EP1124180A2 (en) | 2001-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3556556B2 (ja) | 命令コード変換装置及び情報処理システム | |
KR100535852B1 (ko) | 데이타처리장치 | |
JP2616182B2 (ja) | データ処理装置 | |
JP3499252B2 (ja) | コンパイル装置及びデータ処理装置 | |
US7124279B2 (en) | Processor and method for generating and storing compressed instructions in a program memory and decompressed instructions in an instruction cache wherein the decompressed instructions are assigned imaginary addresses derived from information stored in the program memory with the compressed instructions | |
JP3842474B2 (ja) | データ処理装置 | |
US7473293B2 (en) | Processor for executing instructions containing either single operation or packed plurality of operations dependent upon instruction status indicator | |
JP2007234048A (ja) | コード圧縮技術の高速プロトタイピングを可能にするプログラムのコード圧縮方法、プログラムのコード圧縮システム | |
US6986029B2 (en) | Micro-controller for reading out compressed instruction code and program memory for compressing instruction code and storing therein | |
JP3546980B2 (ja) | データ処理装置 | |
JPH11296381A (ja) | 仮想マシン及びコンパイラ | |
JP2003085000A (ja) | トレース情報生成装置およびその方法 | |
US5394558A (en) | Data processor having an execution unit controlled by an instruction decoder and a microprogram ROM | |
JP2001195250A (ja) | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 | |
US6687808B2 (en) | Data processor using indirect register addressing | |
JP2669158B2 (ja) | データ処理装置 | |
KR100272622B1 (ko) | 데이타 처리장치 | |
JP4502532B2 (ja) | データ処理装置 | |
JP2556182B2 (ja) | デ−タ処理装置 | |
CN108920188B (zh) | 一种扩展寄存器堆的方法及装置 | |
JP2504312B2 (ja) | プライオリティエンコ―ダ及びそれを備えたデ―タ処理装置 | |
US5361338A (en) | Pipelined system for decomposing instruction into two decoding parts and either concurrently generating two operands addresses of merging decomposing decoding codes based upon the second operand | |
US6049897A (en) | Multiple segment register use with different operand size | |
JPH04104350A (ja) | マイクロプロセッサ | |
JP2001265651A (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20031226 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040127 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040329 |
|
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: 20040420 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040512 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090521 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090521 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100521 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110521 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110521 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120521 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120521 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130521 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130521 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140521 Year of fee payment: 10 |
|
LAPS | Cancellation because of no payment of annual fees |