プロセッサ
【課題】 レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用する。
【解決手段】 プロセッサは、入力されたデータに対する演算を実行する演算部と、データが格納される複数の第1レジスタと、入力データ抽出部とを有している。例えば、入力データ抽出部は、演算対象のデータを含む入力ビット列が格納された第1レジスタから入力ビット列を読み出す。そして、入力データ抽出部は、予め設定された第1位置情報に基づいて、読み出した入力ビット列から演算対象のデータを抽出し、抽出した演算対象のデータを演算部のビット幅に拡張する。
【解決手段】 プロセッサは、入力されたデータに対する演算を実行する演算部と、データが格納される複数の第1レジスタと、入力データ抽出部とを有している。例えば、入力データ抽出部は、演算対象のデータを含む入力ビット列が格納された第1レジスタから入力ビット列を読み出す。そして、入力データ抽出部は、予め設定された第1位置情報に基づいて、読み出した入力ビット列から演算対象のデータを抽出し、抽出した演算対象のデータを演算部のビット幅に拡張する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサに関する。
【背景技術】
【0002】
プロセッサは、四則演算や論理演算等を行う算術論理演算ユニット(以下、ALU(Arithmetic Logic Unit)とも称する)と、レジスタとを有している。一般的に、レジスタのビット長(ビット幅)は、32ビットあるいは64ビット等である。例えば、32ビット長のレジスタを有するプロセッサでは、データサイズ(ビット幅)が32ビット未満のデータをレジスタに格納する場合、レジスタの上位ビットは、“0”あるいは符号拡張で埋められる。したがって、データサイズが小さい場合等、レジスタは、有効に使用されない。なお、8の倍数のデータサイズ(8ビットあるいは16ビット等)のデータを連続して並べてレジスタに格納し、連続するデータをそれぞれ処理するプロセッサが提案されている。
【0003】
また、可変ビット長データを扱う装置では、複数の可変ビット長データからなるビット列をデータメモリから読み出し、読み出したビット列をバレルシフタで任意のビット数だけ論理シフトして演算器に入力する構成が提案されている(例えば、特許文献1参照)。なお、特許文献1の構成では、データメモリから読み出されるビット列のビット幅は、可変ビット長データの最大ビット長(例えば、16ビット)の2倍以上(例えば、32ビット)である。また、バレルシフタによりシフトするビット数は、演算器により算出される。
【0004】
なお、複数の演算器により構成されるALUを任意のビット幅で分割し、分割したALUの演算器で複数組のデータをそれぞれ演算する構成が提案されている(例えば、特許文献2参照)。
【発明の概要】
【発明が解決しようとする課題】
【0005】
8の倍数のデータサイズ(8ビットあるいは16ビット等)のデータを連続して並べてレジスタに格納し、連続するデータをそれぞれ処理するプロセッサでは、7ビットや9ビット等の半端なデータサイズを有するデータは、8の倍数のデータサイズに拡張される。この場合、拡張されたデータの上位ビットは、“0”あるいは符号拡張で埋められている。したがって、8の倍数以外の半端なデータサイズのデータが連続する場合等、レジスタは、有効に使用されない。
【0006】
本発明の目的は、レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用することである。
【課題を解決するための手段】
【0007】
プロセッサは、入力されたデータに対する演算を実行する演算部と、データが格納される複数の第1レジスタと、入力データ抽出部とを有している。例えば、入力データ抽出部は、演算対象のデータを含む入力ビット列が格納された第1レジスタから入力ビット列を読み出す。そして、入力データ抽出部は、予め設定された第1位置情報に基づいて、読み出した入力ビット列から演算対象のデータを抽出し、抽出した演算対象のデータを演算部のビット幅に拡張する。
【発明の効果】
【0008】
レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用できる。
【図面の簡単な説明】
【0009】
【図1】一実施形態におけるプロセッサの概要を示す図である。
【図2】図1に示した制御部の一例を示す図である。
【図3】図2に示した更新部の動作の一例を示す図である。
【図4】図1に示したレジスタに格納されるデータの一例を示す図である。
【図5】図1に示した入力データ抽出部の概要を示す図である。
【図6】図1に示した出力データ生成部の概要を示す図である。
【図7】別の実施形態におけるプロセッサの概要を示す図である。
【図8】図7に示した制御部の一例を示す図である。
【図9】図7に示した更新部の動作の一例を示す図である。
【図10】図9に示した動作の続きを示す図である。
【図11】図7示した変換部の動作の一例を示す図である。
【図12】図7に示した入力データ抽出部の概要を示す図である。
【図13】図7に示した出力データ生成部の概要を示す図である。
【図14】ロード命令とレジスタの状態との関係の一例を示す図である。
【図15】図7に示したレジスタに格納されるデータの一例を示す図である。
【図16】図12に示した入力データ抽出部の動作の一例を示す図である。
【図17】図16に示した動作の続きを示す図である。
【図18】図13に示した出力データ生成部の動作の一例を示す図である。
【図19】図18に示した動作の続きを示す図である。
【図20】図19に示した動作の続きを示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態を図面を用いて説明する。
【0011】
図1は、本発明の一実施形態を示している。プロセッサ10は、実行ユニット20、レジスタファイル30、制御レジスタ40、41、42および制御部50を有している。例えば、プロセッサ10は、32ビットプロセッサであり、32ビット幅の汎用レジスタR(R0−R9)をレジスタファイル30内に有している。なお、図中の破線で囲んだ汎用レジスタR4、R6、R8は、データが格納されるレジスタであり、制御レジスタ40、41、42は、汎用レジスタR4、R6、R8にそれぞれ対応して設けられている。以下、汎用レジスタR(R0−R9)をレジスタR(R0−R9)とも称する。
【0012】
実行ユニット20は、レジスタファイル30からデータを読み出し、データを命令実行部24に出力する2つの入力データ抽出部22と、命令を実行する命令実行部24と、令実行部24からデータを受け、レジスタファイル30にデータを書き込む出力データ生成部28とを有している。例えば、命令実行部24は、四則演算や論理演算等を実行する算術論理演算ユニット(以下、ALU(Arithmetic Logic Unit)とも称する)25と、ロード/ストア命令を実行するロード/ストアユニット26とを有している。なお、実行ユニット20は、図に示した入力データ抽出部22を1つにまとめた入力データ抽出部を有してもよい。
【0013】
制御レジスタ40、41、42は、例えば、命令によりレジスタR4、R6、R8がアクセスされる場合、制御部50によりそれぞれ参照される。例えば、制御レジスタ40は、制御レジスタ40を有効にするか否を示すイネーブルEN、レジスタR4に格納されるアクセス対象のデータのビット長を示すビット長LN、アクセス対象のデータのレジスタR4内でのオフセット値(データ位置)を示すオフセットOFを有している。例えば、制御レジスタ40を有効にする場合、イネーブルENは、“1”に設定される。また、オフセットOFは、後述する図3に示すように、次に使用するデータ位置を示すために、動作中に更新される。
【0014】
同様に、例えば、制御レジスタ41は、制御レジスタ41を有効にするか否を示すイネーブルEN、レジスタR6に格納されるアクセス対象のデータのビット長を示すビット長LN、アクセス対象のデータのレジスタR6内でのオフセット値を示すオフセットOFを有している。また、例えば、制御レジスタ42は、制御レジスタ41を有効にするか否を示すイネーブルEN、レジスタR6に格納されるアクセス対象のデータのビット長を示すビット長LN、アクセス対象のデータのレジスタR6内でのオフセット値を示すオフセットOFを有している。すなわち、制御レジスタ41、42は、対応するレジスタR(R6、R8)を除いて、制御レジスタ40と同じである。
【0015】
制御部50は、例えば、命令によりアクセスされるレジスタRを示すレジスタ番号RN1および命令の種類を示す命令種別TPをデコーダ(図示せず)から受け、制御レジスタ40、41、42のオフセットOFを更新する。ここで、この実施形態では、レジスタ番号RN1のレジスタRS1、RT1は、ソースのレジスタRを示し、レジスタ番号RN1のレジスタRD1は、ディスティネーションのレジスタRを示している。また、命令種別TPは、実行する命令の種類(ロード命令等)を示している。
【0016】
また、例えば、制御部50は、レジスタ番号RN1と、制御レジスタ40、41、42から読み出した制御情報RINF10、20、30とを実行ユニット20に出力する。例えば、各制御情報RINF10、20、30は、各制御レジスタ40、41、42のイネーブルEN、ビット長LNおよびオフセットOFを含む情報である。なお、図1では、制御レジスタ40、41、42の初期値等を設定するための制御信号(例えば、後述する図2に示す初期値INT1)の記載を省略している。
【0017】
図2は、図1に示した制御部50の一例を示している。制御部50(図中の破線で囲んだ部分)は、更新部51およびセレクタ52Aを有している。なお、図2は、制御レジスタ40のオフセットOFを更新するための更新部51およびセレクタ52Aを示し、制御レジスタ41、42のオフセットOFを更新するための更新部51およびセレクタ52Aの記載を省略している。例えば、制御レジスタ41、42のオフセットOFを更新するための更新部51およびセレクタ52Aは、制御する制御レジスタ41、42を除いて、図2と同じである。
【0018】
制御部50は、例えば、初期値INT1を受け、制御レジスタ40のイネーブルEN、ビット長LNおよびオフセットOFの値を初期値INT1に設定する。この場合、セレクタ52Aは、初期値INT1の値(より詳細には、オフセットOFの初期値)を制御レジスタ40に設定する値として選択する。ここで、例えば、制御レジスタ40、41、42は、アドレスマップ上に割り当てられている。これにより、ロード命令やストア命令で、制御レジスタ40、41、42の値(初期値等)を設定できる。また、図の例では、制御レジスタ40、41、42は、フリップフロップ(以下、FFとも称する)により構成されている。
【0019】
更新部51は、例えば、レジスタ番号RN1および命令種別TPに基づいて、オフセットOFを更新する。例えば、レジスタR4がアクセスされる命令が実行された場合、更新部51は、次に使用されるデータのレジスタR4におけるビット位置を算出し、オフセットOFを更新する。なお、更新部51の動作の詳細は、後述する図3で説明する。セレクタ52Aは、オフセットOFを更新する場合、更新部51から受ける値を制御レジスタ40に設定する値として選択する。
【0020】
図3は、図2に示した更新部51の動作の一例を示している。なお、図3は、制御レジスタ40のオフセットOFを更新するための更新部51(制御レジスタ40用の更新部51)の動作を示している。すなわち、図3では、制御レジスタ40用の更新部51の動作を説明する。制御レジスタ41、42のオフセットOFを更新するための更新部51(制御レジスタ41、42用の更新部51)のそれぞれの動作は、レジスタR4をレジスタR6、R8にそれぞれ読み替えることで説明される。なお、上述した図2に示したセレクタ52Aは、更新部51から受ける値を制御レジスタ40に設定するする値として選択している。
【0021】
先ず、処理60では、更新部51は、レジスタ番号RN1に基づいて、レジスタR4へのアクセスが発生するか否かを判定する。レジスタR4がアクセスされる場合(処理60のYes)、更新部51の動作は、処理61に移り、レジスタR4がアクセスされない場合(処理60のNo)、更新部51は、オフセットOFを更新せずに処理を終了する。なお、制御レジスタ41、42用の更新部51では、処理60において、レジスタR6、R8へのアクセスがそれぞれ発生するか否かを判定する。
【0022】
処理61では、更新部51は、イネーブルENが“1”に設定されているか否かを判定する。すなわち、更新対象の制御レジスタ(図の例では、制御レジスタ40)が有効か否かを判定する。イネーブルENが“1”の場合(処理61のYes)、更新部51の動作は、処理62に移り、イネーブルENが“1”でない場合(処理61のNo)、更新部51は、オフセットOFを更新せずに処理を終了する。
【0023】
処理62では、更新部51は、命令種別TPに基づいて、命令がロード命令か否かを判定する。ロード命令でない場合(処理62のNo)、更新部51の動作は、処理63に移り、ロード命令の場合(処理62のYes)、更新部51は、オフセットOFを更新せずに処理を終了する。
【0024】
処理63では、更新部51は、命令種別TPに基づいて、命令がストア命令か否かを判定する。ストア命令でない場合(処理63のNo)、更新部51の動作は、処理64に移り、ストア命令の場合(処理63のYes)、更新部51は、オフセットOFを更新せずに処理を終了する。
【0025】
処理64では、更新部51は、ビット長LNを2倍した値とオフセットOFとの加算結果がレジスタRのビット幅(この実施形態では、32)以上か否かを判定する。加算結果が32以上の場合(処理64のYes)、更新部51の動作は、処理65に移り、加算結果が31以下の場合(処理64のNo)、更新部51の動作は、処理66に移る。
【0026】
処理65では、更新部51は、オフセットOFを0に設定する。処理66では、更新部51は、現状のオフセットOFにビット長LNを加算した値に、オフセットOFを更新する。これにより、オフセットOFは、次に使用するデータの位置に順次更新される。
【0027】
なお、ロード命令およびストア命令が実行された後では、オフセットOFが“0”に設定されるように構成してもよい。この場合、例えば、処理62のYesおよび処理63のYesにおいて、更新部51の動作は、処理65(オフセットOFを“0”に設定)に移る。
【0028】
図4は、レジスタR4、R6、R8に格納されるデータの一例を示す図である。なお、図4(a)は、連続するデータDS0、DS1、DS2と連続するデータDT0、DT1、DT2とをそれぞれ加算するプログラムの一例を示している。また、図4(b)は、図4(a)のプログラムが実行された際のレジスタR4、R6、R8の状態の概要を示している。図4(a)のアドレスadr1、adr2、adr3は、メモリ(図示せず)のアドレスを示し、図4(b)の網掛け部分は、有効なデータが格納されていない領域を示している。図のレジスタR4、R6、R8は、右側が下位ビットである。
【0029】
なお、データDS0、DS1、DS2、DT0、DT1、DT2のビット長は、9ビットであり、データDD0、DD1、DD2のビット長は、10ビットである。したがって、上述した図1に示した制御レジスタ40、41、42のビット長LNは、“9”、“9”、“10”にそれぞれ設定されている。また、制御レジスタ40、41、42のオフセットOFの初期値は、“0”に設定されている。
【0030】
図4(a)のプログラムでは、先ず、プロセッサ10は、アドレスadr1に連続して格納されているデータDS0、DS1、DS2をレジスタR4にロードする(図4(a1)、(b1))。次に、プロセッサ10は、アドレスadr2に連続して格納されているデータDT0、DT1、DT2をレジスタR6にロードする(図4(a2)、(b1))。図の例では、レジスタR4、R6の有効に使用されない領域は、5ビットであり、データDS0、DS1、DS2、DT0、DT1、DT2毎に1つのレジスタRに格納する構成に比べて、レジスタRを有効に使用できる。さらに、この実施形態では、演算対象のデータを抽出するために、上述した図1に示したALU25がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。
【0031】
そして、プロセッサ10は、レジスタR4に格納されているデータDS0とレジスタR6に格納されているデータDT0とを加算し、加算結果であるデータDD0をレジスタR8に格納する(図4(a3)、(b2))。この際、制御レジスタ40、41、42のオフセットOFは、上述した図3に示した動作により、“9”、“9”、“10”にそれぞれ更新される。次に、プロセッサ10は、レジスタR4に格納されているデータDS1とレジスタR6に格納されているデータDT1とを加算し、加算結果であるデータDD1をレジスタR8に格納する(図4(a4)、(b3))。この際、制御レジスタ40、41、42のオフセットOFは、図3に示した動作により、“18”、“18”、“20”にそれぞれ更新される。その後、プロセッサ10は、レジスタR4に格納されているデータDS2とレジスタR6に格納されているデータDT2とを加算し、加算結果であるデータDD2をレジスタR8に格納する(図4(a5)、(b4))。
【0032】
このように、レジスタR8の有効に使用されない領域は、2ビットであり、データDD0、DD1、DD2毎に1つのレジスタRに格納する構成に比べて、レジスタRを有効に使用できる。さらに、この実施形態では、複数の演算結果のデータを連続して並べるために、ALU25がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。最後に、プロセッサ10は、レジスタR8に格納されているデータDD0、DD1、DD2をアドレスadr3にストアする(図4(a6))。このように、この実施形態では、データDS0、DS1、DS2、DT0、DT1、DT2、DD0、DD1、DD2を32ビット幅に拡張してメモリに格納する必要がないため、メモリを有効に使用できる。
【0033】
図5は、図1に示した入力データ抽出部22の概要を示している。図中の網掛け部分は、有効なデータでない部分を示している。なお、図のデータDS0、DS1、DS2の状態は、上述した図4(a4)の命令が実行されるときの状態に対応している。また、図のデータDS0、DS1、DS2は、右側が下位ビットである。入力データ抽出部22は、左論理シフト部220、右算術シフト部221、セレクタ222を有している。
【0034】
左論理シフト部220は、レジスタRから読み出されたデータRDATAをシフト量LSL分だけ左論理シフトする。図の例では、データRDATAは、有効でないデータ(図の網掛け部分)、データDS2、DS1、DS0を含むデータである。また、シフト量LSLは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ40)のビット長LNおよびオフセットOFの加算値をレジスタRのビット幅である32から引いた値である。左論理シフト部220により、例えば、演算対象のデータDS1は、32ビット幅のデータの一番左側にシフトされる。
【0035】
右算術シフト部221は、左論理シフト部220の出力データ(32ビット幅のデータ)をシフト量ASR分だけ右算術シフトする。すなわち、32ビット幅のデータの左側の空いたビットは、符号拡張SEで埋められる。これにより、入力データ抽出部22は、符号付きのデータを扱うことができる。なお、シフト量ASRは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ40)のビット長LNをレジスタRのビット幅である32から引いた値である。右算術シフト部221により、例えば、演算対象のデータDS1は、32ビット幅のデータの一番右側にシフトされる。
【0036】
セレクタ222は、選択信号SELに基づいて、データS1、S2の一方をデータIDATAとして上述した図1に示した命令実行部24に出力する。例えば、セレクタ222は、レジスタR4、R6、R8のいずれかからデータRDATAが読み出される場合、データRDATAが読み出されるレジスタR4、R6、R8に対応する制御レジスタ40、41、42のイネーブルENが“1”(制御レジスタが有効)のときに、データS2(右算術シフト部221の出力データ)をデータIDATAとして命令実行部24に出力する。その他の条件では、セレクタ222は、レジスタRから読み出したデータRDATA(データS1)をデータIDATAとして命令実行部24に出力する。
【0037】
例えば、セレクタ222は、レジスタR4、R6、R8以外のレジスタRからデータRDATAが読み出される場合、レジスタRから読み出したデータRDATA(データS1)をデータIDATAとして命令実行部24に出力する。すなわち、この実施形態では、選択信号SELは、例えば、データRDATAが読み出されるレジスタRを示すレジスタ番号RN1と、制御レジスタ40、41、42のイネーブルENとにより生成される。
【0038】
図6は、図1に示した出力データ生成部28の概要を示している。なお、図のデータDD0、DD1の状態は、上述した図4(a4)の命令が実行されるときの状態に対応している。また、図のデータDD0、DD1は、右側が下位ビットである。出力データ生成部28は、左論理シフト部280、右論理シフト部281、FF282、オア回路(以下、ORとも称する)283およびセレクタ284を有している。
【0039】
左論理シフト部280は、上述した図1に示した命令実行部24から受けたデータ(例えば、ALU25の演算結果)EDATAをシフト量LSL分だけ左論理シフトする。図の例では、データEDATAは、符号拡張SEおよびデータDD1から構成される32ビット幅のデータである。また、シフト量LSLは、演算結果を格納するレジスタRに対応する制御レジスタ(例えば、制御レジスタ42)のビット長LNをレジスタRのビット幅である32から引いた値である。左論理シフト部280により、例えば、演算結果のデータDD1は、32ビット幅のデータの一番左側にシフトされる。
【0040】
右論理シフト部281は、左論理シフト部280の出力データ(32ビット幅のデータ)をシフト量LSR分だけ右論理シフトする。なお、32ビット幅のデータの空いたビットは、“0”で埋められる。また、シフト量LSRは、演算結果を格納するレジスタRに対応する制御レジスタ(例えば、制御レジスタ42)のビット長LNおよびオフセットOFの加算値をレジスタRのビット幅である32から引いた値である。右論理シフト部281により、例えば、演算結果のデータDD1は、データDD1の最下位ビットと32ビット幅のデータにおけるオフセットOFの位置とが一致する位置にシフトされる。
【0041】
オア回路283は、右論理シフト部281の出力データとFF28から読み出されるデータとのオアをセレクタ284およびFF282に出力する。なお、FF282には、前回の演算命令(例えば、図4(a3))が実行された際のオア回路283の出力データ(図の例では、下位ビットから順にデータDD0および“0”が配置された32ビット幅のデータ)が格納されている。そして、今回の演算命令(例えば、図4(a4))により、FF282には、下位ビットから順に、データDD0、データDD1、“0”が配置された32ビット幅のデータが格納される。
【0042】
セレクタ284は、選択信号SELに基づいて、データS1、S2の一方をデータODATAとして、レジスタ番号RN1が示すレジスタRに出力する。例えば、セレクタ284は、レジスタR4、R6、R8のいずれかにデータODATAを格納する場合、データODATAが格納されるレジスタR4、R6、R8に対応する制御レジスタ40、41、42のイネーブルENが“1”(制御レジスタが有効)のときに、データS2(オア回路283の出力データ)をデータODATAとしてレジスタRに出力する。その他の条件では、セレクタ222は、命令実行部24から受けたデータEDATA(データS1)をデータODATAとして、レジスタ番号RN1が示すレジスタRに出力する。
【0043】
例えば、セレクタ284は、レジスタR4、R6、R8以外のレジスタRにデータODATAを格納する場合、命令実行部24から受けたデータEDATA(データS1)をデータODATAとしてレジスタRに出力する。すなわち、この実施形態では、選択信号SELは、例えば、データODATAが格納されるレジスタRを示すレジスタ番号RN1と、制御レジスタ40、41、42のイネーブルENとにより生成される。
【0044】
以上、この実施形態では、入力データ抽出部22は、制御レジスタ40、41、42に基づいて、レジスタR4、R6、R8の1つから連続する任意のビット長のデータを順次読み出す。さらに、この実施形態では、出力データ生成部28は、制御レジスタ40、41、42に基づいて、レジスタR4、R6、R8の1つに任意のビット長の複数のデータを順次格納する。したがって、この実施形態では、データ毎に1つのレジスタRに格納する構成に比べて、レジスタRを有効に使用できる。すなわち、この実施形態では、レジスタのビット幅に対して半端なデータサイズ(例えば、8の倍数以外のデータサイズ)のデータが連続する場合でも、レジスタを有効に使用できる。
【0045】
図7は、別の実施形態におけるプロセッサの概要を示している。この実施形態のプロセッサ11は、上述した図1に示した実行ユニット20、制御レジスタ40、41、42および制御部50の代わりに、実行ユニット21、制御レジスタ43、44、45および制御部54がそれぞれ設けられている。その他の構成は、図1−図6で説明した示したプロセッサ10と同じである。図1−図6で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。
【0046】
例えば、プロセッサ11は、32ビットプロセッサであり、実行ユニット21、レジスタファイル30、制御レジスタ43、44、45および制御部54を有している。なお、図中の破線で囲んだレジスタRの組(R4とR5、R6とR7、R8とR9)には、制御レジスタ43、44、45がそれぞれ対応して設けられている。すなわち、制御レジスタ43、44、45は、図中の破線で囲んだレジスタRの組(R4とR5、R6とR7、R8とR9)にそれぞれ対応して設けられている。
【0047】
実行ユニット21は、図1に示した入力データ抽出部22および出力データ生成部28の代わりに、入力データ抽出部23および出力データ生成部29がそれぞれ設けられている。入力データ抽出部23は、レジスタRの組(例えば、R4とR5、R6とR7、R8とR9)の両方のレジスタをまたいで格納されたデータを読み出せるように構成されている。例えば、レジスタR4、R5から構成されるレジスタ群からデータを読み出す場合、入力データ抽出部23は、レジスタR4、R5をまたいで格納されたデータを読み出せる。なお、入力データ抽出部23の詳細は、後述する図14で説明する。
【0048】
出力データ生成部29は、レジスタRの組(例えば、R4とR5、R6とR7、R8とR9)の両方のレジスタにまたいでデータを格納できるように構成されている。例えば、レジスタR4、R5から構成されるレジスタ群に20ビット長のデータを2つ格納する場合、出力データ生成部29は、2つめのデータの下位12ビットをレジスタR4に格納し、2つめのデータの上位8ビットをレジスタR5に格納する。なお、出力データ生成部29の詳細は、後述する図15で説明する。
【0049】
制御レジスタ43は、レジスタR4、R5から構成されるレジスタ群に対応して設けられ、例えば、命令によりレジスタR4、R5がアクセスされる場合、制御部54により参照される。例えば、制御レジスタ43は、イネーブルEN、ビット長LN、オフセットOF、レジスタ番号RPT、WPT、エンプティEMPおよびフルFULを有している。イネーブルEN、ビット長LN、オフセットOFは、図1で説明したイネーブルEN、ビット長LN、オフセットOFと同じである。例えば、制御レジスタ43を有効にする場合、イネーブルENは、“1”に設定される。なお、オフセットOFには、レジスタR4にアクセスする場合、アクセス対象のデータのレジスタR4内でのオフセット値(データ位置)が設定され、レジスタR5にアクセスする場合、アクセス対象のデータのレジスタR5内でのオフセット値が設定される。
【0050】
レジスタ番号RPTには、データが読み出されるレジスタRを示すレジスタ番号が設定され、レジスタ番号WPTには、データが書き込まれるレジスタRを示すレジスタ番号が設定される。エンプティEMPは、レジスタR4、R5のいずれにも有効なデータが格納されていない状態(レジスタR4、R5の両方が空の状態)を示している。例えば、レジスタR4、R5のいずれにも有効なデータが格納されていない状態では、エンプティEMPは、“1”に設定される。また、フルFULは、レジスタR4、R5の両方に有効なデータが格納されている状態を示している。例えば、レジスタR4、R5の両方に有効なデータが格納されている状態では、フルFULは、“1”に設定される。制御レジスタ44、45は、対応するレジスタ群(R6とR7、R8とR9)を除いて、制御レジスタ43と同じである。
【0051】
制御部54は、レジスタ番号RN1および命令種別TPをデコーダ(図示せず)から受け、制御情報RINF10、11、20、21、30、31を制御レジスタ43、44、45から読み出し、制御レジスタ43、44、45のオフセットOF等を更新する。ここで、例えば、各制御情報RINF11、21、31は、各制御レジスタ43、44、45のレジスタ番号RPT、WPT、エンプティEMPおよびフルFULを含む情報である。
【0052】
また、例えば、制御部54は、制御レジスタ43、44、45から読み出した制御情報RINF10、20、30を実行ユニット21に出力し、レジスタ番号RN1の代わりにレジスタ番号RN2を実行ユニット21に出力する。なお、この実施形態では、レジスタ番号RN2のレジスタRS2、RT2は、ソースのレジスタRを示し、レジスタ番号RN2のレジスタRD2は、ディスティネーションのレジスタRを示している。また、図7では、制御レジスタ43、44、45の初期値等を設定するための制御信号(例えば、後述する図8に示す初期値INT2)の記載を省略している。
【0053】
図8は、図7に示した制御部54の一例を示している。制御部54(図中の破線で囲んだ部分)は、セレクタ52(52A、52B、52C、52D、52E)、更新部55および変換部56を有している。なお、図8は、制御レジスタ43用のセレクタ52および更新部を示し、制御レジスタ44、45用のセレクタ52および更新部55の記載を省略している。例えば、制御レジスタ44、45用のセレクタ52および更新部55は、制御する制御レジスタ44、45を除いて、図8と同じである。また、図8では、制御レジスタ44、45の記載を省略している。
【0054】
制御部54は、例えば、初期値INT2を受け、制御レジスタ43の各値(イネーブルEN等)を初期値INT2に設定する。この場合、セレクタ52は、初期値INT2の値を制御レジスタ43に設定する値として選択する。ここで、例えば、制御レジスタ43、44、45は、アドレスマップ上に割り当てられている。これにより、ロード命令やストア命令で、制御レジスタ43、44、45の値(初期値等)を設定できる。また、図の例では、制御レジスタ43、44、45は、フリップフロップにより構成されている。
【0055】
更新部55は、例えば、レジスタ番号RN1および命令種別TPを受け、制御情報RINF10、11を制御レジスタ43から読み出し、オフセットOF、レジスタ番号RPT、WPT、エンプティEMPおよびフルFULを更新する。なお、更新部55の動作の詳細は、後述する図9、図11で説明する。セレクタ52は、制御レジスタ43の値を更新する場合、更新部55から受ける値を制御レジスタ43に設定する値として選択する。
【0056】
変換部56は、例えば、レジスタ番号RN1および命令種別TPを受け、レジスタ番号RN1が示すレジスタRに対応する制御レジスタ43、44、45からレジスタ番号RPT、WPT、イネーブルENを読み出し、レジスタ番号RN2を設定する。なお、レジスタ番号RN1により指定されるレジスタRが制御レジスタ43、44、45に対応していないレジスタRの場合、変換部56は、レジスタ番号RPT、WPT、イネーブルENを、制御レジスタ43、44、45から読み出さなくてもよい。そして、変換部56は、レジスタ番号RN1の代わりにレジスタ番号RN2を上述した図7に示した実行ユニット21に出力する。なお、変換部56の動作の詳細は、後述する図11で説明する。
【0057】
図9、図10は、図8示した更新部55の動作の一例を示している。なお、図9、図10は、制御レジスタ43のオフセットOF、レジスタ番号RPT、WPT、エンプティEMPおよびフルFULを更新するための更新部55の動作を示している。すなわち、図9、10では、制御レジスタ43用の更新部55の動作を説明する。制御レジスタ44用の更新部55の動作は、レジスタR4、R5をレジスタR6、R7に読み替えることで説明され、制御レジスタ45用の更新部55の動作は、レジスタR4、R5をレジスタR8、R9に読み替えることで説明される。また、上述した図8に示したセレクタ52は、更新部55から受ける値を制御レジスタ43に設定するする値として選択している。なお、図10の符号%は、剰余演算子を示している。
【0058】
先ず、図9に示すように、処理70では、更新部55は、レジスタ番号RN1に基づいて、レジスタR4、R5のいずれかへのアクセスが発生するか否かを判定する。レジスタR4、R5のいずれかがアクセスされる場合(処理70のYes)、更新部55の動作は、処理72に移り、レジスタR4、R5のいずれもアクセスされない場合(処理70のNo)、更新部55は、制御レジスタ43を更新せずに処理を終了する。
【0059】
処理72では、更新部55は、イネーブルENが“1”に設定されているか否かを判定する。すなわち、制御レジスタ43が有効か否かを判定する。イネーブルENが“1”の場合(処理72のYes)、更新部55の動作は、処理74に移り、イネーブルENが“1”でない場合(処理72のNo)、更新部55は、制御レジスタ43を更新せずに処理を終了する。例えば、レジスタR4、R5を上述した図7に示したレジスタR0−R3と同じように扱う場合、更新部55は、制御レジスタ43を更新せずに処理を終了する。すなわち、レジスタR4およびレジスタR5を、レジスタR4、R5から構成されるレジスタ群として使用しない場合、更新部55は、制御レジスタ43を更新せずに処理を終了する。
【0060】
処理74では、更新部55は、命令種別TPに基づいて、命令がロード命令か否かを判定する。ロード命令の場合(処理74のYes)、更新部55の動作は、処理76に移り、ロード命令でない場合(処理74のNo)、更新部55の動作は、処理84に移る。
【0061】
処理76では、更新部55は、レジスタ番号WPTを更新する。例えば、更新前のレジスタ番号WPTがレジスタR4を示すとき、更新部55は、レジスタR5を示すレジスタ番号に、レジスタ番号WPTを更新する。また、例えば、更新前のレジスタ番号WPTがレジスタR5を示すとき、更新部55は、レジスタR4を示すレジスタ番号に、レジスタ番号WPTを更新する。例えば、更新後のレジスタ番号WPTは、定数番号を4(レジスタR4を示す値)とした場合、更新前のレジスタ番号WPTから定数番号を引いた値に1を加算した結果を被除数とし、被除数を2で割ったときの剰余を定数番号に加算することにより算出される。なお、定数番号を5(レジスタR5を示す値)とした場合、更新後のレジスタ番号WPTは、定数番号から更新前のレジスタ番号WPTを引いた値に1を加算した結果を被除数とし、被除数を2で割ったときの剰余を定数番号から減算することにより算出される。
【0062】
処理78では、更新部55は、処理76で更新されたレジスタ番号WPTがレジスタ番号RPTと同じか否かを判定する。レジスタ番号WPT、RPTが互いに同じ場合(処理78のYes)、更新部55は、処理80において、フルFULを“1”(レジスタR4、R5の両方に有効なデータが格納されている状態を示す情報)に設定する。一方、レジスタ番号WPT、RPTが互いに異なる場合(処理78のNo)、更新部55の動作は、処理82に移る。処理82では、更新部55は、エンプティEMPを“0”(レジスタR4、R5の少なくとも一方に有効なデータが格納されている状態を示す情報)に設定する。
【0063】
処理84(処理74において、ロード命令でないと判定された場合)では、更新部55は、命令種別TPに基づいて、命令がストア命令か否かを判定する。ストア命令の場合(処理84のYes)、更新部55の動作は、処理86に移り、ストア命令でない場合(処理84のNo)、更新部55の動作は、図10に示す処理Aに移る。
【0064】
処理86では、更新部55は、レジスタ番号RPTを更新する。例えば、更新前のレジスタ番号RPTがレジスタR4を示すとき、更新部55は、レジスタR5を示すレジスタ番号に、レジスタ番号RPTを更新する。また、例えば、更新前のレジスタ番号RPTがレジスタR5を示すとき、更新部55は、レジスタR4を示すレジスタ番号に、レジスタ番号RPTを更新する。例えば、更新後のレジスタ番号RPTは、処理76のレジスタ番号WPTの更新と同様の演算により算出される。
【0065】
処理88では、更新部55は、レジスタ番号WPTが処理86で更新されたレジスタ番号RPTと同じか否かを判定する。レジスタ番号WPT、RPTが互いに同じ場合(処理88のYes)、更新部55は、処理90において、エンプティEMPを“1”(レジスタR4、R5のいずれにも有効なデータが格納されていない状態を示す情報)に設定する。一方、レジスタ番号WPT、RPTが互いに異なる場合(処理88のNo)、更新部55の動作は、処理92に移る。処理92では、更新部55は、フルFULを“0”(レジスタR4、R5の少なくとも一方は空の状態を示す情報)に設定する。
【0066】
図10に示すように、処理94(図9の処理84において、ストア命令でないと判定された場合)では、更新部55は、レジスタ番号RN1に基づいて、レジスタR4、R5から構成されるレジスタ群へのアクセスがディスティネーションか否かを判定する。例えば、レジスタ番号RN1のレジスタRD1がレジスタR4の場合、レジスタR4、R5から構成されるレジスタ群へのアクセスは、ディスティネーションである。レジスタ群へのアクセスがディスティネーションの場合(処理94のYes)、更新部55の動作は、処理96に移り、レジスタ群へのアクセスがソースの場合(処理94のNo)、更新部55の動作は、処理108に移る。
【0067】
処理96では、更新部55は、オフセットOFとビット長LNとの加算結果がレジスタRのビット幅(この実施形態では、32)以上か否かを判定する。加算結果が32以上の場合(処理96のYes)、更新部55の動作は、処理98に移る。処理98、100、102、104は、処理76、78、80、82と同じである。処理96、98により、上述した図7に示した出力データ生成部29は、レジスタR4、R5にまたいでデータを格納できる。一方、加算結果が31以下の場合(処理96のNo)、更新部55の動作は、処理104に移る。
【0068】
処理106では、更新部55は、オフセットOFを更新する。例えば、更新後のオフセットOFは、更新前のオフセットOFにビット長LNを加算した結果を被除数とし、被除数をレジスタRのビット幅(この実施形態では、32)で割ったときの剰余により算出される。
【0069】
処理108(処理94において、レジスタ群へのアクセスがソースと判定された場合)では、更新部55は、オフセットOFを更新する。例えば、更新後のオフセットOFは、処理106のオフセットOFの更新と同様の演算により算出される。
【0070】
処理109では、更新部55は、処理108で更新されたオフセットOFが0か否かを判定する。オフセットOFが0の場合(処理109のYes)、更新部55の動作は、処理112に移り、オフセットOFが0でない場合(処理109のNo)、更新部55の動作は、処理110に移る。
【0071】
処理110では、更新部55は、オフセットOFとビット長LNとの加算結果がレジスタRのビット幅(この実施形態では、32)より大きいか否かを判定する。加算結果が32より大きい場合(処理110のYes)、更新部55は、処理112において、レジスタ番号RPTを更新し、加算結果が32以下の場合(処理110のNo)、更新部55は、レジスタ番号RPTを更新しない。処理112、114、116、118は、処理86、88、90、92と同じである。処理108、109、110、112により、図7に示した入力データ抽出部23は、レジスタR4、R5をまたいで格納されたデータを読み出せる。
【0072】
図11は、図8示した変換部56の動作の一例を示している。なお、図11は、レジスタ番号RN2の1つ(レジスタRD2、RS2、RT2の1つ)を設定する際の変換部56の動作を示している。レジスタ番号RN1により指定されるレジスタRが複数の場合(すなわち、レジスタ番号RN2に設定されるレジスタRが複数の場合)、アクセスが発生する各レジスタRに対して、図11の処理が実施される。
【0073】
先ず、処理120では、変換部56は、レジスタ番号RN1に基づいて、レジスタR4−R9のいずれかへのアクセスが発生するか否かを判定する。レジスタR4−R9のいずれかがアクセスされる場合(処理120のYes)、変換部56の動作は、処理122に移り、レジスタR4−R9がアクセスされない場合(処理120のNo)、変換部56は、処理138において、レジスタ番号RN2のレジスタ(RD2、RS2、RT2)をレジスタ番号RN1のレジスタ(RD1、RS1、RT1)に設定する。
【0074】
例えば、レジスタ番号RN1のレジスタRD1、RS1、RT1がレジスタR3、R4、R6の場合、変換部56は、処理138において、レジスタ番号RN2のレジスタRD2をレジスタR3に設定し、レジスタ番号RN2のレジスタRS2、RT2を設定するために処理122を実施する。
【0075】
処理122では、変換部56は、レジスタ番号RN1により指定されるレジスタRに対応する制御レジスタ43、44、45のイネーブルENが“1”に設定されているか否かを判定する。すなわち、レジスタ番号RN1により指定されるレジスタRに対応する制御レジスタ43、44、45が有効か否かを判定する。処理122により、レジスタ番号RN1により指定されるレジスタRを、2つのレジスタRから構成されるレジスタ群として使用するか、上述した図7に示したレジスタR0−R3と同じように単独のレジスタRとして使用するかが判定される。
【0076】
イネーブルENが“1”の場合(処理122のYes)、変換部56の動作は、処理124に移り、イネーブルENが“1”でない場合(処理122のNo)、変換部56は、処理138において、レジスタ番号RN2のレジスタ(RD2、RS2、RT2)をレジスタ番号RN1のレジスタ(RD1、RS1、RT1)に設定する。例えば、レジスタ番号RN1のレジスタRD1、RS1、RT1がレジスタR8、R4、R6であり、かつ、制御レジスタ43、44、45のイネーブルENが“1”、“1”、“0”にそれぞれ設定されている場合、変換部56は、レジスタ番号RN2のレジスタRS2、RT2を設定するために処理124を実施する。さらに、変換部56は、処理138において、レジスタ番号RN2のレジスタRD2を、レジスタ番号RN1のレジスタRD1(レジスタR8)に設定する。
【0077】
処理124では、変換部56は、命令種別TPに基づいて、命令がロード命令か否かを判定する。ロード命令の場合(処理124のYes)、変換部56は、処理126において、レジスタ番号RN2のレジスタRT2をレジスタ番号WPTが示すレジスタRに設定する。一方、ロード命令でない場合(処理124のNo)、変換部56の動作は、処理128に移る。
【0078】
処理128では、変換部56は、命令種別TPに基づいて、命令がストア命令か否かを判定する。ストア命令の場合(処理128のYes)、変換部56は、処理130において、レジスタ番号RN2のレジスタRT2をレジスタ番号RPTが示すレジスタRに設定する。一方、ストア命令でない場合(処理128のNo)、変換部56の動作は、処理132に移る。
【0079】
処理132では、変換部56は、レジスタ番号RN1に基づいて、レジスタ番号RN1により指定されるレジスタRを含むレジスタ群へのアクセスがディスティネーションか否かを判定する。レジスタ群へのアクセスがディスティネーションの場合(処理132のYes)、変換部56は、処理134において、レジスタ番号RN2のレジスタRD2をレジスタ番号WPTが示すレジスタRに設定する。一方、レジスタ群へのアクセスがソースの場合(処理132のNo)、変換部56は、処理136において、レジスタ番号RN2のレジスタ(例えば、レジスタRS2、RT2)をレジスタ番号RPTが示すレジスタRに設定する。
【0080】
例えば、処理136では、レジスタ番号RN1のレジスタRS1がレジスタR4、R5のいずれかの場合、変換部56は、レジスタ番号RN2のレジスタRS2を制御レジスタ43のレジスタ番号RPTが示すレジスタR(R4あるいはR5)に設定する。また、例えば、レジスタ番号RN1のレジスタRT1がレジスタR4、R5のいずれかの場合、変換部56は、処理136において、レジスタ番号RN2のレジスタRT2を制御レジスタ43のレジスタ番号RPTが示すレジスタR(R4あるいはR5)に設定する。
【0081】
図12は、図7に示した入力データ抽出部23の概要を示している。図中の網掛け部分は、上述した図5に示した入力データ抽出部22と相違する部分を示している。また、図12の符号%は、剰余演算子を示している。入力データ抽出部23は、FF224、左論理シフト部226、右算術シフト部221、セレクタ222を有している。
【0082】
FF224は、例えば、ライトイネーブルWEが“1”のときに、レジスタRから読み出されたデータRDATAを格納する。例えば、ライトイネーブルWEは、読み出したレジスタRに対応する制御レジスタ(制御レジスタ43等)のビット長LNおよびオフセットOFに基づいて生成され、入力データ抽出部23により生成されてもよいし、上述した図7に示した制御部54により生成されてもよい。この実施形態では、ライトイネーブルWEは、ビット長LNを2倍した値とオフセットOFとの加算結果がレジスタRのビット幅(この実施形態では、32)より大きい場合、“1”であり、加算結果が32以下の場合、“0”である。
【0083】
すなわち、FF224には、2つのレジスタRをまたいで格納されているデータを使用する命令が実行される前に、2つのレジスタRをまたいで格納されているデータの一部を含むデータRDATAが格納される。なお、FF224は、ライトイネーブルWEを使用せずに、レジスタRからデータRDATAが読み出される度に、データRDATAを格納してもよい。
【0084】
左論理シフト部226は、レジスタRのビット幅の2倍のビット幅(この実施形態では、64)のデータを受け、受けたデータをシフト量LSL分だけ左論理シフトする。なお、左論理シフト部226が受ける64ビット幅のデータは、上位32ビット側がレジスタRから読み出されたデータRDATAであり、下位32ビット側がFF224から読み出されたデータである。また、シフト量LSLは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ43)のビット長LNおよびオフセットOFの加算値を64(レジスタRのビット幅の2倍)から引いた値を被除数とし、被除数を32(レジスタRのビット幅)で割ったときの剰余である。これにより、例えば、演算対象のデータは、64ビット幅のデータの一番左側にシフトされる。
【0085】
右算術シフト部221は、左論理シフト部226の出力データ(64ビット幅のデータ)の上位32ビットのデータを受け、受けたデータを(32ビット幅のデータ)をシフト量ASR分だけ右算術シフトする。なお、シフト量ASRは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ43)のビット長LNを32(レジスタRのビット幅)から引いた値である。右算術シフト部221により、例えば、演算対象のデータは、32ビット幅のデータの一番右側にシフトされる。
【0086】
セレクタ222は、選択信号SELに基づいて、データS1、S2の一方をデータIDATAとして上述した図7に示した命令実行部24に出力する。例えば、セレクタ222は、レジスタR4−R9のいずれかからデータRDATAが読み出される場合、データRDATAが読み出されるレジスタRに対応する制御レジスタ43、44、45のイネーブルENが“1”のときに、データS2をデータIDATAとして命令実行部24に出力する。その他の条件では、セレクタ222は、データS1(レジスタRから読み出したデータRDATA)をデータIDATAとして命令実行部24に出力する。
【0087】
例えば、セレクタ222は、レジスタR4−R8以外のレジスタRからデータRDATAが読み出される場合、レジスタRから読み出したデータRDATA(データS1)をデータIDATAとして命令実行部24に出力する。すなわち、この実施形態では、選択信号SELは、例えば、データRDATAが読み出されるレジスタRを示すレジスタ番号RN2と、制御レジスタ43、44、45のイネーブルENとにより生成される。
【0088】
図13は、図7に示した出力データ生成部29の概要を示している。図中の網掛け部分は、上述した図6に示した出力データ生成部28と相違する部分を示している。図6で説明した左論理シフト部280、FF282、オア回路283およびセレクタ284については、詳細な説明を省略する。出力データ生成部29は、左論理シフト部280、右論理シフト部285、セレクタ286、FF282、オア回路283およびセレクタ284を有している。
【0089】
右論理シフト部285は、レジスタRのビット幅の2倍のビット幅(この実施形態では、64)のデータを受け、受けたデータをシフト量LSR分だけ右論理シフトする。なお、右論理シフト部285が受ける64ビット幅のデータは、上位32ビット側が左論理シフト部280の出力データ(32ビット幅のデータ)であり、下位32ビットは、“0”で埋められている。また、シフト量LSRは、演算結果を格納するレジスタRに対応する制御レジスタ(例えば、制御レジスタ43)のビット長LNおよびオフセットOFの加算値を64(レジスタRのビット幅の2倍)から引いた値である。これにより、例えば、演算結果のデータは、演算結果のデータの最下位ビットと32ビット幅のデータにおけるオフセットOFの位置とが一致する位置にシフトされる。
【0090】
セレクタ286は、選択信号SEL2に基づいて、データS3、S4の一方をFF282に出力する。例えば、セレクタ286は、演算結果を格納するレジスタRに対応する制御レジスタ(制御レジスタ43等)のビット長LNとオフセットOFとの加算結果が32(レジスタRのビット幅)以上の場合、データS3をFF282に出力する。その他の条件(加算結果が32より小さい場合)では、セレクタ286は、データS4をFF282に出力する。ここで、データS3は、右論理シフト部285の出力データ(64ビット幅のデータ)の上位32ビットのデータであり、データS4は、オア回路283の出力データ(32ビット幅のデータ)である。これにより、レジスタRの組(例えば、R4とR5、R6とR7、R8とR9)の両方のレジスタにまたいで演算結果のデータを格納する場合、演算結果の一部をレジスタRの組の一方に格納した際に、演算結果の残りをFF282に格納できる。
【0091】
オア回路283は、右論理シフト部285の出力データ(64ビット幅のデータ)の下位32ビットのデータIN2とFF282から読み出されるデータIN1とのオアの結果をセレクタ284およびセレクタ286に出力する。
【0092】
セレクタ284は、選択信号SELに基づいて、データS1、S2の一方をデータODATAとして、レジスタ番号RN2が示すレジスタRに出力する。この実施形態では、選択信号SELは、例えば、データODATAが格納されるレジスタRを示すレジスタ番号RN2と、制御レジスタ43、44、45のイネーブルENとにより生成される。なお、セレクタ284の選択動作は、上述した図12に示したセレクタ222の選択動作において、データRDATAが読み出されるレジスタRをデータODATAが格納されるレジスタRに読み替えることで説明される。
【0093】
図14は、ロード命令とレジスタの状態との関係の一例を示している。なお、図14は、メモリMEMからレジスタR4、R5に9ビット長のデータDSを連続してロードした際のレジスタR4、R5の状態の一例を示している。また、図14(a)は、アドレスadr1のデータをレジスタR4に連続してロードするプログラムの一例を示し、図14(b)は、図14(a)のプログラムが実行された際のレジスタR4、R6の状態を示している。なお、図のメモリMEM、レジスタR4、R5は、右側が下位ビットである。また、この実施形態では、アドレスadr1は自動でインクリメント(例えば、+4)される。
【0094】
1回目のロード命令(図14(a1))では、プロセッサ11は、メモリMEMのアドレス“0x0000”に格納されているデータDS(データDS0、DS1、DS2、データDS3の下位5ビット)をレジスタR4にロードする(図14(b2))。2回目のロード命令(図14(a2))では、上述した図9−11に示した処理によりロード先のレジスタがレジスタR4からレジスタR5に変換され、プロセッサ11は、アドレス“0x0004”に格納されているデータDSをレジスタR5にロードする(図14(b3))。
【0095】
3回目のロード命令(図14(a3))では、図9−11に示した処理によりロード先のレジスタがレジスタR4に設定され、プロセッサ11は、アドレス“0x0008”に格納されているデータDSをレジスタR4にロードする(図14(b4))。4回目のロード命令(図14(a4))では、上述した図9−11に示した処理によりロード先のレジスタがレジスタR4からレジスタR5に変換され、プロセッサ11は、アドレス“0x000C”に格納されているデータDSをレジスタR5にロードする(図14(b5))。このように、レジスタR4、R5から構成されるレジスタ群にメモリMEMからデータを連続してロードした場合、ロードされたデータは、レジスタR4、R5に交互に格納される。
【0096】
図15は、レジスタR4−R9に格納されるデータの一例を示す図である。なお、図15(a)は、連続する9ビット長の複数のデータDSと連続する9ビット長の複数のデータDTとをそれぞれ加算するプログラムの一例を示している。また、図15(b)は、図15(a)のプログラムのループが2回繰り返された際のレジスタR4−R9の状態の一例を示している。なお、図4(b)の網掛け部分は、有効なデータが格納されていない領域を示している。図のレジスタR4−R9は、右側が下位ビットである。図15(a)のアドレスadr1、adr2、adr3は、メモリ(例えば、上述した図14に示したメモリMEM)のアドレスであり、自動でインクリメント(例えば、+4)される。
【0097】
命令BREQ_fullは、アドレスA(例えば、アドレスA4、A5)に割り当てられた制御レジスタ(例えば、制御レジスタ43、44)のフルFULが“1”のときに、指定されたラベル(例えば、ラベルLable1)に分岐する命令である。また、命令BREQ_empは、アドレスA(例えば、アドレスA8)に割り当てられた制御レジスタ(例えば、制御レジスタ45)のエンプティEMPが“1”のときに、指定されたラベル(例えば、ラベルLable3)に分岐する命令である。
【0098】
すなわち、図15(a)のプログラムでは、プロセッサ11は、レジスタR4、R5の少なくとも一方に有効なデータが格納されていない場合、有効なデータが格納されていないレジスタR(R4、R5の一方)に、アドレスadr1に格納されているデータDSをロードする(図15(a2)、(a3))。次に、プロセッサ11は、レジスタR6、R7の少なくとも一方に有効なデータが格納されていない場合、有効なデータが格納されていないレジスタR(R6、R7の一方)に、アドレスadr2に格納されているデータDTをロードする(図15(a5)、(a6))。
【0099】
そして、プロセッサ11は、レジスタR4、R5に格納されている複数のデータDSの1つと、レジスタR6、R7に格納されている複数のデータDTの1つとを加算し、加算結果のデータDDを、レジスタR8、R9のいずれかに格納する(図15(a8))。さらに、プロセッサ11は、図15(a8)と同様の加算処理を2回実施する(図15(a9)、(a10))。そして、プロセッサ11は、レジスタR8、R9の少なくとも一方に有効なデータが格納されている場合、レジスタR8、R9のいずれかに格納されているデータDDを、アドレスadr3にストアする(図15(a11)、(a12))。なお、プロセッサ11の動作は、レジスタR8、R9のいずれにも有効なデータが格納されていない場合、ループ処理の先頭に戻る(図15(a11)、(a13)、(a14))。
【0100】
図15(a)のプログラムのループが2回繰り返された場合、9ビット長の複数のデータDS(例えば、データDS0−DS6)が、レジスタR4、R5に格納され、9ビット長の複数のデータDT(例えば、データDT0−DT6)がレジスタR6、R7に格納される(図15(b1)。そして、複数のデータDS(例えば、データDS0−DS6)と、複数のデータDT(例えば、データDT0−DT6)とをそれぞれ加算した結果である10ビット長の複数のデータDD(例えば、データDD0−DD6)が、レジスタR8、R9に格納される(図15(b2))。
【0101】
このように、この実施形態では、2つのレジスタRをまたいで格納されたデータを扱え、2つのレジスタRをまたいでデータを格納できる。これにより、この実施形態では、レジスタRおよびメモリ(例えば、図14に示したメモリMEM)をさらに有効に使用できる。また、この実施形態では、上述した図7に示したALU25がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。
【0102】
図16、図17は、図12に示した入力データ抽出部23の動作の一例を示している。なお、図16、図17は、図15に示したプログラムが実施されたときの入力データ抽出部23の一方の動作の一例を示している。入力データ抽出部23の他方の動作は、データDS、レジスタRS2、レジスタR4、R5および制御レジスタ43を、データDT、レジスタRT2、レジスタR6、R7および制御レジスタ44にそれぞれ読み替えることで説明される。
【0103】
図中の網掛け部分は、有効なデータでない部分を示し、符号SEは、符号拡張を示している。なお、図の例では、右側が下位ビットである。また、図中の破線で囲んだ部分は、命令が実行される際の制御レジスタ43の値(OF、RPT、WPT、EMPおよびFULの値)、レジスタ番号RN2のレジスタRS2が示すレジスタR、ライトイネーブルWEの値、シフト量LSL、ASRの値を示している。図中の括弧内のレジスタ番号RPT、WPT等は、命令が実行される際に更新された制御レジスタ43の値等を示している。
【0104】
なお、制御レジスタ43のイネーブルEN、ビット長LN、オフセットOF、レジスタ番号RPT、WPT、エンプティEMP、フルFULの初期値は、図15に示したプログラムが実施される前に、それぞれ“1”、“9”、“0”、“レジスタR4を示す値(以下、単にR4とも称する)”、“R4”、“0”、“1”に設定されている。そして、レジスタ番号WPT、エンプティEMPは、アドレスadr1のデータをレジスタR4にロードした際(図15(a3))に、上述した図9に示した動作により、“R4”、“1”から“レジスタR5を示す値(以下、単にR5とも称する)”、“0”にそれぞれ更新されている。
【0105】
図16に示すように、先ず、1回目の加算命令(図15(a8))では、入力データ抽出部23は、レジスタR4(レジスタ番号RPTが示すレジスタR)に格納されているRDATAを読み出し、データDS0を抽出する(図16(a))。例えば、左論理シフト部226は、64ビット幅のデータ(上位32ビット側がデータRDATA、下位32ビット側がFF224のデータ)を受け(図16(a1))、受けたデータをシフト量LSL(23ビット)分だけ左論理シフトする。そして、右算術シフト部221は、左論理シフト部226の出力データの上位32ビットのデータを受け(図16(a2))、受けたデータをシフト量ASR(23ビット)分だけ右算術シフトする。なお、オフセットOFは、上述した図9、図10に示した動作により、“0”から“9”に更新される。
【0106】
2回目の加算命令(図15(a9))では、入力データ抽出部23は、レジスタR4に格納されているRDATAを読み出し、オフセットOF(OF=9)に基づいて、データDS1を抽出する(図16(b))。入力データ抽出部23の動作は、左論理シフト部226のシフト量LSL(14ビット)を除いて、1回目の加算命令のとき(図16(a))と同じである。なお、オフセットOFは、図9、図10に示した動作により、“9”から“18”に更新される。
【0107】
3回目の加算命令(図15(a10))では、入力データ抽出部23は、レジスタR4に格納されているRDATAを読み出し、オフセットOF(OF=18)に基づいて、データDS2を抽出する(図16(b))。入力データ抽出部23の動作は、FF224へデータRDATAを書き込むことと左論理シフト部226のシフト量LSL(5ビット)とを除いて、1回目の加算命令のとき(図16(a))と同じである。例えば、ビット長LNを2倍した値とオフセットOFとの加算結果が32より大きい(WE=1)ため、データDS3aを含むデータRDATAは、FF224に格納される。なお、データDS3aは、データDS3の下位5ビットのデータである。
【0108】
また、オフセットOF、レジスタ番号RPT、エンプティEMPは、図9、図10に示した動作により、“18”、“R4”、“0”から“27”、“R5”、“1”にそれぞれ更新される。エンプティEMPが“1”に更新されたため、2回目のループでは、プロセッサ11は、レジスタ番号WPTで示されるレジスタR5に、アドレスadr1に格納されているデータDSをロードする(図15(a2)、(a3))。この際、レジスタ番号WPT、エンプティEMPは、上述した図9に示した動作により、“R5”、“1”から“R4”、“0”にそれぞれ更新される。
【0109】
図17に示すように、2回目のループ中の1回目の加算命令(図15(a8))では、入力データ抽出部23は、レジスタR5(レジスタ番号RPTが示すレジスタR)に格納されているRDATAを読み出し、データDS3を抽出する(図17(d))。例えば、左論理シフト部226は、64ビット幅のデータ(上位32ビット側がデータRDATA、下位32ビット側がFF224のデータ)を受け(図17(d1))、受けたデータをシフト量LSL(28ビット)分だけ左論理シフトする。データRDATAの下位4ビットはデータDS3bであり、FF224のデータの上位5ビットは、データDS3aである。なお、データDS3bは、データDS3の上位4ビットのデータである。
【0110】
すなわち、左論理シフト部226が受ける64ビット幅のデータは、データDS3を含んで構成される。そして、右算術シフト部221は、左論理シフト部226の出力データの上位32ビットのデータを受け(図17(d2))、受けたデータをシフト量ASR(23ビット)分だけ右算術シフトする。このように、入力データ抽出部23は、レジスタR4、R5をまたいで格納されたデータDS3を抽出することができる。また、この場合、例えば、ビット長LNを2倍した値とオフセットOFとの加算結果が32より大きい(WE=1)ため、レジスタR5から読み出したデータRDATAは、FF224に格納される。なお、オフセットOFは、上述した図9、図10に示した動作により、“27”から“4”に更新される。
【0111】
2回目のループ中の2回目の加算命令(図15(a9))では、入力データ抽出部23は、レジスタR5に格納されているRDATAを読み出し、オフセットOF(OF=4)に基づいて、データDS4を抽出する(図16(e))。入力データ抽出部23の動作は、FF224へデータRDATAを書き込まないことと左論理シフト部226のシフト量LSL(19ビット)とを除いて、2回目のループ中の1回目の加算命令のとき(図17(d))と同じである。なお、オフセットOFは、図9、図10に示した動作により、“4”から“13”に更新される。
【0112】
2回目のループ中の3回目の加算命令(図15(a10))では、入力データ抽出部23は、レジスタR5に格納されているRDATAを読み出し、オフセットOF(OF=13)に基づいて、データDS5を抽出する(図17(f))。入力データ抽出部23の動作は、左論理シフト部226のシフト量LSL(10ビット)を除いて、2回目のループ中の2回目の加算命令のとき(図17(e))と同じである。このように、この実施形態では、連続する任意のビット長のデータを順次読み出すことができる。
【0113】
図18、図19、図20は、図13に示した出力データ生成部29の動作の一例を示している。なお、図18−20は、図15に示したプログラムが実施されたときの出力データ生成部29の動作の一例を示している。図の例では、右側が下位ビットであり、符号SEは、符号拡張を示している。また、図中の破線で囲んだ部分は、命令が実行される際の制御レジスタ45の値(OF、RPT、WPT、EMPおよびFULの値)、レジスタ番号RN2のレジスタRD2が示すレジスタR、シフト量LSL、LSRの値、上述した図13に示したセレクタ286で選択されるデータS(S3、S4)を示している。図中の括弧内のレジスタ番号RPT、WPT等は、命令が実行される際に更新された制御レジスタ45の値等を示している。
【0114】
制御レジスタ45のイネーブルEN、ビット長LN、オフセットOF、レジスタ番号RPT、WPT、エンプティEMP、フルFULの初期値は、図15に示したプログラムが実施される前に、それぞれ“1”、“10”、“0”、“レジスタR8を示す値(以下、単にR8とも称する)”、“R8”、“0”、“1”に設定されている。また、FF282には、初期値として“0”が格納されている。
【0115】
図18に示すように、1回目の加算命令(図15(a8))では、出力データ生成部29は、上述した図1に示した命令実行部24からデータ(例えば、ALU25の演算結果)EDATAを受け、データEDATA内の有効データDD0を、レジスタR8(レジスタ番号WPTが示すレジスタR)に格納する(図18(a))。例えば、左論理シフト部280は、データEDATAを受け(図18(a1))、データDD0をシフト量LSL(22ビット)分だけ左論理シフトする。そして、右論理シフト部285は、64ビット幅のデータ(上位32ビット側が左論理シフト部280の出力、下位32ビット側が“0”で埋められたデータ)を受け(図18(a2))、受けたデータをシフト量LSR(54ビット)分だけ右論理シフトする(図18(a3))。
【0116】
オア回路283は、右論理シフト部285の出力データ(64ビット幅のデータ)の下位32ビットのデータIN2とFF282から読み出されるデータIN1とを受け(図18(a4))、データIN1、IN2のオアの結果をセレクタ284およびセレクタ286に出力する(図18(a5))。
【0117】
セレクタ286は、右論理シフト部285の出力データの上位32ビットのデータS3とオア回路283の出力データS4(S2)とを受け、オア回路283の出力データS4(S2)をFF282に格納する(図18(a6))。例えば、ビット長LNとオフセットOFとの加算結果が32より小さいため、データS4がFF282に出力される。また、セレクタ284は、データDD0を含むデータS2をデータODATAとして、レジスタR8に出力する(図18(a6))。なお、オフセットOFは、上述した図9、図10に示した動作により、“0”から“10”に更新される。
【0118】
2回目の加算命令(図15(a9))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD1をオフセットOF(OF=10)に基づいてレジスタR8に格納する(図18(b))。出力データ生成部29の動作は、右論理シフト部285のシフト量LSR(44ビット)を除いて、1回目の加算命令のとき(図18(a))と同じである。
【0119】
ここで、FF282から読み出されるデータIN1は、1回目の加算命令の際のオア回路283の出力データであるため、データDD0を含むデータである(図18(b4))。また、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD1を含むデータである(図18(b4))。このため、オア回路283の出力データS2は、データDD0、DD1を含むデータである(図18(b5))。すなわち、レジスタR8には、データDD0、DD1を含むデータODATAが格納される(図18(b6))。なお、オフセットOFは、図9、図10に示した動作により、“10”から“20”に更新される。
【0120】
図19に示すように、3回目の加算命令(図15(a10))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD2をオフセットOF(OF=20)に基づいてレジスタR8に格納する(図19(c))。出力データ生成部29の動作は、右論理シフト部285のシフト量LSR(34ビット)を除いて、1回目の加算命令のとき(図18(a))と同じである。なお、FF282から読み出されるデータIN1がデータDD0、DD1を含むデータであるため(図19(c4))、オア回路283の出力データS2およびデータODATAは、データDD0、DD1、DD2を含むデータである(図19(c5)、(c6))。また、オフセットOFは、図9、図10に示した動作により、“20”から“30”に更新される。
【0121】
2回目のループ中の1回目の加算命令(図15(a8))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD3aをオフセットOF(OF=30)に基づいてレジスタR8に格納し、データEDATA内のデータDD3bをFF282に格納する(図19(d))。なお、データDD3aは、データDD3の下位2ビットのデータであり、データDD3bは、データDD3の上位8ビットのデータである。
【0122】
出力データ生成部29の動作は、セレクタ286の動作と右論理シフト部285のシフト量LSR(34ビット)とを除いて、1回目の加算命令のとき(図18(a))と同じである。なお、FF282から読み出されるデータIN1は、データDD0、DD1、DD2を含むデータであり、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD3aを含むデータである(図19(d4))。このため、オア回路283の出力データS2およびデータODATAは、データDD0、DD1、DD2、DD3aを含むデータである(図19(d5)、(d6))。
【0123】
また、セレクタ286は、右論理シフト部285の出力データの上位32ビットのデータS3とオア回路283の出力データS4(S2)とを受け、データDD3bを含むデータS3をFF282に格納する(図18(d3)、(d6))。例えば、ビット長LNとオフセットOFとの加算結果が32以上であるため、データS3がFF282に出力される。なお、オフセットOF、レジスタ番号WPT、エンプティEMPは、図9、図10に示した動作により、“30”、“R8”、“1”から“8”、“レジスタR9を示す値(以下、単にR9とも称する)”、“0”にそれぞれ更新される。
【0124】
図20に示すように、2回目のループ中の2回目の加算命令(図15(a9))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD4をオフセットOF(OF=8)に基づいてレジスタR9(レジスタ番号WPTが示すレジスタR)に格納する(図20(e))。出力データ生成部29の動作は、データODATAを格納するレジスタR9と右論理シフト部285のシフト量LSR(46ビット)とを除いて、1回目の加算命令のとき(図18(a))と同じである。なお、オフセットOFは、図9、図10に示した動作により、“8”から“18”に更新される。
【0125】
ここで、FF282から読み出されるデータIN1は、データDD3b(レジスタR8に格納されたデータDD3aを除くデータDD3)を含むデータであり、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD4を含むデータである(図20(e4))。このため、オア回路283の出力データS2およびデータODATAは、データDD3b、DD4を含むデータである(図20(e5)、(e6))。このように、この実施形態では、連続する任意のビット長(例えば、10ビット)のデータDDのデータDD3を2つのレジスタR8、R9にまたいで格納することができる。
【0126】
2回目のループ中の3回目の加算命令(図15(a10))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD5をオフセットOF(OF=18)に基づいてレジスタR9に格納する(図20(f))。出力データ生成部29の動作は、右論理シフト部285のシフト量LSR(36ビット)を除いて、2回目のループ中の2回目の加算命令のとき(図20(e))と同じである。
【0127】
なお、FF282から読み出されるデータIN1は、データDD3b、DD4を含むデータであり、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD5を含むデータである(図20(f4))。このため、オア回路283の出力データS2およびデータODATAは、データDD3b、DD4、DD5を含むデータである(図20(f5)、(f6))。また、オフセットOFは、図9、図10に示した動作により、“18”から“28”に更新される。
【0128】
2回目のループでは、1回目の加算命令の際に、エンプティEMPが“0”に更新されたため、プロセッサ11は、レジスタ番号RPTで示されるレジスタR8のデータDD0、DD1、DD2、DD3aを、アドレスadr3にストアする(図15(a11)、(a12))。この際、レジスタ番号RPT、エンプティEMPは、上述した図9に示した動作により、“R8”、“0”から“R9”、“1”にそれぞれ更新される。
【0129】
以上、この実施形態においても、上述した図1−図6で説明した実施形態と同様の効果を得ることができる。さらに、この実施形態では、2つのレジスタRをまたいで格納されたデータを扱え、かつ、2つのレジスタRをまたいでデータを格納できる。この結果、この実施形態では、レジスタRをさらに有効に使用できる。また、この実施形態では、レジスタ番号RN2を上述した図9−図11に示した動作により変化させているため、2つのレジスタから構成されるレジスタ群(例えば、R4とR5、R6とR7、R8とR9)をFIFO(First-In First-Out)のように制御できる。さらに、この実施形態では、エンプティEMPおよびフルFULを利用することにより、条件実行命令(ロード命令、ストア命令等)の実行を制御できる。
【0130】
なお、上述した実施形態では、本発明を、32ビットのプロセッサ10、11に適用する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、本発明を、64ビットプロセッサに適用してもよい。この場合、例えば、レジスタファイル30は、64ビット幅の汎用レジスタR(R0−R9)を有する。また、本発明を、例えば、同時に複数の命令、データを処理可能なプロセッサ(SIMD(Single Instruction Multiple Data)プロセッサ、スーパースカラープロセッサ等)に適用してもよい。この場合にも、上述した実施形態と同様の効果を得ることができる。
【0131】
上述した実施形態では、入力データ抽出部22、23、命令実行部24、出力データ生成部28、29が単サイクルで動作する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、入力データ抽出部22、23、命令実行部24、出力データ生成部28、29は、パイプラインステージを分割し、マルチサイクルで動作してもよい。すなわち、入力データ抽出部22、23、命令実行部24、出力データ生成部28、29を、パイプライン処理で動作する構成にしてもよい。この場合にも、上述した実施形態と同様の効果を得ることができる。
【0132】
上述した図7−図20で説明した実施形態では、レジスタR4−R9がレジスタ群として使用される例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、レジスタR4−R9は、レジスタ群として使用されない場合、上述した図4に示したレジスタR4、R6、R8のように使用されてもよい。この場合、例えば、制御レジスタ43、44、45のイネーブルENを2ビットで構成することにより、レジスタR4−R9の使用の仕方を制御できる。例えば、レジスタR4、R5は、イネーブルENが“01”のときに、図4に示したレジスタR4、図1に示したレジスタR0のようにそれぞれ使用され、イネーブルENが“10”のときに、図1に示したレジスタR0、図4に示したレジスタR4のようにそれぞれ使用される。また、例えば、レジスタR4、R5は、イネーブルENが“11”のときに、上述した図12に示したレジスタR4、R5のように使用され、イネーブルENが“00”のときに、図1に示したレジスタR0のように使用される。この場合にも、上述した実施形態と同様の効果を得ることができる。
【0133】
上述した図7−図20で説明した実施形態では、制御レジスタ43、44、45がエンプティEMPおよびフルFULを有する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、制御レジスタ43、44、45は、エンプティEMPおよびフルFULが省かれて構成されてもよい。この場合にも、条件実行命令の制御を除いて、上述した実施形態と同様の効果を得ることができる。さらに、制御レジスタ43、44、45は、レジスタ番号WPT、RPT、エンプティEMPおよびフルFULが省かれて構成されてもよい。この場合にも、FIFOのように制御することと条件実行命令の制御とを除いて、上述した実施形態と同様の効果を得ることができる。
【0134】
以上、本発明について詳細に説明してきたが、上記の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【符号の説明】
【0135】
10、11‥プロセッサ;20、21‥実行ユニット;22、23‥入力データ抽出部;24‥命令実行部;25‥ALU;26‥ロード/ストアユニット;28、29‥出力データ生成部;30‥レジスタファイル;40−45‥制御レジスタ;50、54‥制御部
【先行技術文献】
【特許文献】
【0136】
【特許文献1】特開平11−68579号公報
【特許文献2】特開平6−19683号公報
【技術分野】
【0001】
本発明は、プロセッサに関する。
【背景技術】
【0002】
プロセッサは、四則演算や論理演算等を行う算術論理演算ユニット(以下、ALU(Arithmetic Logic Unit)とも称する)と、レジスタとを有している。一般的に、レジスタのビット長(ビット幅)は、32ビットあるいは64ビット等である。例えば、32ビット長のレジスタを有するプロセッサでは、データサイズ(ビット幅)が32ビット未満のデータをレジスタに格納する場合、レジスタの上位ビットは、“0”あるいは符号拡張で埋められる。したがって、データサイズが小さい場合等、レジスタは、有効に使用されない。なお、8の倍数のデータサイズ(8ビットあるいは16ビット等)のデータを連続して並べてレジスタに格納し、連続するデータをそれぞれ処理するプロセッサが提案されている。
【0003】
また、可変ビット長データを扱う装置では、複数の可変ビット長データからなるビット列をデータメモリから読み出し、読み出したビット列をバレルシフタで任意のビット数だけ論理シフトして演算器に入力する構成が提案されている(例えば、特許文献1参照)。なお、特許文献1の構成では、データメモリから読み出されるビット列のビット幅は、可変ビット長データの最大ビット長(例えば、16ビット)の2倍以上(例えば、32ビット)である。また、バレルシフタによりシフトするビット数は、演算器により算出される。
【0004】
なお、複数の演算器により構成されるALUを任意のビット幅で分割し、分割したALUの演算器で複数組のデータをそれぞれ演算する構成が提案されている(例えば、特許文献2参照)。
【発明の概要】
【発明が解決しようとする課題】
【0005】
8の倍数のデータサイズ(8ビットあるいは16ビット等)のデータを連続して並べてレジスタに格納し、連続するデータをそれぞれ処理するプロセッサでは、7ビットや9ビット等の半端なデータサイズを有するデータは、8の倍数のデータサイズに拡張される。この場合、拡張されたデータの上位ビットは、“0”あるいは符号拡張で埋められている。したがって、8の倍数以外の半端なデータサイズのデータが連続する場合等、レジスタは、有効に使用されない。
【0006】
本発明の目的は、レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用することである。
【課題を解決するための手段】
【0007】
プロセッサは、入力されたデータに対する演算を実行する演算部と、データが格納される複数の第1レジスタと、入力データ抽出部とを有している。例えば、入力データ抽出部は、演算対象のデータを含む入力ビット列が格納された第1レジスタから入力ビット列を読み出す。そして、入力データ抽出部は、予め設定された第1位置情報に基づいて、読み出した入力ビット列から演算対象のデータを抽出し、抽出した演算対象のデータを演算部のビット幅に拡張する。
【発明の効果】
【0008】
レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用できる。
【図面の簡単な説明】
【0009】
【図1】一実施形態におけるプロセッサの概要を示す図である。
【図2】図1に示した制御部の一例を示す図である。
【図3】図2に示した更新部の動作の一例を示す図である。
【図4】図1に示したレジスタに格納されるデータの一例を示す図である。
【図5】図1に示した入力データ抽出部の概要を示す図である。
【図6】図1に示した出力データ生成部の概要を示す図である。
【図7】別の実施形態におけるプロセッサの概要を示す図である。
【図8】図7に示した制御部の一例を示す図である。
【図9】図7に示した更新部の動作の一例を示す図である。
【図10】図9に示した動作の続きを示す図である。
【図11】図7示した変換部の動作の一例を示す図である。
【図12】図7に示した入力データ抽出部の概要を示す図である。
【図13】図7に示した出力データ生成部の概要を示す図である。
【図14】ロード命令とレジスタの状態との関係の一例を示す図である。
【図15】図7に示したレジスタに格納されるデータの一例を示す図である。
【図16】図12に示した入力データ抽出部の動作の一例を示す図である。
【図17】図16に示した動作の続きを示す図である。
【図18】図13に示した出力データ生成部の動作の一例を示す図である。
【図19】図18に示した動作の続きを示す図である。
【図20】図19に示した動作の続きを示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態を図面を用いて説明する。
【0011】
図1は、本発明の一実施形態を示している。プロセッサ10は、実行ユニット20、レジスタファイル30、制御レジスタ40、41、42および制御部50を有している。例えば、プロセッサ10は、32ビットプロセッサであり、32ビット幅の汎用レジスタR(R0−R9)をレジスタファイル30内に有している。なお、図中の破線で囲んだ汎用レジスタR4、R6、R8は、データが格納されるレジスタであり、制御レジスタ40、41、42は、汎用レジスタR4、R6、R8にそれぞれ対応して設けられている。以下、汎用レジスタR(R0−R9)をレジスタR(R0−R9)とも称する。
【0012】
実行ユニット20は、レジスタファイル30からデータを読み出し、データを命令実行部24に出力する2つの入力データ抽出部22と、命令を実行する命令実行部24と、令実行部24からデータを受け、レジスタファイル30にデータを書き込む出力データ生成部28とを有している。例えば、命令実行部24は、四則演算や論理演算等を実行する算術論理演算ユニット(以下、ALU(Arithmetic Logic Unit)とも称する)25と、ロード/ストア命令を実行するロード/ストアユニット26とを有している。なお、実行ユニット20は、図に示した入力データ抽出部22を1つにまとめた入力データ抽出部を有してもよい。
【0013】
制御レジスタ40、41、42は、例えば、命令によりレジスタR4、R6、R8がアクセスされる場合、制御部50によりそれぞれ参照される。例えば、制御レジスタ40は、制御レジスタ40を有効にするか否を示すイネーブルEN、レジスタR4に格納されるアクセス対象のデータのビット長を示すビット長LN、アクセス対象のデータのレジスタR4内でのオフセット値(データ位置)を示すオフセットOFを有している。例えば、制御レジスタ40を有効にする場合、イネーブルENは、“1”に設定される。また、オフセットOFは、後述する図3に示すように、次に使用するデータ位置を示すために、動作中に更新される。
【0014】
同様に、例えば、制御レジスタ41は、制御レジスタ41を有効にするか否を示すイネーブルEN、レジスタR6に格納されるアクセス対象のデータのビット長を示すビット長LN、アクセス対象のデータのレジスタR6内でのオフセット値を示すオフセットOFを有している。また、例えば、制御レジスタ42は、制御レジスタ41を有効にするか否を示すイネーブルEN、レジスタR6に格納されるアクセス対象のデータのビット長を示すビット長LN、アクセス対象のデータのレジスタR6内でのオフセット値を示すオフセットOFを有している。すなわち、制御レジスタ41、42は、対応するレジスタR(R6、R8)を除いて、制御レジスタ40と同じである。
【0015】
制御部50は、例えば、命令によりアクセスされるレジスタRを示すレジスタ番号RN1および命令の種類を示す命令種別TPをデコーダ(図示せず)から受け、制御レジスタ40、41、42のオフセットOFを更新する。ここで、この実施形態では、レジスタ番号RN1のレジスタRS1、RT1は、ソースのレジスタRを示し、レジスタ番号RN1のレジスタRD1は、ディスティネーションのレジスタRを示している。また、命令種別TPは、実行する命令の種類(ロード命令等)を示している。
【0016】
また、例えば、制御部50は、レジスタ番号RN1と、制御レジスタ40、41、42から読み出した制御情報RINF10、20、30とを実行ユニット20に出力する。例えば、各制御情報RINF10、20、30は、各制御レジスタ40、41、42のイネーブルEN、ビット長LNおよびオフセットOFを含む情報である。なお、図1では、制御レジスタ40、41、42の初期値等を設定するための制御信号(例えば、後述する図2に示す初期値INT1)の記載を省略している。
【0017】
図2は、図1に示した制御部50の一例を示している。制御部50(図中の破線で囲んだ部分)は、更新部51およびセレクタ52Aを有している。なお、図2は、制御レジスタ40のオフセットOFを更新するための更新部51およびセレクタ52Aを示し、制御レジスタ41、42のオフセットOFを更新するための更新部51およびセレクタ52Aの記載を省略している。例えば、制御レジスタ41、42のオフセットOFを更新するための更新部51およびセレクタ52Aは、制御する制御レジスタ41、42を除いて、図2と同じである。
【0018】
制御部50は、例えば、初期値INT1を受け、制御レジスタ40のイネーブルEN、ビット長LNおよびオフセットOFの値を初期値INT1に設定する。この場合、セレクタ52Aは、初期値INT1の値(より詳細には、オフセットOFの初期値)を制御レジスタ40に設定する値として選択する。ここで、例えば、制御レジスタ40、41、42は、アドレスマップ上に割り当てられている。これにより、ロード命令やストア命令で、制御レジスタ40、41、42の値(初期値等)を設定できる。また、図の例では、制御レジスタ40、41、42は、フリップフロップ(以下、FFとも称する)により構成されている。
【0019】
更新部51は、例えば、レジスタ番号RN1および命令種別TPに基づいて、オフセットOFを更新する。例えば、レジスタR4がアクセスされる命令が実行された場合、更新部51は、次に使用されるデータのレジスタR4におけるビット位置を算出し、オフセットOFを更新する。なお、更新部51の動作の詳細は、後述する図3で説明する。セレクタ52Aは、オフセットOFを更新する場合、更新部51から受ける値を制御レジスタ40に設定する値として選択する。
【0020】
図3は、図2に示した更新部51の動作の一例を示している。なお、図3は、制御レジスタ40のオフセットOFを更新するための更新部51(制御レジスタ40用の更新部51)の動作を示している。すなわち、図3では、制御レジスタ40用の更新部51の動作を説明する。制御レジスタ41、42のオフセットOFを更新するための更新部51(制御レジスタ41、42用の更新部51)のそれぞれの動作は、レジスタR4をレジスタR6、R8にそれぞれ読み替えることで説明される。なお、上述した図2に示したセレクタ52Aは、更新部51から受ける値を制御レジスタ40に設定するする値として選択している。
【0021】
先ず、処理60では、更新部51は、レジスタ番号RN1に基づいて、レジスタR4へのアクセスが発生するか否かを判定する。レジスタR4がアクセスされる場合(処理60のYes)、更新部51の動作は、処理61に移り、レジスタR4がアクセスされない場合(処理60のNo)、更新部51は、オフセットOFを更新せずに処理を終了する。なお、制御レジスタ41、42用の更新部51では、処理60において、レジスタR6、R8へのアクセスがそれぞれ発生するか否かを判定する。
【0022】
処理61では、更新部51は、イネーブルENが“1”に設定されているか否かを判定する。すなわち、更新対象の制御レジスタ(図の例では、制御レジスタ40)が有効か否かを判定する。イネーブルENが“1”の場合(処理61のYes)、更新部51の動作は、処理62に移り、イネーブルENが“1”でない場合(処理61のNo)、更新部51は、オフセットOFを更新せずに処理を終了する。
【0023】
処理62では、更新部51は、命令種別TPに基づいて、命令がロード命令か否かを判定する。ロード命令でない場合(処理62のNo)、更新部51の動作は、処理63に移り、ロード命令の場合(処理62のYes)、更新部51は、オフセットOFを更新せずに処理を終了する。
【0024】
処理63では、更新部51は、命令種別TPに基づいて、命令がストア命令か否かを判定する。ストア命令でない場合(処理63のNo)、更新部51の動作は、処理64に移り、ストア命令の場合(処理63のYes)、更新部51は、オフセットOFを更新せずに処理を終了する。
【0025】
処理64では、更新部51は、ビット長LNを2倍した値とオフセットOFとの加算結果がレジスタRのビット幅(この実施形態では、32)以上か否かを判定する。加算結果が32以上の場合(処理64のYes)、更新部51の動作は、処理65に移り、加算結果が31以下の場合(処理64のNo)、更新部51の動作は、処理66に移る。
【0026】
処理65では、更新部51は、オフセットOFを0に設定する。処理66では、更新部51は、現状のオフセットOFにビット長LNを加算した値に、オフセットOFを更新する。これにより、オフセットOFは、次に使用するデータの位置に順次更新される。
【0027】
なお、ロード命令およびストア命令が実行された後では、オフセットOFが“0”に設定されるように構成してもよい。この場合、例えば、処理62のYesおよび処理63のYesにおいて、更新部51の動作は、処理65(オフセットOFを“0”に設定)に移る。
【0028】
図4は、レジスタR4、R6、R8に格納されるデータの一例を示す図である。なお、図4(a)は、連続するデータDS0、DS1、DS2と連続するデータDT0、DT1、DT2とをそれぞれ加算するプログラムの一例を示している。また、図4(b)は、図4(a)のプログラムが実行された際のレジスタR4、R6、R8の状態の概要を示している。図4(a)のアドレスadr1、adr2、adr3は、メモリ(図示せず)のアドレスを示し、図4(b)の網掛け部分は、有効なデータが格納されていない領域を示している。図のレジスタR4、R6、R8は、右側が下位ビットである。
【0029】
なお、データDS0、DS1、DS2、DT0、DT1、DT2のビット長は、9ビットであり、データDD0、DD1、DD2のビット長は、10ビットである。したがって、上述した図1に示した制御レジスタ40、41、42のビット長LNは、“9”、“9”、“10”にそれぞれ設定されている。また、制御レジスタ40、41、42のオフセットOFの初期値は、“0”に設定されている。
【0030】
図4(a)のプログラムでは、先ず、プロセッサ10は、アドレスadr1に連続して格納されているデータDS0、DS1、DS2をレジスタR4にロードする(図4(a1)、(b1))。次に、プロセッサ10は、アドレスadr2に連続して格納されているデータDT0、DT1、DT2をレジスタR6にロードする(図4(a2)、(b1))。図の例では、レジスタR4、R6の有効に使用されない領域は、5ビットであり、データDS0、DS1、DS2、DT0、DT1、DT2毎に1つのレジスタRに格納する構成に比べて、レジスタRを有効に使用できる。さらに、この実施形態では、演算対象のデータを抽出するために、上述した図1に示したALU25がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。
【0031】
そして、プロセッサ10は、レジスタR4に格納されているデータDS0とレジスタR6に格納されているデータDT0とを加算し、加算結果であるデータDD0をレジスタR8に格納する(図4(a3)、(b2))。この際、制御レジスタ40、41、42のオフセットOFは、上述した図3に示した動作により、“9”、“9”、“10”にそれぞれ更新される。次に、プロセッサ10は、レジスタR4に格納されているデータDS1とレジスタR6に格納されているデータDT1とを加算し、加算結果であるデータDD1をレジスタR8に格納する(図4(a4)、(b3))。この際、制御レジスタ40、41、42のオフセットOFは、図3に示した動作により、“18”、“18”、“20”にそれぞれ更新される。その後、プロセッサ10は、レジスタR4に格納されているデータDS2とレジスタR6に格納されているデータDT2とを加算し、加算結果であるデータDD2をレジスタR8に格納する(図4(a5)、(b4))。
【0032】
このように、レジスタR8の有効に使用されない領域は、2ビットであり、データDD0、DD1、DD2毎に1つのレジスタRに格納する構成に比べて、レジスタRを有効に使用できる。さらに、この実施形態では、複数の演算結果のデータを連続して並べるために、ALU25がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。最後に、プロセッサ10は、レジスタR8に格納されているデータDD0、DD1、DD2をアドレスadr3にストアする(図4(a6))。このように、この実施形態では、データDS0、DS1、DS2、DT0、DT1、DT2、DD0、DD1、DD2を32ビット幅に拡張してメモリに格納する必要がないため、メモリを有効に使用できる。
【0033】
図5は、図1に示した入力データ抽出部22の概要を示している。図中の網掛け部分は、有効なデータでない部分を示している。なお、図のデータDS0、DS1、DS2の状態は、上述した図4(a4)の命令が実行されるときの状態に対応している。また、図のデータDS0、DS1、DS2は、右側が下位ビットである。入力データ抽出部22は、左論理シフト部220、右算術シフト部221、セレクタ222を有している。
【0034】
左論理シフト部220は、レジスタRから読み出されたデータRDATAをシフト量LSL分だけ左論理シフトする。図の例では、データRDATAは、有効でないデータ(図の網掛け部分)、データDS2、DS1、DS0を含むデータである。また、シフト量LSLは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ40)のビット長LNおよびオフセットOFの加算値をレジスタRのビット幅である32から引いた値である。左論理シフト部220により、例えば、演算対象のデータDS1は、32ビット幅のデータの一番左側にシフトされる。
【0035】
右算術シフト部221は、左論理シフト部220の出力データ(32ビット幅のデータ)をシフト量ASR分だけ右算術シフトする。すなわち、32ビット幅のデータの左側の空いたビットは、符号拡張SEで埋められる。これにより、入力データ抽出部22は、符号付きのデータを扱うことができる。なお、シフト量ASRは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ40)のビット長LNをレジスタRのビット幅である32から引いた値である。右算術シフト部221により、例えば、演算対象のデータDS1は、32ビット幅のデータの一番右側にシフトされる。
【0036】
セレクタ222は、選択信号SELに基づいて、データS1、S2の一方をデータIDATAとして上述した図1に示した命令実行部24に出力する。例えば、セレクタ222は、レジスタR4、R6、R8のいずれかからデータRDATAが読み出される場合、データRDATAが読み出されるレジスタR4、R6、R8に対応する制御レジスタ40、41、42のイネーブルENが“1”(制御レジスタが有効)のときに、データS2(右算術シフト部221の出力データ)をデータIDATAとして命令実行部24に出力する。その他の条件では、セレクタ222は、レジスタRから読み出したデータRDATA(データS1)をデータIDATAとして命令実行部24に出力する。
【0037】
例えば、セレクタ222は、レジスタR4、R6、R8以外のレジスタRからデータRDATAが読み出される場合、レジスタRから読み出したデータRDATA(データS1)をデータIDATAとして命令実行部24に出力する。すなわち、この実施形態では、選択信号SELは、例えば、データRDATAが読み出されるレジスタRを示すレジスタ番号RN1と、制御レジスタ40、41、42のイネーブルENとにより生成される。
【0038】
図6は、図1に示した出力データ生成部28の概要を示している。なお、図のデータDD0、DD1の状態は、上述した図4(a4)の命令が実行されるときの状態に対応している。また、図のデータDD0、DD1は、右側が下位ビットである。出力データ生成部28は、左論理シフト部280、右論理シフト部281、FF282、オア回路(以下、ORとも称する)283およびセレクタ284を有している。
【0039】
左論理シフト部280は、上述した図1に示した命令実行部24から受けたデータ(例えば、ALU25の演算結果)EDATAをシフト量LSL分だけ左論理シフトする。図の例では、データEDATAは、符号拡張SEおよびデータDD1から構成される32ビット幅のデータである。また、シフト量LSLは、演算結果を格納するレジスタRに対応する制御レジスタ(例えば、制御レジスタ42)のビット長LNをレジスタRのビット幅である32から引いた値である。左論理シフト部280により、例えば、演算結果のデータDD1は、32ビット幅のデータの一番左側にシフトされる。
【0040】
右論理シフト部281は、左論理シフト部280の出力データ(32ビット幅のデータ)をシフト量LSR分だけ右論理シフトする。なお、32ビット幅のデータの空いたビットは、“0”で埋められる。また、シフト量LSRは、演算結果を格納するレジスタRに対応する制御レジスタ(例えば、制御レジスタ42)のビット長LNおよびオフセットOFの加算値をレジスタRのビット幅である32から引いた値である。右論理シフト部281により、例えば、演算結果のデータDD1は、データDD1の最下位ビットと32ビット幅のデータにおけるオフセットOFの位置とが一致する位置にシフトされる。
【0041】
オア回路283は、右論理シフト部281の出力データとFF28から読み出されるデータとのオアをセレクタ284およびFF282に出力する。なお、FF282には、前回の演算命令(例えば、図4(a3))が実行された際のオア回路283の出力データ(図の例では、下位ビットから順にデータDD0および“0”が配置された32ビット幅のデータ)が格納されている。そして、今回の演算命令(例えば、図4(a4))により、FF282には、下位ビットから順に、データDD0、データDD1、“0”が配置された32ビット幅のデータが格納される。
【0042】
セレクタ284は、選択信号SELに基づいて、データS1、S2の一方をデータODATAとして、レジスタ番号RN1が示すレジスタRに出力する。例えば、セレクタ284は、レジスタR4、R6、R8のいずれかにデータODATAを格納する場合、データODATAが格納されるレジスタR4、R6、R8に対応する制御レジスタ40、41、42のイネーブルENが“1”(制御レジスタが有効)のときに、データS2(オア回路283の出力データ)をデータODATAとしてレジスタRに出力する。その他の条件では、セレクタ222は、命令実行部24から受けたデータEDATA(データS1)をデータODATAとして、レジスタ番号RN1が示すレジスタRに出力する。
【0043】
例えば、セレクタ284は、レジスタR4、R6、R8以外のレジスタRにデータODATAを格納する場合、命令実行部24から受けたデータEDATA(データS1)をデータODATAとしてレジスタRに出力する。すなわち、この実施形態では、選択信号SELは、例えば、データODATAが格納されるレジスタRを示すレジスタ番号RN1と、制御レジスタ40、41、42のイネーブルENとにより生成される。
【0044】
以上、この実施形態では、入力データ抽出部22は、制御レジスタ40、41、42に基づいて、レジスタR4、R6、R8の1つから連続する任意のビット長のデータを順次読み出す。さらに、この実施形態では、出力データ生成部28は、制御レジスタ40、41、42に基づいて、レジスタR4、R6、R8の1つに任意のビット長の複数のデータを順次格納する。したがって、この実施形態では、データ毎に1つのレジスタRに格納する構成に比べて、レジスタRを有効に使用できる。すなわち、この実施形態では、レジスタのビット幅に対して半端なデータサイズ(例えば、8の倍数以外のデータサイズ)のデータが連続する場合でも、レジスタを有効に使用できる。
【0045】
図7は、別の実施形態におけるプロセッサの概要を示している。この実施形態のプロセッサ11は、上述した図1に示した実行ユニット20、制御レジスタ40、41、42および制御部50の代わりに、実行ユニット21、制御レジスタ43、44、45および制御部54がそれぞれ設けられている。その他の構成は、図1−図6で説明した示したプロセッサ10と同じである。図1−図6で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。
【0046】
例えば、プロセッサ11は、32ビットプロセッサであり、実行ユニット21、レジスタファイル30、制御レジスタ43、44、45および制御部54を有している。なお、図中の破線で囲んだレジスタRの組(R4とR5、R6とR7、R8とR9)には、制御レジスタ43、44、45がそれぞれ対応して設けられている。すなわち、制御レジスタ43、44、45は、図中の破線で囲んだレジスタRの組(R4とR5、R6とR7、R8とR9)にそれぞれ対応して設けられている。
【0047】
実行ユニット21は、図1に示した入力データ抽出部22および出力データ生成部28の代わりに、入力データ抽出部23および出力データ生成部29がそれぞれ設けられている。入力データ抽出部23は、レジスタRの組(例えば、R4とR5、R6とR7、R8とR9)の両方のレジスタをまたいで格納されたデータを読み出せるように構成されている。例えば、レジスタR4、R5から構成されるレジスタ群からデータを読み出す場合、入力データ抽出部23は、レジスタR4、R5をまたいで格納されたデータを読み出せる。なお、入力データ抽出部23の詳細は、後述する図14で説明する。
【0048】
出力データ生成部29は、レジスタRの組(例えば、R4とR5、R6とR7、R8とR9)の両方のレジスタにまたいでデータを格納できるように構成されている。例えば、レジスタR4、R5から構成されるレジスタ群に20ビット長のデータを2つ格納する場合、出力データ生成部29は、2つめのデータの下位12ビットをレジスタR4に格納し、2つめのデータの上位8ビットをレジスタR5に格納する。なお、出力データ生成部29の詳細は、後述する図15で説明する。
【0049】
制御レジスタ43は、レジスタR4、R5から構成されるレジスタ群に対応して設けられ、例えば、命令によりレジスタR4、R5がアクセスされる場合、制御部54により参照される。例えば、制御レジスタ43は、イネーブルEN、ビット長LN、オフセットOF、レジスタ番号RPT、WPT、エンプティEMPおよびフルFULを有している。イネーブルEN、ビット長LN、オフセットOFは、図1で説明したイネーブルEN、ビット長LN、オフセットOFと同じである。例えば、制御レジスタ43を有効にする場合、イネーブルENは、“1”に設定される。なお、オフセットOFには、レジスタR4にアクセスする場合、アクセス対象のデータのレジスタR4内でのオフセット値(データ位置)が設定され、レジスタR5にアクセスする場合、アクセス対象のデータのレジスタR5内でのオフセット値が設定される。
【0050】
レジスタ番号RPTには、データが読み出されるレジスタRを示すレジスタ番号が設定され、レジスタ番号WPTには、データが書き込まれるレジスタRを示すレジスタ番号が設定される。エンプティEMPは、レジスタR4、R5のいずれにも有効なデータが格納されていない状態(レジスタR4、R5の両方が空の状態)を示している。例えば、レジスタR4、R5のいずれにも有効なデータが格納されていない状態では、エンプティEMPは、“1”に設定される。また、フルFULは、レジスタR4、R5の両方に有効なデータが格納されている状態を示している。例えば、レジスタR4、R5の両方に有効なデータが格納されている状態では、フルFULは、“1”に設定される。制御レジスタ44、45は、対応するレジスタ群(R6とR7、R8とR9)を除いて、制御レジスタ43と同じである。
【0051】
制御部54は、レジスタ番号RN1および命令種別TPをデコーダ(図示せず)から受け、制御情報RINF10、11、20、21、30、31を制御レジスタ43、44、45から読み出し、制御レジスタ43、44、45のオフセットOF等を更新する。ここで、例えば、各制御情報RINF11、21、31は、各制御レジスタ43、44、45のレジスタ番号RPT、WPT、エンプティEMPおよびフルFULを含む情報である。
【0052】
また、例えば、制御部54は、制御レジスタ43、44、45から読み出した制御情報RINF10、20、30を実行ユニット21に出力し、レジスタ番号RN1の代わりにレジスタ番号RN2を実行ユニット21に出力する。なお、この実施形態では、レジスタ番号RN2のレジスタRS2、RT2は、ソースのレジスタRを示し、レジスタ番号RN2のレジスタRD2は、ディスティネーションのレジスタRを示している。また、図7では、制御レジスタ43、44、45の初期値等を設定するための制御信号(例えば、後述する図8に示す初期値INT2)の記載を省略している。
【0053】
図8は、図7に示した制御部54の一例を示している。制御部54(図中の破線で囲んだ部分)は、セレクタ52(52A、52B、52C、52D、52E)、更新部55および変換部56を有している。なお、図8は、制御レジスタ43用のセレクタ52および更新部を示し、制御レジスタ44、45用のセレクタ52および更新部55の記載を省略している。例えば、制御レジスタ44、45用のセレクタ52および更新部55は、制御する制御レジスタ44、45を除いて、図8と同じである。また、図8では、制御レジスタ44、45の記載を省略している。
【0054】
制御部54は、例えば、初期値INT2を受け、制御レジスタ43の各値(イネーブルEN等)を初期値INT2に設定する。この場合、セレクタ52は、初期値INT2の値を制御レジスタ43に設定する値として選択する。ここで、例えば、制御レジスタ43、44、45は、アドレスマップ上に割り当てられている。これにより、ロード命令やストア命令で、制御レジスタ43、44、45の値(初期値等)を設定できる。また、図の例では、制御レジスタ43、44、45は、フリップフロップにより構成されている。
【0055】
更新部55は、例えば、レジスタ番号RN1および命令種別TPを受け、制御情報RINF10、11を制御レジスタ43から読み出し、オフセットOF、レジスタ番号RPT、WPT、エンプティEMPおよびフルFULを更新する。なお、更新部55の動作の詳細は、後述する図9、図11で説明する。セレクタ52は、制御レジスタ43の値を更新する場合、更新部55から受ける値を制御レジスタ43に設定する値として選択する。
【0056】
変換部56は、例えば、レジスタ番号RN1および命令種別TPを受け、レジスタ番号RN1が示すレジスタRに対応する制御レジスタ43、44、45からレジスタ番号RPT、WPT、イネーブルENを読み出し、レジスタ番号RN2を設定する。なお、レジスタ番号RN1により指定されるレジスタRが制御レジスタ43、44、45に対応していないレジスタRの場合、変換部56は、レジスタ番号RPT、WPT、イネーブルENを、制御レジスタ43、44、45から読み出さなくてもよい。そして、変換部56は、レジスタ番号RN1の代わりにレジスタ番号RN2を上述した図7に示した実行ユニット21に出力する。なお、変換部56の動作の詳細は、後述する図11で説明する。
【0057】
図9、図10は、図8示した更新部55の動作の一例を示している。なお、図9、図10は、制御レジスタ43のオフセットOF、レジスタ番号RPT、WPT、エンプティEMPおよびフルFULを更新するための更新部55の動作を示している。すなわち、図9、10では、制御レジスタ43用の更新部55の動作を説明する。制御レジスタ44用の更新部55の動作は、レジスタR4、R5をレジスタR6、R7に読み替えることで説明され、制御レジスタ45用の更新部55の動作は、レジスタR4、R5をレジスタR8、R9に読み替えることで説明される。また、上述した図8に示したセレクタ52は、更新部55から受ける値を制御レジスタ43に設定するする値として選択している。なお、図10の符号%は、剰余演算子を示している。
【0058】
先ず、図9に示すように、処理70では、更新部55は、レジスタ番号RN1に基づいて、レジスタR4、R5のいずれかへのアクセスが発生するか否かを判定する。レジスタR4、R5のいずれかがアクセスされる場合(処理70のYes)、更新部55の動作は、処理72に移り、レジスタR4、R5のいずれもアクセスされない場合(処理70のNo)、更新部55は、制御レジスタ43を更新せずに処理を終了する。
【0059】
処理72では、更新部55は、イネーブルENが“1”に設定されているか否かを判定する。すなわち、制御レジスタ43が有効か否かを判定する。イネーブルENが“1”の場合(処理72のYes)、更新部55の動作は、処理74に移り、イネーブルENが“1”でない場合(処理72のNo)、更新部55は、制御レジスタ43を更新せずに処理を終了する。例えば、レジスタR4、R5を上述した図7に示したレジスタR0−R3と同じように扱う場合、更新部55は、制御レジスタ43を更新せずに処理を終了する。すなわち、レジスタR4およびレジスタR5を、レジスタR4、R5から構成されるレジスタ群として使用しない場合、更新部55は、制御レジスタ43を更新せずに処理を終了する。
【0060】
処理74では、更新部55は、命令種別TPに基づいて、命令がロード命令か否かを判定する。ロード命令の場合(処理74のYes)、更新部55の動作は、処理76に移り、ロード命令でない場合(処理74のNo)、更新部55の動作は、処理84に移る。
【0061】
処理76では、更新部55は、レジスタ番号WPTを更新する。例えば、更新前のレジスタ番号WPTがレジスタR4を示すとき、更新部55は、レジスタR5を示すレジスタ番号に、レジスタ番号WPTを更新する。また、例えば、更新前のレジスタ番号WPTがレジスタR5を示すとき、更新部55は、レジスタR4を示すレジスタ番号に、レジスタ番号WPTを更新する。例えば、更新後のレジスタ番号WPTは、定数番号を4(レジスタR4を示す値)とした場合、更新前のレジスタ番号WPTから定数番号を引いた値に1を加算した結果を被除数とし、被除数を2で割ったときの剰余を定数番号に加算することにより算出される。なお、定数番号を5(レジスタR5を示す値)とした場合、更新後のレジスタ番号WPTは、定数番号から更新前のレジスタ番号WPTを引いた値に1を加算した結果を被除数とし、被除数を2で割ったときの剰余を定数番号から減算することにより算出される。
【0062】
処理78では、更新部55は、処理76で更新されたレジスタ番号WPTがレジスタ番号RPTと同じか否かを判定する。レジスタ番号WPT、RPTが互いに同じ場合(処理78のYes)、更新部55は、処理80において、フルFULを“1”(レジスタR4、R5の両方に有効なデータが格納されている状態を示す情報)に設定する。一方、レジスタ番号WPT、RPTが互いに異なる場合(処理78のNo)、更新部55の動作は、処理82に移る。処理82では、更新部55は、エンプティEMPを“0”(レジスタR4、R5の少なくとも一方に有効なデータが格納されている状態を示す情報)に設定する。
【0063】
処理84(処理74において、ロード命令でないと判定された場合)では、更新部55は、命令種別TPに基づいて、命令がストア命令か否かを判定する。ストア命令の場合(処理84のYes)、更新部55の動作は、処理86に移り、ストア命令でない場合(処理84のNo)、更新部55の動作は、図10に示す処理Aに移る。
【0064】
処理86では、更新部55は、レジスタ番号RPTを更新する。例えば、更新前のレジスタ番号RPTがレジスタR4を示すとき、更新部55は、レジスタR5を示すレジスタ番号に、レジスタ番号RPTを更新する。また、例えば、更新前のレジスタ番号RPTがレジスタR5を示すとき、更新部55は、レジスタR4を示すレジスタ番号に、レジスタ番号RPTを更新する。例えば、更新後のレジスタ番号RPTは、処理76のレジスタ番号WPTの更新と同様の演算により算出される。
【0065】
処理88では、更新部55は、レジスタ番号WPTが処理86で更新されたレジスタ番号RPTと同じか否かを判定する。レジスタ番号WPT、RPTが互いに同じ場合(処理88のYes)、更新部55は、処理90において、エンプティEMPを“1”(レジスタR4、R5のいずれにも有効なデータが格納されていない状態を示す情報)に設定する。一方、レジスタ番号WPT、RPTが互いに異なる場合(処理88のNo)、更新部55の動作は、処理92に移る。処理92では、更新部55は、フルFULを“0”(レジスタR4、R5の少なくとも一方は空の状態を示す情報)に設定する。
【0066】
図10に示すように、処理94(図9の処理84において、ストア命令でないと判定された場合)では、更新部55は、レジスタ番号RN1に基づいて、レジスタR4、R5から構成されるレジスタ群へのアクセスがディスティネーションか否かを判定する。例えば、レジスタ番号RN1のレジスタRD1がレジスタR4の場合、レジスタR4、R5から構成されるレジスタ群へのアクセスは、ディスティネーションである。レジスタ群へのアクセスがディスティネーションの場合(処理94のYes)、更新部55の動作は、処理96に移り、レジスタ群へのアクセスがソースの場合(処理94のNo)、更新部55の動作は、処理108に移る。
【0067】
処理96では、更新部55は、オフセットOFとビット長LNとの加算結果がレジスタRのビット幅(この実施形態では、32)以上か否かを判定する。加算結果が32以上の場合(処理96のYes)、更新部55の動作は、処理98に移る。処理98、100、102、104は、処理76、78、80、82と同じである。処理96、98により、上述した図7に示した出力データ生成部29は、レジスタR4、R5にまたいでデータを格納できる。一方、加算結果が31以下の場合(処理96のNo)、更新部55の動作は、処理104に移る。
【0068】
処理106では、更新部55は、オフセットOFを更新する。例えば、更新後のオフセットOFは、更新前のオフセットOFにビット長LNを加算した結果を被除数とし、被除数をレジスタRのビット幅(この実施形態では、32)で割ったときの剰余により算出される。
【0069】
処理108(処理94において、レジスタ群へのアクセスがソースと判定された場合)では、更新部55は、オフセットOFを更新する。例えば、更新後のオフセットOFは、処理106のオフセットOFの更新と同様の演算により算出される。
【0070】
処理109では、更新部55は、処理108で更新されたオフセットOFが0か否かを判定する。オフセットOFが0の場合(処理109のYes)、更新部55の動作は、処理112に移り、オフセットOFが0でない場合(処理109のNo)、更新部55の動作は、処理110に移る。
【0071】
処理110では、更新部55は、オフセットOFとビット長LNとの加算結果がレジスタRのビット幅(この実施形態では、32)より大きいか否かを判定する。加算結果が32より大きい場合(処理110のYes)、更新部55は、処理112において、レジスタ番号RPTを更新し、加算結果が32以下の場合(処理110のNo)、更新部55は、レジスタ番号RPTを更新しない。処理112、114、116、118は、処理86、88、90、92と同じである。処理108、109、110、112により、図7に示した入力データ抽出部23は、レジスタR4、R5をまたいで格納されたデータを読み出せる。
【0072】
図11は、図8示した変換部56の動作の一例を示している。なお、図11は、レジスタ番号RN2の1つ(レジスタRD2、RS2、RT2の1つ)を設定する際の変換部56の動作を示している。レジスタ番号RN1により指定されるレジスタRが複数の場合(すなわち、レジスタ番号RN2に設定されるレジスタRが複数の場合)、アクセスが発生する各レジスタRに対して、図11の処理が実施される。
【0073】
先ず、処理120では、変換部56は、レジスタ番号RN1に基づいて、レジスタR4−R9のいずれかへのアクセスが発生するか否かを判定する。レジスタR4−R9のいずれかがアクセスされる場合(処理120のYes)、変換部56の動作は、処理122に移り、レジスタR4−R9がアクセスされない場合(処理120のNo)、変換部56は、処理138において、レジスタ番号RN2のレジスタ(RD2、RS2、RT2)をレジスタ番号RN1のレジスタ(RD1、RS1、RT1)に設定する。
【0074】
例えば、レジスタ番号RN1のレジスタRD1、RS1、RT1がレジスタR3、R4、R6の場合、変換部56は、処理138において、レジスタ番号RN2のレジスタRD2をレジスタR3に設定し、レジスタ番号RN2のレジスタRS2、RT2を設定するために処理122を実施する。
【0075】
処理122では、変換部56は、レジスタ番号RN1により指定されるレジスタRに対応する制御レジスタ43、44、45のイネーブルENが“1”に設定されているか否かを判定する。すなわち、レジスタ番号RN1により指定されるレジスタRに対応する制御レジスタ43、44、45が有効か否かを判定する。処理122により、レジスタ番号RN1により指定されるレジスタRを、2つのレジスタRから構成されるレジスタ群として使用するか、上述した図7に示したレジスタR0−R3と同じように単独のレジスタRとして使用するかが判定される。
【0076】
イネーブルENが“1”の場合(処理122のYes)、変換部56の動作は、処理124に移り、イネーブルENが“1”でない場合(処理122のNo)、変換部56は、処理138において、レジスタ番号RN2のレジスタ(RD2、RS2、RT2)をレジスタ番号RN1のレジスタ(RD1、RS1、RT1)に設定する。例えば、レジスタ番号RN1のレジスタRD1、RS1、RT1がレジスタR8、R4、R6であり、かつ、制御レジスタ43、44、45のイネーブルENが“1”、“1”、“0”にそれぞれ設定されている場合、変換部56は、レジスタ番号RN2のレジスタRS2、RT2を設定するために処理124を実施する。さらに、変換部56は、処理138において、レジスタ番号RN2のレジスタRD2を、レジスタ番号RN1のレジスタRD1(レジスタR8)に設定する。
【0077】
処理124では、変換部56は、命令種別TPに基づいて、命令がロード命令か否かを判定する。ロード命令の場合(処理124のYes)、変換部56は、処理126において、レジスタ番号RN2のレジスタRT2をレジスタ番号WPTが示すレジスタRに設定する。一方、ロード命令でない場合(処理124のNo)、変換部56の動作は、処理128に移る。
【0078】
処理128では、変換部56は、命令種別TPに基づいて、命令がストア命令か否かを判定する。ストア命令の場合(処理128のYes)、変換部56は、処理130において、レジスタ番号RN2のレジスタRT2をレジスタ番号RPTが示すレジスタRに設定する。一方、ストア命令でない場合(処理128のNo)、変換部56の動作は、処理132に移る。
【0079】
処理132では、変換部56は、レジスタ番号RN1に基づいて、レジスタ番号RN1により指定されるレジスタRを含むレジスタ群へのアクセスがディスティネーションか否かを判定する。レジスタ群へのアクセスがディスティネーションの場合(処理132のYes)、変換部56は、処理134において、レジスタ番号RN2のレジスタRD2をレジスタ番号WPTが示すレジスタRに設定する。一方、レジスタ群へのアクセスがソースの場合(処理132のNo)、変換部56は、処理136において、レジスタ番号RN2のレジスタ(例えば、レジスタRS2、RT2)をレジスタ番号RPTが示すレジスタRに設定する。
【0080】
例えば、処理136では、レジスタ番号RN1のレジスタRS1がレジスタR4、R5のいずれかの場合、変換部56は、レジスタ番号RN2のレジスタRS2を制御レジスタ43のレジスタ番号RPTが示すレジスタR(R4あるいはR5)に設定する。また、例えば、レジスタ番号RN1のレジスタRT1がレジスタR4、R5のいずれかの場合、変換部56は、処理136において、レジスタ番号RN2のレジスタRT2を制御レジスタ43のレジスタ番号RPTが示すレジスタR(R4あるいはR5)に設定する。
【0081】
図12は、図7に示した入力データ抽出部23の概要を示している。図中の網掛け部分は、上述した図5に示した入力データ抽出部22と相違する部分を示している。また、図12の符号%は、剰余演算子を示している。入力データ抽出部23は、FF224、左論理シフト部226、右算術シフト部221、セレクタ222を有している。
【0082】
FF224は、例えば、ライトイネーブルWEが“1”のときに、レジスタRから読み出されたデータRDATAを格納する。例えば、ライトイネーブルWEは、読み出したレジスタRに対応する制御レジスタ(制御レジスタ43等)のビット長LNおよびオフセットOFに基づいて生成され、入力データ抽出部23により生成されてもよいし、上述した図7に示した制御部54により生成されてもよい。この実施形態では、ライトイネーブルWEは、ビット長LNを2倍した値とオフセットOFとの加算結果がレジスタRのビット幅(この実施形態では、32)より大きい場合、“1”であり、加算結果が32以下の場合、“0”である。
【0083】
すなわち、FF224には、2つのレジスタRをまたいで格納されているデータを使用する命令が実行される前に、2つのレジスタRをまたいで格納されているデータの一部を含むデータRDATAが格納される。なお、FF224は、ライトイネーブルWEを使用せずに、レジスタRからデータRDATAが読み出される度に、データRDATAを格納してもよい。
【0084】
左論理シフト部226は、レジスタRのビット幅の2倍のビット幅(この実施形態では、64)のデータを受け、受けたデータをシフト量LSL分だけ左論理シフトする。なお、左論理シフト部226が受ける64ビット幅のデータは、上位32ビット側がレジスタRから読み出されたデータRDATAであり、下位32ビット側がFF224から読み出されたデータである。また、シフト量LSLは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ43)のビット長LNおよびオフセットOFの加算値を64(レジスタRのビット幅の2倍)から引いた値を被除数とし、被除数を32(レジスタRのビット幅)で割ったときの剰余である。これにより、例えば、演算対象のデータは、64ビット幅のデータの一番左側にシフトされる。
【0085】
右算術シフト部221は、左論理シフト部226の出力データ(64ビット幅のデータ)の上位32ビットのデータを受け、受けたデータを(32ビット幅のデータ)をシフト量ASR分だけ右算術シフトする。なお、シフト量ASRは、読み出したレジスタRに対応する制御レジスタ(例えば、制御レジスタ43)のビット長LNを32(レジスタRのビット幅)から引いた値である。右算術シフト部221により、例えば、演算対象のデータは、32ビット幅のデータの一番右側にシフトされる。
【0086】
セレクタ222は、選択信号SELに基づいて、データS1、S2の一方をデータIDATAとして上述した図7に示した命令実行部24に出力する。例えば、セレクタ222は、レジスタR4−R9のいずれかからデータRDATAが読み出される場合、データRDATAが読み出されるレジスタRに対応する制御レジスタ43、44、45のイネーブルENが“1”のときに、データS2をデータIDATAとして命令実行部24に出力する。その他の条件では、セレクタ222は、データS1(レジスタRから読み出したデータRDATA)をデータIDATAとして命令実行部24に出力する。
【0087】
例えば、セレクタ222は、レジスタR4−R8以外のレジスタRからデータRDATAが読み出される場合、レジスタRから読み出したデータRDATA(データS1)をデータIDATAとして命令実行部24に出力する。すなわち、この実施形態では、選択信号SELは、例えば、データRDATAが読み出されるレジスタRを示すレジスタ番号RN2と、制御レジスタ43、44、45のイネーブルENとにより生成される。
【0088】
図13は、図7に示した出力データ生成部29の概要を示している。図中の網掛け部分は、上述した図6に示した出力データ生成部28と相違する部分を示している。図6で説明した左論理シフト部280、FF282、オア回路283およびセレクタ284については、詳細な説明を省略する。出力データ生成部29は、左論理シフト部280、右論理シフト部285、セレクタ286、FF282、オア回路283およびセレクタ284を有している。
【0089】
右論理シフト部285は、レジスタRのビット幅の2倍のビット幅(この実施形態では、64)のデータを受け、受けたデータをシフト量LSR分だけ右論理シフトする。なお、右論理シフト部285が受ける64ビット幅のデータは、上位32ビット側が左論理シフト部280の出力データ(32ビット幅のデータ)であり、下位32ビットは、“0”で埋められている。また、シフト量LSRは、演算結果を格納するレジスタRに対応する制御レジスタ(例えば、制御レジスタ43)のビット長LNおよびオフセットOFの加算値を64(レジスタRのビット幅の2倍)から引いた値である。これにより、例えば、演算結果のデータは、演算結果のデータの最下位ビットと32ビット幅のデータにおけるオフセットOFの位置とが一致する位置にシフトされる。
【0090】
セレクタ286は、選択信号SEL2に基づいて、データS3、S4の一方をFF282に出力する。例えば、セレクタ286は、演算結果を格納するレジスタRに対応する制御レジスタ(制御レジスタ43等)のビット長LNとオフセットOFとの加算結果が32(レジスタRのビット幅)以上の場合、データS3をFF282に出力する。その他の条件(加算結果が32より小さい場合)では、セレクタ286は、データS4をFF282に出力する。ここで、データS3は、右論理シフト部285の出力データ(64ビット幅のデータ)の上位32ビットのデータであり、データS4は、オア回路283の出力データ(32ビット幅のデータ)である。これにより、レジスタRの組(例えば、R4とR5、R6とR7、R8とR9)の両方のレジスタにまたいで演算結果のデータを格納する場合、演算結果の一部をレジスタRの組の一方に格納した際に、演算結果の残りをFF282に格納できる。
【0091】
オア回路283は、右論理シフト部285の出力データ(64ビット幅のデータ)の下位32ビットのデータIN2とFF282から読み出されるデータIN1とのオアの結果をセレクタ284およびセレクタ286に出力する。
【0092】
セレクタ284は、選択信号SELに基づいて、データS1、S2の一方をデータODATAとして、レジスタ番号RN2が示すレジスタRに出力する。この実施形態では、選択信号SELは、例えば、データODATAが格納されるレジスタRを示すレジスタ番号RN2と、制御レジスタ43、44、45のイネーブルENとにより生成される。なお、セレクタ284の選択動作は、上述した図12に示したセレクタ222の選択動作において、データRDATAが読み出されるレジスタRをデータODATAが格納されるレジスタRに読み替えることで説明される。
【0093】
図14は、ロード命令とレジスタの状態との関係の一例を示している。なお、図14は、メモリMEMからレジスタR4、R5に9ビット長のデータDSを連続してロードした際のレジスタR4、R5の状態の一例を示している。また、図14(a)は、アドレスadr1のデータをレジスタR4に連続してロードするプログラムの一例を示し、図14(b)は、図14(a)のプログラムが実行された際のレジスタR4、R6の状態を示している。なお、図のメモリMEM、レジスタR4、R5は、右側が下位ビットである。また、この実施形態では、アドレスadr1は自動でインクリメント(例えば、+4)される。
【0094】
1回目のロード命令(図14(a1))では、プロセッサ11は、メモリMEMのアドレス“0x0000”に格納されているデータDS(データDS0、DS1、DS2、データDS3の下位5ビット)をレジスタR4にロードする(図14(b2))。2回目のロード命令(図14(a2))では、上述した図9−11に示した処理によりロード先のレジスタがレジスタR4からレジスタR5に変換され、プロセッサ11は、アドレス“0x0004”に格納されているデータDSをレジスタR5にロードする(図14(b3))。
【0095】
3回目のロード命令(図14(a3))では、図9−11に示した処理によりロード先のレジスタがレジスタR4に設定され、プロセッサ11は、アドレス“0x0008”に格納されているデータDSをレジスタR4にロードする(図14(b4))。4回目のロード命令(図14(a4))では、上述した図9−11に示した処理によりロード先のレジスタがレジスタR4からレジスタR5に変換され、プロセッサ11は、アドレス“0x000C”に格納されているデータDSをレジスタR5にロードする(図14(b5))。このように、レジスタR4、R5から構成されるレジスタ群にメモリMEMからデータを連続してロードした場合、ロードされたデータは、レジスタR4、R5に交互に格納される。
【0096】
図15は、レジスタR4−R9に格納されるデータの一例を示す図である。なお、図15(a)は、連続する9ビット長の複数のデータDSと連続する9ビット長の複数のデータDTとをそれぞれ加算するプログラムの一例を示している。また、図15(b)は、図15(a)のプログラムのループが2回繰り返された際のレジスタR4−R9の状態の一例を示している。なお、図4(b)の網掛け部分は、有効なデータが格納されていない領域を示している。図のレジスタR4−R9は、右側が下位ビットである。図15(a)のアドレスadr1、adr2、adr3は、メモリ(例えば、上述した図14に示したメモリMEM)のアドレスであり、自動でインクリメント(例えば、+4)される。
【0097】
命令BREQ_fullは、アドレスA(例えば、アドレスA4、A5)に割り当てられた制御レジスタ(例えば、制御レジスタ43、44)のフルFULが“1”のときに、指定されたラベル(例えば、ラベルLable1)に分岐する命令である。また、命令BREQ_empは、アドレスA(例えば、アドレスA8)に割り当てられた制御レジスタ(例えば、制御レジスタ45)のエンプティEMPが“1”のときに、指定されたラベル(例えば、ラベルLable3)に分岐する命令である。
【0098】
すなわち、図15(a)のプログラムでは、プロセッサ11は、レジスタR4、R5の少なくとも一方に有効なデータが格納されていない場合、有効なデータが格納されていないレジスタR(R4、R5の一方)に、アドレスadr1に格納されているデータDSをロードする(図15(a2)、(a3))。次に、プロセッサ11は、レジスタR6、R7の少なくとも一方に有効なデータが格納されていない場合、有効なデータが格納されていないレジスタR(R6、R7の一方)に、アドレスadr2に格納されているデータDTをロードする(図15(a5)、(a6))。
【0099】
そして、プロセッサ11は、レジスタR4、R5に格納されている複数のデータDSの1つと、レジスタR6、R7に格納されている複数のデータDTの1つとを加算し、加算結果のデータDDを、レジスタR8、R9のいずれかに格納する(図15(a8))。さらに、プロセッサ11は、図15(a8)と同様の加算処理を2回実施する(図15(a9)、(a10))。そして、プロセッサ11は、レジスタR8、R9の少なくとも一方に有効なデータが格納されている場合、レジスタR8、R9のいずれかに格納されているデータDDを、アドレスadr3にストアする(図15(a11)、(a12))。なお、プロセッサ11の動作は、レジスタR8、R9のいずれにも有効なデータが格納されていない場合、ループ処理の先頭に戻る(図15(a11)、(a13)、(a14))。
【0100】
図15(a)のプログラムのループが2回繰り返された場合、9ビット長の複数のデータDS(例えば、データDS0−DS6)が、レジスタR4、R5に格納され、9ビット長の複数のデータDT(例えば、データDT0−DT6)がレジスタR6、R7に格納される(図15(b1)。そして、複数のデータDS(例えば、データDS0−DS6)と、複数のデータDT(例えば、データDT0−DT6)とをそれぞれ加算した結果である10ビット長の複数のデータDD(例えば、データDD0−DD6)が、レジスタR8、R9に格納される(図15(b2))。
【0101】
このように、この実施形態では、2つのレジスタRをまたいで格納されたデータを扱え、2つのレジスタRをまたいでデータを格納できる。これにより、この実施形態では、レジスタRおよびメモリ(例えば、図14に示したメモリMEM)をさらに有効に使用できる。また、この実施形態では、上述した図7に示したALU25がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。
【0102】
図16、図17は、図12に示した入力データ抽出部23の動作の一例を示している。なお、図16、図17は、図15に示したプログラムが実施されたときの入力データ抽出部23の一方の動作の一例を示している。入力データ抽出部23の他方の動作は、データDS、レジスタRS2、レジスタR4、R5および制御レジスタ43を、データDT、レジスタRT2、レジスタR6、R7および制御レジスタ44にそれぞれ読み替えることで説明される。
【0103】
図中の網掛け部分は、有効なデータでない部分を示し、符号SEは、符号拡張を示している。なお、図の例では、右側が下位ビットである。また、図中の破線で囲んだ部分は、命令が実行される際の制御レジスタ43の値(OF、RPT、WPT、EMPおよびFULの値)、レジスタ番号RN2のレジスタRS2が示すレジスタR、ライトイネーブルWEの値、シフト量LSL、ASRの値を示している。図中の括弧内のレジスタ番号RPT、WPT等は、命令が実行される際に更新された制御レジスタ43の値等を示している。
【0104】
なお、制御レジスタ43のイネーブルEN、ビット長LN、オフセットOF、レジスタ番号RPT、WPT、エンプティEMP、フルFULの初期値は、図15に示したプログラムが実施される前に、それぞれ“1”、“9”、“0”、“レジスタR4を示す値(以下、単にR4とも称する)”、“R4”、“0”、“1”に設定されている。そして、レジスタ番号WPT、エンプティEMPは、アドレスadr1のデータをレジスタR4にロードした際(図15(a3))に、上述した図9に示した動作により、“R4”、“1”から“レジスタR5を示す値(以下、単にR5とも称する)”、“0”にそれぞれ更新されている。
【0105】
図16に示すように、先ず、1回目の加算命令(図15(a8))では、入力データ抽出部23は、レジスタR4(レジスタ番号RPTが示すレジスタR)に格納されているRDATAを読み出し、データDS0を抽出する(図16(a))。例えば、左論理シフト部226は、64ビット幅のデータ(上位32ビット側がデータRDATA、下位32ビット側がFF224のデータ)を受け(図16(a1))、受けたデータをシフト量LSL(23ビット)分だけ左論理シフトする。そして、右算術シフト部221は、左論理シフト部226の出力データの上位32ビットのデータを受け(図16(a2))、受けたデータをシフト量ASR(23ビット)分だけ右算術シフトする。なお、オフセットOFは、上述した図9、図10に示した動作により、“0”から“9”に更新される。
【0106】
2回目の加算命令(図15(a9))では、入力データ抽出部23は、レジスタR4に格納されているRDATAを読み出し、オフセットOF(OF=9)に基づいて、データDS1を抽出する(図16(b))。入力データ抽出部23の動作は、左論理シフト部226のシフト量LSL(14ビット)を除いて、1回目の加算命令のとき(図16(a))と同じである。なお、オフセットOFは、図9、図10に示した動作により、“9”から“18”に更新される。
【0107】
3回目の加算命令(図15(a10))では、入力データ抽出部23は、レジスタR4に格納されているRDATAを読み出し、オフセットOF(OF=18)に基づいて、データDS2を抽出する(図16(b))。入力データ抽出部23の動作は、FF224へデータRDATAを書き込むことと左論理シフト部226のシフト量LSL(5ビット)とを除いて、1回目の加算命令のとき(図16(a))と同じである。例えば、ビット長LNを2倍した値とオフセットOFとの加算結果が32より大きい(WE=1)ため、データDS3aを含むデータRDATAは、FF224に格納される。なお、データDS3aは、データDS3の下位5ビットのデータである。
【0108】
また、オフセットOF、レジスタ番号RPT、エンプティEMPは、図9、図10に示した動作により、“18”、“R4”、“0”から“27”、“R5”、“1”にそれぞれ更新される。エンプティEMPが“1”に更新されたため、2回目のループでは、プロセッサ11は、レジスタ番号WPTで示されるレジスタR5に、アドレスadr1に格納されているデータDSをロードする(図15(a2)、(a3))。この際、レジスタ番号WPT、エンプティEMPは、上述した図9に示した動作により、“R5”、“1”から“R4”、“0”にそれぞれ更新される。
【0109】
図17に示すように、2回目のループ中の1回目の加算命令(図15(a8))では、入力データ抽出部23は、レジスタR5(レジスタ番号RPTが示すレジスタR)に格納されているRDATAを読み出し、データDS3を抽出する(図17(d))。例えば、左論理シフト部226は、64ビット幅のデータ(上位32ビット側がデータRDATA、下位32ビット側がFF224のデータ)を受け(図17(d1))、受けたデータをシフト量LSL(28ビット)分だけ左論理シフトする。データRDATAの下位4ビットはデータDS3bであり、FF224のデータの上位5ビットは、データDS3aである。なお、データDS3bは、データDS3の上位4ビットのデータである。
【0110】
すなわち、左論理シフト部226が受ける64ビット幅のデータは、データDS3を含んで構成される。そして、右算術シフト部221は、左論理シフト部226の出力データの上位32ビットのデータを受け(図17(d2))、受けたデータをシフト量ASR(23ビット)分だけ右算術シフトする。このように、入力データ抽出部23は、レジスタR4、R5をまたいで格納されたデータDS3を抽出することができる。また、この場合、例えば、ビット長LNを2倍した値とオフセットOFとの加算結果が32より大きい(WE=1)ため、レジスタR5から読み出したデータRDATAは、FF224に格納される。なお、オフセットOFは、上述した図9、図10に示した動作により、“27”から“4”に更新される。
【0111】
2回目のループ中の2回目の加算命令(図15(a9))では、入力データ抽出部23は、レジスタR5に格納されているRDATAを読み出し、オフセットOF(OF=4)に基づいて、データDS4を抽出する(図16(e))。入力データ抽出部23の動作は、FF224へデータRDATAを書き込まないことと左論理シフト部226のシフト量LSL(19ビット)とを除いて、2回目のループ中の1回目の加算命令のとき(図17(d))と同じである。なお、オフセットOFは、図9、図10に示した動作により、“4”から“13”に更新される。
【0112】
2回目のループ中の3回目の加算命令(図15(a10))では、入力データ抽出部23は、レジスタR5に格納されているRDATAを読み出し、オフセットOF(OF=13)に基づいて、データDS5を抽出する(図17(f))。入力データ抽出部23の動作は、左論理シフト部226のシフト量LSL(10ビット)を除いて、2回目のループ中の2回目の加算命令のとき(図17(e))と同じである。このように、この実施形態では、連続する任意のビット長のデータを順次読み出すことができる。
【0113】
図18、図19、図20は、図13に示した出力データ生成部29の動作の一例を示している。なお、図18−20は、図15に示したプログラムが実施されたときの出力データ生成部29の動作の一例を示している。図の例では、右側が下位ビットであり、符号SEは、符号拡張を示している。また、図中の破線で囲んだ部分は、命令が実行される際の制御レジスタ45の値(OF、RPT、WPT、EMPおよびFULの値)、レジスタ番号RN2のレジスタRD2が示すレジスタR、シフト量LSL、LSRの値、上述した図13に示したセレクタ286で選択されるデータS(S3、S4)を示している。図中の括弧内のレジスタ番号RPT、WPT等は、命令が実行される際に更新された制御レジスタ45の値等を示している。
【0114】
制御レジスタ45のイネーブルEN、ビット長LN、オフセットOF、レジスタ番号RPT、WPT、エンプティEMP、フルFULの初期値は、図15に示したプログラムが実施される前に、それぞれ“1”、“10”、“0”、“レジスタR8を示す値(以下、単にR8とも称する)”、“R8”、“0”、“1”に設定されている。また、FF282には、初期値として“0”が格納されている。
【0115】
図18に示すように、1回目の加算命令(図15(a8))では、出力データ生成部29は、上述した図1に示した命令実行部24からデータ(例えば、ALU25の演算結果)EDATAを受け、データEDATA内の有効データDD0を、レジスタR8(レジスタ番号WPTが示すレジスタR)に格納する(図18(a))。例えば、左論理シフト部280は、データEDATAを受け(図18(a1))、データDD0をシフト量LSL(22ビット)分だけ左論理シフトする。そして、右論理シフト部285は、64ビット幅のデータ(上位32ビット側が左論理シフト部280の出力、下位32ビット側が“0”で埋められたデータ)を受け(図18(a2))、受けたデータをシフト量LSR(54ビット)分だけ右論理シフトする(図18(a3))。
【0116】
オア回路283は、右論理シフト部285の出力データ(64ビット幅のデータ)の下位32ビットのデータIN2とFF282から読み出されるデータIN1とを受け(図18(a4))、データIN1、IN2のオアの結果をセレクタ284およびセレクタ286に出力する(図18(a5))。
【0117】
セレクタ286は、右論理シフト部285の出力データの上位32ビットのデータS3とオア回路283の出力データS4(S2)とを受け、オア回路283の出力データS4(S2)をFF282に格納する(図18(a6))。例えば、ビット長LNとオフセットOFとの加算結果が32より小さいため、データS4がFF282に出力される。また、セレクタ284は、データDD0を含むデータS2をデータODATAとして、レジスタR8に出力する(図18(a6))。なお、オフセットOFは、上述した図9、図10に示した動作により、“0”から“10”に更新される。
【0118】
2回目の加算命令(図15(a9))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD1をオフセットOF(OF=10)に基づいてレジスタR8に格納する(図18(b))。出力データ生成部29の動作は、右論理シフト部285のシフト量LSR(44ビット)を除いて、1回目の加算命令のとき(図18(a))と同じである。
【0119】
ここで、FF282から読み出されるデータIN1は、1回目の加算命令の際のオア回路283の出力データであるため、データDD0を含むデータである(図18(b4))。また、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD1を含むデータである(図18(b4))。このため、オア回路283の出力データS2は、データDD0、DD1を含むデータである(図18(b5))。すなわち、レジスタR8には、データDD0、DD1を含むデータODATAが格納される(図18(b6))。なお、オフセットOFは、図9、図10に示した動作により、“10”から“20”に更新される。
【0120】
図19に示すように、3回目の加算命令(図15(a10))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD2をオフセットOF(OF=20)に基づいてレジスタR8に格納する(図19(c))。出力データ生成部29の動作は、右論理シフト部285のシフト量LSR(34ビット)を除いて、1回目の加算命令のとき(図18(a))と同じである。なお、FF282から読み出されるデータIN1がデータDD0、DD1を含むデータであるため(図19(c4))、オア回路283の出力データS2およびデータODATAは、データDD0、DD1、DD2を含むデータである(図19(c5)、(c6))。また、オフセットOFは、図9、図10に示した動作により、“20”から“30”に更新される。
【0121】
2回目のループ中の1回目の加算命令(図15(a8))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD3aをオフセットOF(OF=30)に基づいてレジスタR8に格納し、データEDATA内のデータDD3bをFF282に格納する(図19(d))。なお、データDD3aは、データDD3の下位2ビットのデータであり、データDD3bは、データDD3の上位8ビットのデータである。
【0122】
出力データ生成部29の動作は、セレクタ286の動作と右論理シフト部285のシフト量LSR(34ビット)とを除いて、1回目の加算命令のとき(図18(a))と同じである。なお、FF282から読み出されるデータIN1は、データDD0、DD1、DD2を含むデータであり、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD3aを含むデータである(図19(d4))。このため、オア回路283の出力データS2およびデータODATAは、データDD0、DD1、DD2、DD3aを含むデータである(図19(d5)、(d6))。
【0123】
また、セレクタ286は、右論理シフト部285の出力データの上位32ビットのデータS3とオア回路283の出力データS4(S2)とを受け、データDD3bを含むデータS3をFF282に格納する(図18(d3)、(d6))。例えば、ビット長LNとオフセットOFとの加算結果が32以上であるため、データS3がFF282に出力される。なお、オフセットOF、レジスタ番号WPT、エンプティEMPは、図9、図10に示した動作により、“30”、“R8”、“1”から“8”、“レジスタR9を示す値(以下、単にR9とも称する)”、“0”にそれぞれ更新される。
【0124】
図20に示すように、2回目のループ中の2回目の加算命令(図15(a9))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD4をオフセットOF(OF=8)に基づいてレジスタR9(レジスタ番号WPTが示すレジスタR)に格納する(図20(e))。出力データ生成部29の動作は、データODATAを格納するレジスタR9と右論理シフト部285のシフト量LSR(46ビット)とを除いて、1回目の加算命令のとき(図18(a))と同じである。なお、オフセットOFは、図9、図10に示した動作により、“8”から“18”に更新される。
【0125】
ここで、FF282から読み出されるデータIN1は、データDD3b(レジスタR8に格納されたデータDD3aを除くデータDD3)を含むデータであり、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD4を含むデータである(図20(e4))。このため、オア回路283の出力データS2およびデータODATAは、データDD3b、DD4を含むデータである(図20(e5)、(e6))。このように、この実施形態では、連続する任意のビット長(例えば、10ビット)のデータDDのデータDD3を2つのレジスタR8、R9にまたいで格納することができる。
【0126】
2回目のループ中の3回目の加算命令(図15(a10))では、出力データ生成部29は、命令実行部24からデータEDATAを受け、データEDATA内のデータDD5をオフセットOF(OF=18)に基づいてレジスタR9に格納する(図20(f))。出力データ生成部29の動作は、右論理シフト部285のシフト量LSR(36ビット)を除いて、2回目のループ中の2回目の加算命令のとき(図20(e))と同じである。
【0127】
なお、FF282から読み出されるデータIN1は、データDD3b、DD4を含むデータであり、右論理シフト部285の出力データの下位32ビットのデータIN2は、データDD5を含むデータである(図20(f4))。このため、オア回路283の出力データS2およびデータODATAは、データDD3b、DD4、DD5を含むデータである(図20(f5)、(f6))。また、オフセットOFは、図9、図10に示した動作により、“18”から“28”に更新される。
【0128】
2回目のループでは、1回目の加算命令の際に、エンプティEMPが“0”に更新されたため、プロセッサ11は、レジスタ番号RPTで示されるレジスタR8のデータDD0、DD1、DD2、DD3aを、アドレスadr3にストアする(図15(a11)、(a12))。この際、レジスタ番号RPT、エンプティEMPは、上述した図9に示した動作により、“R8”、“0”から“R9”、“1”にそれぞれ更新される。
【0129】
以上、この実施形態においても、上述した図1−図6で説明した実施形態と同様の効果を得ることができる。さらに、この実施形態では、2つのレジスタRをまたいで格納されたデータを扱え、かつ、2つのレジスタRをまたいでデータを格納できる。この結果、この実施形態では、レジスタRをさらに有効に使用できる。また、この実施形態では、レジスタ番号RN2を上述した図9−図11に示した動作により変化させているため、2つのレジスタから構成されるレジスタ群(例えば、R4とR5、R6とR7、R8とR9)をFIFO(First-In First-Out)のように制御できる。さらに、この実施形態では、エンプティEMPおよびフルFULを利用することにより、条件実行命令(ロード命令、ストア命令等)の実行を制御できる。
【0130】
なお、上述した実施形態では、本発明を、32ビットのプロセッサ10、11に適用する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、本発明を、64ビットプロセッサに適用してもよい。この場合、例えば、レジスタファイル30は、64ビット幅の汎用レジスタR(R0−R9)を有する。また、本発明を、例えば、同時に複数の命令、データを処理可能なプロセッサ(SIMD(Single Instruction Multiple Data)プロセッサ、スーパースカラープロセッサ等)に適用してもよい。この場合にも、上述した実施形態と同様の効果を得ることができる。
【0131】
上述した実施形態では、入力データ抽出部22、23、命令実行部24、出力データ生成部28、29が単サイクルで動作する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、入力データ抽出部22、23、命令実行部24、出力データ生成部28、29は、パイプラインステージを分割し、マルチサイクルで動作してもよい。すなわち、入力データ抽出部22、23、命令実行部24、出力データ生成部28、29を、パイプライン処理で動作する構成にしてもよい。この場合にも、上述した実施形態と同様の効果を得ることができる。
【0132】
上述した図7−図20で説明した実施形態では、レジスタR4−R9がレジスタ群として使用される例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、レジスタR4−R9は、レジスタ群として使用されない場合、上述した図4に示したレジスタR4、R6、R8のように使用されてもよい。この場合、例えば、制御レジスタ43、44、45のイネーブルENを2ビットで構成することにより、レジスタR4−R9の使用の仕方を制御できる。例えば、レジスタR4、R5は、イネーブルENが“01”のときに、図4に示したレジスタR4、図1に示したレジスタR0のようにそれぞれ使用され、イネーブルENが“10”のときに、図1に示したレジスタR0、図4に示したレジスタR4のようにそれぞれ使用される。また、例えば、レジスタR4、R5は、イネーブルENが“11”のときに、上述した図12に示したレジスタR4、R5のように使用され、イネーブルENが“00”のときに、図1に示したレジスタR0のように使用される。この場合にも、上述した実施形態と同様の効果を得ることができる。
【0133】
上述した図7−図20で説明した実施形態では、制御レジスタ43、44、45がエンプティEMPおよびフルFULを有する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、制御レジスタ43、44、45は、エンプティEMPおよびフルFULが省かれて構成されてもよい。この場合にも、条件実行命令の制御を除いて、上述した実施形態と同様の効果を得ることができる。さらに、制御レジスタ43、44、45は、レジスタ番号WPT、RPT、エンプティEMPおよびフルFULが省かれて構成されてもよい。この場合にも、FIFOのように制御することと条件実行命令の制御とを除いて、上述した実施形態と同様の効果を得ることができる。
【0134】
以上、本発明について詳細に説明してきたが、上記の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【符号の説明】
【0135】
10、11‥プロセッサ;20、21‥実行ユニット;22、23‥入力データ抽出部;24‥命令実行部;25‥ALU;26‥ロード/ストアユニット;28、29‥出力データ生成部;30‥レジスタファイル;40−45‥制御レジスタ;50、54‥制御部
【先行技術文献】
【特許文献】
【0136】
【特許文献1】特開平11−68579号公報
【特許文献2】特開平6−19683号公報
【特許請求の範囲】
【請求項1】
入力されたデータに対する演算を実行する演算部と、
データが格納される複数の第1レジスタと、
演算対象のデータを含む入力ビット列が格納された前記第1レジスタから前記入力ビット列を読み出し、予め設定された第1位置情報に基づいて、読み出した前記入力ビット列から前記演算対象のデータを抽出し、抽出した前記演算対象のデータを前記演算部のビット幅に拡張して前記演算部に入力する入力データ抽出部とを備えていることを特徴とするプロセッサ。
【請求項2】
請求項1記載のプロセッサにおいて、
予め設定された第2位置情報に基づいて算出された配置位置に、前記演算部の演算結果のデータが位置する出力ビット列を生成する出力データ生成部を備えていることを特徴とするプロセッサ。
【請求項3】
請求項2記載のプロセッサにおいて、
前記出力ビット列が前記第1レジスタに格納される度に、前記出力ビット列が格納される第1バッファを備え、
前記出力データ生成部は、前記第1バッファから読み出されたデータの前記配置位置に、前記演算結果のデータを配置することにより、前記第1レジスタおよび前記第1バッファに格納する前記出力ビット列を生成することを特徴とするプロセッサ。
【請求項4】
請求項2記載のプロセッサにおいて、
前記第1レジスタ毎に対応して設けられ、前記第1レジスタのアクセス対象のビット位置を示すオフセット情報を含む制御レジスタと、
前記第1レジスタへのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部とを備え
前記第1位置情報は、前記入力ビット列が格納された前記第1レジスタに対応する前記制御レジスタの前記オフセット情報であり、
前記第2位置情報は、前記演算結果のデータが格納される前記第1レジスタに対応する前記制御レジスタの前記オフセット情報であることを特徴とするプロセッサ。
【請求項5】
請求項1記載のプロセッサにおいて、
前記第1レジスタ毎に対応して設けられ、前記第1レジスタのアクセス対象のビット位置を示すオフセット情報を含む制御レジスタと、
前記第1レジスタへのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部とを備え
前記第1位置情報は、前記入力ビット列が格納された前記第1レジスタに対応する前記制御レジスタの前記オフセット情報であることを特徴とするプロセッサ。
【請求項6】
入力されたデータに対する演算を実行する演算部と、
データが格納される複数の第1レジスタと、
2つの前記第1レジスタにより構成される第1レジスタ群毎に対応して設けられ、前記第1レジスタ群のうちのアクセスされる前記第1レジスタを示すレジスタ情報と、前記第1レジスタのアクセス対象のビット位置を示すオフセット情報とを含む制御レジスタと、
演算対象のデータを含む入力ビット列が格納された前記第1レジスタ群から前記入力ビット列を読み出し、前記入力ビット列が格納された前記第1レジスタ群に対応する前記制御レジスタの前記オフセット情報に基づいて、読み出した前記入力ビット列から前記演算対象のデータを抽出し、抽出した前記演算対象のデータを前記演算部のビット幅に拡張する入力データ抽出部と、
前記演算部の演算結果のデータが格納される前記第1レジスタ群に対応する前記制御レジスタの前記オフセット情報に基づいて配置位置を算出し、前記配置位置に前記演算結果のデータが位置する出力ビット列を生成する出力データ生成部と、
前記第1レジスタ群へのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部と、
前記演算結果のデータの少なくとも一部が格納される第1バッファと
前記入力データ抽出部に読み出された前記入力ビット列が格納される第2バッファとを備え、
前記入力データ抽出部は、前記演算対象のデータが前記第1レジスタ群の2つの前記第1レジスタにまたいで格納されている場合、前記第2バッファを用いて、2つの前記第1レジスタから前記演算対象のデータを読み出し、
前記出力データ生成部は、前記演算結果のデータが前記第1レジスタ群の2つの前記第1レジスタにまたいで格納される場合、前記第1バッファを用いて、一方の前記第1レジスタに格納される前記出力ビット列に、前記演算結果のデータの一部である部分データを配置し、他方の前記第1レジスタに格納される前記出力ビット列に、前記部分データを除く前記演算結果のデータを配置することを特徴とするプロセッサ。
【請求項7】
請求項6記載のプロセッサにおいて、
前記制御部は、前記第1レジスタ群へのアクセスに応じて、前記制御レジスタの前記レジスタ情報および前記オフセット情報を更新することを特徴とするプロセッサ。
【請求項8】
請求項7記載のプロセッサにおいて、
前記制御レジスタは、前記レジスタ情報と、前記オフセット情報と、前記レジスタ群の2つの前記第1レジスタのいずれにも転送すべきデータが格納されていないことを示すエンプティ情報と、前記レジスタ群の2つの前記第1レジスタの両方に転送すべきデータが格納されていることを示すフル情報とを有し、
前記制御部は、前記第1レジスタ群へのアクセスに応じて、前記制御レジスタの前記レジスタ情報、前記オフセット情報、前記エンプティ情報および前記フル情報を更新することを特徴とするプロセッサ。
【請求項1】
入力されたデータに対する演算を実行する演算部と、
データが格納される複数の第1レジスタと、
演算対象のデータを含む入力ビット列が格納された前記第1レジスタから前記入力ビット列を読み出し、予め設定された第1位置情報に基づいて、読み出した前記入力ビット列から前記演算対象のデータを抽出し、抽出した前記演算対象のデータを前記演算部のビット幅に拡張して前記演算部に入力する入力データ抽出部とを備えていることを特徴とするプロセッサ。
【請求項2】
請求項1記載のプロセッサにおいて、
予め設定された第2位置情報に基づいて算出された配置位置に、前記演算部の演算結果のデータが位置する出力ビット列を生成する出力データ生成部を備えていることを特徴とするプロセッサ。
【請求項3】
請求項2記載のプロセッサにおいて、
前記出力ビット列が前記第1レジスタに格納される度に、前記出力ビット列が格納される第1バッファを備え、
前記出力データ生成部は、前記第1バッファから読み出されたデータの前記配置位置に、前記演算結果のデータを配置することにより、前記第1レジスタおよび前記第1バッファに格納する前記出力ビット列を生成することを特徴とするプロセッサ。
【請求項4】
請求項2記載のプロセッサにおいて、
前記第1レジスタ毎に対応して設けられ、前記第1レジスタのアクセス対象のビット位置を示すオフセット情報を含む制御レジスタと、
前記第1レジスタへのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部とを備え
前記第1位置情報は、前記入力ビット列が格納された前記第1レジスタに対応する前記制御レジスタの前記オフセット情報であり、
前記第2位置情報は、前記演算結果のデータが格納される前記第1レジスタに対応する前記制御レジスタの前記オフセット情報であることを特徴とするプロセッサ。
【請求項5】
請求項1記載のプロセッサにおいて、
前記第1レジスタ毎に対応して設けられ、前記第1レジスタのアクセス対象のビット位置を示すオフセット情報を含む制御レジスタと、
前記第1レジスタへのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部とを備え
前記第1位置情報は、前記入力ビット列が格納された前記第1レジスタに対応する前記制御レジスタの前記オフセット情報であることを特徴とするプロセッサ。
【請求項6】
入力されたデータに対する演算を実行する演算部と、
データが格納される複数の第1レジスタと、
2つの前記第1レジスタにより構成される第1レジスタ群毎に対応して設けられ、前記第1レジスタ群のうちのアクセスされる前記第1レジスタを示すレジスタ情報と、前記第1レジスタのアクセス対象のビット位置を示すオフセット情報とを含む制御レジスタと、
演算対象のデータを含む入力ビット列が格納された前記第1レジスタ群から前記入力ビット列を読み出し、前記入力ビット列が格納された前記第1レジスタ群に対応する前記制御レジスタの前記オフセット情報に基づいて、読み出した前記入力ビット列から前記演算対象のデータを抽出し、抽出した前記演算対象のデータを前記演算部のビット幅に拡張する入力データ抽出部と、
前記演算部の演算結果のデータが格納される前記第1レジスタ群に対応する前記制御レジスタの前記オフセット情報に基づいて配置位置を算出し、前記配置位置に前記演算結果のデータが位置する出力ビット列を生成する出力データ生成部と、
前記第1レジスタ群へのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部と、
前記演算結果のデータの少なくとも一部が格納される第1バッファと
前記入力データ抽出部に読み出された前記入力ビット列が格納される第2バッファとを備え、
前記入力データ抽出部は、前記演算対象のデータが前記第1レジスタ群の2つの前記第1レジスタにまたいで格納されている場合、前記第2バッファを用いて、2つの前記第1レジスタから前記演算対象のデータを読み出し、
前記出力データ生成部は、前記演算結果のデータが前記第1レジスタ群の2つの前記第1レジスタにまたいで格納される場合、前記第1バッファを用いて、一方の前記第1レジスタに格納される前記出力ビット列に、前記演算結果のデータの一部である部分データを配置し、他方の前記第1レジスタに格納される前記出力ビット列に、前記部分データを除く前記演算結果のデータを配置することを特徴とするプロセッサ。
【請求項7】
請求項6記載のプロセッサにおいて、
前記制御部は、前記第1レジスタ群へのアクセスに応じて、前記制御レジスタの前記レジスタ情報および前記オフセット情報を更新することを特徴とするプロセッサ。
【請求項8】
請求項7記載のプロセッサにおいて、
前記制御レジスタは、前記レジスタ情報と、前記オフセット情報と、前記レジスタ群の2つの前記第1レジスタのいずれにも転送すべきデータが格納されていないことを示すエンプティ情報と、前記レジスタ群の2つの前記第1レジスタの両方に転送すべきデータが格納されていることを示すフル情報とを有し、
前記制御部は、前記第1レジスタ群へのアクセスに応じて、前記制御レジスタの前記レジスタ情報、前記オフセット情報、前記エンプティ情報および前記フル情報を更新することを特徴とするプロセッサ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2010−165245(P2010−165245A)
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願番号】特願2009−7990(P2009−7990)
【出願日】平成21年1月16日(2009.1.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願日】平成21年1月16日(2009.1.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]