(57)【要約】    【課題】  本発明は、プログラムのコード効率の向上と柔軟なプログラミングを実現するマイクロプロセッサを提供する。    【解決手段】  命令解読結果１３５が命令のオペランド部と次のサイクルでフェッチされた命令とを連接するものであったときに、命令のオペランド部１３３と次のサイクルで命令メモリからフェッチされた命令１３１とが連接器１０４により連接され、前記命令の次のサイクルでフェッチされた命令のオペコード部が選択器１０２により命令解読結果１３５に対応する命令のオペコード部に置き換えられ、連接器１０４からの出力が通常の命令のオペランドと同様に扱われる。【選択図】      図１
2005293106.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリから所定長単位で読み出された命令のオペコード部を解読する命令解読手段と、
前記命令解読手段による命令解読結果に基づいて、当該解読された命令のオペランド部の少なくとも一部と当該命令の次の命令とを連接して出力する連接手段と、
前記命令解読手段による命令解読結果に基づいて、前記次の命令のオペコード部を所定の命令のオペコード部に置き換える置換手段とを備えることを特徴とするマイクロプロセッサ。
【請求項２】
前記命令のオペランド部にはレジスタ番号識別子を含み、当該レジスタ番号識別子に基づいて、前記連接手段からの出力をレジスタファイルに書き込むレジスタ書き込み手段を備えることを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
前記連接手段からの出力に対して所定の演算を行って出力するデータ処理手段を備えることを特徴とする請求項１記載のマイクロプロセッサ。
【請求項４】
前記命令のオペランド部にはレジスタ番号識別子を含み、当該レジスタ番号識別子に基づいて、前記データ処理手段からの出力をレジスタファイルに書き込むレジスタ書き込み手段を備えることを特徴とする請求項３記載のマイクロプロセッサ。
【請求項５】
前記データ処理手段からの出力をメモリアドレスとしてメモリに読み書きするメモリアクセス手段を備えることを特徴とする請求項３又は４記載のマイクロプロセッサ。
【請求項６】
前記レジスタファイルから読み出されたデータと前記連接手段からの出力とを前記データ処理手段により演算した演算結果をメモリアドレスとしてメモリに読み書きするメモリアクセス手段を備えることを特徴とする請求項３又は４記載のマイクロプロセッサ。
【請求項７】
前記連接手段からの出力をメモリアドレスとしてメモリに読み書きするメモリアクセス手段を備えることを特徴とする請求項１乃至４のいずれか１項に記載のマイクロプロセッサ。
【請求項８】
前記メモリアクセス手段が有する機能を複数組み合わせた他のメモリアクセス手段を有することを特徴とする請求項５乃至７のいずれか１項に記載のマイクロプロセッサ。
【請求項９】
前記命令解読手段はｎ（ｎ：１以上の整数）サイクルで命令のオペコード部を解読して、１サイクルよりも短い時間で中間解読結果を出力し、前記置換手段が前記中間解読結果に基づいて前記命令のオペコード部を所定の命令のオペコード部に置き換えることを特徴とする請求項１乃至８のいずれか１項に記載のマイクロプロセッサ。
【請求項１０】
前記命令のオペランド部を遅延するオペランド遅延手段と、
所定の指示に基づいて、前記命令のオペランド部または前記オペランド遅延手段によって遅延された命令のオペランド部のいずれかを選択する第１の選択手段とを備え、
前記レジスタ書き込み手段は、前記第１の選択手段によって選択された命令のオペランド部に含まれるレジスタ番号識別子に基づいて、前記連接手段からの出力をレジスタファイルに書き込むことを特徴とする請求項２記載のマイクロプロセッサ。
【請求項１１】
前記連接手段からの出力を遅延する連接結果遅延手段と、
所定の指示に基づいて、前記連接手段からの出力または前記連接結果遅延手段からの出力を選択する第２の選択手段とを備え、
前記データ処理手段は、前記第２の選択手段からの出力に対して所定の演算を行って出力することを特徴とする請求項３記載のマイクロプロセッサ。
【請求項１２】
前記置換手段は、前記命令のオペコード部をｎｏｐ命令のオペコード部に置き換えることを特徴とする請求項１乃至１１のいずれか１項に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、特に、命令長固定で所謂パイプラインを備えたＲＩＳＣ型のマイクロプロセッサに関する。
【背景技術】
【０００２】
近年、マイクロプロセッサを用いた製品は、ますます高機能化が求められ、それに伴ってそのプログラムのコードサイズは巨大化している。ところが、携帯端末に代表される組み込み型のマイクロプロセッサが搭載された製品においては、コードサイズの増大は実装すべきＲＯＭの容量や個数の増加を招くので、製品のコストを上昇させてしまう。従って、このような製品においては、可能な限りそのコードサイズを縮小しておくことが望まれる。
【０００３】
プログラムのコードサイズの縮小化を実現する従来技術として、命令の実行ユニットに供給される最大のデータ語長よりも短いビット数の固定長命令フォーマットを採用する方法がある。例えば、レジスタに格納されるデータ語長が３２ビットであるとすると、命令語長を１６ビットとする方法である。
【０００４】
固定長命令フォーマットの長所は、ソース・レジスタとデスティネーション・レジスタの命令フォーマット中のフィールドを固定することにより、オペコード部分のデコードをしなくとも、どのレジスタを読めばよいかを決められる点と、即値をデコードする際に境界の調整が不要な点である。このことにより、命令をデコードする機構が小型化・高速化される。なお、ここでは、オペコードは、マイクロプロセッサにフェッチされた命令の中で命令デコーダによって解読される部分であり、その命令の種類すなわち演算処理を特定するコードである。
【０００５】
さらに、データ語長よりも短いビット数の命令長にすることにより、コード効率が向上する。このことにより、実装するＲＯＭの容量を小さくでき、製品の小型化と低コスト化を実現できる。
【０００６】
しかしながら、データ語長よりも短いビット数の固定長命令フォーマットを採用することに付随する問題点がある。例えば、固定長命令フォーマットのビット数よりも長いビット数の即値データをプログラム中で指定する場合に、多くのステップを要してしまう。具体的には、命令語長が１６ビットとし、そのうち８ビットをオペコードとすると、オペランドとして使用できるフィールドは８ビットである。８ビットのうちデスティネーション・レジスタの指定に４ビット使うと、即値データの指定にはオペランドの残り４ビットしか使えない。８ビットの即値データを指定するには、上位４ビットの即値データをレジスタに格納した後、左シフトし、次の命令で下位４ビットの即値データを前記レジスタに格納された上位４ビットの即値データと足し合わせるというステップを踏まなければならない。
【０００７】
このような問題に対処するマイクロプロセッサとして、特許文献１では、命令の実行ユニットに供給される最大のデータ語長、例えば３２ビットよりもビット数の少ない固定長命令フォーマット、例えば１６ビット固定長命令フォーマットを採用し、更に、固定長命令フォーマットのビット数の制限が即値データの利用に制限を与えないようにするために、プログラム・カウンタの値に対してディスプレースメントの値をオフセットとするレジスタ相対で即値データを指定させる記述を含む命令をサポートしている。
【特許文献１】特開２０００−２９６９２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記マイクロプロセッサの従来例では、プログラム・カウンタ相対で即値データを指定することに付随する種々の問題がある。例えば、即値データをロードするためには、実行しているコードから近い番地に即値データを埋め込まなければならない。そのため、即値データが埋め込まれたセクションを飛び越すためのジャンプ命令が必要になる。このことにより、プログラム中の多くの箇所にデータセクションを飛び越すためのジャンプ命令を置くことになり、プログラム全体の実行速度やコード効率を低下させてしまう。
【０００９】
そこで、本発明は、かかる問題に鑑みてなされたものであり、プログラムのコード効率の向上と柔軟なプログラミングを実現するマイクロプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明のマイクロプロセッサは、命令メモリから所定長単位で読み出された命令のオペコード部を解読する命令解読手段と、前記命令解読手段による命令解読結果に基づいて、当該解読された命令のオペランド部の少なくとも一部と当該命令の次の命令とを連接して出力する連接手段と、前記命令解読手段による命令解読結果に基づいて、前記次の命令のオペコード部を所定の命令のオペコード部に置き換える置換手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明のマイクロプロセッサによれば、命令解読結果が命令のオペランド部と次のサイクルでフェッチされた命令とを連接するものであったときに、それらが連接され、前記命令の次のサイクルでフェッチされた命令のオペコード部が命令解読結果に対応する命令のオペコード部に置き換えられ、連接結果が通常の命令のオペランドと同様に扱われるので、連接結果を即値データとして扱うことができ、命令メモリから１回にフェッチする命令語長よりも長いビット幅の即値データを扱うことができる。
【００１２】
また、本発明のマイクロプロセッサによれば、従来より少ないステップで多ビット長の即値データを扱うことができ、多ビット長の即値データを被演算データとして扱い、さらにメモリアドレスの生成に用いることができるので、プログラムのコード効率の向上と柔軟なプログラミングを実現することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態を図面を参照しつつ詳細に説明する。
【００１４】
図１は、本発明の第１の実施の形態に係るマイクロプロセッサの内部構成を示すブロック図である。
【００１５】
図１において、マイクロプロセッサは、命令メモリ１０１、選択器１０２、命令解読器１０３、連接器１０４、演算器１０５、データメモリ１０６、選択器１０７、レジスタファイル１０８、指示器１０９、及び遅延器１２１〜１２４から構成される。
【００１６】
図２（ａ）〜図２（ｃ）は、図１のマイクロプロセッサが備える命令のフォーマットの一部を示す図である。
【００１７】
図２（ａ）に示す命令フォーマットは１６ビット長の命令である。第１５〜第８ビットはオペコード（ｏｐｅｃｏｄｅ）２１１を示し、第７〜第０ビットはオペランドを示す。なお、ここでは最左端ビットをＭＳＢ(Most Significant Bit)とし、最右端ビットをＬＳＢ(Least Significant Bit)とする。
【００１８】
オペランドのうち上位４ビットは即値データ又は演算結果の格納先を表すデスティネーションフィールド（ｒｄ）２１２を示し、下位４ビットは即値データ（ｉｍｍ）２１３を示す。
【００１９】
一方、図２（ｂ）及び図２（ｃ）に示す各命令フォーマットは３２ビット長の命令である。図２（ｂ）の命令フォーマットのうち、第３１〜第２４ビットはオペコード２１１を示し、第２３〜第２０ビットがデスティネーションフィールド２１２を示し、第１９〜第０ビットが即値データ２１４を示す。
【００２０】
図２（ｃ）の命令フォーマットのうち、第３１〜第２４ビットがオペコード２１１を示し、第２３〜第０ビットが即値データ２１５を示す。図２（ｃ）の命令フォーマットの即値データ又は演算結果は、あらかじめ定義された番号のレジスタに常に格納される。
【００２１】
なお、図１のマイクロプロセッサの図２（ａ）及び図２（ｂ）の命令フォーマットにおいては、デスティネーションフィールド２１２はオペランドの上位ビット側に定義されているが、本発明の他の実施の形態においてはオペランドの下位ビット側に定義され得る。
【００２２】
次に、図１のマイクロプロセッサの動作を図１、図２（ａ）〜図２（ｃ）を参照して説明する。
【００２３】
命令は命令メモリ１０１から常に１ワード（１６ビット）ずつフェッチされて遅延器１２１に送られる。遅延器１２１によって遅延された命令語長１６ビットの命令１３１は、８ビットのオペコード１３２と８ビットのオペランド１３３に分割されると同時に、１６ビットの命令１３１のまま連接器１０４に入力される。
【００２４】
オペコード１３２は選択器１０２を通って命令解読器１０３に入力される。命令解読器１０３は、オペコード１３２を解読し、命令解読結果１３５を出力する。命令解読結果１３５は遅延器１２２によって遅延される。オペランド１３３は遅延器１２３によって遅延される。
【００２５】
指示器１０９は、遅延器１２２によって遅延された命令解読結果１３５に基づいて、選択器１０２、連接器１０４、演算器１０５、データメモリ１０６、及び選択器１０７にそれぞれ指示を送る。
【００２６】
連接器１０４は、指示器１０９からの指示に基づいて、遅延器１２２によって遅延された命令解読結果１３５が図２（ｂ）の命令フォーマットの命令であったときは、遅延器１２３によって遅延された８ビットのオペランド１３６のうち下位４ビットと、遅延器１２１によって遅延された次の１６ビットの命令１３１とを連接して２０ビットの即値１３８を出力する。
【００２７】
一方、遅延器１２２によって遅延された命令解読結果１３５が図２（ｃ）の命令フォーマットの命令であったときは、遅延器１２３によって遅延された８ビットのオペランド１３６と、遅延器１２１によって遅延された次の１６ビットの命令１３１とを連接して２４ビットの即値１３８を出力する。
【００２８】
遅延器１２２によって遅延された命令解読結果１３５が図２（ｂ）又は図２（ｃ）の命令フォーマットの命令でなかった場合、連接器１０４は遅延器１２３によって遅延された８ビットのオペランド１３６の即値データをそのまま出力する。
【００２９】
選択器１０２は、指示器１０９からの指示に基づいて、遅延器１２２によって遅延された命令解読結果１３５が図２（ｂ）もしくは図２（ｃ）の命令フォーマットの命令であったときは、オペコード１３２をｎｏｐ命令（何もしない命令）に置換して命令解読器１０３に出力する。
【００３０】
これにより、マイクロプロセッサは、１回にフェッチされる命令語長よりも長いビット幅の即値データを１サイクルで作り出すことが可能となる。
【００３１】
連接器１０４からの出力１３８は、演算器１０５、データメモリ１０６、及び選択器１０７に出力される。
【００３２】
演算器１０５は、指示器１０９からの指示に基づいて、連接器１０４からの出力１３８や遅延器１２４によって遅延されたレジスタファイル１０８からの出力に対して演算を行ない、演算結果１４０を出力する。これにより、長いビット幅の即値データを演算対象とすることができる。
【００３３】
データメモリ１０６は、指示器１０９からの指示に基づいて、連接器１０４からの出力１３８又は演算結果１４０又は遅延器１２４によって遅延されたレジスタファイル１０８からの出力１３９のいずれか一つをメモリアドレスとして、データが読み出され、あるいは、連接器１０４からの出力１３８又は演算結果１４０又は遅延器１２４によって遅延されたレジスタファイル１０８からの出力１３９のいずれか一つのデータが書き込まれる。
【００３４】
選択器１０７は、連接器１０４からの出力１３８、演算結果１４０、データメモリからの出力１４１のいずれか一つを指示器１０９からの指示に基づいて選択してレジスタファイル１０８に出力する。
【００３５】
レジスタファイル１０８は、選択器１０７からの出力１４２が、オペランドのデスティネーション１３７によって示される番号のレジスタに書き込まれる。遅延器１２２によって遅延された命令解読結果１３５が図２（ｃ）の命令フォーマットの命令であったときは、あらかじめ定義されている番号のレジスタに選択器１０７からの出力１４２が書き込まれる。図２（ｃ）の命令フォーマットを備えることで、より長いビット幅の即値データをレジスタにロードすることができる。
【００３６】
以上説明したように、図１のマイクロプロセッサにおいては、命令メモリ１０１から１回にフェッチされる命令語長よりも長いビット幅の即値データを１サイクルで作り出すことができ、該即値データを演算対象とすることができる。
【００３７】
また、この即値データを１ステップでレジスタファイルにロードすることができる。さらに、上述した多ビット長の即値データをメモリアドレスとしたり、即値データをインクリメントあるいはデクリメントしながらメモリアドレスとしたり、オペランドで指定したレジスタの値に対して即値をオフセットとするレジスタ相対でメモリアドレスを指定することができ、プログラムのコード効率の向上と、より柔軟なプログラミングが可能となる。
【００３８】
次に、本発明の第２の実施の形態に係るマイクロプロセッサについて説明する。
【００３９】
図３は、本発明の第２の実施の形態に係るマイクロプロセッサの内部構成を示すブロック図である。図１に示した上記第１の実施の形態におけるマイクロプロセッサと比べると、本マイクロプロセッサは、命令解読器１０３がオペコードを解読するのに１サイクルを要する。
【００４０】
また、遅延器１２１からの出力された命令のオペランド部を遅延させて遅延器１２３に出力する遅延器１２５と、レジスタファイル１０８からの出力を遅延させて遅延器１２４に出力する遅延器１２７と、遅延器１２１によって遅延された１６ビットの命令１３１を遅延させて連接器１０４に出力する遅延器１２６が挿入される。
【００４１】
さらに、命令解読器１０３は、１サイクルよりも短い時間で中間解読結果１４３を選択器１０２に出力する。選択器１０２は、中間解読結果１４３が図２（ｂ）もしくは図２（ｃ）の命令フォーマットの命令であったときは、オペコード１３２をｎｏｐ命令（何もしない命令）に置換して命令解読器１０３に出力する。
【００４２】
これにより、命令解読器１０３におけるオペコードの解読で１サイクル以上かかっても、正しくオペランド１３１と命令１３３を連接器１０４が連接することができ、オペコード１３２は中間命令解読結果１４３に対応するオペコードに置き換えられる。
【００４３】
次に、本発明の第３の実施の形態に係るマイクロプロセッサについて説明する。
【００４４】
図４は、本発明の第３の実施の形態に係るマイクロプロセッサの内部構成を示すブロック図である。本マイクロプロセッサは、図１に示した上記第１の実施の形態のマイクロプロセッサの構成に加えて、選択器１１０、選択器１１１、遅延器１２８、及び遅延器１２９を備える。
【００４５】
遅延器１２８は、オペランドのデスティネーション１３７を遅延させる。選択器１１０は、指示器１０９からの指示に基づいて、遅延器１２３によって遅延されたオペランドのデスティネーション１３７と、遅延器１２８によって遅延されたオペランドのデスティネーション１４４のうち一つを選択する。遅延器１２９は、連接器１０４からの出力１３８を遅延させる。選択器１１１は、指示器１０９からの指示に基づいて、連接器１０４からの出力１３８と、遅延器１２９によって遅延された連接器１０４からの出力１４５のうち一つを選択する。
【００４６】
遅延器１２２によって遅延された命令解読結果１３５が図２（ｂ）もしくは図２（ｃ）の命令フォーマットの命令であったときは、選択器１０２が、オペコード１３２をｎｏｐ命令又はデータ処理を行なう命令のオペコードに置換して命令解読器１０３に出力する。
【００４７】
次に、図４のマイクロプロセッサの動作を図５を参照して説明する。
【００４８】
図５は、図４のマイクロプロセッサが備える命令をアセンブラで記述した例と、その命令解読結果を示す図である。
【００４９】
図５に示すステップＳ５０１のｌｉｘ命令は、オペコード１３２として命令解読器１０３に入力され、命令解読器１０３によってステップＳ５０１ａのｌｉ命令として解読される。ステップＳ５０１ａのｌｉ命令は、レジスタファイル１０８の中の第５レジスタに即値データ０ｘ３４５６７を書き込む命令である。次のサイクルで、オペコード１３２は選択器１０２によってステップＳ５０１ｂのｎｏｐ命令のオペコードに置き換えられる。
【００５０】
次に、ステップＳ５０２のｌｉｘ命令は、命令解読器１０３によってステップＳ５０２ａのｌｉ命令として解読される。ステップＳ５０２ａのｌｉ命令は、ステップＳ５０１ａのｌｉ命令と同様の処理を行なう命令である。次のサイクルで、オペコード１３２は選択器１０２によってステップＳ５０２ｂのｌｉｄ１５命令のオペコードに置き換えられる。
【００５１】
ステップＳ５０２ｂのｌｉｄ１５命令は、オペランドの即値データ０ｘ３４５６７を、レジスタファイル１０８の中の第１５レジスタに書き込む命令である。前記オペランドの即値データは、遅延器１２９によって遅延された連接器１０４からの出力１４５である。
【００５２】
次に、ステップＳ５０３のｐｕｓｈｌｉｘ命令は、命令解読器１０３によって、ステップＳ５０３ａのｐｕｓｈ命令として解読される。ステップＳ５０３ａのｐｕｓｈ命令は、レジスタファイル１０８の中の第５レジスタに格納されているデータを、データメモリ１０６内のスタック領域に退避する命令である。次のサイクルで、オペコード１３２は選択器１０２によってステップＳ５０３ｂのｌｉ命令に置き換えられる。
【００５３】
ステップＳ５０３ｂのｌｉ命令は、ステップＳ５０１ａのｌｉ命令と同様の処理を行なう命令である。ステップＳ５０３ｂのｌｉ命令のオペランドのうち、デスティネーション・レジスタを示すｄ５は、遅延器１２８によって遅延されたオペランドのデスティネーション１４４である。前記オペランドのうち、即値データを示す０ｘ３４５６７は、遅延器１２９によって遅延された連接器１０４からの出力１４５である。
【００５４】
このように、選択器１０２がオペコード１３２を前のサイクルでフェッチされた連接命令のオペランドを使用する命令のオペコードに置換することで、マイクロプロセッサのパイプラインにバブルが発生することなく、マイクロプロセッサが効率よくコードを実行できる。なお、本発明によって実現されるマイクロプロセッサは、上記実施例に限定されるものではない。
【図面の簡単な説明】
【００５５】
【図１】本発明の第１の実施の形態に係るマイクロプロセッサの内部構成を示すブロック図である。
【図２】図１のマイクロプロセッサが備える命令のフォーマットの一部を示す図であり、（ａ）は１６ビット長の命令、（ｂ），（ｃ）は３２ビット長の命令を示す。
【図３】本発明の第２の実施の形態に係るマイクロプロセッサの内部構成を示すブロック図である。
【図４】本発明の第３の実施の形態に係るマイクロプロセッサの内部構成を示すブロック図である。
【図５】図４のマイクロプロセッサが備える命令をアセンブラで記述した例と、その命令解読結果を示す図である。
【符号の説明】
【００５６】
１０１  命令メモリ
１０２  選択器
１０３  命令解読器
１０４  連接器
１０５  演算器
１０６  データメモリ
１０７  選択器
１０８  レジスタファイル
１０９  指示器
１１０  選択器
１１１  選択器
１２１〜１２９  遅延器
【図１】
2005293106.tif 000003
【図２】
2005293106.tif 000004
【図３】
2005293106.tif 000005
【図４】
2005293106.tif 000006
【図５】
2005293106.tif 000007