(57)【要約】【課題】狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術を提供する。【解決手段】Ｎビット幅の演算ユニット１０と、複数のエミュレーション命令を格納するエミュレーション命令記憶ユニット１９と、演算ユニット１０に入力されるデータを格納するＮビット幅の入力演算レジスタ群を複数個有する入力演算レジスタ群１３と、演算ユニット１０の演算結果を格納するＮビット幅の出力演算レジスタを複数個有する出力演算レジスタ群１４とを備える演算装置１００である。【選択図】図１
2014182514.tif 000002
【特許請求の範囲】
【請求項１】
Ｎビット幅の演算ユニットと、
複数のエミュレーション命令を格納する記憶ユニットと、
前記演算ユニットに入力されるデータを格納するＮビット幅の入力演算レジスタを複数個有する入力演算レジスタ群と、
前記演算ユニットの演算結果を格納するＮビット幅の出力演算レジスタを複数個有する出力演算レジスタ群と
を備えることを特徴とする演算装置。
【請求項２】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるＮビットオペランドの値（Ｓ）を用いて、前記入力演算レジスタＸ１の下位（Ｎ−Ｓ）ビットと前記入力演算レジスタＸ０の上位Ｓビットとを連結し、当該連結されたＮビットデータを前記作業レジスタに格納する命令であることを特徴とする請求項１に記載の演算装置。
【請求項３】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるＮビットのオフセット値を用いてＮビットデータを取得し、当該取得されたＮビットデータの上位Ｎ／２ビットをＵ、前記Ｎビットデータの下位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットの反転値との論理積をＬ１、前記作業レジスタの上位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットとの論理積をＬ２として、前記Ｕと、前記Ｌ１と前記Ｌ２との論理和とを連結し、当該連結されたＮビットデータを前記作業レジスタに格納する命令であることを特徴とする請求項１に記載の演算装置。
【請求項４】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるＮビットのオフセット値を用いてＮビットデータを取得し、当該取得されたＮビットデータの上位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットの反転値との論理積をＵ１、前記作業レジスタの上位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットとの論理積をＵ２、前記Ｎビットデータの下位Ｎ／２ビットをＬとして、前記Ｕ１と前記Ｕ２との論理和と、前記Ｌとを連結し、当該連結されたＮビットデータを前記作業レジスタに格納する命令であることを特徴とする請求項１に記載の演算装置。
【請求項５】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタＹ３を右に１ビットシフトして前記出力演算レジスタＹ３に格納し、追い出される前記出力演算レジスタＹ３の最下位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋１の場合には、前記出力演算レジスタＹ２を右に１ビットシフトして前記出力演算レジスタＹ２に格納し、追い出される前記出力演算レジスタＹ２の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋２の場合には、前記出力演算レジスタＹ１を右に１ビットシフトして前記出力演算レジスタＹ１に格納し、追い出される前記出力演算レジスタＹ１の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋３の場合には、前記出力演算レジスタＹ０を右に１ビットシフトして前記出力演算レジスタＹ０に格納し、追い出される前記出力演算レジスタＹ０の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることを特徴とする請求項１に記載の演算装置。
【請求項６】
前記エミュレーション命令は、
前記出力演算レジスタＹ３を右に１ビットシフトして前記出力演算レジスタＹ３に格納するとき、前記出力演算レジスタＹ３の最上位ビットに０または前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ２を右に１ビットシフトして前記出力演算レジスタＹ２に格納するとき、前記出力演算レジスタＹ２の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ１を右に１ビットシフトして前記出力演算レジスタＹ１に格納するとき、前記出力演算レジスタＹ１の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ０を右に１ビットシフトして前記出力演算レジスタＹ０に格納するとき、前記出力演算レジスタＹ０の最上位ビットに前記条件コードレジスタの値を格納する命令であることを特徴とする請求項５に記載の演算装置。
【請求項７】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタＹ０を左に１ビットシフトして前記出力演算レジスタＹ０に格納し、追い出される前記出力演算レジスタＹ０の最上位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋１の場合には、前記出力演算レジスタＹ１を左に１ビットシフトして前記出力演算レジスタＹ１に格納し、追い出される前記出力演算レジスタＹ１の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋２の場合には、前記出力演算レジスタＹ２を左に１ビットシフトして前記出力演算レジスタＹ２に格納し、追い出される前記出力演算レジスタＹ２の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋３の場合には、前記出力演算レジスタＹ３を左に１ビットシフトして前記出力演算レジスタＹ３に格納し、追い出される前記出力演算レジスタＹ３の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることを特徴とする請求項１に記載の演算装置。
【請求項８】
前記エミュレーション命令は、
前記出力演算レジスタＹ０を左に１ビットシフトして前記出力演算レジスタＹ０に格納するとき、前記出力演算レジスタＹ０の最下位ビットには０または前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ１を左に１ビットシフトして前記出力演算レジスタＹ１に格納するとき、前記出力演算レジスタＹ１の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ２を左に１ビットシフトして前記出力演算レジスタＹ２に格納するとき、前記出力演算レジスタＹ２の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ３を左に１ビットシフトして前記出力演算レジスタＹ３に格納するとき、前記出力演算レジスタＹ３の最下位ビットには前記条件コードレジスタの値を格納する命令であることを特徴とする請求項７に記載の演算装置。
【請求項９】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位Ｎ／２ビットが第１の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第２の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの下位Ｎ／２ビットとの論理和を求め、
当該論理和の結果がＡｌｌ−１のとき、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がＡｌｌ−１でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第３の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの下位Ｎ／２ビットとの論理積を求め、
当該論理積の結果がＡｌｌ−０のとき、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がＡｌｌ−０でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第４の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの下位Ｎ／２ビットとの排他論理和を求め、
当該排他論理和の結果がＡｌｌ−０のとき、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がＡｌｌ−０のとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加える命令であることを特徴とする請求項１に記載の演算装置。
【請求項１０】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位Ｎ／２ビットが第１の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタＸの上位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第２の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの上位Ｎ／２ビットとの論理和を求め、
当該論理和の結果がＡｌｌ−１のとき、前記オペランドの次アドレスにＱを加えたアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がＡｌｌ−１でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第３の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの上位Ｎ／２ビットとの論理積を求め、
当該論理積の結果がＡｌｌ−０のとき、前記オペランドの次アドレスにＱを加えたアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がＡｌｌ−０でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第４の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの上位Ｎ／２ビットとの排他論理和を求め、
当該排他論理和の結果がＡｌｌ−０のとき、前記オペランドの次アドレスにＱを加えたアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がＡｌｌ−０でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加える命令であることを特徴とする請求項１に記載の演算装置。
【請求項１１】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるＮビットのオフセット値を用いて、前記メモリから複数のＮビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタＹ０と前記メモリバス上のＮビットデータＤ０とを加算して前記出力演算レジスタＹ０に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋１かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ１と前記メモリバス上のＮビットデータＤ１と前記条件コードレジスタとを加算して前記出力演算レジスタＹ１に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋２かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ２と前記メモリバス上のＮビットデータＤ２と前記条件コードレジスタとを加算して前記出力演算レジスタＹ２に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋３かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ３と前記メモリバス上のＮビットデータＤ３と前記条件コードレジスタを加算して前記出力演算レジスタＹ３に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることを特徴とする請求項１に記載の演算装置。
【請求項１２】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるＮビットのオフセット値を用いて、前記メモリから複数のＮビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタＹ０とメモリバス上のＮビットデータＤ０とを論理演算して前記出力演算レジスタＹ０に格納し、前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋１かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ１と前記メモリバス上のＮビットデータＤ１とを論理演算して前記出力演算レジスタＹ１に格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋２かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ２と前記メモリバス上のＮビットデータＤ２とを論理演算して前記出力演算レジスタＹ２に格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋３かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ３と前記メモリバス上のＮビットデータＤ３とを論理演算して前記出力演算レジスタＹ３に格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることを特徴とする請求項１に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に関する。特に、本発明は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術に関する。
【背景技術】
【０００２】
コンピュータ製造業者は、新たな命令セットへ移行することにより新たなコンピュータにおいてより大きなアドレス空間へ遷移する傾向がある。新たな命令組へ移行することは、ユーザ及び製造業者の両方にとって潜在的に致命的な結果をもたらすことがある。ユーザの観点からは、このことは、古いマシンに対して書かれたプログラムが新しいマシンでは稼動しないことを意味している。ソフトウェアにかなりの投資をしたユーザは、ソフトウェアを変換するか又は置換するための費用を支払うか又は新しいマシンにおいて組み込まれた種々の進んだものの利点を諦めるかの何れかの不快な決断に迫られる。製造業者の観点からは、このような移行は、ユーザの憤りを買い且つこのような新しいマシンの当初の販売が停滞することとなる蓋然性がある。
【０００３】
このような状況を考慮して、例えば、特許文献１には、コンピュータアーキテクチュアに関するものであって、より大きなワード寸法及びアドレス空間を持つために命令セットアーキテクチュアを拡張する技術が開示されている。この特許文献１に開示されたプロセッサによれば、例えば、３２ビット整数演算をサブセットとして有する６４ビット整数演算を実行し、且つ、３２ビットアドレッシングをサブセットとして有する６４ビットアドレッシングを実行することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３５５４３４２号公報（２００４年５月１４日登録）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、特許文献１に開示された技術とは異なり、狭ビット幅の演算装置を用いて広ビット幅の命令セットを実行する技術が求められて来ている。特許文献１に開示された技術は、広ビット幅の演算装置を用いて狭ビット幅の命令セットを実行する技術であるからである。
【０００６】
より具体的には、動作が超高速であり、消費電力も極めて小さい、次世代デバイスの開発が盛んに進められている。しかし、価格・安定性・歩留りの観点から、現状のシリコンデバイスを前提として設計された大規模回路をそのまま利用してコンピュータを構成することは極めて困難である。
【０００７】
実用化を急ぐ場合、まずは極めて小規模の回路を用いてコンピュータを設計する必要がある。しかし、過去に開発された技術では、８ビットまたは４ビットの世界のアプリケーションプログラムやＯＳ（Operating System）しか動作させることができない。従来の８ビットコンピュータや４ビットコンピュータ上で動作するソフトウェアにより、３２ビットアプリケーションをエミュレートすることは可能であるものの、極めて低速なコンピュータしか実現することができない。
【０００８】
このため、エミュレーションに特化した８ビットコンピュータを構成し、実用レベルのアプリケーションを小型ＣＰＵ（Central Processing Unit）上で動作可能とする技術が必要である。
【０００９】
このように具体的に説明したとおり、狭ビット幅の演算装置を用いて広ビット幅の命令セットを実行する技術、すなわち、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術が求められて来ている。
【００１０】
このような技術は、上で述べたとおり、特許文献１に開示された技術と異なるものである。
【００１１】
本発明は、このような課題に鑑みてなされたものであり、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、本発明の一実施形態に係る演算装置は、
Ｎビット幅の演算ユニットと、
複数のエミュレーション命令を格納する記憶ユニットと、
前記演算ユニットに入力されるデータを格納するＮビット幅の入力演算レジスタを複数個有する入力演算レジスタ群と、
前記演算ユニットの演算結果を格納するＮビット幅の出力演算レジスタを複数個有する出力演算レジスタ群と
を備える。
【００１３】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるＮビットオペランドの値（Ｓ）を用いて、前記入力演算レジスタＸ１の下位（Ｎ−Ｓ）ビットと前記入力演算レジスタＸ０の上位Ｓビットとを連結し、当該連結されたＮビットデータを前記作業レジスタに格納する命令であることが好ましい。
【００１４】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるＮビットのオフセット値を用いてＮビットデータを取得し、当該取得されたＮビットデータの上位Ｎ／２ビットをＵ、前記Ｎビットデータの下位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットの反転値との論理積をＬ１、前記作業レジスタの上位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットとの論理積をＬ２として、前記Ｕと、前記Ｌ１と前記Ｌ２との論理和とを連結し、当該連結されたＮビットデータを前記作業レジスタに格納する命令であることが好ましい。
【００１５】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるＮビットのオフセット値を用いてＮビットデータを取得し、当該取得されたＮビットデータの上位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットの反転値との論理積をＵ１、前記作業レジスタの上位Ｎ／２ビットと前記作業レジスタの下位Ｎ／２ビットとの論理積をＵ２、前記Ｎビットデータの下位Ｎ／２ビットをＬとして、前記Ｕ１と前記Ｕ２との論理和と、前記Ｌとを連結し、当該連結されたＮビットデータを前記作業レジスタに格納する命令であることが好ましい。
【００１６】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタＹ３を右に１ビットシフトして前記出力演算レジスタＹ３に格納し、追い出される前記出力演算レジスタＹ３の最下位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋１の場合には、前記出力演算レジスタＹ２を右に１ビットシフトして前記出力演算レジスタＹ２に格納し、追い出される前記出力演算レジスタＹ２の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋２の場合には、前記出力演算レジスタＹ１を右に１ビットシフトして前記出力演算レジスタＹ１に格納し、追い出される前記出力演算レジスタＹ１の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋３の場合には、前記出力演算レジスタＹ０を右に１ビットシフトして前記出力演算レジスタＹ０に格納し、追い出される前記出力演算レジスタＹ０の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることが好ましい。
【００１７】
前記エミュレーション命令は、
前記出力演算レジスタＹ３を右に１ビットシフトして前記出力演算レジスタＹ３に格納するとき、前記出力演算レジスタＹ３の最上位ビットに０または前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ２を右に１ビットシフトして前記出力演算レジスタＹ２に格納するとき、前記出力演算レジスタＹ２の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ１を右に１ビットシフトして前記出力演算レジスタＹ１に格納するとき、前記出力演算レジスタＹ１の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ０を右に１ビットシフトして前記出力演算レジスタＹ０に格納するとき、前記出力演算レジスタＹ０の最上位ビットに前記条件コードレジスタの値を格納する命令であることが好ましい。
【００１８】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタＹ０を左に１ビットシフトして前記出力演算レジスタＹ０に格納し、追い出される前記出力演算レジスタＹ０の最上位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋１の場合には、前記出力演算レジスタＹ１を左に１ビットシフトして前記出力演算レジスタＹ１に格納し、追い出される前記出力演算レジスタＹ１の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋２の場合には、前記出力演算レジスタＹ２を左に１ビットシフトして前記出力演算レジスタＹ２に格納し、追い出される前記出力演算レジスタＹ２の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、前記演算回数カウンタに１を加え、
前記演算回数カウンタが初期値＋３の場合には、前記出力演算レジスタＹ３を左に１ビットシフトして前記出力演算レジスタＹ３に格納し、追い出される前記出力演算レジスタＹ３の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることが好ましい。
【００１９】
前記エミュレーション命令は、
前記出力演算レジスタＹ０を左に１ビットシフトして前記出力演算レジスタＹ０に格納するとき、前記出力演算レジスタＹ０の最下位ビットには０または前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ１を左に１ビットシフトして前記出力演算レジスタＹ１に格納するとき、前記出力演算レジスタＹ１の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ２を左に１ビットシフトして前記出力演算レジスタＹ２に格納するとき、前記出力演算レジスタＹ２の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタＹ３を左に１ビットシフトして前記出力演算レジスタＹ３に格納するとき、前記出力演算レジスタＹ３の最下位ビットには前記条件コードレジスタの値を格納する命令であることが好ましい。
【００２０】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位Ｎ／２ビットが第１の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第２の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの下位Ｎ／２ビットとの論理和を求め、
当該論理和の結果がＡｌｌ−１のとき、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がＡｌｌ−１でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第３の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの下位Ｎ／２ビットとの論理積を求め、
当該論理積の結果がＡｌｌ−０のとき、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がＡｌｌ−０でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第４の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの下位Ｎ／２ビットとの排他論理和を求め、
当該排他論理和の結果がＡｌｌ−０のとき、前記オペランドの次アドレスに、前記入力演算レジスタＸの下位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がＡｌｌ−０のとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加える命令であることが好ましい。
【００２１】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位Ｎ／２ビットが第１の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタＸの上位Ｎ／２ビットの値をＱ倍した値を加え、新たなアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第２の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの上位Ｎ／２ビットとの論理和を求め、
当該論理和の結果がＡｌｌ−１のとき、前記オペランドの次アドレスにＱを加えたアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がＡｌｌ−１でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第３の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの上位Ｎ／２ビットとの論理積を求め、
当該論理積の結果がＡｌｌ−０のとき、前記オペランドの次アドレスにＱを加えたアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がＡｌｌ−０でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位Ｎ／２ビットが第４の値の場合には、前記オペランドの下位Ｎ／２ビットと前記入力演算レジスタＸの上位Ｎ／２ビットとの排他論理和を求め、
当該排他論理和の結果がＡｌｌ−０のとき、前記オペランドの次アドレスにＱを加えたアドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がＡｌｌ−０でないとき、前記オペランドの次アドレスから取得したＱバイトの値の一部または全部を前記プログラムカウンタに加える命令であることが好ましい。
【００２２】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるＮビットのオフセット値を用いて、前記メモリから複数のＮビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタＹ０と前記メモリバス上のＮビットデータＤ０とを加算して前記出力演算レジスタＹ０に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋１かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ１と前記メモリバス上のＮビットデータＤ１と前記条件コードレジスタとを加算して前記出力演算レジスタＹ１に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋２かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ２と前記メモリバス上のＮビットデータＤ２と前記条件コードレジスタとを加算して前記出力演算レジスタＹ２に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋３かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ３と前記メモリバス上のＮビットデータＤ３と前記条件コードレジスタを加算して前記出力演算レジスタＹ３に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることが好ましい。
【００２３】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
４つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるＮビットのオフセット値を用いて、前記メモリから複数のＮビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタＹ０とメモリバス上のＮビットデータＤ０とを論理演算して前記出力演算レジスタＹ０に格納し、前記出力演算レジスタＹ０に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋１かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ１と前記メモリバス上のＮビットデータＤ１とを論理演算して前記出力演算レジスタＹ１に格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ１に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋２かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ２と前記メモリバス上のＮビットデータＤ２とを論理演算して前記出力演算レジスタＹ２に格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ２に格納される値が０であるときに前記条件コードレジスタに１をセットし、
前記レディカウンタが初期値＋３かつ前記データレディ信号がオンの場合には、前記出力演算レジスタＹ３と前記メモリバス上のＮビットデータＤ３とを論理演算して前記出力演算レジスタＹ３に格納し、前記条件コードレジスタの値が１かつ前記出力演算レジスタＹ３に格納される値が０であるときに前記条件コードレジスタに１をセットする命令であることが好ましい。
【発明の効果】
【００２４】
本発明は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術を提供することができるという効果を奏する。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施形態に係る演算装置の概略構成を示すブロック図である。
【図２】マルチプレックス命令の概略手順を示すフローチャートである。
【図３】ロードマージＬｏｗｅｒ命令の概略手順を示すフローチャートである。
【図４】ロードマージＵｐｐｅｒ命令の概略手順を示すフローチャートである。
【図５】多ビット長右１ビットシフト命令の概略手順を示すフローチャートである。
【図６】多ビット長左１ビットシフト命令の概略手順を示すフローチャートである。
【図７】第１のテーブル分岐命令の概略手順を示すフローチャートである。
【図８】第２のテーブル分岐命令の概略手順を示すフローチャートである。
【図９】多ビット長加算命令の概略手順を示すフローチャートである。
【図１０】多ビット長論理積命令の概略手順を示すフローチャートである。
【発明を実施するための形態】
【００２６】
以下、本発明の実施の形態について、詳細に説明する。
【００２７】
（本発明の意義）
従来の８ビットコンピュータ（MC6502やZ80等）や、４ビットコンピュータ（FERICA）では、３２ビットのデータを前提とするプログラムを実用的速度でエミュレートすることが極めて困難である。特に、３２ビット幅の命令をデコードしたり、３２ビット幅のデータを読み書きしたりする際に多くの時間を要する。このため、特に、デコードやデータの読み書きに関して、従来の８ビットコンピュータが備えていない機能を追加し、不要な機能を削除することにより、エミュレーションに最適な８ビットコンピュータを構成しなければならない。
【００２８】
例えば８ビットを演算の基本単位とする極めて小規模のハードウェアによりＣＰＵを構成する場合、メモリアクセスのためのアドレスバス幅は１６ビット程度、データバス幅は８ビット程度とするのが一般的である。
【００２９】
３２ビットコンピュータのエミュレーションに特化する場合、アドレスバスは少なくとも２４ビット（記憶空間では１６ＭＢ相当）が必要である。単純にアドレスバス幅を増加するとピン数増加によるハードウェア量の増加を招くため、２４ビットのアドレスバスと８ビットのデータバスのピンを共有し、２４ビットの信号線を共用するのが効果的である。
【００３０】
同様に、データバスも３２ビット幅があれば３２ビットコンピュータのエミュレーションを高速に実行することができる。しかし、ＣＰＵ内部が８ビット構成であるため、データバスの拡張はあまり効果がない。むしろ、８ビットのデータ転送を連続させるほうが、ハードウェアを効率的に使用できる。
【００３１】
そこで、メモリを参照する場合に、まず、２４ビットにアドレス情報を載せ、引続き８ビットを複数回駆動するメモリバスサイクルを基本とするのが最適である。本発明は、このようなバスサイクルに適合し、かつ、エミュレーションに特化した後述の命令を備えるハードウェア構成方式とするものである。
【００３２】
当然のことながら、本発明は、上述したような、８ビット構成のコンピュータを用いて、３２ビットのデータを前提とするプログラムをエミュレートすることに好適なものに限られるものではない。本発明は、要は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術に好適なものである。
【００３３】
なお、以下では、８ビット構成のコンピュータを用いて、３２ビットのデータを前提とするプログラムをエミュレートする実施形態を例として説明する。
【００３４】
（演算装置の構成）
図１は、本発明の一実施形態に係る演算装置の概略構成を示すブロック図である。図１に示すように、本発明の一実施形態に係る演算装置１００は、演算ユニット１０と、作業レジスタ１２と、入力演算レジスタ群１３と、出力演算レジスタ群１４と、プログラムカウンタ１５と、演算回数カウンタ１６と、条件コードレジスタ１７と、レディカウンタ１８と、エミュレーション命令記憶ユニット（記憶ユニット）１９と、メモリバスアドレスレジスタ２０と、メモリバスデータレジスタ２１とを備えている。
【００３５】
演算装置１００は、メモリバス（図示省略）を介してメモリ（図示省略）に接続されており、メモリバスを用いて、メモリとの間におけるデータ転送を実行する。メモリ内のアドレスを指定するアドレス信号を搬送するアドレスバスと、メモリから読み出されたデータを搬送するデータバスとは、メモリバスを共用する。具体的には、アドレスバスとデータバスとは時分割でメモリバスを共用する。
【００３６】
なお、演算装置１００は、さらに、レジスタ番号指定レジスタ１１を備えていてもよい。この場合、演算装置１００は、エミュレーション命令記憶ユニット１９から読み出された命令に含まれる、後述のオペランドの値及びオフセット値等を、一旦、レジスタ番号指定レジスタ１１に格納し、レジスタ番号指定レジスタ１１から、それらオペランドの値及びオフセット値等を読み出しても構わない。
【００３７】
入力演算レジスタ群１３は、演算レジスタＸ０、演算レジスタＸ１、演算レジスタＸ２及び演算レジスタＸ３を含んでおり、出力演算レジスタ群１４は、演算レジスタＹ０、演算レジスタＹ１、演算レジスタＹ２及び演算レジスタＹ３を含んでいる。
【００３８】
演算ユニット１０は、エミュレーション命令記憶ユニット１９に記憶されている複数のエミュレーション命令の各々を読み出し、エミュレーションを実現する。
【００３９】
作業レジスタ１２は、演算ユニット１０の演算結果を一時的に格納するレジスタである。
【００４０】
入力演算レジスタ群１３は、演算ユニット１０に入力されるデータを格納するレジスタ群であり、出力演算レジスタ群１４は、演算ユニット１０の演算結果を格納するレジスタ群である。
【００４１】
プログラムカウンタ１５は、演算ユニット１０が次に実行すべき命令のアドレスを格納するレジスタであり、演算回数カウンタ１６は、メモリバスを用いたメモリからのデータ転送を行なうことなく、演算ユニット１０が演算する回数をカウントし、当該カウント数を格納するレジスタである。
【００４２】
条件コードレジスタ１７は、４つの条件コードフラグ（ネガティブ、ゼロ、キャリー、オーバフロー）を格納するレジスタである。
【００４３】
レディカウンタ１８は、メモリからのバースト転送が開始すると、バースト転送開始後、メモリから到着するデータのかたまり（ブロック）をカウントし、当該カウント数を格納するレジスタである。すなわち、レディカウンタ１８は、バースト転送開始から何番目に到着したデータであるかを示すカウンタである。メモリからのバースト転送は、バースト転送信号２３を用いて、制御される。
【００４４】
メモリバスアドレスレジスタ２０は、メモリバスを用いて、演算装置１００とメモリとの間において搬送されるアドレス信号を格納するレジスタである。メモリバスデータレジスタ２１は、メモリバスを用いて、演算装置１００とメモリとの間において搬送されるデータを格納するレジスタである。
【００４５】
なお、演算装置１００は、上述したバースト転送信号２３に加え、以下の信号も、演算ユニット１０の演算に用いている。
【００４６】
識別信号２２は、メモリバス上で、アドレス信号が搬送されているか、または、データが搬送されているか、を識別する信号である。上述したように、メモリバスは、アドレス信号を搬送するアドレスバスと、データを搬送するデータバスと、に共用されている。演算装置１００は、この識別信号２２を用いて、メモリバス上で、アドレス信号が搬送されているか、または、データが搬送されているか、を認識することができる。
【００４７】
データレディ信号２４は、メモリバス上にメモリから到着した有効なデータがあることを示す信号である。
【００４８】
桁上げ信号２５は、演算ユニット１０の演算の結果、桁上げが発生した場合、その桁上げを表わす信号である。
【００４９】
（エミュレーション命令）
エミュレーション命令記憶ユニット１９は、以下の複数のエミュレーション命令を記憶している。
【００５０】
（マルチプレックス命令）
エミュレーション命令記憶ユニット１９には８ビットオペランドの値（Ｓ）が書き込まれている。演算ユニット１０は、エミュレーション命令記憶ユニット１９からマルチプレックス命令を読み出し、そのマルチプレックス命令を実行する。図２は、マルチプレックス命令の概略手順を示すフローチャートである。
【００５１】
図２に示すように、演算ユニット１０は、エミュレーション命令記憶ユニット１９に書き込まれている８ビットオペランドの値Ｓを読み出す（Ｓ１）。この読み出したオペランドの値Ｓを用いて、演算ユニット１０は、入力演算レジスタＸ１を構成する８ビットのうち、下位（８−Ｓ）ビットを取り出す（Ｓ２）。また、演算ユニット１０は、上述のオペランドの値Ｓを用いて、入力演算ユニットＸ０を構成する８ビットのうち、上位Ｓビットを取り出す（Ｓ３）。
【００５２】
演算ユニット１０は、このように取り出した、入力演算レジスタＸ１の下位（８−Ｓ）ビットと入力演算レジスタＸ０の上位Ｓビットとを連結する（Ｓ４）。そして、演算ユニット１０は、この連結された８ビットを作業レジスタ１２に格納する（Ｓ５）。
【００５３】
（ロードマージＬｏｗｅｒ命令）
エミュレーション命令記憶ユニット１９には８ビットのオフセット値が書き込まれている。演算ユニット１０は、エミュレーション命令記憶ユニット１９からロードマージＬｏｗｅｒ命令を読み出し、そのロードマージＬｏｗｅｒ命令を実行する。図３は、ロードマージＬｏｗｅｒ命令の概略手順を示すフローチャートである。
【００５４】
図３に示すように、演算ユニット１０は、エミュレーション命令記憶ユニット１９に書き込まれている８ビットのオフセット値を読み出す（Ｓ１１）。この読み出したオフセット値を用いて、演算ユニット１０は、メモリから１バイトデータ（Ｄ）を取得する。そして、演算ユニット１０は、Ｄの上位４ビットをＵとする（Ｓ１２）。
【００５５】
さらに、演算ユニット１０は、Ｄの下位４ビットと作業レジスタ１２の下位４ビットの反転値との論理積をＬ１（Ｓ１３）、および、作業レジスタ１２の上位４ビットと作業レジスタ１２の下位４ビットとの論理積をＬ２とする（Ｓ１４）。
【００５６】
そして、演算ユニット１０は、Ｕと、Ｌ１とＬ２との論理和とを連結し（Ｓ１５）、この連結された８ビットを作業レジスタ１２に格納する（Ｓ１６）。
【００５７】
（ロードマージＵｐｐｅｒ命令）
エミュレーション命令記憶ユニット１９には８ビットのオフセット値が書き込まれている。演算ユニット１０は、エミュレーション命令記憶ユニット１９からロードマージＵｐｐｅｒ命令を読み出し、そのロードマージＵｐｐｅｒ命令を実行する。図４は、ロードマージＵｐｐｅｒ命令の概略手順を示すフローチャートである。
【００５８】
図４に示すように、演算ユニット１０は、エミュレーション命令記憶ユニット１９に書き込まれている８ビットのオフセット値を読み出す（Ｓ２１）。この読み出したオフセット値を用いて、演算ユニット１０は、メモリから１バイトデータ（Ｄ）を取得する。そして、演算ユニット１０は、Ｄの下位４ビットをＬとする（Ｓ２２）。
【００５９】
さらに、演算ユニット１０は、Ｄの上位４ビットと作業レジスタ１２の下位４ビットの反転値との論理積をＵ１（Ｓ２３）、および、作業レジスタ１２の上位４ビットと作業レジスタ１２の下位４ビットとの論理積をＵ２とする（Ｓ２４）。
【００６０】
そして、演算ユニット１０は、Ｕ１とＵ２との論理和と、Ｌとを連結し（Ｓ２５）、この連結された８ビットを作業レジスタ１２に格納する（Ｓ２６）。
【００６１】
（多ビット長右１ビットシフト命令）
演算ユニット１０は、出力演算レジスタ群１４の各演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０の内容を右に１ビットシフトする多ビット長右１ビットシフト命令をエミュレーション命令記憶ユニット１９から読み出し、その多ビット長右１ビットシフト命令を実行する。図５は、多ビット長右１ビットシフト命令の概略手順を示すフローチャートである。
【００６２】
図５に示すように、演算回数カウンタ１６が初期値の場合には、演算レジスタＹ３を右に１ビットシフトして演算レジスタＹ３に格納する（Ｓ３１）。
【００６３】
このシフトにおいて、演算レジスタＹ３の最上位ビットには０または条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ３から追い出される最下位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００６４】
そして、演算レジスタＹ３に格納される値が０である場合には、条件コードレジスタ１７の条件コードＺに１をセットし、演算回数カウンタ１６に１を加える。
【００６５】
演算回数カウンタ１６が初期値＋１の場合には、演算レジスタＹ２を右に１ビットシフトして演算レジスタＹ２に格納する（Ｓ３２）。
【００６６】
このシフトにおいて、演算レジスタＹ２の最上位ビットには条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ２から追い出される最下位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００６７】
そして、条件コードレジスタ１７の条件コードＺの値が１であり、かつ、演算レジスタＹ２に格納される値が０である場合には、条件コードレジスタ１７の条件コードＺに１をセットし、演算回数カウンタ１６に１を加える。
【００６８】
演算回数カウンタ１６が初期値＋２の場合には、演算レジスタＹ１を右に１ビットシフトして演算レジスタＹ１に格納する（Ｓ３３）。
【００６９】
このシフトにおいて、演算レジスタＹ１の最上位ビットには条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ１から追い出される最下位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００７０】
そして、条件コードレジスタ１７の条件コードＺの値が１であり、かつ、演算レジスタＹ１に格納される値が０である場合に条件コードレジスタ１７の条件コードＺに１をセットし、演算回数カウンタ１６に１を加える。
【００７１】
演算回数カウンタ１６が初期値＋３の場合には、演算レジスタＹ０を右に１ビットシフトして演算レジスタＹ０に格納する（Ｓ３４）。
【００７２】
このシフトにおいて、演算レジスタＹ０の最上位ビットには条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ０から追い出される最下位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００７３】
そして、条件コードレジスタ１７の条件コードＺの値が１であり、かつ、演算レジスタＹ０に格納される値が０である場合には、条件コードレジスタ１７の条件コードＺに１をセットする。
【００７４】
（多ビット長左１ビットシフト命令）
演算ユニット１０は、出力演算レジスタ群１４の各演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０の内容を左に１ビットシフトする多ビット長左１ビットシフト命令をエミュレーション命令記憶ユニット１９から読み出し、その多ビット長左１ビットシフト命令を実行する。図６は、多ビット長左１ビットシフト命令の概略手順を示すフローチャートである。
【００７５】
図６に示すように、演算回数カウンタ１６が初期値の場合には、演算レジスタＹ０を左に１ビットシフトして演算レジスタＹ０に格納する（Ｓ４１）。
【００７６】
このシフトにおいて、演算レジスタＹ０の最下位ビットには０または条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ０から追い出される最上位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００７７】
そして、演算レジスタＹ０に格納される値が０である場合には、条件コードレジスタ１７の条件コードＺに１をセットし、演算回数カウンタ１６に１を加える。
【００７８】
演算回数カウンタ１６が初期値＋１の場合には、演算レジスタＹ１を左に１ビットシフトして演算レジスタＹ１に格納する（Ｓ４２）。
【００７９】
このシフトにおいて、演算レジスタＹ１の最下位ビットには条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ１から追い出される最上位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００８０】
そして、条件コードレジスタ１７の条件コードＺの値が１であり、かつ、演算レジスタＹ１に格納される値が０である場合には、条件コードレジスタ１７の条件コードＺに１をセットし、演算回数カウンタ１６に１を加える。
【００８１】
演算回数カウンタ１６が初期値＋２の場合には、演算レジスタＹ２を左に１ビットシフトして演算レジスタＹ２に格納する（Ｓ４３）。
【００８２】
このシフトにおいて、演算レジスタＹ２の最下位ビットには条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ２から追い出される最上位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００８３】
そして、条件コードレジスタ１７の条件コードＺの値が１であり、かつ、演算レジスタＹ２に格納される値が０である場合に条件コードレジスタ１７の条件コードＺに１をセットし、演算回数カウンタ１６に１を加える。
【００８４】
演算回数カウンタ１６が初期値＋３の場合には、演算レジスタＹ３を左に１ビットシフトして演算レジスタＹ３に格納する（Ｓ４４）。
【００８５】
このシフトにおいて、演算レジスタＹ３の最下位ビットには条件コードレジスタ１７の条件コードＣの値を格納する。また、演算レジスタＹ３から追い出される最上位ビットを条件コードレジスタ１７の条件コードＣの値として格納する。
【００８６】
そして、条件コードレジスタ１７の条件コードＺの値が１であり、かつ、演算レジスタＹ３に格納される値が０である場合には、条件コードレジスタ１７の条件コードＺに１をセットする。
【００８７】
（第１のテーブル分岐命令）
図７は、第１のテーブル分岐命令の概略手順を示すフローチャートである。図７に示すように、エミュレーション命令記憶ユニット１９には８ビットオペランドの値（Ｍ）が書き込まれている。演算ユニット１０は、エミュレーション命令記憶ユニット１９から第１のテーブル分岐命令を読み出し（Ｓ５１）、その第１のテーブル分岐命令を実行する。
【００８８】
この第１のテーブル分岐命令は、オペランドの次アドレスに、演算レジスタＸ０、演算レジスタＸ１、演算レジスタＸ２及び演算レジスタＸ３のいずれかの下位４ビットの値を１倍または２倍した値を加え、新たなアドレスから取得した１バイトまたは２バイトの値の一部または全部をプログラムカウンタ１５に加える命令である。また、４ビット（１６エントリ）分のオフセットを全て用意することなく、テーブルサイズを縮小するために、８ビットオペランドの値（Ｍ）を使用する。Ｍの上位４ビットの値が０の場合、演算レジスタＸ０、演算レジスタＸ１、演算レジスタＸ２及び演算レジスタＸ３のいずれかの下位４ビットの値をそのまま使用する（Ｓ５２）。ここでは、演算レジスタＸ０を使用するとする。
【００８９】
Ｍの上位４ビットの値が１の場合、Ｍの下位４ビットと演算レジスタＸ０の下位４ビットとの論理和を求め（Ｓ５３）、結果がＡｌｌ−１の場合は、第２番目のオフセットを使用し、結果がＡｌｌ−１でない場合は、第１番目のオフセットを使用する。
【００９０】
ここで、第１番目のオフセットは、エミュレーション命令記憶ユニット１９に書き込まれている８ビットオペランドの次アドレスに配置されるメモリ上の値である。すなわち、第１のテーブル分岐命令に引き続くデータである。また、第２番目のオフセットは、第１番目のオフセットの次アドレスに配置されるメモリ上の値である。
【００９１】
Ｍの上位４ビットの値が２の場合、Ｍの下位４ビットと演算レジスタＸ０の下位４ビットとの論理積を求め（Ｓ５４）、結果がＡｌｌ−０の場合は、第２番目のオフセットを使用し、結果がＡｌｌ−０でない場合は、第１番目のオフセットを使用する。
【００９２】
Ｍの上位４ビットの値が３の場合、Ｍの下位４ビットと演算レジスタＸ０の下位４ビットとの排他論理和を求め（Ｓ５５）、結果がＡｌｌ−０の場合は、第２番目のオフセットを使用し、結果がＡｌｌ−０でない場合は、第１番目のオフセットを使用する。
【００９３】
このようにして、Ｍの上位４ビットの値を適切に設定することにより、テーブルエントリ数を１６から２に縮退できる。
【００９４】
（第２のテーブル分岐命令）
図８は、第２のテーブル分岐命令の概略手順を示すフローチャートである。図８に示すように、エミュレーション命令記憶ユニット１９には８ビットオペランドの値（Ｍ）が書き込まれている。演算ユニット１０は、エミュレーション命令記憶ユニット１９から第２のテーブル分岐命令を読み出し（Ｓ６１）、その第２のテーブル分岐命令を実行する。
【００９５】
この第２のテーブル分岐命令は、オペランドの次アドレスに、演算レジスタＸ０、演算レジスタＸ１、演算レジスタＸ２及び演算レジスタＸ３のいずれかの上位４ビットの値を１倍または２倍した値を加え、新たなアドレスから取得した１バイトまたは２バイトの値の一部または全部をプログラムカウンタ１５に加える命令である。また、４ビット（１６エントリ）分のオフセットを全て用意することなく、テーブルサイズを縮小するために、８ビットオペランドの値（Ｍ）を使用する。Ｍの上位４ビットの値が０の場合、演算レジスタＸ０、演算レジスタＸ１、演算レジスタＸ２及び演算レジスタＸ３のいずれかの下位４ビットの値をそのまま使用する（Ｓ６２）。ここでは、演算レジスタＸ０を使用するとする。
【００９６】
Ｍの上位４ビットの値が１の場合、Ｍの下位４ビットと演算レジスタＸ０の上位４ビットとの論理和を求め（Ｓ６３）、結果がＡｌｌ−１の場合は、第２番目のオフセットを使用し、結果がＡｌｌ−１でない場合は、第１番目のオフセットを使用する。
【００９７】
Ｍの上位４ビットの値が２の場合、Ｍの下位４ビットと演算レジスタＸ０の上位４ビットとの論理積を求め（Ｓ６４）、結果がＡｌｌ−０の場合は、第２番目のオフセットを使用し、結果がＡｌｌ−０でない場合は、第１番目のオフセットを使用する。
【００９８】
Ｍの上位４ビットの値が３の場合、Ｍの下位４ビットと演算レジスタＸ０の上位４ビットとの排他論理和を求め（Ｓ６５）、結果がＡｌｌ−０の場合は、第２番目のオフセットを使用し、結果がＡｌｌ−０でない場合は、第１番目のオフセットを使用する。
【００９９】
このようにして、Ｍの上位４ビットの値を適切に設定することにより、テーブルエントリ数を１６から２に縮退できる。
【０１００】
（多ビット長加算命令）
演算ユニット１０は、出力演算レジスタ群１４の演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０の内容に、オペランドで示されるメモリアドレスの内容Ｍ３、Ｍ２、Ｍ１、Ｍ０を加算して得られる３２ビットの値を演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０に格納するとともに、条件コードレジスタ１７の条件コードＮ（ネガティブ）、Ｚ（ゼロ）、Ｖ（オーバフロー）、Ｃ（キャリー）を更新する多ビット長加算命令をエミュレーション命令記憶ユニット１９から読み出し、その多ビット長加算命令を実行する。図９は、多ビット長加算命令の概略手順を示すフローチャートである。
【０１０１】
エミュレーション命令記憶ユニット１９には８ビットのオフセット値（すなわち、オペランドで示されるメモリアドレス）が書き込まれている。
【０１０２】
図９に示すように、演算ユニット１０は、エミュレーション命令記憶ユニット１９に書き込まれている８ビットのオフセット値を読み出す（Ｓ７１）。この読み出したオフセット値を用いて、演算ユニット１０は、メモリから複数の８ビットデータ（Ｄ３、Ｄ２、Ｄ１、Ｄ０）を取得する（Ｓ７２）。そして、演算ユニット１０は、演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０の内容に、複数の８ビットデータ（Ｄ３、Ｄ２、Ｄ１、Ｄ０）を加算する。
【０１０３】
具体的には、レディカウンタ１８が初期値、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ０とＤ０とを加算して（Ｓ７３）、演算レジスタＹ０に格納し、桁上げ信号２５を条件コードレジスタ１７の条件コードＣに格納する。そして、演算レジスタＹ０に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１０４】
なお、レディカウンタ１８は、８ビットデータ（Ｄ３、Ｄ２、Ｄ１、Ｄ０）のうちのいずれが転送されてきたかを表わすものである。
【０１０５】
レディカウンタ１８が初期値＋１、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ１とＤ１と条件コードレジスタ１７の条件コードＣとを加算して（Ｓ７４）、演算レジスタＹ１に格納し、桁上げ信号２５を条件コードレジスタ１７に格納する。そして、条件コードレジスタ１７の条件コードレジスタＺの値が１、かつ、演算レジスタＹ１に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１０６】
レディカウンタが初期値＋２、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ２とＤ２と条件コードＣとを加算して（Ｓ７５）、演算レジスタＹ２に格納し、桁上げ信号２５を条件コードレジスタ１７に格納する。そして、条件コードレジスタ１７の条件コードレジスタＺの値が１、かつ、演算レジスタＹ２に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１０７】
レディカウンタが初期値＋３、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ３とＤ３と条件コードＣとを加算して（Ｓ７６）、演算レジスタＹ３に格納し、桁上げ信号２５を条件コードレジスタ１７に格納する。そして、条件コードレジスタＺの値が１、かつ、演算レジスタＹ３に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１０８】
（多ビット長論理積命令）
演算ユニット１０は、出力演算レジスタ群１４の演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０の内容に、オペランドで示されるメモリアドレスの内容Ｍ３、Ｍ２、Ｍ１、Ｍ０を論理演算して得られる３２ビットの値をＹ３、Ｙ２、Ｙ１、Ｙ０に格納するとともに、条件コードレジスタ１７の条件コードＮ（ネガティブ）、Ｚ（ゼロ）、Ｖ（オーバフロー）、Ｃ（キャリー）を更新する多ビット長論理積命令をエミュレーション命令記憶ユニット１９から読み出し、その多ビット長論理積命令を実行する。図１０は、多ビット長論理積命令の概略手順を示すフローチャートである。
【０１０９】
エミュレーション命令記憶ユニット１９には８ビットのオフセット値が書き込まれている。
【０１１０】
図１０に示すように、演算ユニット１０は、エミュレーション命令記憶ユニット１９に書き込まれている８ビットのオフセット値を読み出す（Ｓ８１）。この読み出したオフセット値を用いて、演算ユニット１０は、メモリから複数の８ビットデータ（Ｄ３、Ｄ２、Ｄ１、Ｄ０）を取得する（Ｓ８２）。そして、演算ユニット１０は、演算レジスタＹ３、Ｙ２、Ｙ１、Ｙ０の内容に、複数の８ビットデータ（Ｄ３、Ｄ２、Ｄ１、Ｄ０）を論理演算する。
【０１１１】
具体的には、レディカウンタ１８が初期値、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ０とＤ０とを論理演算して（Ｓ８３）、演算レジスタＹ０に格納する。そして、演算レジスタＹ０に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１１２】
レディカウンタ１８が初期値＋１、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ１とＤ１とを論理演算して（Ｓ８４）、演算レジスタＹ１に格納する。そして、条件コードレジスタ１７の条件コードレジスタＺの値が１、かつ、演算レジスタＹ１に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１１３】
レディカウンタ１８が初期値＋２、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ２とＤ２とを論理演算して（Ｓ８５）、演算レジスタＹ２に格納する。そして、条件コードレジスタ１７の条件コードレジスタＺの値が１、かつ、演算レジスタＹ２に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１１４】
レディカウンタ１８が初期値＋３、かつ、データレディ信号２４がオンの場合には、演算レジスタＹ３とＤ３とを論理演算して（Ｓ８６）、演算レジスタＹ３に格納する。そして、条件コードレジスタ１７の条件コードレジスタＺの値が１、かつ、演算レジスタＹ３に格納される値が０である場合には、条件コードレジスタ１７の条件コードレジスタＺに１をセットする。
【０１１５】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【０１１６】
本発明は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術に利用することができる。
【符号の説明】
【０１１７】
１０    演算ユニット
１２    作業レジスタ
１３    入力演算レジスタ群
１４    出力演算レジスタ群
１５    プログラムカウンタ
１６    演算回数カウンタ
１７    条件コードレジスタ
１８    レディカウンタ
１９    エミュレーション命令記憶ユニット（記憶ユニット）
１００    演算装置
【図１】
2014182514.tif 000003
【図２】
2014182514.tif 000004
【図３】
2014182514.tif 000005
【図４】
2014182514.tif 000006
【図５】
2014182514.tif 000007
【図６】
2014182514.tif 000008
【図７】
2014182514.tif 000009
【図８】
2014182514.tif 000010
【図９】
2014182514.tif 000011
【図１０】
2014182514.tif 000012