(57)【特許請求の範囲】
【請求項１】
プログラムに出現する命令コードを格納する辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリとを備えたプログラムメモリを有するマイクロコントローラであって、
前記圧縮コードは、命令コードをオペコード部分とオペランド部分に分割し、その部分対応に変換されたものであり、
前記辞書メモリは、前記部分対応に変換された圧縮コード対応に分割されていることを特徴とするマイクロコントローラ。
【請求項２】
プログラムに出現する命令コードを格納する辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリとを備えたプログラムメモリを有するマイクロコントローラであって、
前記圧縮コードは、命令コードの内容に応じて複数の属性に区分され、
前記辞書メモリは、前記圧縮コードの属性対応に分割されていることを特徴とするマイクロコントローラ。
【請求項３】
請求項２に記載のマイクロコントローラであって、
前記複数の属性は、狭義の命令コードと、読み出し用データとを含むことを特徴とするマイクロコントローラ。
【請求項４】
プログラムに出現する命令コードを格納する辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリとを備えたプログラムメモリを有するマイクロコントローラであって、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された圧縮コードを読み出し、ついで、前記辞書メモリ中の当該圧縮コードが示すアドレスに格納された命令コードを読み出す第１の読み出し手段と、
アドレスを指定された命令コードの読み出し要求に対し、前記辞書メモリ中の当該アドレスに格納されたデータを読み出す第３の読み出し手段と、
前記第１の読み出し手段および前記第３の読み出し手段のいずれかを選択的に機能させる選択手段とを備えることを特徴とするマイクロコントローラ。
【請求項５】
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードを格納するメモリであって、１または連続する複数の命令コードを組として、それぞれの命令コード組を、命令コード組が含む命令コードの数ごとに区別された領域に格納する辞書メモリと、
前記辞書メモリの領域を判別するための情報を参照する手段と、
プログラムに含まれる命令コードの１または連続する複数の命令コードを組として、命令コード組のそれぞれが、プログラムに含まれる命令コード組を識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コード組を格納した領域の先頭アドレスを示す圧縮コードに変換されて格納され、かつ、圧縮コードが、複数の命令コードに対応する場合には、その数に応じた前記語長のデータが付加されて格納された圧縮コードメモリとを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された圧縮コードを読み出し、前記辞書メモリの領域を判別するための情報を取得して、前記辞書メモリ中の当該圧縮コードが示すアドレスに格納された命令コード組が含む命令コード数を取得し、前記辞書メモリの当該アドレスから連続する命令コードを、取得した数分読み出すことを特徴とするマイクロコントローラ。
【請求項６】
請求項５に記載のマイクロコントローラであって、
前記圧縮コードメモリに付加されたデータは読み出さないことを特徴とするマイクロコントローラ。
【請求項７】
請求項５に記載のマイクロコントローラであって、
前記圧縮コードメモリに付加されたデータは、読み出し用のデータであることを特徴とするマイクロコントローラ。
【請求項８】
プログラムを格納するマイクロコントローラであって、
プログラムに出現する命令コードを格納するメモリであって、１または連続する複数の命令コードを組として、それぞれの命令コード組を、命令コード組が含む命令コードが１であるか複数であるかによって区別された領域に格納する辞書メモリと、
前記辞書メモリの領域を判別するための情報を参照する手段と、
プログラムに含まれる命令コードの１または連続する複数の命令コードを組として、命令コード組のそれぞれが、プログラムに含まれる命令コード組を識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コード組を格納した領域の先頭アドレスを示す圧縮コードに変換されて格納され、かつ、圧縮コードが、複数の命令コードに対応する場合には、その数に応じた前記語長のデータが付加されるとともに、付加した最初のデータに、付加したデータの数を記録して格納された圧縮コードメモリとを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された圧縮コードを読み出し、前記辞書メモリの領域を判別するための情報を取得して、前記辞書メモリ中の当該圧縮コードが示すアドレスが複数の命令コードを含む格納された命令コード組を格納する領域であれば、前記付加された最初のデータに記録された数を取得し、前記辞書メモリの当該アドレスから連続する命令コードを、取得した数分読み出すことを特徴とするマイクロコントローラ。
【請求項９】
請求項８に記載のマイクロコントローラであって、
前記圧縮コードメモリに付加されたデータのうち、最初のデータ以外は読み出さないことを特徴とするマイクロコントローラ。
【請求項１０】
請求項８に記載のマイクロコントローラであって、
前記圧縮コードメモリに付加されたデータは、最初のデータを除いて読み出し用のデータであること特徴とするマイクロコントローラ。
【請求項１１】
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードのうち、あらかじめ定めた特定の命令コードを格納する辞書レジスタと、
プログラムに出現する命令コードのうち、前記特定の命令コード以外の命令コードを格納する辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリあるいは辞書レジスタ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリとを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された圧縮コードを読み出し、ついで、前記辞書メモリあるいは辞書レジスタ中の当該圧縮コードが示すアドレスに格納された命令コードを読み出すことを特徴とするマイクロコントローラ。
【請求項１２】
請求項１１に記載のマイクロコントローラであって、
前記辞書レジスタは前記辞書メモリよりも早く命令コードを読み出すことができ、前記辞書レジスタには、少なくとも、分岐を指示する命令コードの分岐先の命令コードの一つが格納されることを特徴とするマイクロコントローラ。
【請求項１３】
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードを格納する２つの辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリと、
１クロックおきに連続する２つの圧縮コードを同時に読み出し、それぞれレジスタに一時的に格納する読み出し手段とを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された連続する２つの圧縮コードを読み出し、前記レジスタに格納し、
それぞれの圧縮コードが、異なる辞書メモリ示している場合には、同時にそれぞれの圧縮コードが示すアドレスに格納された命令コードを読み出し、対応する連続する圧縮コードの順番で出力し、
それぞれの圧縮コードが、同じ辞書メモリを示している場合には、連続する圧縮コードの順番に、圧縮コードが示すアドレスに格納された命令コードを読み出して出力することを特徴とするマイクロコントローラ。
【請求項１４】
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードのうち、あらかじめ定めた特定の命令コードを格納する辞書レジスタと、
プログラムに出現する命令コードのうち、前記特定の命令コード以外の命令コードを格納する２つの辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリあるいは前記辞書レジスタ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリと、
１クロックおきに連続する２つの圧縮コードを同時に読み出し、それぞれレジスタに一時的に格納する読み出し手段とを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された連続する２つの圧縮コードを読み出し、前記レジスタに格納し、
連続する２つの圧縮コードの１番目の圧縮コードが、前記辞書レジスタを示している場合には、圧縮コードが示すアドレスに格納された命令コードを読み出して出力し、次に、２番目の圧縮コードが示す前記辞書メモリあるいは前記辞書レジスタ中のレジスタに格納された命令コードを読み出して出力し、
連続する２つの圧縮コードの１番目の圧縮コードが、前記辞書レジスタを示していない場合には、
それぞれの圧縮コードが、異なる辞書メモリ示しているかどうかを判断し、
異なる辞書メモリ示している場合には、同時にそれぞれの圧縮コードが示すアドレスに格納された命令コードを読み出し、対応する連続する圧縮コードの順番で出力し、
同じ辞書メモリを示している場合には、連続する圧縮コードの順番に、圧縮コードが示すアドレスに格納された命令コードを読み出して出力することを特徴とするマイクロコントローラ。
【請求項１５】
請求項１４に記載のマイクロコントローラであって、
前記辞書レジスタは前記辞書メモリよりも早く命令コードを読み出すことができ、前記辞書レジスタには、少なくとも、分岐を指示する命令コードの分岐先の命令コードの一つが格納されることを特徴とするマイクロコントローラ。
【請求項１６】
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードを格納する辞書メモリ領域と、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリ領域とを備えるメモリと、
読み出した圧縮コードを一時的に格納するレジスタとを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ領域中の当該アドレスに格納された圧縮コードを読み出し、前記レジスタに格納し、ついで、前記レジスタに格納された圧縮コードが示す前記辞書メモリ領域中のアドレスに格納された命令コードを読み出すことを特徴とするマイクロコントローラ。
【請求項１７】
前記メモリは、並行読み出しが可能な２ポートメモリで構成され、第１のポートで前記圧縮コードを読み出し、第２のポートで前記命令コードを読み出すことを特徴とする請求項１６に記載のマイクロコントローラ。
【請求項１８】
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードを格納する辞書メモリと、
プログラムに含まれる命令コードの連続する２つを組として、１番目に現れる命令コードのそれぞれを識別するのに足る語長のコードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す第１の部分と、その値が前記辞書メモリ中の、前記命令コードの組の２番目の命令コードを格納した位置を前記アドレスに対する相対値を表す第２の部分とから構成される圧縮コードに変換されて格納される圧縮コードメモリとを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された圧縮コードを読み出し、ついで、前記辞書メモリ中の当該圧縮コードの第１の部分が示すアドレスに格納された命令コードを読み出し、ついで、当該圧縮コードの第２の部分によって特定される命令コードを読み出すことを特徴とするマイクロコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロコントローラに係り、特に、命令コードを圧縮してプログラムメモリに格納するマイクロコントローラに関する。
【０００２】
【従来の技術】
マイクロコントローラ（以下「マイコン」ともいう）は、家電製品、ＡＶ機器、携帯電話、自動車等の電気機器に組み込まれ、内蔵されている読み出し専用のプログラムメモリ（ＲＯＭ）に格納されたプログラムにしたがって処理を行なうことで、それぞれの機器の制御を行なう装置である。
【０００３】
マイコンは、機器に組み込まれて利用されるというその性質上、機器の制御を行なうために必要な性能を備え、かつ、安価であることが要求される。
【０００４】
ところが、近年、マイコンが行なう処理は複雑化しており、処理に必要なプログラムの容量は増加している。このため、マイコンに占めるプログラムメモリの比率が高くなっており、この傾向は今後も続くと考えられている。一般に、プログラムメモリの容量が増えるとその分コストが上昇するため、安価なマイコンを提供するためには、プログラムメモリの容量をいかに押さえるかが重要な問題となっている。
【０００５】
【発明が解決しようとする課題】
ところで、パーソナルコンピュータ、ワークステーション等の汎用型の情報処理装置では、プログラムメモリの容量を削減するために、命令コードを圧縮する技術が提案され、実装化も進んでいる。
【０００６】
しかしながら、汎用型の情報処理装置で提案されている圧縮技術は、例えば、キャッシュのヒット率が比較的高いことを前提としていたり、命令のスループットを高めることを目的としている等のため、マイコン等の組み込み機器にそのまま適用することは、必ずしもふさわしくはない。すなわち、一般に、マイコン等の組込み機器ではキャッシュのヒット率があまり高くなく、割込みに対する高い応答性が要求される。また、命令のスループットよりレイテンシが重視されている場合が多い。さらには、プログラムに占める命令コード（読み出し用データを除く狭義の命令コード）の割合が高いという特徴を備えている。したがって、汎用型の情報処理装置に比べ、より圧縮コードを命令コードに高速に展開できることが重要となってくる。
【０００７】
本発明の目的は、高い圧縮率と、高速な命令展開性とを備えた命令コード圧縮技術を提供することにある。
【０００８】
【課題を解決するための手段】
上記課題を解決するため、本発明によれば、
プログラムにしたがって処理を行なうマイクロコントローラであって、
プログラムに出現する命令コードを格納する辞書メモリと、
プログラムに含まれる命令コードのそれぞれが、プログラムに含まれる全命令コードを識別するのに足る語長の圧縮コードであって、その値が前記辞書メモリ中の対応する命令コードを格納したアドレスを示す圧縮コードに変換されて格納される圧縮コードメモリとを備え、
圧縮コードのアドレスを指定された命令コードの読み出し要求に対し、前記圧縮コードメモリ中の当該アドレスに格納された圧縮コードを読み出し、ついで、前記辞書メモリ中の当該圧縮コードが示すアドレスに格納された命令コードを読み出すことを特徴とするマイクロコントローラが提供される。
【０００９】
【作用】
プログラムに出現する命令コードを、識別に必要なｂｉｔ数のコードに変換した圧縮コードと、元の命令コードに展開するための辞書とにして、プログラムメモリに記録する。圧縮コードは辞書のアドレスを示すように構成することで、高い圧縮率と、高速な命令展開性とを備えた命令コードの圧縮が達成される。
【００１０】
【発明の実施の形態】
本発明の実施の形態について図面を参照して説明する。
【００１１】
図１は、本願発明を適用したマイクロコントローラ（マイコン）の実施例の構成の要部を説明するためのブロック図である。
【００１２】
本図において、マイコン１０は、プログラムを実行するＣＰＵ２０と、プログラムを格納するプログラムメモリ３０と、プログラム、データ等を一時的に格納するＲＡＭ４０と、外部バス６５等の制御を行なうバスコントローラ５０と、これらを接続するＣＰＵバス６０とを備えて構成される。
【００１３】
ＣＰＵ２０の内部には、プログラムの実行順序を制御するためプログラムカウンタ２１が設けられている。プログラムカウンタ２１には、次に実行すべき命令コードが格納されているプログラムメモリ３０中のアドレスが示される。
【００１４】
バスコントローラ５０には、例えば、外部バス６５を介して外部メモリ９０等が接続される。また、バスコントローラ５０には、マイコンの用途に応じたデバイス群、例えば、入力装置、表示装置等を制御するための周辺モジュール、ＤＭＡ装置等を周辺モジュールバス等を介して接続することができる。
【００１５】
プログラムメモリ３０には、圧縮コードメモリ３１、辞書メモリ３２、および、プログラムメモリ３０の読み出し制御を行なうコントローラ部３５が設けられている。なお、コントローラ部３５は、例えば、プログラムメモリ３０の外部に独立して設けるようにしてもよいし、バスコントローラ５０内に設けるようにしてもよい。また、圧縮コードメモリ３１と、辞書メモリ３２とは、同時に読み出しができるように別メモリとして構成することが望ましい。
【００１６】
図２（ａ）は、本発明の基本的な原理を示す第１の実施例における、プログラムメモリ３０内に設けられた圧縮コードメモリ３１と辞書メモリ３２との関係を説明するための模式図である。
【００１７】
ここで、図２（ａ）に示した圧縮コードメモリ３１と辞書メモリ３２とについて、図２（ｂ）に示した圧縮コードを用いない従来のプログラムメモリを説明するための模式図を参照して説明する。
【００１８】
本実施例において、圧縮コードは、プログラムに出現する命令コード（データ部も含む）を、元のコード長より短い語長に変換したものである。また、プログラムに出現する全命令コードを圧縮の対象とする。このため、圧縮率を高めることができる。一方、圧縮コードを展開するための元の命令コードは辞書メモリ３２に格納しておく。
【００１９】
例えば、図２（ｂ）に示すように、プログラムに含まれる元の命令コードが、ｎビットの語長で、Ｘ行あったとする。このとき、プログラムに出現する命令コードの種類Ｋが２m-1〜２mの範囲であったとする。一般に、プログラム内に現れる命令コードは、同じ命令が複数回出現することが多いため、命令コードの種類Ｋは、Ｘより小さくなる。
【００２０】
このとき、プログラムの各行の命令コードを特定するためにはｍビットあれば足りる。このため、ｎビット×Ｘ行の命令コード列は、ｍビット×Ｘ行の圧縮コード列に変換することができる。そして、圧縮コードを元の命令コードに展開するための、ｎビット×Ｋ（Ｋ≦２m）の辞書を用意しておけばよい。
【００２１】
本実施例では、さらに、ｍビットの圧縮コードは、辞書メモリの参照すべき命令コードのアドレスを示すコードに対応させるものとする。このようにすることで、圧縮コードから、直接的に、辞書メモリ中のアドレスを求めることができるため、複雑なアドレス変換等を行なう必要がなく、元の命令コードへ展開のための時間を短くするという効果を得ることができる。
【００２２】
すなわち、図２（ａ）に示した本実施例では、プログラムカウンタ２１に従って、プログラムメモリ３０に命令アドレス６１が入力されると、まず、圧縮コード（辞書メモリアドレス）が読み出され、つづいて、この辞書メモリアドレスに格納された命令コード６２が読み出されることになる。なお、これらの読み出しのためのメモリ制御は、コントロール部３５が行なっている。
【００２３】
上記の説明から明らかなように、本実施例におけるコード圧縮の効果は、プログラムに出現する命令コードの種類に依存する。
【００２４】
例えば、１Ｍバイトのプログラムに、３２ビット長の命令コードが２５６Ｋ行ある場合を考える。プログラム中に、全命令コード数の４分の１に当たる６４Ｋ（＝２16）種類の命令コードが出現したとすると、命令コードを１６ビット長で圧縮コード化できる。
【００２５】
このとき、圧縮コードメモリ３１の容量は、５１２Ｋバイト（１６ビット×２５６Ｋ）となる。そして、辞書メモリ３２の容量は２５６Ｋバイト（３２ビット×６２Ｋ）となる。この結果、圧縮コードメモリ３１と辞書メモリ３２との合計容量は７６８Ｋバイトとなって、圧縮しない場合の１Ｍバイトに比べ、７５％の容量に削減することができる。
【００２６】
また、プログラム中に、全命令コード数の８分の１に当たる３２Ｋ（＝２15）種類の命令コードが出現したとすると、圧縮コードメモリ３１と辞書メモリ３２との合計容量は６００Ｋバイトとなって、圧縮しない場合の１Ｍバイトに比べ、５９％の容量に削減することができる。
【００２７】
一方、１Ｍバイトのプログラムに、３２ビット長の命令コードが２５６Ｋ（＝２18）行ある場合において、仮に、すべてが異なる命令コードであったとすると、命令コードは、１８ビット長で圧縮コード化される。
【００２８】
このとき、圧縮コードメモリ３１の容量は、５７６Ｋバイト（１８ビット×２５６Ｋ）となり、辞書メモリ３２の容量は１Ｍバイト（３２ビット×２５６Ｋ）となる。この結果、圧縮コードメモリ３１と辞書メモリ３２との合計容量は１．６Ｍバイトとなって、圧縮しない場合の１Ｍバイトに比べ、１．６倍のサイズに増大してしまう。
【００２９】
実際のプログラムでは、同じ命令コードが何度も繰り返し使われるという特性があるため、出現する命令コード種は、命令コード数の数分の１程度に抑えられる場合がほとんどである。しかしながら、実装上、命令コードの種類をメモリ容量削減効果が得られる範囲内に抑えられなかった場合にも対応できるようにすることが望ましい。
【００３０】
このため、プログラムメモリ３０を、図２（ａ）に示したような圧縮コードメモリ３１と辞書メモリ３２として利用する場合と、図２（ｂ）に示したような従来の形式で命令コードを格納するプログラムメモリとして利用する場合との両方の使い方が選択的に可能な構成とした第２の実施例について以下に説明する。
【００３１】
図３は、第２の実施例におけるプログラムメモリ３０の構成例を説明するための模式図である。ここでは、簡単のために、命令コード長が３２ビットで、圧縮コード長が１６ビットの場合を例に説明する。もちろん、本発明は、これに限定されるものではない。
【００３２】
本実施例において、圧縮コードメモリ３１ａは、命令コードおよび圧縮コードのいずれか一方を格納することができる。命令コードと圧縮コードとを混在させて格納することは予定されない。
【００３３】
そして、プログラムメモリ３０ａを、圧縮コードメモリ３１と辞書メモリ３２として利用する場合と、従来の形式で命令コードを格納するプログラムメモリとして利用する場合とは、セレクタ８１ａ、セレクタ８１ｂ、セレクタ８１ｃによって切り替えることができる。
【００３４】
従来の形式で命令コードを格納するプログラムメモリ３０として利用する場合には、圧縮コードメモリ３１ａおよび辞書メモリ３２ａを、３２ビット長の命令コードを格納する一つの連続したメモリ空間として扱い、命令アドレス６１ａで示されるアドレスに格納された命令コード６２ａが読み出される。
【００３５】
このとき、プログラムカウンタ２１が示す命令アドレス６１ａは、命令コード長が３２ビットであるため、４バイトを単位とする値（０、４、８、…）となり、図中のコードｂ０、コードｂ１、コードｃ０は、それぞれ３２ビットの命令コードとなる。
【００３６】
圧縮コードを格納するプログラムメモリ３０として利用する場合には、圧縮コードメモリ３１ａに、１６ビットの圧縮コードを格納し、辞書メモリ３２ａに、圧縮コードを展開するための、３２ビットの命令コードを格納する。
【００３７】
このとき、図中のコードｂ０、コードｂ１は、それぞれ連続する２つの１６ビット圧縮コードを連結したものである。したがって、圧縮コードを読み出すときは、前半の１６ビットと、後半の１６ビットとで別々に読み出す必要がある。
【００３８】
このため、図３に示した例では、シフタ８５を用いて、命令アドレス６１ａを、下位に１ビットシフトしたアドレスを使うようにしている。このとき、４バイト単位の命令アドレス０、４、８、１２、…に対する圧縮コードメモリ３１ａのアドレスは０、２、４、６、…となる。圧縮コードメモリ３１ａは３２ビット幅で、アドレスの下位２ビットは無視するので、命令アドレスは、０、０、４、４、…というように、同一の３２ビットデータが２回ずつ読み出されるようになる。そして、セレクタ８１ａで、シフタ８５の出力アドレスの下から２ビット目の信号を使って、圧縮コードメモリ３１ａからの出力に含まれる２つの圧縮コードから適切な圧縮コードを選択する。
【００３９】
セレクタ８１ｂは、従来の形式で命令コードを格納するプログラムメモリ３０として利用する場合には、命令アドレス６１ａが辞書メモリ３２ａに入力するように切り替える。圧縮コードを格納する場合には、セレクタ８１ａが出力する圧縮コードが辞書メモリ３２ａに入力するように切り替える。セレクタ８１ｂの切り替えは、例えば、格納形式を記憶したレジスタの内容にしたがうメモリモード信号３２０を使うことができる。セレクタ８１ｃは、従来の形式で命令コードを格納するプログラムメモリ３０として利用する場合には、命令アドレス６１ａに応じて、圧縮コードメモリ３１ａおよび辞書メモリ３２ａからの出力を切り替えて命令コード６２ａとして出力する。圧縮コードを格納する場合には、常に辞書メモリ３２ａからの出力を命令コード６２ａとして出力する。
【００４０】
このように、プログラムメモリ３０を構成することにより、同一のマイコン１０であっても、格納するプログラムを変更することで、従来の形式で命令コードを格納する形式と、圧縮コードを格納する形式とに対応することができる。すなわち、本発明を適用したマイコン１０を汎用的に利用することができるようになる。
【００４１】
次に、本発明の第３の実施例について説明する。図４は、第３の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００４２】
本実施例では、元の命令コードをオペコード部とオペランド部とに分けて、それぞれ別々にコード化して圧縮コードに変換する。
【００４３】
本図において、圧縮コードメモリ３１ｂは、ｍビットの圧縮コードを格納する。ここで、命令コードのオペコード部は、演算、メモリアクセス、分岐などの命令種を示し、オペランド部はレジスタ番号、データ等を示す部分である。
【００４４】
そして、辞書メモリも、オペコードを展開するためのオペコード用辞書メモリＣ３２ｂと、オペランドを展開するためのオペランド用辞書メモリＲ３３ｂとに分けて作成する。
【００４５】
圧縮コードメモリ３１ｂから読み出された圧縮コード７１は、オペコード部圧縮コード７１ｃと、オペランド部圧縮コード７１ｄとに分離される。そして、オペコード部圧縮コード７１ｃで示されるアドレスで、オペコード用辞書メモリＣ３２ｂを読み出し、オペランド部圧縮コード７１ｄで示されるアドレスで、オペランド用辞書メモリＲ３３ｂを読み出す。その後、２つの辞書メモリから並行して読み出されたコードを連結し、命令コード６２ｂとして出力する。
【００４６】
このようにすることで、特定のオペコードあるいはオペランドの出現頻度が高い等の特質を有するプログラムでは、プログラムメモリの容量をさらに削減することができる。また、オペコードとオペランドとを並行に展開するため、命令コードの読み出しを高速化することができる。
【００４７】
次に、本発明の第４の実施例について説明する。図５は、第４の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００４８】
本実施例では、元の命令コードを、狭義の命令コード部と、データ部とに区別して、それぞれ独立に圧縮コード化する。
【００４９】
本図において、圧縮コードメモリ３１ｃは、ｍビットの圧縮コードを格納する。そして、圧縮コードには、命令コードを圧縮したコードと、データを圧縮したコードとが含まれている。読み出した圧縮コードが命令コードに対応するか、データに対応するかは、例えば、圧縮コードを読み出すタイミング、読み出す機構等によって判断することができる。
【００５０】
すなわち、ＣＰＵ２０の実行サイクルで、命令フェッチステージのタイミングで読み出した場合は、命令コードを圧縮したコードであると判断し、メモリアクセスステージのタイミングで読み出した場合は、データを圧縮したコードであると判断することができる。
【００５１】
そして、命令コードとして読み出された圧縮コードは、命令コード用辞書メモリＩ３２ｃを参照して展開され、データとして読み出された圧縮コードは、データ用辞書Ｄメモリ３３ｃを参照して展開される。
【００５２】
本実施例において、命令コードの圧縮コードと、データの圧縮コードとは、読み出し時において区別されるため、独立のコード体系とすることができる。すなわち、命令コードの圧縮コードと、データの圧縮コードとで、同じコードを割り振ることができることになる。このため、圧縮コードメモリ３１ｃに格納する圧縮コードのビット幅を短くすることができる。
【００５３】
次に、本発明の第５の実施例について説明する。図６は、第５の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００５４】
本実施例において、圧縮コードは、圧縮コードメモリ３１ｄに加え、外部メモリ９０にも格納するようにしている。これは、プログラムの容量が大きくて、プログラムメモリ３０内には格納しきれない場合等に適用される。
【００５５】
本図に示した例では、外部メモリ９０からの圧縮コードが、バスコントローラ５０を介してプログラムメモリ３０内に入力される。そして、圧縮コードメモリ３１ｄからの圧縮コードおよび外部メモリ９０からの圧縮コードのいずれかを、コントローラ部３５からの信号３４１によってセレクタ８１ｄを制御することにより選択する。そして、辞書メモリ３２ｄ中の、選択された圧縮コードで示されるアドレスで示される命令コード６２ｄが出力される。
【００５６】
次に、本発明の第６の実施例について説明する。図７は、第６の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００５７】
本実施例においては、連続する複数の命令コードをセットにして圧縮コード化する。例えば、連続する３命令を１つの圧縮コードに変換し、圧縮コードメモリ３１ｅ中の連続する３コードの先頭に格納する。そして、続く２つのコード（「スロット」と称する）は、実行時に読み飛ばすようにして、メモリアクセスによる電力消費を削減する。なお、スロット部分で参照する辞書メモリのアドレスは、先頭に格納した圧縮コードから生成するようにする。
【００５８】
本図では、セットにする命令は１命令と連続する２命令と連続する３命令とである場合を例に説明する。もちろん本発明はこれに限られない。
【００５９】
本例では、辞書メモリ３２ｅを、１命令格納部分と、２命令格納部分と、３命令格納部分とに分割して、それぞれ対応する連続数の辞書（命令コード）を格納する。そして、１命令格納部分と２命令格納部分との境界を示すアドレスｓａ０をレジスタ７２１に格納し、２命令格納部分と３命令格納部分との境界を示すアドレスｓａ１をレジスタ７２２に格納する。これにより、辞書メモリ３２ｅを参照するときに、そのアドレスが、１命令格納部分、２命令格納部分および３命令格納部分のいずれかであるかを判断することができる。
【００６０】
例えば、ｃ０、ｃ１、ｃ２という連続する３命令をセットにして、ｐ０という圧縮コードに変換するとする。このとき、圧縮コードメモリ３１ｅには、ｐ０、スロット１、スロット２というコードを連続して格納する。なお、スロット１およびスロット２は、圧縮コードと同じビット長のダミーデータである。そして、辞書メモリ３２ｅのｐ０で示されるアドレスにｃ０を格納し、続いてｃ１、ｃ２を格納しておく。ここで、ｐ０で示されるアドレスは、３命令格納部分に含まれるようにしておく。
【００６１】
命令アドレス６１ｅにより、圧縮コードメモリ３１ｅのｐ０が指定されたとする。コントローラ部３５ｅは、レジスタ７２２を参照して、ｐ０が３命令格納部分に含まれると判断することができる。
【００６２】
コントローラ部３５ｅは、まず、辞書メモリ３２ｅのｐ０で示されるアドレスに格納されているｃ０を命令コード６２ｅとして出力する。次に、圧縮コードメモリ３１ｅを参照することなく、辞書メモリ３２ｅのｃ０に続く命令コードのアドレスを算出し、そのアドレスに格納されているｃ１を命令コード６２ｅとして出力する。そして、同様に、続くｃ２を命令コード６２ｅとして出力する。その後、圧縮コードメモリ３１ｅのスロット２に続く圧縮コードを読み出すようにする。もちろん、圧縮コードが示すアドレスが、辞書メモリ３２ｅ中の２命令格納部分であれば、上記の圧縮コードメモリ３１ｅにアクセスすることなく命令コードを出力する処理は１回で終了することになる。
【００６３】
このように、命令コードをセットにすることで、連続して実行する複数圧縮コードの２番目の圧縮コード以降は読み出す必要がなくなる。このため、圧縮コードメモリ３１ｅにアクセスする回数を減らすことができるため、メモリアクセスによる電力の消費を削減することができる。
【００６４】
なお、スロットの部分には、ダミーデータではなく、命令コード実行時に参照されるデータのアドレスを示す圧縮コードを格納するようにしてもよい。この場合は、さらに、圧縮コードメモリ３１ｅを有効活用することができる。
【００６５】
次に、本発明の第７の実施例について説明する。図８は、第７の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００６６】
本実施例は、前述の第６の実施例の変形である。
【００６７】
本実施例においては、辞書メモリ３２ｆを１命令格納部分と、連続命令格納部分との２つに分割する。そして、１命令格納部分と連続命令格納部分との境界を示すアドレスｓａをレジスタ８２１に格納しておく。
【００６８】
そして、圧縮コードメモリ３１ｆに、連続命令に対応する圧縮コードを格納する場合には、スロット１の部分に命令の連続数を格納する。
【００６９】
コントローラ３５ｆは、圧縮コードを読み出すと、レジスタ８２１を参照することで、その圧縮コードが１命令に対応しているか連続命令に対応しているかを判断することができる。そして、１命令に対応している場合には、辞書メモリ３２ｆから命令コードを読み出した後、次の圧縮コードを圧縮コードメモリ３１ｆから読み出す。一方、連続命令に対応している場合には、辞書メモリ３２ｆから命令コードを読み出した後、次のスロット１を読み出して、命令の連続数を取得する。そして、取得した連続数にしたがって、圧縮コードメモリ３１ｆにアクセスすることなく辞書メモリ３２ｆから命令コードを読み出すようにする。
【００７０】
本実施例では、連続命令の３命令目以降は圧縮コードメモリ３１ｆを読み出す必要がなくなることで、消費電力を削減することができる。また、第６の実施例同様に、スロット２以降の部分にデータの圧縮コードを格納することも可能である。
【００７１】
次に、本発明の第８の実施例について説明する。図９は、第８の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００７２】
本実施例では、圧縮コードメモリ３１ｇと辞書メモリ３２ｇとの間に圧縮コードレジスタ９１０を設けている。そして、圧縮コードメモリ３１ｇから読み出した圧縮コードを、１クロック分、圧縮コードレジスタ９１０に格納する。
【００７３】
このようにすることで、圧縮コードの読み出し処理と、辞書メモリ３２ｇによる命令コードへの展開処理とを、パイプラインにおける２つのステージに分けることができ、マイコン１０のクロック周波数の高速化を容易にすることができる。
【００７４】
次に、本発明の第９の実施例について説明する。図１０は、第９の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００７５】
本実施例では、前述の第８の実施例の構成に対して、高速辞書メモリとして機能する辞書レジスタ１０２０と、辞書判定回路１０３０と、セレクタ１０４０とが追加された構成となっている。
【００７６】
辞書レジスタ１０２０には、利用回数の多い命令コード、例えば、分岐先の命令コード等を格納することが望ましい。
【００７７】
辞書判定回路１０３０は、圧縮コードメモリ３１ｇから読み出した圧縮コードを、辞書レジスタ１０２０で展開するか、辞書メモリ３２ｈで展開するかを判定する回路である。セレクタ１０４０は、辞書判定回路１０３０の判定結果に基づいて、辞書レジスタ１０２０および辞書メモリ３２ｈのいずれかを選択して命令コード６２ｈを出力する。
【００７８】
このようにすることで、利用回数の多い命令コード、例えば、分岐先の命令コードを辞書レジスタ１０２０を用いて高速に展開することができる。特に、分岐等が発生し、命令アドレス６１ｈが非連続となる場合の性能低下を少なくすることができる。
【００７９】
次に、本発明の第１０の実施例について説明する。図１１は、第１０の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００８０】
本実施例では、連続する２つの圧縮コードを同時に読み出す。このとき、読み出しは１クロックおきに行なうようにする。また、辞書メモリ３２を、例えば、辞書メモリＡ３２ｉ、辞書メモリＢ３３ｉの２つ設けるようにする。２つの辞書メモリに格納する命令コードの組み合わせは任意である。例えば、命令コードの、最上位あるいは最下位ビットの値によって２つに割り振るようにすることができる。また、出現頻度の高い命令コードは双方の辞書メモリに格納するようにしてもよい。さらには、全命令コードを双方の辞書メモリに格納するようにしてもよい。
【００８１】
コントローラ部３５ｉは、同時に読み出した２つの圧縮コードを、それぞれレジスタＡ１１１１、レジスタＢ１１１２に格納する。
【００８２】
そして、レジスタＡ１１１１およびレジスタＢ１１１２に格納された圧縮コードが示すそれぞれのアドレスが、２つの辞書メモリに分散している場合には、２つの辞書メモリから同時に命令コードを読み出す。一方、それぞれのアドレスが、片方の辞書メモリに重なっている場合には、まず、レジスタＡ１１１１で示される命令コード読み出し、次のサイクルでレジスタＢ１１１２で示される命令コードを読み出す。
【００８３】
そして、同時に命令コードを読み出した場合には、レジスタＢ１１１２で示された命令コードをレジスタ１１２０に格納し、レジスタＡ１１１１で示された命令コードを出力した後に、レジスタＢ１１１２で示された命令コードを出力する。一方、順番に命令コードを読み出した場合には、読み出した順番で命令コードを出力する。
【００８４】
このように２サイクルに１回、圧縮コードを読み込む場合において、２つの辞書メモリで同時に命令コードが読み出されたときには、間の１サイクルではメモリにアクセスする必要がなくなる。この時間を利用して、例えば、データをメモリから読み込むことができ、マイコン１０の処理能力を高めることができる。
【００８５】
次に、本発明の第１１の実施例について説明する。図１２は、第１１の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００８６】
本実施例においては、前述の第１０の実施例の構成に、前述の第９実施例における辞書レジスタを追加した構成となっている。
【００８７】
本実施例では、第１０の実施例同様に、連続する２つの圧縮コードが同時に読み出される。そして、１番目の圧縮コードが辞書レジスタ１２１０で展開可能かどうかが判断される。辞書レジスタ１２１０で、展開可能な場合は、１サイクルで命令コードに展開され、次のサイクルで、２番目の圧縮コードを辞書メモリＡ３２ｊあるいは辞書メモリＢ３３ｊを用いて展開することができる。
【００８８】
１番目の圧縮コードが辞書レジスタ１２１０で展開できないときは、前述の第１０実施例同様の処理が行なわれ、連続する命令コードが順番に出力される。
【００８９】
次に、本発明の第１２の実施例について説明する。図１３は、第１２の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００９０】
本実施例においては、元の命令コード長が１６ビットの場合を例にする。本発明においては、元の命令コード長が短いほど、圧縮率が下がる傾向にあると考えられる。このため、本実施例では１６ビット長の２つの命令コードを組にして、１つの圧縮コードに変換する。本図の例では、圧縮コードを１６ビットとし、命令アドレス６１ｋで１つずつ読み出す。読み出した圧縮コードは、辞書メモリ３２ｋのアドレスとして使用し、１６ビットの命令コードを同時に読み出すようにする。このようにすることで、元の命令コード長が短い場合でも高い圧縮率を達成することができる。
【００９１】
このときの圧縮コードメモリ３１ｋおよび辞書メモリ３２ｋの構成方法の例について図１４を参照して説明する。
【００９２】
図１４（ａ）は、圧縮コードｐ０が、命令コードｃ０とｃ１との組み合わせを指していることを示している。本図の辞書メモリ３２ｊにおいて、１６ビット長の命令コードの組み合わせは、「ｃ０、ｃ０」「ｃ０、ｃ１」「ｃ０、ｃ２」「ｃ０、ｃ３」…のようになっている。
【００９３】
このような場合、圧縮コードメモリ３１ｊおよび辞書メモリ３２ｊを図１４（ｂ）に示すような構成とすることにより、辞書メモリ３２ｊの容量を削減することができる。
【００９４】
すなわち、辞書メモリ３２ｋには、「ｃ０、ｃ１」「ｃ２、ｃ３」の組み合わせで命令コードを格納しておく。そして、圧縮コード１４２０は、組み合わせの先頭の命令コードを示すアドレス部分１４２１と、組み合わせの２番目の命令コードを示す差分部分１４２２（本例の場合では０〜３のいずれか）とに分けて格納するようにする。例えば、アドレス部分１４２１が「ｃ０」を示し、差分部分１４２２が「２」を示している場合には、「ｃ０、ｃ２」の命令コードの組み合わせを表すことになる。また、差分部分１４２２が「０」を示している場合には、「ｃ０、ｃ０」の命令コードの組み合わせを表すことになる。
【００９５】
なお、この構成例は、任意のビット長の命令コードにも適用することができる。
【００９６】
次に、本発明の第１３の実施例について説明する。図１５は、第１３の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【００９７】
本実施例は、圧縮コードメモリ３１ｌと辞書メモリ３２ｌとが、物理的に同一のメモリ１５００上に設けられ、同時に読み出すことができない場合の構成例を示す（上述の実施例では、圧縮コードメモリと辞書メモリとは同時に読み出すことができることを想定している。ただし、同一のメモリであってもよい）。
【００９８】
本実施例では、命令アドレス６１ｌで１６ビットの圧縮コードｐ０を読み出し、レジスタ１５１０で保持する。そして、圧縮コードを読み出した次のクロックサイクルで、レジスタ１５１０で保持した圧縮コードが示すアドレスに基づいて、例えば、１６ビットの命令コードｃ０、ｃ１を同時に読み出すようにする。
【００９９】
なお、圧縮コードメモリ３１ｌと辞書メモリ３２ｌとが、物理的に同一のメモリ１５００上に設けられている場合であっても、複数のデータを並行して読み出せる、例えば、２ポートメモリを用いて構成することで、圧縮コードと命令コードとを同時に読み出せるようになる。
【０１００】
図１６は、本発明を適用したマイコン１００を利用した装置のブロック図である。本図において、マイコン１００は、バスコントローラ５０に、ダイレクトメモリアクセスコントローラ（ＤＭＡ）５１、割込みコントローラ（ＩＮＴ）５２、例えば、タイマ、通信インタフェース、Ａ／Ｄ変換等の周辺モジュールが接続されている。
【０１０１】
そして、マイコン１００の外部には、バスコントローラ５０、ＤＭＡ５１、ＩＮＴ５２等を介して外部デバイス群１２０が接続されている。外部デバイス群１２０は、マイコン１００の用途に応じて、例えば、メモリ、キー、表示装置等とすることができる。このような装置は、例えば、自動車内の組み込みシステムにおけるＥＣＵ（Electronic Control Unit）等に適用することができる。
【０１０２】
【発明の効果】
上述のように、本発明によれば、高い圧縮率と、高速な命令展開性とを備えた命令コード圧縮技術が提供される。
【図面の簡単な説明】
【図１】は、本願発明を適用したマイクロコントローラの実施例の構成の要部を説明するためのブロック図である。
【図２】（ａ）は、本発明の基本的な原理を示す第１の実施例におけるプログラムメモリ３０内に設けられた圧縮コードメモリ３１と辞書メモリ３２との関係を説明するための模式図である。（ｂ）は、圧縮コードを用いない従来のプログラムメモリを説明するための模式図である。
【図３】は、第２の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図４】は、第３の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図５】は、第４の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図６】は、第５の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図７】は、第６の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図８】は、第７の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図９】は、第８の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図１０】は、第９の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図１１】は、第１０の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図１２】は、第１１の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図１３】は、第１２の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図１４】は、第１２の実施例における圧縮コードメモリ３１ｋおよび辞書メモリ３２ｋの構成方法の例について説明するための図である。
【図１５】は、第１３の実施例におけるプログラムメモリ３０の構成例を説明するためのブロック図である。
【図１６】は、本発明を適用したマイコンを利用した装置の一例を示すブロック図である。
【符号の説明】
１０…マイクロコントローラ
２０…ＣＰＵ、２１…プログラムカウンタ
３０…プログラムメモリ、３１…圧縮コードメモリ
３２…辞書メモリ、３５…コントローラ部
４０…ＲＡＭ、５０…バスコントローラ
【図１】
0003729759.tif 000002
【図２】
0003729759.tif 000003
【図３】
0003729759.tif 000004
【図４】
0003729759.tif 000005
【図５】
0003729759.tif 000006
【図６】
0003729759.tif 000007
【図７】
0003729759.tif 000008
【図８】
0003729759.tif 000009
【図９】
0003729759.tif 000010
【図１０】
0003729759.tif 000011
【図１１】
0003729759.tif 000012
【図１２】
0003729759.tif 000013
【図１３】
0003729759.tif 000014
【図１４】
0003729759.tif 000015
【図１５】
0003729759.tif 000016
【図１６】
0003729759.tif 000017