以下図面を参照して、シフト回路及び演算装置について説明する。但し、本発明の技術的範囲はそれらの実施の形態に限定されず、特許請求の範囲に記載された発明との均等物に及ぶ点に留意されたい。
実施形態に係るシフト回路について説明する前に、実施形態に係るシフト回路の技術的特徴をより明確にするために、実施形態に係るシフト回路に関連するシフト回路について説明する。関連するシフト回路は、64ビットのビット列である入力データD[63:0]に含まれるそれぞれが1バイトの8つのビット群をビット群毎に並び替えると共に、上位ビット方向又は下位ビット方向にシフトするものである。例えば、関連するシフト回路は、入力データD[63:0]に含まれる1バイトのビット群D[48:41]を下位ビット方向に17ビットシフトして、出力データR[31:24]として出力する。また、関連するシフト回路は、64ビットのビット列である入力データD[63:0]に含まれる1バイトのビット群D[12:5]を上位ビット方向に43ビットシフトして、出力データR[55:48]として出力する。関連するシフト回路は、1バイトのビット群のそれぞれをビット群毎に並び替えると同時にビット群を上位ビット方向又は下位ビット方向にシフトする8つのシフト部により形成される。
図1は、関連するシフト回路の回路ブロック図である。
シフト回路900は、第1シフト回路901〜第8シフト回路908を有する。第1〜第8シフト回路のそれぞれは、64ビットの入力データD[63:0]が入力され、入力データD[63:0]の何れか1バイトの一連のビット群を上位ビット方向又は下位ビット方向にシフトしたビット群を、出力データとしてそれぞれ出力する。本明細書では、上位ビット方向へのシフトを左シフトと称し、下位ビット方向へのシフトを右シフトと称する。
第1シフト回路901は、第1シフト量制御信号sa0[5:0]及び第1シフト方向制御信号dir0に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[7:0]として出力する。第2シフト回路902は、第2シフト量制御信号sa1[5:0]及び第2シフト方向制御信号dir1に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[15:8]として出力する。第3シフト回路903は、第3シフト量制御信号sa2[5:0]及び第3シフト方向制御信号dir2に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[23:16]として出力する。第4シフト回路904は、第4シフト量制御信号sa3[5:0]及び第4シフト方向制御信号dir3に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[31:24]として出力する。第5シフト回路905は、第5シフト量制御信号sa4[5:0]及び第5シフト方向制御信号dir4に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[39:32]として出力する。第6シフト回路906は、第6シフト量制御信号sa5[5:0]及び第6シフト方向制御信号dir5に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[47:40]として出力する。第7シフト回路907は、第7シフト量制御信号sa6[5:0]及び第7シフト方向制御信号dir6に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[55:48]として出力する。第8シフト回路908は、第8シフト量制御信号sa7[5:0]及び第8シフト方向制御信号dir7に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[63:56]として出力する。言い換えれば、第1〜第8シフト回路は、出力データR[63:0]の1バイト毎の出力ビット位置に対応づけられている。
以下、第5シフト回路905を例として、第1シフト回路901〜第8シフト回路908の構成及び機能について説明する。
図2は、第5シフト回路905の内部回路ブロック図である。
第5シフト回路905は、左シフト部910と、右シフト部920と、左右シフトセレクタ930と、シフト制御部940と、を有する。
左シフト部910は、第1左シフトセレクタ911と、第2左シフトセレクタ912とを有する。第1左シフトセレクタ911は、デジットシフト信号sel4a[15:0]に基づいて、デジット単位、すなわち4ビット単位で左シフトした3デジットのサブビット列である第1左シフトデータDsl1[11:0]を入力データD[63:0]から生成する。サブビット列である第1左シフトデータDsl1[11:0]は、出力データとして選択されるビット群と、ビット群に隣接するビットである隣接ビット群とを含む。第2左シフトセレクタ912は、第1左シフトセレクタ911が生成した第1左シフトデータDsl1[11:0]に含まれる1バイトのビット群をビット単位で左シフトして第2左シフトデータDsl2[7:0]を生成する。
右シフト部920は、第1右シフトセレクタ921と、第2右シフトセレクタ922とを有する。第1右シフトセレクタ921は、デジットシフト信号sel4a[15:0]に基づいて、入力データD[63:0]をデジット単位で右シフトした3デジットのサブビット列である第1右シフトデータDsr1[11:0]を生成する。サブビット列である第1右シフトデータDsr1[11:0]は、出力データとして選択されるビット群と、ビット群に隣接するビットである隣接ビット群とを含む。第2右シフトセレクタ922は、第1右シフトセレクタ921が生成した第1右シフトデータDsr1[11:0]に含まれる1バイトのビット群をビット単位で右シフトした第2右シフトデータDsr2[7:0]を生成する。
左右シフトセレクタ930は、第5シフト方向制御信号dir4が「0」のとき第2左シフトデータDsl2[7:0]を、第5シフト方向制御信号dir4が「1」のとき第2右シフトデータDsr2[7:0]を、出力データR[39:32]として出力する。
シフト制御部940は、第5シフト量制御信号sa4[5:2]からデジットシフト信号sel4a[15:0]を生成し、第5シフト量制御信号sa4[1:0]からビットシフト信号sel4b[3:0]を生成する。
図3(a)は第1左シフトセレクタ911の内部回路ブロック図であり、図3(b)は入力データの分割状態を示す図であり、図3(c)は第1左デジットセレクタの内部ブロック図である。
第1左シフトセレクタ911は、第1左デジットセレクタ914と、第2左デジットセレクタ915と、第3左デジットセレクタ916とを有する。
図3(b)に示すように、入力データD[63:0]は、16個のデジットデータである第1デジットD[3:0]〜第16デジットD[63:60]に分割される。16個のデジットデータのそれぞれの最上位ビット、最上位ビットの1ビット下位のビット、最上位ビットの2ビット下位のビット及び最下位ビットのそれぞれが、16ビットの一群のデータとなる。すなわち、入力データD[63、59、・・・、3]が1つの16ビットのデータとなり、入力データD[62、58、・・・、2]が1つの16ビットのデータとなる。また、入力データD[61、57、・・・、1]が1つの16ビットのデータとなり、入力データD[60、56、・・・、0]が1つの16ビットのデータとなる。以下、本明細書では、最上位ビットをMSB(Most Significant Bit)とも称し、最下位ビットをLSB(Least Significant Bit)とも称する。
図3(c)に示すように、第1左デジットセレクタ914は、第1セレクタ9141〜第4セレクタ9144を有する。第1セレクタ9141〜第4セレクタ9144のそれぞれは、17:1セレクタである。第1セレクタ9141は、デジットシフト信号sel4a[15:0]に基づいて、第1デジットD[3:0]〜第16デジットD[63:60]のMSBのデータ又は「0」を第1左シフトデータDsl1[11]として選択し、出力する。第2セレクタ9142は、デジットシフト信号sel4a[15:0]に基づいて、第1デジットD[3:0]〜第16デジットD[63:60]のMSBの1ビット下位のビットのデータ又は「0」を第1左シフトデータDsl1[10]として選択し、出力する。第3セレクタ9143は、デジットシフト信号sel4a[15:0]に基づいて、第1デジットD[3:0]〜第16デジットD[63:60]のMSBの2ビット下位のビットのデータ又は「0」を第1左シフトデータDsl1[9]として選択し、出力する。第4セレクタ9144は、デジットシフト信号sel4a[15:0]に基づいて、第1デジットD[3:0]〜第16デジットD[63:60]のLSBのデータ又は「0」を第1左シフトデータDsl1[8]として選択し、出力する。
第1左デジットセレクタ914は、デジットシフト信号sel4a[15:0]に基づいて、第1左シフトデータDsl1[11:0]の上位デジットである第1左シフトデータDsl1[11:8]を選択し、出力する。デジットシフト信号sel4a[15:0]が示す左シフトが大きく、第1左デジットセレクタ914が選択するデジットがない場合、第1左デジットセレクタ914は「0000」を第1左シフトデータDsl1[11:8]として出力する。
第2左デジットセレクタ915は、第1左デジットセレクタ914と同一の構成を有する。第2左デジットセレクタ915は、デジットシフト信号sel4a[15:0]に基づいて、第1左デジットセレクタ914が選択したデジットの1デジット下位のデジットを選択し、第1左シフトデータDsl1[7:4]として出力する。デジットシフト信号sel4a[15:0]が示す左シフトが大きく、第2左デジットセレクタ915が選択するデジットがない場合は、第2左デジットセレクタ915は、「0000」を第1左シフトデータDsl1[7:4]として出力する。
第3左デジットセレクタ916は、第1左デジットセレクタ914と同一の構成を有する。第3左デジットセレクタ916は、デジットシフト信号sel4a[15:0]に基づいて、第1左デジットセレクタ914が選択したデジットの2デジット下位のデジットを選択し、第1左シフトデータDsl1[3:0]として出力する。デジットシフト信号sel4a[15:0]が示す左シフトが大きく、第3左デジットセレクタ916が選択するデジットがない場合は、第2左デジットセレクタ915は、「0000」を第1左シフトデータDsl1[3:0]として出力する。
右シフト部920の第1右シフトセレクタ921は、第1左シフトセレクタ911と同様の構成を有し、デジットシフト信号sel4a[15:0]に応じて選択するデジットが異なる。
表1に、第5シフト量制御信号sa4[5:2]、デジットシフト信号sel4a[15:0]、第1左シフトデータDsl1[11:0]、第1右シフトデータDsr1[11:0]の関係を示す真理値表を示す。
表1において、「L」が第1左シフトデータDsl1[11:0]を、「R」が第1右シフトデータDsr1[11:0]を示す。Dsl1[11:8]が第1左デジットセレクタ914の出力であり、Dsl1[7:4]が第2左デジットセレクタ915の出力であり、Dsl1[3:0]が第3左デジットセレクタ916の出力である。
表1に示すように、左シフト時、sa4[5:2]が「0000」の時、デジットシフト信号sel4a[0]が「1」で、Dsl1[11:8]〜Dsl1[3:0]は、第10デジットD[39:36]〜第8デジットD[31:28]となる。また、左シフト時、sa4[5:2]が「0000」の時、デジットシフト信号sel4a[1]が「1」で、Dsl1[11:8]〜Dsl1[3:0]は、第9デジットD[35:32]〜第7デジットD[27:24]となる。これに対して、右シフト時、sa4[5:2]が「0000」の時、デジットシフト信号sel4a[0]が「1」で、Dsr1[11:8]〜Dsr1[3:0]は、第11デジットD[43:40]〜第9デジットD[35:32]となる。また、右シフト時、sa4[5:2]が「0001」の時、デジットシフト信号sel4a[1]が「1」で、Dsr1[11:8]〜Dsr1[3:0]は、第12デジットD[47:44]〜第10デジットD[39:36]となる。
図4は、第2左シフトセレクタ912の内部回路ブロック図である。
第2左シフトセレクタ912は、それぞれが4:1セレクタである第1セレクタ9121〜第8セレクタ9128を有する。第1セレクタ9121〜第8セレクタ9128のそれぞれは、ビットシフト信号sel4b[3:0]に応じて4つのデータから1つのデータを選択する。第1セレクタ9121は、第1左シフトデータDsl1[11:8]から何れか1つを選択する。第2セレクタ9122は、第1左シフトデータDsl1[10:7]から何れか1つを選択する。第3セレクタ9123は、第1左シフトデータDsl1[9:6]から何れか1つを選択する。第4セレクタ9124は、第1左シフトデータDsl1[8:5]から何れか1つを選択する。第5セレクタ9125は、第1左シフトデータDsl1[7:4]から何れか1つを選択する。第6セレクタ9126は、第1左シフトデータDsl1[6:3]から何れか1つを選択する。第7セレクタ9127は、第1左シフトデータDsl1[5:2]から何れか1つを選択する。第8セレクタ9128は、第1左シフトデータDsl1[4:1]から何れか1つを選択する。
第2右シフトセレクタ922は、第2左シフトセレクタ912と同じ構成を有し、入力が異なるのみである。
表2に、第5シフト方向制御信号dir4、第5シフト量制御信号sa4[1:0]、ビットシフト信号sel4b[3:0]、及び左右シフトセレクタ930が選択するデータとの関係を示す真理値表を示す。
表2において、「L」が左シフトの場合を、「R」が右シフトの場合を示す。
次に、処理例を具体的に説明する。
図5(a)は左シフト部910の処理の一例を示す図であり、図5(b)は左シフト部910の処理の他の例を示す図である。図5(a)は、ビット群D[13:6]を26ビット左シフトして第2左シフトデータDsl2[7:0]として左シフト部910が出力する処理を示す図である。図5(b)は、ビット群D[7:0]を35ビット左シフトして第2左シフトデータDsl2[7:0]として左シフト部910が出力する処理を示す図である。
26ビット左シフトする場合、第1左シフトセレクタ911が6デジット左シフトした後に、第2左シフトセレクタ912が2ビット左シフトする。第1左シフトセレクタ911は、[6]が「1」であり他のビットのデータが「0」であるデジットシフト信号sel4[15:0]が入力され、第1左シフトデータDsl1[11:0]として入力データD[15:4]を選択する。すなわち、第1左デジットセレクタ914はD[15:12]を選択し、第2左デジットセレクタ915はD[11:8]を選択し、第1左デジットセレクタ914はD[7:4]を選択する。次いで、第2左シフトセレクタ912は、[2]が「1」であり他のビットのデータが「0」であるビットシフト信号sel4[3:0]が入力され、入力データD[13:6]を第2左シフトデータDsl2[7:0]として選択する。
35ビット左シフトする場合、第1左シフトセレクタ911が8デジット左シフトした後に、第2左シフトセレクタ912が3ビット左シフトする。第1左シフトセレクタ911は、[8]が「1」であり他のビットのデータが「0」であるデジットシフト信号sel4[15:0]が入力され、第1左シフトデータDsl1[11:4]として入力データD[7:0]を選択する。すなわち、第1左デジットセレクタ914はD[7:4]を選択し、第2左デジットセレクタ915はD[3:0]を選択する。第1左シフトデータDsl1[11:0]の中間デジットとして最下位デジットである第1デジットD[3:0]を選択したので、第1左シフトデータDsl1[11:0]の下位デジットは空欄になる。このとき、第3左デジットセレクタ916は、「0000」を第1左シフトデータDsl1[11:0]の下位デジットDsl1[3:0]として出力する。次いで、第2左シフトセレクタ912は、[3]が「1」であり他のビットのデータが「0」であるビットシフト信号sel4[3:0]が入力され、第2左シフトデータDsl2[7:3]として入力データD[4:0]を選択する。また、第2左シフトセレクタ912は、第2左シフトデータDsl2[2:0]のそれぞれのデータとして「0」を選択する。
図6(a)は右シフト部920の処理の一例を示す図であり、図6(b)は右シフト部920の処理の他の例を示す図である。図6(a)は、ビット群D[61:54]を22ビット右シフトして第2右シフトデータDsr2[8:0]として右シフト部920が生成する処理を示す図である。図6(b)は、ビット群D[63:56]を25ビット右シフトして第2右シフトデータDsr2[8:0]として右シフト部920が生成する処理を示す図である。
22ビット右シフトする場合、第1右シフトセレクタ921が5デジット右シフトした後に、第2右シフトセレクタ922が2ビット右シフトする。第1右シフトセレクタ921は、[5]が「1」であり他のビットのデータが「0」であるデジットシフト信号sel4[15:0]が入力され、第1右シフトデータDsr1[11:0]として入力データD[63:52]を選択する。すなわち、第1右デジットセレクタ924はD[63:60]を選択し、第2右デジットセレクタ925はD[59:56]を選択し、第1右デジットセレクタ924はD[55:52]を選択する。次いで、第2右シフトセレクタ922は、[2]が「1」であり他のビットのデータが「0」であるビットシフト信号sel4[3:0]が入力され、入力データD[61:54]を第2右シフトデータDsr2[7:0]として選択する。
25ビット右シフトする場合、第1右シフトセレクタ921が6デジット右シフトした後に、第2右シフトセレクタ922が1ビット右シフトする。第1右シフトセレクタ921は、[6]が「1」であり他のビットのデータが「0」であるデジットシフト信号sel4[15:0]が入力され、第1右シフトデータDsr1[7:0]として入力データD[63:56]を選択する。すなわち、第2右デジットセレクタ925はD[63:56]を選択し、第3右デジットセレクタ926はD[55:52]を選択する。第1右シフトデータDsr1[11:0]の中間デジットとして最上位デジットである第16デジットD[63:60]を選択したので、第1右シフトデータDsr1[11:0]の上位デジットDsr1[11:8]は空欄になる。このとき、第1右デジットセレクタ924は、「0000」を第1右シフトデータDsr1[11:0]の上位デジットDsr1[11:8]として出力する。次いで、第2右シフトセレクタ922は、[1]が「1」であり他のビットのデータが「0」であるビットシフト信号sel4[3:0]が入力され、第2右シフトデータDsr2[6:0]として入力データD[63:57]を選択する。また、第2右シフトセレクタ922は、第2右シフトデータDsr2[7]のMSBのデータとして「0」を選択する。
図7は、第5シフト回路905の処理フローを示すフローチャートである。
まず、ステップS101において、第5シフト量制御信号sa4[5:0]がシフト制御部940に入力されると共に、第5シフト方向制御信号dir4が左右シフトセレクタ930に入力される。シフト制御部940は、第5シフト量制御信号sa4[5:0]が入力されると、第5シフト量制御信号sa4[5:2]に応じたデジットシフト信号sel4a[15:0]を生成し、第1左シフトセレクタ911及び第1右シフトセレクタ921に出力する。また、シフト制御部940は、第5シフト量制御信号sa4[1:0]に応じたビットシフト信号sel4b[3:0]を生成し、第2左シフトセレクタ912及び第2右シフトセレクタ922に出力する。
次いで、ステップS102において、64ビットのビット列である入力データD[63:0]が第1左シフトセレクタ911及び第1右シフトセレクタ921に入力される。
次いで、ステップS103及びS104において、第1左シフトセレクタ911及び第1右シフトセレクタ921は、入力されたデジットシフト信号sel4a[15:0]に応じてデジット単位でシフトした3デジットのサブビット列を生成し、出力する。第1左シフトセレクタ911は、左シフトした3デジットのサブビット列を生成し、第1左シフトデータDsl1[11:0]として出力する。また、ステップS104において、第1右シフトセレクタ921は、右シフトした3デジットのサブビット列を生成し、第1右シフトデータDsr1[11:0]として出力する。
次いで、ステップS105及びS106において、第2左シフトセレクタ912及び第2右シフトセレクタ922は、入力されたビットシフト信号sel4b[3:0]に応じてビット単位でシフトした1バイトのビット群を生成し、出力する。ステップS105において、第2左シフトセレクタ912は、第1左シフトデータDsl1[11:0]から1バイトのビット群を生成し、第2左シフトデータDsl2[7:0]として出力する。また、ステップS106において、第2右シフトセレクタ922は、第1右シフトデータDsr1[11:0]から1バイトのビット群を生成し、第2右シフトデータDsr2[7:0]として出力する。
そして、ステップS107において、左右シフトセレクタ930は、入力された第5シフト方向制御信号dir4に応じて第2左シフトデータDsl2[7:0]又は第2右シフトデータDsr2[7:0]を選択し、出力データR[39:32]として出力する。
第1シフト回路901〜第4シフト回路904及び第6シフト回路906〜第8シフト回路908のそれぞれは第5シフト回路905と対応する構成を有するため、構成及び機能の詳細な説明は省略する。
第1シフト回路901〜第8シフト回路908のそれぞれは、第1シフト量制御信号sa0[5:2]〜第8シフト量制御信号sa7[5:2]に応じて入力データD[63:0]に含まれるサブビット列をデジット単位でシフトする。第1シフト回路901〜第8シフト回路908のそれぞれは、第1シフト量制御信号sa0[1:0]〜第8シフト量制御信号sa7[1:0]に応じて入力データD[63:0]に含まれるビット群をビット単位でシフトする。第1シフト回路901〜第8シフト回路908のそれぞれは、第1シフト方向制御信号dir1〜第8シフト方向制御信号dir7に応じて入力データD[63:0]に含まれるビット群をシフトするシフト方向を選択する。シフト回路900は、入力データD[63:0]に含まれるビット群を左シフト又は右シフトすることができる。
図8は、シフト回路900によるデータシフトの一例を示す図である。
図8では、入力データD[63:0]の最上位バイトがビット群「A0」であり、最上位バイトから2バイト目がビット群「B0」であり、最上位バイトから3バイト目がビット群「A1」であり、最上位バイトから4バイト目がビット群「B1」である。また、入力データD[63:0]の最上位バイトから5バイト目がビット群「A2」であり、最上位バイトから6バイト目がビット群「B2」であり、最上位バイトから7バイト目がビット群「A3」であり、最下位バイトがビット群「B3」である。第1シフト回路901は入力データD[7:0]に位置するビット群「B3」をシフトせずに出力データR[7:0]として出力する。第2シフト回路902〜第8シフト回路908についても同様である。
シフト回路900は、64ビットのビット列である入力データD[63:0]を3段のシフト回路により双方向にシフト可能である。シフト回路900は、同一の構成を有するシフト回路である第1シフト回路901〜第8シフト回路908により形成されるので、構成素子間の配線が比較的簡明になる。しかしながら、シフト回路900は、左シフト用の左シフト部910及び右シフト用の右シフト部920の2つのシフト回路を有しているため、回路面積が大きくなる。また、シフト回路900は、入力データD[63:0]を入力するための配線が左シフト部910及び右シフト部920の双方に分かれて配線されるため配線面積も大きくなるので、自動配置配線ツールで配置配線したときに集積度が低くなるおそれがある。
シフト回路では、上記問題を解決し、シフト回路900よりも回路面積が小さく且つ自動配置配線ツールで配置配線したときに集積度を比較的高くすることが好ましい。
実施形態に係るシフト回路では、第2シフトセレクタは、第1シフトセレクタがシフトしたサブビット列に含まれる対象入力ビット群を、対象入力ビット群の一方の端がシフト部の出力ビット位置の一方の端に一致するように、一方向に1ビット単位でシフトする。実施形態に係るシフト回路では、一方向のビットシフト回路で双方向シフトを実現しているため、左シフト部と右シフト部の2つのシフト回路を有する関連するシフト回路900と比較して回路面積を小さくすることができる。
図9は、第1実施形態に係るシフト回路の回路ブロック図である。
シフト回路1は、第1シフト回路11〜第8シフト回路18を有する。第1シフト回路11〜第8シフト回路18のそれぞれは、64ビットの入力データD[63:0]が入力され、入力データD[63:0]の何れか1バイトの一連のビット群を上位方向又は下位方向にシフトしたビット群を出力データとしてそれぞれ出力する。
第1シフト回路11は、第1シフト量制御信号sa0[5:0]及び第1シフト方向制御信号dir0に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[7:0]として出力する。第2シフト回路12は、第2シフト量制御信号sa1[5:0]及び第2シフト方向制御信号dir1に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[15:8]として出力する。第3シフト回路13は、第3シフト量制御信号sa2[5:0]及び第3シフト方向制御信号dir2に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[23:16]として出力する。第4シフト回路14は、第4シフト量制御信号sa3[5:0]及び第4シフト方向制御信号dir3に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[31:24]として出力する。第5シフト回路15は、第5シフト量制御信号sa4[5:0]及び第5シフト方向制御信号dir4に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[39:32]として出力する。第6シフト回路16は、第6シフト量制御信号sa5[5:0]及び第6シフト方向制御信号dir5に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[47:40]として出力する。第7シフト回路17は、第7シフト量制御信号sa6[5:0]及び第7シフト方向制御信号dir6に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[55:48]として出力する。第8シフト回路18は、第8シフト量制御信号sa7[5:0]及び第8シフト方向制御信号dir7に基づいて入力データD[63:0]の何れか1バイトのビット群をシフトして出力データR[63:56]として出力する。
以下、第5シフト回路15を例として、第1シフト回路11〜第8シフト回路18の構成及び機能について説明する。
図10は、第5シフト回路15の内部回路ブロック図である。
第5シフト回路15は、シフト部20と、シフト制御部30とを有する。
シフト部20は、第1シフトセレクタ21と、第2シフトセレクタ22とを有する。第1シフトセレクタ21は、デジットシフト信号sel4a[17:0]に基づいて、入力データD[63:0]の何れか3デジットのサブビット列をデジット単位で左シフト又は右シフトした3デジットの第1シフトデータDs1[11:0]を生成する。サブビット列である第1シフトデータDs1[11:0]は、出力データとして選択されるビット群と、ビット群に隣接するビットである隣接ビット群とを含む。第2シフトセレクタ22は、第1シフトセレクタ21が生成した第1シフトデータDs1[11:0]に含まれる1バイトのビット群をビット単位で左シフトして出力データR[39:32]を生成する。
シフト制御部30は、第5シフト方向制御信号dir4と、第5シフト量制御信号sa4[5:0]とに応じて、デジットシフト信号sel4a[17:0]及びビットシフト信号sel4b[4:0]を生成する。シフト制御部30は、第5シフト方向制御信号dir4が「0」のとき、第1シフトセレクタ21が入力データD[63:0]の何れかのサブビット列を左シフトして第1シフトデータとして出力するデジットシフト信号sel4a[17:0]を生成する。シフト制御部30は、第5シフト方向制御信号dir4が「1」のとき、第1シフトセレクタ21が入力データD[63:0]の何れかのサブビット列を右シフトして第1シフトデータとして出力するデジットシフト信号sel4a[17:0]を生成する。
シフト制御部30は、第5シフト方向制御信号dir4が「0」のとき、第1シフトデータに含まれるビット群を第5シフト量制御信号sa4[1:0]に応じて左シフトして出力データとして生成するビットシフト信号sel4b[4:0]を生成する。例えば、第5シフト量制御信号sa4[1:0]が「01」のとき、シフト制御部30は、第2シフトセレクタ22がビット群を1ビット左シフトする信号を生成する。
シフト制御部30は、第5シフト方向制御信号dir4が「1」のとき、第1シフトデータに含まれるビット群を第5シフト量制御信号sa4[1:0]の2の補数に応じて左シフトして出力データとして生成するビットシフト信号sel4b[4:0]を生成する。例えば、第5シフト量制御信号sa4[1:0]が「10」のとき、シフト制御部30は、第2シフトセレクタ22が「10」の2の補数である「10」に対応する2ビット、ビット群を左シフトする信号を生成する。
シフト制御部30が生成するデジットシフト信号sel4a[17:0]及びビットシフト信号sel4b[4:0]と、ビッド群のシフトについては後述する。
図11(a)は第1シフトセレクタ21の内部回路ブロック図であり、図11(b)はデジットデータを示す図であり、図11(c)は図11(a)に示す第1デジットセレクタの内部ブロック図である。
第1シフトセレクタ21は、第1デジットセレクタ24と、第2デジットセレクタ25と、第3デジットセレクタ26と、を有する。
図11(b)に示すように、入力データD[63:0]は、16個のデジットデータである第1デジットD[3:0]〜第16デジットD[63:60]に分割され、4つの16ビットのデータとなる。これは、図3(b)で説明したものと同様である。
図11(c)に示すように、第1デジットセレクタ24は、第1セレクタ241と、第2セレクタ242と、第3セレクタ243と、第4セレクタ244とを有する。第1セレクタ241、第2セレクタ242、第3セレクタ243及び第4セレクタ244のそれぞれは、17:1セレクタであり、第5シフト方向制御信号dir4及びデジットシフト信号sel4a[15:0]が入力される。第1セレクタ241は、これらの信号に基づいて、第1デジットD[3:0]〜第16デジットD[63:60]のMSBのデータ又は「0」を第1シフトデータDs1[11]として選択し、出力する。第2セレクタ242は、第1デジットD[3:0]〜第16デジットD[63:60]のMSBの1ビット下位のビットのデータ又は「0」を第1シフトデータDs1[10]として選択し、出力する。第3セレクタ243は、第1デジットD[3:0]〜第16デジットD[63:60]のMSBの2ビット下位のビットのデータ又は「0」を第1シフトデータDs1[9]として選択し、出力する。第4セレクタ244は、第1デジットD[3:0]〜第16デジットD[63:60]のLSBのデータ又は「0」を第1シフトデータDs1[8]として選択し、出力する。
第1デジットセレクタ24は、第5シフト方向制御信号dir4及びデジットシフト信号sel4a[15:0]に基づいて、第1シフトデータDs1[11:0]の上位デジットである第1シフトデータDs1[11:8]を選択し、出力する。デジットシフト信号sel4a[15:0]が示すシフトが大きく、第1デジットセレクタ24が選択するデジットがない場合、第1デジットセレクタ24は、「0000」を第1シフトデータDs1[11:8]として出力する。
第2デジットセレクタ25は、第1デジットセレクタ24と同一の構成を有する。第2デジットセレクタ25には、第5シフト方向制御信号dir4及びデジットシフト信号sel4a[16:1]が入力される。第2デジットセレクタ25は、これらの信号に基づいて、第1デジットセレクタ24が選択したデジットの1デジット下位のデジットを選択し、第1シフトデータDs1[7:4]として出力する。デジットシフト信号sel4a[16:1]が示すシフトが大きく、第2デジットセレクタ25が選択するデジットがない場合、第2デジットセレクタ25は、「0000」を第1シフトデータDs1[7:4]として出力する。後述するように、デジットシフト信号sel4a[17:0]は、何れか1ビットが「1」で、他が「0」の信号であり、第1デジットセレクタ24に入力される信号に対して1ビットずれた信号であり、これにより、選択するデジットの位置が異なる。これは、第3デジットセレクタ26についても同様である。
第3デジットセレクタ26は、第1デジットセレクタ24と同一の構成を有する。第3デジットセレクタ26には、第5シフト方向制御信号dir4及びデジットシフト信号sel4a[17:2]が入力される。第3デジットセレクタ26は、これらの信号に基づいて、第1デジットセレクタ24が選択したデジットの2デジット下位のデジットを選択し、第1シフトデータDs1[3:0]として出力する。デジットシフト信号sel4a[17:2]が示すシフトが大きく、第3デジットセレクタ26が選択するデジットがない場合、第3デジットセレクタ26は「0000」を第1シフトデータDs1[3:0]として出力する。
表3に、第5シフト方向制御信号dir4、第5シフト量制御信号sa4[5:2]、デジットシフト信号sel4a[17:0]、第1シフトデータDs1[11:0]の関係を示す真理値表を示す。
表3において、「L」が左シフト時を、「R」が右シフト時を示す。Ds1[11:8]が第1デジットセレクタ24の出力であり、Ds1[7:4]が第2デジットセレクタ25の出力であり、Ds1[3:0]が第3デジットセレクタ26の出力である。
表3に示すように、第5シフト方向制御信号dir4が「0」、sa4[5:2]が「0000」の時、デジットシフト信号sel4a[9]が「1」で、それ以外のsel4a[17]−[10]及び[8]−[0]は「0」となる。これに応じて、第1デジットセレクタ24−26は、第10デジットD[39:36]〜第8デジットD[31:28]を選択して、Dsl1[11:8]〜Dsl1[3:0]として出力する。また、sa4[5:2]が「0001」の時、デジットシフト信号sel4a[8]が「1」で、Dsl1[11:8]〜Dsl1[3:0]は、第9デジットD[35:32]〜第7デジットD[27:24]となる。これに対して、第5シフト方向制御信号dir4が「1」、sa4[5:2]が「0000」の時、デジットシフト信号sel4a[10]が「1」で、それ以外のsel4a[17]−[11]及び[9]−[0]は「0」となる。これに応じて、第1デジットセレクタ24−26は、第11デジットD[43:40]〜第9デジットD[35:32]を選択して、Dsl1[11:8]〜Dsl1[3:0]として出力する。このように、デジットシフト量が同じであっても、左シフトと右シフトで、選択するデジットが異なる。
図12は、第2シフトセレクタ22の内部回路ブロック図である。
第2シフトセレクタ22は、5:1セレクタである第1セレクタ221〜第8セレクタ228を有する。第1セレクタ221〜第8セレクタ228のそれぞれは、ビットシフト信号sel4b[4:0]に応じて5つのデータから1つのデータを選択する。第1セレクタ221は、第1シフトデータDs1[11:7]から何れか1つを選択して出力データR[39]として出力する。第2セレクタ222は、第1シフトデータDs1[10:6]から何れか1つを選択して出力データR[38]として出力する。第3セレクタ223は、第1シフトデータDs1[9:5]から何れか1つを選択して出力データR[37]として出力する。第4セレクタ224は、第1シフトデータDs1[8:4]から何れか1つを選択して出力データR[36]として出力する。第5セレクタ225は、第1シフトデータDs1[7:3]から何れか1つを選択して出力データR[35]として出力する。第6セレクタ226は、第1シフトデータDs1[6:2]から何れか1つを選択して出力データR[34]として出力する。第7セレクタ227は、第1シフトデータDs1[5:1]から何れか1つを選択して出力データR[33]として出力する。第8セレクタ228は、第1シフトデータDs1[4:0]から何れか1つを選択して出力データR[32]として出力する。表4に、ビットシフト信号sel4b[4:0]と第1セレクタ221〜第8セレクタ228が選択するデータとの関係を示す真理値表を示す。
図13は、シフト制御部30の生成したビットシフト信号sel4b[4:0]による第2シフトセレクタ22におけるビットシフトを示す図である。図13(a)は第5シフト方向制御信号dir4が「0」である左シフトを示す図であり、図13(b)は第5シフト方向制御信号dir4が「1」である右シフトを示す図である。図13(a)では、説明を簡単にするため、第1シフトセレクタ21におけるデジットシフト量は0としている。すなわち、第5シフト量制御信号sa4[5:2]は「0000」であり、左シフトのときはデジットシフト信号sel4a[9]が「1」であり、右シフトのときはデジットシフト信号sel4a[10]が「1」である。左シフトのときは、サブビット列D[39:28]が第1データシフトデータ[11:0]として出力され、右シフトのときは、サブビット列D[40:32]が第1データシフトデータ[11:0]として出力される。
第5シフト方向制御信号dir4が左シフトを示すとき、シフト制御部30は、第5シフト量制御信号sa4[1:0]に応じて第1データシフトデータ[11:0]に含まれるビット群を左シフトするビットシフト信号sel4b[4:0]を生成する。第5シフト方向制御信号dir4が右シフトを示すとき、シフト制御部30は、第5シフト量制御信号sa4[1:0]の2の補数に応じて第2シフトセレクタ22がビット群を左シフトするようなビットシフト信号sel4b[4:0]を生成する。
図14は第5シフト回路15の処理フローを示すフローチャートである。
まず、ステップS301において、シフト制御部30は、入力される第5シフト量制御信号sa4[5:0]及び第5シフト方向制御信号dir4に応じたデジットシフト量及びビットシフト量を決定する。シフト制御部30は、決定したデジットシフト量に対応するデジットシフト信号sel4a[17:0]を第1シフトセレクタ21に、決定したビットシフト量に対応するビットシフト信号sel4b[4:0]を第2シフトセレクタ22に出力する。
次いで、ステップS302において、第1シフトセレクタ21は、デジットシフト信号sel4a[17:0]に応じてデジット単位でシフトしたサブビット列である第1シフトデータDs1[11:0]を生成し、第2シフトセレクタ22に出力する。
そして、ステップS303において、第2シフトセレクタ22は、ビットシフト信号sel4b[4:0]に応じてビット単位でシフトした1バイトのビット群を出力データR[39:32]として生成し、出力する。
図15は、左シフトと右シフトでのデジットの選択とビットシフトの違いを説明する図である。
図15では、例えば、入力データ列のビット群[39:32]を選択し、出力データR[39:32]として出力される。言い換えれば、デジットシフト量及びビットシフト量が共に「0」の場合であるが、左シフトまたは右シフトされる場合も同様である。図15において、(1)は、対象となる入力データの範囲を示す。また、(2)は左シフトのときに第1シフトデータDs1[11:0]として選択される入力データの範囲を示し、(3)は右シフトのときに第1シフトデータDs1[11:0]として選択される入力データの範囲を示す。
図15において、(4)は第1シフトデータDs1[11:0]のビットと選択される入力データD[63:0]との対応関係を示す。左シフトで且つデジットシフト量が「0」のとき、第1シフトデータDs1[11:0]としてサブビット列D[39:28]が選択される。一方、右シフトで且つデジットシフト量が「0」のとき、第1シフトデータDs1[11:0]としてサブビット列D[43:32]が選択される。このように、第10デジットD[39:36]が上位デジットになるように選択する場合でも、左シフトの場合は、第10デジットD[39:36]は上位デジットで、右シフトの場合は、第10デジットD[39:36]は中間デジットで選択される。なお、ビット群[38:31]〜[36:29]を選択する場合も、サブビット列D[39:28]が選択される。また、ビット群[42:35]〜[40:33]を選択する場合も、サブビット列D[43:32]が選択される。
図15において、(5)〜(8)のそれぞれは、左シフトのときの第2シフトセレクタ22におけるビットシフトを示す。左シフトのとき、第2シフトセレクタ22は、シフトさせるビット数に応じたビットシフト量で第1シフトデータDs1[11:0]に含まれるビット群を左シフトして出力データR[39:32]として出力する。
図15において、(9)〜(12)のそれぞれは、右シフトのときの第2シフトセレクタ22におけるビットシフトを示す。右シフトのとき、第2シフトセレクタ22は、シフトさせるビット数の2の補数に応じたビットシフト量で第1シフトデータDs1[11:0]に含まれるビット群を左シフトする。
図15において、(13)〜(16)は、第2シフトセレクタ22における左シフト及び右シフトをまとめて示す。まず、左シフト時について説明する。第2シフトセレクタ22は、第1シフトデータDs1[11:0]に含まれるビット群[39:32]を0ビット左シフトして出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]をビットシフトしない。以下同様に、ビット群[38:31]を出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を1ビット左シフトする。ビット群[37:30]を出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を2ビット左シフトする。ビット群[36:29]を出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を3ビット左シフトする。
次に、右シフト時について説明する。第2シフトセレクタ22は、第1シフトデータDs1[11:0]に含まれるビット群[39:32]を0ビット右シフトして出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を4ビット左シフトする。第2シフトセレクタ22がビット群[39:32]左シフトするビット数である4ビットは、「00」の2の補数に対応する。以下同様に、ビット群[40:33]を出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を「01」の2の補数に対応する3ビット左シフトする。ビット群[41:34]を出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を「10」の2の補数に対応する2ビット左シフトする。ビット群[42:35]を出力データR[39:32]として出力するとき、第1シフトデータDs1[11:0]を「11」の2の補数に対応する1ビット左シフトする。
図16(a)は第5シフト回路15の左シフト処理の一例を示す図であり、図16(b)は第5シフト回路15の左シフト処理の他の例を示す図である。図16(a)は、ビット群D[13:6]を26ビット左シフトして出力データR[39:32]として第5シフト回路15が出力する処理を示す図である。図16(b)は、ビット群D[4:0]を35ビット左シフトして出力データR[39:32]として第5シフト回路15が出力する処理を示す図である。
26ビット左シフトする場合、6デジット左シフトし2ビット左シフトするので、シフト制御部30は、第5シフト量制御信号sa4[5:0]として「011010」が入力されると共に第5シフト方向制御信号dir4として「0」が入力される。シフト制御部30は、[3]が「1」であり他のビットが「0」であるデジットシフト信号sel4a[17:0]を生成し、第1シフトセレクタ21に出力する。シフト制御部30は、[2]が「1」であり他のビットが「0」であるビットシフト信号sel4b4[4:0]を生成し、第2シフトセレクタ22に出力する。第1シフトセレクタ21は、第1左シフトデータDs1[11:0]として入力データD[15:4]を選択する。次いで、第2シフトセレクタ22は、入力データD[13:6]を出力データR[39:32]として選択する。
35ビット左シフトする場合、8デジット左シフトし3ビット左シフトするので、シフト制御部30は、第5シフト量制御信号sa4[5:0]として「100011」が入力されると共に第5シフト方向制御信号dir4として「0」が入力される。シフト制御部30は、[1]が「1」であり他のビットが「0」であるデジットシフト信号sel4a[17:0]を生成し、第1シフトセレクタ21に出力する。シフト制御部30は、[3]が「1」であり他のビットが「0」であるビットシフト信号sel4b4[4:0]を生成し、第2シフトセレクタ22に出力する。第1シフトセレクタ21は、第1左シフトデータDs1[11:4]として入力データD[7:0]を選択し、第1左シフトデータDs[3:0]のそれぞれのデータとして「0」を選択する。次いで、第2左シフトセレクタ22は、第2シフトデータ出力データR[39:35]として入力データD[4:0]を選択し、出力データR[34:32]のそれぞれのデータとして「0」を選択する。
図17(a)は第5シフト回路15の右シフト処理の一例を示す図であり、図17(b)は第5シフト回路15の右シフト処理の他の例を示す図である。図17(a)は、ビット群D[61:54]を22ビット右シフトビット群出力データR[39:32]として第5シフト回路15が出力する処理を示す図である。図17(b)は、ビット群D[63:57]を25ビット右シフトして出力データR[39:32]として第5シフト回路15が出力する処理を示す図である。
22ビット右シフトする場合、5デジット右シフトし2ビット右シフトするので、シフト制御部30は、第5シフト量制御信号sa4[5:0]として「010110」が入力されると共に第5シフト方向制御信号dir4として「1」が入力される。シフト制御部30は、[15]が「1」であり他のビットが「0」であるデジットシフト信号sel4a[17:0]を生成し、第1シフトセレクタ21に出力する。シフト制御部30は、[2]が「1」であり他のビットが「0」であるビットシフト信号sel4b4[4:0]を生成し、第2シフトセレクタ22に出力する。第1シフトセレクタ21は、第1シフトデータDs1[11:0]として入力データD[63:52]を選択する。次いで、第2シフトセレクタ22は、入力データD[61:54]を出力データR[34:32]として選択する。
25ビット右シフトする場合、4デジット右シフトし1ビット右シフトするので、シフト制御部30は、第5シフト量制御信号sa4[5:0]として「011001」が入力されると共に第5シフト方向制御信号dir4として「1」が入力される。シフト制御部30は、[16]が「1」であり他のビットが「0」であるデジットシフト信号sel4a[17:0]を生成し、第1シフトセレクタ21に出力する。シフト制御部30は、[3]が「1」であり他のビットが「0」であるビットシフト信号sel4b4[4:0]を生成し、第2シフトセレクタ22に出力する。第1シフトセレクタ21は、第1シフトデータDs1[7:0]として入力データD[63:56]を選択し、第1シフトデータDs1[11:8]のそれぞれのデータとして「0」を選択する。次いで、第2シフトセレクタ22は、出力データR[38:32]として入力データD[63:57]を選択し、出力データR[39]のデータとして「0」を選択する。
第1シフト回路11〜第4シフト回路14及び第6シフト回路16〜第8シフト回路18のそれぞれは第5シフト回路15と対応する構成を有するため、構成及び機能の詳細な説明は省略する。
以上説明したように、シフト回路1は、入力データD[63:0]に含まれるバイト長を跨ぐビット群を左シフト又は右シフトすることができるので、ビット群単位で並び替えが可能である。
さらに、シフト回路1は、一方向のビットシフト回路で双方向シフトを実現しているため、左シフト部と右シフト部の2つのシフト回路を有する関連するシフト回路900と比較して回路面積を小さくすることができる。特許文献1に記載されたシフト回路も同様に、左ビットシフトと右ビットシフトを別々の行っていると考えられるので、シフト回路1は、特許文献1に記載されたシフト回路に比べて回路面積を小さくすることができる。
また、シフト部20は、2段のシフト回路で形成されるので、3段のシフト回路で形成される関連するシフト回路900よりも高速で双方向シフトを実現できる。また、シフト回路1では、第1シフト回路11〜第8シフト回路18は、同じ回路構成で実現できるため、回路設計が容易である。このため、シフト回路1は、2つのシフト回路を有する関連するシフト回路900と比較して自動配置配線ツールで配置配線したときに集積度が高くなる。
図18は、第2実施形態に係るシフト回路の回路ブロック図である。
第2実施形態のシフト回路は、64ビットの入力データ列に4ビットごとに1ビットのパリティが追加された80ビットのデータ列が入力される。第2実施形態のシフト回路では、各シフト回路が8ビットのビット群および対応する2ビットのパリティビットを選択し、選択した8ビットのビット群にパリティプリディクションの結果を付加して出力することが第1実施形態と相違する。
第2実施形態のシフト回路2は、第1シフト回路31〜第8シフト回路38を有する。第1〜第8シフト回路31〜38のそれぞれは、入力パリティデータD[15:0]が入力され、出力する8ビットのデータに対応する2ビットのパリティビットを選択する。したがって、シフト回路2は、並び替えた出力データR[63:0]及び出力パリティデータRDP[15:0]を出力する。
以下、第5シフト回路35を例として、第1シフト回路31〜第8シフト回路38の構成及び機能について説明する。
図19は、第5シフト回路35の内部回路ブロック図である。
第5シフト回路35は、シフト部40と、シフト制御部30と、を有する。シフト制御部30は、第1実施形態のものと同じである。シフト部40は、第1シフトセレクタ41と、第2シフトセレクタ22と、パリティ回路43と、パリティ選択回路47と、を有する。第2シフトセレクタ22は、第1実施形態のものと同じである。第1シフトセレクタ41は、第1実施形態と同様に3デジットのデータ群を選択すると共に、選択するデータ群に対応する3ビットのパリティビットを入力パリティデータD[15:0]から選択する。第1シフトセレクタ41は、選択した3デジットのデータ群および3ビットのパリティビットを、第1シフトデータDs1「11:0」及び第1シフトパリティデータDsp[2:0]として出力する。パリティ回路43は、第1シフトデータDs1「11:0」、第1シフトパリティデータDsp[2:0]及び第5シフト方向制御信号dir4とを使用してパリティプリディクションを実行する。パリティ回路43は、第20シフトパリティDsp0[1:0]〜第24シフトパリティDsp4[1:0]を実行したパリティプリディクションの結果として生成する。パリティ選択回路47は、第5シフト方向制御信号dir4に基づいて第20シフトパリティDsp0[1:0]〜第24シフトパリティDsp4[1:0]の1つを選択して出力パリティデータRDP[9:8]を出力する。
図20(a)は第1シフトセレクタ41の内部回路ブロック図であり、図20(b)は図20(a)に示す第1デジットセレクタの内部ブロック図である。
第1シフトセレクタ41は、第1デジットセレクタ44〜第3デジットセレクタ46を有する。第1デジットセレクタ44〜第3デジットセレクタ46は、3デジットのデータ群と共に、入力パリティデータD[15:0]から3ビットのパリティビットを選択する。
第1デジットセレクタ44は、デジットシフト信号sel4a[15:0]に基づいて第1デジットD[3:0]〜第16デジットD[63:60]の何れか、及び対応するパリティ用データ又は「0」を選択する。第1デジットセレクタ44は、選択したデジットを第1シフトデータDs1[11:8]として、選択したパリティ用データ又は「0」をシフトパリティデータDsp[2]として出力する。例えば、第1デジットセレクタ44は、デジットシフト信号sel4a[15:0]が第1デジットD[3:0]を選択することを示すとき、第1デジットD[3:0]のパリティプリディクション用データを選択する。第1デジットセレクタ44が選択するデジットがなく第1シフトデータDs1[11:8]として「0000」が出力される場合、第1デジットセレクタ44は、「0」をシフトパリティデータDsp[2]として出力する。
第2デジットセレクタ45は、第1デジットセレクタ44と同一の構成を有する。第2デジットセレクタ45は、デジットシフト信号sel4a[16:1]に基づいて第1デジットD[3:0]〜第16デジットD[63:60]の何れか、及び対応するパリティ用データ又は「0」を選択する。第2デジットセレクタ45は、選択したデジットを第1シフトデータDs1[7:4]として、選択したパリティ用データ又は「0」をシフトパリティデータDsp[1]として出力する。
第3デジットセレクタ46は、第1デジットセレクタ44と同一の構成を有する。第3デジットセレクタ46は、デジットシフト信号sel4a[17:2]に基づいて第1デジットD[3:0]〜第16デジットD[63:60]の何れか、及び対応するパリティ用データ又は「0」を選択する。第3デジットセレクタ46は、選択したデジットを第1シフトデータDs1[3:0]として、選択したパリティ用データ又は「0」をシフトパリティデータDsp[0]として出力する。
以上の通り、第1シフトセレクタ41は、第1シフトデータDs1[11:0]の上位デジットDs1[11:8]、中間デジットDs1[7:8]及び下位デジットDs1[3:0]のパリティプリディクションの結果としてシフトパリティデータDsp[2:0]を出力する。
前述のように、パリティ回路43は、第1シフトセレクタ41から入力される第1シフトデータDs1[11:0]と、シフトパリティデータDsp[2:0]と、第5シフト方向制御信号dir4とを使用してパリティプリディクションを実行する。パリティ回路43は、第2シフトセレクタ22におけるビットシフトに応じて5つのパリティプリディクション結果である第20シフトパリティデータDsp0[1:0]〜第24シフトパリティDsp4[1:0]を生成する。
第20シフトパリティDsp0[1:0]は、第2シフトセレクタ22においてビットシフトしなかったときの出力データR[39:32]の上位デジット及び下位デジットそれぞれのパリティプリディクションの結果を示す。第21シフトパリティデータDsp1[1:0]は、第2シフトセレクタ22において1ビット左シフトしたときの出力データR[39:32]の上位デジット及び下位デジットそれぞれのパリティプリディクションの結果を示す。第22シフトパリティDsp2[1:0]は、第2シフトセレクタ22において2ビット左シフトしたときの出力データR[39:32]の上位デジット及び下位デジットそれぞれのパリティプリディクションの結果を示す。第23シフトパリティDsp3[1:0]は、第2シフトセレクタ22において3ビット左シフトしたときの出力データR[39:32]の上位デジット及び下位デジットそれぞれのパリティプリディクションの結果を示す。第24シフトパリティDsp4[1:0]は、第2シフトセレクタ22において4ビット左シフトしたときの出力データR[39:32]の上位デジット及び下位デジットそれぞれのパリティプリディクションの結果を示す。
図21は、パリティ選択回路47の内部回路ブロック図である。
パリティ選択回路47は、第1セレクタ471と、第2セレクタ472とを有する。第1セレクタ471及び第2セレクタ472のそれぞれは、ビットシフト信号sel4b[4:0]に応じて5つのデータから1つのデータを選択する。ビットシフト信号sel4b[4:0]がビットシフトしないことを示すとき、第1セレクタ471及び第2セレクタ472のそれぞれは、第20シフトパリティDsp0[1:0]を出力パリティデータRDP[9:8]として出力する。ビットシフト信号sel4b[4:0]が1ビット左シフトを示すとき、第1セレクタ471及び第2セレクタ472のそれぞれは、第21シフトパリティDsp1[1:0]を出力パリティデータRDP[9:8]として出力する。ビットシフト信号sel4b[4:0]が2ビット左シフトを示すとき、第1セレクタ471及び第2セレクタ472のそれぞれは、第22シフトパリティDsp2[1:0]を出力パリティデータRDP[9:8]として出力する。ビットシフト信号sel4b[4:0]が3ビット左シフトを示すとき、第1セレクタ471及び第2セレクタ472のそれぞれは、第23シフトパリティDsp3[1:0]を出力パリティデータRDP[9:8]として出力する。ビットシフト信号sel4b[4:0]が4ビット左シフトを示すとき、第1セレクタ471及び第2セレクタ472のそれぞれは、第24シフトパリティDsp4[1:0]を出力パリティデータRDP[9:8]として出力する。
シフト回路2では、シフト部40の第1シフトセレクタ41でシフトされた第1シフトデータDs1[11:0]に対応する第1シフトパリティDsp[2:0]を使用して、パリティ回路43がパリティプリディクションを実行する。シフト回路2では、入力データD[63:0]から選択可能な1バイトのシフト信号の全てについてパリティプリディクションを実行するのではなく、第1シフトデータDs1[11:0]から選択可能な1バイトのシフト信号についてのみパリティプリディクションを実行する。シフト回路2では、パリティプリディクションを実行する1バイトのシフト信号の数を少なくすることができるので、パリティ回路43の回路規模を削減できる。
以上、第1実施形態のシフト回路1及び第2実施形態のシフト回路について説明した。実施形態のシフト回路は、64ビットのビット列である入力データD[63:0]に含まれる1バイトのビット群をシフトさせている。しかしながら、実施形態のシフト回路は、64ビットより大きいビット列又は64ビットよりも小さいビット列に含まれるビット群をシフトさせる構成としてもよい。
シフト回路1及び2では、第1シフトセレクタ21でシフトされるサブビット列である第1シフトデータDs1[11:0]のビット量は、出力データとして出力される1バイトのビット群に1デジットの隣接ビット群を付加して生成される。しかしながら、サブビット列で付加される隣接ビット群のビット量は、ビット群のビット量に応じて、1デジットよりも多くてもよく、1デジットよりも少なくてもよい。例えば、実施形態のシフト回路は、64ビットのビット列を1バイトよりも大きいビット群ごと又は1バイトよりも小さいビット群ごとにシフトさせる構成としてもよい。実施形態のシフト回路1は、第1シフトセレクタが選択するサブビット列として3デジットの第1シフトデータDs1[11:0]が使用されるが、3デジットよりも長いサブビット列又は3デジットよりも短いサブビット列が選択される構成としてもよい。例えば、64ビットのビット列に含まれる2バイトのビット群をシフトさせる場合、第1シフトセレクタが3バイトのサブビット列を選択する構成とすることができる。
また、シフト回路1は、左方向にビット単位でビット群をシフトさせるシフト回路として第2シフトセレクタ22が配置されるが、第2シフトセレクタが右方向にビット単位でビット群をシフトさせる構成としてもよい。第2シフトセレクタが右方向にビット単位でビット群をシフトさせる場合、右シフトするときはシフトさせたい量に応じてビット群をシフトさせるが、左シフトするときはシフトさせたい量の2の補数に応じてビット群をシフトさせる構成となる。
また、シフト回路1は、第1シフト回路11〜第8シフト回路18のそれぞれがシフト制御部30を有するが、第1シフト回路11〜第8シフト回路18のそれぞれにシフト量制御信号を出力する単一のシフト制御部を有する構成としてもよい。
シフト回路1及び2は、CPU(Central Processing Unit、中央演算処理装置)等の演算装置に搭載することができる。シフト回路1及び2を搭載する演算装置は、種々のデータフォーマットのデータを高速に演算するためにデータの配列を並び替えることが可能になる。
図22は、シフト回路1を搭載した演算装置の一例を示す図である。
図22の例では、データは、2バイト単位で処理される。
演算装置50は、シフト回路1と、ラッチ回路51と、演算回路52と、制御回路53とを有する。
シフト回路1は、第1〜第8シフト量制御信号及び第1〜第8シフト方向制御信号に応じて、入力データD[63:0]内の2バイトデータをシフトすると共に2バイト毎にビットを並び替えて出力データR[63:0]として出力する。
ラッチ回路51は、第1ラッチ部511と、第2ラッチ部512と、第3ラッチ部513と、第4ラッチ部514とを有する。第1ラッチ部511はシフト回路1の出力信号R[15:0]をラッチし、第2ラッチ部512はシフト回路1の出力信号R[31:16]をラッチする。第3ラッチ部513はシフト回路1の出力信号R[47:32]をラッチし、第4ラッチ部514はシフト回路1の出力信号R[63:48]をラッチする。
演算回路52は、第1演算部521と、第2演算部522と、第3演算部523と、第4演算部524とを有する。第1演算部521は、第1ラッチ部511でラッチされた出力信号R[15:0]に所定の演算処理を実行する。第2演算部522は、第2ラッチ部512でラッチされた出力信号R[31:16]に所定の演算処理を実行する。第3演算部523は、第3ラッチ部513でラッチされた出力信号R[47:32]に所定の演算処理を実行する。第4演算部524は、第4ラッチ部514でラッチされた出力信号R[63:48]に所定の演算処理を実行する。
制御回路53は、演算回路52で実行される演算処理に応じて、シフト回路1の入力データD[63:0]を2バイトのビット群毎にビット群を並び替えると共にシフトするように第1〜第8シフト量制御信号及び第1〜第8シフト方向制御信号を出力する。
演算装置50では、シフト回路1は、8バイトの入力データD[63:0]を2バイトのビット群毎にビット群を並び替えると共にビット群毎にシフトして、第1演算部521〜第4演算部524に演算処理用のデータとしてそれぞれ出力する。