(57)【要約】【課題】  汎用レジスタを、簡単な取扱いでより効率的に利用することができるＣＰＵを提供する。【解決手段】  ＣＰＵ１のレジスタ部５における特定汎用レジスタ８（ｒ０）を、固定データ値「０」を読み出すためのレジスタとしても使用可能に構成する。シーケンサのレジスタ書き換え制御部９は、デコーダ６のデコード結果がレジスタｒ０に対する書込み操作を示す場合、セレクタ４に演算部３による演算結果データを選択させ、デコーダ６のデコード結果について特定条件が成立すると、セレクタ４に初期値「０」側を選択させる。【選択図】  図１
2006293490.tif 000002
【特許請求の範囲】
【請求項１】
フェッチした命令をデコードするデコーダと、前記デコーダのデコード結果に応じて演算を実行する演算部と、前記演算に使用されるデータが格納される複数の汎用レジスタとを備えてなるＣＰＵにおいて、
前記複数の汎用レジスタの一部は、固定データ値を読み出すための固定データ読出しレジスタとしても使用可能に構成され、
前記デコーダのデコード結果が、前記固定データ読出しレジスタに対する書込み操作を示す場合は、前記演算部における演算結果を前記固定データ読出しレジスタに対する書込みデータとして出力し、前記デコーダが行なうデコードについて特定条件が成立した場合は、デコードされた命令を前記演算部が実行した後に、前記固定データ読出しレジスタに固定データを出力するように制御を行うレジスタ制御手段を備えたことを特徴とするＣＰＵ。
【請求項２】
前記特定条件は、前記デコーダが特定の命令をデコードした場合に成立することを特徴とする請求項１記載のＣＰＵ。
【請求項３】
前記特定命令は、前記デコーダによるデコード結果が、前記固定データ読出しレジスタに対する読出し操作となる命令であることを特徴とする請求項２記載のＣＰＵ。
【請求項４】
命令の一部に、前記固定データ読出しレジスタの初期化を指定するためのフラグをセット可能に構成され、
前記特定条件は、前記デコーダが、前記初期化指定フラグがセットされている命令をデコードした場合に成立することを特徴とする請求項２記載のＣＰＵ。
【請求項５】
前記レジスタ制御手段は、前記デコーダのデコード結果に応じて演算部を制御するシーケンサと、前記固定データ読出しレジスタに対する書込みデータとして、前記演算部における演算結果データと前記固定データとを選択して出力するためのセレクタとで構成され、
前記シーケンサは、
前記デコーダのデコード結果が、前記固定データ読出しレジスタに対する書込み操作を示す場合は、前記セレクタに前記演算結果データ側を選択させ、
前記デコーダのデコード結果について特定条件が成立した場合は、前記セレクタに前記固定データ側を選択させることを特徴とする請求項１乃至４の何れかに記載のＣＰＵ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フェッチした命令をデコードするデコーダと、デコード結果に応じて演算を実行する演算部と、演算に使用されるデータが格納される複数の汎用レジスタとを備えてなるＣＰＵに関する。
【背景技術】
【０００２】
ＣＰＵの汎用レジスタは、データ値やアドレス値を記憶するために使用されるが、近年のＣＰＵは取扱うデータ量が多くなる傾向にあるため、それに応じてアドレス空間も大きくなる傾向にある。例えば、アドレスビット数が２０ビット以上となるものも存在する。
斯様なアドレス空間の拡大に対して、例えば、０ｘｆｆ１０１０番地にアクセスする場合、０ｘｆｆ００００番地を先頭アドレスとしてＣＰＵの汎用レジスタやベースアドレスレジスタなどに予めセットしておき、前記先頭アドレスに対する相対アドレス０ｘ１０１０を指定すると、命令の実行時に（先頭アドレス）＋（オフセットアドレス）の加算処理を行うことで０ｘｆｆ１０１０番地にアクセスさせる方式がある。これは、所謂「オフセット付きレジスタ間接命令」と言われるアドレッシング方式である。即ち、オフセット付きレジスタ間接命令を使用する場合は、フルアドレスが３バイトである場合でも、オフセットアドレスを１バイトや２バイトで指定することができる。
【０００３】
尚、上記のような従来技術は、極めて一般的に実施されている周知技術であるから、特に先行技術文献を提示するまでもないと考える。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記のような従来の方式では、レジスタの１つがアドレス指定用に専有されてしまう。若しくは、前記レジスタを別の目的にも使用したい場合は、所定の処理が終了した後に、当該レジスタにアドレス値をセットし直さなければならず、処理が煩雑になるという問題がある。
本発明は上記事情に鑑みてなされたものであり、その目的は、汎用レジスタを、簡単な取扱いでより効率的に利用することができるＣＰＵを提供することにある。
【課題を解決するための手段】
【０００５】
請求項１記載のＣＰＵによれば、複数の汎用レジスタの一部を、固定データ値を読み出すためのレジスタとしても使用可能に構成する。即ち、レジスタ制御手段は、デコーダのデコード結果が前記レジスタに対する書込み操作を示す場合は、演算部における演算結果を当該レジスタに対する書込みデータとして出力する。そして、デコード結果について特定条件が成立すると、デコードされた命令を演算部が実行した後に、前記レジスタに固定データを出力する。
つまり、所定の演算を行なう目的でレジスタに書き込まれたデータは、当該データが前記演算に使用された後は不要となる。従って、特定条件が成立した場合は、固定データ読出しレジスタに固定データを出力してセットさせることで、一々固定データを書き戻す操作を行うことなく、当該レジスタを汎用レジスタとして使用すると共に、例えばベースアドレスレジスタなどのように、固定データを付与するためのレジスタにも兼用することができる。
【０００６】
請求項２記載のＣＰＵによれば、特定条件を、デコーダが特定の命令をデコードした場合に成立させる。即ち、前記特定命令が、固定データ読出しレジスタに書き込まれたデータを使用する演算を実行するものであれば、当該命令の実行後に前記データが不要となることが確実になる。従って、そのような特定命令がデコードされた場合に応じて固定データを出力すれば、適切なタイミングで固定データ読出しレジスタを初期化（ここでは、固定データを書込むことを称す）することができる。
【０００７】
請求項３記載のＣＰＵによれば、特定命令を、デコーダによるデコード結果が固定データ読出しレジスタに対する読出し操作となる命令とする。即ち、固定データ読出しレジスタに対する読出し操作が行われれば、書き込まれたデータがデコードされた命令の実行に使用されるので、その後に固定データ読出しレジスタを初期化すれば良い。
【０００８】
請求項４記載のＣＰＵによれば、命令の一部に、固定データ読出しレジスタの初期化を指定するためのフラグをセット可能に構成する。そして、特定条件を、デコーダが、初期化指定フラグがセットされている命令をデコーダした場合に成立させる。斯様に構成すれば、固定データ読出しレジスタの初期化タイミングをプログラミングによって制御することができる。
【０００９】
請求項５記載のＣＰＵによれば、シーケンサは、デコーダのデコード結果が、固定データ読出しレジスタに対する書込み操作を示す場合、セレクタに演算結果データ側を選択させ、デコーダのデコード結果について特定条件が成立するとセレクタに固定データ側を選択させる。従って、レジスタ制御手段を、演算実行を制御するシーケンサを利用して効率的に構成することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の一実施例について図１及び図２を参照して説明する。図１は、ＣＰＵの内部構成を本発明の要旨に係る部分について概略的に示す機能ブロック図である。ＣＰＵ１は、制御部２、演算部３、セレクタ（レジスタ制御手段）４、レジスタ部５などを備えている。制御部２は、図示しない外部のプログラムメモリよりフェッチした命令をデコードするデコーダ６、前記デコードの結果に応じて演算部３における命令実行を制御するシーケンサ７で構成されている。
【００１１】
レジスタ部５は、複数のステータスレジスタや制御レジスタ，汎用レジスタ，また、これらのレジスタに対してデータの書込みや読出しを行うためのロジックなどから構成されている。そして、演算部３は、レジスタ部５のレジスタに格納されるデータ値を読み出して演算を行なったり、演算結果をレジスタに格納するようになっている。
また、レジスタ部５における汎用レジスタの一部は、固定データ値を読み出すためのレジスタとしても使用可能に構成されており、ここで、そのレジスタを特定汎用レジスタと称す。例えば図１に示す汎用レジスタｒ０が特定汎用レジスタ（固定データ読み出しレジスタ）８であるものとする。
【００１２】
セレクタ４は、演算部３と特定汎用レジスタ８との間に位置しており、演算部３における演算結果データと固定データ（初期値，例えば０ｘ００００００００）との何れかを選択して、特定汎用レジスタ８に出力する。その選択切替えは、シーケンサ７に内蔵されているレジスタ書き換え制御部（レジスタ制御手段）９によって行われる。
即ち、レジスタ書き換え制御部９は、セレクタ４に対して制御信号１，２を出力するようになっている。制御信号１は、フェッチした命令をデコーダ６がデコードした結果が、特定汎用レジスタ８の読み出し操作である場合にアクティブ（ロウ）となる。また、制御信号１は、フェッチした命令をデコーダ６がデコードした結果が、特定汎用レジスタ８の書き込み操作である場合にアクティブ（ロウ）となる。
【００１３】
そして、セレクタ４は、制御信号１がアクティブになると固定データ側を選択して出力し、制御信号２がアクティブになると演算部３側を選択してデータを特定汎用レジスタ８に出力する。また、ＣＰＵ１のリセットが解除された場合、特定汎用レジスタ８に対しては、固定データがセットされるように初期化が行われる。尚、例えば
ａｄｄ    ｒ０，ｒ０
という命令が実行されると制御信号１，２が同時にアクティブとなるが、この場合、セレクタ４は制御信号２を優先して演算部３側を選択する。
【００１４】
次に、本実施例の作用について図２も参照して説明する。先ず、比較のため、従来の一般的なＣＰＵにおいて行われる汎用レジスタの操作例について説明する。例えば、以下のような命令を実行する場合を想定する。尚、ｒ０，ｒ１は一般的な汎用レジスタであり、ｒ０の値は０ｘ００００００００とする。
（１）ｍｏｖ．ｂ    ＠（０ｘ１０００，ｒ０），ｒ１
（２）ｍｏｖ．ｌ    ＃０ｘ０００１００００，ｒ０
（３）ｍｏｖ．ｂ    ＠（０ｘ１０００，ｒ０），ｒ０
（４）ａｄｄ        ｒ０，ｒ１
（５）ｍｏｖ．ｂｕ  ＃０，ｒ０
【００１５】
（１）レジスタｒ１に、アドレス０ｘ００００１０００の１バイトデータを格納。
（２）レジスタｒ０に、データ０ｘ０００１００００を格納。
（３）レジスタｒ０に、アドレス０ｘ０００１１０００の１バイトデータを格納。
（４）レジスタｒ１に、（アドレス０ｘ０００１１０００の値）
＋（アドレス０ｘ００００１０００の値）の実行結果を格納。
（５）レジスタｒ０を、０ｘ００００００００に初期化（必要に応じて）。
即ち、従来構成では、レジスタｒ０に、演算に使用するデータを書き込んで使用した後、レジスタｒ０を０ｘ００００００００に初期化する場合は、（５）を実行する必要がある。
【００１６】
これに対して、本願発明の場合は、（４）の加算命令が実行されると特定汎用レジスタ８：レジスタｒ０のデータが読み出されるので、その加算命令の実行後に、レジスタｒ０は自動的に０ｘ００００００００に初期化される。斯様に構成されるレジスタｒ０は、例えばデータ「０」を代入する場合やデータ「０」との比較を行う場合のデータレジスタとして使用される。また、オフセット付きレジスタ間接命令が実行される場合、「０」を基準として命令コードで指定可能なオフセット範囲のデータにアクセスするためにも使用可能である。
【００１７】
加えて、上記（１）〜（４）に示したように、演算に使用されるデータを一時的に格納するための汎用レジスタとしても使用できる。更に、別の用途としては、多くの命令を持つＣＰＵに対して、命令の一部を削減して小型化したＣＰＵを構成した場合、上位ＣＰＵとの互換性を維持するため削減された命令を実行する必要がある場合は、レジスタｒ０をワークレジスタとして使用すれば、他のレジスタ内容を破壊することなく削減された命令を実行することもできる。
【００１８】
例えば、上位ＣＰＵは、符号なし（unsigned）即値データの比較命令「ｃｍｐ．ｂｕ」を備えているが、下位ＣＰＵには当該命令が削除されているとする。即ち、上位ＣＰＵで実行可能な命令、
ｃｍｐ．ｂｕ  ＃０ｘ１２，ｒ１
は、即値０ｘ１２とレジスタｒ１の内容とを比較する命令である。この命令を、下位ＣＰＵにおいて他の命令を使用して実現する場合に、他のレジスタの内容を破壊してはならない、という制約があるものとする。この時、下位ＣＰＵでは、以下のようにして等価な処理を実現できる。
（１）ｍｏｖ．ｂｕ  ＃０ｘ１２，ｒ０
（２）ｃｍｐ        ｒ０，ｒ１
（１）レジスタｒ０に、即値０ｘ１２を代入
（２）レジスタｒ０の内容と、レジスタｒ１の内容とを比較
すると、（２）の比較命令が実行されると特定汎用レジスタｒ０のデータが読み出されるので、その比較命令の実行後に、レジスタｒ０は自動的に０ｘ００００００００に初期化される。従って、他のレジスタの内容を破壊することなく、削減された命令と等価な処理を実行できる。
【００１９】
次に、本発明のＣＰＵ１が上記命令（１），（２）を実行する場合について、図２に示すタイミングチャートを参照して説明する。各命令は、フェッチ，デコード，実行，のサイクルがパイプラインで処理されるものとする。また、各命令の実行時間は１サイクルである。
＜第１サイクル＞
命令（１）がフェッチされる。
＜第２サイクル＞
命令（１）がデコードされると共に、命令（２）がフェッチされる。
【００２０】
＜第３サイクル＞
命令（１）が実行されると共に、命令（２）がデコードされる。第２サイクルにおける
命令（１）のデコード結果はレジスタｒ０に対する書込み操作を示すので、レジスタ書き換え制御部９は、制御信号２をアクティブにする。すると、セレクタ４を介して演算部３より即値０ｘ１２がレジスタｒ０に出力される。そして、制御信号２の立上がりエッジによって、レジスタｒ０の内容は即値０ｘ１２に書き換えられる。
【００２１】
＜第４サイクル＞
命令（２）が実行される。命令（２）については、第３サイクルにおけるデコードの結果、レジスタｒ０の内容とレジスタｒ１の内容とを比較するためレジスタｒ０について読み出し操作を行うことになるので、レジスタ書き換え制御部９は、制御信号１をアクティブにする。すると、セレクタ４を介して演算部３より初期値「０」がレジスタｒ０に出力されるので、レジスタ部５が有するロジックにより、制御信号１の立上がりエッジによってレジスタｒ０の内容は初期値「０」に書き換えられる。
【００２２】
以上のように本実施例によれば、ＣＰＵ１のレジスタ部５における特定汎用レジスタ８（ｒ０）を、固定データ値「０」を読み出すためのレジスタとしても使用可能に構成する。即ち、シーケンサのレジスタ書き換え制御部９は、デコーダ６のデコード結果が、レジスタｒ０に対する書込み操作を示す場合、セレクタ４に演算部３による演算結果データを選択させ、デコーダ６のデコード結果について特定条件が成立すると、セレクタ４に初期値「０」側を選択させるようにした。
【００２３】
即ち、所定の演算を行なう目的でレジスタｒ０に書き込まれたデータは、当該データがその演算に使用された後は不要となる。従って、特定条件が成立した場合はレジスタｒ０に初期値を出力してセットさせることで、一々固定データを書き戻す操作を行うことなく、当該レジスタｒ０を汎用レジスタとして使用すると共に、例えばベースアドレスレジスタなどのように固定データを付与するためのレジスタとしても兼用できる。また、デコード結果に応じて演算部３を制御するシーケンサ７を利用して、レジスタ制御手段を効率的に構成することができる。
【００２４】
そして、デコーダ６が特定命令として、レジスタｒ０に対する読出し操作となる命令をデコードした場合に、特定条件が成立したものとして制御信号２をアクティブにする。即ち、レジスタｒ０に対する読出し操作が行われれば、レジスタｒ０に書き込まれたデータがデコードされた命令の実行に使用されるので、その後にレジスタｒ０を適切なタイミングで初期化することができる。
また、例えばレジスタｒ０を固定データ読み出し用として使用し続ける場合でも、ノイズ等の影響によってデータ化けが発生することも想定されるが、本発明によれば、レジスタｒ０は初期値がセットされリフレッシュされることになる。従って、データの読み誤りを防止することができる。
【００２５】
本発明は上記又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
固定データ読み出しレジスタを複数設けても良い。
また、固定データ読み出しレジスタにセットするデータ値は、０ｘ００００００００に限ることなく、個別のケースに応じて適当な値を設定すれば良い。
特定条件は、デコード結果が固定データ読み出しレジスタの読み出し操作となるものに限らず、その他特定の命令がデコードされた場合に成立するように設定しても良い。
例えば、図３に示すように、命令の一部に、固定データ読出しレジスタの初期化を指定するためのフラグをセット可能に構成する。図３は、例えばデータレジスタ１の内容とデータレジスタ２の内容を比較する命令であり、冒頭７ビットは命令コードである。そして、特定条件を、デコーダ６が、初期化指定フラグがセットされている命令をデコードした場合に成立させるようにしても良い。斯様に構成すれば、特定汎用レジスタ８の初期化タイミングをプログラミングによって制御することができる。
レジスタ制御手段は、シーケンサ７の一部として構成するものに限らず、独立の構成として別途設けても良い。
【図面の簡単な説明】
【００２６】
【図１】本発明の一実施例を示すものであり、ＣＰＵの内部構成を本発明の要旨に係る部分について概略的に示す機能ブロック図
【図２】ＣＰＵが命令を実行する場合のタイミングチャート
【図３】変形例として、命令の一部に初期化フラグを設けた場合を示す図
【符号の説明】
【００２７】
図面中、１はＣＰＵ、３は演算部、４はセレクタ（レジスタ制御手段）、７はシーケンサ、８は特定汎用レジスタ（固定データ読み出しレジスタ）、９はレジスタ書き換え制御部（レジスタ制御手段）を示す。
【図１】
2006293490.tif 000003
【図２】
2006293490.tif 000004
【図３】
2006293490.tif 000005