以下、本発明の実施形態について説明する。
図1は、本実施形態に係る半導体装置1の構成を示すブロック図である。
本実施形態に係る半導体装置1は、演算ユニット10A〜10Eと、コントローラ11と、データ入出力バッファ12と、コードバッファ13と、コード転送要求記憶部14と、コード転送制御部15とを備える。
コントローラ11は、データ入出力バッファ12とコードバッファ13とコード転送制御部15と接続される。コード転送制御部15は、コントローラ11とコードバッファ13とコード転送要求記憶部14と接続される。演算ユニット10Aは、コントローラ11と演算ユニット10Bと接続される。演算ユニット10Bは、演算ユニット10Aと演算ユニット10Cと接続される。演算ユニット10Cは、演算ユニット10Bと演算ユニット10Dと接続される。演算ユニット10Dは、演算ユニット10Cと演算ユニット10Eと接続される。演算ユニット10Eは、演算ユニット10Dとコントローラ11と接続される。
外部プロセッサ2は、システムメモリ3へアクセスし、システムメモリ3に記憶されたプログラムに従って動作する。外部プロセッサ2は、半導体装置1へデータやプログラムコードを送信し、データ処理を指示する。外部プロセッサ2は、データ入出力バッファ12とコードバッファ13とコード転送要求記憶部14とに対して直接アクセスする。
演算ユニット10A〜10Eは、演算器の回路構成を指定する回路情報を受信する。演算ユニット10A〜10Eは、それぞれ、複数の回路情報を記憶する。
演算ユニット10A〜10Eは、データ処理時に、演算処理の対象となるデータと、記憶する複数の回路情報のうちいずれの回路情報に従って演算処理を行うかを決定する回路情報ポインタとを受信する。演算ユニット10A〜10Eは、受信した回路情報ポインタで指定される回路情報に従って、受信したデータに対して演算処理を行う。そして、演算ユニット10A〜10Eは、演算結果であるデータと回路情報ポインタとを送信する。
演算ユニット10A〜10Eでは、データと回路情報ポインタとが演算ユニット間を1サイクルに1回伝搬され、演算ユニット10Aから10Eまで5サイクルかけて伝搬される。例えば、あるサイクルでコントローラ11から演算ユニット10Aへ送信されたデータと回路情報ポインタは、次のサイクルで演算ユニット10Aから演算ユニット10Bへ送信される。さらにその次のサイクルでは、演算ユニット10Aから演算ユニット10Bへ送信されたデータと回路情報ポインタは、演算ユニット10Bから演算ユニット10Cへ送信される。
以下、演算ユニット10Cから10Eまで、同様に、データと回路情報ポインタとが伝播していき、それぞれの演算ユニットで演算処理が行われる。演算ユニット10Eがデータをコントローラ11へ送信して、演算ユニット10A〜10Eによるデータ処理が終了する。
なお、サイクルとは、同期式回路において記憶素子部の値が変化してから、次に記憶素子部の値が変化するまでの最小時間単位である。
データ入出力バッファ12は、演算ユニット10A〜10Eが演算に使用するデータやその演算結果を一時的に記憶する。データ入出力バッファ12には、演算ユニット10A〜10Eによる演算処理が開始される前に、データが、外部プロセッサ2によって書き込まれる。演算ユニット10A〜10Eはそのデータを使用して演算処理を行う。その演算結果は、データ入出力バッファ12に書き込まれる。データ入出力バッファ12に書き込まれた演算結果は、外部プロセッサ2によって読み出される。
コードバッファ13は、コントローラ11の動作を指定するプログラムコードと、データ入出力バッファ12に対するデータ読み出し、データ書き込みの位置を指定するデータパス回路情報と、演算ユニット10A〜10Eの演算処理に使用される演算ユニット回路情報とを記憶する。コードバッファ13には、演算ユニット10A〜10Eによる演算処理が開始される前に、外部プロセッサ2によってプログラムコードとデータパス回路情報と演算ユニット回路情報とが書き込まれる。
コントローラ11は、コードバッファ13から転送されたプログラムコードに従って、回路情報ポインタを演算ユニット10A〜10Eへ送信して、演算処理を制御する。コントローラ11は、コードバッファ13に記憶されたデータパス回路情報に従って、データ入出力バッファ12に対するデータアクセスを制御する。
コード転送要求記憶部14は、コードバッファ13に記憶されたプログラムコードやデータパス回路情報、演算ユニット回路情報のうち、いずれをコントローラ11や演算ユニット10A〜10Eへ送信するかを指定するためのコード転送要求情報を記憶する。
コード転送要求記憶部14には、外部プロセッサ2によってコード転送要求情報が順に記憶される。コード転送要求記憶部14は、FIFO(First In First Out)である。コード転送要求記憶部14は、コード転送要求情報をコード転送制御部15へ送信する。コード転送制御部15へ送信されたコード転送要求情報が記憶されていた記憶領域には、外部プロセッサ2によって新たにコード転送要求情報が書き込まれる。
なお、コード転送要求記憶部14は、コード転送要求情報を記憶するための空き容量がない場合には、コード転送要求情報を受け付けられない旨を外部プロセッサ2へ通知する。
コード転送制御部15は、コード転送要求記憶部14から受信したコード転送要求情報に従って、コードバッファ13に記憶されたプログラムコードとデータパス回路情報と演算ユニット回路情報とをコントローラ11へ送信する。なお、演算ユニット回路情報は、コントローラ13を経由して、演算ユニット10A〜10Eへ送信される。
コード転送制御部15は、コード転送要求記憶部14から読み出したコード転送要求情報に指定されるすべてのプログラムコードとデータパス回路情報と演算ユニット回路情報の送信を完了した後、コントローラ11に演算処理を開始させるためのデータ処理開始通知を送信し、コード転送要求記憶部14に新たなコード転送要求情報を送信させるためのコード転送要求完了通知を送信する。
次に、本実施形態に係る半導体装置1の処理の概要を説明する。なお、半導体装置1の処理を、プログラムコードとデータパス回路情報とがコントローラ11に記憶され演算ユニット回路情報が演算ユニット10A〜10Eに記憶されるまでの初期化処理と、コントローラ11がプログラムコードに従い演算ユニット10A〜10Eに演算処理を行わせるデータ処理と、の2つに大別して、以下では説明する。なお、半導体装置1では、初期化処理とデータ処理とが同時に実行される。
[初期化処理]
まず、外部プロセッサ2は、データをデータ入出力バッファ12へ書き込み、プログラムコードと回路情報をコードバッファ13へ書き込む。
次に、外部プロセッサ2は、コード転送要求情報をコード転送要求記憶部14へ書き込む。コード転送要求情報は、プログラムコードとデータパス回路情報と演算ユニット回路情報とがコードバッファ13のどの位置に記憶されているかを示すアドレス情報と、プログラムコードとデータパス回路情報と演算ユニット回路情報の大きさを示すサイズ情報とを有する。
次に、コード転送制御部15は、コード転送要求記憶部14に一番古く記憶されたコード転送要求情報を読み出す。
次に、コード転送制御部15は、そのコード転送要求情報に従って、コードバッファ13からプログラムコードとデータパス回路情報と演算ユニット回路情報をコントローラ11へ転送する。なお、演算ユニット回路情報は、コントローラ11を経由して、演算ユニット10A〜10Eに受信される。
プログラムコードとデータパス回路情報と演算ユニット回路情報の転送が完了した後に、コード転送制御部15は、コントローラ11へデータ処理を開始させるためのデータ処理開始通知を送信する。コントローラ11は、データ処理開始通知を受け、データ処理を開始する。また、コード転送制御部15は、コード転送要求記憶部14に新たなコード転送要求情報を送信させるためのコード転送要求完了通知を送信する。
以後、コード転送制御部15は、コード転送要求記憶部14に記憶されたコード転送要求情報のうち次に古く記憶されたコード転送要求情報に従って、プログラムコードとデータパス回路情報と演算ユニット回路情報とをコードバッファ13からコントローラ11へ転送する。
次のデータ処理に必要なプログラムコードとデータパス回路情報と演算ユニット回路情報とをすべて転送し終えたら、コード転送制御部15は、コントローラ11へ次のデータ処理開始通知を送信する。そして、コントローラ11は、データ処理開始通知を受信したのち、次のデータ処理を行う。
なお、コード転送制御部15は、コントローラ11から受信するデータ処理の進捗状況に応じて、コードバッファ13に記憶されたプログラムコードとデータパス回路情報と演算ユニット回路情報のうちいずれをコントローラ11へ転送することができるかをサイクルごとに判断する。コード転送制御部15は、転送可能と判断されたものをコントローラ11へ転送する。
以上が、初期化処理の説明である。次に、データ処理開始通知がなされた後に、コントローラ11が行うデータ処理について説明する。
[データ処理]
まず、コントローラ11は、コード転送制御部15からデータ処理開始通知を受信すると、コード転送制御部15から送信されたプログラムコードをサイクルごとに実行する。
即ち、コントローラ11は、データ入出力バッファ12からのデータの読み出し、およびデータ入出力バッファ12へのデータの書き込みを行う。そして、コントローラ11は、データ入出力バッファ12から読み出したデータとコードバッファ13から転送された回路情報ポインタとを、演算ユニット10Aへ送信する。また、コントローラ11は、演算ユニット10Eから受信した演算結果をデータ入出力バッファ12へ書き込む。さらに、コントローラ11は、データ処理の進捗状況を、コード転送制御部15に通知する。
次に、演算ユニット10Aは、データと回路情報ポインタとをコントローラ11から受信し、演算処理を行う。
即ち、演算ユニット10Aは、受信した回路情報ポインタで指定される回路情報を内蔵する記憶部から読み出し、その回路情報に従って内蔵する演算器の構成を変更する。そして、演算ユニット10Aは、受信したデータを入力として、演算器によって演算処理を行う。演算処理が終了した後、演算ユニット10Aは、その演算結果と回路情報ポインタとを演算ユニット10Bへ送信する。なお、演算ユニット10Aが演算ユニット10Bへ送信する回路情報ポインタは、演算ユニット10Aがコントローラ11から受信した回路情報ポインタと同一である。以後、同一の回路情報ポインタが、演算ユニット10B〜10Eへ次々と転送される。
次に、演算ユニット10Bは、データと回路情報ポインタを演算ユニット10Aから受信し、演算ユニット10Aと同様に演算処理を行う。演算ユニット10Bは、演算処理が終了した後、演算結果と回路情報ポインタとを演算ユニット10Cへ送信する。
なお、演算ユニット10C〜10Eにおいても、演算ユニット10Aと同様に演算処理が行われる。ただし、演算ユニット10Eの演算結果は、コントローラ11へ送信される。
以上のようにして、コントローラ11は、データ処理をサイクルごとに実行する。
なお、演算ユニット10Aから10Eまでのデータ処理は計5サイクルを要するため、いわゆるパイプラインのように、5つのデータ処理が並列して実行されることとなる。
次に、コントローラ11は、すべてのプログラムコードを実行した時点で、外部プロセッサ2へデータ処理が完了した旨を通知し、データ処理を終了する。外部プロセッサ2は、データ処理が完了した旨の通知を受けてから所定サイクル経過した後に、データ入出力バッファ12に記憶されたデータ処理の結果を読み出す。ここで、所定サイクルは、演算ユニットの数と、データ入出力バッファ12へのデータ書き込みに要するサイクル数とを加算したサイクル数となる。
以上が、データ処理の説明である。次に、本実施形態に係る半導体装置1の内部構成について詳細に説明する。
図2は、コード転送要求記憶部14の構成を示すブロック図である。
コード転送要求記憶部14は、コード転送要求ラッチ140A〜140Dと、Validラッチ141A〜141Dと、カウンタ1421、1422と、デコーダ1431〜1432と、論理積演算器144A〜144D、146A〜146Dと、論理和演算器145A〜145Dと、セレクタ1471〜1473とを備える。
コード転送要求記憶部14には、外部プロセッサ2からコード転送要求情報とコード転送要求有効信号が入力され、コード転送制御部15からコード転送要求完了通知が入力される。
まず、外部プロセッサ2からコード転送要求情報とコード転送要求有効信号が入力された際のコード転送要求記憶部14の処理について説明する。
コード転送要求情報は、プログラムコードとデータパス回路情報と演算ユニット回路情報のコードバッファ13上のアドレスと、それぞれのサイズを示す情報である。コード転送要求有効信号は、外部プロセッサ2からコード転送要求記憶部14へコード転送要求情報を書き込む際に“1”となり、それ以外では“0”となる信号である。
カウンタ1421は、外部プロセッサ2からコード転送要求有効信号が入力される。カウンタ1421は、コード転送要求有効信号が入力されるたびに、その値が「+1」ずつインクリメントされる飽和カウンタであって、その最大値は“3”である。そのため、カウンタ1421の出力は、“0”、“1”、“2”、“3”、“0”、“1”・・・と変化する。カウンタ1421の出力が取り得る値の種類数は4つであり、コード転送要求情報をFIFOによって記憶できる最大数、即ちコード転送要求ラッチ140A〜140Dの数と等しい。なお、カウンタ1421とカウンタ1422の初期値は同じ値が設定される。
デコーダ1431は、カウンタ1421の値が入力され、その値ごとに4つの出力のうちのいずれか1つの出力を“1”とし、他の出力を“0”とする。
論理積演算器144A〜144Dは、それぞれ、デコーダ1431の出力を一方の入力とし、外部プロセッサ2から入力されるコード転送要求有効信号を他方の入力とし、論理積演算を行う。論理積演算器144A〜144Dの出力は、コード転送要求ラッチ140A〜140Dのトリガ、Validラッチ141A〜141Dの入力とトリガに入力される。例えば、論理積演算器144Aの出力が“1”である場合、コード転送要求ラッチ140Aには外部プロセッサ2から入力されるコード転送要求情報が記憶され、Validラッチ141Aには“1”が記憶される。
セレクタ1471は、カウンタ1421の値に応じて、Validラッチ141A〜141Dの出力のうちいずれか1つを選択して、コード転送ビジー信号として、外部プロセッサ2へ送信する。即ち、セレクタ1471は、コード転送要求情報が次に書き込まれるコード転送要求ラッチ140A〜140Dと対応するValidラッチ141A〜141Dの出力を選択して、外部プロセッサ2へ送信する。
Validラッチ141A〜141Dの値“1”は、対応するコード転送要求ラッチ140A〜140Dに有効なコード転送要求情報が記憶されていることを示す。そのため、コード転送ビジー信号が“1”の場合には、外部プロセッサ2はコード転送要求記憶部14にコード転送要求情報を書き込むことはできない。
次に、コード転送制御部15からコード転送要求完了通知が入力された際のコード転送要求記憶部14の処理について説明する。
コード転送要求完了通知は、コード転送制御部15がコード転送要求記憶部14から読み出したコード転送要求情報に従って、コードバッファ13からプログラムコードと回路情報とをコントローラ11へ転送する処理が完了した際に“1”となり、それ以外では“0”となる信号である。
カウンタ1422は、コード転送制御部15からコード転送要求完了通知が入力される。カウンタ1422は、コード転送要求完了通知が入力されるたびに、その値が「+1」ずつインクリメントされる飽和カウンタであり、カウンタ1431と同様、“0”、“1”、“2”、“3”、“0”、“1”・・・とその値が変化する。
デコーダ1432は、カウンタ1422の値に応じて、4つの出力のうちのいずれか1つの出力を“1”とし、他の出力を“0”とする。なお、デコーダ1432とデコーダ1431との入出力関係を定めるデコード規則は、同一に設定される。
論理積演算器146A〜146Dは、それぞれ、デコーダ1432の出力を一方の入力とし、コード転送制御部15から入力されたコード転送要求完了通知を他方の入力とし、論理積演算を行う。論理積演算器146A〜146Dの出力は、Validラッチ141A〜141Dのトリガへ入力される。
ここで、論理積演算器144A〜144Dの出力、即ちValidラッチ141A〜141Dの入力は“0”である。そのため、論理積演算器146A〜146Dのいずれかの出力が“1”となり、その出力“1”がValidラッチ141A〜141Dのいずれかのトリガに入力された場合、そのValidラッチの値は“0”となる。例えば、論理積演算器146Aの出力が“1”となった場合、Validラッチ141Aの値は“0”となる。これによって、Validラッチ141Aに対応するコード転送要求ラッチ140Aへ、新たなコード転送要求情報の書き込みが許可される。
セレクタ1472は、カウンタ1422の値に応じて、コード転送要求ラッチ140A〜140Dの出力のうちいずれか1つを選択して、コード転送制御部15へ送信する。即ち、セレクタ1472は、コード転送要求完了通知が“1”とされた場合に、次に処理されるコード転送要求が記憶されるコード転送要求ラッチの出力を選択して、コード転送制御部15へ送信する。
セレクタ1473は、カウンタ1422の値に応じて、Validラッチ141A〜141Dの出力のうちいずれか1つを選択して、コード転送制御部15へ送信する。即ち、セレクタ1473は、セレクタ1472によって選択されたコード転送要求ラッチに対応するValidラッチの出力を選択して、コード転送制御部15へ送信する。なお、セレクタ1473の出力は、Valid信号として、そのコード転送要求情報が有効であることを確認するために使用される。
図3は、コード転送制御部15の構成を示すブロック図である。
コード転送制御部15は、ラッチ150A〜150Hと、カウンタ151A〜151Dと、加算器152A〜152Cと、比較器153A〜153E、154と、セレクタ155A、155Bと、デコーダ156と、論理積演算器157A〜157Fと、論理和演算器158A〜158Dとを備える。
コード転送制御部15には、コード転送要求記憶部14からコード転送要求情報とValid信号が入力される。コード転送要求情報は、コードバッファ13における、プログラムコードの先頭アドレスとそのサイズ、データパス回路情報の先頭アドレスとそのサイズ、演算ユニット回路情報の先頭アドレスとそのサイズとから構成される。
なお、プログラムコードは、データ処理時のコントローラ11の動作を指定する。データパス回路情報は、データ処理時のコントローラ11によるデータ入出力バッファ12へのデータアクセスを指定する。演算ユニット回路情報は、演算ユニット10A〜10Eの演算器の回路構成を指定する。
コード転送制御部15は、ラッチ150Gが“1”のサイクルに、コード転送要求記憶部14からコード転送要求情報とValid信号“1”が入力されると、コード転送要求情報をラッチ150A〜150Gに記憶する。
ラッチ150Aがプログラムコードの先頭アドレスを記憶する。ラッチ150Bがプログラムコードのサイズを記憶する。ラッチ150Cがデータパス回路情報の先頭アドレスを記憶する。ラッチ150Dがデータパス回路情報のサイズを記憶する。ラッチ150Eが演算ユニット回路情報の先頭アドレスを記憶する。ラッチ150Fが演算ユニット回路情報のサイズを記憶する。
なお、ラッチ150Gはコード転送制御部15のラッチ150A〜150Fに対する書き込みの可否を制御する。ラッチ150Gが“1”の場合、コード転送要求記憶部14から送信されたValidなコード転送要求情報はラッチ150A〜150Fに書き込まれ、ラッチ150Gの値は“0”に更新される。一方、ラッチ150Gが“0”の場合、コード転送要求記憶部14からValidなコード転送要求情報を受信したとしても、ラッチ150A〜150Fに記憶されているコード転送要求情報は更新されない。ラッチ150A〜150Fに記憶されているコード転送要求情報に従って、すべてのプログラムコードおよびデータパス回路情報、演算ユニット回路情報がコントローラ11に転送された時点で、ラッチ150Gの値は“1”に戻る。
また、コード転送要求記憶部14からコード転送要求情報とともに送信されるValid信号が“1”のとき、そのコード転送要求情報が有効であることを示し、“0”のときコード転送要求情報が無効であることを示す。そのため、Valid信号が“0”の場合は、コード転送制御部15は、コード転送要求記憶部14から入力されたコード転送要求情報をラッチ150A〜150Gに記憶しない。
ラッチ150A〜150Gにコード転送要求情報が記憶されると、ラッチ150Gが“0”に設定され、カウンタ151A〜151Dの値が“0”に初期化される。ここで、カウンタ151A〜151Dの値は、アドレスの差分値として用いられる。
一例として、コード転送制御部15がプログラムコードをコードバッファ13からコントローラ11へ転送する際の動作を説明する。
ラッチ150Aは、プログラムコードの先頭アドレスを記憶している。加算器152Aは、そのプログラムコードの先頭アドレスとカウンタ151Aの値とを加算する。ここでは、カウンタ151Aの値は“0”に初期化されているため、加算器152Aの出力はプログラムコードの先頭アドレスと等しい。即ち、セレクタ155Aの3つの入力のうち1つは、プログラムコードの先頭アドレスである。同様に、セレクタ155Aの残り2つの入力は、データパス回路情報の先頭アドレスと演算ユニット回路情報の先頭アドレスになる。
セレクタ155Aは、デコーダ156の出力に応じて、3つの入力からいずれか1つを選択し出力する。ここで、デコーダ156は、プログラムコードのアドレスを示す加算器152Aの出力を1番、データパス回路情報のアドレスを示す加算器152Bの出力を2番、演算ユニット回路情報のアドレスを示す加算器152Aの出力を3番、とする優先度順で、コードバッファ13へ送信されるように、セレクタ155Aへ信号を送信する。
ここで、デコーダ156からの出力に応じてセレクタ155Aが加算器152Aの出力を選択しコードバッファ13へ送信したものとすると、コードバッファ13はコード転送制御部15から受信したアドレスに指定されるプログラムコードをコントローラ11へ送信する。
デコーダ156からセレクタ155Aへの出力は、カウンタ151Aとセレクタ155Bにも入力される。
カウンタ151Aは、デコーダ156からの出力を受け、その値が“+1”加算される。ここでは、カウンタ151Aの値は初期値“0”から“1”となり、加算器151Aは「プログラムコードの先頭アドレス+1」を出力することとなる。なお、この後、デコーダ156からの出力に応じて、セレクタ155Aが加算器151Aの出力を選択するたびに、「プログラムコードの先頭アドレス+1」、「プログラムコードの先頭アドレス+2」、・・・がコードバッファ13へ順次送信される。
セレクタ155Bは、デコーダ156からの出力を受け、カウンタ151Aの出力、カウンタ151Bの出力、カウンタ151Dの出力とラッチ150Hの出力が結合されたビット列のうち、いずれかを選択して出力する。
セレクタ155Aが加算器152Aの出力を選択した場合は、セレクタ155Bはカウンタ151Aの出力を選択する。以下同様に、セレクタ155Aが加算器152Bの出力を選択した場合は、セレクタ155Bはカウンタ151Bの出力を選択する。セレクタ155Aが加算器152Cの出力を選択した場合は、セレクタ155Bはカウンタ151Dの出力とラッチ150Hの値が結合されたビット列を選択する。
また、セレクタ155Aが加算器152Aの出力を選択した場合は、論理積演算器157Fの一方の入力が“1”となる。同様に、セレクタ155Aが加算器152Bの出力を選択した場合は、論理積演算器157Eの一方の入力が“1”となる。
論理積演算器157E、157Fは、デコーダ156の出力と、コントローラ11から入力されるデータ処理ビジー信号“0”との論理積演算を行う。なお、データ処理ビジー信号が“1”のときは、プログラムコードとデータパス回路情報の転送は許可されず、“0”のときは、プログラムコードとデータパス回路情報の転送は許可される。
比較器153Dは、コントローラ11から入力されるプログラムコード進捗状況と、プログラムコードの差分アドレスを示すカウンタ151Aの値とを比較し、不一致のとき“1”、一致のとき“0”を出力する。
比較器153Eは、コントローラ11から入力されるデータパス回路情報進捗状況と、データパス回路情報の差分アドレスを示すカウンタ151Bの値とを比較し、不一致のとき“1”、一致のとき“0”を出力する。
論理和演算器158A、158Bは、それぞれ、比較器153D、153Eの出力と、論理積演算器157F、157Eの出力とを論理和演算を行い、その出力をコートタグ1、コードタグ2としてコントローラ11へ出力する。カウンタ151Cの値は、コードタグ3、4、5としてコントローラ11へ出力される。なお、計5ビットのコードタグ1〜5は、それぞれ1ビットの出力であり、コードバッファ13からコントローラ11へ転送された情報の種類を示す。
比較器153A〜153Cは、それぞれ、カウンタ151A、151B、151Dの値と、ラッチ150B、150D、150Fに記憶された値と、が不一致のとき“1”を出力し、一致のとき“0”を出力する。
なお、カウンタ151Cは、“0”、“1”、“2”、“3”、“4”、“0”、“1”・・・を繰り返す飽和カウンタである。セレクタ155Aによって加算器152Cの出力が5回選択されカウンタ151Cの値が“4”となった場合に、比較器154の出力が“1”となり、カウンタ151Dの値が“1”加算される。これは、5つの演算ユニット10A〜10Eのそれぞれに対して演算ユニット回路情報を転送することを考慮したものである。
例えば、比較器153Aは、カウンタ151Aの値とラッチ150Bに記憶された値とを比較する。カウンタ151Aの値は、プログラムコードの先頭アドレスを基準として、コードバッファ13上のどの領域に記憶されたデータ(プログラムコード)をコントローラ11へ転送したかを示す差分アドレスである。ラッチ150Bに記憶された値は、プログラムコードのサイズである。そのため、カウンタ151Aの値とラッチ150Bに記憶された値とが等しい場合とは、コードバッファ13に記憶されたプログラムコードのコントローラ11への転送が終了したことを意味する。
比較器153Aは、プログラムコードの転送が終了したとき“0”を出力し、プログラムコードの転送がまだ終わっていないとき “1”を出力する。同様に、比較器153Bは、データパス回路情報の転送が終了したとき“0”を出力し、データパス回路情報の転送まだ終わっていないとき“1”を出力する。比較器153Cは、演算ユニット回路情報の転送が終了したとき“0”を出力し、演算ユニット回路情報の転送まだ終わっていないとき“1”を出力する。
比較器153A〜153Cの出力は、論理積演算器157A、157Bを介してデコーダ156へ入力される。デコーダ156は、プログラムコード、データパス回路情報、および演算ユニット回路情報の転送が終了したか否かの情報に基づき、セレクタ155Aでの選択、即ちコードバッファ13へ送信する差分アドレスの選択を制御する。
プログラムコード、データパス回路情報、および演算ユニット回路情報のすべての転送が終了し、比較器153A〜153Cの出力がすべて“0”となった場合、論理和演算器158Cの出力は“1”となる。
論理和演算器158Cの出力が“1”となり、かつ、Valid信号が有効“1”である場合、論理積演算器157Cは“1”を出力する。論理積演算器157Cの出力“1”は、有効なデータ転送要求情報に基づいて、プログラムコード、データパス回路情報、および演算ユニット回路情報のすべてをコントローラ11へ転送したことを示す。
論理積演算器157Cの出力は、データ処理開始通知としてコントローラ11へ送信され、コード転送要求完了通知としてコード転送要求記憶部14へ送信される。
論理積演算器157Cの出力“1”は、“1”と“0”とを繰り返すラッチ150Hの出力を反転させる。このラッチ150Hの値は、演算ユニット回路情報の差分アドレスの最上位ビットとして用いられる。論理積演算器157Cの出力“1”は、ラッチ150Gの値を反転させる。ラッチ150Gの値は、無効化信号としてコントローラ11へ送信される。
図4は、コントローラ11の構成を示すブロック図である。
コントローラ11は、プログラムコードメモリ110と、データパス回路情報メモリ111と、入力クロスバースイッチ112A、112Bと、出力クロスバースイッチ113と、回路情報アドレス生成部114と、データアドレス生成部115と、ラッチ116、116A〜116Iと、カウンタ117と、論理積演算器118A、118Bと、論理和演算器119とを備える。
コントローラ11は、データ入出力バッファ12からデータを読み出し、そのデータを演算ユニット10Aへ出力する。コントローラ11は、演算ユニット10Eから受信したデータをデータ入出力バッファ12に書き込む。コントローラ11は、データ入出力バッファ12に対するデータ読み出し、データ書き込みのためのアドレスを、データ入出力バッファ12へ送信する。
コントローラ11は、コード転送制御部15から、データ処理開始通知と、無効化信号と、コードタグ1〜5と、差分アドレスとを受信する。コントローラ11は、コード転送制御部15によって転送されたプログラムコード、データパス回路情報、あるいは演算ユニット回路情報をコードバッファ13から受信する。
プログラムメモリ110は、書き込みデータが入力されるDIN(Data In)と、DINから入力されたデータの書き込みの可否が入力されるWE(Write Enable)と、DINから入力されたデータを書き込むアドレスが入力されるADRIN(Address In)と、読み出しデータが出力されるDOUT(Data Out)と、DOUTから出力されるデータのアドレスが入力されるADROUT(Address Out)とを有する。
データパス回路情報メモリ111は、書き込みデータが入力されるDIN(Data In)と、DINから入力されたデータの書き込みの可否が入力されるWE(Write Enable)と、DINから入力されたデータを書き込むアドレスが入力されるADRIN(Address In)と、読み出しデータが出力されるDOUT(Data Out)と、DOUTから出力されるデータのアドレスが入力されるADROUT(Address Out)とを有する。
[初期化処理]
第1番目に、コード転送要求制御部15からプログラムコードが転送された場合のコントローラ11の処理を説明する。
コントローラ11は、無効化信号とコードタグと差分アドレスとをコード転送制御部15から受信し、コードバッファ13からプログラムコードを受信する。無効化信号は“0”であり、コントローラ11へ転送されるプログラムコードが有効であることを示す。コードタグ1は“1”であり、コントローラ11へプログラムコードが転送されていることを示す。差分アドレスは、コントローラ11へ転送されるプログラムコードのコードバッファ13におけるアドレスが、プログラムコードの先頭アドレスを基準として、どの程度ずれているかを示す差分値である。
コードタグ1が“1”であり、無効化信号が“0”であるため、論理積演算器118Aの出力が“1”となり、論理積演算器118Bの出力が“0”となる。そのため、プログラムコードメモリ110のWEが“1”となり、書き込み可能となる。
コード転送制御部15から受信した差分アドレスは、プログラムコードメモリ110のADRINに入力される。コードバッファ13から受信したプログラムコードは、プログラムコードメモリ110のDINに入力される。
そのため、プログラムコードメモリ110には、コード転送制御部15から受信した差分アドレスに指定される領域に、コードバッファ13から受信したプログラムコードが記憶される。
第2番目に、コード転送要求制御部15からデータパス回路情報が転送された場合のコントローラ11の処理を説明する。
コントローラ11は、無効化信号とコードタグと差分アドレスとをコード転送制御部15から受信し、コードバッファ13からデータパス回路情報を受信する。無効化信号は“0”であり、コントローラ11へ転送されるデータパス回路情報が有効であることを示す。コードタグ1が“0”、コードタグ2が“1”であり、コントローラ11へデータパス回路情報が転送されていることを示す。差分アドレスは、コントローラ11へ転送されるデータパス回路情報のコードバッファ13におけるアドレスが、データパス回路情報の先頭アドレスを基準として、どの程度ずれているかを示す差分値である。
コードタグ1が“0”、コードタグ2が“1”であり、無効化信号が“0”であるため、論理積演算器118Aの出力が“0”となり、論理積演算器118Bの出力が“1”となる。そのため、データパス回路情報メモリ111のWEが“1”となり、書き込み可能となる。
コード転送制御部15から受信した差分アドレスは、データパス回路情報メモリ111のADRINに入力される。コードバッファ13から受信したデータパス回路情報は、データパス回路情報メモリ111のDINに入力される。
そのため、データパス回路情報メモリ111には、コード転送制御部15から受信した差分アドレスに指定される領域に、コードバッファ13から受信したデータパス回路情報が記憶される。
第3番目に、コード転送要求制御部15から演算ユニット回路情報が転送された場合のコントローラ11の処理を説明する。
コントローラ11は、無効化信号とコードタグと差分アドレスとをコード転送制御部15から受信し、コードバッファ13から演算ユニット回路情報を受信する。無効化信号は“0”であり、コントローラ11へ転送される演算ユニット回路情報が有効であることを示す。コードタグ1が“0”、コードタグ2が“0”であり、コントローラ11へ演算ユニット回路情報が転送されていることを示す。差分アドレスは、コントローラ11へ転送される演算ユニット回路情報のコードバッファ13におけるアドレスが、演算ユニット回路情報の先頭アドレスを基準として、どの程度ずれているかを示す差分値である。
コードタグ1が“0”、コードタグ2が“0”であり、無効化信号が“0”であるため、論理積演算器118A、118Bの出力は“0”となる。そのため、プログラムコードメモリ110とデータパス回路情報メモリ111のWEは“0”となり、書き込みは行われない。
コードバッファ13から受信した演算ユニット回路情報は、ラッチ116Aを介して演算ユニット10Aへ送信される。コード転送制御部15から受信した差分アドレスは、ラッチ116Cを介して演算ユニット10Aへ送信される。コード転送制御部15から受信したコードタグ3〜5は、ラッチ116Bを介して演算ユニット10Aへ送信される。
コード転送制御部15からデータ処理開始通知を受信するたびに“0”から“1”へ、“1”から“0”へ値が反転されるラッチ116の出力は、演算ユニット10Aへ送信される。
ラッチ116の出力は、演算ユニット用コードタグの最上位ビットとされる。ラッチ116Bの出力であるコードタグ3〜5は、演算ユニット用コードタグの2〜4ビットとされる。ラッチ116Cの出力である差分アドレスは、演算ユニット用コードタグの5〜6ビットとされる。
この演算ユニット回路情報と演算ユニット用コードタグ(ラッチ116の出力とコードタグ3〜5と差分アドレス)は、演算ユニット10B〜10Eへ順次転送される。そして、各演算ユニット10A〜10Eは、受信した6ビットの演算ユニット用コードタグによって指定される領域に、同時に受信した演算ユニット回路情報を記憶する。
[データ処理]
次に、プログラムコードメモリ110に記憶されたプログラムコード、およびデータパス回路情報メモリ111に記憶されたデータパス回路情報にしたがって、コントローラ11がデータ処理を行う際の動作を説明する。
まず、カウンタ117が“0”に初期化される。カウンタ117の値“0”は、プログラムコードメモリ110のADROUTに入力される。プログラムコードメモリ110のDOUTは、アドレス0番の領域に記憶されたプログラムコードに従って、繰り返し範囲と繰り返し回数とを回路情報アドレス生成部114へ、アドレスをデータアドレス生成部115へ出力する。
図5は、プログラムコードメモリ110に記憶されるプログラムコードの一例を示す図である。プログラムコードメモリ110は、アドレス番地ごとに、プログラムコードと3つのベースアドレス情報とを記憶する。
プログラムコードは、アドレス0番から順に読み出される。プログラムコードは、コントローラ11の状態遷移を定める。プログラムコードは、状態を遷移する際の繰り返し範囲と繰り返し回数とを有する単位コードから構成される。なお、単位コードは、少なくとも1つ以上のコントローラ11の状態遷移を定めるものであればよい。
プログラムコードメモリ110の各アドレス番地には、1つの単位コードが記憶される。プログラムコードは、コントローラ11によって単位コードごとに順に読み出され実行される。
例えば、図5に示すプログラムコードメモリ110のアドレス0番に記憶された単位コード「繰り返し範囲:2」、「繰り返し回数:3」を実行することによって、コントローラ11は、「1番目:状態0」、「2番目:状態1」、「3番目:状態0」、「4番目:状態1」、「5番目:状態0」、「6番目:状態1」のように状態遷移を行う。
続いて、プログラムコードメモリ110のアドレス1番に記憶された単位コード「繰り返し範囲:2」、「繰り返し回数:2」を実行することによって、コントローラ11は、「7番目:状態2」、「8番目:状態3」、「9番目:状態2」、「10番目:状態3」のように状態遷移を行う。
このように、コントローラ11は、プログラムコードに従った状態遷移を、プログラムコードの終端まで続ける。プログラムコードの終端の「繰り返し回数」は“0”が設定される。
ベースアドレス情報は、データ入出力バッファ12のアドレスを生成するために使用される情報であって、プログラムコードの単位コードと関連付けて記憶される情報である。
プログラムコードメモリ110のアドレス番地ごとに記憶された3つのベースアドレス情報は、それぞれ、各演算ユニット10A〜10Eの演算処理に使用するデータ(読み出しデータ)をデータ入出力バッファ12から読み出す際に使用する2つのアドレスと、各演算ユニット10A〜10E演算処理の結果(書き込みデータ)をデータ入出力バッファ12へ書き込む際に使用する1つのアドレスとを、生成するために使用される。
なお、単位コードと関連付けてプログラムコードメモリ110に記憶された3つのベースアドレス情報は、その単位コードを実行することによってコントローラ11が状態遷移をしている間にデータ入出力バッファ12のアドレス(書き込みデータのアドレス、読み出しデータのアドレス)を生成する際に、使用される。また、ベースアドレス情報は、プログラムコードメモリ110に記憶されていなくても良く、他の記憶装置に、プログラムコードの単位コードと関連付けて記憶されていても良い。
次に、データアドレス生成部115は、プログラムコードメモリ110から新たな単位コードが読み出されたサイクルには、プログラムコードメモリ110から入力されるベースアドレス情報と、データパス回路情報メモリ11から入力されるオフセット情報とを加算してデータ入出力バッファアドレスを生成する。
データアドレス生成部115は、プログラムコードメモリ110から新たな単位コードが読み出されないサイクルには、前のサイクルに生成されたデータ入出力バッファアドレスと、データパス回路情報メモリ11から入力されるオフセット情報とを加算してデータ入出力バッファアドレスを生成する。なお、生成されたデータ入出力バッファ用アドレスは、データ入出力バッファ12のデータ読み出し、データ書き込みに使用される。
データドレス生成部115は、論理和演算器119の出力が“1”であるとき、即ち、コード転送要求制御部15から受信するデータ処理開始通知が“1”であるか、回路情報アドレス生成部114によってカウンタ117の値が“+1”加算されるときに、新たな単位コードが読み出されたと判定する。
回路情報アドレス生成部114は、プログラムコードメモリ110のADROUTから出力された繰り返し範囲と繰り返し回数から導かれる状態番号に応じてデータパス回路情報アドレスを順次生成し、その生成したデータパス回路情報アドレスをデータパス回路情報メモリ111のADROUTへ順次出力する。
回路情報アドレス生成部114は、プログラムコードメモリ110のアドレス0番の繰り返し範囲と繰り返し回数によって定まる状態番号をすべて出力した後、カウンタ117の値を“+1”加算する。このカウンタ117の値“1”は、プログラムコードメモリ110のADROUTに入力される。そして、プログラムコードメモリ110のアドレス1番の繰り返し範囲と繰り返し回数が回路情報アドレス生成部114に新たに入力され、処理が継続される。
次に、回路情報アドレス生成部114からデータパス回路情報アドレスがデータパス回路情報メモリ111のADROUTに入力された後、データパス回路情報メモリ111のDOUTは、そのデータパス回路情報アドレスに指定される領域に記憶されたデータパス回路情報を出力する。
図6は、データパス回路情報メモリ111に記憶されるデータパス回路情報の一例を示す図である。
データパス回路情報は、アドレス番地ごとに、3つのクロスバースイッチ回路情報と、3つのオフセット情報と、回路情報ポインタとを有する。
クロスバースイッチ回路情報は、入力クロスバースイッチ112A、112Bおよび出力クロスバースイッチ113において入力されたビット列の並びの変更の仕方を示す。
3つオフセット情報は、それぞれ、データ入出力バッファ13に対するデータ読み出しを行う際の読み出しアドレスおよびデータ書き込みを行う際の書き込みアドレス(データ入出力バッファ用アドレス)を生成する際に使用される。
3つのオフセット情報は、それぞれ、読み出しアドレスおよび書き込みアドレスとベースアドレス情報との差分値である。それぞれのオフセット情報とベースアドレス情報とが加算されることによって、読み出しアドレスおよび書き込みアドレスが生成される。なお、オフセット情報は、ベースアドレス情報と演算されることによって、読み出しアドレスおよび書き込みアドレスを生成できる情報であれば良い。
読み出しアドレスとは、コントローラ11がデータ入出力バッファ13からデータを読み出す際に用いるアドレスである。読み出しアドレスに指定されるデータ入出力バッファ13上のデータは、入力クロスバースイッチ112Aへ入力される。書き込みアドレスとは、コントローラ11がデータ入出力バッファ13へデータを書き込む際に用いるアドレスである。出力クロスバースイッチ113から出力されたデータは、書き込みアドレスに指定される記憶領域へ書き込まれる。
回路情報ポインタは、演算ユニット10A〜10Eに内蔵される記憶部上の演算ユニット回路情報のうち演算時にいずれを使用するかを示す。
次に、データパス回路情報メモリ111は、データパス回路情報アドレスに応じて、データパス回路情報を出力する。即ち、データパス回路情報メモリ111のDOUTは、オフセット情報をデータアドレス生成部115へ出力する。データパス回路情報メモリ111のDOUTは、クロスバースイッチ回路情報を入力クロスバースイッチ112A、112Bおよび出力クロスバースイッチ113へ出力する。なお、クロスバースイッチ回路情報は、ラッチ116D〜116Iを経由することによって、入力クロスバースイッチ112A、112Bおよび出力クロスバースイッチ113に入力されるタイミングが調整される。データパス回路情報メモリ111のDOUTは、回路情報ポインタを演算ユニット10Aへ出力する。回路情報ポインタは、データ処理時に、データとともに順次演算ユニット10B〜10Eへ転送される。
次に、入力クロスバースイッチ112A、112Bは、データアドレス生成部115によって生成されたデータ入出力バッファ用アドレスに指定される読み出しデータを受信し、入力されたクロスバースイッチ回路情報に従ってそのデータのビット列の並びを変更し、演算ユニット10Aへ送信する。
出力クロスバースイッチ113は、演算ユニット10Eから受信したデータを、入力されたクロスバースイッチ回路情報に従ってそのデータのビット列の並びを変更し、データアドレス生成部115によって生成されたデータ入出力バッファ用アドレスに指定される領域に書き込みデータとして書き込む。
以上の処理によって、例えば、図5に示すアドレス0番の「繰り返し範囲:2」、「繰り返し回数:3」の動作において、1回目の状態遷移「1番目:状態0」で行われる処理が終了する。次に、回路情報アドレス114は、「2番目:状態1」で行われる処理を開始するため、状態番号“1”に応じたデータパス回路情報アドレスを生成し、その生成したデータパス回路情報アドレスをデータパス回路情報メモリ111のADROUTへ出力する。以下、同様に上記の処理が行われる。
以後、「3番目:状態0」、「4番目:状態1」、「5番目:状態0」、「6番目:状態1」のように状態遷移と、それに伴う処理がなされる。
次に、回路情報アドレス生成部114は、カウンタ117の値を“+1”加算する。このカウンタ117の値“1”は、プログラムコードメモリ110のADROUTに入力される。そして、以下、同様に、プログラムコードメモリ110のアドレス1番の領域に記憶されたプログラムコードに従って処理が継続される。
なお、カウンタ117は、プログラムコード進捗状況として、カウンタ117のカウント値をコード転送要求制御部15へ送信する。回路情報生成アドレス部114は、データパス回路情報メモリ111のADROUTに出力するのと同じアドレスを、データパス回路情報進捗状況として、コード転送要求制御部15へ送信する。また、回路情報生成アドレス部114は、プログラムコードメモリ110から入力された繰り返し回数が“0”のときに“0”となり、プログラムコードメモリ110から入力された繰り返し回数が“0”以外のときに“1”となる信号を、データ処理ビジー信号としてコード転送要求制御部15へ送信する。
図7は、演算ユニット10Aの構成を示すブロック図である。なお、演算ユニット10B〜10Eについても同様である。
演算ユニット10Aは、演算器100と、演算ユニット回路情報ラッチ101A〜101Hと、回路情報更新信号生成部102と、データパイプラインレジスタ103と、制御パイプラインレジスタ104と、コードパイプラインレジスタ105とを備える。
演算ユニット10Aは、2つのデータと回路情報ポインタと演算ユニット回路情報と演算ユニット用コードタグとを、コントローラ11から受信する。
[初期化処理]
演算ユニット10Aは、コントローラ11から転送された演算ユニット回路情報を、内蔵する記憶部に記憶するための初期化処理を行う。初期化処理では、演算ユニット10Aは、演算ユニット回路情報と演算ユニット用コードタグとをコントローラ11から受信する。
演算ユニット用コードタグは、回路情報更新信号生成部102に入力される。回路情報更新信号生成部102は、入力された演算ユニット用コードタグに応じて、すべての出力を“0”に保持するか、あるいは、いずれか1つの演算ユニット回路情報ラッチ101A〜101Hのトリガに“1”を出力する。演算ユニット回路情報は、演算ユニット回路情報ラッチ101A〜101Hのそれぞれに入力されているため、回路情報更新信号生成部102によってそのトリガに“1”が入力された演算ユニット回路情報ラッチに、演算ユニット回路情報が記憶される。
図8は、演算ユニット用コードタグの値と演算ユニット回路情報が記憶される演算ユニット回路情報ラッチとの対応関係を示す図である。演算ユニット用コードタグが「010000」、「010001」、「010010」、「010011」である場合、それぞれ、演算ユニット10Aの演算ユニット回路情報ラッチ101A、101B、101C、101Dに、演算ユニット回路情報が記憶される。また、演算ユニット用コードタグが「110000」、「110001」、「110010」、「110011」である場合、それぞれ、演算ユニット10Aの演算ユニット回路情報ラッチ101E、101F、101G、101Hに、演算ユニット回路情報が記憶される。一方、演算ユニット用コードタグが、「010000」〜「010011」、「110000」〜「110011」のいずれでもない場合、演算ユニット10Aの演算ユニット回路情報ラッチ101A〜101Hには、演算ユニット回路情報は記憶されない。
演算ユニット10Aが受信した演算ユニット回路情報と演算ユニット用コードタグとは、コードパイプラインレジスタ105に記憶され、次のサイクルで、次段の演算ユニット10Bへ送信される。
以下、同様の処理が、演算ユニット10B〜10Eでなされる。なお、演算ユニット10Eは、コードパイプラインレジスタ105を有していなくとも良い。
[データ処理]
演算ユニット10Aは、2つのデータと回路情報ポインタとをコントローラ11から受信する。2つのデータは演算器100に入力され、回路情報ポインタはセレクタ106に入力される。
セレクタ106は、入力された回路情報ポインタに従って、演算ユニット回路情報ラッチ101A〜101Hに記憶された演算ユニット回路情報のうちいずれかを演算器100へ出力する。演算器100は、入力された演算ユニット回路情報に従って、演算処理を行う。
図9は、演算器100の構成の一例を示す図である。
演算器100は、セレクタ1001A〜1001D、1004A〜1004Dと、ALU(Arithmetic Logic Unit)1002A〜1002Dと、シフタ1003A〜1003Dとを備える。
演算器100には、32ビットのデータが2つ入力される。以下の説明では、一方のデータを右入力データ、他方のデータを左入力データと呼ぶ。
演算器100には、64ビットの演算ユニット回路情報が入力される。64ビットの演算ユニット回路情報は、4ビットの入力モードと、32ビットの直値入力データと、8ビットのALU設定と、12ビットのシフト値と、8ビットのクロスバー設定とを有する。
セレクタ1001A〜1001Dには、一方に右入力データが入力され、他方に演算ユニット回路情報の一部である直値入力データが入力される。セレクタ1001A〜1001Dのそれぞれには、4ビットの入力モードのうちの1ビットが入力される。セレクタ1001A〜1001Dは、入力モードが“1”のとき右入力データを選択出力し、入力モードが“0”のとき直値入力データを選択出力する
ALU1002A〜1002Dには、一方に左入力データが入力され、他方にセレクタ1001A〜1001Dの出力がそれぞれ入力される。ALU1002A〜1002Dのそれぞれには、8ビットのALU設定のうちの2ビットが入力される。ALU1002A〜1002Dは、入力される2ビットのALU設定に応じて、2つのデータに対して演算処理を行う。
シフタ1003A〜1003Dには、ALU1002A〜1002Dの出力がそれぞれ入力される。シフタ1003A〜1003Dのそれぞれには、12ビットのシフト値のうちの3ビットが入力される。シフタ1003A〜1003Dは、入力される3ビットのシフト値だけ、一定方向にビット・ローテーションする。シフタ1003A〜1003Dの出力は結合されて、演算器100の左出力データとして出力される。
セレクタ1004Aには、シフタ1003B、1003C、および1003Dの出力が入力される。セレクタ1004Bには、シフタ1003A、1003C、および1003Dの出力が入力される。セレクタ1004Cには、シフタ1003A、1003B、および1003Dの出力が入力される。セレクタ1004Dには、シフタ1003A、1003B、および1003Cの出力が入力される。
セレクタ1004A〜1004Dのそれぞれには、8ビットのクロスバー設定のうちの2ビットが入力される。セレクタ1004A〜1004Dは、入力された2ビットのクロスバー設定の値に応じて、3つの入力のうちのいずれかを選択出力する。セレクタ1004A〜1004Dの出力は結合されて、演算器100の右出力データとして出力される。
データパイプラインレジスタ103は、演算器100の左出力データと右出力データとを記憶し、次のサイクルで、次段の演算ユニット10Bへ送信する。また、同じサイクルで、制御パイプラインレジスタ104は、コントローラ11から受信した回路情報ポインタを記憶し、次のサイクルで、次段の演算ユニット10Bへ送信する。
以下、同様の処理が、演算ユニット10B〜10Eでなされる。なお、演算ユニット10Eは、制御パイプラインレジスタ104を有していなくとも良い。
図10は、プログラムコードメモリ110が記憶するプログラムコードの一例を示す。図11は、コード転送制御部15で処理されるコード転送要求情報の一例を示す。
図12は、図10に示すプログラムコードと図11に示すコード転送要求情報に従って、コントローラ11と演算ユニット10A〜10Eとコード転送制御部15との動作の流れを示す図である。なお、データ入出力バッファ12とコードバッファ13は、読み出し要求を受け取ったそのサイクルに、読み出しデータを出力するものとする。
以下では、演算ユニット用コードタグの最上位ビットが“1”に設定されているものとする。このとき、演算ユニット10A〜10Eは、それぞれの演算回路情報ラッチ101A〜101Dに記憶されている演算回路情報のみを用いて演算処理を行う。また、演算ユニット10A〜10Eは、それぞれの演算回路情報ラッチ101E〜101Hに、コントローラ11から順次転送された演算回路情報を書き込む。
なお、演算ユニット用コードタグの最上位ビットが“0”に設定されているときは、演算ユニット10A〜10Eは、それぞれの演算回路情報ラッチ101E〜101Hに記憶されている演算回路情報のみを用いて演算処理を行う。また、演算ユニット10A〜10Eは、それぞれの演算回路情報ラッチ101A〜101Dに、コントローラ11から順次転送された演算回路情報を書き込む。
[サイクル0]
まず、コントローラ11は、プログラムコードメモリ110のアドレス0番地に記憶されたプログラムコードを読み出す。その読み出したプログラムコードは、繰り返し範囲が“2”、繰り返し回数が“1”と記載されている。
次に、繰り返し範囲“2”、繰り返し回数“1”であるため、コントローラ11は、データパス回路情報メモリ111のアドレス0番地を読み出す。なお、コントローラ11は、サイクル1で、アドレス1番地を読み出す。コントローラ11は、読み出したデータパス回路情報に応じて、演算ユニット10Aへデータと回路情報ポインタ“0”とを送信して、第1番目のデータ処理を開始する。
コントローラ11は、データ処理を行っている最中であるためコード転送制御部15へデータ処理ビジー信号“1”を送信し、また同時にプログラムコード進捗状況“0”とデータパス回路情報進捗状況“0”とを送信する。コード転送制御部15は、データ処理ビジー信号“1”であって、プログラムコード進捗状況とデータパス回路情報進捗状況とが“0”であるため、プログラムコードおよびデータパス回路情報の転送が禁止され、演算ユニット回路情報の転送しか行えない。
コード転送制御部15は、演算ユニット回路情報を演算ユニット10Eの演算ユニット回路情報ラッチ101Eに記憶させるため、コードバッファ13から演算ユニット回路情報を転送させ、コードタグ“00000”をコントローラ11へ送信する。コードタグ1が“0”、コードタグ2が“0”であるため、プログラムコードメモリ110とデータパス回路情報メモリ111に演算ユニット回路情報が記憶されることはない。コードタグ3が“0”、コードタグ4が“0”、コードタグ5が“0”であるため、演算ユニット10Eに演算ユニット回路情報が記憶される。なお、演算ユニット回路情報は、5サイクル後に、演算回路ユニット10Eに入力され、演算ユニット回路情報ラッチ101Eに記憶される。
[サイクル1]
コントローラ11は、サイクル0で読み出したプログラムコード(繰り返し範囲“2”、繰り返し回数“1”)の実行を継続する。コントローラ11は、データパス回路情報メモリ111のアドレス1番地を読み出す。コントローラ11は、読み出したデータパス回路情報に応じて、演算ユニット10Aへデータと回路情報ポインタ“3”とを送信して、第2番目のデータ処理を開始する。
コントローラ11は、データ処理を行っている最中であるためコード転送制御部15へデータ処理ビジー信号“1”を送信し、また同時にプログラムコード進捗状況“0”とデータパス回路情報進捗状況“0”とを送信する。コード転送制御部15は、データ処理ビジー信号“1”であって、プログラムコード進捗状況とデータパス回路情報進捗状況とが“0”であるため、プログラムコードおよびデータパス回路情報の転送が禁止され、演算ユニット回路情報の転送しか行えない。
コード転送制御部15は、演算ユニット回路情報を演算ユニット10Dの演算ユニット回路情報ラッチ101Eに記憶させるため、コードバッファ13から演算ユニット回路情報を転送させ、コードタグ“00001”をコントローラ11へ送信する。コードタグ1、2が“0”であるため、プログラムコードメモリ110とデータパス回路情報メモリ111に演算ユニット回路情報が記憶されることはない。コードタグ3が“0”、コードタグ4が“0”、コードタグ5が“1”であるため、演算ユニット10Dに演算ユニット回路情報が記憶される。なお、演算ユニット回路情報は、4サイクル後に、演算回路ユニット10Dに入力され、演算ユニット回路情報ラッチ101Eに記憶される。
演算ユニット10Aは、コントローラ11から受信した回路情報ポインタ“0”指定される演算ユニット回路情報ラッチ101Aから演算ユニット回路情報を読み出し、その演算ユニット回路情報を演算器100へ入力する。演算器100は、入力された演算ユニット回路情報に応じて、コントローラ11から受信したデータに対して演算処理を行う。
[サイクル2]
コントローラ11は、プログラムコードメモリ110のアドレス1番地に記憶されたプログラムコードを読み出す。その読み出したプログラムコードは、繰り返し範囲が“2”、繰り返し回数が“2”と記載されている。
次に、繰り返し範囲“2”、繰り返し回数“2”であるため、コントローラ11は、データパス回路情報メモリ111のアドレス2番地を読み出す。なお、コントローラ11は、サイクル3でアドレス3番地を読み出し、サイクル4でアドレス2番地を読み出し、サイクル5でアドレス3番地を読み出す。コントローラ11は、読み出したデータパス回路情報に応じて、演算ユニット10Aへデータと回路情報ポインタ“1”とを送信して、第3番目のデータ処理を開始する。
コントローラ11はデータ処理ビジー信号“1”を送信し続け、また同時にプログラムコード進捗状況“1”とデータパス回路情報進捗状況“2”とを送信する。コード転送制御部15は、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”によって、プログラムコードおよびデータパス回路情報の転送が一部許可される。
コード転送制御部15が転送するプログラムコードやデータパス回路情報は、実行済みのプログラムコードが記憶されていたプログラムコードメモリ110上の記憶領域(アドレス0番)と、使用済みのデータパス回路情報が記憶されていたデータパス回路情報メモリ111上の記憶領域(アドレス0番、1番)とに記憶される。
なお、演算ユニット回路情報の転送も可能であり、コード転送制御部15は、プログラムコード、データパス回路情報、演算ユニット回路情報の優先度順に、転送を行う。
コード転送制御部15は、プログラムコードをプログラムコードメモリ110に記憶させるため、コードバッファ13へプログラムコードの先頭アドレス“00”を送信しプログラムコードを転送させ、コードタグ“10000”をコントローラ11へ送信する。コードタグ1が“1”であるため、プログラムコードメモリ110にプログラムコードが記憶される。
なお、このプログラムコードは、サイクル0、1で実行済みのプログラムコードが記憶されていた記憶領域、プログラムコードメモリ110のアドレス0番地に記憶される。
演算ユニット10Aは、コントローラ11から受信した回路情報ポインタ“3”に指定される演算ユニット回路情報ラッチ101Dから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、コントローラ11から受信したデータに対して演算処理を行う。
演算ユニット10Bは、演算ユニット10Aから受信した回路情報ポインタ“0”に指定される演算ユニット回路情報ラッチ101Aから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、演算ユニット10Aから受信したデータに対して演算処理を行う。
[サイクル3]
コントローラ11は、サイクル1で読み出したプログラムコード(繰り返し範囲“2”、繰り返し回数“2”)の実行を継続する。コントローラ11は、データパス回路情報メモリ111のアドレス3番地を読み出す。コントローラ11は、読み出したデータパス回路情報に応じて、演算ユニット10Aへデータと回路情報ポインタ“2”とを送信して、第4番目のデータ処理を開始する。
コントローラ11からコード転送制御部15へ、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”が送信される。コード転送制御部15は、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”によって、プログラムコードおよびデータパス回路情報の転送が一部許可される。なお、演算ユニット回路情報の転送も可能であり、コード転送制御部15は、プログラムコード、データパス回路情報、演算ユニット回路情報の優先度順に、転送を行う。
プログラムコードのサイズは“1”であるため、コード転送制御部15はサイクル2でプログラムコードの転送を完了している。
コード転送制御部15は、データパス回路情報をデータパス回路情報メモリ111に記憶させるため、コードバッファ13からデータパス回路情報を転送させ、コードタグ“01000”をコントローラ11へ送信する。コードタグ1が“0”、コードタグ2が“1”であるため、データパス回路情報メモリ111にデータパス回路情報が記憶される。
なお、このデータパス回路情報は、サイクル0で実行済みのデータパス回路情報が記憶されていた記憶領域、データパス回路情報メモリ111のアドレス0番地に記憶される。
演算ユニット10Aは、コントローラ11から受信した回路情報ポインタ“1”に指定される演算ユニット回路情報ラッチ101Bから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、コントローラ11から受信したデータに対して演算処理を行う。
演算ユニット10Bは、演算ユニット10Aから受信した回路情報ポインタ“3”に指定される演算ユニット回路情報ラッチ101Dから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、演算ユニット10Aから受信したデータに対して演算処理を行う。
演算ユニット10Cは、演算ユニット10Bから受信した回路情報ポインタ“0”に指定される演算ユニット回路情報ラッチ101Aから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、演算ユニット10Bから受信したデータに対して演算処理を行う。
[サイクル4]
コントローラ11は、サイクル1で読み出したプログラムコード(繰り返し範囲“2”、繰り返し回数“2”)の実行を継続する。コントローラ11は、データパス回路情報メモリ111のアドレス2番地を読み出す。コントローラ11は、読み出したデータパス回路情報に応じて、演算ユニット10Aへデータと回路情報ポインタ“1”とを送信して、第5番目のデータ処理を開始する。
コントローラ11からコード転送制御部15へ、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”が送信される。コード転送制御部15は、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”によって、プログラムコードおよびデータパス回路情報の転送が一部許可される。なお、演算ユニット回路情報の転送も可能であり、コード転送制御部15は、プログラムコード、データパス回路情報、演算ユニット回路情報の優先度順に、転送を行う。
プログラムコードのサイズは“1”であるため、コード転送制御部15はサイクル2でプログラムコードの転送を完了している。データパス回路情報のサイズは“2”であるため、コード転送制御部15はまだデータパス回路情報の転送を完了していない。
コード転送制御部15は、データパス回路情報をデータパス回路情報メモリ111に記憶させるため、コードバッファ13からデータパス回路情報を転送させ、コードタグ“01001”をコントローラ11へ送信する。コードタグ1が“0”、コードタグ2が“1”であるため、データパス回路情報メモリ111にデータパス回路情報が記憶される。
なお、このデータパス回路情報は、サイクル1で実行済みのデータパス回路情報が記憶されていた記憶領域、データパス回路情報メモリ111のアドレス1番地に記憶される。
演算ユニット10Aは、コントローラ11から受信した回路情報ポインタ“2”に指定される演算ユニット回路情報ラッチ101Cから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、コントローラ11から受信したデータに対して演算処理を行う。
演算ユニット10Bは、演算ユニット10Aから受信した回路情報ポインタ“1”に指定される演算ユニット回路情報ラッチ101Bから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、演算ユニット10Aから受信したデータに対して演算処理を行う。
演算ユニット10Cは、演算ユニット10Bから受信した回路情報ポインタ“3”に指定される演算ユニット回路情報ラッチ101Dから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、演算ユニット10Bから受信したデータに対して演算処理を行う。
演算ユニット10Dは、演算ユニット10Cから受信した回路情報ポインタ“0”に指定される演算ユニット回路情報ラッチ101Aから演算ユニット回路情報を読み出し、その演算ユニット回路情報に応じて、演算ユニット10Cから受信したデータに対して演算処理を行う。
[サイクル5]
コントローラ11は、サイクル1で読み出したプログラムコード(繰り返し範囲“2”、繰り返し回数“2”)の実行を継続する。コントローラ11は、データパス回路情報メモリ111のアドレス3番地を読み出す。コントローラ11は、読み出したデータパス回路情報に応じて、演算ユニット10Aへデータと回路情報ポインタ“2”とを送信して、第6番目のデータ処理を開始する。
コントローラ11からコード転送制御部15へ、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”が送信される。コード転送制御部15は、データ処理ビジー信号“1”、プログラムコード進捗状況“1”、データパス回路情報進捗状況“2”によって、プログラムコードおよびデータパス回路情報の転送が一部許可される。しかし、実行済みのプログラムコードが記憶されていたプログラムコードメモリ110上の記憶領域(アドレス0番)と、使用済みのデータパス回路情報が記憶されていたデータパス回路情報メモリ111上の記憶領域(アドレス0番、1番)とは、すでに新たなプログラムコードとデータパス回路情報とが記憶されている。そのため、コード転送制御部15は、プログラムコードおよびデータパス回路情報の転送を行えない。以後、コード転送制御部15は、演算ユニット回路情報の転送を行う。
コード転送制御部15は、演算ユニット回路情報を演算ユニット10Cに記憶させるため、コードバッファ13から演算ユニット回路情報を転送させ、コードタグ“00010”をコントローラ11へ送信する。コードタグ1、2が“0”であるため、プログラムコードメモリ110、データパス回路情報メモリ111に演算ユニット回路情報は記憶されない。コードタグ3が“0”、コードタグ4が“1”、コードタグ5が“0”であるため、演算ユニット10Cに演算ユニット回路情報が記憶される。なお、演算ユニット回路情報は、3サイクル後に、演算ユニット10Cに入力され、演算ユニット回路情報ラッチ101Eに記憶される。
演算ユニット10Eは、サイクル0でコード転送制御部15によって転送された演算ユニット回路情報とコードタグ“00000”とを受信し、その演算ユニット回路情報を演算ユニット回路情報ラッチ101Eに記憶する。演算ユニット10Dは、サイクル1でコード転送制御部15によって転送された演算ユニット回路情報とコードタグ“00001”とを受信し、その演算ユニット回路情報を演算ユニット回路情報ラッチ101Eに記憶する。
演算ユニット10Aは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Bは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Cは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Dは、回路情報ポインタ“3”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Eは、回路情報ポインタ“0”に指定される演算ユニット回路情報に応じて、演算処理を行う。
[サイクル6]
コントローラ11は、プログラムコードメモリ110のアドレス2番地に記憶されたプログラムコードを読み出す。このプログラムコードの繰り返し範囲と繰り返し回数とが共に“0”なので、コントローラ11は、待機状態となる。ここでは、説明の簡単のため、コントローラ11が待機状態となるものとしたが、コントローラ11は、プログラムコードメモリ110に記憶されたその他のプログラムコードやプログラムコードメモリ110にサイクル2で書き込まれたプログラムコードを実行することができる。
コード転送制御部15は、演算ユニット回路情報を演算ユニット10Bに記憶させるため、コードバッファ13から演算ユニット回路情報を転送させ、コードタグ“00011”をコントローラ11へ送信する。この演算ユニット回路情報は、2サイクル後に、演算回路ユニット10Bに入力され、演算ユニット回路情報ラッチ101Eに記憶される。
演算ユニット10Aは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Bは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Cは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Dは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Eは、回路情報ポインタ“3”に指定される演算ユニット回路情報に応じて、演算処理を行う。
[サイクル7]
コード転送制御部15は、演算ユニット回路情報を演算ユニット10Aに記憶させるため、コードバッファ13から演算ユニット回路情報を転送させ、コードタグ“00100”をコントローラ11へ送信する。この演算ユニット回路情報は、1サイクル後に、演算回路ユニット10Aに入力され、演算ユニット回路情報ラッチ101Eに記憶される。
演算ユニット10Bは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Cは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Dは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Eは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。
[サイクル8]
演算ユニット10Cは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Dは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Eは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。
演算ユニット10Cは、サイクル5でコード転送制御部15によって転送された演算ユニット回路情報とコードタグ“00010”とを受信し、その演算ユニット回路情報を演算ユニット回路情報ラッチ101Eに記憶する。
演算ユニット10Bは、サイクル6でコード転送制御部15によって転送された演算ユニット回路情報とコードタグ“00011”とを受信し、その演算ユニット回路情報を演算ユニット回路情報ラッチ101Eに記憶する。
演算ユニット10Aは、サイクル7でコード転送制御部15によって転送された演算ユニット回路情報とコードタグ“00100”とを受信し、その演算ユニット回路情報を演算ユニット回路情報ラッチ101Eに記憶する。
[サイクル9]
演算ユニット10Dは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。演算ユニット10Eは、回路情報ポインタ“1”に指定される演算ユニット回路情報に応じて、演算処理を行う。
[サイクル10]
演算ユニット10Eは、回路情報ポインタ“2”に指定される演算ユニット回路情報に応じて、演算処理を行う。
このように、本実施形態に係る半導体装置1によれば、データパス回路情報メモリ111に記憶された回路情報ポインタに従って、各演算ユニット10A〜10Eの演算ユニット回路情報ラッチ101A〜101Hに記憶された演算ユニット回路情報が読み出される。各演算ユニット10A〜10Eは、読み出した演算ユニット回路情報で指定される演算処理を行う。
演算ユニット回路情報ラッチ101A〜101Hからは、サイクルごとに演算の種類に応じて、様々なアドレス上の演算ユニット回路情報が読み出される。プログラムコードメモリ110からは数サイクルごとにプログラムコードがアドレス順に逐次読み出される。データパス回路情報メモリ111からは、プログラムコードメモリ110から読み出されたプログラムコードに応じてサイクルごとにデータパス回路情報が逐次読み出される。
プログラムコードはアドレス順に読み出されるため、実行済みのプログラムコードが記憶されている記憶領域に、データ処理中に、新たにプログラムコードを書き込むことができる。
データパス回路情報はプログラムコードに応じて読み出されるが、同一のデータパス回路情報が複数のプログラムコードによって読み出されることはない。即ち、1つのプログラムコードの実行が終了したあと、そのプログラムコードによって使用されたデータパス回路情報は、他のプログラムコードによって使用されることはない。そのため、実行済みのプログラムコードで使用されたデータパス回路情報が記憶されている記憶領域に、データ処理中に、新たにプログラムコードやデータパス回路情報を書き込むことができる。
そのため、次のデータ処理に移行する際にプログラムコードやデータパス回路情報の書き込みは必要なく、演算ユニット10A〜10Hの待機時間を短縮することができ、半導体装置1の処理速度を向上させることができる。
また、実行済みのプログラムコードや使用済みのデータパス回路情報が記憶されている記憶領域を有効に活用するため、プログラムコードメモリ110とデータパス回路情報メモリ111との記憶容量を小さく設計することができる。
演算ユニット回路情報はサイクルごとに様々なアドレスから読み出されるため、未使用の演算ユニット回路情報と使用済みの演算ユニット回路情報とを判定することが困難である。そのため、演算ユニット回路情報ラッチ101A〜101Hは、1回のデータ処理に使用される演算ユニット回路情報の容量の2倍の記憶容量を有するように設計される。
第1番目のデータ処理を行っている際には、演算ユニット回路情報ラッチ101A〜101Dに記憶された演算ユニット回路情報が使用される。そして、第1番目のデータ処理中に、第2番目のデータ処理で使用される演算ユニット回路情報が演算ユニット回路情報ラッチ101E〜101Hに記憶される。そのため、次のデータ処理に移行する前に、次のデータ処理で使用される演算ユニット回路情報を、演算ユニット回路情報ラッチに書き込むことができるため、次のデータ処理に移行する際に演算ユニット回路情報の書き込みは必要なく、演算ユニット10A〜10Hの待機時間を短縮することができ、半導体装置1の処理速度を向上させることができる。
また、演算の種類に応じてサイクルごとに様々なアドレス上から読み出される演算ユニット回路情報を記憶するための演算ユニット回路情報ラッチのみが、2回分のデータ処理に使用される演算ユニット回路情報を記憶するための記憶容量を備える。そのため、プログラムコードメモリ110、演算ユニット回路情報メモリ111、および演算ユニット回路情報ラッチ101A〜101Hの全体の記憶容量を小さく設計することができる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。