(57)【要約】【課題】命令メモリの容量やプログラム自体の容量を削減することが可能なマイクロプロセッサを提供すること。【解決手段】フェッチした命令コードが図３（ａ）に示すロングタイプの命令コードの場合には、３２ビットの命令コードがそのまま命令デコードステージへ出力される。また、フェッチした命令コードが図３（ｂ）に示すショートタイプの命令コードの場合には、直近のロングタイプの命令コードの一部によって拡張し、拡張後の３２ビットの命令コードが命令デコードステージへ出力される。【選択図】        図３
2004355477.tif 000002
【特許請求の範囲】
【請求項１】
ロングタイプの命令コードとショートタイプの命令コードとを実行することのできるマイクロプロセッサであって、
命令コードをフェッチするための命令フェッチ手段と、
前記命令フェッチ手段によってフェッチされた命令コードをデコードするための命令デコード手段と、
前記命令デコード手段によるデコード結果に応じて、命令コードを実行するための命令実行手段とを含み、
前記命令フェッチ手段は、フェッチした命令コードがロングタイプの命令コードの場合には、当該命令コードをそのまま前記命令デコード手段へ出力し、フェッチした命令コードがロングタイプの命令コードに続くショートタイプの命令コードの場合には、直近のロングタイプの命令コードの一部によって前記ショートタイプの命令コードを拡張し、該拡張後の命令コードを前記命令デコード手段へ出力する、マイクロプロセッサ。
【請求項２】
前記命令フェッチ手段は、初期状態においてフェッチした命令コードがショートタイプの命令コードの場合には、所定の初期値によって命令コードを拡張し、該拡張後の命令コードを前記命令デコード手段へ出力する、請求項１記載のマイクロプロセッサ。
【請求項３】
前記命令フェッチ手段は、命令コードに含まれる識別ビットによってロングタイプの命令コードであるか、ショートタイプの命令コードであるかを識別する、請求項１または２記載のマイクロプロセッサ。
【請求項４】
前記命令フェッチ手段は、命令コードに含まれる複数の識別ビットによって複数種類のショートタイプの命令コードを識別し、当該種類に応じて直近のロングタイプの命令コードの一部によって命令コードを拡張する、請求項３記載のマイクロプロセッサ。
【請求項５】
ロングタイプの命令コードとショートタイプの命令コードとを実行することのできるマイクロプロセッサであって、
命令コードをフェッチするための命令フェッチ手段と、
前記命令フェッチ手段によってフェッチされた命令デコードをデコードするための命令デコード手段と、
前記命令デコード手段によるデコード結果に応じて、命令コードを実行するための命令実行手段とを含み、
前記命令フェッチ手段は、フェッチした命令コードがロングタイプの命令コードの場合には、当該命令コードをそのまま前記命令デコード手段へ出力し、フェッチした命令コードがショートタイプの命令コードの場合には、予めレジスタに設定された値によって前記ショートタイプの命令コードを拡張し、該拡張後の命令コードを前記命令デコード手段へ出力する、マイクロプロセッサ。
【請求項６】
前記マイクロプロセッサはさらに、分岐先命令がショートタイプの命令コードの場合には、当該分岐先命令のアドレスから所定数だけさかのぼったアドレスをプログラムカウント値とし、当該プログラムカウント値を順次インクリメントして出力するためのプログラムカウンタ制御手段を含み、
前記命令フェッチ手段は、前記所定数だけさかのぼった命令コードから前記分岐先命令の直前の命令コードまでをノーオペレーション命令として出力する、請求項１〜５のいずれかに記載のマイクロプロセッサ。
【請求項７】
前記命令フェッチ手段は、割込みまたは例外が発生し、ベクタアドレスによって指定されるアドレスの命令コードがショートタイプの命令コードの場合には、所定の初期値によって命令コードを拡張し、該拡張後の命令コードを前記命令デコード手段へ出力する、請求項１〜５のいずれかに記載のマイクロプロセッサ。
【請求項８】
前記命令フェッチ手段は、分岐先命令として必ずロングタイプの命令コードをフェッチする、請求項１〜５のいずれかに記載のマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令コードを順次フェッチして実行するマイクロプロセッサに関し、特に、命令コードを格納する命令メモリなどの容量の削減を可能としたマイクロプロセッサに関する。
【０００２】
【従来の技術】
近年、マイクロプロセッサを搭載した情報通信機器、家電機器などが広く普及しており、性能を向上させつつも、コストの削減が可能なマイクロプロセッサに対する要望が高まっている。
【０００３】
一般に、３２ビットの命令コード長を有するマイクロプロセッサコアやＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）コアを実現しようとした場合、プロセッサが命令メモリなどから常に３２ビットの命令コードをフェッチする必要がある。すなわち、プロセッサが１サイクルで命令コードをフェッチするためには、３２本の信号線（データバス）が必要である。また、１６本の信号線のみを使用した場合には、プロセッサは命令コードを２サイクルでフェッチすることになり、性能が低下することになる。
【０００４】
また、命令メモリとして、命令数×３２ビット分の容量を有する記憶装置が必要とされ、命令メモリの容量を削減したり、プログラム自体の容量を削減したりすることが困難である。これに関連する技術として、特開平１１−１６７４８８号公報に開示された演算処理装置がある。
【０００５】
特開平１１−１６７４８８号公報に開示された演算処理装置は、３２ビットの縮小命令セットの固定長の冗長な部分を、予め決められた規則にしたがって圧縮し、１６ビットの圧縮命令セットを生成することにより、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）型のマイクロプロセッサのオブジェクトコードサイズを小さくするものである。
【０００６】
【特許文献１】
特開平１１−１６７４８８号公報
【０００７】
【発明が解決しようとする課題】
上述した特開平１１−１６７４８８号公報に開示された演算処理装置は、オブジェクトコードのサイズを小さくすることができるが、全ての命令セットを固定長とすることによって命令セットの幾つかに冗長な部分が多く含まれるという、ＲＩＳＣ型のマイクロプロセッサ特有の問題点に着目してなされたものである。したがって、冗長な部分を含まない命令セットを圧縮することができず、オブジェクトサイズを小さくすることができないといった問題点があった。
【０００８】
本発明は、上記問題点を解決するためになされたものであり、その目的は、命令メモリの容量やプログラム自体の容量を削減することが可能なマイクロプロセッサを提供することである。
【０００９】
【課題を解決するための手段】
本発明のある局面に従えば、ロングタイプの命令コードとショートタイプの命令コードとを実行することのできるマイクロプロセッサであって、命令コードをフェッチするための命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令コードをデコードするための命令デコード手段と、命令デコード手段によるデコード結果に応じて、命令コードを実行するための命令実行手段とを含み、命令フェッチ手段は、フェッチした命令コードがロングタイプの命令コードの場合には、当該命令コードをそのまま命令デコード手段へ出力し、フェッチした命令コードがロングタイプの命令コードに続くショートタイプの命令コードの場合には、直近のロングタイプの命令コードの一部によって拡張し、拡張後の命令コードを命令デコード手段へ出力する。
【００１０】
本発明の別の局面に従えば、ロングタイプの命令コードとショートタイプの命令コードとを実行することのできるマイクロプロセッサであって、命令コードをフェッチするための命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令コードをデコードするための命令デコード手段と、命令デコード手段によるデコード結果に応じて、命令コードを実行するための命令実行手段とを含み、命令フェッチ手段は、フェッチした命令コードがロングタイプの命令コードの場合には、当該命令コードをそのまま前記命令デコード手段へ出力し、フェッチした命令コードがショートタイプの命令コードの場合には、予めレジスタに設定された値によって拡張し、拡張後の命令コードを命令デコード手段へ出力する。
【００１１】
【発明の実施の形態】
図１は、マイクロプロセッサの概略構成の一例を示すブロック図である。このマイクロプロセッサ１００は、命令メモリ１０１からフェッチされた命令コードを保持するＩＦ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）ステージ保持回路１０３と、ＩＦステージ保持回路１０３に保持される命令コードをデコードするデコード用組合せ回路１０５と、デコード用組合せ回路１０５によるデコード結果を保持するＩＤ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ）ステージＦ／Ｆ（Ｆｌｉｐ  Ｆｌｏｐ）１０７と、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値を制御するＰＣ制御部１０８と、ＩＤステージＦ／Ｆ１０７に保持されるデコード結果に応じて命令を実行する演算器などの組合せ回路１１０と、組合せ回路１１０による演算結果などを保持するＥＸ（Ｅｘｅｃｕｔｉｏｎ）ステージＦ／Ｆ１１２とを含む。
【００１２】
図１は、簡単のために、命令フェッチ、命令デコード、命令実行からなる３段のパイプライン構成で命令コードを処理する場合を想定している。なお、本明細書における値の表記方法として、ハードウェア記述言語として広く用いられているＶｅｒｉｌｏｇ−ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）言語の文法に従った表記を用いるものとする。
【００１３】
ＰＣ制御部１０８は、ＰＣの値を制御する。なお、このＰＣの値の制御の詳細は後述する。命令メモリ１０１は、ＰＣ制御部１０８から出力された命令アドレス１１３に応じて命令コードを出力する。ＩＦステージ保持回路１０３は、命令メモリ１０１から出力された命令コード１０２を保持する。
【００１４】
デコード用組合せ回路１０５は、ＩＦステージ保持回路１０３によって保持される命令コード１０４をデコードし、デコード結果を制御信号１０６としてＩＤステージＦ／Ｆ１０７へ出力する。ＩＤステージＦ／Ｆ１０７は、デコード用組合せ回路１０５から出力された制御信号１０６を保持して演算器などの組合せ回路１１０へ出力する。
【００１５】
組合せ回路１１０は、ＩＤステージＦ／Ｆ１０７から出力された制御信号１０９に応じて演算等の命令実行を行ない、命令実行結果１１１をＥＸステージＦ／Ｆ１１２へ出力する。ＥＸステージＦ／Ｆ１１２は、組合せ回路１１０から出力された命令実行結果を保持する。
【００１６】
図２は、ＰＣ制御部１０８の詳細を示す図である。ＰＣ制御部１０８は、セレクタ１５６と、セレクタ１５６の選択信号を生成する選択信号生成部１５１と、ＰＣの値を保持するＰＣ保持用Ｆ／Ｆ１５７と、ＰＣ保持用Ｆ／Ｆ１５７に保持されるＰＣの値をインクリメントするインクリメンタ１５９とを含む。
【００１７】
選択信号生成部１５１は、その一部がデコード用組合せ回路１０５に含まれる回路であり、割込みアドレス１５２、分岐先アドレス１５３およびＰＣ保持用Ｆ／Ｆ１５７に保持される命令アドレスがインクリメントされた値のいずれかを選択するための選択信号１５８を生成する。
【００１８】
割込みが発生して割込みルーチンへジャンプする場合には、セレクタ１５６は割込みアドレス１５２を選択して出力する。分岐命令等の実行によって分岐先アドレス１５３へジャンプする場合には、セレクタ１５６は分岐先アドレス１５３を選択して出力する。また、割込みおよび分岐先アドレス１５３への分岐のいずれも発生しない場合には、セレクタ１５６はインクリメンタ１５９から出力される命令アドレスを選択して出力する。
【００１９】
インクリメンタ１５９は、ＰＣ保持用Ｆ／Ｆ１５７に保持される命令アドレスを１だけインクリメントする。本来であれば、命令コードが３２ビットであれば、命令アドレスを４だけインクリメントする必要があるが、簡単のために１だけインクリメントするものとして説明する。
【００２０】
（第１の実施の形態）
図３は、本発明の第１の実施の形態におけるマイクロプロセッサで実行される命令フォーマットの概念を説明するための図である。図３（ａ）は、Ｌ（Ｌｏｎｇ）タイプの命令フォーマット１を示しており、図３（ｂ）は、Ｓ（Ｓｈｏｒｔ）タイプの命令フォーマット２を示している。
【００２１】
図３（ａ）に示すように、Ｌタイプの命令フォーマット１は、Ｌ／Ｓフォーマット識別用のビットである１ビットのｆｍと、演算の種類を示す１０ビットのｏｐｅｒａｔｉｏｎと、それぞれ６ビットのｏｐｅｒａｎｄ１〜ｏｐｅｒａｎｄ３と、３ビットのｏｐｔｉｏｎとを含む。ｆｍビットは、命令コードがＬタイプの命令フォーマット１であるか、Ｓタイプのフォーマット２であるかを示す。Ｌタイプの命令フォーマット１においては、命令コードが３２ビットで指定され、サポートしている全ての命令コードを指定することが可能である。
【００２２】
図３（ｂ）に示すように、Ｓタイプの命令フォーマット２は、１ビットのｆｍと、９ビットのｏｐｅｒａｔｉｏｎ’と、それぞれ２ビットのｏｐ１’〜ｏｐ３’とを含む。Ｓタイプの命令フォーマット２においては、命令コードが１６ビットで指定され、最も直近で指定されたＬタイプの命令コードの値によって補間され、３２ビットの命令コードが生成される。
【００２３】
図３（ｂ）に示すＳタイプの命令コードがデコードされるときに、９ビットのｏｐｅｒａｔｉｏｎ’に、直近のＬタイプの命令コードのｏｐｅｒａｔｉｏｎの上位１ビットが付加されて、１０ビットのｏｐｅｒａｔｉｏｎが生成される。また、２ビットのｏｐ１’〜ｏｐ３’のそれぞれに、直近のＬタイプの命令コードのｏｐｅｒａｎｄ１〜ｏｐｅｒａｎｄ３の上位４ビットが付加されて、それぞれ６ビットのｏｐｅｒａｎｄ１〜ｏｐｅｒａｎｄ３が生成される。なお、Ｓタイプの命令コードにおいて、３ビットのｏｐｔｉｏｎは存在せず、直近のＬタイプのｏｐｔｉｏｎの３ビットをそのまま用いる。
【００２４】
図４は、本発明の第１の実施の形態におけるマイクロプロセッサのＩＦステージ保持回路１０３の内部構成を示すブロック図である。このＩＦステージ保持回路１０３は、セレクタ２５１〜２５６および２６１〜２６５と、命令コードの一部を保持するＦ／Ｆ２７１〜２７６および２８１〜２８５と、セレクタ２５１〜２５６および２６１〜２６５の選択信号を生成する選択信号生成回路２９１と、選択信号生成回路２９１から出力される選択信号を１サイクル保持するＦ／Ｆ２９４と、Ｆ／Ｆ２７１〜２７６および２８１〜２８５に保持される３２ビットの命令コード２９７またはｎｏｐ命令コード２９６を選択するセレクタ２９８とを含む。
【００２５】
まず、図３（ａ）に示すＬタイプの命令コードが与えられた場合のＩＦステージ保持回路１０３の動作について説明する。命令コードがＬタイプの場合、２サイクルで３２ビットの命令コードがフェッチされる。
【００２６】
１サイクル目において、３２ビットの命令コードのうち上位の１６ビット［０：１５］がＩＦステージ保持回路１０３に入力される。このとき、選択信号生成回路２９１が選択信号２９２に“０１”を出力する。したがって、Ｆ／Ｆ２７１，２８１，２７２，２８２および２７３のそれぞれには、ｉｃｏｄｅ［００］２１２、ｉｃｏｄｅ［０１］２１３、ｉｃｏｄｅ［０２：１０］２１５、ｉｃｏｄｅ［１１：１４］２１６およびｉｃｏｄｅ［１５］２１８の値が取込まれる。
【００２７】
なお、Ｆ／Ｆ２７４，２８３，２７５，２８４，２７６および２８５は、前のサイクルで保持していた値を保持する。すなわち、Ｆ／Ｆ２７４，２８３，２７５，２８４，２７６および２８５の値は更新されない。このサイクルにおいて、３２ビットの命令コードを出力することができないため、選択信号生成回路２９１はセレクタ２９８に選択信号２９３を出力して、セレクタ２９８にｎｏｐ命令コード２９６を出力させる。
【００２８】
２サイクル目において、３２ビットの命令コードのうち下位の１６ビット［１６：３１］がＩＦステージ保持回路１０３に入力される。このとき、選択信号生成回路２９１が選択信号２９２に“１０”を出力する。したがって、Ｆ／Ｆ２７４，２８３，２７５，２８４，２７６および２８５のそれぞれには、ｉｃｏｄｅ［００］２２０、ｉｃｏｄｅ［０１：０４］２２１、ｉｃｏｄｅ［０５：０６］２２３、ｉｃｏｄｅ［０７：１０］２２４、ｉｃｏｄｅ［１１：１２］２２６およびｉｃｏｄｅ［１３：１５］２２７の値が取込まれる。
【００２９】
なお、Ｆ／Ｆ２７１，２８１，２７２，２８２および２７３は、前のサイクルで保持していた値を保持する。すなわち、Ｆ／Ｆ２７１，２８１，２７２，２８２および２７３の値は更新されず、１サイクル目で書込まれた命令コードの上位１６ビットが保持される。このサイクルにおいて、３２ビットの命令コードを出力することができるため、選択信号生成回路２９１はセレクタ２９８に選択信号２９３を出力して、セレクタ２９８に３２ビットの命令コード２９７を出力させる。
【００３０】
次に、図３（ｂ）に示すＳタイプの命令コードが与えられた場合のＩＦステージ保持回路１０３の動作について説明する。命令コードがＬタイプの場合、１サイクルで１６ビットの命令コードがフェッチされ、最も直近で指定されたＬタイプの命令コードの値によって補間される。
【００３１】
このサイクルにおいて、Ｓタイプの１６ビットの命令コードがＩＦステージ保持回路１０３に入力される。このとき、選択信号生成回路２９１が選択信号２９２に“００”を出力する。したがって、Ｆ／Ｆ２７１，２７２，２７３，２７４，２７５および２７６のそれぞれには、ｉｃｏｄｅ［００］２１１、ｉｃｏｄｅ［０１：０９］２１４、ｉｃｏｄｅ［１０］２１７、ｉｃｏｄｅ［１１］２１９、ｉｃｏｄｅ［１２：１３］２２２およびｉｃｏｄｅ［１４：１５］２２５の値が取込まれる。
【００３２】
なお、Ｆ／Ｆ２８１，２８２，２８３，２８４および２８５は、前のサイクルで保持していた値を保持する。すなわち、Ｆ／Ｆ２８１，２８２，２８３，２８４および２８５の値は更新されない。このサイクルにおいて、３２ビットの命令コードを出力することができるため、選択信号生成回路２９１はセレクタ２９８に選択信号２９３を出力して、セレクタ２９８に３２ビットの命令コード２９７を出力させる。
【００３３】
図５は、選択信号生成回路２９１によって生成される選択信号２９２の値と、生成条件との関係を示す図である。Ｆ／Ｆ２９４の値（１つ前のサイクルの選択信号値）が２’ｂ００または２’ｂ１０であり、かつｉｃｏｄｅ［００］２１１の値が１’ｂ０の場合には、選択信号値として２’ｂ００が出力される。すなわち、１つ前のサイクルでフェッチした命令コードがＳタイプまたはＬタイプの命令コードのうち下位１６ビットであり、今回フェッチした命令コードがＳタイプの場合には、選択信号値として２’ｂ００が出力される。
【００３４】
また、Ｆ／Ｆ２９４の値が２’ｂ００または２’ｂ１０であり、かつｉｃｏｄｅ［００］２１１の値が１’ｂ１の場合には、選択信号値として２’ｂ０１が出力される。すなわち、１つ前のサイクルでフェッチした命令コードがＳタイプまたはＬタイプの命令コードのうち下位１６ビットであり、今回フェッチした命令コードがＬタイプの場合には、選択信号値として２’ｂ０１が出力される。
【００３５】
また、Ｆ／Ｆ２９４の値が２’ｂ０１の場合には、選択信号値として２’ｂ１０が出力される。すなわち、１つ前のサイクルでフェッチした命令コードがＬタイプの命令コードのうち上位１６ビットの場合には、選択信号値として２’１０が出力される。
【００３６】
なお、Ｆ／Ｆ２７１〜２７６および２８１〜２８５をリセット（セット）付きのＦ／Ｆとすることによって、マイクロプロセッサのリセット時に初期値を与えることができる。その結果、最初にフェッチされた命令がＳタイプの命令であっても初期値に基づいて正しく動作を行なわせることができる。
【００３７】
また、上述した説明においては、Ｓタイプの種類が１つの場合のみについて説明したが、Ｌ／Ｓフォーマット識別用ｆｍのビット数を増やし、それに対応して図４に示す構成を複数備えることによって、複数種類のＳタイプの命令コードをサポートしたマイクロプロセッサを提供することが可能である。
【００３８】
以上説明したように、本実施の形態におけるマイクロプロセッサによれば、Ｓタイプの命令コードをフェッチした場合には、最も直近のＬタイプの命令コードによって補間し、３２ビットの命令コードを生成するようにしたので、性能の低下を最小限に抑えつつ信号線を削減することができると共に、命令メモリの容量やプログラム自体の容量を削減することが可能となった。
【００３９】
（第２の実施の形態）
第１の実施の形態においては、フェッチした命令コードがＳタイプの命令コードの場合には、直近のＬタイプの命令コードによって補間し、３２ビットの命令コードを生成するようにした。本発明の第２の実施の形態においては、フェッチした命令コードがＳタイプの命令コードの場合には、ユーザが指定した任意の値によってＳタイプの命令コードを補間し、３２ビットの命令コードを生成するものである。
【００４０】
図６は、本発明の第２の実施の形態におけるマイクロプロセッサの概念を説明するための図である。この命令コードは、Ｓタイプの命令コードのものであり、３２ビットの命令コードのうち、［０１］３２１，［１１：１４］３２２，［１７：２０］３２３，［２３：２６］３２４および［２９：３１］３２５が、ＩＲＥＧ＿０（３３１），ＩＲＥＧ＿１（３３２），ＩＲＥＧ＿２（３３３）およびＩＲＥＧ＿３（３３４）の値によって補間される。レジスタＩＲＥＧ＿０（３３１）〜ＩＲＥＧ＿３（３３４）は、それぞれ４ビットの明示的なレジスタであり、マイクロプロセッサが命令によって書込み／読出しが可能である。
【００４１】
たとえば、Ｓタイプの命令コードとして、以下のような特殊命令を設けることによって実現することができる。
【００４２】
書込み命令：  ＬＤＳＰ    ＩＲＥＧ＿０  ４’ｂ０１０１
読出し命令：  ＳＴＳＰ    ＩＲＥＧ＿０
これらの命令は、Ｓフォーマットでのみ有効な命令であるが、それ以外には特殊性はない。すなわち、一般的なプロセッサが備えている、即値をレジスタに設定する命令、およびあるレジスタの値を読出す命令と全く同じ動作を行なう。したがって、ここでの詳細な説明は行なわない。
【００４３】
以上説明したように、本実施の形態におけるマイクロプロセッサによれば、命令コードがＳタイプの場合には、ユーザが予めレジスタに設定した値によって命令コードを補間するようにしたので、第１の実施の形態において説明した効果に加えて、汎用性をさらに高めることが可能となった。
【００４４】
（第３の実施の形態）
本発明の第３の実施の形態におけるマイクロプロセッサは、割込みや分岐が発生したとき、その分岐先がＳフォーマットの命令コードである場合に対応した構成を有するものである。
【００４５】
図７は、本発明の第３の実施の形態におけるマイクロプロセッサのＩＦステージ保持回路およびＰＣ制御部の概略構成を示すブロック図である。なお、本実施の形態においては、ＩＦステージ保持回路およびＰＣ制御部の参照符号をそれぞれ１０３’および１０８’として説明する。
【００４６】
ＩＦステージ保持回路１０３’は、図４に示す第１の実施の形態におけるＩＦステージ保持回路１０３と、ＩＦステージ保持回路１０３に保持される３２ビットの命令コード４０２から分岐命令を検出する分岐命令検出回路４０３と、分岐命令検出回路４０３による検出結果を保持する分岐命令保持Ｆ／Ｆ４０５と、ＩＦステージ保持回路１０３によって保持される３２ビットの命令コード４１０またはｎｏｐ命令コード４１１を選択して、デコード用組合せ回路１０５へ出力するセレクタ４１２とを含む。
【００４７】
また、ＰＣ制御部１０８’は、セレクタ４３８と、分岐命令保持Ｆ／Ｆ４０５に保持される分岐命令の検出結果４０６および命令コードのｆｍビット４０７に応じてセレクタ４３８の選択信号４２２を生成する選択信号生成部４２１と、設定された値から１ずつデクリメントする減算カウンタ４１４と、ＰＣの値を保持するＰＣ保持用Ｆ／Ｆ４３９と、ＰＣ保持用Ｆ／Ｆ４３９に保持されるＰＣ値から１６を減算するデクリメンタ４３４と、ＰＣ保持用Ｆ／Ｆ４３９に保持されるＰＣ値を１ずつ加算するインクリメンタ４３５とを含む。
【００４８】
分岐命令検出回路４０３は、ＩＦステージ保持回路１０３から出力された３２ビットの命令コードをデコード等することによって分岐命令を検出する。また、分岐命令保持Ｆ／Ｆ４０５は、分岐命令検出回路４０３による検出結果４０４を保持する。
【００４９】
選択信号生成部４２１は割込みを検出した場合には、選択信号４２２を出力して、セレクタ４３８に割込みベクタアドレスに対応した割込みアドレス４３１を選択させる。また、選択信号生成部４２１は、分岐命令保持Ｆ／Ｆ４０５からの検出結果４０６を参照して分岐命令であることを検出した場合には、セレクタ４３８に分岐先アドレス４３２を選択させる。
【００５０】
選択信号生成部４２１は、分岐命令保持Ｆ／Ｆ４０５からの検出結果４０６を参照して分岐命令であることを検出した後、分岐先の命令コードのｆｍビット４０７がＳフォーマットであることを示す“０”であれば、ＰＣ保持用Ｆ／Ｆ４３９に保持されるＰＣ値から１６を減算したアドレス４３６をセレクタ４３８に選択させる。このとき、減算カウンタ４１４に“１６”が設定される。この減算カウンタ４１４は、毎サイクル“１”ずつ値を減算し、その値が“０”になると減算を停止する。
【００５１】
このようにして、分岐先の命令コードがＳフォーマットの場合には、分岐先命令のアドレスから１６個分だけさかのぼることによって、必ずＬフォーマットの命令コードがＩＦステージ保持回路１０３に保持されるようにしている。なお、減算カウンタ４１４は、カウント値が“０”になるまで選択信号４１５を出力して、セレクタ４１２にｎｏｐ命令コード４１１を選択させる。これによって、分岐先命令から１６個分だけさかのぼった命令コードから、分岐先命令の直前の命令コードまでが実行されないようにしている。なお、減算カウンタ４１４は、カウント値が“０”になったときに選択信号４１５を出力して、セレクタ４１２にＩＦステージ保持回路１０３から出力される３２ビットの命令コード４１０を選択させる。
【００５２】
選択信号生成部４２１は、割込みおよび分岐のいずれも検出されず、かつ分岐先命令がＳフォーマットの命令コードでない場合には、セレクタ４３８にインクリメンタ４３５から出力される値４３７を選択させる。
【００５３】
また、割込みまたは例外が発生した場合には、セレクタ４３８はベクタアドレスに対応した割込みアドレス（例外アドレス）４３２の命令コードを選択して出力するが、この分岐先の命令コードがＳフォーマットの命令コードの場合には、図４に示すＩＦステージ保持回路１０３内のＦ／Ｆ２７１〜２７６および２８１〜２８５をリセット（セット）して、Ｌフォーマットの命令コードの初期値を設定するするようにしてもよい。これによって、分岐先アドレスの命令コードがＳフォーマットの場合でも、正しく動作を行なうことが可能になる。
【００５４】
以上の説明においては、全てハードウェアによって処理を行なうようにしているが、分岐先命令がＳフォーマットの命令コードであることが検出されたときに、ＴＲＡＰを発生させることによってソフトウェアによって処理させることも可能である。
【００５５】
また、プログラム中に静的に固定されている割込みアドレスや、分岐先を示すラベルで指定されるアドレスに必ずＬフォーマットの命令コードが配置されるように、コンパイラなどを設計することによって、マイクロプロセッサの誤動作を防止することも可能である。
【００５６】
以上説明したように、本実施の形態におけるマイクロプロセッサによれば、分岐先命令がＳフォーマットの命令コードの場合には、分岐先命令から１６個分だけさかのぼった命令コードを実行するようにしたので、分岐先のＳフォーマットの命令コードに対応したＬフォーマットの命令コードが、必ずＩＦステージ保持回路１０３に保持されるようになり、マイクロプロセッサの誤動作を防止することが可能となった。
【００５７】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００５８】
【発明の効果】
本発明のある局面によれば、命令フェッチ手段は、フェッチした命令コードがショートタイプの命令コードの場合には、直近のロングタイプの命令コードの一部によってショートタイプの命令コードを拡張し、拡張後の命令コードを命令デコード手段へ出力するので、命令メモリの容量やプログラム自体の容量を削減することが可能となった。
【００５９】
本発明の別の局面によれば、命令フェッチ手段は、フェッチした命令コードがショートタイプの命令コードの場合には、予めレジスタに設定された値によってショートタイプの命令コードを拡張し、拡張後の命令コードを命令デコード手段へ出力するので、命令メモリの容量やプログラム自体の容量を削減することが可能となった。
【図面の簡単な説明】
【図１】マイクロプロセッサの概略構成の一例を示すブロック図である。
【図２】ＰＣ制御部１０８の詳細を示す図である。
【図３】本発明の第１の実施の形態におけるマイクロプロセッサで実行される命令フォーマットの概念を説明するための図である。
【図４】本発明の第１の実施の形態におけるマイクロプロセッサのＩＦステージ保持回路１０３の内部構成を示すブロック図である。
【図５】選択信号生成回路２９１によって生成される選択信号２９２の値と、生成条件との関係を示す図である。
【図６】本発明の第２の実施の形態におけるマイクロプロセッサの概念を説明するための図である。
【図７】本発明の第３の実施の形態におけるマイクロプロセッサのＩＦステージ保持回路およびＰＣ制御部の概略構成を示すブロック図である。
【符号の説明】
１００  マイクロプロセッサ、１０１  命令メモリ、１０３  ＩＦステージ保持回路、１０５  デコード用組合せ回路、１０７  ＩＤステージＦ／Ｆ、１０８ＰＣ制御部、１１０  組合せ回路、１１２  ＥＸステージＦ／Ｆ、１５１，４２１  選択信号生成部、１５６，２５１〜２５６，２６１〜２６５，２９８，４１２，４３８  セレクタ、１５７，４３９  ＰＣ保持用Ｆ／Ｆ、１５９，４３５インクリメンタ、２７１〜２７６，２８１〜２８５，２９４  Ｆ／Ｆ、２９１選択信号生成回路、４０３  分岐命令検出回路、４０５  分岐命令保持Ｆ／Ｆ、４１４  減算カウンタ、４３４  デクリメンタ。
【図１】
2004355477.tif 000003
【図２】
2004355477.tif 000004
【図３】
2004355477.tif 000005
【図４】
2004355477.tif 000006
【図５】
2004355477.tif 000007
【図６】
2004355477.tif 000008
【図７】
2004355477.tif 000009