(57)【要約】【課題】汎用レジスタを用いないプロセッサを提供すること。【解決手段】複数のＣｏ−ＣＰＵが互いに接続され、複数のＣｏ−ＣＰＵが別個の演算を並列に実行するプロセッサが提供される。複数のＣｏ−ＣＰＵのそれぞれは、コマンドデコーダ２２と、ＡＬＵ２１と、複数のセレクタ２３〜３６とを含む。コマンドデコーダ２２は、コマンドコードをデコードする。セレクタ２３〜２８は、隣接する複数のＣｏ−ＣＰＵからの出力およびＭＲＡＭからの出力を受け、少なくとも１つを選択的に出力する。ＡＬＵ２１は、セレクタ２７および２８からの出力に対してコマンドデコーダ２２によるデコード結果に応じた演算を行なう。セレクタ３１〜３２は、ＡＬＵ２１による演算結果および隣接する複数のＣｏ−ＣＰＵからの出力を受け、隣接する他の複数のＣｏ−ＣＰＵに選択的に出力する。したがって、汎用レジスタを用いないプロセッサを提供することが可能になる。【選択図】図３
2008217538.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算ユニットが互いに接続され、該複数の演算ユニットが別個の演算を並列に実行するプロセッサであって、
前記複数の演算ユニットのそれぞれは、命令コードをデコードするデコード手段と、
隣接する複数の演算ユニットからの出力に対して前記デコード手段によるデコード結果に応じた演算を行ない、演算結果を隣接する他の複数の演算ユニットに出力する演算手段とを含む、プロセッサ。
【請求項２】
前記演算ユニットはさらに、前記隣接する複数の演算ユニットからの出力および前記プロセッサの外部にある記憶装置からの出力を受け、少なくとも１つを前記演算手段に選択的に出力する第１の選択手段を含む、請求項１記載のプロセッサ。
【請求項３】
前記第１の選択手段は、前記隣接する複数の演算ユニットからの出力、前記プロセッサの外部にある記憶装置からの出力および該記憶装置よりも広帯域の外部入力を受け、少なくとも１つを前記演算手段に選択的に出力する、請求項２記載のプロセッサ。
【請求項４】
前記演算ユニットはさらに、前記演算手段による演算結果および前記隣接する複数の演算ユニットからの出力を受け、隣接する他の複数の演算ユニットに選択的に出力する第２の選択手段を含む、請求項１〜３のいずれかに記載のプロセッサ。
【請求項５】
前記複数の演算ユニットの演算結果のいずれかが、前記プロセッサの外部にある記憶装置のアドレスとして出力される、請求項１記載のプロセッサ。
【請求項６】
前記プロセッサはさらに、命令コードをフェッチするためのアドレスを格納するプログラムカウンタを含み、
前記複数の演算ユニットの演算結果のいずれかが、前記プログラムカウンタに設定される、請求項１記載のプロセッサ。
【請求項７】
前記プロセッサはさらに、電源が停止したことを検出する検出手段と、
前記検出手段によって電源停止が検出された場合に、前記プログラムカウンタの値を退避する手段を含む、請求項６記載のプロセッサ。
【請求項８】
前記演算手段は、前記命令コードが即値のロード命令の場合に、当該即値を演算結果としてそのまま出力する、請求項１記載のプロセッサ。
【請求項９】
複数の演算ユニットが互いに接続され、該複数の演算ユニットが別個の演算を並列に実行するプロセッサと、
不揮発メモリとを含んだマイクロコンピュータシステムであって、
前記複数の演算ユニットのそれぞれは、命令コードをデコードするデコード手段と、
隣接する複数の演算ユニットからの出力および前記不揮発メモリからの出力を受け、少なくとも１つを選択的に出力する第１の選択手段と、
前記第１の選択手段からの出力に対して前記デコード手段によるデコード結果に応じた演算を行なう演算手段と、
前記演算手段による演算結果および前記隣接する複数の演算ユニットからの出力を受け、隣接する他の複数の演算ユニットに選択的に出力する第２の選択手段とを含む、マイクロコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
複数の演算器を含んだプロセッサに関し、特に、それぞれの演算器が異なる命令コードを並列に処理することが可能なプロセッサおよびそれを用いたマイクロコンピュータシステムに関する。
【背景技術】
【０００２】
近年、プロセッサによる処理性能の向上を図るために、複数の演算器を並列に動作させる技術、たとえばＳＩＭＤ（Single Instruction/Multiple Data）、ＭＩＭＤ（Multiple Instruction/Multiple Data）などの開発が盛んに行なわれている。
【０００３】
一方、プロセッサを搭載したシステムにおいて使用されるメモリも多様化しており、ＭＲＡＭ（Magnetic Random Access Memory）を用いたものも開発されている。ＭＲＡＭは不揮発メモリではあるが、同じ不揮発メモリであるフラッシュメモリよりも高速に読出し／書込み動作を行なうことができる。また、ＭＲＡＭは、フラッシュメモリのように書換え回数の制限がない。
【０００４】
したがって、プロセッサと不揮発メモリとを混載したＭＣＵ（Micro Controller Unit）、いわゆるワンチップマイコンにおいて、比較的書換え回数が少ない不揮発のＲＯＭ（Read Only Memory）として用いられる部分以外に、ＳＲＡＭ（Static Random Access Memory）が使われていた部分にもＭＲＡＭを用いることができる。これに関連する技術として、下記の特許文献１に開示された発明がある。
【０００５】
特許文献１に開示された発明において、キャッシュ制御部が、ＣＰＵから３２ビットのロング・データの書き込み要求時のサイクルではＣＰＵから出力されるアドレスおよびロング・データを保持するとともに、書き込むべき３２ビットのロング・データのうち８ビットだけをＣＰＵから出力されるアドレスに対応するＭＲＡＭの記憶領域に格納する。また、ＣＰＵがＭＲＡＭへのデータの読み出し／書き込み要求を行なわないサイクル時に、保持しているアドレスに対応するＭＲＡＭの記憶領域に、保持しているロング・データのうちＭＲＡＭに格納していない残りのデータを８ビット単位で格納する。
【特許文献１】特開２００６−３３８５１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述のように、ワンチップマイコンなどにおいて、ＭＲＡＭを従来ＳＲＡＭが使われていた部分にも用いると、ＭＲＡＭは不揮発メモリであるため、瞬間的に停電状態（以下、瞬停と略す。）となって電源の供給が一時的に停止した場合でも、処理中のデータが失われることはない。そのため、瞬停から復帰して電源の供給が再開されたときに、瞬停直後のプログラムから再開することが可能となる。
【０００７】
しかしながら、従来のプロセッサは演算を複数の汎用レジスタを用いて行なっているため、瞬停直後のプログラムから処理を再開するためには電源が完全に停止する前に全ての汎用レジスタの内容をＭＲＡＭに退避する必要がある。したがって、全ての汎用レジスタの内容をＭＲＡＭに退避するまで電源を維持する必要がある。
【０００８】
また、従来のプロセッサは仕様上規定された汎用レジスタ以外にも、パイプライン処理などのためにさらに多くのレジスタを備えており、これらのレジスタの内容を全て退避するまで電源を維持するのが困難となってきている。
【０００９】
また、上述した特許文献１は、ＭＲＡＭを用いたデータ処理装置を開示しているが、瞬停時における処理の開示はない。
【００１０】
本発明は、上記問題点を解決するためになされたものであり、その目的は、汎用レジスタを用いないプロセッサおよびそれを用いたマイクロコンピュータシステムを提供することである。
【課題を解決するための手段】
【００１１】
本発明の一実施例によれば、複数のＣｏ−ＣＰＵが互いに接続され、複数のＣｏ−ＣＰＵが別個の演算を並列に実行するプロセッサが提供される。複数のＣｏ−ＣＰＵのそれぞれは、コマンドデコーダと、ＡＬＵと、複数のセレクタとを含む。コマンドデコーダは、コマンドコードをデコードする。セレクタは、隣接する複数のＣｏ−ＣＰＵからの出力およびＭＲＡＭからの出力を受け、少なくとも１つを選択的に出力する。ＡＬＵは、セレクタからの出力に対してコマンドデコーダによるデコード結果に応じた演算を行なう。セレクタは、ＡＬＵによる演算結果および隣接する複数のＣｏ−ＣＰＵからの出力を受け、隣接する他の複数のＣｏ−ＣＰＵに選択的に出力する。
【発明の効果】
【００１２】
この実施例によれば、複数のＣｏ−ＣＰＵが互いに接続され、複数のＣｏ−ＣＰＵが別個の演算を並列に実行するので、汎用レジスタを用いないプロセッサを提供することが可能になるという効果がある。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明の実施の形態におけるプロセッサ（以下、ＣＰＵ（Central Processing Unit）とも呼ぶ。）を含んだＭＲＡＭ内蔵マイコンの概略構成の一例を示す図である。このマイコン１００は、ＣＰＵ１と、命令コードを格納するＭＲＡＭ２および３と、シフタ群４および５と、データを格納するＭＲＡＭ６および７とを含む。なお、本実施の形態においては、マイコンがＭＲＡＭを内蔵する場合について説明するが、電源が停止してもデータを保持することが可能な他の不揮発メモリを内蔵してもよい。
【００１４】
ＣＰＵ１は、命令コード（以下、コマンドコードとも呼ぶ。）をフェッチするときにＣＡ（Code Address）にアドレスを出力する。ＭＲＡＭ２および３はそれぞれ、ＣＰＵ１からのアドレスに応じて８×１６（＝１２８）ビットの命令コードを同時に出力する。シフタ群４および５は、連続したアドレスの命令コードをコードバスに順次出力するように制御される。ＣＰＵ１は、コードバスに出力された命令コードをＣＣ（Command Code）を介して受け、命令コードに応じた処理を行なう。
【００１５】
ＣＰＵ１は、ＭＲＡＭ６および７からデータを読み出すときにＤＡＯ（Data Address Out）にアドレスを出力する。ＭＲＡＭ６および７は、ＣＰＵ１からのアドレスに応じて３２ビットのデータを出力する。ＣＰＵ１は、ＭＲＡＭ６および７から出力されたデータをＭＤＩ（Memory Data Input）を介して読込む。
【００１６】
ＣＰＵ１は、ＭＲＡＭ６および７にデータを書込むときにＤＡＯにアドレスを出力すると共に、ＤＯ（Data Out）に３２ビットのデータを出力する。ＭＲＡＭ６および７は、ＣＰＵ１からのアドレスに応じてデータを書込む。
【００１７】
また、ＣＰＵ１には外部との高速／広帯域インタフェースであるＨＳＩ（High Speed Input）およびＨＳＯ（High Speed Output）が設けられており、ＭＲＡＭ以外のデバイスとの間で高速にデータの読出し／書込みが可能である。
【００１８】
図２は、ＣＰＵ１の内部構成の一例を示すブロック図である。ＣＰＵ１は、１６個のＣｏ−ＣＰＵ１１−０〜１１−１５と、プログラムカウンタ（ＰＣ）１２とを含む。なお、Ｃｏ−ＣＰＵは、演算ユニットとも呼ぶ。
【００１９】
Ｃｏ−ＣＰＵ１１−０〜１１−１５は、それぞれＬＬＩ、ＲＬＩ、ＬＬＯおよびＲＬＯを有している。ＬＬＩは、図２の下側に隣接するＣｏ−ＣＰＵのＲＬＯに接続される。また、ＲＬＩは、図２の下側に隣接するＣｏ−ＣＰＵのＬＬＯに接続される。なお、図２の最下段のＣｏ−ＣＰＵ１１−１２〜１１−１５のＬＬＩのそれぞれは最上段のＣｏ−ＣＰＵ１１−０〜１１−３のＲＬＯのそれぞれに接続され、Ｃｏ−ＣＰＵ１１−１２〜１１−１５のＲＬＩのそれぞれはＣｏ−ＣＰＵ１１−０〜１１−３のＬＬＯのそれぞれに接続され、データを循環できるように接続されている。
【００２０】
また、Ｃｏ−ＣＰＵ１１−０〜１１−１５は、それぞれＨＢＩおよびＨＢＯを有しており、上述のように外部のデバイスとの間で高速にデータの読出し／書込みが行なえる。ＨＢＩは、ＨＳＩに接続される。ＨＢＯは、ＨＳＯに接続される。
【００２１】
また、一部のＣｏ−ＣＰＵは、ＤＢＩ、ＤＢＯ、ＡＢＯおよび／またはＰＢＯを有している。ＤＢＩは、ＭＤＩに接続される。ＤＢＩを有しているＣｏ−ＣＰＵのみ、ＭＲＡＭ６および７からのデータを入力することができる。ＤＢＯは、ＤＯに接続される。ＤＢＯを有するＣｏ−ＣＰＵのみがＭＲＡＭ６および７にデータを出力することができる。
【００２２】
ＡＢＯは、ＤＡＯに接続される。ＡＢＯを有しているＣｏ−ＣＰＵのみがＭＲＡＭ６および７にアドレスを出力することができる。ＰＢＯは、プログラムカウンタ１２に接続される。ＰＢＯを有するＣｏ−ＣＰＵのみがプログラムカウンタ１２の値を変更することが可能である。
【００２３】
また、Ｃｏ−ＣＰＵ１１−０〜１１−１５のそれぞれには、コマンドコード０〜１５が入力される。Ｃｏ−ＣＰＵ１１−０〜１１−１５のそれぞれは、コマンドコード０〜１５によって指定される演算を実行する。
【００２４】
図３は、Ｃｏ−ＣＰＵ１１−０〜１１−１５の内部構成を示すブロック図である。Ｃｏ−ＣＰＵ１１−０〜１１−１５のそれぞれは、ＡＬＵ２１と、コマンドデコーダ２２と、セレクタ２３〜３６とを含む。
【００２５】
コマンドデコーダ２２は、コマンドコード（Code）と、分岐判定を示すＴ＿ｉｎと、イミディエート値を示すＩＭＭＩとを受けてデコードし、デコード結果をＡＬＵ２１およびセレクタ２３〜３６に出力する。また、コマンドデコーダ２２は、イミディエート値をＩＭＭＬ＿ｏｕｔまたはＩＭＭＲ＿ｏｕｔを介して次段のＣｏ−ＣＰＵに出力する。
【００２６】
セレクタ２３および２４のそれぞれは、ＰＢＩの値およびＤＢＩの値のいずれかを選択して出力する。なお、ＰＢＩはＰＣの値が入力される端子であり、図２ではそれを省略している。
【００２７】
セレクタ２５は、ＬＬＩの値およびセレクタ２３の出力値のいずれかを選択して出力する。セレクタ２６は、ＲＬＩの値およびセレクタ２４の出力値のいずれかを選択して出力する。
【００２８】
セレクタ２７は、ＨＢＩの値およびセレクタ２５の出力値のいずれかを選択して出力する。セレクタ２８は、ＨＢＩの値およびセレクタ２６の出力値のいずれかを選択して出力する。セレクタ２９および３０は、セレクタ２７の出力値およびセレクタ２８の出力値のいずれかを選択して出力する。
【００２９】
セレクタ３１は、ＡＬＵ２１の出力値およびセレクタ２９の出力値のいずれかを選択して出力する。セレクタ３２は、ＡＬＵ２１の出力値およびセレクタ３０の出力値のいずれかを選択して出力する。
【００３０】
セレクタ３３は、セレクタ３１の出力値およびセレクタ３２の出力値のいずれかを選択してＨＢＯに出力する。セレクタ３４は、セレクタ３１の出力値およびセレクタ３２の出力値のいずれかを選択してＰＢＯに出力する。
【００３１】
セレクタ３５は、セレクタ３１の出力値およびセレクタ３２の出力値のいずれかを選択してＡＢＯに出力する。セレクタ３６は、セレクタ３１の出力値およびセレクタ３２の出力値のいずれかを選択してＤＢＯに出力する。
【００３２】
なお、セレクタ３１の出力値がそのままＬＬＯに出力され、セレクタ３２の出力値がそのままＲＬＯに出力される。
【００３３】
セレクタの切替えによってＬＬＩの値またはＲＬＩの値をそのままＬＬＯまたはＲＬＯに出力することにより、データをスルーすることも可能である。
【００３４】
ＡＬＵ２１は、コマンドデコーダ２２のデコード結果に応じて演算を行なう。このときの演算対象は、セレクタ２７の出力値およびセレクタ２８の出力値の中の１つまたは２つである。また、ＡＬＵ２１は、コマンドコードがイミディエート値のロード命令の場合、イミディエート値をそのまま出力する。また、ＡＬＵ２１は、演算によって発生したフラグ（Ｔビット）をＴ＿ｏｕｔを介して次段のＣｏ−ＣＰＵに出力する。
【００３５】
図４は、コマンドコードのビットアサインの一例を示す図である。コマンドコードは８ビットで構成され、そのうち上位４ビットが演算の種類を示し、下位４ビットがセレクタ２３〜３６の切替えを示す。演算の種類として使用頻度が高い命令（以下、標準命令と呼ぶ。）のみが記載されており、それ以外の演算は拡張命令としてサポートしている。すなわち、使用頻度が高い命令が１命令（８ビット）で構成され、使用頻度が低い命令が２命令（１６ビット）で構成される。各演算の詳細は後述する。
【００３６】
図４の“入力”はＡＬＵ２１にどの値が入力されるかを示しており、“出力”はＬＬＯおよびＲＬＯにどの値が出力されるかを示している。また、“外部出力”はＡＬＵ２１の演算結果が外部出力であるＨＢＯ、ＤＡＯ、ＤＯまたはＰＢＯのいずれかに出力される場合に記載されている。
【００３７】
たとえば、コマンドコードの下位４ビットが“００００”の場合、ＡＬＵ２１の入力としてＬＬＩおよびＲＬＩが選択され、ＡＬＵ２１の演算結果がＬＬＯに出力され、ＲＬＩの値がＲＬＯに出力されるようにセレクタ２３〜３６が切替えられる。
【００３８】
また、コマンドコードの下位４ビットが“０１００”の場合、ＡＬＵ２１の入力としてＬＬＩおよびＲＬＩが選択され、ＡＬＵ２１の演算結果がＬＬＯに出力され、ＲＬＩの値がＲＬＯに出力され、ＡＬＵ２１の演算結果が外部出力であるＨＢＯに出力されるようにセレクタ２３〜３６が切替えられる。
【００３９】
また、コマンドコードの下位４ビットが“１０１１”の場合、ＤＢＩを有するＣｏ−ＣＰＵであれば、ＡＬＵ２１の入力としてＬＬＩおよびＤＢＩが選択され、ＡＬＵ２１の演算結果がＬＬＯおよびＲＬＯに出力され、ＡＬＵ２１の演算結果が外部出力であるＡＢＯに出力されるようにセレクタ２３〜３６が切替えられる。ＤＢＩを有さないＣｏ−ＣＰＵであれば、ＡＬＵ２１の入力としてＬＬＩおよびＲＬＩが選択され、ＡＬＵ２１の演算結果がＬＬＯおよびＲＬＯに出力され、ＡＬＵ２１の演算結果が外部出力であるＡＢＯに出力されるようにセレクタ２３〜３６が切替えられる。なお、外部出力の“−／ＡＢＯ”は、ＡＢＯを有するＣｏ−ＣＰＵからのみＡＬＵ２１の演算結果が外部に出力され、ＡＢＯを有さないＣｏ−ＣＰＵからはＡＬＵ２１の演算結果が外部に出力されないことを示している。
【００４０】
なお、コマンドコードの下位４ビットがこれら以外の場合には、上記の説明と同様にセレクタが切替えられて入出力が制御される。
【００４１】
図５は、従来のＣＰＵ命令が本実施の形態におけるＣＰＵ１によってどのように実行されるかを示している。本実施の形態におけるＣＰＵ１の動作を、データ転送命令、算術演算命令、論理演算命令、シフト命令および分岐命令に分けて以下に説明する。
【００４２】
（データ転送命令）
従来のＣＰＵ命令“ＭＯＶ  ＃ｉｍｍ，Ｒｎ”は、即値ｉｍｍを符号拡張してレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＩＭＭ  ＃ｉｍｍ”として実行される。ＡＬＵ２１は、コマンドデコーダ２２に入力されたＩＭＭＩを符号拡張して出力する。
【００４３】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  ＠（ｄｉｓｐ，ＰＣ），Ｒｎ”は、（ｄｉｓｐ×４＋ＰＣ）のアドレスからデータを読出してレジスタＲｎに転送する命令であるが、本実施の形態においては４つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを符号拡張して出力する。第２のＣｏ−ＣＰＵにおいて第１のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”命令が実行されて、第１のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第３のＣｏ−ＣＰＵにおいて第２のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”命令が実行されて、第２のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第４のＣｏ−ＣＰＵにおいて“ＡＤＤ”命令が実行されて、第３のＣｏ−ＣＰＵの演算結果にＰＣの値が加算され、その演算結果がＭＲＡＭ６および７のアドレスであるＤＡＯに出力される。このとき、ＭＲＡＭ６および７から読出されたデータがＭＤＩに出力される。
【００４４】
従来のＣＰＵ命令“ＭＯＶ  Ｒｍ，Ｒｎ”、“ＭＯＶ．Ｌ  Ｒｍ，＠Ｒｎ”および“ＭＯＶ．Ｌ  ＠Ｒｍ，Ｒｎ”については、本実施の形態のＣＰＵは汎用レジスタという概念がないため、これらの命令に対応する処理は不要である。
【００４５】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  Ｒｍ，＠−Ｒｎ”は、レジスタＲｎに（Ｒｎ−４）の値を代入し、レジスタＲｎよって示されるアドレスにレジスタＲｍの値を転送する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“４”を出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＳＵＢ”命令を実行することにより、Ｌｉｎ（図３のＬＬＩ）の値から即値“４”を減算し、その演算結果がＭＲＡＭ６および７のアドレスであるＤＡＯに出力される。このとき、別のＣｏ−ＣＰＵによって演算された値がＤＯに出力され、その値がＭＲＡＭ６および７に書込まれる。
【００４６】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  ＠Ｒｍ＋，Ｒｎ”は、レジスタＲｍによって示されるアドレスから値を読出してレジスタＲｎに代入し、レジスタＲｍに（Ｒｍ＋４）の値を代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“４”を出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＡＤＤ”命令を実行することにより、Ｌｉｎの値に即値“４”を加算して出力する。
【００４７】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  Ｒｍ，＠（ｄｉｓｐ，Ｒｎ）”は、レジスタＲｍの値を（ｄｉｓｐ×４＋ＰＣ）のアドレスに転送する命令であるが、本実施の形態においては４つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを符号拡張して出力する。第２のＣｏ−ＣＰＵにおいて第１のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”命令が実行されて、第１のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第３のＣｏ−ＣＰＵにおいて第２のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”命令が実行されて、第２のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第４のＣｏ−ＣＰＵにおいて“ＡＤＤ”命令を実行することにより、第３のＣｏ−ＣＰＵの演算結果にＲｉｎ（図３のＲＬＩ）の値が加算され、その演算結果がＭＲＡＭ６および７のアドレスであるＤＡＯに出力される。このとき、別のＣｏ−ＣＰＵによって演算された値がＤＯに出力され、その値がＭＲＡＭ６および７に書込まれる。
【００４８】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  ＠（ｄｉｓｐ，Ｒｍ），Ｒｎ”は、（ｄｉｓｐ×４＋Ｒｍ）のアドレスからデータを読出してレジスタＲｎに転送する命令であるが、本実施の形態においては４つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを符号拡張して出力する。第２のＣｏ−ＣＰＵにおいて第１のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”命令が実行されて、第１のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第３のＣｏ−ＣＰＵにおいて第２のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”命令が実行されて、第２のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第４のＣｏ−ＣＰＵにおいて“ＡＤＤ”命令が実行されて、第３のＣｏ−ＣＰＵの演算結果にＲｉｎの値が加算され、その演算結果がＭＲＡＭ６および７のアドレスであるＤＡＯに出力される。このとき、ＭＲＡＭ６および７から読出されたデータがＭＤＩに出力される。
【００４９】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  Ｒｍ，＠（Ｒ０，Ｒｎ）”は、レジスタＲｍの値を（Ｒ０＋Ｒｎ）で示されるアドレスに転送する命令であるが、本実施の形態においては標準命令である“ＡＤＤ  Ｌｉｎ  Ｒｉｎ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値とを加算し、その演算結果がＭＲＡＭ６および７のアドレスであるＤＡＯに出力される。このとき、別のＣｏ−ＣＰＵによって演算された値がＤＯに出力され、その値がＭＲＡＭ６および７に書込まれる。
【００５０】
従来のＣＰＵ命令“ＭＯＶ．Ｌ  ＠（Ｒ０，Ｒｍ），Ｒｎ”は、（Ｒ０＋Ｒｍ）で示されるアドレスからデータを読出してレジスタＲｎに転送する命令であるが、本実施の形態においては標準命令である“ＡＤＤ  Ｌｉｎ  Ｒｉｎ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値とを加算し、その演算結果がＭＲＡＭ６および７のアドレスであるＤＡＯに出力される。このとき、ＭＲＡＭ６および７から読出されたデータがＭＤＩに出力される。
【００５１】
従来のＣＰＵ命令“ＭＯＶＡ  ＠（ｄｉｓｐ，ＰＣ），Ｒ０”は、（ｄｉｓｐ×４＋ＰＣ）の値をレジスタＲ０に代入する命令であるが、本実施の形態においては４つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを符号拡張して出力する。第２のＣｏ−ＣＰＵにおいて第１のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”が実行されて、第１のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第３のＣｏ−ＣＰＵにおいて第２のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”が実行されて、第２のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第４のＣｏ−ＣＰＵにおいて“ＡＤＤ”命令が実行されて、第３のＣｏ−ＣＰＵの演算結果にＰＣの値が加算され、その演算結果が出力される。
【００５２】
従来のＣＰＵ命令“ＭＯＶＴ  Ｒｎ”は、Ｔビットの値をレジスタＲｎに代入する命令であるが、本実施の形態においては拡張命令である“ＭＯＶＴ”として実行される。ＡＬＵ２１は、Ｔビットの値をＴ＿ｏｕｔに出力する。
【００５３】
（算術演算命令）
従来のＣＰＵ命令“ＡＤＤ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値とを加算してレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＡＤＤ  Ｌｉｎ  Ｒｉｎ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値とを加算し、その演算結果を出力する。
【００５４】
従来のＣＰＵ命令“ＡＤＤ  ＃ｉｍｍ，Ｒｎ”は、レジスタＲｎの値と即値ｉｍｍとを加算してレジスタＲｎに代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＡＤＤ”命令を実行することにより、Ｌｉｎの値に即値ｉｍｍを加算して出力する。
【００５５】
従来のＣＰＵ命令“ＡＤＤＣ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値とＴビットの値とを加算してレジスタＲｎに代入し、キャリーをＴビットに代入する命令であるが、本実施の形態においては拡張命令である“ＡＤＤＣ”として実行される。ＡＬＵ２１は、入力された２つの値とＴビットの値とを加算して出力し、キャリーをＴ＿ｏｕｔに出力する。
【００５６】
従来のＣＰＵ命令“ＡＤＤＶ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値とを加算してレジスタＲｎに代入し、オーバーフローをＴビットに代入する命令であるが、本実施の形態においては拡張命令である“ＡＤＤＶ”として実行される。ＡＬＵ２１は、入力された２つの値を加算して出力し、オーバーフローをＴ＿ｏｕｔに出力する。
【００５７】
従来のＣＰＵ命令“ＣＭＰ／ＥＱ  ＃ｉｍｍ，Ｒ０”は、レジスタＲ０の値と即値ｉｍｍとを比較し、同じ場合にＴビットに“１”を代入し、異なる場合にＴビットに“０”を代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＣＭＰ／ＥＱ”命令を実行することにより、Ｌｉｎの値と即値ｉｍｍとを比較し、同じ場合にＴ＿ｏｕｔに“１”を出力し、異なる場合にＴ＿ｏｕｔに“０”を出力する。
【００５８】
従来のＣＰＵ命令“ＣＭＰ／ＥＱ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値とを比較し、同じ場合にＴビットに“１”を代入し、異なる場合にＴビットに“０”を代入する命令であるが、本実施の形態においては標準命令である“ＣＭＰ／ＥＱ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値とを比較し、同じ場合にＴ＿ｏｕｔに“１”を出力し、異なる場合にＴ＿ｏｕｔに“０”を出力する。
【００５９】
従来のＣＰＵ命令“ＣＭＰ／ＧＥ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値とを有符号で比較し、Ｒｎ≧Ｒｍの場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては標準命令である“ＣＭＰ／ＧＴ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値とを比較し、Ｌｉｎ≧Ｒｉｎの場合にＴ＿ｏｕｔに“１”を出力し、それ以外の場合にＴ＿ｏｕｔに“０”を出力する。
【００６０】
従来のＣＰＵ命令“ＣＭＰ／ＧＴ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値とを有符号で比較し、Ｒｎ＞Ｒｍの場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては標準命令である“ＣＭＰ／ＧＴ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値とを比較し、Ｌｉｎ＞Ｒｉｎの場合にＴ＿ｏｕｔに“１”を出力し、それ以外の場合にＴ＿ｏｕｔに“０”を出力する。
【００６１】
従来のＣＰＵ命令“ＣＭＰ／ＰＬ  Ｒｎ”は、レジスタＲｎの値と“０”と比較し、Ｒｎ＞０の場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“０”を出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＣＭＰ／ＧＴ”命令を実行することにより、Ｌｉｎの値と“０”とを比較し、Ｌｉｎ＞０場合にＴ＿ｏｕｔに“１”を出力し、それ以外の場合にＴ＿ｏｕｔに“０”を出力する。
【００６２】
従来のＣＰＵ命令“ＣＭＰ／ＰＺ  Ｒｎ”は、レジスタＲｎの値と“０”と比較し、Ｒｎ≧０の場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“０”を出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＣＭＰ／ＧＴ”命令を実行することにより、Ｌｉｎの値と“０”とを比較し、Ｌｉｎ≧０の場合にＴ＿ｏｕｔに“１”を出力し、それ以外の場合にＴ＿ｏｕｔに“０”を出力する。
【００６３】
従来のＣＰＵ命令“ＤＴ  Ｒｎ”は、レジスタＲｎの値をデクリメントしてＲｎに代入し、Ｒｎの値が“０”の場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては４つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“１”を出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＳＵＢ”命令を実行することにより、Ｌｉｎの値から“１”を減算して出力する。第３のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“０”を出力する。第４のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＣＭＰ／ＥＱ”命令を実行することにより、第２のＣｏ−ＣＰＵの演算結果と“０”とを比較し、同じ場合にＴ＿ｏｕｔに“１”を出力し、異なる場合にＴ＿ｏｕｔに“０”を出力する。
【００６４】
従来のＣＰＵ命令“ＮＥＧ  Ｒｍ，Ｒｎ”は、“０”からレジスタＲｍの値を減算してレジスタＲｎに代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値“０”を出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＳＵＢ”命令を実行することにより、“０”からＲｉｎの値を減算して出力する。
【００６５】
従来のＣＰＵ命令“ＮＥＧＣ  Ｒｍ，Ｒｎ”は、“０”からレジスタＲｍの値とＴビットの値とを減算してレジスタＲｎに代入し、ボローをＴビットに代入する命令であるが、本実施の形態においては拡張命令である“ＮＥＧＣ”として実行される。ＡＬＵ２１は、即値“０”からＬｉｎの値とＴビットの値とを減算して出力し、ボローをＴ＿ｏｕｔに出力する。
【００６６】
従来のＣＰＵ命令“ＳＵＢ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値からレジスタＲｍの値を減算してレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＳＵＢ”として実行される。ＡＬＵ２１は、Ｌｉｎの値からＲｉｎの値を減算して出力する。
【００６７】
従来のＣＰＵ命令“ＳＵＢＣ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値からレジスタＲｍの値とフラグＴの値とを減算してレジスタＲｎに代入し、ボローをＴビットに代入する命令であるが、本実施の形態においては拡張命令である“ＳＵＢＣ”として実行される。ＡＬＵ２１は、Ｌｉｎの値からＲｉｎの値とＴビットの値とを減算して出力し、ボローをＴ＿ｏｕｔに出力する。
【００６８】
従来のＣＰＵ命令“ＳＵＢＶ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値からＲｍの値を減算してレジスタＲｎに代入し、アンダーフローをＴビットに代入する命令であるが、本実施の形態においては拡張命令である“ＳＵＢＶ”として実行される。ＡＬＵ２１は、Ｌｉｎの値からＲｉｎの値を減算して出力し、アンダーフローをＴ＿ｏｕｔに出力する。
【００６９】
（論理演算命令）
従来のＣＰＵ命令“ＡＮＤ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値との論理積をレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＡＮＤ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値との論理積を演算し、演算結果を出力する。
【００７０】
従来のＣＰＵ命令“ＡＮＤ  ＃ｉｍｍ，Ｒ０”は、レジスタＲ０の値と即値ｉｍｍとの論理積をレジスタＲ０に代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１がＲｉｎの値と即値ｉｍｍとの論理積を演算し、演算結果を出力する。
【００７１】
従来のＣＰＵ命令“ＮＯＴ  Ｒｍ，Ｒｎ”は、レジスタＲｍの値を反転してレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＮＯＴ”として実行される。ＡＬＵ２１は、Ｌｉｎの値を反転し、その演算結果を出力する。
【００７２】
従来のＣＰＵ命令“ＯＲ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値との論理和を演算してレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＯＲ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値との論理和を演算し、演算結果を出力する。
【００７３】
従来のＣＰＵ命令“ＯＲ  ＃ｉｍｍ，Ｒ０”は、レジスタＲ０の値と即値ｉｍｍとの論理和を演算してレジスタＲ０に代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１がＲｉｎの値と即値ｉｍｍとの論理和を演算し、演算結果を出力する。
【００７４】
従来のＣＰＵ命令“ＴＳＴ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値との論理積を演算し、演算結果が“０”の場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては拡張命令である“ＴＳＴ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値との論理積を演算し、演算結果が“０”の場合にＴ＿ｏｕｔに“１”を出力し、それ以外の場合にＴ＿ｏｕｔに“０”を出力する。
【００７５】
従来のＣＰＵ命令“ＴＳＴ  ＃ｉｍｍ，Ｒ０”は、レジスタＲ０の値と即値ｉｍｍとの論理積を演算し、演算結果が“０”の場合にＴビットに“１”を代入し、それ以外の場合にＴビットに“０”を代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令および拡張命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１がＲｉｎの値と即値ｉｍｍとの論理積を演算し、演算結果が“０”の場合にＴ＿ｏｕｔに“１”を出力し、それ以外の場合にＴ＿ｏｕｔに“０”を出力する。
【００７６】
従来のＣＰＵ命令“ＸＯＲ  Ｒｍ，Ｒｎ”は、レジスタＲｎの値とＲｍの値との排他的論理和を演算してレジスタＲｎに代入する命令であるが、本実施の形態においては標準命令である“ＸＯＲ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＲｉｎの値との排他的論理和を演算し、演算結果を出力する。
【００７７】
従来のＣＰＵ命令の“ＸＯＲ  ＃ｉｍｍ，Ｒ０”は、レジスタＲ０の値と即値ｉｍｍとの排他的論理和を演算してレジスタＲ０に代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを出力する。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１がＲｉｎの値と即値ｉｍｍとの排他的論理和を演算し、演算結果を出力する。
【００７８】
（シフト命令）
従来のＣＰＵ命令の“ＲＯＴＬ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの左シフト演算を行ない、溢れた値がＴビットに代入され、最上位ビットの値が最下位ビットに移動する命令であるが、本実施の形態においては拡張命令“ＲＯＴＬ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの左シフト演算を行ない、溢れた値がＴ＿ｏｕｔに出力され、最上位ビットの値が最下位ビットに移動する。
【００７９】
従来のＣＰＵ命令の“ＲＯＴＲ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの右シフト演算を行ない、溢れた値がＴビットに代入され、最下位ビットの値が最上位ビットに移動する命令であるが、本実施の形態においては拡張命令“ＲＯＴＲ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの右シフト演算を行ない、溢れた値がＴ＿ｏｕｔに出力され、最下位ビットの値が最上位ビットに移動する。
【００８０】
従来のＣＰＵ命令“ＲＯＴＣＬ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの左シフト演算を行ない、Ｔビットの値が最下位ビットに移動し、最上位ビットの値がＴビットに移動する命令であるが、本実施の形態においては拡張命令“ＲＯＴＣＬ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの左シフト演算を行ない、Ｔビットの値が最下位ビットに移動し、最上位ビットの値がＴ＿ｏｕｔに出力される。
【００８１】
従来のＣＰＵ命令“ＲＯＴＣＲ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの右シフト演算を行ない、Ｔビットの値が最上位ビットに移動し、最下位ビットの値がＴビットに移動する命令であるが、本実施の形態においては拡張命令“ＲＯＴＣＲ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの右シフト演算を行ない、Ｔビットの値が最上位ビットに移動し、最下位ビットの値がＴ＿ｏｕｔに出力される。
【００８２】
従来のＣＰＵ命令“ＳＨＡＬ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの左シフト演算を行ない、溢れた値がＴビットに代入され、最下位ビットに“０”が代入される命令であるが、本実施の形態においては標準命令“ＳＨＡＬ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの左シフト演算を行ない、溢れた値がＴ＿ｏｕｔに出力され、最下位ビットに“０”が代入される。
【００８３】
従来のＣＰＵ命令“ＳＨＡＲ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの右シフト演算を行ない、溢れた値がＴビットに代入され、最上位ビットに元の最上位ビットの値が代入される命令であるが、本実施の形態においては標準命令“ＳＨＡＲ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの右シフト演算を行ない、溢れた値がＴ＿ｏｕｔに出力され、最上位ビットに元の最上位ビットの値が代入される。
【００８４】
従来のＣＰＵ命令“ＳＨＬＬ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの左シフト演算を行ない、最下位ビットに“０”が代入され、最上位ビットの値がＴビットに移動する命令であるが、本実施の形態においては標準命令“ＳＨＬＬ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの左シフト演算を行ない、最下位ビットに“０”が代入され、最上位ビットの値がＴ＿ｏｕｔに出力される。
【００８５】
従来のＣＰＵ命令“ＳＨＬＲ  Ｒｎ”は、レジスタＲｎの値に対して１ビットの右シフト演算を行ない、最上位ビットに“０”が代入され、最下位ビットの値がＴビットに移動する命令であるが、本実施の形態においては標準命令“ＳＨＬＲ”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１ビットの右シフト演算を行ない、最上位ビットに“０”が代入され、最下位ビットの値がＴ＿ｏｕｔに出力される。
【００８６】
従来のＣＰＵ命令“ＳＨＬＬ２  Ｒｎ”は、レジスタＲｎの値に対して２ビットの左シフト演算を行ない、演算結果をレジスタＲｎに代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＳＨＬＬ”命令を実行することにより、Ｌｉｎの値に対して１ビットの左シフト演算を行なう。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＳＨＬＬ”命令を実行することにより、第１のＣｏ−ＣＰＵの演算結果に対して１ビットの左シフト演算を行ない、演算結果を出力する。
【００８７】
従来のＣＰＵ命令“ＳＨＬＲ２  Ｒｎ”は、レジスタＲｎの値に対して２ビットの右シフト演算を行ない、演算結果をレジスタＲｎに代入する命令であるが、本実施の形態においては２つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＳＨＬＲ”を実行することにより、Ｌｉｎの値に対して１ビットの右シフト演算を行なう。第２のＣｏ−ＣＰＵにおいてＡＬＵ２１が“ＳＨＬＲ”命令を実行することにより、第１のＣｏ−ＣＰＵの演算結果に対して１ビットの右シフト演算を行ない、演算結果を出力する。
【００８８】
従来のＣＰＵ命令“ＳＨＬＬ８  Ｒｎ”は、レジスタＲｎの値に対して８ビットの左シフト演算を行ない、演算結果をレジスタＲｎに代入する命令であるが、本実施の形態においては拡張命令“ＳＨＬＬ８”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して８ビットの左シフト演算を行ない、演算結果を出力する。
【００８９】
従来のＣＰＵ命令“ＳＨＬＲ８  Ｒｎ”は、レジスタＲｎの値に対して８ビットの右シフト演算を行ない、演算結果をレジスタＲｎに代入する命令であるが、本実施の形態においては拡張命令“ＳＨＬＲ８”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して８ビットの右シフト演算を行ない、演算結果を出力する。
【００９０】
従来のＣＰＵ命令“ＳＨＬＬ１６  Ｒｎ”は、レジスタＲｎの値に対して１６ビットの左シフト演算を行ない、演算結果をレジスタＲｎに代入する命令であるが、本実施の形態においては拡張命令“ＳＨＬＬ１６”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１６ビットの左シフト演算を行ない、演算結果を出力する。
【００９１】
従来のＣＰＵ命令“ＳＨＬＲ１６  Ｒｎ”は、レジスタＲｎの値に対して１６ビットの右シフト演算を行ない、演算結果をレジスタＲｎに代入する命令であるが、本実施の形態においては拡張命令“ＳＨＬＲ１６”として実行される。ＡＬＵ２１は、Ｌｉｎの値に対して１６ビットの右シフト演算を行ない、演算結果を出力する。
【００９２】
（分岐命令）
従来のＣＰＵ命令“ＢＦ  ｌａｂｅｌ”は、Ｔビットが“０”の場合に（ｄｉｓｐ×２＋ＰＣ）のアドレスに分岐し、Ｔビットが“１”の場合にｎｏｐ（ｎｏ−ｏｐｅｒａｔｉｏｎ）命令として処理される命令であるが、本実施の形態においては標準命令“ＢＦ”として実行される。ＡＬＵ２１は、Ｔビットが“０”の場合にＬｉｎの値を選択して出力し、Ｔビットが“１”の場合にＲｉｎの値を選択して出力する。ＡＬＵ２１から出力された値は、ＰＢＯを介してＰＣ１２に設定される。
【００９３】
従来のＣＰＵ命令“ＢＴ  ｌａｂｅｌ”は、Ｔビットが“０”の場合にｎｏｐ命令として処理され、Ｔビットが“１”の場合に（ｄｉｓｐ×２＋ＰＣ）のアドレスに分岐する命令であるが、本実施の形態においては標準命令“ＢＴ”として実行される。ＡＬＵ２１は、Ｔビットが“０”の場合にＲｉｎの値を選択して出力し、Ｔビットが“１”の場合にＬｉｎの値を選択して出力する。ＡＬＵ２１から出力された値は、ＰＢＯを介してＰＣ１２に設定される。
【００９４】
従来のＣＰＵ命令“ＢＲＡ  ｌａｂｅｌ”は、（ｄｉｓｐ×２＋ＰＣ）のアドレスに分岐する命令であるが、本実施の形態においては４つのＣｏ−ＣＰＵが標準命令をそれぞれ実行することによってこの命令が実行される。第１のＣｏ−ＣＰＵが“ＩＭＭ”命令を実行することにより、即値ｉｍｍを符号拡張して出力する。第２のＣｏ−ＣＰＵにおいて第１のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”が実行されて、第１のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第３のＣｏ−ＣＰＵにおいて第２のＣｏ−ＣＰＵの演算結果に対して“ＳＨＡＬ”が実行されて、第２のＣｏ−ＣＰＵの演算結果を１ビットだけ左シフトした値が演算される。第４のＣｏ−ＣＰＵにおいて“ＡＤＤ”命令が実行されて、第３のＣｏ−ＣＰＵの演算結果にＰＣの値が加算されて出力される。第４のＣｏ−ＣＰＵのＡＬＵ２１から出力された値は、ＰＢＯを介してＰＣ１２に設定される。
【００９５】
従来のＣＰＵ命令“ＢＲＡＦ  Ｒｍ”は、レジスタＲｍの値とＰＣの値とを加算して、ＰＣに代入する命令であるが、本実施の形態においては標準命令“ＡＤＤ”として実行される。ＡＬＵ２１は、Ｌｉｎの値とＰＣの値とを加算して出力する。ＡＬＵ２１から出力された値は、ＰＢＯを介してＰＣ１２に設定される。
【００９６】
従来のＣＰＵ命令“ＪＭＰ”は、レジスタＲｍの値をＰＣに代入する命令であるが、本実施の形態においてはＡＬＵ２１の演算結果をＰＢＯを介してＰＣ１２に設定することにより可能である。
【００９７】
図６は、本発明の実施の形態におけるＣＰＵ１の処理を説明するためのタイミングチャートである。まず、サイクルＴ０において、コマンドコード０（以下、ＣＣ０）に対応するアドレスがＣＡに出力される。このとき、データ０に対応するアドレスがＤＡＯに出力される。
【００９８】
サイクルＴ１において、各Ｃｏ−ＣＰＵは、ＭＲＡＭ２および３から出力されたＣＣ０をフェッチする。このとき、データ０がＭＲＡＭ６および７から出力される。各Ｃｏ−ＣＰＵは、ＣＣ０に応じた演算を実行する。
【００９９】
サイクルＴ２において、Ｃｏ−ＣＰＵのいずれかの演算結果がＤＯに出力されると、その演算結果をＭＲＡＭ６および７に書込むためのアドレスが、他のＣｏ−ＣＰＵによって演算されてＤＡＯに出力される。このとき、次のコマンドコードであるＣＣ１がフェッチされ、データ１がＭＲＡＭ６および７から出力される。また、サイクルＴ１においてフェッチされたＣＣ０が分岐命令であれば、このサイクルで分岐先のアドレスがＣＡに出力される。
【０１００】
サイクルＴ３において、ＣＣ３に対応するアドレスがＣＡに出力され、データ３に対応するアドレスがＤＡＯに出力される。また、各Ｃｏ−ＣＰＵによってＣＣ２がフェッチされ、ＭＲＡＭ６および７からデータ２が出力される。また、Ｃｏ−ＣＰＵのいずれかの演算結果がＤＯに出力される。以下、同様の処理が繰返される。
【０１０１】
図７は、電源電圧を検出するための回路の一例を示す図である。この検出回路は、電圧差検出回路４１と、ダイオード４２と、コンデンサ４３とを含む。なお、本実施の形態においては瞬停を検出し、瞬停から復帰したときに瞬停の直後のプログラムから処理を再開するものであるが、汎用レジスタを持たないのでＰＣ２１の値のみを退避すればよい。
【０１０２】
コンデンサ４３は、ダイオード４２を介して外部電源に接続されており電荷を蓄積しているため、外部電圧が低下した場合でも電圧の低下が緩やかとなる。電圧差検出回路４１は、＋端子と−端子との電圧差が所定値以上となるのを検出し、電圧停止信号をＭＲＡＭ内蔵ＭＣＵ１００に出力する。このとき、ＭＲＡＭ内蔵ＭＣＵ１００は、ＰＣ２１の値をＭＲＡＭの所定アドレスに退避する。
【０１０３】
また、電圧差検出回路４１は、電源電圧が所定値以上になって瞬停から復帰したことを検出すると、ＭＲＡＭ内蔵ＭＣＵ１００に電源復帰信号を出力する。このとき、ＭＲＡＭ内蔵ＭＣＵ１００は、ＭＲＡＭの所定アドレスに退避していた値をＰＣ２１に書込んでプログラムの処理を再開する。
【０１０４】
図８は、高級言語の文法構成の一例を示す図である。図８（ａ）は、ｓｔａｔｅｍｅｎｔの一例を示しており、代入文（１）とｉｆ文（２）とから構成されているものとする。なお、図８においては説明を簡単にするために従来のＣＰＵ命令を用いて説明するが、上述のように本実施の形態におけるＣＰＵ１は汎用レジスタを有さないため、図５を用いて説明したコードが生成されて、Ｃｏ−ＣＰＵ間で直接データを受け取ることになる。
【０１０５】
（１）の代入文においては、左辺の代入先の配列の要素番号（アドレス）をスタックに積む“ＭＯＶ  Ｒｎ，Ｒｍ”のコードが生成され、右辺の式（ｅｘｐｒｅｓｓｉｏｎ）の解析とコード生成とが終了した段階で“ＭＯＶ  Ｒｎ，＠Ｒｍ”のコードを生成して格納先アドレスに格納する。なお、アドレス計算が必要な場合には、下の［ｅｘｐｒｅｓｓｉｏｎ］を通る。
【０１０６】
（２）のｉｆ文においては、条件（ｃｏｎｄｉｔｉｏｎ）に一致すれば直後のｓｔａｔｅｍｅｎｔが実行され、一致しなければそのｓｔａｔｅｍｅｎｔを飛ばす。また、ｅｌｓｅという予約語がある場合、条件に一致しなければｅｌｓｅの直後のｓｔａｔｅｍｅｎｔを実行する。
【０１０７】
図８（ｂ）は、ｃｏｎｄｉｔｉｏｎの一例を示しており、左辺の式（ｅｘｐｒｅｓｓｉｏｎ）の解析とコード生成とが終了した段階でその式の次が、“＝＝”、“！＝”、“＜”、“＞”、“＜＝”、“＝＞”のいずれであるかによって、それに対応した“ＣＭＰ／ＸＸ  Ｒｍ，Ｒｎ”のコードが生成される。そして、右辺の式（ｅｘｐｒｅｓｓｉｏｎ）の解析とコード生成とが行なわれる。
【０１０８】
図８（ｃ）は、ｅｘｐｒｅｓｓｉｏｎの一例を示しており、まずｔｅｒｍによって後述する図８（ｄ）が実行される。そして、その次の入力が“＋”または“−”であれば、再びｔｅｒｍが実行されて“ＡＤＤ  Ｒｍ，Ｒｎ”または“ＳＵＢ  Ｒｍ，Ｒｎ”のコードが生成される。
【０１０９】
図８（ｄ）は、ｔｅｒｍの一例を示しており、まずｆａｃｔｏｒによって後述する図８（ｅ）が実行される。そして、その次の入力が“＊”または“／”であれば、再度ｔｅｒｍが実行されて“ＭＵＬ  Ｒｍ，Ｒｎ”または“ＤＩＶ  Ｒｍ，Ｒｎ”のコードが生成される。
【０１１０】
図８（ｅ）は、ｆａｃｔｏｒの一例を示しており、入力が数値であればｎｕｍｂｅｒを通り、“ＭＯＶ  ＃ｉｍｍ、Ｒｎ”のコードが生成される。また、入力が整数（ｉｎｔｅｇｅｒ  ＩＤ）であればｉｄｅｎｔを通り、“ＭＯＶ  ＠Ｒｍ，Ｒｎ”のコードが生成される。
【０１１１】
入力が式（ｅｘｐｒｅｓｓｉｏｎ）であれば、図８（ｃ）が実行されてその式の解析とコード生成とが行なわれる。また、入力が“＋”または“−”であれば、再度ｆａｃｔｏｒが実行されて“ＮＥＧ  Ｒｍ，Ｒｎ”のコードが生成される。
【０１１２】
入力が配列（ａｒｒａｙ  ＩＤ）であればｉｄｅｎｔを通り、配列の要素番号（アドレス）をスタックに積む“ＭＯＶ  Ｒｎ，Ｒｍ”のコードが生成され、式（ｅｘｐｒｅｓｓｉｏｎ）の解析とコード生成とが終了した段階で“ＭＯＶ  ＠Ｒｍ，Ｒｎ”のコードを生成してスタックに積む。
【０１１３】
入力が関数（ｆｕｎｃｔｉｏｎ  ＩＤ）であればｉｄｅｎｔを通り、式（ｅｘｐｒｅｓｓｉｏｎ）の解析とコード生成とが終了した段階で“ＢＳＲＦ  Ｒｍ”のコードが生成される。この“ＢＳＲＦ  Ｒｍ”は、サブルーチンプロシージャへの分岐を行なうための命令である。
【０１１４】
以上説明したように、本実施の形態におけるＣＰＵ１によれば、Ｃｏ−ＣＰＵの演算結果が直接他のＣｏ−ＣＰＵに入力されるので、汎用レジスタを用いないプロセッサを構成することが可能となった。
【０１１５】
また、汎用レジスタを用いないため、瞬停が発生した場合でもＰＣの値をＭＲＡＭに退避するのみで瞬停前の状態からプログラムを再開することができ、瞬停時に長時間電源を維持する必要がなくなった。
【０１１６】
また、複雑な命令は複数のＣｏ−ＣＰＵによって実行されるため、ＡＬＵを簡単な回路構成で実現することができると共に、複雑な式にも柔軟に対応できるようになった。
【０１１７】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１１８】
【図１】本発明の実施の形態におけるＣＰＵを含んだＭＲＡＭ内蔵マイコンの概略構成の一例を示す図である。
【図２】ＣＰＵ１の内部構成の一例を示すブロック図である。
【図３】Ｃｏ−ＣＰＵ１１−０〜１１−１５の内部構成を示すブロック図である。
【図４】コマンドコードのビットアサインの一例を示す図である。
【図５】従来のＣＰＵ命令が本実施の形態におけるＣＰＵ１によってどのように実行されるかを示す図である。
【図６】本発明の実施の形態におけるＣＰＵ１の処理を説明するためのタイミングチャートである。
【図７】電源電圧を検出するための回路の一例を示す図である。
【図８】高級言語の文法構成の一例を示す図である。
【符号の説明】
【０１１９】
１  ＣＰＵ、２，３，６，７  ＭＲＡＭ、４，５  シフタ群、１１−０〜１１−１５  Ｃｏ−ＣＰＵ、１２  ＰＣ、２１  ＡＬＵ、２２  コマンドデコーダ、２３〜３６  セレクタ、４１  電圧差検出回路、４２  ダイオード、４３  コンデンサ、１００  ＭＲＡＭ内蔵ＭＣＵ。
【図１】
2008217538.tif 000003
【図２】
2008217538.tif 000004
【図３】
2008217538.tif 000005
【図４】
2008217538.tif 000006
【図５】
2008217538.tif 000007
【図６】
2008217538.tif 000008
【図７】
2008217538.tif 000009
【図８】
2008217538.tif 000010