TOP > 国内特許検索 > 演算装置 > 明細書

明細書 :演算装置

発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2014-182514 (P2014-182514A)
公開日 平成26年9月29日(2014.9.29)
発明の名称または考案の名称 演算装置
国際特許分類 G06F   9/30        (2006.01)
G06F   9/34        (2006.01)
G06F   9/315       (2006.01)
FI G06F 9/30 310E
G06F 9/34 330
G06F 9/30 340D
請求項の数または発明の数 12
出願形態 OL
全頁数 24
出願番号 特願2013-055660 (P2013-055660)
出願日 平成25年3月18日(2013.3.18)
発明者または考案者 【氏名】中島 康彦
出願人 【識別番号】504143441
【氏名又は名称】国立大学法人 奈良先端科学技術大学院大学
個別代理人の代理人 【識別番号】110000338、【氏名又は名称】特許業務法人HARAKENZO WORLD PATENT & TRADEMARK
審査請求 未請求
テーマコード 5B033
Fターム 5B033AA11
5B033BA03
5B033BD03
5B033DD04
5B033DD06
要約 【課題】狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術を提供する。
【解決手段】Nビット幅の演算ユニット10と、複数のエミュレーション命令を格納するエミュレーション命令記憶ユニット19と、演算ユニット10に入力されるデータを格納するNビット幅の入力演算レジスタ群を複数個有する入力演算レジスタ群13と、演算ユニット10の演算結果を格納するNビット幅の出力演算レジスタを複数個有する出力演算レジスタ群14とを備える演算装置100である。
【選択図】図1
特許請求の範囲 【請求項1】
Nビット幅の演算ユニットと、
複数のエミュレーション命令を格納する記憶ユニットと、
前記演算ユニットに入力されるデータを格納するNビット幅の入力演算レジスタを複数個有する入力演算レジスタ群と、
前記演算ユニットの演算結果を格納するNビット幅の出力演算レジスタを複数個有する出力演算レジスタ群と
を備えることを特徴とする演算装置。
【請求項2】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるNビットオペランドの値(S)を用いて、前記入力演算レジスタX1の下位(N-S)ビットと前記入力演算レジスタX0の上位Sビットとを連結し、当該連結されたNビットデータを前記作業レジスタに格納する命令であることを特徴とする請求項1に記載の演算装置。
【請求項3】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるNビットのオフセット値を用いてNビットデータを取得し、当該取得されたNビットデータの上位N/2ビットをU、前記Nビットデータの下位N/2ビットと前記作業レジスタの下位N/2ビットの反転値との論理積をL1、前記作業レジスタの上位N/2ビットと前記作業レジスタの下位N/2ビットとの論理積をL2として、前記Uと、前記L1と前記L2との論理和とを連結し、当該連結されたNビットデータを前記作業レジスタに格納する命令であることを特徴とする請求項1に記載の演算装置。
【請求項4】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるNビットのオフセット値を用いてNビットデータを取得し、当該取得されたNビットデータの上位N/2ビットと前記作業レジスタの下位N/2ビットの反転値との論理積をU1、前記作業レジスタの上位N/2ビットと前記作業レジスタの下位N/2ビットとの論理積をU2、前記Nビットデータの下位N/2ビットをLとして、前記U1と前記U2との論理和と、前記Lとを連結し、当該連結されたNビットデータを前記作業レジスタに格納する命令であることを特徴とする請求項1に記載の演算装置。
【請求項5】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタY3を右に1ビットシフトして前記出力演算レジスタY3に格納し、追い出される前記出力演算レジスタY3の最下位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+1の場合には、前記出力演算レジスタY2を右に1ビットシフトして前記出力演算レジスタY2に格納し、追い出される前記出力演算レジスタY2の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+2の場合には、前記出力演算レジスタY1を右に1ビットシフトして前記出力演算レジスタY1に格納し、追い出される前記出力演算レジスタY1の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+3の場合には、前記出力演算レジスタY0を右に1ビットシフトして前記出力演算レジスタY0に格納し、追い出される前記出力演算レジスタY0の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることを特徴とする請求項1に記載の演算装置。
【請求項6】
前記エミュレーション命令は、
前記出力演算レジスタY3を右に1ビットシフトして前記出力演算レジスタY3に格納するとき、前記出力演算レジスタY3の最上位ビットに0または前記条件コードレジスタの値を格納し、
前記出力演算レジスタY2を右に1ビットシフトして前記出力演算レジスタY2に格納するとき、前記出力演算レジスタY2の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタY1を右に1ビットシフトして前記出力演算レジスタY1に格納するとき、前記出力演算レジスタY1の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタY0を右に1ビットシフトして前記出力演算レジスタY0に格納するとき、前記出力演算レジスタY0の最上位ビットに前記条件コードレジスタの値を格納する命令であることを特徴とする請求項5に記載の演算装置。
【請求項7】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタY0を左に1ビットシフトして前記出力演算レジスタY0に格納し、追い出される前記出力演算レジスタY0の最上位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+1の場合には、前記出力演算レジスタY1を左に1ビットシフトして前記出力演算レジスタY1に格納し、追い出される前記出力演算レジスタY1の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+2の場合には、前記出力演算レジスタY2を左に1ビットシフトして前記出力演算レジスタY2に格納し、追い出される前記出力演算レジスタY2の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+3の場合には、前記出力演算レジスタY3を左に1ビットシフトして前記出力演算レジスタY3に格納し、追い出される前記出力演算レジスタY3の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることを特徴とする請求項1に記載の演算装置。
【請求項8】
前記エミュレーション命令は、
前記出力演算レジスタY0を左に1ビットシフトして前記出力演算レジスタY0に格納するとき、前記出力演算レジスタY0の最下位ビットには0または前記条件コードレジスタの値を格納し、
前記出力演算レジスタY1を左に1ビットシフトして前記出力演算レジスタY1に格納するとき、前記出力演算レジスタY1の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタY2を左に1ビットシフトして前記出力演算レジスタY2に格納するとき、前記出力演算レジスタY2の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタY3を左に1ビットシフトして前記出力演算レジスタY3に格納するとき、前記出力演算レジスタY3の最下位ビットには前記条件コードレジスタの値を格納する命令であることを特徴とする請求項7に記載の演算装置。
【請求項9】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位N/2ビットが第1の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第2の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの下位N/2ビットとの論理和を求め、
当該論理和の結果がAll-1のとき、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がAll-1でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第3の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの下位N/2ビットとの論理積を求め、
当該論理積の結果がAll-0のとき、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がAll-0でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第4の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの下位N/2ビットとの排他論理和を求め、
当該排他論理和の結果がAll-0のとき、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がAll-0のとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加える命令であることを特徴とする請求項1に記載の演算装置。
【請求項10】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位N/2ビットが第1の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタXの上位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第2の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの上位N/2ビットとの論理和を求め、
当該論理和の結果がAll-1のとき、前記オペランドの次アドレスにQを加えたアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がAll-1でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第3の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの上位N/2ビットとの論理積を求め、
当該論理積の結果がAll-0のとき、前記オペランドの次アドレスにQを加えたアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がAll-0でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第4の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの上位N/2ビットとの排他論理和を求め、
当該排他論理和の結果がAll-0のとき、前記オペランドの次アドレスにQを加えたアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がAll-0でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加える命令であることを特徴とする請求項1に記載の演算装置。
【請求項11】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるNビットのオフセット値を用いて、前記メモリから複数のNビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタY0と前記メモリバス上のNビットデータD0とを加算して前記出力演算レジスタY0に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+1かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY1と前記メモリバス上のNビットデータD1と前記条件コードレジスタとを加算して前記出力演算レジスタY1に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+2かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY2と前記メモリバス上のNビットデータD2と前記条件コードレジスタとを加算して前記出力演算レジスタY2に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+3かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY3と前記メモリバス上のNビットデータD3と前記条件コードレジスタを加算して前記出力演算レジスタY3に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることを特徴とする請求項1に記載の演算装置。
【請求項12】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるNビットのオフセット値を用いて、前記メモリから複数のNビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタY0とメモリバス上のNビットデータD0とを論理演算して前記出力演算レジスタY0に格納し、前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+1かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY1と前記メモリバス上のNビットデータD1とを論理演算して前記出力演算レジスタY1に格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+2かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY2と前記メモリバス上のNビットデータD2とを論理演算して前記出力演算レジスタY2に格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+3かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY3と前記メモリバス上のNビットデータD3とを論理演算して前記出力演算レジスタY3に格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることを特徴とする請求項1に記載の演算装置。
発明の詳細な説明 【技術分野】
【0001】
本発明は、演算装置に関する。特に、本発明は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術に関する。
【背景技術】
【0002】
コンピュータ製造業者は、新たな命令セットへ移行することにより新たなコンピュータにおいてより大きなアドレス空間へ遷移する傾向がある。新たな命令組へ移行することは、ユーザ及び製造業者の両方にとって潜在的に致命的な結果をもたらすことがある。ユーザの観点からは、このことは、古いマシンに対して書かれたプログラムが新しいマシンでは稼動しないことを意味している。ソフトウェアにかなりの投資をしたユーザは、ソフトウェアを変換するか又は置換するための費用を支払うか又は新しいマシンにおいて組み込まれた種々の進んだものの利点を諦めるかの何れかの不快な決断に迫られる。製造業者の観点からは、このような移行は、ユーザの憤りを買い且つこのような新しいマシンの当初の販売が停滞することとなる蓋然性がある。
【0003】
このような状況を考慮して、例えば、特許文献1には、コンピュータアーキテクチュアに関するものであって、より大きなワード寸法及びアドレス空間を持つために命令セットアーキテクチュアを拡張する技術が開示されている。この特許文献1に開示されたプロセッサによれば、例えば、32ビット整数演算をサブセットとして有する64ビット整数演算を実行し、且つ、32ビットアドレッシングをサブセットとして有する64ビットアドレッシングを実行することができる。
【先行技術文献】
【0004】

【特許文献1】特許第3554342号公報(2004年5月14日登録)
【発明の概要】
【発明が解決しようとする課題】
【0005】
近年、特許文献1に開示された技術とは異なり、狭ビット幅の演算装置を用いて広ビット幅の命令セットを実行する技術が求められて来ている。特許文献1に開示された技術は、広ビット幅の演算装置を用いて狭ビット幅の命令セットを実行する技術であるからである。
【0006】
より具体的には、動作が超高速であり、消費電力も極めて小さい、次世代デバイスの開発が盛んに進められている。しかし、価格・安定性・歩留りの観点から、現状のシリコンデバイスを前提として設計された大規模回路をそのまま利用してコンピュータを構成することは極めて困難である。
【0007】
実用化を急ぐ場合、まずは極めて小規模の回路を用いてコンピュータを設計する必要がある。しかし、過去に開発された技術では、8ビットまたは4ビットの世界のアプリケーションプログラムやOS(Operating System)しか動作させることができない。従来の8ビットコンピュータや4ビットコンピュータ上で動作するソフトウェアにより、32ビットアプリケーションをエミュレートすることは可能であるものの、極めて低速なコンピュータしか実現することができない。
【0008】
このため、エミュレーションに特化した8ビットコンピュータを構成し、実用レベルのアプリケーションを小型CPU(Central Processing Unit)上で動作可能とする技術が必要である。
【0009】
このように具体的に説明したとおり、狭ビット幅の演算装置を用いて広ビット幅の命令セットを実行する技術、すなわち、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術が求められて来ている。
【0010】
このような技術は、上で述べたとおり、特許文献1に開示された技術と異なるものである。
【0011】
本発明は、このような課題に鑑みてなされたものであり、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術を提供することを目的とする。
【課題を解決するための手段】
【0012】
上記の課題を解決するために、本発明の一実施形態に係る演算装置は、
Nビット幅の演算ユニットと、
複数のエミュレーション命令を格納する記憶ユニットと、
前記演算ユニットに入力されるデータを格納するNビット幅の入力演算レジスタを複数個有する入力演算レジスタ群と、
前記演算ユニットの演算結果を格納するNビット幅の出力演算レジスタを複数個有する出力演算レジスタ群と
を備える。
【0013】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるNビットオペランドの値(S)を用いて、前記入力演算レジスタX1の下位(N-S)ビットと前記入力演算レジスタX0の上位Sビットとを連結し、当該連結されたNビットデータを前記作業レジスタに格納する命令であることが好ましい。
【0014】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるNビットのオフセット値を用いてNビットデータを取得し、当該取得されたNビットデータの上位N/2ビットをU、前記Nビットデータの下位N/2ビットと前記作業レジスタの下位N/2ビットの反転値との論理積をL1、前記作業レジスタの上位N/2ビットと前記作業レジスタの下位N/2ビットとの論理積をL2として、前記Uと、前記L1と前記L2との論理和とを連結し、当該連結されたNビットデータを前記作業レジスタに格納する命令であることが好ましい。
【0015】
前記演算装置は、前記演算ユニットの演算結果を一時的に格納する作業レジスタをさらに備え、
前記エミュレーション命令は、前記記憶ユニットに含まれるNビットのオフセット値を用いてNビットデータを取得し、当該取得されたNビットデータの上位N/2ビットと前記作業レジスタの下位N/2ビットの反転値との論理積をU1、前記作業レジスタの上位N/2ビットと前記作業レジスタの下位N/2ビットとの論理積をU2、前記Nビットデータの下位N/2ビットをLとして、前記U1と前記U2との論理和と、前記Lとを連結し、当該連結されたNビットデータを前記作業レジスタに格納する命令であることが好ましい。
【0016】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタY3を右に1ビットシフトして前記出力演算レジスタY3に格納し、追い出される前記出力演算レジスタY3の最下位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+1の場合には、前記出力演算レジスタY2を右に1ビットシフトして前記出力演算レジスタY2に格納し、追い出される前記出力演算レジスタY2の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+2の場合には、前記出力演算レジスタY1を右に1ビットシフトして前記出力演算レジスタY1に格納し、追い出される前記出力演算レジスタY1の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+3の場合には、前記出力演算レジスタY0を右に1ビットシフトして前記出力演算レジスタY0に格納し、追い出される前記出力演算レジスタY0の最下位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることが好ましい。
【0017】
前記エミュレーション命令は、
前記出力演算レジスタY3を右に1ビットシフトして前記出力演算レジスタY3に格納するとき、前記出力演算レジスタY3の最上位ビットに0または前記条件コードレジスタの値を格納し、
前記出力演算レジスタY2を右に1ビットシフトして前記出力演算レジスタY2に格納するとき、前記出力演算レジスタY2の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタY1を右に1ビットシフトして前記出力演算レジスタY1に格納するとき、前記出力演算レジスタY1の最上位ビットに前記条件コードレジスタの値を格納し、
前記出力演算レジスタY0を右に1ビットシフトして前記出力演算レジスタY0に格納するとき、前記出力演算レジスタY0の最上位ビットに前記条件コードレジスタの値を格納する命令であることが好ましい。
【0018】
前記演算装置は、
メモリからのデータ転送を行なうことなく、前記演算ユニットが演算する回数をカウントし、当該カウント数を格納する演算回数カウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記演算回数カウンタが初期値の場合には、前記出力演算レジスタY0を左に1ビットシフトして前記出力演算レジスタY0に格納し、追い出される前記出力演算レジスタY0の最上位ビットを前記条件コードレジスタに格納し、前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+1の場合には、前記出力演算レジスタY1を左に1ビットシフトして前記出力演算レジスタY1に格納し、追い出される前記出力演算レジスタY1の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+2の場合には、前記出力演算レジスタY2を左に1ビットシフトして前記出力演算レジスタY2に格納し、追い出される前記出力演算レジスタY2の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、前記演算回数カウンタに1を加え、
前記演算回数カウンタが初期値+3の場合には、前記出力演算レジスタY3を左に1ビットシフトして前記出力演算レジスタY3に格納し、追い出される前記出力演算レジスタY3の最上位ビットを前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることが好ましい。
【0019】
前記エミュレーション命令は、
前記出力演算レジスタY0を左に1ビットシフトして前記出力演算レジスタY0に格納するとき、前記出力演算レジスタY0の最下位ビットには0または前記条件コードレジスタの値を格納し、
前記出力演算レジスタY1を左に1ビットシフトして前記出力演算レジスタY1に格納するとき、前記出力演算レジスタY1の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタY2を左に1ビットシフトして前記出力演算レジスタY2に格納するとき、前記出力演算レジスタY2の最下位ビットには前記条件コードレジスタの値を格納し、
前記出力演算レジスタY3を左に1ビットシフトして前記出力演算レジスタY3に格納するとき、前記出力演算レジスタY3の最下位ビットには前記条件コードレジスタの値を格納する命令であることが好ましい。
【0020】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位N/2ビットが第1の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第2の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの下位N/2ビットとの論理和を求め、
当該論理和の結果がAll-1のとき、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がAll-1でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第3の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの下位N/2ビットとの論理積を求め、
当該論理積の結果がAll-0のとき、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がAll-0でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第4の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの下位N/2ビットとの排他論理和を求め、
当該排他論理和の結果がAll-0のとき、前記オペランドの次アドレスに、前記入力演算レジスタXの下位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がAll-0のとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加える命令であることが好ましい。
【0021】
前記演算装置は、前記演算ユニットが次に実行すべき命令のアドレスを格納するプログラムカウンタをさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるオペランドの上位N/2ビットが第1の値の場合には、前記オペランドの次アドレスに、前記入力演算レジスタXの上位N/2ビットの値をQ倍した値を加え、新たなアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第2の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの上位N/2ビットとの論理和を求め、
当該論理和の結果がAll-1のとき、前記オペランドの次アドレスにQを加えたアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理和の結果がAll-1でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第3の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの上位N/2ビットとの論理積を求め、
当該論理積の結果がAll-0のとき、前記オペランドの次アドレスにQを加えたアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記論理積の結果がAll-0でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記オペランドの上位N/2ビットが第4の値の場合には、前記オペランドの下位N/2ビットと前記入力演算レジスタXの上位N/2ビットとの排他論理和を求め、
当該排他論理和の結果がAll-0のとき、前記オペランドの次アドレスにQを加えたアドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加え、
前記排他論理和の結果がAll-0でないとき、前記オペランドの次アドレスから取得したQバイトの値の一部または全部を前記プログラムカウンタに加える命令であることが好ましい。
【0022】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるNビットのオフセット値を用いて、前記メモリから複数のNビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタY0と前記メモリバス上のNビットデータD0とを加算して前記出力演算レジスタY0に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+1かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY1と前記メモリバス上のNビットデータD1と前記条件コードレジスタとを加算して前記出力演算レジスタY1に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+2かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY2と前記メモリバス上のNビットデータD2と前記条件コードレジスタとを加算して前記出力演算レジスタY2に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+3かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY3と前記メモリバス上のNビットデータD3と前記条件コードレジスタを加算して前記出力演算レジスタY3に格納し、桁上げ信号を前記条件コードレジスタに格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることが好ましい。
【0023】
前記演算装置は、メモリからのバースト転送が開始すると、当該バースト転送開始後、前記メモリから到着するデータブロックをカウントし、当該カウント数を格納するレディカウンタと、
4つの条件コードフラグである、ネガティブ、ゼロ、キャリーおよびオーバフローを格納する条件コードレジスタと
をさらに備え、
前記エミュレーション命令は、
前記記憶ユニットに含まれるNビットのオフセット値を用いて、前記メモリから複数のNビットデータを取得し、
前記レディカウンタが初期値かつメモリバス上に前記メモリから到着した有効なデータがあることを示す信号であるデータレディ信号がオンの場合には、前記出力演算レジスタY0とメモリバス上のNビットデータD0とを論理演算して前記出力演算レジスタY0に格納し、前記出力演算レジスタY0に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+1かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY1と前記メモリバス上のNビットデータD1とを論理演算して前記出力演算レジスタY1に格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY1に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+2かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY2と前記メモリバス上のNビットデータD2とを論理演算して前記出力演算レジスタY2に格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY2に格納される値が0であるときに前記条件コードレジスタに1をセットし、
前記レディカウンタが初期値+3かつ前記データレディ信号がオンの場合には、前記出力演算レジスタY3と前記メモリバス上のNビットデータD3とを論理演算して前記出力演算レジスタY3に格納し、前記条件コードレジスタの値が1かつ前記出力演算レジスタY3に格納される値が0であるときに前記条件コードレジスタに1をセットする命令であることが好ましい。
【発明の効果】
【0024】
本発明は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術を提供することができるという効果を奏する。
【図面の簡単な説明】
【0025】
【図1】本発明の一実施形態に係る演算装置の概略構成を示すブロック図である。
【図2】マルチプレックス命令の概略手順を示すフローチャートである。
【図3】ロードマージLower命令の概略手順を示すフローチャートである。
【図4】ロードマージUpper命令の概略手順を示すフローチャートである。
【図5】多ビット長右1ビットシフト命令の概略手順を示すフローチャートである。
【図6】多ビット長左1ビットシフト命令の概略手順を示すフローチャートである。
【図7】第1のテーブル分岐命令の概略手順を示すフローチャートである。
【図8】第2のテーブル分岐命令の概略手順を示すフローチャートである。
【図9】多ビット長加算命令の概略手順を示すフローチャートである。
【図10】多ビット長論理積命令の概略手順を示すフローチャートである。
【発明を実施するための形態】
【0026】
以下、本発明の実施の形態について、詳細に説明する。

【0027】
(本発明の意義)
従来の8ビットコンピュータ(MC6502やZ80等)や、4ビットコンピュータ(FERICA)では、32ビットのデータを前提とするプログラムを実用的速度でエミュレートすることが極めて困難である。特に、32ビット幅の命令をデコードしたり、32ビット幅のデータを読み書きしたりする際に多くの時間を要する。このため、特に、デコードやデータの読み書きに関して、従来の8ビットコンピュータが備えていない機能を追加し、不要な機能を削除することにより、エミュレーションに最適な8ビットコンピュータを構成しなければならない。

【0028】
例えば8ビットを演算の基本単位とする極めて小規模のハードウェアによりCPUを構成する場合、メモリアクセスのためのアドレスバス幅は16ビット程度、データバス幅は8ビット程度とするのが一般的である。

【0029】
32ビットコンピュータのエミュレーションに特化する場合、アドレスバスは少なくとも24ビット(記憶空間では16MB相当)が必要である。単純にアドレスバス幅を増加するとピン数増加によるハードウェア量の増加を招くため、24ビットのアドレスバスと8ビットのデータバスのピンを共有し、24ビットの信号線を共用するのが効果的である。

【0030】
同様に、データバスも32ビット幅があれば32ビットコンピュータのエミュレーションを高速に実行することができる。しかし、CPU内部が8ビット構成であるため、データバスの拡張はあまり効果がない。むしろ、8ビットのデータ転送を連続させるほうが、ハードウェアを効率的に使用できる。

【0031】
そこで、メモリを参照する場合に、まず、24ビットにアドレス情報を載せ、引続き8ビットを複数回駆動するメモリバスサイクルを基本とするのが最適である。本発明は、このようなバスサイクルに適合し、かつ、エミュレーションに特化した後述の命令を備えるハードウェア構成方式とするものである。

【0032】
当然のことながら、本発明は、上述したような、8ビット構成のコンピュータを用いて、32ビットのデータを前提とするプログラムをエミュレートすることに好適なものに限られるものではない。本発明は、要は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術に好適なものである。

【0033】
なお、以下では、8ビット構成のコンピュータを用いて、32ビットのデータを前提とするプログラムをエミュレートする実施形態を例として説明する。

【0034】
(演算装置の構成)
図1は、本発明の一実施形態に係る演算装置の概略構成を示すブロック図である。図1に示すように、本発明の一実施形態に係る演算装置100は、演算ユニット10と、作業レジスタ12と、入力演算レジスタ群13と、出力演算レジスタ群14と、プログラムカウンタ15と、演算回数カウンタ16と、条件コードレジスタ17と、レディカウンタ18と、エミュレーション命令記憶ユニット(記憶ユニット)19と、メモリバスアドレスレジスタ20と、メモリバスデータレジスタ21とを備えている。

【0035】
演算装置100は、メモリバス(図示省略)を介してメモリ(図示省略)に接続されており、メモリバスを用いて、メモリとの間におけるデータ転送を実行する。メモリ内のアドレスを指定するアドレス信号を搬送するアドレスバスと、メモリから読み出されたデータを搬送するデータバスとは、メモリバスを共用する。具体的には、アドレスバスとデータバスとは時分割でメモリバスを共用する。

【0036】
なお、演算装置100は、さらに、レジスタ番号指定レジスタ11を備えていてもよい。この場合、演算装置100は、エミュレーション命令記憶ユニット19から読み出された命令に含まれる、後述のオペランドの値及びオフセット値等を、一旦、レジスタ番号指定レジスタ11に格納し、レジスタ番号指定レジスタ11から、それらオペランドの値及びオフセット値等を読み出しても構わない。

【0037】
入力演算レジスタ群13は、演算レジスタX0、演算レジスタX1、演算レジスタX2及び演算レジスタX3を含んでおり、出力演算レジスタ群14は、演算レジスタY0、演算レジスタY1、演算レジスタY2及び演算レジスタY3を含んでいる。

【0038】
演算ユニット10は、エミュレーション命令記憶ユニット19に記憶されている複数のエミュレーション命令の各々を読み出し、エミュレーションを実現する。

【0039】
作業レジスタ12は、演算ユニット10の演算結果を一時的に格納するレジスタである。

【0040】
入力演算レジスタ群13は、演算ユニット10に入力されるデータを格納するレジスタ群であり、出力演算レジスタ群14は、演算ユニット10の演算結果を格納するレジスタ群である。

【0041】
プログラムカウンタ15は、演算ユニット10が次に実行すべき命令のアドレスを格納するレジスタであり、演算回数カウンタ16は、メモリバスを用いたメモリからのデータ転送を行なうことなく、演算ユニット10が演算する回数をカウントし、当該カウント数を格納するレジスタである。

【0042】
条件コードレジスタ17は、4つの条件コードフラグ(ネガティブ、ゼロ、キャリー、オーバフロー)を格納するレジスタである。

【0043】
レディカウンタ18は、メモリからのバースト転送が開始すると、バースト転送開始後、メモリから到着するデータのかたまり(ブロック)をカウントし、当該カウント数を格納するレジスタである。すなわち、レディカウンタ18は、バースト転送開始から何番目に到着したデータであるかを示すカウンタである。メモリからのバースト転送は、バースト転送信号23を用いて、制御される。

【0044】
メモリバスアドレスレジスタ20は、メモリバスを用いて、演算装置100とメモリとの間において搬送されるアドレス信号を格納するレジスタである。メモリバスデータレジスタ21は、メモリバスを用いて、演算装置100とメモリとの間において搬送されるデータを格納するレジスタである。

【0045】
なお、演算装置100は、上述したバースト転送信号23に加え、以下の信号も、演算ユニット10の演算に用いている。

【0046】
識別信号22は、メモリバス上で、アドレス信号が搬送されているか、または、データが搬送されているか、を識別する信号である。上述したように、メモリバスは、アドレス信号を搬送するアドレスバスと、データを搬送するデータバスと、に共用されている。演算装置100は、この識別信号22を用いて、メモリバス上で、アドレス信号が搬送されているか、または、データが搬送されているか、を認識することができる。

【0047】
データレディ信号24は、メモリバス上にメモリから到着した有効なデータがあることを示す信号である。

【0048】
桁上げ信号25は、演算ユニット10の演算の結果、桁上げが発生した場合、その桁上げを表わす信号である。

【0049】
(エミュレーション命令)
エミュレーション命令記憶ユニット19は、以下の複数のエミュレーション命令を記憶している。

【0050】
(マルチプレックス命令)
エミュレーション命令記憶ユニット19には8ビットオペランドの値(S)が書き込まれている。演算ユニット10は、エミュレーション命令記憶ユニット19からマルチプレックス命令を読み出し、そのマルチプレックス命令を実行する。図2は、マルチプレックス命令の概略手順を示すフローチャートである。

【0051】
図2に示すように、演算ユニット10は、エミュレーション命令記憶ユニット19に書き込まれている8ビットオペランドの値Sを読み出す(S1)。この読み出したオペランドの値Sを用いて、演算ユニット10は、入力演算レジスタX1を構成する8ビットのうち、下位(8-S)ビットを取り出す(S2)。また、演算ユニット10は、上述のオペランドの値Sを用いて、入力演算ユニットX0を構成する8ビットのうち、上位Sビットを取り出す(S3)。

【0052】
演算ユニット10は、このように取り出した、入力演算レジスタX1の下位(8-S)ビットと入力演算レジスタX0の上位Sビットとを連結する(S4)。そして、演算ユニット10は、この連結された8ビットを作業レジスタ12に格納する(S5)。

【0053】
(ロードマージLower命令)
エミュレーション命令記憶ユニット19には8ビットのオフセット値が書き込まれている。演算ユニット10は、エミュレーション命令記憶ユニット19からロードマージLower命令を読み出し、そのロードマージLower命令を実行する。図3は、ロードマージLower命令の概略手順を示すフローチャートである。

【0054】
図3に示すように、演算ユニット10は、エミュレーション命令記憶ユニット19に書き込まれている8ビットのオフセット値を読み出す(S11)。この読み出したオフセット値を用いて、演算ユニット10は、メモリから1バイトデータ(D)を取得する。そして、演算ユニット10は、Dの上位4ビットをUとする(S12)。

【0055】
さらに、演算ユニット10は、Dの下位4ビットと作業レジスタ12の下位4ビットの反転値との論理積をL1(S13)、および、作業レジスタ12の上位4ビットと作業レジスタ12の下位4ビットとの論理積をL2とする(S14)。

【0056】
そして、演算ユニット10は、Uと、L1とL2との論理和とを連結し(S15)、この連結された8ビットを作業レジスタ12に格納する(S16)。

【0057】
(ロードマージUpper命令)
エミュレーション命令記憶ユニット19には8ビットのオフセット値が書き込まれている。演算ユニット10は、エミュレーション命令記憶ユニット19からロードマージUpper命令を読み出し、そのロードマージUpper命令を実行する。図4は、ロードマージUpper命令の概略手順を示すフローチャートである。

【0058】
図4に示すように、演算ユニット10は、エミュレーション命令記憶ユニット19に書き込まれている8ビットのオフセット値を読み出す(S21)。この読み出したオフセット値を用いて、演算ユニット10は、メモリから1バイトデータ(D)を取得する。そして、演算ユニット10は、Dの下位4ビットをLとする(S22)。

【0059】
さらに、演算ユニット10は、Dの上位4ビットと作業レジスタ12の下位4ビットの反転値との論理積をU1(S23)、および、作業レジスタ12の上位4ビットと作業レジスタ12の下位4ビットとの論理積をU2とする(S24)。

【0060】
そして、演算ユニット10は、U1とU2との論理和と、Lとを連結し(S25)、この連結された8ビットを作業レジスタ12に格納する(S26)。

【0061】
(多ビット長右1ビットシフト命令)
演算ユニット10は、出力演算レジスタ群14の各演算レジスタY3、Y2、Y1、Y0の内容を右に1ビットシフトする多ビット長右1ビットシフト命令をエミュレーション命令記憶ユニット19から読み出し、その多ビット長右1ビットシフト命令を実行する。図5は、多ビット長右1ビットシフト命令の概略手順を示すフローチャートである。

【0062】
図5に示すように、演算回数カウンタ16が初期値の場合には、演算レジスタY3を右に1ビットシフトして演算レジスタY3に格納する(S31)。

【0063】
このシフトにおいて、演算レジスタY3の最上位ビットには0または条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY3から追い出される最下位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0064】
そして、演算レジスタY3に格納される値が0である場合には、条件コードレジスタ17の条件コードZに1をセットし、演算回数カウンタ16に1を加える。

【0065】
演算回数カウンタ16が初期値+1の場合には、演算レジスタY2を右に1ビットシフトして演算レジスタY2に格納する(S32)。

【0066】
このシフトにおいて、演算レジスタY2の最上位ビットには条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY2から追い出される最下位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0067】
そして、条件コードレジスタ17の条件コードZの値が1であり、かつ、演算レジスタY2に格納される値が0である場合には、条件コードレジスタ17の条件コードZに1をセットし、演算回数カウンタ16に1を加える。

【0068】
演算回数カウンタ16が初期値+2の場合には、演算レジスタY1を右に1ビットシフトして演算レジスタY1に格納する(S33)。

【0069】
このシフトにおいて、演算レジスタY1の最上位ビットには条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY1から追い出される最下位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0070】
そして、条件コードレジスタ17の条件コードZの値が1であり、かつ、演算レジスタY1に格納される値が0である場合に条件コードレジスタ17の条件コードZに1をセットし、演算回数カウンタ16に1を加える。

【0071】
演算回数カウンタ16が初期値+3の場合には、演算レジスタY0を右に1ビットシフトして演算レジスタY0に格納する(S34)。

【0072】
このシフトにおいて、演算レジスタY0の最上位ビットには条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY0から追い出される最下位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0073】
そして、条件コードレジスタ17の条件コードZの値が1であり、かつ、演算レジスタY0に格納される値が0である場合には、条件コードレジスタ17の条件コードZに1をセットする。

【0074】
(多ビット長左1ビットシフト命令)
演算ユニット10は、出力演算レジスタ群14の各演算レジスタY3、Y2、Y1、Y0の内容を左に1ビットシフトする多ビット長左1ビットシフト命令をエミュレーション命令記憶ユニット19から読み出し、その多ビット長左1ビットシフト命令を実行する。図6は、多ビット長左1ビットシフト命令の概略手順を示すフローチャートである。

【0075】
図6に示すように、演算回数カウンタ16が初期値の場合には、演算レジスタY0を左に1ビットシフトして演算レジスタY0に格納する(S41)。

【0076】
このシフトにおいて、演算レジスタY0の最下位ビットには0または条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY0から追い出される最上位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0077】
そして、演算レジスタY0に格納される値が0である場合には、条件コードレジスタ17の条件コードZに1をセットし、演算回数カウンタ16に1を加える。

【0078】
演算回数カウンタ16が初期値+1の場合には、演算レジスタY1を左に1ビットシフトして演算レジスタY1に格納する(S42)。

【0079】
このシフトにおいて、演算レジスタY1の最下位ビットには条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY1から追い出される最上位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0080】
そして、条件コードレジスタ17の条件コードZの値が1であり、かつ、演算レジスタY1に格納される値が0である場合には、条件コードレジスタ17の条件コードZに1をセットし、演算回数カウンタ16に1を加える。

【0081】
演算回数カウンタ16が初期値+2の場合には、演算レジスタY2を左に1ビットシフトして演算レジスタY2に格納する(S43)。

【0082】
このシフトにおいて、演算レジスタY2の最下位ビットには条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY2から追い出される最上位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0083】
そして、条件コードレジスタ17の条件コードZの値が1であり、かつ、演算レジスタY2に格納される値が0である場合に条件コードレジスタ17の条件コードZに1をセットし、演算回数カウンタ16に1を加える。

【0084】
演算回数カウンタ16が初期値+3の場合には、演算レジスタY3を左に1ビットシフトして演算レジスタY3に格納する(S44)。

【0085】
このシフトにおいて、演算レジスタY3の最下位ビットには条件コードレジスタ17の条件コードCの値を格納する。また、演算レジスタY3から追い出される最上位ビットを条件コードレジスタ17の条件コードCの値として格納する。

【0086】
そして、条件コードレジスタ17の条件コードZの値が1であり、かつ、演算レジスタY3に格納される値が0である場合には、条件コードレジスタ17の条件コードZに1をセットする。

【0087】
(第1のテーブル分岐命令)
図7は、第1のテーブル分岐命令の概略手順を示すフローチャートである。図7に示すように、エミュレーション命令記憶ユニット19には8ビットオペランドの値(M)が書き込まれている。演算ユニット10は、エミュレーション命令記憶ユニット19から第1のテーブル分岐命令を読み出し(S51)、その第1のテーブル分岐命令を実行する。

【0088】
この第1のテーブル分岐命令は、オペランドの次アドレスに、演算レジスタX0、演算レジスタX1、演算レジスタX2及び演算レジスタX3のいずれかの下位4ビットの値を1倍または2倍した値を加え、新たなアドレスから取得した1バイトまたは2バイトの値の一部または全部をプログラムカウンタ15に加える命令である。また、4ビット(16エントリ)分のオフセットを全て用意することなく、テーブルサイズを縮小するために、8ビットオペランドの値(M)を使用する。Mの上位4ビットの値が0の場合、演算レジスタX0、演算レジスタX1、演算レジスタX2及び演算レジスタX3のいずれかの下位4ビットの値をそのまま使用する(S52)。ここでは、演算レジスタX0を使用するとする。

【0089】
Mの上位4ビットの値が1の場合、Mの下位4ビットと演算レジスタX0の下位4ビットとの論理和を求め(S53)、結果がAll-1の場合は、第2番目のオフセットを使用し、結果がAll-1でない場合は、第1番目のオフセットを使用する。

【0090】
ここで、第1番目のオフセットは、エミュレーション命令記憶ユニット19に書き込まれている8ビットオペランドの次アドレスに配置されるメモリ上の値である。すなわち、第1のテーブル分岐命令に引き続くデータである。また、第2番目のオフセットは、第1番目のオフセットの次アドレスに配置されるメモリ上の値である。

【0091】
Mの上位4ビットの値が2の場合、Mの下位4ビットと演算レジスタX0の下位4ビットとの論理積を求め(S54)、結果がAll-0の場合は、第2番目のオフセットを使用し、結果がAll-0でない場合は、第1番目のオフセットを使用する。

【0092】
Mの上位4ビットの値が3の場合、Mの下位4ビットと演算レジスタX0の下位4ビットとの排他論理和を求め(S55)、結果がAll-0の場合は、第2番目のオフセットを使用し、結果がAll-0でない場合は、第1番目のオフセットを使用する。

【0093】
このようにして、Mの上位4ビットの値を適切に設定することにより、テーブルエントリ数を16から2に縮退できる。

【0094】
(第2のテーブル分岐命令)
図8は、第2のテーブル分岐命令の概略手順を示すフローチャートである。図8に示すように、エミュレーション命令記憶ユニット19には8ビットオペランドの値(M)が書き込まれている。演算ユニット10は、エミュレーション命令記憶ユニット19から第2のテーブル分岐命令を読み出し(S61)、その第2のテーブル分岐命令を実行する。

【0095】
この第2のテーブル分岐命令は、オペランドの次アドレスに、演算レジスタX0、演算レジスタX1、演算レジスタX2及び演算レジスタX3のいずれかの上位4ビットの値を1倍または2倍した値を加え、新たなアドレスから取得した1バイトまたは2バイトの値の一部または全部をプログラムカウンタ15に加える命令である。また、4ビット(16エントリ)分のオフセットを全て用意することなく、テーブルサイズを縮小するために、8ビットオペランドの値(M)を使用する。Mの上位4ビットの値が0の場合、演算レジスタX0、演算レジスタX1、演算レジスタX2及び演算レジスタX3のいずれかの下位4ビットの値をそのまま使用する(S62)。ここでは、演算レジスタX0を使用するとする。

【0096】
Mの上位4ビットの値が1の場合、Mの下位4ビットと演算レジスタX0の上位4ビットとの論理和を求め(S63)、結果がAll-1の場合は、第2番目のオフセットを使用し、結果がAll-1でない場合は、第1番目のオフセットを使用する。

【0097】
Mの上位4ビットの値が2の場合、Mの下位4ビットと演算レジスタX0の上位4ビットとの論理積を求め(S64)、結果がAll-0の場合は、第2番目のオフセットを使用し、結果がAll-0でない場合は、第1番目のオフセットを使用する。

【0098】
Mの上位4ビットの値が3の場合、Mの下位4ビットと演算レジスタX0の上位4ビットとの排他論理和を求め(S65)、結果がAll-0の場合は、第2番目のオフセットを使用し、結果がAll-0でない場合は、第1番目のオフセットを使用する。

【0099】
このようにして、Mの上位4ビットの値を適切に設定することにより、テーブルエントリ数を16から2に縮退できる。

【0100】
(多ビット長加算命令)
演算ユニット10は、出力演算レジスタ群14の演算レジスタY3、Y2、Y1、Y0の内容に、オペランドで示されるメモリアドレスの内容M3、M2、M1、M0を加算して得られる32ビットの値を演算レジスタY3、Y2、Y1、Y0に格納するとともに、条件コードレジスタ17の条件コードN(ネガティブ)、Z(ゼロ)、V(オーバフロー)、C(キャリー)を更新する多ビット長加算命令をエミュレーション命令記憶ユニット19から読み出し、その多ビット長加算命令を実行する。図9は、多ビット長加算命令の概略手順を示すフローチャートである。

【0101】
エミュレーション命令記憶ユニット19には8ビットのオフセット値(すなわち、オペランドで示されるメモリアドレス)が書き込まれている。

【0102】
図9に示すように、演算ユニット10は、エミュレーション命令記憶ユニット19に書き込まれている8ビットのオフセット値を読み出す(S71)。この読み出したオフセット値を用いて、演算ユニット10は、メモリから複数の8ビットデータ(D3、D2、D1、D0)を取得する(S72)。そして、演算ユニット10は、演算レジスタY3、Y2、Y1、Y0の内容に、複数の8ビットデータ(D3、D2、D1、D0)を加算する。

【0103】
具体的には、レディカウンタ18が初期値、かつ、データレディ信号24がオンの場合には、演算レジスタY0とD0とを加算して(S73)、演算レジスタY0に格納し、桁上げ信号25を条件コードレジスタ17の条件コードCに格納する。そして、演算レジスタY0に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0104】
なお、レディカウンタ18は、8ビットデータ(D3、D2、D1、D0)のうちのいずれが転送されてきたかを表わすものである。

【0105】
レディカウンタ18が初期値+1、かつ、データレディ信号24がオンの場合には、演算レジスタY1とD1と条件コードレジスタ17の条件コードCとを加算して(S74)、演算レジスタY1に格納し、桁上げ信号25を条件コードレジスタ17に格納する。そして、条件コードレジスタ17の条件コードレジスタZの値が1、かつ、演算レジスタY1に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0106】
レディカウンタが初期値+2、かつ、データレディ信号24がオンの場合には、演算レジスタY2とD2と条件コードCとを加算して(S75)、演算レジスタY2に格納し、桁上げ信号25を条件コードレジスタ17に格納する。そして、条件コードレジスタ17の条件コードレジスタZの値が1、かつ、演算レジスタY2に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0107】
レディカウンタが初期値+3、かつ、データレディ信号24がオンの場合には、演算レジスタY3とD3と条件コードCとを加算して(S76)、演算レジスタY3に格納し、桁上げ信号25を条件コードレジスタ17に格納する。そして、条件コードレジスタZの値が1、かつ、演算レジスタY3に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0108】
(多ビット長論理積命令)
演算ユニット10は、出力演算レジスタ群14の演算レジスタY3、Y2、Y1、Y0の内容に、オペランドで示されるメモリアドレスの内容M3、M2、M1、M0を論理演算して得られる32ビットの値をY3、Y2、Y1、Y0に格納するとともに、条件コードレジスタ17の条件コードN(ネガティブ)、Z(ゼロ)、V(オーバフロー)、C(キャリー)を更新する多ビット長論理積命令をエミュレーション命令記憶ユニット19から読み出し、その多ビット長論理積命令を実行する。図10は、多ビット長論理積命令の概略手順を示すフローチャートである。

【0109】
エミュレーション命令記憶ユニット19には8ビットのオフセット値が書き込まれている。

【0110】
図10に示すように、演算ユニット10は、エミュレーション命令記憶ユニット19に書き込まれている8ビットのオフセット値を読み出す(S81)。この読み出したオフセット値を用いて、演算ユニット10は、メモリから複数の8ビットデータ(D3、D2、D1、D0)を取得する(S82)。そして、演算ユニット10は、演算レジスタY3、Y2、Y1、Y0の内容に、複数の8ビットデータ(D3、D2、D1、D0)を論理演算する。

【0111】
具体的には、レディカウンタ18が初期値、かつ、データレディ信号24がオンの場合には、演算レジスタY0とD0とを論理演算して(S83)、演算レジスタY0に格納する。そして、演算レジスタY0に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0112】
レディカウンタ18が初期値+1、かつ、データレディ信号24がオンの場合には、演算レジスタY1とD1とを論理演算して(S84)、演算レジスタY1に格納する。そして、条件コードレジスタ17の条件コードレジスタZの値が1、かつ、演算レジスタY1に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0113】
レディカウンタ18が初期値+2、かつ、データレディ信号24がオンの場合には、演算レジスタY2とD2とを論理演算して(S85)、演算レジスタY2に格納する。そして、条件コードレジスタ17の条件コードレジスタZの値が1、かつ、演算レジスタY2に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0114】
レディカウンタ18が初期値+3、かつ、データレディ信号24がオンの場合には、演算レジスタY3とD3とを論理演算して(S86)、演算レジスタY3に格納する。そして、条件コードレジスタ17の条件コードレジスタZの値が1、かつ、演算レジスタY3に格納される値が0である場合には、条件コードレジスタ17の条件コードレジスタZに1をセットする。

【0115】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【0116】
本発明は、狭ビット幅の演算装置を用いて広ビット幅の演算装置をエミュレート可能なエミュレーション技術に利用することができる。
【符号の説明】
【0117】
10 演算ユニット
12 作業レジスタ
13 入力演算レジスタ群
14 出力演算レジスタ群
15 プログラムカウンタ
16 演算回数カウンタ
17 条件コードレジスタ
18 レディカウンタ
19 エミュレーション命令記憶ユニット(記憶ユニット)
100 演算装置
図面
【図1】
0
【図2】
1
【図3】
2
【図4】
3
【図5】
4
【図6】
5
【図7】
6
【図8】
7
【図9】
8
【図10】
9