(57)【要約】【課題】命令コードおよびデータを語長の短い圧縮コードとして処理可能なマイクロコントローラにおいて、プログラムの容量を小さくし、かつ命令実行を高速に行う。【解決手段】プログラム上連続している複数の命令コードとデータを、圧縮コードに変換して圧縮コードメモリに持ち、圧縮コードを命令コードとデータに展開するためのデータを辞書メモリに持ち、圧縮コードから生成される複数のアドレスを用いて辞書メモリの読み出しを行うマイクロコントローラとする。【選択図】　図３
2004139290.tif 000002
【特許請求の範囲】
【請求項１】
プログラムメモリを備え、前記プログラムメモリから命令コードを読み出して実行するマイクロコントローラにおいて、
連続した複数の前記命令コードを圧縮コードに変換して格納し、命令アドレスで前記圧縮コードを読み出す圧縮コードメモリと、
前記圧縮コードから生成されるアドレスに従って前記命令コードを読み出す辞書メモリを備え、前記圧縮コードメモリには、前記辞書メモリにおける前記複数の命令コードのアドレス情報がアドレス長の総和より短いビット数で格納されていることを特徴とするマイクロコントローラ。
【請求項２】
前記圧縮コードは前記辞書メモリにおける連続する複数の命令コードのアドレス情報を有し、先頭の命令コードに対しては辞書メモリ上の絶対アドレスを、それに続く命令コードに対しては前記絶対アドレスからの相対アドレスとして保持することを特徴とする請求項１記載のマイクロコントローラ。
【請求項３】
クロックで動作するレジスタを備え、前記レジスタの出力から前記辞書メモリヘのアドレスを生成することを特徴とする請求項１記載のマイクロコントローラ。
【請求項４】
前記圧縮コードから生成される複数のアドレスに従い、前記辞書メモリから連続した複数の命令コードを同時に読み出すことを特徴とする請求項１記載のマイクロコントローラ。
【請求項５】
プログラム中で頻繁に出現する命令コードを頻出コードとして格納する頻出コードテーブルを有し、前記圧縮コードは前記頻出コードを含む複数の命令コードが変換されたコードか否かを表すタグ情報を有し、前記頻出コードを含む複数の命令コードが変換された圧縮コードである場合には、圧縮コードの一部に前記頻出コードテーブル上のアドレスを有することを特徴とする請求項１記載のマイクロコントローラ。
【請求項６】
フィールドを有する前記圧縮コードにおいて、フィールドが可変長であることを特徴とする請求項１記載のマイクロコントローラ。
【請求項７】
前記圧縮コードメモリは複数の圧縮コードブロックに分割でき、各圧縮コードブロックは前記アドレスに従い命令コードを出力する辞書メモリをそれぞれ個別に有し、各圧縮コードブロックの境界アドレスを保持するレジスタを備えたことを特徴とする請求項１記載のマイクロコントローラ。
【請求項８】
前記圧縮コードメモリは圧縮コードを格納している領域と非圧縮の命令コードを格納している領域の両方を有する時、領域の境のアドレスを保持するレジスタを有することを特徴とする請求項１記載のマイクロコントローラ。
【請求項９】
プログラムメモリと、圧縮コードメモリと、辞書メモリを備え、前記プログラムメモリから命令コードを読み出して実行するマイクロコントローラの制御方法において、
前記プログラムメモリに記憶されたプログラムの中で連続した複数の前記命令コードを圧縮コードに変換して前記圧縮コードメモリに格納し、
命令アドレスで前記圧縮コードを読み出し、
前記圧縮コードからアドレスを生成し、
前記アドレスに従って前記命令コードを読み出すことを特徴とするマイクロコントローラの制御方法。
【請求項１０】
プログラムメモリを備え、前記プログラムメモリから命令コードを読み出して実行するマイクロコントローラと、インターフェースを介して前記マイクロコントローラと接続された外部デバイスを有するマイクロコントローラ装置において、
前記コントローラは、連続した複数の前記命令コードを圧縮コードに変換して格納し、命令アドレスで前記圧縮コードを読み出す圧縮コードメモリと、前記圧縮コードから生成されるアドレスに従い前記命令コードを読み出す辞書メモリを備え、
前記圧縮コードメモリには、前記辞書メモリにおける前記複数の命令コードのアドレス情報がアドレス長の総和より短いビット数で格納されていることを特徴とするマイクロコントローラ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、家電製品，ＡＶ機器，携帯電話，自動車などの電子機器に用いられるマイクロコントローラ，その制御方法及びマイクロコントローラ装置に関するものである。
【０００２】
【従来の技術】
マイクロコントローラは、電子機器に組み込まれ該電子機器の動作など制御を行っている。近年マイクロコントローラは、高性能かつ安価であることが要求されている。マイクロコントローラの処理は益々複雑化しており、プログラム容量も増加している。特に３２ビット命令は、１６ビット命令と比べると１命令の語長が２倍であるため、１．５〜１．８倍程度の容量になる。従って、プログラム容量が増大し、チップに占めるプログラムＲＯＭの面積が全体の半分以上を占め、ＲＯＭの比率は今後さらに増大すると考えられている。
【０００３】
プログラム容量を小さくするにはコード圧縮方法があげられ、高速な展開が可能な固定長の圧縮方法が従来より知られている（例えば、特許文献１）。
【０００４】
上記技術は、プログラムに出現する命令コードとデータを、それより短い語長の圧縮コードに変換して圧縮コードメモリに持ち、圧縮コードを命令コードとデータに展開するためのデータを辞書メモリに持ち、圧縮コードを辞書メモリのアドレスとして、辞書メモリの読み出しを行っている。
【０００５】
しかしながら、３２ｂｉｔ　命令長のプログラムの圧縮には６０％程度の良好な圧縮率を実現できるが、１６ｂｉｔ　命令長のプログラムに対しては圧縮率が１００％を超えてしまうこともあり現実的ではない。この理由は、３２ｂｉｔ　命令では、取りうる最大のバリエーションが２３２であるのに対して、実際のプログラムに出てくる命令のバリエーションが極端に少ない。しかしながら１６ｂｉｔ　命令では、取りうる最大のバリエーションが２１６と小さいにもかかわらず、実際のプログラムに出てくるバリエーションは３２ｂｉｔ　命令と比べてあまり小さくならないためである。また、３２ｂｉｔ　命令のプログラムを圧縮する場合でも、最適な圧縮を行おうとすると圧縮コードの語長がコンピュータで扱うのに都合の良い２のべき乗の形にはならず、中途半端な語長となるため、専用のＲＯＭが必要となり、圧縮されたプログラムを展開しながら実行する圧縮モードと、非圧縮のプログラムをそのまま実行する非圧縮モードの両方のモードをサポートすることが困難となる。
【０００６】
【特許文献１】
特開平９−２３１０７１号公報
【０００７】
【発明が解決しようとする課題】
高い圧縮率と高速な命令展開性を兼ね備え、圧縮コードの語長に制約がある場合でも、高い圧縮率のコード圧縮を行うマイクロコントローラ及びそれを用いたマイクロコントローラの制御方法及びマイクロコントローラ装置を提供する。
【０００８】
【課題を解決するための手段】
上記課題を解決するために、プログラムメモリから命令コードを読み出して実行するマイクロコントローラにおいて、プログラム上連続した複数の命令コードを圧縮コードに変換して格納し、命令アドレスで圧縮コードを読み出す圧縮コードメモリと、圧縮コードから生成されるアドレスに従い命令コードを読み出す辞書メモリをプログラムメモリとして使用し、圧縮コードには複数の命令コードの辞書メモリ上のアドレス情報がアドレス長の総和より短いビット数で格納されているマイクロコントローラとする。
【０００９】
【発明の実施の形態】
図１は本発明の一実施例であるマイクロコントローラ装置のブロック図である。
【００１０】
マイクロコントローラ８で実行されるプログラムを格納するプログラムメモリ１は、圧縮コードメモリ１０と辞書メモリ２０を有している。圧縮コードメモリ１０には、命令コードの替わりに、あらかじめプログラム中に現われる連続する複数の命令コードに割り当てられた固定語調の圧縮コードが格納されている。辞書メモリ２０には、圧縮コードに含まれる複数のアドレスに、その圧縮コードに対応する複数の命令コードが格納されている。プログラムメモリ１に命令アドレス１００が与えられると、圧縮コードメモリ１０の命令アドレスから読み出された圧縮コードから複数の辞書メモリアドレス１０１が生成され、辞書メモリ２０のアドレスとして与えられ、辞書メモリの出力２００が読み出される。
【００１１】
マイクロコントローラ８のプログラム実行を行うＣＰＵ（中央演算処理装置）２は、ＣＰＵバス１０００を使って命令アドレス１００をプログラムメモリ１に与え、辞書メモリの出力２００を読み出し、ＣＰＵバス１０００を使ってＣＰＵ２内部に取り込む。取り込まれた命令コードはＣＰＵ２で解読された後、実行される。
【００１２】
ＲＡＭ（ランダム・アクセス・メモリ）３は読み出し／書き込みが可能で、
ＣＰＵ２が処理するデータの保持に使用される。
【００１３】
ＢＳＣ（バス・コントローラ）４は、マイクロコントローラ８の外部バスに接続された外部メモリにアクセスする。ＲＡＭ３と外部メモリはアドレスで区別され、ＣＰＵ２がメモリアクセス命令を実行すると、読み出しか書き込みか、アクセスのサイズを示すコマンド，アドレスがＣＰＵバス１０００に出力される。アドレスが外部バス空間である場合、ＢＳＣ４は外部バスにメモリアクセスの情報を出力し、外部メモリからのデータ読み出し、外部メモリヘのデータ書き込みの制御を行う。
【００１４】
ＤＭＡ（ダイレクト・メモリ・アクセス・コントローラ）５は、ＲＡＭ３，外部メモリなど、メモリアドレスでアクセスできる任意の２つのデバイス間データ転送を、ＣＰＵ２に代わって高速に実行する。ＤＭＡ５の起動は、例えばマイクロコントローラ８の外部からのＤＭＡ要求で行い、ＢＳＣ４と連携してＲＡＭ３や外部メモリのアクセスを行う。ＩＮＴ（割込みコントローラ）６は、マイクロコントローラ内部や外部からの割込み要求を検出して、ＣＰＵ２に割込みをかける。周辺モジュール７の種類としては、例えばタイマ，通信インタフェース，Ａ／Ｄ変換などがあげられる。ＤＭＡ５，ＩＮＴ６，周辺モジュール７は、周辺モジュールバス１００１を介して接続されている。ＣＰＵバス１０００と周辺モジュールバス１００１を分離することにより、クロック周波数の低い周辺モジュールに関係無く、ＣＰＵバス１０００を高速化できるようになる。また、周辺モジュール７と外部メモリ間のＤＭＡ転送を、ＣＰＵバス１０００を経由せずに実行するように設計することも可能であり、ＣＰＵ２のＲＡＭ３へのアクセスと並行してダイレクト・メモリ・アクセスが可能になるという効果も有している。
【００１５】
図１において、マイクロコントローラ８は、周辺にメモリ，文字入力などを行うためのキー，表示装置などの外部デバイス群９を有している。マイクロコントローラ８と外部デバイス群９は、外部バス，ダイレクト・メモリ・アクセス要求，割込み要求，周辺インタフェースなどで接続されている。
【００１６】
図２は、圧縮命令を実行する機能を有するマイクロコントローラおよびそれを用いた装置における、圧縮命令を実行するためのプログラムメモリ１の基本的な動作を模式化したものである。
【００１７】
以下の説明ではＣＰＵバス１０００は３２ｂｉｔ　、命令コードの語長は１６ｂｉｔ　としている。１つの圧縮コードは、プログラム上で連続する４命令コードに対して予め割り当てられた３２ｂｉｔ　のコードで、この中には４命令コードが格納されている辞書メモリ２０の４つのアドレス情報が格納されている。
【００１８】
圧縮コードメモリ１０は、命令アドレス１００を入力して、３２ｂｉｔ　の圧縮コードを読み出す機能を有している。辞書メモリ２０は、圧縮コードに含まれるアドレスを用いて３２ｂｉｔ　の命令コードを読み出す機能を有している。圧縮コードメモリ１０中の圧縮コードｐｎが辞書メモリ２０中の命令コードｃ０，ｃ１，ｃ２，ｃ３に対応する場合、圧縮コードｐｎのフィールドｆ０は辞書メモリ２０中の命令コードｃ０が格納された絶対アドレスとなり、フィールドｆ１，ｆ２，ｆ３はｃ１，ｃ２，ｃ３が格納されたアドレスのｆ１からの相対アドレスとなっている。相対アドレスのビット数が限られているため、辞書メモリ２０中でｃ１，ｃ２，ｃ３はｃ０の近く、具体的には相対アドレスの限られたビット数で表現できる範囲に配置されていなければならない。この制約のため、辞書メモリ２０の中に同一の命令コードを複数配置しなければならない場合もあり、辞書の呑量が増えてしまうが、複数のアドレスを纏めて短い圧縮コードにできる効果のほうが大きいため圧縮率は改善される。
【００１９】
図３はプログラムメモリ１の構成方法を示す。
【００２０】
圧縮コードメモリ１０には、圧縮コードが格納されている。命令アドレス１００は、命令コードが１６ｂｉｔ　であるため、２ｂｙｔｅを単位とする値（０，２，４，…）となる。圧縮コードメモリ１０は、４ｂｙｔｅ単位のアドレスを入力して、３２ビットデータを読み出す。
【００２１】
命令のアドレス０，２，４，６に対する圧縮コードメモリ１０のアドレスは０、命令のアドレス８，１０，１２，１４に対する圧縮コードメモリ１０のアドレスは８となる。命令アドレスは常に下位１ｂｉｔ　が０であるため命令アドレス１００にはこの下位１ｂｉｔ　を除いたアドレスが入るものとする。命令アドレス１００から更に下位２ｂｉｔ　を除いたアドレスで圧縮コードメモリ１０はアクセスされる。
【００２２】
以下の説明では圧縮コードのフィールドｆ０は１７ｂｉｔ　、フィールドｆ１，ｆ２，ｆ３はそれぞれ５ｂｉｔ　とする。ただし、ｆ１，ｆ２，ｆ３は−１６から＋１５までの値を表すものとし負数は１の補数で表されているものとする。
【００２３】
圧縮コードメモリ１０から読み出された圧縮コードに対して加算器３３，３２，３１はｆ０＋ｆ１，ｆ０＋ｆ２，ｆ０＋ｆ３を計算する。このときｆ１，ｆ２，ｆ３はｆ０と同じ１７ｂｉｔ　に符号拡張されて足される。ｆ０，ｆ０＋ｆ１，ｆ０＋ｆ２，ｆ０＋ｆ３の４値が圧縮コードに対応する４つの命令コードの辞書メモリ２０におけるアドレスとなる。この４値は命令アドレス１００の下位２ｂｉｔ　にしたがってセレクタ４０によって選択される。
【００２４】
セレクタ４０は、圧縮コードメモリ１０に圧縮コードを置く場合に意味を持つもので、シフタの出力の下から２ビット名の信号を使って、圧縮コードメモリ１０の出力に含まれる２つの圧縮コードから適切なコードを選択する。
【００２５】
選択された値をアドレスとして、辞書メモリ２０から所望の命令コードが読み出される。ここでは、命令アドレスとしてｃ０の命令アドレスが与えられた場合を考える。ｃ０のアドレスによって辞書メモリ２０からｃ０が読み出されるが、ＣＰＵバス１０００は３２ｂｉｔ　なので、辞書メモリ２０から出力される値は３２ｂｉｔ　アラインされたものである。したがって、辞書メモリアドレス１０１は実際には下位１ｂｉｔ　を除いたものであり、この１ｂｉｔ　は命令アドレス１００の下位１ｂｉｔ　と同じであれば、辞書メモリの出力はそのままＣＰＵバス１０００に出力されるが、異なる時は出力の下位１６ｂｉｔ　と上位１６ｂｉｔ　を入れ替える。
【００２６】
なお、圧縮コードメモリ１０と辞書メモリ２０は別のメモリモジュールに置いても良いし、同じメモリモジュールにおいても良い。
【００２７】
図４は、プログラムメモリ１の別の構成方法を示す。図４は図３に対し圧縮コードメモリ１０の出力を受けるレジスタ５０が追加されている。レジスタ５０はＣＰＵの動作クロックで動作する。これを追加することで圧縮コードメモリ１０の読み出しと辞書メモリ２０の読み出しをパイプラインの別のステージで実行することが可能となりクロック周波数を上げることが出来る。
【００２８】
図５はプログラムメモリ１の別の構成方法を示す。図５は、図３に対しセレクタ２０１，２０２を追加して、辞書メモリ２０からプログラム上連続している２命令を出力できるようにしたものである。これによって、辞書メモリの出力２００はカラムセレクタを通さずにページ幅のデータを、そのままセレクタ２０１，２０２に出力するようにする。セレクタ４０は、４つのアドレスのうち１つのみ出力するのではなく、プログラム上連続な２命令のアドレス２つを選択する。辞書メモリアドレス１０１には２つのアドレスの共通なローアドレスと、それぞれのカラムアドレスが出力され、ローアドレスは辞書メモリ２０に、カラムアドレスはそれぞれセレクタ２０１，２０２に供給される。セレクタ２０１，２０２は、辞書メモリ２０から出力されたページ幅のデータをカラムアドレスに基づき選択する。
【００２９】
プログラム上連続している２命令を命令コードとすることで、ＣＰＵ２は次に必要となる可能性の大きい命令コードを一緒に取得することができ、ＣＰＵバス１０００をデータアクセスのために空けておくことができる。従って、ＣＰＵ２の処理性能を向上することができる。
【００３０】
図６は圧縮コードの別の構成方法を示す。プログラム中には、非常に頻繁に現われる頻出コードが存在する。この頻出コードは、先に述べた相対アドレスの制約により、辞書メモリ２０中に数多く配置されてしまい、辞書の容量を増やす原因となる。このような頻出コードは辞書メモリ２０とは別に、容量の小さい頻出コードテーブル６０に登録しておく。圧縮コードに頻出コードが含まれている場合には、辞書メモリ２０ではなく頻出コードテーブルを参照するようにすれば、辞書の容量が減り圧縮率が向上する。
【００３１】
このように圧縮コードに頻出コードが含まれない場合と含まれる場合に分けて、含まれない場合は上記のように、含まれる場合は頻出コードテーブル６０を参照できるように、場合によっては圧縮コードのフィールドの意味合いを変えられるようにしたのが図７の圧縮コードの構成である。
【００３２】
先頭の１ｂｉｔ　はタグであり、どちらの場合かを識別するためのものである。
【００３３】
タグが０の時は、圧縮コードに頻出コードが含まれていない場合で、上記のように絶対アドレスと相対アドレスのみを使って辞書メモリ２０にアクセスする。
【００３４】
タグが１の時は圧縮コードに頻出コードが含まれている場合で、先頭のフィールドｇ０圧縮コードに含まれる４つの命令のうち、先頭の命令の辞書メモリ２０における絶対アドレス、続く４ｂｉｔ　のフィールドｇ１，ｇ２は、頻出コード以外の命令の相対アドレスである。次の２ｂｉｔ　のフィールドｇ３は、圧縮コードに含まれる４つの命令のうち何番目の命令が頻出コードであるかを表すフィールドである。最後のフィールドｇ４は、ｇ３で表される頻出コードが頻出コードテーブルのどこに格納されているかを表す頻出コードテーブルアドレスである。もし４つの命令のうち、先頭の命令が頻出コードであった場合は、フィールドｇ０は２番目の命令の絶対アドレスを表すものとする。また、フィールドｇ１，ｇ２には、ｇ０で絶対アドレスを表した命令でも頻出コードでもない２つの命令の相対アドレスを、命令の順番に格納している。
【００３５】
１つの圧縮コードの中に２つ以上の頻発コードが含まれる場合もあるが、このときは何れか１つを頻出コードとする。
【００３６】
どの命令を頻出コードとするかについては、プログラム中に最も多く出現したコードからフィールドｇ４で表わすことのできる最大数、今の場合は２の５乗の３２個を頻出コードとして頻出コードテーブル６０に登録しても良いし、一度頻出コードなしの条件で辞書を作成して、辞書中に最も多く出てきたものから登録しても良い。
【００３７】
図７は頻出コードテーブルを持ち、タグが１であった場合のプログラムメモリ１の動作を示す。
【００３８】
加算器３２，３３の動作は、ビット数が４ｂｉｔ　となり１ｂｉｔ　減った以外は上記と同様であるが、４つの命令のうち何番目が頻出コードであるかを示すフィールドｇ３の値をセレクタ４１に反映させて、４つのうち何番目の命令のアドレスを辞書メモリ２０に与えるかを判断している。また、フィールドｇ４の値をアドレスとして頻出コードテーブル６０を参照した結果と、辞書メモリ２０の出力のどちらを出力するか、選択するためにセレクタ２０１，２０２はフィールドｇ３を参照する。
【００３９】
図８は、頻出コードテーブルを持った場合のプログラムメモリ１の構成方法を示す。
【００４０】
タグが０の時と１の時の両方を動作させるためには、タグが０の時のモードのアドレス計算と、タグが１の時のモードのアドレス計算を平行して行い、タグの値に応じてその出力を切り替える必要がある。そのため、圧縮コードメモリ１０の出力を、タグが０の時のモードのアドレス計算ユニット３４と、タグが１の時のモードのアドレス計算ユニット３５が共に受けて、それぞれ自分のモードであると思いアドレスを計算した後、その出力をタグの値を使って選択する。セレクタ２０１，２０２もタグの値を参照して選択方法を変える。
【００４１】
図９は辞書の作成方法を示している。
【００４２】
辞書はアドレスの小さいほうから順に作成して行く。４命令毎に並べた各行を辞書の既作成部分とマージすることで、順に辞書を大きくしていき、全ての行をマージし終えたところで終了する。
【００４３】
最初は既作成部分が存在しないので、適当な行を辞書に登録する。既作成部分の末尾を注目位置とする。注目位置から相対アドレス範囲、今の場合３２個だけさかのぼった領域内で相対アドレスの制約が満たされる配置で、各行に幾つこの領域と重複する命令が存在するかをカウントして、最も共通した命令が多かった行を次にマージする。共通する命令数が最も多い行が複数存在する場合には、次に別の行をマージしたら共通命令が減ってしまうような緊急度の高い行を優先的にマージする。マージの方法としては共通な命令がこの領域に存在しなかった、つまり共通化できなかった命令を注目位置の後に並べることにする。このようにして辞書を作成すれば、相対アドレスの制約を満たす形で辞書を作成することができる。
【００４４】
また、辞書作成の段階で４つのうち先頭の命令がマージされたところのアドレスがフィールドｆ０となり、２番目から４番目までの命令がマージされたところのアドレスとの差がそれぞれｆ１，ｆ２，ｆ３となる。
【００４５】
このように辞書を作成していくと、辞書の内アドレスの小さいほうに登録されている命令コードは多くの圧縮コードから参照され、逆にアドレスが大きくなるに連れあまり参照されない命令コードが多くなる。また、ｆ１，ｆ２，ｆ３の相対アドレスについても、相対アドレスで表すことのできる範囲、今の場合−１６から＋１５までが均等に出現するわけではなく、０近辺が多く使われる。０から離れているところは、あまり使われていないという偏りが生じる。この偏りも圧縮率の向上に利用するため、各フィールドのビット数を固定にするのではなく、可変とする。可変としたことで、頻繁に出てくる値にはより短いビット長を割り当て、頻繁に出てこない値に対してはもっと広い相対アドレスを割り振ることが可能となる。
【００４６】
フィールドｆ０は値が小さいものが多く出てくる傾向にあるので、画一的に
１７ｂｉｔ　を割り当てるのではなく、小さい値に対しては１６ｂｉｔ　、大きい値に対しては１８ｂｉｔ　を割り当てるようにする。その結果、絶対アドレスが小さい時は、より範囲の広い相対アドレスを使用することができるので共通化し易くなる。実際には１６ｂｉｔ　表示時には先頭に０、１８ｂｉｔ　表示時には先頭に１をつけるなどすれば良い。また、フィールドｆ１，ｆ２，ｆ３は、０に近い値には短いビット長を、絶対値の大きい値には長いビット長を割り当てることで、全体としてはビット数を節約できる。余ったビットを、より広い範囲を指せる相対アドレスとして活用できる。代表的な可変長の符号としては、ハフマン符号やＳＳＳ符号などが知られているが、ここではＧｏｌｏｍｂ−Ｒｉｃｅ符号を用いる方法を使う。これはＧｏｌｏｍｂ−Ｒｉｃｅ符号がハードウェアで簡単にデコードできる特徴を持つためである。
【００４７】
図１０は、Ｇｏｌｏｍｂ−Ｒｉｃｅ符号を使って相対アドレスを表す際の方法を示している。
【００４８】
左の列が８次のＧｏｌｏｍｂ−Ｒｉｃｅ符号であり、次の行に対応する１０進表示と２進表示を書いている。８次のＧｏｌｏｍｂ−Ｒｉｃｅ符号は、上位の３ｂｉｔ　が０から７まで繰り返し変化し、一巡するたびにその後に続く０の数が１ずつ増えていく。最下位ビットは常に１である。従ってデコードの際は、上位３ｂｉｔ　の値にその後に続く０の数の８倍を足すことで値が分かる。また、１つの符号の終了位置も明確である。即ち、上位３ｂｉｔ　の次に出てきた１が終了位置である。
【００４９】
８次のＧｏｌｏｍｂ−Ｒｉｃｅ符号は０以上の値しか表せないので、そのデコード結果の２進表示にある変換を加える。即ち、最下位ビットを最上位に移動してできた数から、以前の最下位ビットの値を引くのである。こうしてできた変換後の値を１０進表示したものが次の列である。最後の列には８次のＧｏｌｏｍｂ−Ｒｉｃｅ符号のビット長が記されている。確かに、０近辺に短いビット長が、大きい絶対値の値には長いビット長が割り当てられている。
【００５０】
図１１は、各フィールドを可変長にした場合のプログラムメモリ１の構成方法を示す。
【００５１】
このときは、圧縮コードメモリ１０の出力に対して可変長符号のデコーダ５１を設けている。図１２は、大きなプログラムで辞書が大きくなり、アドレスが不足して辞書全体を指せなくなった場合のプログラムメモリ１の構成方法を示す。
【００５２】
この場合は、圧縮コードメモリ１０に複数の圧縮コードブロック１１，１２，１３，…に区切り、それぞれの圧縮コードブロックが参照する辞書ブロック２１，２２，２３，…を独立に設ける。つまり、各辞書ブロックを共通化することはしない。また、それぞれの辞書ブロックは、それ全体がアドレス指定できる大きさにする。そして、圧縮コードブロックの境目のアドレスを記憶するブロック境界レジスタ８１，８２，８３，…を設け、入力される命令アドレス１００に対してこれらのレジスタとアドレスの大小比較を行って、圧縮コードブロックを特定する。各圧縮コードブロックは独自の辞書ブロックを使って命令コードに展開する。辞書ブロックの境のアドレスは、圧縮コードブロックの境のアドレスと共にブロック境界レジスタに保持するようにしても良いし、多少の無駄が出るが特定の切りの良いアドレスから各辞書ブロックを配置するようにしても良い。
【００５３】
図１３はプログラムが圧縮する部分と、しない部分に分かれている場合のプログラムメモリ１の構成方法を示している。
【００５４】
この場合には、圧縮コードメモリ１０と非圧縮コードメモリ１５の境界のアドレスを記憶する圧縮境界レジスタ９１を設ける。
【００５５】
入力された命令アドレス１００と圧縮境界レジスタ９１の保持するアドレスの大小比較によって、命令アドレスが圧縮コードメモリ１０と非圧縮メモリ１５のどちらを指しているのかを特定する。非圧縮コードメモリ１５であれば通常のメモリ読み出し動作を、圧縮コードメモリ１０であれば上記のように圧縮コードの指す辞書メモリ２０のアドレスに格納された命令コードに展開する。
【００５６】
非圧縮コードメモリ１５を指す場合の物理アドレスは（命令アドレス−圧縮境界レジスタ値）＋圧縮境界レジスタ値／２として計算される。
【００５７】
圧縮コードメモリ１０と非圧縮コードメモリ１５は複雑に混じりあっても良いが、圧縮境界レジスタがたくさん必要であることと、物理アドレスの計算が煩雑になることを考えるとあまり現実的とは言えない。
【００５８】
本発明によるコード圧縮方式は、プログラムに出現する命令コードとデータを、それより短い語長の圧縮コードに変換して圧縮コードメモリに持ち、圧縮コードを命令コードとデータに展開するためのデータを辞書メモリに持ち、圧縮コードを辞書メモリのアドレスとして辞書メモリの読み出しを行い、一つの圧縮コードにはプログラムコード上連続している命令コードに対応する複数の辞書メモリのアドレスが共通な情報を重複しないように保持されている。
【００５９】
このため、圧縮していない命令コードやデータを読み出す場合に比べて、オーバヘッドは辞書メモリ読み出し時間のみとなる。マイクロコントローラの動作周波数を向上させるには、１クロック内の処理を少なくする必要があるが、本方式では圧縮コードメモリ読み出しと辞書メモリ読み出しのステージを分けることにより、命令コードを圧縮しない場合と同等の動作クロックを実現可能である。また、分岐や割込みなどにより命令アドレスが非連続となる場合の性能低下を少なく抑えることができる。
【００６０】
圧縮コードメモリ領域にはマイクロコントローラが実行する命令以外に、メモリ参照命令で読み出すデータが格納されている場合がある。メモリ参照命令の実行により、圧縮コードメモリからのデータ読み出しが発生すると、後続の命令読み出しを止めなくてはならないため、命令の供給量が減り性能が低下する。これは、命令を圧縮する、しないに関わらず、同一のメモリを命令フェッチとデータ参照に使用する場合に発生する。本発明では、上記問題の発生確率を減らすために、圧縮コードメモリから圧縮コードを読み出し、その中に含まれる複数の辞書メモリのアドレスのうち連続した命令コードに対応する２つのアドレスを読み出し辞書メモリの２個所を参照する、予め１つの圧縮コードに含まれる辞書メモリのアドレスが近くなるように辞書を作っておき、辞書メモリの出力段のセレクタをページ内のコードならば不連続に配置されていてもアラインして出力するようにすれば多くの場合２つの圧縮コードを同時に展開できるようになる。
【００６１】
１つの圧縮コードに４つのアドレス情報が含まれている場合を考えると、圧縮コードに含まれる２つの辞書メモリアドレスに対応する２コードを同時に展開できる場合には、圧縮コードメモリと辞書メモリの読み出しはそれぞれ２クロックに１回となる。これら２つの辞書メモリアドレスが同一ページに含まれていない場合には、辞書メモリの読み出しは１クロックに１回となる。ほとんどの場合これら２つの辞書メモリアドレスが同一ページに含まれていると考えられるので、４クロックに２回だけ命令を読み出せばよくなり、平均して４クロックにほぼ２回は命令の読み出しが発生しないことになる。この命令読み出し不要のサイクルを利用してデータを参照することにより、命令読み出しを止めることなく処理を進めることができる。
【００６２】
【発明の効果】
本発明によれば、プログラムメモリの容量を削減し、命令実行を高速に行うマイクロコントローラを提供することができる。
【図面の簡単な説明】
【図１】本発明の実施例であるマイクロコントローラ装置のブロック図である。
【図２】本発明の実施例であるマイクロコントローラによる圧縮命令の動作を説明する模式図である。
【図３】本発明の実施例であるプログラムメモリの模式図である。
【図４】本発明の他の実施例であるプログラムメモリの模式図である。
【図５】本発明の他の実施例であるプログラムメモリの模式図である。
【図６】本発明の実施例である圧縮コードの模式図である。
【図７】本発明の他の実施例であるプログラムメモリの模式図である。
【図８】本発明の他の実施例であるプログラムメモリの模式図である。
【図９】本発明の実施例である辞書の作成方法を示す模式図である。
【図１０】本発明の実施例である相対アドレスの説明図である。
【図１１】本発明の他の実施例であるプログラムメモリの模式図である。
【図１２】本発明の他の実施例であるプログラムメモリの模式図である。
【図１３】本発明の他の実施例であるプログラムメモリの模式図である。
【符号の説明】
１…プログラムメモリ、２…ＣＰＵ、３…ＲＡＭ、４…ＢＳＣ、５…ＤＭＡ、６…ＩＮＴ、７…周辺モジュール、１０…圧縮コードメモリ、２０…辞書メモリ、１００…命令アドレス、１０１…辞書メモリアドレス、２００…辞書メモリの出力、１０００…ＣＰＵバス、１００１…周辺モジュールバス。
【図１】
2004139290.tif 000003
【図２】
2004139290.tif 000004
【図３】
2004139290.tif 000005
【図４】
2004139290.tif 000006
【図５】
2004139290.tif 000007
【図６】
2004139290.tif 000008
【図７】
2004139290.tif 000009
【図８】
2004139290.tif 000010
【図９】
2004139290.tif 000011
【図１０】
2004139290.tif 000012
【図１１】
2004139290.tif 000013
【図１２】
2004139290.tif 000014
【図１３】
2004139290.tif 000015