(57)【要約】【課題】簡易な処理で高速にメモリからレジスタへのデータ転送を行う。【解決手段】データ転送装置は、命令キャッシュ１から発行された命令をデコードするデコーダ２と、３２ビット単位で読み書きが可能なキャッシュメモリ３と、３２ビット単位で読み書きが可能な１２８ビットのデータ幅を持つ長レジスタ４と、キャッシュメモリ３から長レジスタ４へのデータ転送を制御する制御部５と、長レジスタ４に格納済みのデータの上書きを禁止するマスク制御部６と、長レジスタ４に格納されたデータの入れ替えを行う順序変更演算器７とを備える。転送データの開始アドレスがキャッシュメモリ３の３２ビット境界位置からずれていても、わずか１命令で、キャッシュメモリ３から長レジスタ４へのデータ転送を指示でき、命令数の削減が図れる。開始アドレスが３２ビット境界位置にずれている場合の転送処理をハードウェアにて行うため、転送データの開始アドレスが３２ビット境界位置からずれているかどうかをソフトウェアで考慮する必要がない。【選択図】図１
2008077590.tif 000002
【特許請求の範囲】
【請求項１】
メモリ内の連続した所定のアドレス範囲のデータを読み出して、前記メモリの読み出し単位である第１バイト数のｎ倍（ｎは１以上の整数）の第２バイト数のデータ領域を有する長レジスタに転送するデータ転送装置において、
前記メモリ内の特定のデータ領域をアクセスするためのメモリアドレスを格納するメモリアドレスレジスタと、
前記長レジスタ内の任意のデータ領域をアクセスするためのアドレスを格納する長レジスタアクセス位置レジスタと、
前記メモリから前記長レジスタにデータを転送した量に関連する値を格納する現転送数レジスタと、
前記メモリアドレスレジスタに格納されたメモリアドレスの下位側ビット列に基づいて、前記メモリアドレスレジスタに格納されているメモリアドレスと、次に前記メモリからデータを読み出す際の区切りとなるアドレスとの間の差分を計算する転送数生成器と、
前記転送数生成器で計算された差分に基づいて、次に前記メモリアドレスレジスタに格納すべきメモリアドレスを生成する第１加算器と、
前記転送数生成器で計算された差分に基づいて、次に前記現転送数レジスタに格納すべき値を計算する第２加算器と、
前記メモリから読み出した前記所定のアドレス範囲のデータに含まれる最後のデータを前記長レジスタに格納する際に、前記長レジスタにすでに格納済みのデータを上書きしないようにマスク情報を生成するマスク制御部と、
前記長レジスタに格納されたデータの各ビットを、前記メモリから読み出した所定のアドレス範囲のデータにおける開始アドレスの下位側ビット列に応じた数だけ循環させるビット循環部と、を備えることを特徴とするデータ転送装置。
【請求項２】
次に転送すべきデータが前記所定のアドレス範囲内の最後のデータで、かつ、未転送のデータ量が前記所定のアドレス範囲のデータにおける開始アドレスの下位側ビット列の値で表されるバイト数以下であれば、前記長レジスタアクセス位置レジスタの値を０に設定し、次に転送すべきデータが前記所定のアドレス範囲内の最後のデータでないか、または未転送のデータ量が前記所定のアドレス範囲のデータにおける開始アドレスの下位側ビット列の値で表されるバイト数よりも多ければ、前記長レジスタアクセス位置レジスタの値を１増やすレジスタ制御部と、を備えることを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
メモリ内の矩形領域のデータを読み出して、前記メモリの読み出し単位である第１バイト数のｎ倍（ｎは１以上の整数）の第２バイト数のデータ領域を有する長レジスタに転送するデータ転送装置において、
前記メモリ内の特定のデータ領域をアクセスするためのメモリアドレスを格納するメモリアドレスレジスタと、
前記長レジスタ内の任意のデータ領域をアクセスするためのアドレスを格納する長レジスタアクセス位置レジスタと、
前記矩形領域内の読み出し対象行について、前記メモリから前記長レジスタにデータを転送した量に関連する値を格納する行内転送量レジスタと、
前記矩形領域内で、前記メモリから前記長レジスタへのデータ転送が完了した行数をカウントする行カウントレジスタと、
前記矩形領域内の読み出し対象行における次のデータ転送時の開始アドレスを選定する次候補選択器と、
前記メモリアドレスレジスタに格納されたメモリアドレスの下位側ビット列に基づいて、前記メモリアドレスレジスタに格納されているメモリアドレスと、次に前記メモリからデータを読み出す際の区切りとなるアドレスとの間の差分を計算する転送数生成器と、
前記転送数生成器で計算された差分に基づいて、次に前記メモリアドレスレジスタに格納すべきメモリアドレスを生成する第１加算器と、
前記転送数生成器で計算された差分に基づいて、次に前記行内転送量レジスタに格納すべき値を計算する第２加算器と、
前記矩形領域内の読み出し対象行における最後のデータを前記長レジスタに格納する際に、前記長レジスタにすでに格納済みのデータを上書きしないようにマスク情報を生成するマスク制御部と、
前記長レジスタに格納されたデータを、前記メモリから読み出した所定範囲のデータにおける開始アドレスの下位側ビット列に応じた数だけ循環させるビット循環部と、を備えることを特徴とするデータ転送装置。
【請求項４】
１回分のデータ転送終了後に、前記矩形領域の１行分のデータ転送が終了したか否かを判定する行転送判定部と、
前記行転送判定部によりデータ転送が終了していないと判定されると、前記メモリアドレスレジスタに、前記メモリからデータを読み出す際の区切りとなるアドレスを設定するメモリアドレス設定部と、
前記メモリアドレス設定部にて設定されたアドレスが、該当する行の最後のデータ転送で、かつ、未転送のデータ量が前記矩形領域内のデータにおける開始アドレスの下位側ビット列の値で表されるバイト数以下であれば、前記長レジスタアクセス位置レジスタの値を０に設定し、次に転送すべきデータが前記該当する行の最後のデータ転送でないか、または未転送のデータ量が前矩形領域内のデータにおける開始アドレスの下位側ビット列の値で表されるバイト数よりも多ければ、前記長レジスタアクセス位置レジスタの値を１増やすレジスタ制御部と、を備えることを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記ビット循環部にて循環された後の前記長レジスタのデータを、前記矩形領域の行と列とを入れ替えたデータの並びに並び換える転置処理部を有することを特徴とする請求項３または４に記載のデータ転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリからレジスタにデータを転送するデータ転送装置に関する。
【背景技術】
【０００２】
プロセッサにおけるメモリ−レジスタ間の転送は通常、レジスタのデータ幅以下で定められたデータ幅の境界にアラインされたデータ単位でのみ行うことができる。例えば、レジスタ幅が３２ビットの場合は、８ビット、１６ビットまたは３２ビットの境界にアラインされたデータ単位でのみデータ転送を行う（特許文献１，２参照）。
【０００３】
プログラムが扱うデータ単位も、上記と同様の８ビット、１６ビットまたは３２ビットである。演算は1つのデータ単位に対して行われるので、プログラムが扱うデータ単位が限られていることは特に不都合はない。
【０００４】
ところが、1つのレジスタ内に複数のデータを格納して、そのデータ数に対応した演算器を用いて演算を行うSIMD(Single Instruction Multiple Data)演算を行うプロセッサでは、３２ビット境界にアラインされていない６４ビットのデータをレジスタに転送して演算を行う場合がある。
【０００５】
３２ビットを境界とする複数のレジスタに６４ビットのデータを転送する場合、そのデータが３２ビットの境界にアラインされている場合には２つのレジスタに転送可能であるが、３２ビットの境界にアラインされていない場合には３つのレジスタが必要となり、レジスタの一部に無駄なデータが格納されてしまう。この場合、レジスタが１つ余計に必要になる分、SIMD演算の回数も１回増えることに加えて、３２ビットの領域にアラインされていないデータ同士で演算する場合は、シフト演算によってレジスタ内の有効なデータ位置を揃える必要がある。この種のシフト演算を通常SIMD演算器に用意されている並び替え命令で行うことは可能だが、並び替え命令は２つのレジスタを対象としているものが多く、複数の並び替え命令を実行しなければならないことから、処理に多くの命令を必要とする。
【０００６】
この他、Load Alignerによって、メモリ上の任意の位置のデータを転送することも可能だが、転送すべきデータがキャッシュラインを跨ぐ場合の対応を考慮しなければならず、ハードウェアが複雑化するおそれがある。
【０００７】
また、SIMD演算を行う処理の一例として画像処理があるが、画像処理では画像の矩形領域を行列として、行列演算を行うことが多い。画像処理の行列演算では、メモリ上の矩形領域とレジスタ間でデータ転送を行う必要がある。
【０００８】
このとき、行列の各行を1つのレジスタに格納するためには、上述したように、メモリ上の連続する領域とレジスタ間の転送を複数回行わなければならない。決まった境界にアラインされていない行を転送するためには、さらに多くの並び替えが必要となる。また、行列の各列を1つのレジスタに格納するためには、行列の行をレジスタに格納した後に、各レジスタ内のデータを組み合わせて、並び替えて列の並びにする必要があり、さらに多くの命令が必要となる。この場合はLoad Alignerは全く用を意味を成さない。
【特許文献１】特開平9-114733号公報
【特許文献２】特開2002-82897号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は、簡易な処理で高速にメモリからレジスタへのデータ転送を行うことができるデータ転送装置を提供するものである。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、メモリ内の連続した所定のアドレス範囲のデータを読み出して、前記メモリの読み出し単位である第１バイト数のｎ倍（ｎは１以上の整数）の第２バイト数のデータ領域を有する長レジスタに転送するデータ転送装置において、前記メモリ内の特定のデータ領域をアクセスするためのメモリアドレスを格納するメモリアドレスレジスタと、前記長レジスタ内の任意のデータ領域をアクセスするためのアドレスを格納する長レジスタアクセス位置レジスタと、前記メモリから前記長レジスタにデータを転送した量に関連する値を格納する現転送数レジスタと、前記メモリアドレスレジスタに格納されたメモリアドレスの下位側ビット列に基づいて、前記メモリアドレスレジスタに格納されているメモリアドレスと、次に前記メモリからデータを読み出す際の区切りとなるアドレスとの間の差分を計算する転送数生成器と、前記転送数生成器で計算された差分に基づいて、次に前記メモリアドレスレジスタに格納すべきメモリアドレスを生成する第１加算器と、前記転送数生成器で計算された差分に基づいて、次に前記現転送数レジスタに格納すべき値を計算する第２加算器と、前記メモリから読み出した前記所定のアドレス範囲のデータに含まれる最後のデータを前記長レジスタに格納する際に、前記長レジスタにすでに格納済みのデータを上書きしないようにマスク情報を生成するマスク制御部と、前記長レジスタに格納されたデータの各ビットを、前記メモリから読み出した所定のアドレス範囲のデータにおける開始アドレスの下位側ビット列に応じた数だけ循環させるビット循環部と、を備えることを特徴とするデータ転送装置が提供される。
【００１１】
また、本発明の一態様によれば、メモリ内の矩形領域のデータを読み出して、前記メモリの読み出し単位である第１バイト数のｎ倍（ｎは１以上の整数）の第２バイト数のデータ領域を有する長レジスタに転送するデータ転送装置において、前記メモリ内の特定のデータ領域をアクセスするためのメモリアドレスを格納するメモリアドレスレジスタと、前記長レジスタ内の任意のデータ領域をアクセスするためのアドレスを格納する長レジスタアクセス位置レジスタと、前記矩形領域内の読み出し対象行について、前記メモリから前記長レジスタにデータを転送した量に関連する値を格納する行内転送量レジスタと、前記矩形領域内で、前記メモリから前記長レジスタへのデータ転送が完了した行数をカウントする行カウントレジスタと、前記矩形領域内の読み出し対象行における次のデータ転送時の開始アドレスを選定する次候補選択器と、前記メモリアドレスレジスタに格納されたメモリアドレスの下位側ビット列に基づいて、前記メモリアドレスレジスタに格納されているメモリアドレスと、次に前記メモリからデータを読み出す際の区切りとなるアドレスとの間の差分を計算する転送数生成器と、前記転送数生成器で計算された差分に基づいて、次に前記メモリアドレスレジスタに格納すべきメモリアドレスを生成する第１加算器と、前記転送数生成器で計算された差分に基づいて、次に前記行内転送量レジスタに格納すべき値を計算する第２加算器と、前記矩形領域内の読み出し対象行における最後のデータを前記長レジスタに格納する際に、前記長レジスタにすでに格納済みのデータを上書きしないようにマスク情報を生成するマスク制御部と、前記長レジスタに格納されたデータを、前記メモリから読み出した所定範囲のデータにおける開始アドレスの下位側ビット列に応じた数だけ循環させるビット循環部と、を備えることを特徴とするデータ転送装置が提供される。
【発明の効果】
【００１２】
本発明によれば、簡易な処理で高速にメモリからレジスタにデータ転送を行うことができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照しながら、本発明の実施形態を説明する。
【００１４】
（第１の実施形態）
図１は本発明の第１の実施形態によるデータ転送装置の概略構成を示すブロック図である。図１のデータ転送装置の少なくとも一部は、プロセッサの内部に実装される。
【００１５】
図１のデータ転送装置は、命令キャッシュ１から発行された命令をデコードするデコーダ２と、３２ビット単位で読み書きが可能なキャッシュメモリ３と、３２ビット単位で読み書きが可能な１２８ビットのデータ幅を持つ長レジスタ４と、キャッシュメモリ３から長レジスタ４へのデータ転送を制御する制御部５と、長レジスタ４に格納済みのデータの上書きを禁止するマスク制御部６と、長レジスタ４に格納されたデータの入れ替えを行う順序変更演算器７とを備えている。
【００１６】
本実施形態によるデータ転送装置は、長レジスタのデータ幅以下の任意の長さのデータをキャッシュメモリ３から長レジスタ４に転送することができる。長レジスタは、キャッシュメモリ３の読み出し単位（例えば３２ビット）のｎ倍（ｎは１以上の整数）のデータ領域を有する。以下では、キャッシュメモリ３内の連続した９６ビットのデータを長レジスタ４に転送する例を説明する。本実施形態の特徴は、転送されるデータの先頭アドレスが３２ビットの境界に位置していなくても、一つの命令でキャッシュメモリ３から長レジスタ４にデータ転送を行えることである。
【００１７】
図２は図１の制御部５の内部構成を示すブロック図である。図２の制御部５は、開始アドレスレジスタ１１と、転送数レジスタ１２と、マルチプレクサ１３，１４，１５と、メモリアドレスレジスタ１６と、現転送数レジスタ１７と、長レジスタアクセス位置レジスタ１８と、加算器１９と、減算器２０と、加算器２１と、転送数生成器２２と、中央制御部２３とを有する。
【００１８】
開始アドレスレジスタ１１は、転送されるデータの先頭位置を示す開始アドレスを格納する。転送数レジスタ１２は、データ転送するバイト数を格納する。９６ビットのデータを転送する場合、転送数レジスタ１２には１２（バイト）が格納される。
【００１９】
メモリアドレスレジスタ１６は、キャッシュメモリ３の読み出しアドレスであるメモリアドレスを格納する。現転送数レジスタ１７は、転送すべき残りのバイト数を格納する。長レジスタアクセス位置レジスタ１８は、長レジスタ４中のアクセス箇所を表すアドレスを格納する。
【００２０】
転送数生成器２２は、現時点のメモリアドレスから３２ビットの区切りアドレスまでの差分値を計算する。キャッシュメモリ３から読み出されるデータの開始アドレスが３２ビットの区切りにない場合、転送数生成器２２は、開始アドレスとその直後の区切りアドレスとの差分値を出力する。それ以降は３２ビットの区切りごとにキャッシュメモリ３の読み出しを行うため、転送数生成器２２は４バイトに対応する４を出力する。
【００２１】
加算器１９は、メモリアドレスレジスタ１６に格納されたメモリアドレスに、転送数生成器２２に格納された差分値を加えたアドレスを生成する。転送されるデータの開始アドレスが３２ビットの境界にない場合、その開始アドレスからデータの転送が開始されるが、次にデータ転送を行う際には、その開始アドレスに、３２ビットの境界までの差分値が加算されて、境界位置に対応するアドレスが加算器１９から出力される。その後、加算器１９は、メモリアドレスに４ずつ加算した値を順に出力する。
【００２２】
減算器２０は、現転送数レジスタ１７に格納された未転送バイト数から、転送数生成器２２に格納された差分値を差し引いた値を生成する。転送されるデータの開始アドレスが３２ビットの境界にない場合、その開始アドレスから直後の区切りのアドレスまでのバイト数を差し引いた値を生成する。それ以降は、現転送数レジスタ１７に格納された未転送バイト数から４差し引いた値を順に出力する。
【００２３】
マルチプレクサ１３〜１５はいずれも、中央制御部２３からの制御信号の論理により、２つの入力信号の一方を選択して出力する。この制御信号は、データ転送の開始時に論理が切り替わる。
【００２４】
より具体的には、マルチプレクサ１３は、データ転送の開始時には、開始アドレスレジスタ１１に格納された開始アドレスを選択し、その後は加算器１９の出力を選択する。したがって、マルチプレクサ１３の出力は、通常はデータ転送を行うたびに４バイト単位で増えていく。マルチプレクサ１３の出力はメモリアドレスレジスタ１６に格納される。
【００２５】
マルチプレクサ１４は、データ転送の開始時には、転送数レジスタ１２に格納された総転送量を選択し、その後は減算器２０の出力を選択する。したがって、マルチプレクサ１４の出力は、データ転送を行うたびに１ずつ減っていく。マルチプレクサ１４の出力は現転送数レジスタ１７に格納される。
【００２６】
中央制御部２３は、開始アドレス下位側ビット列レジスタ２４と、原転送数レジスタ２５と、キャッシュ要求イネーブルレジスタ２６とを有し、外部から供給される開始信号に応じて、これらレジスタに各データを格納する。
【００２７】
開始アドレス下位側ビット列レジスタ２４は、開始アドレスの下位側２ビットの値を格納する。これら２ビットの値により、開始アドレスと３２ビットの区切りのアドレスとの差分値を検出できる。
【００２８】
原転送数レジスタ２５は、転送数レジスタ１２に設定された総転送量をそのまま格納する。キャッシュ要求イネーブルレジスタ２６は、キャッシュメモリ３に対してデータ転送を指示するためのアクセス要求イネーブル信号を格納する。
【００２９】
図３は図２の中央制御部２３のステートマシンの構成を示す図である。図３に示すように、中央制御部２３は、状態ＩＤＬＥ、状態ＡＣＣ、状態ＷＡＩＴ、状態ＲＯＴＡＴＥの４つの動作状態を有する。中央制御部２３は、データ転送前は状態ＩＤＬＥであり、データ転送を開始すると状態ＡＣＣに遷移し、データ転送が終了すると、いったん状態ＷＡＩＴに遷移し、その後、状態ＲＯＴＡＴＥに移行して長レジスタ４のビット列の循環を行う。
【００３０】
図４は第１の実施形態による制御部５の処理動作の一例を示すフローチャートである。デコーダ２は、命令キャッシュ１で発行された命令をデコードして、キャッシュメモリ３から長レジスタ４へのデータ転送の命令であることがわかると、データ転送の開始を制御部５に指示する。
【００３１】
ここで、データ転送を指示する命令は、例えば、ＬＤＱＷ  （Ｒ０）  Ｖ０のようなものである。この命令は、レジスタＲ０が示すアドレスから９６ビットデータを、長レジスタ４Ｖ０にロードすることを指示している。この１命令だけで、図４の処理動作が行われて、キャッシュメモリ３内の９６ビットデータが３２ビットごとに長レジスタ４に格納される。
【００３２】
制御部５は、デコーダ２からのデータ転送の開始指示を受け取ると（ステップＳ１）、メモリアドレスレジスタ１６、現転送数レジスタ１７および長レジスタアクセス位置レジスタ１８をそれぞれ初期化する（ステップＳ２）。具体的には、メモリアドレスレジスタ１６には開始アドレスレジスタ１１に格納されている開始アドレスを格納し、現転送数レジスタ１７には転送数レジスタ１２に格納されている総転送量（この場合１２）を格納する。長レジスタアクセス位置レジスタ１８は０に初期化する。
【００３３】
長レジスタ４は、３２ビット単位で４つ（計１２８ビット）に区切られており、最上位ビットから順に、０、１、２、３のようにインデックスが付されている。例えば、インデックス０は長レジスタ４の１２７ビット目から９６ビット目までを表す。これらインデックス０〜３の値が長レジスタアクセス位置レジスタ１８に格納される。このレジスタに格納された値は、長レジスタ４内のアクセス位置になる。
【００３４】
次に、制御部５は、キャッシュメモリ３に対してアクセス要求を出し（ステップＳ３）、その後、キャッシュアクセスが終了するまで待機する（ステップＳ４）。次に、キャッシュメモリ３から読み出したデータを長レジスタ４中の長レジスタアクセス位置レジスタ１８で示されるアドレス位置に書き込む（ステップＳ５）。
【００３５】
次に、現転送数レジスタ１７に格納されている値を、転送数生成器２２の出力だけ引く（ステップＳ６）。この値は、未転送バイト数を表している。
【００３６】
次に、制御部５は、転送数レジスタ１２に格納されている転送数分の転送が終了したか否かを判定する（ステップＳ７）。ステップＳ７でまだ転送が終了していないと判定された場合、メモリアドレスレジスタ１６の値を、次の３２ビット境界位置のアドレスまで増やす（ステップＳ８）。
【００３７】
次に、制御部５は、ステップＳ８で設定した新たなメモリアドレスによるデータ転送が最後のデータ転送で、かつ、残りのデータ転送量（残転送量）が開始アドレスの下位２ビットで表されるバイト数以下か否かを判定する（ステップＳ９）。
【００３８】
ステップＳ９の判定がＮｏの場合、すなわち、最後のデータ転送でないか、あるいは残転送量が開始アドレスの下位２ビットで表されるバイト数より大きければ、長レジスタアクセス位置レジスタ１８を１だけ増やして（ステップＳ１０）、ステップＳ３に戻る。一方、ステップＳ９の判定がＹｅｓの場合、すなわち、最後のデータ転送で、かつ残転送量が開始アドレスの下位２ビットで表されるバイト数以下であれば、長レジスタアクセス位置レジスタ１８を０に初期化して（ステップＳ１１）、ステップＳ３に戻る。
【００３９】
このように、ステップＳ１１の処理が行われるのは、長レジスタアクセス位置レジスタ１８の先頭位置からデータを再書き込みしても、以前書き込んだデータが上書きされない場合のみであり、この上書きしない条件が残転送量が開始アドレスの下位２ビットで表されるバイト数以下の場合である。
【００４０】
上述したステップＳ７にて、転送数レジスタ１２に格納されている転送数分の転送が終了したと判定されると、開始メモリアドレスの下位２ビットの値に応じて、長レジスタ４を循環シフトさせる（ステップＳ１２）。
【００４１】
図５はキャッシュメモリ３内の９６ビットデータを長レジスタ４に転送する手順を模式的に示す図である。図５（ａ）はキャッシュメモリ３のデータ構造を表している。各升目は１バイト（＝８ビット）のデータを表し、太線を境界とする３２ビットを単位としてデータが読み出される。以下では、３２ビットの境界からずれた９６ビットデータ（図５（ａ）のハッチ領域）１０を長レジスタ４に転送する場合について説明する。
【００４２】
図５（ａ）の転送データの開始アドレスは、0x1000_0003である。まず、開始アドレスから次の境界位置までの１バイトデータ「３」を長レジスタ４に転送する（図５（ｂ））。データ転送は３２ビット（４バイト）単位で行われるため、「３」の前の「０，１，２」の２４ビットデータを転送してもよいが、これらデータは後に上書きされるため、転送してもしなくてもよい。
【００４３】
１回目のデータ転送が終了すると、現転送数レジスタ１７の値を１減らして１１にする。転送数生成器２２は、開始アドレスとその次の３２ビット境界との差分値「１」を計算し、この差分値「１」を加算器１９で加算して、メモリアドレスレジスタ１６を0x1000_0004に更新する。
【００４４】
更新したメモリアドレス0x1000_0004は最後のデータではないため、加算器２１にて長レジスタアクセス位置レジスタ１８の値を１増やして、再度キャッシュメモリ３へのアクセス要求を出す。そして、今度は、キャッシュメモリ３内の１バイトデータ「４」から４バイト分「４，５，６，７」が一度に読み出されて、長レジスタ４に格納される（図５（ｃ））。
【００４５】
「７」までのデータ転送が終了すると、現転送数レジスタ１７の値を４減らして７にする。転送数生成器２２は、直前にデータ転送を行った先頭のアドレスが３２ビット境界の区切りであったため、次の区切りまでの４を出力する。そして、メモリアドレスレジスタ１６の値は４加算されて、メモリアドレスは0x1000_8に更新される。また、長レジスタアクセス位置レジスタ１８の値は１加算されて、長レジスタアクセス位置レジスタ１８の値は２になる。
【００４６】
その後、次の３２ビットデータ「８，９，ａ，ｂ」のデータ転送が行われて（図５（ｄ））、その３２ビットデータの転送終了後には、メモリアドレスレジスタ１６の値は0x1000_cになり、現転送数レジスタ１７の値は３になる。
【００４７】
次のデータ転送が最後になり、転送すべきデータは、残りの２４ビットデータ「ｃ，ｄ，ｅ」である。この場合、図４のステップＳ９の判定が肯定されて、長レジスタアクセス位置レジスタ１８は０になる。長レジスタ４の先頭の４バイト内には、最初にデータ転送を行った１バイトデータ「３」がすでに格納されているため、このデータを上書きしないようにする必要がある。そこで、図１に示したマスク制御部６により、マスクデータを生成する。
【００４８】
図６はマスク制御部６が利用するマスク生成論理を示す図である。図示のように、転送データの開始アドレスの下位２ビットの値によりマスク値が定まる。下位２ビットの値を基準とする理由は、下位２ビットの値は、転送データの先頭位置が３２ビット境界からどのくらいずれているかを示すためである。図５の例の場合、下位２ビットが３であるため、マスク制御部６は、マスク値「０００１」を選択する。マスク値はバイト単位になっており、マスク値が１の場合にはマスクを行う（データの上書きを禁止する）ことを示す。
【００４９】
したがって、図５の場合、長レジスタ４内の先頭の４バイトのうち、すでにデータ転送を行った４バイト目の「３」だけがマスクされ、残りの３バイトに最終データ「ｃ，ｄ，ｅ」が格納される（図５（ｅ））。
【００５０】
以上で、キャッシュメモリ３から長レジスタ４へのデータ転送が完了する。次に、図１の順序変更演算器７は、長レジスタ４内でデータの循環シフト処理を行う。図７は転送データの開始アドレスの下位２ビットと循環シフト量との関係を示す図、図８は転送量と循環シフト範囲との関係を示す図である。図５の例の場合、開始アドレスの下位２ビットは「１１」であるため、図７より循環シフト量は３（バイト）になる。また、図５は９６ビット（１２バイト）のデータを転送するため、図８より循環シフト範囲は１２バイトになる。
【００５１】
順序変更演算器７は、循環シフト量と循環シフト範囲に従って、循環シフトを行う。循環シフト前のデータが図５（ｅ）の場合、３２ビット単位で、３バイトずつ左側に循環シフトさせる。これにより、最終的に図５（ｆ）のような９６ビットデータが得られる。
【００５２】
図５では、９６ビットのデータ転送について説明したが、本発明は、例えば６４ビットや１２８ビット等のデータ幅を持つデータ転送にも適用可能である。図９（ａ）は１２８ビットのデータ転送を行った直後（循環シフトを行う前）の長レジスタ４内のデータを示す図であり、図９（ｂ）は６４ビットのデータ転送を行った直後（循環シフトを行う前）の長レジスタ４内のデータを示す図である。
【００５３】
図９（ａ）の場合、循環シフト量は３で循環シフト範囲は１６バイトになり、図９（ｂ）の場合、循環シフト量は３で循環シフト範囲は８バイトになる。このように、転送データのビット数に応じて、循環シフト範囲を切り替える必要が生じる。
【００５４】
上述したように、第１の実施形態では、転送データの開始アドレスがキャッシュメモリ３の３２ビット境界位置からずれていても、わずか１命令で、キャッシュメモリ３から長レジスタ４へのデータ転送を指示でき、命令数の削減が図れる。また、開始アドレスが３２ビット境界位置にずれている場合の転送処理をハードウェアにて行うため、転送データの開始アドレスが３２ビット境界位置からずれているかどうかをソフトウェアで考慮する必要がなくなり、演算に伴うオーバーヘッドを軽減できる。
【００５５】
（第２の実施形態）
第１の実施形態では、転送データの開始アドレスが３２ビットの境界位置からずれている例を説明したが、転送データの開始アドレスが常に３２ビットの境界位置にある場合には、制御部５の内部構成を簡略化でき、かつデータ転送装置の処理動作も簡易になる。そこで、以下に説明する第２の実施形態では、転送データの開始アドレスが常に３２ビットの境界位置にある場合のデータ転送装置について説明する。
【００５６】
図１０は本発明の第２の実施形態によるデータ転送装置の概略構成を示すブロック図である。図１０では、図１と共通する構成部分には同一符号を付しており、以下では相違点を中心に説明する。
【００５７】
図１０のデータ転送装置は、図１からマスク制御部６を省略した構成になっている。第２の実施形態の場合、開始アドレスが３２ビットの境界位置にあるため、マスク処理は不要である。
【００５８】
図１１は本発明の第２の実施形態によるデータ転送装置内の制御部５の内部構成を示すブロック図である。図１１では、図２と共通する構成部分には同一符号を付しており、以下では相違点を中心に説明する。
【００５９】
図１１の制御部５は、図２の制御部５から転送数生成器２２を省略した構成になっており、中央制御部２３内の開始アドレス下位側ビット列レジスタ２４と原転送数レジスタ２５も省略されている。
【００６０】
メモリアドレスレジスタ１６は、データ転送を行うたびに加算器１９にて４ずつ加算される。同様に、現転送数レジスタ１７は、データ転送を行うたびに減算器２０にて４ずつ減算される。
【００６１】
図１２は図１１の中央制御装置のステートマシンの構成を示す図である。図１２に示すように、中央制御部２３は、状態ＩＤＬＥ、状態ＡＣＣ、状態ＷＡＩＴの３つの動作状態を有する。中央制御部２３は、データ転送前は状態ＩＤＬＥであり、データ転送を開始すると状態ＡＣＣに遷移し、データ転送が終了すると状態ＷＡＩＴに遷移し、その後、状態ＩＤＬＥに戻る。
【００６２】
図１３は第２の実施形態による制御部５の処理動作の一例を示すフローチャートである。制御部５は、デコーダ２からデータ転送の開始指示を受けると（ステップＳ２１）、開始アドレスレジスタ１１内の開始アドレスをメモリアドレスレジスタ１６に格納し、転送数レジスタ１２内の総転送データ量を現転送数レジスタ１７に格納する。また、長レジスタアクセス位置レジスタ１８を０に初期化する（ステップＳ２２）。
【００６３】
次に、キャッシュメモリ３に対してアクセス要求を出し（ステップＳ２３）、キャッシュメモリ３からの４バイト分のデータ読み出しが終了するまで待機する（ステップＳ２４）。
【００６４】
次に、読み出したデータを長レジスタ４内の長レジスタアクセス位置レジスタ１８の値が示す位置に書き込む（ステップＳ２５）。次に、現転送数レジスタ１７の値を４減算する（ステップＳ２６）。
【００６５】
次に、すべてのデータ転送が終了したか否かを判定し（ステップＳ２７）、まだ終了していなければ、メモリアドレスレジスタ１６の値を４加算して、長レジスタアクセス位置レジスタ１８の値を１加算する（ステップＳ２８）。そして、ステップＳ２３以降の処理を行う。
【００６６】
一方、ステップＳ２７にて、すべてのデータ転送が終了したと判定されると、図１３の処理を終了する（ステップＳ２９）。
【００６７】
図１４はキャッシュメモリ３内の９６ビットデータを長レジスタ４に転送する手順を模式的に示す図である。図１４（ａ）はキャッシュメモリ３のデータ構造を表している。本実施形態では、転送データの開始アドレスが３２ビットの境界位置にあり、図１４（ａ）では、アドレス0x1000_0000から９６ビット分（ハッチ領域）が読み出される。
【００６８】
図１４（ｂ）は１回目のデータ転送後の長レジスタ４の値を示している。長レジスタアクセス位置レジスタ１８の値が０の位置に最初の３２ビット分が格納される。同様に、図１４（ｃ）と図１４（ｄ）はそれぞれ、２回目および３回目のデータ転送後の長レジスタ４の値を示している。３回目のデータ転送が終了した時点で、すべてのデータ転送が完了する。
【００６９】
このように、第２の実施形態は、キャッシュメモリ３の読み出し単位よりもデータ幅が大きい連続データを１命令で長レジスタ４に転送でき、複数の命令でデータ転送を指示しなくて済むため、ソフトウェアの処理を簡略化できる。また、データ転送処理をハードウェアで行うため、きわめて高速にデータ転送を行うことができる。
【００７０】
（第３の実施形態）
第３の実施形態は、キャッシュメモリ３内の矩形領域のデータを長レジスタ４に転送するものである。
【００７１】
図１５は本発明の第３の実施形態によるデータ転送装置内の制御部５の内部構成を示すブロック図である。図１５では、図２と共通する構成部分には同一符号を付しており、以下では相違点を中心に説明する。
【００７２】
図１５の制御部５は、図２の制御部５内のほとんどの構成部分を備えているが、転送数レジスタ１２は備えていない。この他、図２の制御部５になかった構成部分として、図１５の制御部５は、行間メモリアドレス量設定レジスタ３１と、行幅レジスタ３２と、行数レジスタ３３と、行間メモリアドレス位置レジスタ３４と、行内転送量初期値レジスタ３５と、初期アドレスレジスタ３６と、行内転送量レジスタ３７と、行カウントレジスタ３８と、次候補選択器３９と、マルチプレクサ４０〜４４と、減算器４５，４６と、加減算器４７とを備えている。
【００７３】
行間メモリアドレス量設定レジスタ３１は、転送される矩形領域内の隣接行間の差分アドレスを格納する。行幅レジスタ３２は、矩形領域内の行幅を格納する。行数レジスタ３３は、矩形領域内の行数を格納する。
【００７４】
図１６は第３の実施形態による制御部５の処理動作の一例を示すフローチャートである。第１の実施形態の場合、連続したデータの転送を１命令で指示できたが、矩形領域の場合も、専用の命令を用意することで、１命令で指示可能である。この専用の命令は、矩形領域の開始アドレスと、データ幅と、行数と、転送先（この場合、長レジスタ４）をパラメータとして持っている。あるいは、通常のロード命令を利用して、矩形領域のデータ幅と行数を格納した特定のレジスタを参照するようにしてもよい。
【００７５】
制御部５は、この種の命令によりデコーダ２からデータ転送の開始指示を受けると（ステップＳ４１）、開始アドレスレジスタ１１に格納されている開始アドレスをメモリアドレスレジスタ１６に、行数レジスタ３３に格納されている行数を行カウントレジスタ３８に、行幅レジスタ３２に格納されている行幅を行内転送量レジスタ３７に、行間メモリアドレス位置レジスタ３４に格納されている差分アドレスを行間メモリアドレス位置レジスタ３４に、それぞれ格納し、長レジスタアクセス位置レジスタ１８を０に初期化する（ステップＳ４２）。
【００７６】
次に、制御部５は、メモリアドレスレジスタ１６内の開始アドレス0x1000_0000に対する読み出し要求をキャッシュメモリ３に送る（ステップＳ４３）。これを受けて、キャッシュメモリ３は、通常のロード命令と同様の手法で0x1000_0000から３２ビット分のデータを読み出す。制御部５は、キャッシュメモリ３からの３２ビット分のデータ読み出しが終了するまで待機する（ステップＳ４４）。
【００７７】
３２ビット分のデータ読み出しが終了すると、読み出したデータを長レジスタアクセス位置レジスタ１８に格納されている値（この場合は０）が示す長レジスタ４内の位置に格納する（ステップＳ４５）。
【００７８】
次に、行内転送量レジスタ３７の値を、転送した有効なデータバイト数だけ減算する（ステップＳ４６）。
【００７９】
次に、矩形領域内の１行分のデータ転送が終了したか否かを判定する（ステップＳ４７）。まだ終了していなければ、メモリアドレスレジスタ１６の値を、次の３２ビット境界位置に更新する（ステップＳ４８）。
【００８０】
次に、更新したメモリアドレスレジスタ１６の値に対応するデータ転送が、その行の最後のデータ転送で、かつ、残りのデータ転送量（残転送量）が開始アドレスの下位２ビットで表されるバイト数以下か否かを判定する（ステップＳ４９）。最後のデータ転送でないか、あるいは残転送量が開始アドレスの下位２ビットで表されるバイト数より大きければ、長レジスタアクセス位置レジスタ１８を１だけ増やして（ステップＳ５０）、ステップＳ４３以降の処理を行う。
【００８１】
一方、ステップＳ４９の判定がＹｅｓの場合、すなわち、最後のデータ転送で、かつ残転送量が開始アドレスの下位２ビットで表されるバイト数以下であれば、長レジスタアクセス位置レジスタ１８を０に初期化して（ステップＳ５１）、ステップＳ４３に戻る。
【００８２】
このように、ステップＳ５１の処理が行われるのは、長レジスタアクセス位置レジスタ１８の先頭位置からデータを再書き込みしても、以前書き込んだデータが上書きされない場合のみであり、この上書きしない条件が残転送量が開始アドレスの下位２ビットで表されるバイト数以下の場合である。
【００８３】
ステップＳ４７にて、１行分のデータ転送が終了したと判定されると、行カウントレジスタ３８を１減算する（ステップＳ５２）。
【００８４】
次に、矩形領域内のすべての行のデータ転送が終了したか否かを判定する（ステップＳ５３）。まだ終了していない場合には、メモリアドレスレジスタ１６の値を、行間メモリアドレス位置レジスタ３４の値を加えた値に更新する。そして、行内転送量レジスタ３７を初期化し、長レジスタアクセス位置レジスタ１８の値を、行幅／４に初期化する（ステップＳ５４）。そして、ステップＳ４３以降の処理を繰り返す。
【００８５】
一方、ステップＳ５３にて、すべてのデータ転送が終了したと判定されると、転送データの開始アドレスの下位２ビットの値に従って循環シフトを行い（ステップＳ５５）、すべての処理が終了する（ステップＳ５６）。
【００８６】
図１７はキャッシュメモリ３内の転送すべき矩形領域１０のデータの一例を示す図であり、図１８はデータ転送後の長レジスタ４の値を示す図である。図１７の矩形領域１０の開始アドレス0x1000_0003は、３２ビット境界位置とは１バイト分ずれている。以下、図１７の矩形領域１０のデータを長レジスタ４に転送する例について、本実施形態によるデータ転送装置の処理動作を詳述する。
【００８７】
データ転送を開始する前に、開始アドレスレジスタ１１には0x1000_0003を、行幅レジスタ３２には４（バイト）を、行数レジスタ３３には４を、行間メモリアドレス量設定レジスタ３１には0x0000_0100をそれぞれ格納しておく。
【００８８】
これら各レジスタの設定は、ソフトウェアにてストア命令や制御レジスタ書き込み命令等の命令を発行して行ってもよいし、何らかのハードウェアを利用して行ってもよい。長レジスタ４をデスティネーションとしたロード命令がデコードされると、その情報が制御部５に送られて、制御部５が動作を開始する。
【００８９】
制御部５は、キャッシュメモリ３に対して、アドレス0x1000_0000に対する読み出し要求を出す。キャッシュメモリ３は３２ビット（４バイト）単位でデータを読み出し、読み出したデータは、長レジスタ４内の長レジスタアクセス位置レジスタ１８（この場合、０）が示す位置に格納される（図１８（ａ））。
【００９０】
アドレス0x1000_0000の３２ビットのうち有効なデータは、アドレス0x1000_0003の１バイトだけである。したがって、１バイト分のデータ読み出し後は、行内転送量レジスタ３７の値は１だけ減算される。長レジスタ４内の最初の３バイトは、後で上書きされるため、この時点ではどのようなデータが格納されていてもよい。
【００９１】
１回目のデータ転送が終了すると、メモリアドレスは0x1000_0004に更新される。このアドレスによるデータ転送は行内の最後のものなので、長レジスタアクセス位置レジスタ１８の値は行の先頭位置０に設定される。
【００９２】
また、行内の最後のデータ転送時には、マスク制御部６がマスク処理を行う。図１７の矩形領域１０の場合、転送されるべきデータは「１，２，３」であり、３の後の１バイトデータをマスクする必要がある。このマスク処理は、図１に示したマスク制御部６が行う。
【００９３】
このようなマスク処理を行うことで、図１８（ｂ）に示すように、長レジスタ４内の「０」の前に、「１，２，３」の３バイトのデータが格納される。
【００９４】
以上で、１行分のデータ転送が終了し、行カウントレジスタ３８は１減少して３になる。このレジスタが０でないときは、未転送の行が残っていることを示している。したがって、メモリアドレスレジスタ１６を、行間メモリレジスタの値を加算した値0x1000_0103に更新する。そして、行内転送量レジスタ３７を４に初期化し、長レジスタアクセス位置レジスタ１８を１加算した値（この場合、１）に更新し、キャッシュメモリ３に対してアクセス要求を出す。
【００９５】
図１７の矩形領域１０の２行目のデータ転送も１行目と同様の手順で行われ、まずアドレス0x1000_0103のデータ「４」が長レジスタ４に格納された後、残りの「５，６，７」が「４」の前に格納される（図１８（ｃ））。
【００９６】
以降、同様の処理が矩形領域１０の３，４行目で行われる。４行目までのデータ転送が終了すると、行カウントレジスタ３８の値が０となり、データ転送が終了する。
【００９７】
その後、図１に示した順序変更演算器７は長レジスタ４の循環シフトを行う。図１９は転送データの開始アドレスの下位２ビットと循環シフト量との関係を示す図、図２０は矩形領域１０の行幅と循環シフト範囲との関係を示す図である。図１７の矩形領域１０の開始アドレスの下位２ビットは「１１」であるため、図１９より循環シフト量は３になる。また、図１７は３２ビットの行幅をもつ矩形領域１０のデータを転送するため、図２０より循環シフト範囲は３２ビット単位の４組になる。
【００９８】
順序変更演算器７は、図１９で選択した循環シフト量と図２０で選択した循環シフト範囲に基づいて、長レジスタ４を３２ビット単位で左に３ビットずつ循環シフトさせる。
【００９９】
図１７では、行幅４バイト×４行の矩形領域１０のデータ転送を行う例を説明したが、矩形領域１０のサイズは図１７に限定されない。例えば、図２１は行幅８バイト×２行の矩形領域１０の一例を示している。図２２は図２１の矩形領域１０のデータを転送して循環シフトする前の長レジスタ４の内容を示している。図示のように、矩形領域１０の開始アドレスのデータ「０」の前に、その行の最終データ「５，６，７」が配置され、開始アドレスの次の４バイトデータ「１，２，３，４」はそのままの順序で、「０」の後に配置される。２行目も同様である。
【０１００】
したがって、図２２の長レジスタ４を循環シフトする場合は、最初の８バイトデータ「５，６，７，０，１，２，３，４」と次の８バイトがそれぞれ循環シフトの対象となる。
【０１０１】
このように、第３の実施形態では、キャッシュメモリ３内の任意の場所にある矩形領域１０のデータを、簡易かつ高速に長レジスタ４に転送することができる。特に、第３の実施形態では、矩形領域１０の開始アドレスが３２ビットの境界位置になくても、簡易な命令を発行して、ハードウェアにより高速にデータ転送を行うことができる。
【０１０２】
（第４の実施形態）
第３の実施形態では、矩形状の転送データの開始アドレスが３２ビットの境界位置からずれている例を説明したが、転送データの開始アドレスが常に３２ビットの境界位置にある場合には、制御部５の内部構成を簡略化でき、かつデータ転送装置の処理動作も簡易になる。そこで、以下に説明する第４の実施形態では、矩形状の転送データの開始アドレスが常に３２ビットの境界位置にある場合のデータ転送装置について説明する。
【０１０３】
図２３は本発明の第４の実施形態によるデータ転送装置内の制御部５の内部構成を示すブロック図である。図２３では、図１５と共通する構成部分には同一符号を付しており、以下では相違点を中心に説明する。
【０１０４】
図２３の制御部５は、図１５の制御部５から転送数生成器２２と次候補選択器３９を省略した構成になっており、それ以外の構成は同じである。
【０１０５】
図２４は第４の実施形態による制御部５の処理動作の一例を示すフローチャートである。デコーダ２からデータ転送の開始指示を受けると（ステップＳ６１）、ステップＳ４２と同様に各レジスタを初期化する（ステップＳ６２）。次に、キャッシュメモリ３に対してアクセス要求を出し（ステップＳ６３）、キャッシュメモリ３からの４バイト分のデータ読み出しが終了するまで待機する（ステップＳ６４）。
【０１０６】
次に、読み出したデータを、長レジスタ４内の長レジスタアクセス位置レジスタ１８の値が示す位置に書き込む（ステップＳ６５）。次に、行内転送量レジスタ３７の値を４減算し（ステップＳ６６）、矩形領域１０内の１行分のデータ転送が終了したか否かを判定する（ステップＳ６７）。
【０１０７】
まだ、１行分のデータ転送が終了していない場合には、メモリアドレスレジスタ１６を４加算し（ステップＳ６８）、長レジスタアクセス位置レジスタ１８の値を１加算して（ステップＳ６９）、ステップＳ６３以降の処理を行う。
【０１０８】
ステップＳ６７にて１行分のデータ転送が終了したと判定されると、行カウンタレジスタの値を１減算し（ステップＳ７０）、矩形領域１０内のすべての行のデータ転送が終了したか否かを判定する（ステップＳ７１）。まだ終了していない場合には、メモリアドレスレジスタ１６の値を、行間メモリアドレス位置レジスタ３４の値を加算した値に設定し、行内転送量レジスタ３７を初期化する（ステップＳ７２）。
【０１０９】
一方、ステップＳ７１にて、矩形領域１０内のすべての行の転送が終了したと判定されると、図２４のデータ転送処理を完了する。
【０１１０】
図２５はキャッシュメモリ３内の矩形領域１０のデータの一例を示す図、図２６はデータ転送後の長レジスタ４の値を示す図である。図２５の矩形領域１０のデータの開始アドレスは、３２ビットの境界位置にあり、第３の実施形態では必須であるマスク処理が不要となる。まず、開始アドレス0x1000_0000からの４バイト分をキャッシュメモリ３から読み出して、長レジスタ４に格納する（図２６（ａ））。
【０１１１】
次に、矩形領域１０内の２行目の３２ビットデータを読み出して、長レジスタ４に格納する（図２６（ｂ））。以降、矩形領域１０の３行目および４行目の３２ビットデータを順に読み出して、長レジスタ４に格納する（図２６（ｃ）、図２６（ｄ））。
【０１１２】
このように、第４の実施形態では、キャッシュメモリ３内の矩形領域１０のデータの転送をハードウェアで行うため、データ転送処理を高速化できる。また、１命令で矩形領域１０のデータ転送を指定できるため、プログラマの負担が軽減される。
【０１１３】
（第５の実施形態）
第５の実施形態は、キャッシュメモリ３内の矩形領域１０のデータを長レジスタ４に転送する処理を行った後、長レジスタ４内で行と列を交換する転置処理を行うものである。
【０１１４】
図２７は本発明の第５の実施形態によるデータ転送装置の概略構成を示すブロック図である。図２７のデータ転送装置は、順序変更演算器７の処理内容が図１と異なっている。図２７の順序変更演算器７は、データ転送後に長レジスタ４内で循環シフト処理を行うことに加えて、矩形領域１０の行と列を入れ替えて長レジスタ４に格納する転置処理を行う。
【０１１５】
図２７に示す制御部５の内部構成は、図１５と同じであるため、構成および処理動作の説明は省略する。ただし、制御部５内の中央演算部の処理動作は図１５の制御部５とは異なっている。
【０１１６】
図２８は第５の実施形態による中央演算部のステートマシンの構成を示す図である。図示のように、中央演算部は、状態ＩＤＬＥ、状態ＡＣＣ、状態ＷＡＩＴ、状態ＲＯＴＡＴＥ、状態ＴＲＡＮＳの５つの動作状態を有する。中央制御部２３は、データ転送前は状態ＩＤＬＥであり、データ転送を開始すると状態ＡＣＣに遷移し、データ転送が終了すると状態ＷＡＩＴに遷移し、その後、循環シフト処理を行う際には状態ＲＯＴＡＴＥに遷移し、その後、転移処理を行う際には状態ＴＲＡＮＳに遷移する。
【０１１７】
図２９は第５の実施形態による制御部５の処理動作の一例を示すフローチャートである。図２９のフローチャートは、図１６のステップＳ５５の後に、転置処理を行うステップＳ５６を追加したものであり、ステップＳ５６以外の処理は図１６と同じである。
【０１１８】
ステップＳ５６では、循環シフトを行った後の長レジスタ４を、矩形領域１０の行幅に合わせて、データの並び替えを行う。
【０１１９】
図３０は長レジスタ４内の転置処理を説明する図である。図３０の上の段は転置処理を行う前の長レジスタ４内のデータを示し、下の段は転置処理を行った後の長レジスタ４内のデータを示している。図３０の矢印の向きに各１バイトデータが移動する。
【０１２０】
このように、第５の実施形態では、転置処理を１命令で指定して、ハードウェアで行うため、通常の命令セットで転置処理を行うよりも、行列演算にかかるオーバーヘッドを削減できる。
【０１２１】
（第６の実施形態）
第５の実施形態では、矩形領域１０の開始アドレスが３２ビット境界にない場合の転置処理を説明したが、矩形領域１０の開始アドレスが３２ビット境界にある場合（第４の実施形態）についても、循環シフトを行った後に転置処理を行うことができる。
【０１２２】
図３１は本発明の第６の実施形態によるデータ転送装置の概略構成を示すブロック図である。図３１のデータ転送装置は、図２７からマスク制御部６を省略した構成になっている。図３１のデータ転送装置は、開始アドレスが３２ビット境界にあるため、マスク処理は不要である。
【０１２３】
図３２は第６の実施形態による制御部５内の中央演算部のステートマシンの構成を示す図である。図３２のステートマシンは、図２８から状態ＲＯＴＡＴＥを省略した４つの動作状態を有する。第６の実施形態では、開始アドレスが３２ビット境界にあるため、循環シフト処理は不要であり、状態ＲＯＴＡＴＥは存在しない。状態ＷＡＩＴが終了すると、状態ＴＲＡＮＳに遷移して、転置処理を行う。
【０１２４】
図３３は第６の実施形態による制御部５の処理動作の一例を示すフローチャートである。図３３のフローチャートは、図２４のステップＳ７１にて全行のデータ転送が終了したと判定されたときに、転置処理を行うステップＳ７４を追加したものであり、ステップＳ７３以外の処理は図２４と同じである。
【０１２５】
図３４はキャッシュメモリ３内の転送および転置すべき矩形領域１０のデータの一例を示す図であり、図３５はデータ転送後の長レジスタ４の値を示す図である。１回目のデータ転送時には、図３５（ａ）のように１行目の３２ビットデータが転送される。同様に、図３５（ｂ）〜図３５（ｄ）は２回目、３回目および４回目のデータ転送後の長レジスタ４の値を示している。
【０１２６】
４回目のデータ転送が終了すると、図３５（ｅ）に示すように転置処理が行われて、１バイト単位でデータが並び替えられる。
【０１２７】
図３４では、１行が４バイト（３２ビット）で４行の矩形領域１０のデータ転送を行う例を説明したが、矩形領域１０の行と列のサイズには特に制限はない。例えば、図３６および図３７は１行が２バイトで２行からなる矩形領域１０のデータ転送を行う例を示している。この場合、矩形領域１０のデータ転送が終了すると、図３７（ａ）に示すように、３２ビット単位のデータの区切りに合わせて、１行目の２バイトデータと２行目の２バイトデータがそれぞれ区切りの位置から格納される。その後に、図３７（ｂ）に示すように、３２ビットごとに転置処理が行われる。
【０１２８】
また、図３８および図３９は１行が３バイトで２行からなる矩形領域１０のデータ転送を行う例を示している。この場合、矩形領域１０のデータ転送が終了すると、図３８（ａ）に示すように、３２ビット単位の区切りに合わせて、１行目の３バイトデータと２行目の３バイトデータがそれぞれ区切りの位置から格納される。その後に、図３８（ｂ）に示すように、３２ビットごとに転置処理が行われ、２バイトずつ３つの区切りの位置からデータが格納される。
【０１２９】
このように、第６の実施形態では、キャッシュメモリ３内の矩形領域１０を長レジスタ４に転送して、矩形領域１０の行と列を並び替える転置処理を、ハードウェアにて行うことができるため、簡易な命令でデータ転送と転置処理を指示でき、処理の高速化と命令の簡素化が図れる。
【０１３０】
上述した各実施形態では、キャッシュメモリ３から長レジスタ４にデータを転送する例を説明したが、転送元のメモリは必ずしもキャッシュメモリ３でなくてもよく、格納されたデータを読み出し可能な各種のメモリに適用可能である。
【図面の簡単な説明】
【０１３１】
【図１】本発明の第１の実施形態によるデータ転送装置の概略構成を示すブロック図。
【図２】図１の制御部５の内部構成を示すブロック図。
【図３】図２の中央制御部２３のステートマシンの構成を示す図。
【図４】第１の実施形態による制御部５の処理動作の一例を示すフローチャート。
【図５】（ａ）〜（ｆ）はキャッシュメモリ３内の９６ビットデータを長レジスタ４に転送する手順を模式的に示す図。
【図６】マスク制御部６が利用するマスク生成論理を示す図。
【図７】転送データの開始アドレスの下位２ビットと循環シフト量との関係を示す図。
【図８】転送量と循環シフト範囲との関係を示す図。
【図９】（ａ）は１２８ビットのデータ転送を行った直後（循環シフトを行う前）の長レジスタ４内のデータを示す図であり、（ｂ）は６４ビットのデータ転送を行った直後（循環シフトを行う前）の長レジスタ４内のデータを示す図。
【図１０】本発明の第２の実施形態によるデータ転送装置の概略構成を示すブロック図。
【図１１】本発明の第２の実施形態によるデータ転送装置内の制御部５の内部構成を示すブロック図。
【図１２】図１１の中央制御装置のステートマシンの構成を示す図。
【図１３】第２の実施形態による制御部５の処理動作の一例を示すフローチャート。
【図１４】キャッシュメモリ３内の９６ビットデータを長レジスタ４に転送する手順を模式的に示す図。
【図１５】本発明の第３の実施形態によるデータ転送装置内の制御部５の内部構成を示すブロック図。
【図１６】第３の実施形態による制御部５の処理動作の一例を示すフローチャート。
【図１７】キャッシュメモリ３内の転送すべき矩形領域１０のデータの一例を示す図。
【図１８】データ転送後の長レジスタ４の値を示す図。
【図１９】転送データの開始アドレスの下位２ビットと循環シフト量との関係を示す図。
【図２０】矩形領域１０の行幅と循環シフト範囲との関係を示す図。
【図２１】行幅８バイト×２行の矩形領域１０の一例を示す図。
【図２２】図２１の矩形領域１０のデータを転送して循環シフトする前の長レジスタ４の内容を示す図。
【図２３】本発明の第４の実施形態によるデータ転送装置内の制御部５の内部構成を示すブロック図。
【図２４】第４の実施形態による制御部５の処理動作の一例を示すフローチャート。
【図２５】キャッシュメモリ３内の矩形領域１０のデータの一例を示す図。
【図２６】データ転送後の長レジスタ４の値を示す図。
【図２７】本発明の第５の実施形態によるデータ転送装置の概略構成を示すブロック図。
【図２８】第５の実施形態による中央演算部のステートマシンの構成を示す図。
【図２９】第５の実施形態による制御部５の処理動作の一例を示すフローチャート。
【図３０】長レジスタ４内の転置処理を説明する図。
【図３１】本発明の第６の実施形態によるデータ転送装置の概略構成を示すブロック図。
【図３２】第６の実施形態による制御部５内の中央演算部のステートマシンの構成を示す図。
【図３３】第６の実施形態による制御部５の処理動作の一例を示すフローチャート。
【図３４】キャッシュメモリ３内の転送および転置すべき矩形領域１０のデータの一例を示す図。
【図３５】（ａ）〜（ｅ）はデータ転送後の長レジスタ４の値を示す図。
【図３６】１行が２バイトで２行からなる矩形領域１０を示す図。
【図３７】（ａ）および（ｂ）は１行が２バイトで２行からなる矩形領域１０のデータ転送を行う例を示す図。
【図３８】１行が３バイトで２行からなる矩形領域１０を示す図。
【図３９】（ａ）および（ｂ）は１行が３バイトで２行からなる矩形領域１０のデータ転送を行う例を示す図。
【符号の説明】
【０１３２】
３  キャッシュメモリ
４  長レジスタ
５  制御部
６  マスク制御部
７  順序変更演算器
１１  開始アドレスレジスタ
１２  転送数レジスタ
１６  メモリアドレスレジスタ
１７  現転送数レジスタ
１８  長レジスタアクセス位置レジスタ
２２  転送数生成器
２３  中央制御部
２４  下位側ビット列レジスタ
２５  原転送数レジスタ
２６  キャッシュ要求イネーブルレジスタ
３１  行間メモリアドレス量設定レジスタ
３２  行幅レジスタ
３３  行数レジスタ
３４  行間メモリアドレス位置レジスタ
３５  行内転送量初期値レジスタ
３６  初期アドレスレジスタ
３７  行内転送量レジスタ
３８  行カウントレジスタ
３９  次候補洗濯機
【図１】
2008077590.tif 000003
【図２】
2008077590.tif 000004
【図３】
2008077590.tif 000005
【図４】
2008077590.tif 000006
【図５】
2008077590.tif 000007
【図６】
2008077590.tif 000008
【図７】
2008077590.tif 000009
【図８】
2008077590.tif 000010
【図９】
2008077590.tif 000011
【図１０】
2008077590.tif 000012
【図１１】
2008077590.tif 000013
【図１２】
2008077590.tif 000014
【図１３】
2008077590.tif 000015
【図１４】
2008077590.tif 000016
【図１５】
2008077590.tif 000017
【図１６】
2008077590.tif 000018
【図１７】
2008077590.tif 000019
【図１８】
2008077590.tif 000020
【図１９】
2008077590.tif 000021
【図２０】
2008077590.tif 000022
【図２１】
2008077590.tif 000023
【図２２】
2008077590.tif 000024
【図２３】
2008077590.tif 000025
【図２４】
2008077590.tif 000026
【図２５】
2008077590.tif 000027
【図２６】
2008077590.tif 000028
【図２７】
2008077590.tif 000029
【図２８】
2008077590.tif 000030
【図２９】
2008077590.tif 000031
【図３０】
2008077590.tif 000032
【図３１】
2008077590.tif 000033
【図３２】
2008077590.tif 000034
【図３３】
2008077590.tif 000035
【図３４】
2008077590.tif 000036
【図３５】
2008077590.tif 000037
【図３６】
2008077590.tif 000038
【図３７】
2008077590.tif 000039
【図３８】
2008077590.tif 000040
【図３９】
2008077590.tif 000041