以下、図面を用いて実施形態を説明する。
図1は、シフト演算回路の一実施形態を示す。図1に示すシフト演算回路100は、シフト制御回路10、11、シフト回路20a、20b、バッファ回路30、31およびビット選択回路40を有する。
シフト制御回路10は、シフト回路20aのシフト量を示す7ビットのシフト量信号SAH[6:0]を受け、シフト量信号SAH[6:0]の論理をモード信号SIMDに応じて変更し、シフト量信号SAH1[6:0]として出力する。なお、モード信号SIMDは、図2に示す演算処理装置200が、SIMD命令に基づいてSIMD演算を実行するSIMDモード中に論理1に設定され、通常の命令に基づいて単一の演算を実行する通常モード中に論理0に設定される。通常モードは、第1モードの一例であり、SIMDモードは、第2モードの一例である。
シフト制御回路11は、シフト回路20bのシフト量を示す7ビットのシフト量信号SAL[6:0]を受け、シフト量信号SAL[6:0]の論理をモード信号SIMDに応じて変更し、シフト量信号SAL1[6:0]として出力する。なお、シフト制御回路10、11は、1つのシフト制御回路としてシフト演算回路100に設けられてもよい。以下では、シフト量信号SAH[6:0]、SAL[6:0]、SAH1[6:0]、SAL1[6:0]は、ビット番号を省略して、シフト量信号SAH、SAL、SAH1、SAL1とも称される。
モード信号SIMDが通常モードを示す場合、シフト量信号SAH[6:0]、SAL[6:0]は、互いに同じ値に設定される。モード信号SIMDがSIMDモードを示す場合、シフト量信号SAH[6:0]、SAL[6:0]は、互いに独立して設定される。
例えば、SIMDモード中、シフト量信号SAH1の最上位ビットSAH1[6]は論理0に設定され、シフト量信号SAL1の最上位ビットSAL1[6]は論理1に設定される。最上位ビットSAH1[6]が論理0に設定されたシフト量信号SAH1は、”0
”から”63”のいずれかを示し、最上位ビットSAL1[6]が論理1に設定されたシフト量信号SAL1は、”64”から”127”のいずれかを示す。換言すれば、SIMDモード中、シフト量信号SAH[6:0]、SAL[6:0]は、内部バスRH[191:33]、RL[159:1]において、ビット番号が重複しないシフト範囲を示すシフト量信号SAH1[6:0]、SAL1[6:0]に変換される。シフト制御回路10、11の例は、図4に示される。
シフト回路20aは、64ビットの入力データD[63:0]を分割した32ビットの分割データD[63:32]と、シフト量信号SAH1[6:0]とを受ける。シフト回路20aは、内部バスRH[191:33]において、シフト量信号SAH1[6:0]が示すシフト量を基準のビット位置RH[191]からシフトさせた範囲に分割データD[63:32]を出力する。以下では、入力データD[63:0]は、データD[63:0]とも称され、分割データD[63:32]は、データD[63:32]とも称される。また、内部バスRH[191:33]に伝達されるデータは、データRH[191:33]とも称される。
シフト回路20aは、データD[63:32]を、シフト量信号SAH1の値に応じて、上位側から下位側に向けてビットシフトし、159ビットのデータRH[191:33]として出力する。すなわち、シフト回路20aは、データD[63:32]をシフト量信号SAH1の値(0ビットから127ビットのいずれか)だけ右シフトする。シフト回路20aは、159ビットのデータRH[191:33]のうち、データD[63:32]として出力する32ビットを除く127ビットを論理0に設定する機能を有する。
シフト回路20bは、入力データD[63:0]を分割した32ビットの分割データD[31:0]と、シフト量信号SAL1[6:0]とを受ける。シフト回路20bは、内部バスRL[159:1]において、シフト量信号SAL1[6:0]が示すシフト量を基準のビット位置RL[159]からシフトさせた範囲に分割データD[31:0]を出力する。以下では、分割データD[31:0]は、データD[31:0]とも称され、内部バスRL[159:1]に伝達されるデータは、データRL[159:1]とも称される。
シフト回路20bは、データD[31:0]を、シフト量信号SAL1の値に応じて、上位側から下位側に向けてビットシフトし、159ビットのデータRL[159:1]として出力する。すなわち、シフト回路20bは、データD[31:0]をシフト量信号SAL1の値(0ビットから127ビットのいずれか)だけ右シフトする。シフト回路20bは、159ビットのデータRL[159:1]のうち、データD[31:0]として出力する32ビットを除く127ビットを論理0に設定する機能を有する。
シフト回路20aに接続される内部バスRH[191:33]のうちのビットRH[159:33]と、シフト回路20bに接続される内部バスRL[159:1]のうちのビットRL[159:33]とは、ビット番号が互いに重複する。一方、シフト回路20bにおける基準のビット位置RL[159]は、シフト回路20aにおける基準のビット位置RH[191]に対して、分割データD[63:32]のビット幅分ずらして割り当てられる。これにより、図6で説明するように、通常モードにおいて、互いに異なるシフト回路20a、20bに供給される分割データD[63:32]、D[31:0]を連続するデータD[63:0]として出力バスR[191:1]に出力することができる。以下では、出力バスR[191:1]に伝達されるデータは、データR[191:1]とも称される。
シフト回路20a、20bは、互いに同じ回路であり、回路データ(マクロデータ)は共通である。このため、例えば、シフト回路20aの設計データをシフト回路20bに利用することができ、シフト回路20a、20bを別々に設計する場合に比べてシフト回路20a、20bの設計期間を短縮することができる。
バッファ回路30は、シフト回路20aから出力されるデータRH[191:33]のうち、上位の32ビットのデータRH[191:160]をデータR[191:160]として出力する。すなわち、バッファ回路30は、内部バスRH[191:33]において、内部バスRL[159:1]とビット番号が重複しないビットRH[191:160]に出力されるデータRH[191:160]を出力バス[191:160]に出力する。
バッファ回路31は、シフト回路20bから出力されるデータRL[159:1]のうち、下位の32ビットのデータRL[32:1]をデータR[32:1]として出力する。バッファ回路31は、内部バスRL[159:1]において、RH[191:33]とビット番号が重複しないビットRL[32:1]に出力されるデータRL[32:1]を出力バス[32:1]に出力する。
ビット選択回路40は、シフト回路20aから出力されるデータRH[159:33]とシフト回路20bから出力されるデータRL[159:33]の中から有効なビットを選択し、出力バスR[159:33]に出力する。データR[159:33]のうち、有効なビットは、最小で32ビットであり、最大で64ビットである。以下では、データD[63:0]、RH[191:33]、RL[159:1]、R[191:1]は、ビット番号を省略して、データD、RH、RL、Rとも称される。
そして、シフト演算回路100は、通常モード中、入力されるデータD[63:0]を、シフト量信号SAH、SALの値(同じ論理値)だけ右シフトし、データR[191:1]のいずれか64ビットとして出力する。一方、シフト演算回路100は、SIMDモード中、入力されるデータD[63:32]を、シフト量信号SAHの値だけ右シフトし、データR[191:95]のうちのいずれか32ビットとして出力する。また、シフト演算回路100は、SIMDモード中、入力されるデータD[31:0]を、シフト量信号SALの値だけ右シフトし、データR[95:1]のうちのいずれか32ビットとして出力する。通常モードでのシフト演算回路100の動作の例は、図6に示され、SIMDモードでのシフト演算回路100の動作の例は、図7に示される。
図2は、図1に示すシフト演算回路100が搭載される演算処理装置の一例を示す。演算処理装置200は、命令キャッシュ50、命令バッファ52、デコード部54、リザベーションステーション部56および演算実行部58を有する。演算処理装置200は、CPU等のプロセッサであり、図2では、プロセッサに搭載されるプロセッサコアの一部が示される。
命令キャッシュ50は、例えば、二次キャッシュまたはメインメモリ等から転送される命令を格納する一次命令キャッシュである。命令バッファ52は、命令キャッシュ50から転送される命令を順次保持し、保持した命令をデコード部54に順次出力する。デコード部54は、命令バッファ52から転送される命令を解読し、解読した命令に含まれる命令コードおよびレジスタ番号等をリザベーションステーション部56に投入する。
リザベーションステーション部56は、演算命令を保持する複数のエントリを含むリザベーションステーションRSE(Reservation Station for Execution)を有する。また、リザベーションステーション部56は、ロード命令およびストア命令等のメモリアクセス命令を保持する複数のエントリを含むリザベーションステーションRSA(Reservation Station for Address)を有する。
リザベーションステーションRSEは、エントリに保持した演算命令の依存関係を判定し、判定した依存関係に基づいて、エントリに保持した演算命令の中から実行可能な演算命令を選択する。リザベーションステーションRSEは、選択した演算命令を演算実行部58に投入する。リザベーションステーションRSAは、エントリに保持したメモリアクセス命令の依存関係を判定し、判定した依存関係に基づいて、エントリに保持したメモリアクセス命令の中から実行可能なロード命令またはストア命令を選択する。リザベーションステーションRSAは、選択したロード命令またはストア命令を演算実行部58に投入する。
演算実行部58は、固定小数点演算部60、浮動小数点演算部62、論理演算部64、アドレス演算部66およびレジスタ部68を有する。固定小数点演算部60は、固定小数点数の加算または減算を実行する加算器ADDと、固定小数点数の乗算または除算を実行する乗算器MULとを有する。浮動小数点演算部62は、浮動小数点数の加算または減算を実行する加算器FADDと、浮動小数点数の乗算または除算を実行する乗算器FMULとを有する。また、浮動小数点演算部62は、浮動小数点数の乗算と加算とを実行する乗算加算器FMAとを有する。図1に示すシフト演算回路100は、浮動小数点用の加算器FADDに搭載される。なお、シフト演算回路100は、浮動小数点用の乗算加算器FMAに搭載されてもよい。
例えば、加算器FADD、乗算器FMULおよび乗算加算器FMAは、SIMD演算を実行する機能を有する。SIMD演算では、1つの命令に基づいて複数の演算が並列に実行されるため、SIMD命令の第1オペランドおよび第2オペランドの各々には、演算用の複数のデータが分割して格納される。
論理演算部64は、アンド論理の演算を実行する論理積演算器ANDと、オア論理の演算を実行する論理和演算器ORと、シフト演算を実行するシフト演算器SFTとを有する。アドレス演算部66は、リザベーションステーションRSAから投入されるメモリアクセス命令に基づいて、アクセスアドレスを計算し、計算したアクセスアドレスを図示しないデータキャッシュ等に出力する。
レジスタ部68は、命令で指定される複数の汎用レジスタと、演算結果等を一時的に保持する複数のレジスタ(アップデートバッファ)とを有する。例えば、各レジスタは、64ビットである。
図3は、図2に示す浮動小数点加算器FADDの一例を示す。浮動小数点加算器FADDは、比較器CMP、入れ替えスイッチSW、減算器SUB1、右シフタRSFT、加算器ADD1、リーディングゼロ予測器RZP、正規化シフタNRMSFTおよび加算器ADD2を有する。図1に示すシフト演算回路100は、例えば、右シフタRSFTとして浮動小数点加算器FADDに搭載される。
以下では、通常モードにおける浮動小数点加算器FADDの動作が説明される。図3に示す浮動小数点加算器FADDは、指数EXP1および仮数FRC1を含む64ビットのオペランドOP1と、指数EXP2および仮数FRC2を含む64ビットのオペランドOP2とを加算し、加算結果を示す指数EXPおよび仮数FRCを出力する。オペランドOP1、OP1および加算結果は、図2に示すレジスタ部68の汎用レジスタに保持される。
例えば、IEEE(The Institute of Electrical and Electronics Engineers)754(浮動小数点数演算標準)では、64ビットの浮動小数点数は、1ビットの符号部と11ビットの指数部と52ビットの仮数部とを含む。図2では、符号部(符号ビット)の記載は省略される。また、IEEE754では、浮動小数点数は、正規化された最上位ビットがヒドンビットとして省略されているが、入れ替えスイッチSWの出力では、ヒドンビットが補われているとする。
比較器CMPは、指数EXP1、EXP2の大小を比較し、指数EXP2が指数EXP1より大きい場合、指数EXP1、EXP2を入れ換えるためのスイッチ制御信号SWCを入れ替えスイッチSWに出力する。比較器CMPは、指数EXP1が指数EXP2以上の場合、指数EXP1、EXP2を入れ換えないためのスイッチ制御信号SWCを入れ替えスイッチSWに出力する。減算器SUB1は、入れ替えスイッチSWから出力される指数EXP1、EXP2の差を求め、求めた差を示す差分信号DIFを右シフタRSFTおよび加算器ADD2に出力する。ここで、通常モードにおいて、差分信号DIFの値は、図1に示すシフト量信号SAR[6:0]、SAL[6:0]として、右シフタRSFTに供給される。
右シフタRSFTは、オペランドOP1、OP2のうちの値が小さい方の仮数(FRC1またはFRC2の一方)を差分信号DIFの値だけ右シフトし、加算器ADD1およびリーディングゼロ予測器RZPに出力する。入れ替えスイッチSWから右シフタRSFTに供給される仮数は、図1に示すデータD[63:0]に含まれる。右シフタRSFTの動作により、仮数部FRC1(またはFRC2)の一方の桁が、仮数FRC1(またはFRC2)の他方に合わせられ、桁が合わせられた仮数FRC1、FRC2が加算器ADD1で加算される。なお、SIMD演算を実行するために、右シフタRSFT(すなわち、シフト演算回路100)は、図1に示すように、データD[63:32]、D[31:0]を独立にシフトするシフト回路20a、20bを有する。SIMD演算を実行するSIMDモード時のシフト演算回路100の動作の例は、図7に示される。
加算器ADD1は、桁が合わせられた仮数FRC1、FRC2を加算し、加算結果を正規化シフタNRMSFTに出力する。リーディングゼロ予測器RZPは、桁が合わせられた仮数FRC1、FRC2を用いて、加算器ADD1による加算結果において、上位ビット側に最初に”1”が現れるまでの”0”の数を予測する。そして、リーディングゼロ予測器RZPは、予測した数をシフト量として正規化シフタNSFTおよび加算器ADD2に出力する。
正規化シフタNRMSFTは、リーディングゼロ予測器RZPが予測したシフト量に基づいて、加算器ADD1による加算結果(仮数)をビットシフトすることで、加算結果の上位ビット側に最初に現れる”1”をヒドンビットに設定する。そして、正規化シフタNRMSFTは、正しいヒドンビットを有する仮数FRCを出力する。加算器ADD2は、減算器SUB1からの差分信号DIFの値とシフト量の値とを加算し、加算結果を指数EXPとして出力する。
なお、浮動小数点加算器FADDは、SIMDモード中、オペランドOP1、OP2にそれぞれ含まれる32ビットの浮動小数点数を互いに加算するとともに、オペランドOP1、OP2にそれぞれ含まれる他の32ビットの浮動小数点数を互いに加算する。すなわち、演算処理装置200は、オペランドOP1、OP2に含まれる2組の浮動小数点データを独立に加算するSIMD演算機能を有する。SIMDモード中、浮動小数点加算器FADDの各要素は、2組の浮動小数点データを加算する機能に切り替わるが、回路の詳細は省略される。なお、シフト演算回路100が図2に示す乗算加算器FMAに搭載される場合にも、シフト演算回路100は、図3と同様に、乗算加算器FMAの加算器内に右シフタRSFTとして搭載される。
図4は、図1に示すシフト制御回路10、11の一例を示す。シフト制御回路10は、インバータIVを介してモード信号SIMDを受けるアンド回路ANDと、シフト量信号SAH[5:0]をシフト量信号SAH1[5:0]として出力する複数のバッファBUFとを有する。アンド回路ANDは、通常モード中(SIMD=”0”)、シフト量信号SAHの最上位ビットSAH[6]を、シフト量信号SAH1[6]として出力し、SIMDモード中(SIMD=”1”)、シフト量信号SAH1[6]を”0”に設定する。すなわち、シフト制御回路10は、SIMDモード中、シフト量信号SAH[5:0]に応じて、0ビットから63ビットのシフト量を示すシフト量信号SAH1[6:0]を出力する。
シフト制御回路11は、モード信号SIMDを受けるオア回路ORと、シフト量信号SAL[5:0]をシフト量信号SAL1[5:0]として出力する複数のバッファBUFとを有する。オア回路ORは、通常モード中、シフト量信号SALの最上位ビットSAL[6]を、シフト量信号SAL1[6]として出力し、SIMDモード中、シフト量信号SAL1[6]を”1”に設定する。すなわち、シフト制御回路11は、SIMDモード中、シフト量信号SAH[5:0]に応じて、64ビットから127ビットのシフト量を示すシフト量信号SAL1[6:0]を出力する。
アンド回路ANDとオア回路ORにより、シフト回路20a、20bにそれぞれ出力するシフト量信号SAH1[6:0]、SAL1[6:0]の最上位ビットSAH1[6]、SAL1[6]は、互いに異なる論理に設定される。これにより、SIMDモードにおいて、図7で説明するように、シフト量信号SAH[6:0]とシフト量信号SAL[6:0]とが互いに独立して設定される場合にも、データD[63:32]とデータD[31:0]が衝突することを抑止することができる。
図5は、図1に示すバッファ回路30、31とビット選択回路40の一例を示す。バッファ回路30は、データRH[191:160]をデータR[191:160]として出力する複数のバッファBUFを有する。バッファ回路31は、データRL[32:1]をデータR[32:1]として出力する複数のバッファBUFを有する。
ビット選択回路40は、ビット番号が互いに重複する127ビットのデータRH[159:33]、RL[159:33]の各ビットのオア論理をデータRとして出力する複数のオア回路ORを有する。すなわち、データR[159:33]の各ビットは、データRH[159:33]とデータRL[159:33]の各ビットの一方が論理1の場合、論理1に設定される。
シフト回路20aは、内部バスRHにおいて、有効な32ビットのデータD[63:32]が出力されるビットを除く127ビットを論理0に設定する機能を有する。シフト回路20bは、内部バスRLにおいて、有効な32ビットのデータD[31:0]が出力されるビットを除く127ビットを論理0に設定する機能を有する。また、図6および図7に示すように、データRH[159:33]、RL[159:33]のうち、同じビット番号のデータRH、RLに有効なデータDが同時に出力されることはない。このため、ビット選択回路40の各オア回路ORの2つの入力の一方には、必ず論理0が供給される。したがって、ビット番号が互いに重複するデータRH[159:33]、RL[159:33]の各ビットをオア回路ORで受けることで、ビット選択回路40は、制御信号を用いることなく有効なデータを選択して出力バスR[159:33]に出力できる。
図6は、図1に示すシフト演算回路100の通常モード(SIMD=”0”)での動作の一例を示す。すなわち、図6は、シフト演算回路100によるシフト演算方法の一例を示す。図6において、シフト量信号SAH1[6:0]、SAL1[6:0]を示す7ビットの”*”は、各ビットの値が”0”または”1”に設定されることを示す。
シフト回路20aは、ビットRH[191]を基準にして、データD[63:32]の各ビットの位置をシフト量信号SAH1[6:0]に応じて、0ビットから127ビットの範囲でシフトし、データRH[191:33]として出力する。シフト回路20bは、ビットRL[159]を基準にして、データD[31:0]の各ビットの位置を、シフト量信号SAL1[6:0]に応じて0ビットから127ビットの範囲でシフトし、データRL[159:1]として出力する。
シフト回路20a、20bがシフトの基準にするビットは、32ビットずれているため、シフト回路20aが出力するデータRHのビット範囲と、シフト回路20bが出力するデータRLのビット範囲とは、32ビットずれる。また、通常モードでは、シフト量信号SAH1[6:0]の値とシフト量信号SAL1[6:0]の値とは、互いに同じである。このため、シフト演算回路100は、データD[63:0]のシフト動作において、データD[63:32]、D[31:0]を、データRHとデータRLのビット番号とを重複させることなく、データRとして出力することができる。すなわち、データD[63:32]、D[31:0]が衝突することを抑止することができる。また、シフト演算回路100は、データRHとデータRLのビット番号を空けることなく、データD[63:0]を64ビットのまとまったデータRとして出力することができる。
図6の下側のかぎ括弧内に示す出力バスR[191:1]は、シフト量信号SAH1、SAL1に応じてデータD[63:0]が現れるビット位置の例を示す。シフト量信号SAH1、SAL1の数値の末尾の符号hは、数値が16進数であることを示す。なお、シフト量信号SAH1の値は、シフト演算回路100に供給されるシフト量信号SAHの値と同じであり、シフト量信号SAL1の値は、シフト演算回路100に供給されるシフト量信号SALの値と同じである。
シフト量信号SAH1、SAL1が”00h”の場合(0ビット右シフト)、データD[63:32]は、データR[191:160]として出力され、データD[31:0]は、データR[159:128]として出力される。シフト回路20aは、データD[63:32]が現れないデータRH[159:33]の各ビットを”0”に設定する。シフト回路20bは、データD[31:0]が現れないデータRL[127:1]の各ビットを”0”に設定する。このため、ビット選択回路40は、データR[128:33]の各ビットを”0”に設定する。バッファ回路31は、データR[32:1]の各ビットを”0”に設定する。
シフト量信号SAH1、SAL1が”19h”の場合(25ビット右シフト)、データD[63:32]は、データR[166:135]として出力され、データD[31:0]は、データR[134:103]として出力される。シフト回路20aは、データD[63:32]が現れないデータRH[191:167]、RH[134:33]の各ビットを”0”に設定する。シフト回路20bは、データD[31:0]が現れないデータRL[159:135]、RL[102:1]の各ビットを”0”に設定する。このため、バッファ回路30は、データR[191:167]の各ビットを”0”に設定する。ビット選択回路40は、データR[102:33]の各ビットを”0”に設定する。バッファ回路31は、データR[32:1]の各ビットを”0”に設定する。
シフト量信号SAH1、SAL1が”6Eh”の場合(110ビット右シフト)、データD[63:32]は、データR[81:50]として出力され、データD[31:0]は、データR[49:18]として出力される。シフト回路20aは、データD[63:32]が現れないデータRH[191:82]、RH[49:33]の各ビットを”0”に設定する。シフト回路20bは、データD[31:0]が現れないデータRL[159:50]、RL[17:1]の各ビットを”0”に設定する。このため、バッファ回路30は、データR[191:160]の各ビットを”0”に設定する。ビット選択回路40は、データR[159:82]の各ビットを”0”に設定する。バッファ回路31は、データR[17:1]の各ビットを”0”に設定する。
シフト量信号SAH1、SAL1が”7Fh”の場合(127ビット右シフト)、データD[63:32]は、データR[64:33]として出力され、データD[31:0]は、データR[32:1]として出力される。シフト回路20aは、データD[63:32]が現れないデータRH[191:64]の各ビットを”0”に設定する。シフト回路20bは、データD[31:0]が現れないデータRL[159:33]の各ビットを”0”に設定する。このため、バッファ回路30は、データR[191:160]の各ビットを”0”に設定する。ビット選択回路40は、データR[159:65]の各ビットを”0”に設定する。
図7は、図1に示すシフト演算回路100のSIMDモード(SIMD=”1”)での動作の一例を示す。すなわち、図7は、シフト演算回路100によるシフト演算方法の別の例を示す。図6と同様の動作については、詳細な説明は省略する。なお、SIMDモードでは、図1に示すシフト量信号SAH1[6:0]とシフト量信号SAL1[6:0]は、互いに独立して設定される。
SIMDモードでは、シフト量信号SAH1[6:0]の最上位ビットSAH1[6]は、”0”に固定され、シフト量信号SAL1[6:0]の最上位ビットSAL1[6]は、”1”に固定される。すなわち、SIMDモードでは、シフト量信号SAH1、SAL1の所定数のビットは、互いに異なる論理に設定される。このため、シフト回路20aは、ビットRH[191]を基準にして、データD[63:32]の各ビットの位置を、シフト量信号SAH1[6:0]に応じて、0ビットから63ビットの範囲でシフトし、データRH[191:97]として出力する。シフト回路20bは、ビットRH[159]を基準にして、データD[31:0]の各ビットの位置を、シフト量信号SAL1[6:0]に応じて、0ビットから63ビットの範囲でシフトし、データRL[95:1]として出力する。すなわち、SIMDモードでは、シフト回路20aが出力するデータRHのビット範囲と、シフト回路20bが出力するデータRLのビット範囲とは、重複しない。
図7の下側のかぎ括弧内の一番上において、シフト量信号SAHが”00h”の場合、シフト量信号SAH1も”00h”に設定され(0ビット右シフト)、データD[63:32]は、データR[191:160]として出力される。一方、シフト量信号SALが”25h”の場合、シフト量信号SAL1は”65h”に設定され(101ビット右シフト)、データD[31:0]は、データR[58:27]として出力される。
図7の下側のかぎ括弧内の中央において、シフト量信号SAHが”3Fh”の場合、シフト量信号SAH1も”3Fh”に設定され(63ビット右シフト)、データD[63:32]は、データR[128:97]として出力される。一方、シフト量信号SALが”00h”の場合、シフト量信号SAL1は”40h”に設定され(64ビット右シフト)、データD[31:0]は、データR[95:64]として出力される。
図7の下側のかぎ括弧内の一番下において、シフト量信号SAHが”10h”の場合、シフト量信号SAH1も”10h”に設定され(16ビット右シフト)、データD[63:32]は、データR[175:144]として出力される。一方、シフト量信号SALが”3Fh”の場合、シフト量信号SAL1は”7Fh”に設定され(127ビット右シフト)、データD[31:0]は、データR[32:1]として出力される。
このように、SIMDモードでは、データD[63:32]は、データR[191:97]の範囲に出力され、データD[31:0]は、データR[95:1]の範囲に出力される。このため、図1に示すシフト量信号SAH[6:0]とシフト量信号SAL[6:0]とが互いに独立して設定される場合にも、データD[63:32]とデータD[31:0]が衝突することを抑止することができる。
図8は、図1に示すシフト演算回路100にパリティビットを予測するパリティ予測器を内蔵する場合の一例を示す。図1と同じ要素には、同じ符号を付し、詳細な説明は省略する。
パリティ予測器を内蔵するシフト演算回路100Pは、図1に示すシフト回路20a、20bの代わりにシフト回路20Pa、20Pbを有する。また、シフト演算回路100Pは、図1に示すバッファ回路30、31の代わりにバッファ回路30P、31Pを有し、図1に示すビット選択回路40の代わりにビット選択回路40Pを有する。シフト演算回路100Pは、データD[63:0]とパリティビットDP[15:0]とを受け、データD[63:0]の誤りを検出する。パリティビットDP[15:0]の各ビットは、データD[63:0]の4ビット毎に付加される。
パリティ予測器PPa、PPbは、シフト回路20Pa、20Pb内にそれぞれ搭載される。各パリティ予測器PPa、PPbは、4ビットのデータD毎にパリティビットDPを算出する排他的論理和回路を有し、パリティビットDPは、シフト回路20Pa、20Pbにおいて、データを順次シフトする複数のステージ毎に算出される。このため、各パリティ予測器PPa、PPbは、各シフト回路20Pa、20Pbのサイズの数十パーセントを占める。
シフト回路20Paは、データD[63:32]のビット位置をシフト量信号SAH1[6:0]に応じてシフトし、データRH[191:33]とパリティビットRPH[47:8]として出力する。パリティビットRPH[47:8]の各ビットは、データRH[191:33]の4ビット毎に付加される。シフト回路20Pbは、データD[31:0]のビット位置をシフト量信号SAL1[6:0]に応じてシフトし、データRL[159:1]とパリティビットRPL[39:0]として出力する。パリティビットRPH[39:0]の各ビットは、データRL[159:1]の4ビット毎に付加される。
シフト回路20Paのパリティ予測器PPaは、データD[63:32]をシフトする毎にパリティビットを生成することで、データRH[191:33]の出力とともにパリティビットRPH[47:8]を出力する。同様に、シフト回路20Pbのパリティ予測器PPbは、データD[31:0]をシフトする毎にパリティビットを生成することで、データRL[159:1]の出力とともにパリティビットRPL[39:0]を出力する。すなわち、パリティ予測器PPaは、データRH[191:33]を用いることなくパリティビットRPH[47:8]を予測でき、パリティ予測器PPbは、データRL[159:1]を用いることなくパリティビットPL[39:0]を予測できる。
バッファ回路30Pは、データRH[191:160]をデータR[191:160]として出力するとともに、データRH[191:160]に対応するパリティビットRPH[47:40]をパリティビットRP[47:40]として出力する。バッファ回路31Pは、データRL[32:1]をデータR[32:1]として出力するとともに、データRL[32:1]に対応するパリティビットRPL[7:0]をパリティビットRP[7:0]として出力する。
ビット選択回路40Pは、データRH[159:33]とデータRL[159:33]の中から有効なビットを選択し、データR[159:33]として出力する。また、ビット選択回路40Pは、パリティビットRPH[39:8]とパリティビットRPL[39:8]の中から有効なビットを選択し、パリティビットRP[39:8]として出力する。なお、パリティビットRP[47:0]の各ビットは、データR[191:1]の4ビット毎に付加される。データR[191:1]とともに出力されるパリティビットRP[47:0]は、データR[191:1]の供給先の回路において、データR[191:1]の誤りを検出するために使用される。
図9は、図8に示すシフト演算回路100Pにおいて、データとパリティビットとの割り当ての一例を示す。パリティビットDP[15:0]の各ビットは、データD[63:0]の4ビット毎に付加される。パリティビットRPH[47:8]の各ビットは、データRH[191:33]の4ビット毎に付加される。パリティビットRPH[39:0]の各ビットは、データRL[159:1]の4ビット毎に付加される。
パリティビットRP[47:0]の各ビットは、データR[191:1]の4ビット毎に付加される。パリティビットをデータビットの間に挿入することで、シフト回路20Pa、20Pbにおいて、パリティビットを伝達する信号の配線長を、パリティビットをデータビットの間に挿入しない場合に比べて短くすることができる。
図10は、シフト演算回路の別の例を示す。図1に示すシフト演算回路100と同様の要素または同様の機能については、詳細な説明は省略する。図10に示すシフト演算回路102は、シフト回路28、29、バッファ回路39およびセレクタ回路49を有する。なお、シフト演算回路102がパリティ予測器を内蔵する場合、括弧内に示すパリティビットDP、RPH、RPL、RPが付加される。以下では、シフト演算回路102がパリティ予測器を内蔵せず、パリティビットDP、RPH、RPL、RPが付加されない場合について説明される。
シフト回路28は、通常モード中(SIMD=”0”)、64ビットのデータD[63:0]を、シフト量信号SAH[6:0]の値に応じて、上位側から下位側に向けてビットシフトし、191ビットのデータRH[191:1]として出力する。すなわち、シフト回路28は、データD[63:0]をシフト量信号SAHの値(0ビットから127ビットのいずれか)だけ右シフトする。また、シフト回路28は、SIMDモード中(SIMD=”1”)、32ビットのデータD[63:32]を、シフト量信号SAH[5:0]の値に応じて、上位側から下位側に向けてビットシフトし、95ビットのデータRH[191:97]として出力する。すなわち、シフト回路28は、データD[63:32]をシフト量信号SAHの値(0ビットから63ビットのいずれか)だけ右シフトする。
シフト回路29は、SIMDモード中のみ動作し(SIMD=”1”)、32ビットのデータD[31:0]を、シフト量信号SAL[5:0]の値に応じて、上位側から下位側に向けてビットシフトし、95ビットのデータRH[95:1]として出力する。すなわち、シフト回路29は、データD[31:0]をシフト量信号SALの値(0ビットから63ビットのいずれか)だけ右シフトする。
バッファ回路39は、シフト回路28から出力されるデータRH[191:1]のうち、上位の96ビットのデータRH[191:96]をデータR[191:96]として出力する。セレクタ回路49は、通常モード中(SIMD=”0”)、データRH[95:1]を選択し、SIMDモード中(SIMD=”1”)、データRL[95:1]を選択し、選択したデータをデータR[95:1]として出力する。
図10に示すシフト演算回路102では、データD[31:0]は、シフト回路28、29に重複して供給される。SIMDモード中、シフト回路28は、データD[31:0]をシフトしないため、シフト回路28には、SIMDモード中に動作しない無駄な回路が存在する。また、シフト回路28、29は、それぞれ独立に設計されるため、図1に示すシフト回路20a、20bに比べて設計期間が長くなる。
さらに、シフト回路28は64ビットのデータD[63:0]を受けて動作し、シフト回路29は、32ビットのデータD[31:0]を受けて動作するため、入力されるデータDのビット数の合計は、96ビットである。これは、図1に示すシフト回路20a、20bに入力されるデータDのビット数の合計(64ビット)より32ビット多い。
シフト演算回路102がパリティ予測器を内蔵する場合、シフト回路28、29への入力ビット数の合計は、120ビットであり、図8に示すシフト演算回路100Pのシフト回路20Pa、20Pbの入力ビット数の合計(80ビット)より40ビット多い。
例えば、シフト回路の回路規模は、入力データのビット数に依存して、指数関数的に増加する。このため、図10に示すシフト演算回路102の回路規模は、図1に示すシフト演算回路100の回路規模より大きくなる。シフト演算回路102がパリティ予測器を内蔵する場合、シフト演算回路102の回路規模は、図8に示すシフト演算回路100Pの回路規模よりさらに大きくなる。換言すれば、図1に示すシフト演算回路100では、データD[63:32]、D[31:0]が重複することなくシフト回路20a、20bにそれぞれ供給される。このため、シフト演算回路100のサイズを、データD[63:0]の一部が重複して複数のシフト回路28、29に供給されるシフト演算回路100P等のサイズに比べて小さくすることができる。
以上、図1から図10に示す実施形態では、ビットが重複しないデータD[63:32]、D[31:0]をシフト回路20a、20bにそれぞれ供給して、通常モードでのシフト動作とSIMDモードでのシフト動作とを実行することができる。これにより、ビットが重複して複数の他のシフト回路に供給される場合に比べて、シフト回路20a、20bに供給されるデータDのビット数の合計を少なくすることができる。例えば、シフト回路20a、20bに供給されるデータDのビット数の合計(64ビット)を、図10に示すシフト演算回路102のシフト回路28、29に供給されるデータDのビット数の合計(96ビット)の3分の2にすることができる。この結果、シフト回路20a、20bの回路規模をシフト回路28、29の回路規模に比べて小さくすることができ、シフト演算回路100の回路サイズを小さくすることができる。また、シフト回路20a、20bは、互いに同じ回路であるため、図10に示すシフト回路28、29の両方をそれぞれ設計する場合に比べて、設計期間を短縮することができる。
基準のビット位置RL[159]、RH[191]を分割データD[63:32]のビット幅分ずらして割り当てることで、分割データD[63:32]、D[31:0]を連続するデータD[63:0]として出力バスR[191:1]に出力することができる。換言すれば、通常モードにおいて、データD[63:32]、D[31:0]が衝突することを抑止することができる。
ビット番号が互いに重複するデータRH[159:33]、RL[159:33]の各ビットをオア回路ORで受けることで、ビット選択回路40は、制御信号を用いることなく有効なデータDを選択して出力バスR[159:33]に出力することができる。
SIMDモードにおいて、シフト量信号SAH1[6:0]の上位ビットSAH1[6]とシフト量信号SAL1[6:0]の上位ビットSAL1[6]との論理は、互いに逆に設定される。これにより、シフト量信号SAH[6:0]とシフト量信号SAL[6:0]とが互いに独立して設定される場合にも、データD[63:32]とデータD[31:0]が衝突することを抑止することができる。
図11は、シフト演算回路の別の実施形態を示す。図1に示す要素と同一または同様の要素については、同一の符号を付し、詳細な説明は省略する。この実施形態のシフト演算回路104は、シフト制御回路10、13、14、シフト回路20a、22a、22b、バッファ回路30、32およびビット選択回路42を有する。シフト演算回路104は、図1に示すシフト演算回路100と同様に、図2に示す演算処理装置200の浮動小数点用の加算器FADDまたは乗算加算器FMAに搭載可能である。
なお、シフト演算回路104がパリティ予測器を内蔵する場合、括弧内に示すパリティビットDP、RPH、RPLH、RPL、RPが付加される。以下では、シフト演算回路104がパリティ予測器を内蔵せず、パリティビットDP、RPH、RPLH、RPL、RPが付加されない場合について説明される。シフト演算回路104は、図1に示すシフト演算回路100と同様に、図2に示す演算処理装置200の浮動小数点用の加算器FADDまたは乗算加算器FMAに搭載可能である。
シフト制御回路10の回路構成および機能は、図1に示すシフト制御回路10の回路構成および機能と同じである。シフト制御回路13は、シフト量信号SALH[6:0]の論理をモード信号SIMDに応じて変更し、シフト量信号SALH1[6:0]として出力する。シフト制御回路13は、SIMDモード時にシフト量信号SALH1[6:0]の上位2ビットSALH1[6:5]が”10”に設定されることを除き、図1に示すシフト制御回路11と同様に動作する。
シフト制御回路14は、SIMDモード時にシフト量信号SAL1[6:0]の上位2ビットSAL1[6:5]が”11”に設定されることを除き、図1に示すシフト制御回路11と同様に動作する。通常モードでは(SIMD=”0”)、シフト量信号SAH[6:0]、SALH[6:0]、SAL[6:0]は、互いに同じ値に設定される。SIMDモードでは(SIMD=”1”)、シフト量信号SAH[6:0]、SALH[6:0]、SAL[6:0]は、互いに独立して設定される。
シフト回路20aの回路構成および機能は、図1に示すシフト回路20aの回路構成および機能と同じである。シフト回路22aは、64ビットのデータD[63:0]のうち16ビットのデータD[31:16]を、シフト量信号SALH1の値に応じて、上位側から下位側に向けてビットシフトし、143ビットの内部バスRLH[159:17]に出力する。すなわち、シフト回路22aは、データD[31:16]をシフト量信号SALH1の値(0ビットから127ビットのいずれか)だけ右シフトする。以下では、内部バスRLH[159:17]に伝達されるデータは、データRLH[159:17]とも称される。シフト回路22aは、143ビットのデータRLH[159:17]のうち、データD[31:16]として出力する16ビットを除く127ビットを”0”に設定する機能を有する。
シフト回路22bは、64ビットのデータD[63:0]のうち16ビットのデータD[15:0]を、シフト量信号SAL1の値に応じて、上位側から下位側に向けてビットシフトし、143ビットのデータRL[143:1]として出力する。すなわち、シフト回路22bは、データD[15:0]をシフト量信号SAL1の値(0ビットから127ビットのいずれか)だけ右シフトする。シフト回路22bは、143ビットのデータRL[143:1]のうち、データD[15:0]として出力する16ビットを除く127ビットを”0”に設定する機能を有する。なお、シフト回路22a、22bは、互いに同じ回路であり、回路データ(マクロデータ)は共通であるため、シフト回路22a、22bを別々に設計する場合に比べてシフト回路22a、22bの設計期間を短縮することができる。
バッファ回路30の回路構成および機能は、図1に示すバッファ回路30の回路構成および機能と同じである。バッファ回路32は、シフト回路22bから出力されるデータRL[143:1]のうち、下位の16ビットのデータRL[16:1]をデータR[16:1]として出力する。
ビット選択回路42は、シフト回路20aから出力されるデータRH[159:33]と、シフト回路22aから出力されるデータRLH[159:17]と、シフト回路22bから出力されるデータRL[143:17]とを受ける。ビット選択回路42は、データRH[159:33]、データRLH[159:17]、データRL[143:17]の中から有効なビットを選択し、データR[159:17]として出力する。データR[159:17]のうち、有効なビットは、最小で32ビットであり、最大で64ビットである。
図12は、図11に示すシフト制御回路10、13、14の一例を示す。シフト制御回路10の回路構成および機能は、図4に示すシフト制御回路10の回路構成および機能と同じである。すなわち、シフト制御回路10は、SIMDモード中、シフト量信号SAH[5:0]に応じて、0ビットから63ビットのシフト量を示すシフト量信号SAH1[6:0]を出力する。
シフト制御回路13は、モード信号SIMDを受けるオア回路ORと、インバータIVを介してモード信号SIMDを受けるアンド回路ANDとを有する。また、シフト制御回路13は、シフト量信号SALH[4:0]をシフト量信号SALH1[4:0]として出力する複数のバッファBUFとを有する。オア回路ORとアンド回路ANDの出力(SALH1[6:5])は、SIMDモード中、”10”に設定される。すなわち、シフト制御回路13は、SIMDモード中、シフト量信号SALH[4:0]に応じて、64ビットから95ビットのシフト量を示すシフト量信号SALH1[6:0]を出力する。
シフト制御回路14は、モード信号SIMDを受けるオア回路OR1、OR2と、シフト量信号SAL[4:0]をシフト量信号SAL1[4:0]として出力する複数のバッファBUFとを有する。オア回路OR1、OR2の出力(SAHL1[6:5])は、SIMDモード中、”11”に設定される。すなわち、シフト制御回路14は、SIMDモード中、シフト量信号SAL[4:0]に応じて、96ビットから127ビットのシフト量を示すシフト量信号SAL1[6:0]を出力する。
図13は、図11に示すバッファ回路30、32とビット選択回路42の一例を示す。バッファ回路30の回路構成および機能は、図5に示すバッファ回路30の回路構成および機能と同じである。バッファ回路32は、データRL[16:1]をデータR[16:1]として出力する複数のバッファBUFを有する。
ビット選択回路42は、データR[159:144]に対応するデータRH、RLHの各ビットのオア論理を演算する複数の2入力のオア回路ORを有する。また、ビット選択回路42は、データR[143:33]に対応するデータRH、RLH、RLの各ビットのオア論理を演算する複数の3入力のオア回路ORを有する。さらに、ビット選択回路42は、データR[32:17]に対応するデータRLH、RLの各ビットのオア論理を演算する複数の2入力のオア回路ORを有する。すなわち、データR[159:17]の各ビットは、データRH[159:33]とデータRLH[159:33]とデータRL[143:17]の各ビットのいずれかが論理1の場合、論理1に設定される。
図11に示すシフト回路20a、22a、22bは、有効なビットを除くビットを論理0に設定する機能を有する。また、図14および図15に示すように、データD[63:0]が、同じビット番号の内部バスRH、RLH、RLに同時に出力されることはない。このため、有効なデータDが、ビット選択回路42の各オア回路ORの複数の入力に同時に供給されることはない。したがって、ビット番号が互いに重複するデータRH、RLH、RLの各ビットをオア回路ORで受けることで、ビット選択回路42は、制御信号を用いることなく有効なデータを選択して出力バスR[159:17]に出力することができる。
図14は、図11に示すシフト演算回路104の通常モード(SIMD=”0”)での動作の一例を示す。すなわち、図14は、シフト演算回路104によるシフト演算方法の一例を示す。図6と同様の動作については、詳細な説明は省略する。
シフト回路20aの動作は、図6と同じである。シフト回路22aは、ビットRLH[159]を基準にして、データD[31:16]の各ビットの位置を、シフト量信号SALH1[6:0]に応じて、0ビットから127ビットの範囲でシフトし、データRLH[159:17]として出力する。シフト回路22bは、ビットRL[143]を基準にして、データD[15:0]の各ビット位置をシフト量信号SAL1[6:0]に応じて、0ビットから127ビットの範囲でシフトし、データRL[143:1]として出力する。
シフト回路20aが出力するデータRHのビット範囲と、シフト回路22aが出力するデータRLHのビット範囲とは、32ビットずれている。シフト回路22aが出力するデータRLHのビット範囲と、シフト回路22bが出力するデータRLのビット範囲とは、16ビットずれている。また、通常モードでは(SIMD=”0”)、シフト量信号SAH[6:0]、SALH[6:0]、SAL[6:0]は、互いに同じ値に設定される。このため、シフト演算回路104は、データD[63:0]のシフト動作において、データD[63:32]、D[31:16]、D[15:0]を、データRH、RLH、RLのビット番号を互いに重複させることなく、データRとして出力することができる。また、シフト演算回路104は、データRH、RLH、RLのビット番号を空けることなく、データRとして出力することができる。
図14の下側のかぎ括弧内に示すデータR[191:1]は、シフト量信号SAH1、SALH1、SAL1に応じてデータD[63:0]が現れるビット位置の例を示す。データD[63:0]が現れるビット位置は、図6と同様である。
図15は、図11に示すシフト演算回路104のSIMDモード(SIMD=”1”)での動作の一例を示す。すなわち、図15は、シフト演算回路104によるシフト演算方法の別の例を示す。図7と同様の動作については、詳細な説明は省略する。なお、SIMDモードでは、図1に示すシフト量信号SAH1[6:0]、SALH1[6:0]、SAL1[6:0]は、互いに独立して設定される。
SIMDモードでは、シフト量信号SAH1[6:0]の最上位ビットSAH1[6]は、”0”に固定され、シフト量信号SALH1[6:0]の上位ビットSALH1[6:5]は、”10”に固定される。また、シフト量信号SAL1[6:0]の上位ビットSAL1[6:5]は、”11”に固定される。すなわち、SIMDモードでは、シフト量信号SAH1、SALH1、SAL1の上位2ビットは、互いに異なる論理に設定される。
シフト回路20aは、図7と同様に動作する。すなわち、シフト回路20aは、ビットRH[191]を基準にして、データD[63:32]の各ビットの位置を、シフト量信号SAH1[6:0]に応じて0ビットから63ビットの範囲でシフトし、データRH[191:97]として出力する。
シフト回路22aは、ビットRLH[159]を基準にして、データD[31:16]の各ビットの位置を、シフト量信号SALH1[6:0]に応じて64ビットから95ビットの範囲でシフトし、データRLH[95:49]として出力する。シフト回路22bは、ビットRL[143]を基準にして、16ビットのデータD[15:0]の各ビットの位置を、シフト量信号SAL1[6:0]に応じて96ビットから127ビットの範囲でシフトし、データRL[47:1]として出力する。すなわち、SIMDモードでは、シフト回路20aが出力するデータRHのビット範囲と、シフト回路22aが出力するデータRLHのビット範囲と、シフト回路22bが出力するデータRLのビット範囲とは、重複しない。
図15のかぎ括弧内の上側において、シフト量信号SAHが”00h”の場合、シフト量信号SAH1も”00h”に設定され(0ビット右シフト)、データD[63:32]は、データR[191:160]として出力される。シフト量信号SALHが”00h”の場合、シフト量信号SALH1は”40h”に設定され(64ビット右シフト)、データD[31:16]は、データR[95:80]として出力される。シフト量信号SALが”00h”の場合、シフト量信号SAL1は”60h”に設定され(96ビット右シフト)、データD[15:0]は、データR[47:32]として出力される。
図15のかぎ括弧内の下側において、シフト量信号SAHが”3Fh”の場合、シフト量信号SAH1も”3Fh”に設定され(63ビット右シフト)、データD[63:32]は、データR[128:97]として出力される。シフト量信号SALHが”1Fh”の場合、シフト量信号SALH1は”5Fh”に設定され(95ビット右シフト)、データD[31:16]は、データR[64:49]として出力される。シフト量信号SALが”1Fh”の場合、シフト量信号SAL1は”7Fh”に設定され(127ビット右シフト)、データD[15:0]は、データR[16:1]として出力される。
このように、SIMDモードでは、データD[63:32]は、データR[191:97]の範囲に出力され、データD[31:16]は、データR[95:49]の範囲に出力され、データD[15:0]は、データR[47:1]の範囲に出力される。したがって、図11に示すシフト量信号SAH[6:0]、SALH[6:0]、SAL[6:0]が互いに独立して設定される場合にも、データD[63:32]、D[31:16]、D[15:0]が衝突することを抑止することができる。
以上、図11から図15に示す実施形態においても、図1から図10に示す実施形態と同様の効果を得ることができる。例えば、シフト演算回路104の回路サイズを、ビットが重複して供給される複数のシフト回路を含む他のシフト演算回路の回路サイズに比べて小さくすることができる。
3つのシフト回路20a、22a、22bにそれぞれ接続される内部バスRH、RLH、RLの基準のビット位置を、分割データDのビット幅分ずらすことで、通常モードにおいて、データDが衝突することを抑止することができる。ビット番号が互いに重複するデータRH、RLH、RLの各ビットを2入力または3入力のオア回路ORで受けることで、ビット選択回路42は、制御信号を用いることなく有効なデータDを選択することができる。SIMDモードにおいて、シフト量信号SAH1、SALH1、SALの上位2ビットの論理を互いに相違させることで、データD[63:32]、D[31:16]、D[15:0]が衝突することを抑止することができる。
図16は、シフト演算回路の別の実施形態を示す。図1および図11に示す要素と同一または同様の要素については、同一の符号を付し、詳細な説明は省略する。この実施形態のシフト演算回路106は、シフト制御回路15、16、13、14、シフト回路22c、22d、22a、22b、バッファ回路33、32およびビット選択回路44を有する。
シフト演算回路106は、図1に示すシフト演算回路100と同様に、図2に示す演算処理装置200の浮動小数点用の加算器FADDまたは乗算加算器FMAに搭載可能である。この場合、SIMD演算では、4つに分割されたデータ(オペランド)を用いて演算が並列に実行される。
なお、シフト演算回路106がパリティ予測器を内蔵する場合、括弧内に示すパリティビットDP、RPH、RPHH、RPLH、RPL、RPが付加される。以下では、シフト演算回路106がパリティ予測器を内蔵せず、パリティビットDP、RPH、RPHH、RPLH、RPL、RPが付加されない場合について説明される。
シフト制御回路15は、シフト量信号SAH[6:0]の論理をモード信号SIMDに応じて変更し、シフト量信号SAH1[6:0]として出力する。シフト制御回路16は、シフト量信号SAHH[6:0]の論理をモード信号SIMDに応じて変更し、シフト量信号SAHH1[6:0]として出力する。シフト制御回路13の回路構成および機能は、図11に示すシフト制御回路13の回路構成および機能と同じであり、シフト制御回路14の回路構成および機能は、図11に示すシフト制御回路14の回路構成および機能と同じである。
シフト回路22c、22d、22a、22bは、図11に示すシフト回路22a、22bと同じ回路構成を有する。このため、シフト回路22c、22d、22a、22bの回路データ(マクロデータ)を共通にすることができ、シフト回路22c、22d、22a、22bを別々に設計する場合に比べて、設計期間を短縮することができる。シフト回路22aの動作は、図11に示すシフト回路22aの動作と同じであり、シフト回路22bの動作は、図11に示すシフト回路22bの動作と同じである。
シフト回路22cは、64ビットのデータD[63:0]のうち16ビットのデータD[63:48]を、シフト量信号SAH1の値に応じて、上位側から下位側に向けてビットシフトし、143ビットの内部バスRH[191:49]に出力する。すなわち、シフト回路22cは、データD[63:48]をシフト量信号SAH1の値(0ビットから127ビットのいずれか)だけ右シフトする。
シフト回路22dは、64ビットのデータD[63:0]のうち16ビットのデータD[47:32]を、シフト量信号SAHH1の値に応じて、上位側から下位側に向けてビットシフトし、143ビットの内部バスRHH[175:33]に出力する。すなわち、シフト回路22dは、データD[47:32]をシフト量信号SAHH1の値(0ビットから127ビットのいずれか)だけ右シフトする。以下では、内部バスRHH[175:33]に伝達されるデータは、データRHH[175:33]とも称される。
バッファ回路32の回路構成および機能は、図11に示すバッファ回路32の回路構成および機能と同じである。バッファ回路33は、バッファ回路32と同じ回路構成を有する。バッファ回路33は、シフト回路22cから出力されるデータRH[191:49]のうち、上位の16ビットのデータRH[191:176]をデータR[191:176]として出力する。
ビット選択回路44は、シフト回路22cから出力されるデータRH[175:49]と、シフト回路22dから出力されるデータRHH[175:33]とを受ける。また、ビット選択回路44は、シフト回路22aから出力されるデータRLH[159:17]と、シフト回路22bから出力されるデータRL[143:17]とを受ける。ビット選択回路44は、データRH[175:49]、データRHH[175:33]、データRLH[159:17]、データRL[143:17]の中から有効なビットを選択し、データR[175:17]として出力する。データR[175:17]のうち、有効なビットは、最小で48ビットであり、最大で64ビットである。
図17は、図16に示すシフト制御回路15、16、13、14の一例を示す。シフト制御回路13は、図11に示すシフト制御回路13と同じであり、シフト制御回路14の回路構成および機能は、図11に示すシフト制御回路14の回路構成および機能と同じである。
シフト制御回路15は、インバータIVを介してモード信号SIMDを受けるアンド回路AND1、AND2と、シフト量信号SAH[4:0]をシフト量信号SAH1[4:0]として出力する複数のバッファBUFとを有する。アンド回路AND1、AND2の出力(SAH1[6:5])は、SIMDモード中、”00”に設定される。すなわち、シフト制御回路15は、SIMDモード中、シフト量信号SAH[4:0]に応じて、0ビットから31ビットのシフト量を示すシフト量信号SAH1[6:0]を出力する。
シフト制御回路16は、インバータIVを介してモード信号SIMDを受けるアンド回路ANDと、モード信号SIMDを受けるオア回路ORとを有する。また、シフト制御回路16は、シフト量信号SAHH[4:0]をシフト量信号SAHH1[4:0]として出力する複数のバッファBUFとを有する。アンド回路ANDとオア回路ORの出力(SAHH1[6:5])は、SIMDモード中、”01”に設定される。すなわち、シフト制御回路16は、SIMDモード中、シフト量信号SAHH[4:0]に応じて、32ビットから63ビットのシフト量を示すシフト量信号SAHH1[6:0]を出力する。
図18は、図16に示すバッファ回路33、32とビット選択回路44の一例を示す。バッファ回路32の回路構成および機能は、図13に示すバッファ回路32の回路構成および機能と同じである。バッファ回路33は、データRH[191:176]をデータR[191:176]として出力する複数のバッファBUFを有する。
ビット選択回路44は、データR[175:160]に対応するデータRH、RHHの各ビットのオア論理を演算する複数の2入力のオア回路ORを有する。また、ビット選択回路44は、データR[159:144]に対応するデータRH、RHH、RLHの各ビットのオア論理を演算する複数の3入力のオア回路ORを有する。さらに、ビット選択回路44は、データR[143:49]に対応するデータRH、RHH、RLH、RLの各ビットのオア論理を演算する複数の4入力のオア回路ORを有する。
また、ビット選択回路44は、データR[48:33]に対応するデータRHH、RLH、RLの各ビットのオア論理を演算する複数の3入力のオア回路ORを有する。さらに、ビット選択回路44は、データR[32:17]に対応するデータRLH、RLの各ビットのオア論理を演算する複数の2入力のオア回路ORを有する。すなわち、データR[175:17]の各ビットは、データRH[175:49]とデータRHH[175:33]とデータRLH[159:17]と、データRL[143:17]の各ビットのいずれかが論理1の場合、論理1に設定される。
図16に示すシフト回路22c、22d、22a、22bは、有効なビットを除くビットを論理0に設定する機能を有する。また、図19および図20に示すように、データD[63:0]が、同じビット番号の内部バスRH、RHH、RLH、RLに同時に出力されることはない。このため、有効なデータDが、ビット選択回路44の各オア回路ORの複数の入力に同時に供給されることはない。したがって、ビット番号が互いに重複するデータRH、RHH、RLH、RLの各ビットをオア回路ORで受けることで、ビット選択回路44は、制御信号を用いることなく有効なデータを選択して出力バスR[175:17]に出力することができる。
図19は、図16に示すシフト演算回路106の通常モード(SIMD=”0”)での動作の一例を示す。すなわち、図19は、シフト演算回路106によるシフト演算方法の一例を示す。図6および図14と同様の動作については、詳細な説明は省略する。
シフト回路22cは、ビットRH[191]を基準にして、データD[63:48]の各ビットの位置を、シフト量信号SAH1[6:0]に応じて0ビットから127ビットの範囲でシフトし、データRH[191:49]として出力する。シフト回路22dは、ビットRH[175]を基準にして、データD[47:32]の各ビットの位置を、シフト量信号SAHH1[6:0]に応じて、0ビットから127ビットの範囲でシフトし、データRHH[175:33]として出力する。シフト回路22a、22bの動作は、図14と同じである。
シフト回路22cが出力するデータRHのビット範囲と、シフト回路22dが出力するデータRHHのビット範囲とは、16ビットずれている。シフト回路22dが出力するデータRHHのビット範囲と、シフト回路22aが出力するデータRLHのビット範囲とは、16ビットずれている。シフト回路22aが出力するデータRLHのビット範囲と、シフト回路22bが出力するデータRLのビット範囲とは、16ビットずれている。また、通常モードでは(SIMD=”0”)、シフト量信号SAH[6:0]、SAHH[6:0]、SALH[6:0]、SAL[6:0]は、互いに同じ値に設定される。このため、シフト演算回路106は、シフト動作において、データD[63:48]、D[47:32]、D[31:16]、D[15:0]を、データRH、RHH、RLH、RLのビット番号を互いに重複させることなく、データRとして出力できる。また、シフト演算回路106は、データRH、RHH、RLH、RLのビット番号を空けることなく、データRとして出力することができる。
図20は、図16に示すシフト演算回路106のSIMDモード(SIMD=”1”)での動作の一例を示す。すなわち、図20は、シフト演算回路106によるシフト演算方法の別の例を示す。図7および図15と同様の動作については、詳細な説明は省略する。なお、SIMDモードでは、図1に示すシフト量信号SAH1[6:0]、SAHH1[6:0]、SALH1[6:0]、SAL1[6:0]は、互いに独立して設定される。
SIMDモードでは、シフト量信号SAH1[6:0]の上位ビットSAH1[6:5]は、”00”に固定され、シフト量信号SAHH1[6:0]の上位ビットSAHH1[6:5]は、”01”に固定される。また、シフト量信号SALH1[6:0]の上位ビットSALH1[6:5]は、”10”に固定され、シフト量信号SAL1[6:0]の上位ビットSAL1[6:5]は、”11”に固定される。すなわち、SIMDモードでは、シフト量信号SAH1、SAHH1、SALH1、SAL1の上位2ビットは、互いに異なる論理に設定される。
シフト回路22cは、ビットRH[191]を基準にして、データD[63:48]の各ビットの位置を、シフト量信号SAH1[6:0]に応じて0ビットから31ビットの範囲でシフトし、データRH[191:145]として出力する。シフト回路22dは、ビットRHH[175]を基準にして、データD[47:32]の各ビットの位置を、シフト量信号SAHH1[6:0]に応じて32ビットから63ビットの範囲でシフトし、データRHH[143:97]として出力する。シフト回路22a、22bの動作は、図15に示すシフト回路22a、22bの動作と同じである。
図20に示すように、SIMDモードでは、データD[63:48]は、データR[191:145]の範囲に出力され、データD[47:32]は、データR[143:97]の範囲に出力される。データD[31:16]は、データR[95:49]の範囲に出力され、データD[15:0]は、データR[47:1]の範囲に出力される。すなわち、シフト回路22c、22d、22a、22bが出力するデータRH、RHH、RLH、RLのビット範囲は、互いに重複しない。このため、シフト量信号SAH、SAHH、SALH、SALが互いに独立して設定される場合にも、データD[63:48]、データD[47:32]、D[31:16]、D[15:0]が衝突することを抑止することができる。
図21は、図16に示すシフト演算回路106のシフト動作の一例を示す。通常モードにおいて、例えば、シフト量信号SAH、SAHH、SALH、SALが”00h”の場合、シフト量信号SAH1、SAHH1、SALH1、SAL1も”00h”に設定される(0ビット右シフト)。この場合、データD[63:48]、D[47:32]、D[31:16]、D[15:0]は、データR[191:128]として出力される。シフト量信号SAH、SAHH、SALH、SALが”19h”の場合、シフト量信号SAH1、SAHH1、SALH1、SAL1も”19h”に設定される(25ビット右シフト)。この場合、データD[63:48]、D[47:32]、D[31:16]、D[15:0]は、データR[166:103]として出力される。
シフト量信号SAH、SAHH、SALH、SALが”6Eh”の場合、シフト量信号SAH1、SAHH1、SALH1、SAL1も”6Eh”に設定される(110ビット右シフト)。この場合、データD[63:48]、D[47:32]、D[31:16]、D[15:0]は、データR[81:18]として出力される。シフト量信号SAH、SAHH、SALH、SALが”7Fh”の場合、シフト量信号SAH1、SAHH1、SALH1、SAL1も”7Fh”に設定される(127ビット右シフト)。この場合、データD[63:48]、D[47:32]、D[31:16]、D[15:0]は、データR[64:1]として出力される。
一方、SIMDモードにおいて、例えば、シフト量信号SAH、SAHH、SALH、SALが”00h”、”1Fh”、”00h”、”1Fh”に設定される。この場合、シフト量信号SAH1、SAHH1、SALH1、SAL1は、”00h”、”3Fh”、”40h”、”7Fh”に設定される。この場合、データD[63:48]は、データR[191:176]として出力され、データD[47:32]は、データR[112:97]として出力される。データD[31:16]は、データR[95:80]として出力され、D[15:0]は、データR[16:1]として出力される。
また、SIMDモードにおいて、シフト量信号SAH、SAHH、SALH、SALが”1Fh”、”00h”、”1Fh”、”00h”に設定される。この場合、シフト量信号SAH1、SAHH1、SALH1、SAL1は、”1Fh”、”20h”、”5Fh”、”60h”に設定される。この場合、データD[63:48]は、データR[160:145]として出力され、データD[47:32]は、データR[143:128]として出力される。データD[31:16]は、データR[64:49]として出力され、D[15:0]は、データR[47:32]として出力される。
なお、図16に示すモード信号SIMDを2ビットにすることで、シフト演算回路106を演算器に搭載する演算処理装置200は、32ビットデータ(2分割)のSIMD演算と、16ビットデータ(4分割)のSIMD演算とをそれぞれ実行可能である。この場合、2分割のSIMD演算を実行する第1のSIMDモード中、シフト制御回路15、16は、シフト量信号SAH1[6:0]、SAHH1[6:0]の最上位ビットSAH1[6]、SAHH1[6]を論理0に設定する。シフト制御回路13、14は、シフト量信号SALH1[6:0]、SAL1[6:0]の最上位ビットSALH1[6]、SAL1[6]を論理1に設定する。これにより、シフト演算回路106は、図7と同様に動作する。4分割のSIMD演算を実行する第2のSIMDモードの動作は、図20と同じである。
以上、図16から図21に示す実施形態においても、図1から図15に示す実施形態と同様の効果を得ることができる。例えば、シフト演算回路106の回路サイズを、ビットが重複して供給される複数のシフト回路を含む他のシフト演算回路の回路サイズに比べて小さくすることができる。
4つのシフト回路22c、22d、22a、22bにそれぞれ接続される内部バスRH、RHH、RLH、RLの基準のビット位置を、分割データDのビット幅分ずらすことで、通常モードにおいて、データDが衝突することを抑止することができる。ビット番号が互いに重複するデータRH、RHH、RLH、RLの各ビットを2入力、3入力または4入力のオア回路ORで受けることで、ビット選択回路44は、制御信号を用いることなく有効なデータDを選択することができる。SIMDモードにおいて、シフト量信号SAH1、SAHH1、SALH1、SAL1の上位2ビットの論理を互いに相違させることで、データD[63:48]、D[47:32]、D[31:16]、D[15:0]が衝突することを抑止することができる。さらに、図16から図21に示す実施形態では、モード信号SIMDを2ビットにすることで、シフト演算回路106を、2分割または4分割のSIMD演算を実行可能にすることができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。