以下、本発明の各実施の形態について、図面を参照しつつ説明する。なお、開示はあくまでも一例にすぎず、当業者において、発明の主旨を保っての適宜変更について容易に想到し得るものについては、当然に本発明の範囲に含有されるものである。また、図面は説明をより明確にするため、実際の態様に比べ、各部の幅、厚さ、形状等について模式的に表される場合があるが、あくまで一例であって、本発明の解釈を限定するものではない。
また、本明細書と各図において、既出の図に関して前述したものと同様の要素には、同一の符号を付して、詳細な説明を適宜省略することがある。
(実施の形態1)
実施の形態1においては、アプリケーションを構成する複数のタスクを、ネットワークに接続された複数の半導体装置に分散し、それぞれの半導体装置において割り当てられたタスクがリアルタイムに実行される。これにより、パフォーマンス低下を抑制することが可能となる。理解を容易にするために、複数のタスクを分散せずに、1つの半導体装置において実行する場合を比較例として、先ず説明する。
<比較例>
アプリケーションとしては、ネットワークを介して受信したフレームに所定の演算を行い、所定の演算の行われたフレームを、ネットワークを介して送信するプログラムを例として説明する。行われる所定の演算は、第1演算と第2演算の2種類である。第1演算は、2つのデータ間で演算を行うフィルタ演算とフィルタ演算の結果に対して行う出力演算により構成されている。また、第2演算は、データに対して行われる入力演算と2つの入力演算結果間で演算を行うフィルタ演算である。
<<アプリケーションの動作およびタイミング制約>>
1つの半導体装置によって、このアプリケーションを実行する場合の動作を、図61を用いて説明する。図61において、紙面上側には、アプリケーションを実行するときの動作タイミング図が示されている。また、図61の紙面下側には、このアプリケーションを実行する際に満たされるべきタイミング制約を示している。
半導体装置は、図61の紙面上側において、送受信開始イベントの最小時間Minと最大時間Maxとの間のタイミングで、フレームの送受信を開始し、送受信終了イベントの最小時間Minと最大時間Maxとの間のタイミングで、フレームの送受信が完了する。図61において、左側に示した送受信開始イベントと送受信終了イベントの間で、フレーム1(同図では、フレームと記載)が、半導体装置により受信され、半導体装置内の通信バッファ0に格納される。通信バッファに格納されたデータは、上記した第1演算が行われて、SYNC0イベントに同期して半導体装置の外部に出力される。一方、SYNC1イベントに同期して半導体装置に入力されたデータは、上記した第2演算が行われ、通信バッファ1に格納される。通信バッファ1に格納されたデータは、右側に示した送受信開始イベントと送受信終了イベントの間で、フレーム2(同図では、フレームと記載)に変換されて送信される。送信されたフレーム2は、特に制限されないが、ネットワークに接続された外部装置で受信され、フレーム1と同様に、所定の演算が行われる。
このアプリケーションに許容される最小サイクルタイムは、図61に示すように、送受信終了イベントの最大時間Maxと送受信開始イベントの最小時間Minとの間の期間となる。半導体装置は、この最小サイクルタイムの間に、アプリケーションを構成する複数のタスクを実行する。図61では、アプリケーションを構成するタスクが、3個の場合が示されている。すなわち、送受信終了イベントにより起動される第1タスクと、SYNC1イベントにより起動される第2タスクと、第1タスクと同様に送受信終了イベントにより起動される第3タスクである。ここで、第1タスクは、通信バッファ0に格納されたデータを演算バッファ0へコピーし、所定の演算(フィルタ演算+出力演算)を行うタスクである。第2タスクは、半導体装置に入力されたデータに対して所定の演算(入力演算+フィルタ演算)を行い、通信バッファ1へコピーするタスクである。また、第3タスクは、第1タスクが起動されてから、第2タスクが終了するまでの間に、送受信開始イベントが発生しないことと、送受信終了イベントが発生しないことを監視するタスクである。
アプリケーションを構成する第1~第3タスクには、タイミング制約が存在する。ここでは、第1および第2タスクのタイミング制約1および2についてのみ説明する。
第1タスクは、送受信終了イベントからSYNC0イベントの間の期間に、タスクの実行を終了しておくことが要求される。すなわち、第1タスクの実行時間は、送受信終了イベントからSYNC0イベントの間の期間と同じか、短いことが要求される。SYNC0イベントのタイミングに注目すると、このSYNC0イベントが発生するまでに、第1タスクの出力が有効になっていることが必要とされる。同様に、第2タスクの実行時間は、SYNC1イベントと送受信開始イベントとの間の時間と同じか、短くすることが要求される。
第1タスクが、例えばSYNC0イベントまでに終了していないと、半導体装置の外部に接続された装置は、SYNC0イベントに同期して半導体装置により出力演算されたデータを受け取ることができず、誤動作してしまう。同様に、第2タスクが送受信開始イベントまでに終了していない場合には、半導体装置にネットワーク接続された外部装置は、半導体装置により入力演算されたデータを受け取ることができず、誤動作してしまう。すなわち、第1タスクには、SYNC0イベントが発生するまでに、処理を完了させておくと言うタイミング制約1が存在する。同様に、第2タスクは、送受信開始イベントの発生までに、処理を完了させておくと言うタイミング制約2が存在する。
<<比較例の構成>>
比較例に係わる半導体装置の概略的な構成が、図62に示されている。図62には、比較例の半導体装置450の概略的な構成と、上記した第1演算を実行するときのデータの流れが示されている。
ネットワーク459を介して、フレームが、データ送信装置456から半導体装置450へ送信される。フレームは、複数の送信ブロック(同図では、送信ブロック0~送信ブロック4)により構成されている。送信バッファ458に格納された送信ブロック0~4は、通信装置457によって、フレームとしてネットワーク459へ送信される。
半導体装置450は、通信装置451、スケジュール装置452、2個のプロセッサCPU1、CPU2、受信バッファ453、演算バッファ454および出力装置455を備えている。通信装置451は、ネットワーク459を介して供給されたフレームを受信する。通信装置451はDMAコントローラを備えており、このDMAコントローラによって、通信装置451からのフレームを受信ブロック0~受信ブロック4として、受信バッファ453へ転送する。
プロセッサCPU1は、受信ブロック0と受信ブロック1との間でフィルタ演算を行い、受信ブロック1と受信ブロック2との間でフィルタ演算を行う。同様に、プロセッサCPU2は、受信ブロック2と受信ブロック3との間でフィルタ演算を行い、受信ブロック3と受信ブロック4との間でフィルタ演算を行う。プロセッサCPU1、CPU2によって行われたフィルタ演算の結果は、演算バッファ454にブロックf01、f12、f23およびf34として格納される。プロセッサCPU1およびCPU2は、フィルタ演算の結果であるブロックf01、f12、f23およびf34に対して出力演算の処理を行い、出力装置455を介して出力する。
<<半導体装置450の動作>>
スケジュール装置452が、プロセッサCPU1およびCPU2に、上記した第1タスクを割り当てて、プロセッサに第1演算を実行させる。図63は、半導体装置450の動作概要を示す図である。図63において、紙面左側には半導体装置450の動作を示すフローチャート図が示されている。また、紙面右側には、第1演算によるデータ量の変化が示されている。ここでは、受信ブロック0~受信ブロック4のサイズが1Kバイト(1024Byte)の場合を例として説明する。
受信バッファ453にフレームが受信されると、スケジュール装置452はステップSCP0で、フレーム受信終了イベントを検出し、プロセッサCPU1およびCPU2を動作させる。このときには、受信バッファ453には、受信ブロック0~受信ブロック4が格納されている。ステップSCP1において、プロセッサCPU1、CPU2は、フィルタ演算を行う。すなわち、連続する2つの受信ブロックの受信データを入力として、プロセッサCPU1、CPU2はフィルタ演算を実施する。このとき、プロセッサCPU1、CPU2の入力データは、2つの受信ブロック分のサイズ2Kバイトとなる。フィルタ演算を実施することにより、得られるフィルタ演算の結果である出力データのサイズは、1Kバイトである。
次に、ステップSCP2において、プロセッサCPU1、CPU2は、出力演算を行う。すなわち、フィルタ演算の結果である出力データを入力データとして、プロセッサCPU1、CPU2は出力演算を行う。出力演算の結果である出力演算の出力データのサイズは、1Kバイトである。
ステップSCP3において、SYNC(シンク)0イベントまでに、実行すべき演算が終了しているか否かを、スケジュール装置452は判定し、実行すべき演算が終了していれば、出力データを有効化するように、出力装置455を制御する。一方、実行すべき演算が終了していない場合には、ステップSCP1に戻り、実行すべき演算が終了するまで、ステップSCP1~SCP3を繰り返す。
ステップSCP0のときには、受信ブロック0~受信ブロック4の受信データが、全て受信バッファ453に格納されているため、時間的に平行して4つの第1演算を実行させることが可能である。すなわち、4つの第1タスクを、時間的に並列に実行させることが可能である。しかしながら、半導体装置452には、並列的に実行させることが可能な4つのタスクよりも少ない2つのプロセッサCPU1およびCPU2しか設けられていない。その結果として、第1演算を上記したタイミング制約1を満たすように実行することが困難となる。
図64は、半導体装置450によって、受信ブロック0~受信ブロック4の受信データに対して第1演算を実施した場合のタイミング図である。同図は、図61の紙面上側に示した動作タイミング図と類似しているが、図64には、プロセッサCPU1およびCPU2の動作が詳しく示されている。同図では、受信バッファ453が、4つのバンクウェイ453_0~453_3に分割され、演算バッファ454も、4つのバンクウェイ454_0~454_3に分割されている。
<<<タイミング図における符号説明>>>
ここで、図64で用いているプロセッサに付されている符号の規則を説明しておく。後で説明する図面においても、ここで説明する規則に従って、符号が付されている。
プロセッサの符号の後の()内に記載されている符号において、左側に記載されている符号fまたはfgは、プロセッサが行う演算を示している。すなわち、符号fは、フィルタ演算を示し、符号fgは、出力演算を示している。また、符号fまたはfgの右隣の2つの数字は、対象のブロックの番号を示している。さらに符号-の右隣の符号Rは、読み出し動作であることを示し、符号Wは、演算と演算結果の書き込み動作を示している。
また、図64では、プロセッサCPU1およびCPU2の動作と、動作により生じる読み出しおよび書き込みの対象となるバンクウェイとが、同じ行になるように、描かれている。
例えば、符号CPU1(f01-R)は、プロセッサCPU1が、フィルタ演算用に、受信バッファ453のバンクウェイ453_0、453_1から受信ブロック0と受信ブロック1を読み出す動作を実施していることを示している。また、CPU1(f01-W)は、プロセッサCPU1が、受信ブロック0と受信ブロック1との間で、フィルタ演算を実施し、そのフィルタ演算の結果を、演算バッファ454のバンクウェイ454_0に書き込む動作を実施していることを示している。
また、符号CPU1(fg01-R)は、プロセッサCPU1が、出力演算用に、演算バッファ454のバンクウェイ454_0から受信ブロック0と受信ブロック1との間で実施されたフィルタ演算の結果を読み出す動作を実施していることを示している。さらに、CPU1(fg01-W)は、プロセッサCPU1が、受信ブロック0と受信ブロック1との間で実施したフィルタ演算の結果に対して出力演算を実施し、演算バッファ454_0のバンクウェイ454_2に書き込む動作を実施していることを示している。
比較例においては、図64に示すように、期間T1およびT2において、プロセッサCPU1およびCPU2が、受信ブロック0、1および受信ブロック2、3を読み出して、フィルタ演算を実行し、期間T3において、フィルタ演算結果の読み出し、出力演算および演算バッファ454へ書き込むことが可能である。すなわち、プロセッサCPU1およびCPU2のそれぞれに、第1タスクを割り当てて、実行させることで、フレームにおける先頭ブロックに対するフィルタ演算と出力演算を実行させることが可能である。これにより、SYNC0イベントが発生するまでに、2つの出力演算の結果を得ることが可能である。しかしながら、先頭ブロックに対するプロセッサCPU1およびCPU2のフィルタ演算および出力演算が、終了するまで、フレームにおける残りのブロックに基づいたフィルタ演算および出力演算は、実行されず、残りのブロックに対する演算は、期間T4から開始することになる。その結果、SYNCイベントが発生するまでに、フレームを構成する受信ブロックの演算が間に合わず、タイミング制約1の違反が生じることになる。タイミング制約1の違反が生じないようにするためには、例えばSYNC0イベントの発生を遅くすることが考えられる。SYNC0イベントの発生を遅くすると、システム全体のパフォーマンスを低下させることになる。
<半導体装置およびシステム>
図1は、実施の形態1に係わる半導体装置およびそれを用いたシステムの構成を示すブロック図である。
同図において、1はネットワークシステムを示している。ネットワークシステム1は、データを送信するデータ送信装置と、複数の半導体装置と、データ送信装置と複数の半導体装置との間を接続するネットワーク線路とを備えている。図面が複雑になるのを避けるために、同図には、ネットワークシステムがデータ送信装置3と3つの半導体装置2_1~2_3を備えている場合が、例示されている。勿論、ネットワークシステムが備える半導体装置およびデータ送信装置の数は、これに限定されるものではない。
また、特に制限されないが、実施の形態1においては、データ送信装置3、半導体装置2_1~2_3間は、ディジーチェーン(daisy chain)接続されている。すなわち、データ送信装置3と半導体装置2_1(第1半導体装置)との間は、ネットワーク線路4_1によって接続され、半導体装置2_1と半導体装置2_2(第3半導体装置)との間は、ネットワーク線路4_2によって接続され、半導体装置2_2と半導体装置2_3(第2半導体装置)との間は、ネットワーク線路4_3によって接続されている。
データ送信装置3からネットワーク線路4_1に送信された送信データには、受信すべき半導体装置を特定する識別情報が含まれている。半導体装置2_1~2_3のそれぞれは、送信データに含まれる識別情報が、自局を特定する識別情報と一致する場合、送信データを受信する。一方、送信データに含まれる識別情報が、自局の識別情報と一致しない場合(不一致の場合)、供給された送信データを次段の半導体装置へネットワーク線路を介して送信する。例えば、送信データが、半導体装置2_1を特定する識別情報を含んでいた場合、この送信データは、半導体装置2_1によって受信される。これに対して、送信データに含まれる識別情報が、半導体装置2_1の識別情報と一致しない場合、半導体装置2_1は、ネットワーク線路4_2を介して、半導体装置2_2および2_3に向けて、供給された送信データを送信する。このようにして、送信データは、それに含まれる識別情報によって特定される半導体装置によって受信されることになる。なお、データ送信装置3は、全ての半導体装置2_1~2_3を特定するような識別情報を、送信データに含めることにより、全ての半導体装置2_1~2_3は、同一の送信データを受信することができるようになっている。
半導体装置2_1~2_3が、データ送信装置3あるいは他の半導体装置にデータを送信する場合も、半導体装置2_1~2_3は、送信するデータに、受信する半導体装置あるいはデータ送信装置3を特定する識別情報を含めて、送信する。これにより、半導体装置は、データ送信装置3または他の半導体装置にデータを送信することが可能である。この場合、データを送信する半導体装置は、送信するデータに自局を特定する識別情報も含めて、送信する。これにより、データを受信したデータ送信装置3または他の半導体装置は、受信したデータを送信した半導体装置を特定することが可能となっている。
実施の形態1では、半導体装置2_1~2_3およびデータ送信装置3をディジーチェーン接続する場合を説明するが、これに限定されるものではない。すなわち、1つのネットワーク線路にデータ送信装置3と半導体装置2_1~2_3とが接続されたバス状のネットワーク接続あるいはリング状のネットワーク接続であってもよい。あるいはデータ送信装置3を起点として放射状にネットワーク線路を設け、それぞれのネットワーク線路に半導体装置を接続するようなネットワーク接続であってもよい。
実施の形態1において、半導体装置2_1~2_3は、類似した構成となっている。そのため、ここでは、半導体装置2_1を代表として、半導体装置2_1~2_3の全体的な構成を説明し、後で相違点を説明する。
半導体装置2_1は、通信装置5_1と、スケジュール装置10(ID1)と、2つのプロセッサCPU1、CPU2と、アドレス変換回路13と、バススイッチ14と、モニタ回路(以下、メモリアクセスモニタ回路とも称する)15と、メモリ17、18とを備えている。通信装置5_1は、イーサネットPHY回路(Ethernet PHY)6_1、6_2と、イーサネットスイッチ(Ethernet Switch)7と、イーサネットMAC(Ethernet MAC)8と、タイマ9とを備えている。
イーサネットPHY回路6_1は、ネットワーク線路4_1とイーサネットスイッチ7との間に接続されたインタフェース回路であり、イーサネットPHY回路6_2は、ネットワーク線路4_2とイーサネットスイッチ7との間に接続されたインタフェース回路である。イーサネットスイッチ7は、イーサネットPHY回路6_1とイーサネットMAC8との間、イーサネットPHY回路6_2とイーサネットMAC8との間またはイーサネットPHY回路6_1と6_2との間を選択的に接続するスイッチ回路である。イーサネットMAC8には、半導体装置2_1を特定する識別情報が、特に制限されないがスケジュール装置10(ID1)から供給される。ここで、符号ID1は、半導体装置2_1を特定する識別情報(ID)を示している。
イーサネットMAC8には、イーサネットスイッチ7を介してイーサネットPHY回路6_1および6_2からデータが供給され、供給されたデータに識別情報(ID1)と一致する識別情報が含まれている場合、供給されたデータをスケジュール装置10(ID)に供給する。また、供給されたデータに含まれる識別情報が、識別情報(ID1)と不一致の場合、イーサネットスイッチ7によって、イーサネットPHY回路6_1と6_2間を接続する。これにより、ネットワーク線路4_1または4_2を介して半導体装置2_1に供給されたデータが、識別情報(ID1)と一致する識別情報を備えていた場合、供給されたデータは、スケジュール装置10(ID1)に供給される。一方、供給されたデータに含まれる識別情報が識別情報(ID1)と不一致の場合、ネットワーク線路4_1から供給されたデータは、ネットワーク線路4_2へ送信され、ネットワーク線路4_2から供給されたデータは、ネットワーク線路4_1へ送信されることになる。
また、イーサネットMAC8は、スケジュール装置10(ID1)からのデータを、ネットワーク線路4_1または4_2に送信する。この場合、特に制限されないが、スケジュール装置10(ID1)からは、識別情報(ID1)が付加されたデータが供給される。イーサネットMAC8は、データ送信装置3に向けてデータを送信する場合、送信するデータがイーサネットPHY回路6_1に供給されるように、イーサネットスイッチ7を制御し、半導体装置2_2または2_3に向けてデータを送信する場合、送信するデータがイーサネットPHY回路6_2に供給されるように、イーサネットスイッチ7を制御する。
さらに、イーサネットMAC8は、マスタとして機能するDMAコントローラを備えている。ネットワーク線路4_1または4_2からのデータをスケジュール装置10(ID1)へ送信する場合およびデータをネットワーク線路4_1または4_2へ送信する場合、内蔵のDMAコントローラによって、データの転送を行う。半導体装置2_1は、マスタとして2つのプロセッサCPU1、CPU2と、上記したDMAコントローラとを備えていることになる。以下の説明において、マスタを区別する場合、プロセッサCPU1およびCPU2は、第1マスタと称し、DMAコントローラは、第2マスタと称する。
タイマ9は、イーサネットMAC8に接続され、半導体装置2_1~2_3およびデータ送信装置3との間で時刻が同一となるように制御する回路である。半導体装置2_1~2_3およびデータ送信装置3間で同期した時刻情報が、タイマ9からスケジュール装置10(ID1)に供給され、半導体装置2_1~2_3のそれぞれにおけるスケジュール装置間で時刻が同一となっている。
スケジュール装置10(ID1)は、タスク入出力データ制御回路11およびタスク入出力データ制御レジスタ12を備える。スケジュール制御回路10(ID1)は、イーサネットMAC8、プロセッサCPU1、CPU2、アドレス変換回路13およびモニタ回路15に接続されている。スケジュール制御回路10(ID1)は、プロセッサCPU1およびCPU2にタスクを割り当て、プロセッサCPU1、CPU2が割り当てられたタスクを実行するように制御する。また、スケジュール制御回路10(ID1)は、イーサネットMAC8内のDMAコントローラによるデータの転送を制御する。入出力データ制御回路11およびタスク入出力データ制御レジスタ12は後で説明するので、ここでは説明しない。
アドレス変換回路13は、プロセッサCPU1、CPU2およびタスク入出力データ制御回路11からのアドレス信号Ad_1、Ad_2、Ad_Dを、スケジュール装置10(ID1)からの変換情報CNVに基づいて変換し、変換後アドレス信号Add_1、Add_2、Add_Dをバススイッチ14へ出力する。
バススイッチ14は、3マスタ/8スレーブのバススイッチである。バススイッチ14は、3つのマスタと8つのスレーブとの間の接続を、スケジュール装置10(ID1)からのバス制御情報BSCに従って変更する。ここでの3つのマスタは、プロセッサCPU1、CPU2およびイーサネットMAC8内のDMAコントローラが該当し、8つのスレーブは、メモリ17および18を構成する8つのメモリバンクウェイが該当する。
メモリ17は、4つのメモリバンクウェイ17_0~17_3によって構成され、メモリ18も、4つのメモリバンクウェイ18_0~18_3によって構成されている。すなわち、メモリ17のアドレス領域が、4つのアドレス領域に分割され、分割された4つのアドレス領域が、メモリバンクウェイ17_0~17_3となっている。メモリ18についても同様に、4つのアドレス領域に分割され、分割されたアドレス領域が、メモリバンクウェイ18_0~18_3となっている。以降、メモリバンクウェイは、バンクウェイとも称する。
バススイッチ14は、バス制御情報BSCに従って、例えばプロセッサCPU1からの変換後アドレス信号Add_1を、バンクウェイ18_0に供給し、プロセッサCPU2からの変換後アドレス信号Add_2を、バンクウェイ18_1に供給し、DMAコントローラからの変換後アドレス信号Add_Dを、バンクウェイ17_0に供給する。これらのバンクウェイ18_0、18_1および17_0に対して、プロセッサCPU1、CPU2およびDMAコントローラから読み出しまたは書き込みが行われる。スケジュール装置10(ID1)は、バス制御情報BSCによって、マスタに対応するスレーブを任意に切り替えることが可能となっている。
モニタ回路15は、バススイッチ14からバンクウェイ17_0~17_3および18_0~18_3に供給される変換後アドレス信号Add_1、Add_2、Add_Dを監視し、監視結果をスケジュール装置10(ID1)に供給する。本明細書では、変換後アドレス信号は、特定のアドレスを指定するためのアドレス信号と、アドレス信号により特定されたアドレスに対して読み出しまたは書き込みを指示する制御信号(転送制御情報)の両方を意味している。
半導体装置2_2は、スケジュール装置10(ID2)が、半導体装置2_2を特定する識別情報として、半導体装置2_1とは異なる識別情報(ID2)を備えている。これにより、半導体装置2_2における通信装置5_2は、識別情報(ID2)を含むデータを、ネットワーク線路からスケジュール装置10(ID2)へ出力する。また、通信装置10(ID2)がネットワーク線路へ送信するデータには、識別情報(ID2)が含まれることになる。同様に、半導体装置2_3は、スケジュール装置10(ID3)が、半導体装置2_3を特定する識別情報として、半導体装置2_1、2_2とは異なる識別情報(ID3)を備えている。これにより、半導体装置2_3における通信装置5_3は、ネットワーク線路から識別情報(ID3)を含むデータを、スケジュール装置10(ID3)へ出力する。また、通信装置10(ID3)がネットワーク線路へ送信するデータには、識別情報(ID3)が含まれることになる。
<<動作概要>>
比較例で説明したのと同様に、送信ブロック0~4に対して演算を行う場合を例にして、実施の形態1に係わる半導体装置2_1~2_3およびネットワークシステム1の動作の概要を説明する。図2は、実施の形態1に係わる半導体装置およびネットワークシステムにおけるデータの流れを示す図である。また、図3および図4は、実施の形態1に係わる半導体装置の動作を示すフローチャート図である。ここで、図3(A)、(B)および(C)は、半導体装置2_1および2_3の動作を示し、図4(A)、(B)および(C)は、半導体装置2_2および2_3の動作を示している。
データ送信装置3は、図2に示しているように、通信装置3_1と送信バッファ3_2とを備えている。送信バッファ3_2には、図62で示した送信バッファ458と同様に、送信ブロック0~4が格納されており、通信装置3_1によって、ネットワーク線路4_1へ送信されるものとする。
半導体装置2_1、2_2の両方が、データ送信装置3から送信された送信ブロック0~4を受信する。半導体装置2_1、2_2においては、メモリ17が受信バッファとして用いられ、メモリ18が送信バッファあるいは演算バッファとして用いられる。半導体装置2_1においては、受信された送信ブロック0~4を、通信装置5_1に内蔵されているDMAコントローラが、メモリ17に受信ブロック0~4として転送し、受信バッファ17に格納する。同様に、半導体装置2_2においても、受信された送信ブロック0~4を、通信装置5_1に内蔵されているDMAコントローラが、メモリ17に受信ブロック0~4として転送し、受信バッファ17に格納する。
半導体装置2_1において、スケジュール装置10(ID1)は、受信ブロック0と1の間でフィルタ演算Aを実行するタスク(フィルタ演算A用タスク)をプロセッサCPU1に割り当て、受信ブロック2と3との間でフィルタ演算Aを実行するフィルタ演算A用タスクをプロセッサCPU2に割り当てるように、プロセッサCPU1、CPU2を制御する。これに対して、半導体装置2_2において、スケジュール装置10(ID2)は、受信ブロック1と2の間でフィルタ演算Bを実行するタスク(フィルタ演算B用タスク)をプロセッサCPU1に割り当て、受信ブロック3と4との間でフィルタ演算Bを実行するフィルタ演算B用タスクをプロセッサCPU2に割り当てるように、プロセッサCPU1、CPU2を制御する。
半導体装置2_1および2_2において、モニタ回路15によって、メモリ17への受信ブロックの書き込みが監視される。演算の動作を開始(図3(A)および図4(A)のステップS1_0_0およびS2_0_0)し、フレームを構成する受信ブロック0~4がメモリ17に書き込まれ、フレーム受信終了イベントが発生するまで、半導体装置2_1および2_2は、ステップS1_0_1およびS2_0_1において待機する。フレーム受信終了イベントが発生すると、半導体装置2_1および2_2において、ステップS1_0_2(図3(A))およびS2_0_2(図4(A))が実行される。すなわち半導体装置2_1、2_2においてタスクが起動させられる。
ステップS1_0_2において、半導体装置2_1におけるプロセッサCPU1、CPU2は、連続する2つの受信ブロックの受信データを入力データとして、フィルタ演算Aを実行し、フィルタ演算結果を、送信バッファであるメモリ18に送信ブロックf01、f02として書き込む。同様に、ステップS2_0_2において、半導体装置2_2におけるプロセッサCPU1、CPU2は、連続する2つの受信ブロックの受信データを入力データとして、フィルタ演算Bを実行し、フィルタ演算結果を、送信バッファであるメモリ18に送信ブロックf12、f34として書き込む。
半導体装置2_1、2_2において、スケジュール装置10(ID1)、10(ID2)は、図3(B)および図4(B)のステップS1_1_0およびS2_1_0において、送信バッファであるメモリ18に格納されているデータの送信を開始する。すなわち、スケジュール装置10(ID1)、10(ID2)は、モニタ回路15によって、プロセッサCPU1、CPU2によるメモリ18への書き込みのアクセスを監視する。監視により、メモリ18に格納されている未送信データのサイズが、所定の閾値(データ量)に達したか否かを判定する。ここでは、所定の閾値は、1フレーム分のデータのサイズとなっている。メモリ18に格納されている未送信データのサイズが、1フレーム分に到達すると、ステップS1_1_1、S2_1_1から、ステップS1_1_2(図3(B))、S2_1_2(図4(B))へ移行する。
半導体装置2_1では、ステップS1_1_2において、通信装置5_1に内蔵されたDMAコントローラが、メモリ18に格納されているフィルタ演算Aの演算結果を、半導体装置2_3へ送信する。同様に、半導体装置2_2では、ステップS2_1_2において、通信装置5_2に内蔵されたDMAコントローラが、メモリ18に格納されているフィルタ演算Bの演算結果を、半導体装置2_3へ送信する。すなわち、半導体装置2_1、2_2のそれぞれにおいて、未送信データが所定の閾値に到達すると、未送信データは自動的に半導体装置2_3へ送信される。この場合、半導体装置2_1および2_2は、送信するデータに、半導体装置2_3を特定する識別情報(ID3)と、送信元である半導体装置2_1、2_2の識別情報(ID1、ID2)含めて、送信する。
半導体装置2_3では、スケジュール装置10(ID3)が、プロセッサCPU1、CPU2に対して、フィルタ演算A、Bの演算結果を入力データとして出力演算Aおよび出力演算Bを行うタスク(出力演算A用タスク、出力演算B用タスク)を割り当てている。
半導体装置2_3においては、ステップS3_1_0(図3(C))、S3_2_0(図4(C))において、処理を開始する。すなわち、スケジュール装置10(ID3)は、モニタ回路15を用いて、受信バッファを構成するメモリ17に対するアクセスを監視する。半導体装置2_1および2_2から半導体装置2_3へ送信された未送信データが、受信バッファを構成するメモリ17に受信ブロックf01、f12、f23およびf34として格納されるのを、モニタ回路15によって、スケジュール装置10(ID3)は監視する。この監視により、1フレーム分の入力データが格納されるまで、半導体装置2_3は、ステップS3_1_1(図3(C))、S3_2_1(図4(C))で待機する。
メモリ17に1フレーム分の入力データが格納されると、半導体装置2_3において、スケジュール装置10(ID3)は、プロセッサCPU1、CPU2に対して、出力演算A用タスクおよび出力演算B用タスクを起動させる。すなわち、スケジュール装置10(ID3)は、プロセッサCPU1に対して、半導体装置2_1から受信した受信ブロックf01、f12に対して出力演算Aを実行させる。また、スケジュール装置10(ID3)は、プロセッサCPU2に対して、半導体装置2_2から受信した受信ブロックf23、f34に対して出力演算Bを実行させる。出力演算AおよびBの演算結果fg01、fg23、fg12およびfg34は、プロセッサCPU1、CPU2によって、送信バッファを構成するメモリ18に書き込まれ、出力装置へ供給される。特に制限されないが、出力装置は、供給された演算結果を、データ送信装置3へ送信する。
半導体装置2_3においては、図3(C)および図4(C)に示すように、ステップS3_1_3、S3_2_3において、SYNC0イベントの発生までに、実行すべき出力演算A、Bが終了しているか否かが判定され、出力演算A、Bが終了していない場合には、ステップS3_1_1、S3_2_1へ戻り、ステップが繰り返される。実行すべき出力演算A、Bが終わっている場合、ステップS3_1_4、S3_2_4において、出力装置が有効化され、出力データが有効とされる。
このように、実施の形態1においては、半導体装置2_1および2_2において、並列的に、フィルタ演算AおよびBが実行され、フィルタ演算結果が、所定の閾値を超えると、半導体装置2_3の識別情報を含めて、自動的に送信される。半導体装置2_3においては、半導体装置2_1、2_2からのフィルタ演算結果が、出力演算を実行するのに必要なサイズだけ受信バッファに格納されると、優先的に出力演算A用タスクおよび出力演算B用タスクが起動される。
すなわち、1つの半導体装置が備えるプロセッサの個数を超えるタスクが、複数の半導体装置に分散して割り当てられる。その結果、プロセッサの個数を超えるタスクを並列的に実行することが可能となり、パフォーマンス低下を抑制することが可能である。
図5は、実施の形態1に係わるネットワークシステムのタイミング図である。図5は、比較例1で説明した図64と類似している。図5では、送信バッファを構成するメモリ18が、図64に示した演算バッファに該当する。実施の形態1においては、図5に示すように、期間T1およびT2におけるフィルタ演算に係わる動作が、半導体装置2_1で実行される。また、期間T4およびT5におけるフィルタ演算に係わる動作が、半導体装置2_2に移行され、半導体装置2_2で実行されることになる。さらに、期間T3およびT6における出力演算に係わる動作が、半導体装置2_3に移行され、半導体装置2_3で実行されることになる。
比較例では、期間T4およびT5で実行されていたフィルタ演算に係わる動作が、半導体装置2_2に移行されるため、半導体装置2_2では、期間T1およびT2において、このフィルタ演算に係わる動作を実行することが可能となる。また、比較例では、期間T3およびT6において実行されていた出力演算に係わる動作が、半導体装置2_3に移行されるため、半導体装置2_3は、期間T1およびT2の後で、移行された出力演算に係わる動作を実行することが可能となる。これにより、タイミング制約1を満足することが可能となる。
<具体的な構成>
<<メモリの割り当て>>
先ず、半導体装置2_1~2_3におけるメモリ17および18の割り当てを説明する。図6および図7は、実施の形態1に係わる半導体装置のメモリの割り当てを説明する図である。図6は、半導体装置2_1および2_2のメモリ17および18の割り当てを示し、図7は、半導体装置2_3のメモリ17および18の割り当てを示している。
半導体装置2_1および2_2において、メモリ17は、図6に示すように、論理アドレス00000H(Hは、16進表記を示している。以下、同様)~0FFFFHのアドレス領域に割り当てられている。このアドレス領域に、バンクウェイ17_0~17_3が、それぞれ1KBのアドレス領域を有するように割り当てられる。一方、半導体装置2_1および2_2のメモリ18は、論理アドレス10000H~1FFFFHのアドレス領域に割り当てられている。このアドレス領域に、バンクウェイ18_0~18_3が、それぞれ0.25KBのアドレス領域を有するように割り当てられる。
また、半導体装置2_3においては、図7に示すように、メモリ17は、論理アドレス00000H~0FFFFHのアドレス領域に割り当てられており、このアドレス領域に、バンクウェイ17_0~17_3が、それぞれ0.25KBのアドレス領域を有するように割り当てられる。一方、半導体装置2_3のメモリ18は、論理アドレス10000H~1FFFFHのアドレス領域に割り当てられており、このアドレス領域に、バンクウェイ18_0~18_3が、それぞれ1KBのアドレス領域を有するように割り当てられる。
すなわち、半導体装置2_1および2_2において、受信バッファを構成するメモリ17においては、1KB単位でバンクウェイが切り替えられ、送信バッファ(演算バッファ)を構成するメモリ18においては、0.25KB単位でバンクウェイが切り替えられる。一方、半導体装置2_3では、受信バッファを構成するメモリ17においては、0.25KB単位でバンクウェイが切り替えられ、送信バッファ(演算バッファ)を構成するメモリ18においては、1KB単位でバンクウェイが切り替えられる。
<<半導体装置2_1、2_2のメモリアドレス領域>>
図8~図11は、実施の形態1に係わる半導体装置のメモリアドレス領域を説明するための図である。ここで、図8には、フィルタ演算A用タスクに対応した半導体装置2_1におけるメモリ17のアドレス領域が示され、図9には、フィルタ演算A用タスクに対応した半導体装置2_1におけるメモリ18のアドレス領域が示されている。また、図10には、フィルタ演算B用タスクに対応した半導体装置2_2におけるメモリ17のアドレス領域が示され、図11には、フィルタ演算B用タスクに対応した半導体装置2_2におけるメモリ18のアドレス領域が示されている。
半導体装置2_1は、データ通信装置3からデータを受信すると、通信装置5_1は、受信したデータを、図8に示すように、半導体装置2_1のメモリ17を構成するバンクウェイ17_0~17_3のブロック0~4に書き込む(ライト)。半導体装置2_1のプロセッサCPU1は、ブロック0およびブロック1に格納されているデータを読み出し(リード)、プロセッサCPU2は、ブロック2および3に格納されているデータを読み出す。プロセッサCPU1は、ブロック0およびブロック1から読み出したデータ間でフィルタ演算Aを実行する。同様に、プロセッサCPU2は、ブロック2およびブロック3から読み出したデータ間でフィルタ演算Aを実行する。なお、ブロック4に格納されているデータは、次のフィルタ演算Aにおいて演算されるデータである。
半導体装置2_1のプロセッサCPU1は、フィルタ演算Aにより求めた演算結果を、図9に示されているように、バンクウェイ18_0、18_1のブロック0~3に書き込む(ライト)。一方、プロセッサCPU2は、フィルタ演算Aにより求めた演算結果を、図9に示されているように、バンクウェイ18_2、18_3のブロック4~7に書き込む。なお、半導体装置2_1において、メモリ17のブロックのサイズは、1KBであり、メモリ18のブロックのサイズは、0.25KBである。
図10は図8に類似し、図11は図9に類似している。半導体装置2_2における通信装置5_2は受信したデータを、図10に示すように、メモリ17のバンクウェイ17_0~17_3におけるブロック0~ブロック4に書き込む。半導体装置2_2のプロセッサCPU1は、ブロック1および2からデータを読み出し、フィルタ演算Bを実行する。また、プロセッサCPU2は、ブロック3および4からデータを読み出し、フィルタ演算Bを実行する。ここでも、ブロック0に格納されているデータは、他の演算で用いられるデータを示している。
半導体装置2_2のプロセッサCPU1は、フィルタ演算Bにより求めた演算結果を、図11に示されているように、バンクウェイ18_0、18_1のブロック0~3に書き込む(ライト)。一方、プロセッサCPU2は、フィルタ演算Bにより求めた演算結果を、図11に示しされているように、バンクウェイ18_2、18_3のブロック4~7に書き込む。なお、半導体装置2_2においても、メモリ17のブロックのサイズは、1KBであり、メモリ18のブロックのサイズは、0.25KBである。
図8~図11において、アドレス領域は物理アドレスで示されている。プロセッサCPU1、CPU2からのアドレス信号は、アドレス変換回路13によって、論理アドレスに変換される。このときの変換は、図8~図11に示されている変換式(例えば、図8では、ブロックmの論理アドレス=2000H+400H×m)に従って、プロセッサCPU1,CPU2からの物理アドレスは、ブロックを指定する論理アドレスに変換される。
<<半導体装置2_1、2_2のタスク入出力データ制御レジスタ>>
図12~図15は、実施の形態1に係わるタスク入出力データ制御レジスタの構成を示す図である。タスク入出力データ制御レジスタ12は、複数のレジスタを備えている。すなわち、タスク入出力データ制御レジスタ12は、転送モニタ領域0設定レジスタ:700_0、転送モニタ領域1設定レジスタ:700_1、タスク入出力データ転送制御レジスタ0:701_0、タスク入出力データ領域0設定レジスタ:702_0、タスク入出力データ領域1設定レジスタ:702_1およびタスク起動条件設定レジスタ0:703_0(名称と符号との間の符号:は区切りを示している)を備えている。ここで、図12および図13は、半導体装置2_1に設けられたタスク入出力データ制御レジスタ12を示しており、<<動作概要>>で説明した動作を行うように設定された状態が示されている。また、図14および図15は、半導体装置2_2に設けられたタスク入出力データ制御レジスタ12を示しており、<<動作概要>>で説明した動作を行うように設定された状態が示されている。
図12および図13に示したタスク入出力データ制御レジスタ12を例にして、タスク入出力データ制御レジスタ12を構成する各レジスタについて説明する。
転送モニタ領域0設定レジスタ:700_0は、受信バッファを構成するメモリ17を対象メモリとし、対象メモリへのアクセスが検出されたとき、または/および対象メモリをタスク入出力データ領域として使用するタスクを起動するときのブロック割り当て順序の制約を設定するレジスタである。また、転送モニタ領域1設定レジスタ:700_1は、送信メモリを構成するメモリ18を対象メモリとし、対象メモリへのアクセスが検出されたとき、または/および対象メモリをタスク入出力データ領域として使用するタスクを起動するときのブロック割り当て順序の制約を設定するレジスタである。転送モニタ領域0設定レジスタ:700_0および転送モニタ領域1設定レジスタ:700_1によって、対象メモリへのアクセスが検出されたとき、または/および対象メモリをタスク入出力データ領域として使用するタスクを起動するとき、それぞれの「対象領域のブロック割り当て制約」に記載したようにブロックの割り当てが行われる。すなわち、メモリ17では、バンクウェイ17_0から順番にブロック単位でスレーブを切り替えながら、ブロック0から順番にブロックが割り当てられる。すなわち、バンクウェイ17_0から順番にスレーブとして選択し、受信ブロック0から順番に受信ブロックを格納するように設定される。一方、メモリ18は、「対象領域のブロック割り当て制約」に記載したように、メモリ17とは異なるように割り当ての設定が行われる。
転送モニタ領域0設定レジスタ:700_0では、対象メモリであるメモリ17内のブロック未割り当て領域への初回書き込み(ライト)時にブロック割り当てが自動的に行われるように設定されている。一方、転送モニタ領域1設定レジスタ:700_1では、自動的なブロック割り当ては設定されていない。また、転送モニタ領域0設定レジスタ:700_0の対象領域の1ブロック当たりのバイト数は1KB(1024バイト)に設定され、転送モニタ領域1設定レジスタ:700_1の対象領域の1ブロック当たりのバイト数は0.25KB(256バイト)に設定されている。また、転送モニタ領域0設定レジスタ:700_0および転送モニタ領域1設定レジスタ:700_1には、対象領域の1フラグ当たりのバイト数が、1であることが設定されている。フラグについては、後で図35~図56等で示す。
タスク入出力データ転送制御レジスタ0:701_0には、読み出し(リード)検出領域(転送先)、リードタスク(転送先)、ライト検出領域(転送元)、ライトタスク(転送元)、1フレーム当たりの最大転送バイト数、転送開始トリガ1および転送開始トリガ2が設定される。ここで、リード検出領域(転送先)には、転送先の半導体装置2_3の転送モニタ領域0が設定される。すなわち、リード検出領域(転送先)には、転送先の半導体装置2_3を特定する識別情報と、転送モニタ領域0のアドレス領域を特定するアドレス情報とが設定される。また、リードタスク(転送先)には、半導体装置2_3で実行させるタスクである出力演算A用タスクが設定される。
また、ライト検出領域(転送元)には、当該半導体装置2_1における転送モニタ領域1が設定される。すなわち、ライト検出領域(転送元)には、半導体装置2_1を特定する識別情報と転送モニタ領域1のアドレス領域を特定するアドレス情報とが設定される。ライトタスク(転送元)には、当該半導体装置2_1において実行されるタスクであるフィルタ演算A用タスクが設定される。また、1フレーム当たりの最大転送バイト数は、転送バイト数512が設定される。転送開始トリガ1には、タスク入出力データが、1フレーム当たりの最大転送バイト数以上になった時が設定され、転送開始トリガ2には、ライトタスクが終了または一時停止状態に入った時が設定される。転送開始トリガ1は、当該半導体装置2_1において、転送モニタ領域1、すなわちメモリ18におけるライト転送検出フラグとリード転送検出フラグとの差の合計が、最大転送バイト数512以上になった時に、転送を開始させることを意味している。
タスク入出力データ領域0設定レジスタ:702_0およびタスク入出力データ領域1設定レジスタ:702_1には、入出力を行うタスク、入力/出力(入力または出力)の区別、入出力データ領域、タスク起動時の自動割り当てブロック番号の初期値およびタスク起動時の自動割り当てブロック数が設定される。半導体装置2_1において起動されるタスクは、フィルタ演算A用タスクであるため、入出力を行うタスクとして、フィルタ演算A用タスクが設定されている。タスク入出力データ領域0設定レジスタ:702_0の入出力データ領域には、転送モニタ領域0が設定され、タスク入出力データ領域1設定レジスタ:702_1の入出力データ領域には、転送モニタ領域1が設定される。転送モニタ領域0は、対象メモリがメモリ17であるため、出力データ領域0設定レジスタ:702_0の入力/出力の区別としては入力が設定されている。一方、転送モニタ領域1は、対象メモリがメモリ18であるため、出力データ領域1設定レジスタ:702_1の入力/出力の区別としては出力が設定されている。
また、タスク入出力データ領域0設定レジスタ:702_0およびタスク入出力データ領域1設定レジスタ:702_1のタスク起動時の自動割り当てブロック番号の初期値としては、0が設定され、タスク起動時の自動割り当てブロック数としては、2と4が設定されている。
タスク起動条件設定レジスタ0:703_0には、起動対象タスク、起動関数名、並列起動数、起動関数への引数、タスク起動トリガおよびタスク一時停止トリガが設定される。半導体装置2_1では、2つのプロセッサCPU1、CPU2を用いて、フィルタ演算A用タスクを実行するため、起動対象タスクは、フィルタ演算A用タスクが設定され、並列起動数は2が設定される。また、起動関数名はfとされ、起動関数への引数は、同図に示すように設定される。半導体装置2_1では、フレーム受信終了イベントの発生に応答して、タスクを起動するため、タスク起動トリガとしては、フレーム受信終了イベント発生時が設定される。フィルタ演算A用タスクを一時停止させるトリガは特に定義していないため、タスク一時停止トリガは設定なしとなっている。
図14および図15に示した半導体装置2_2のタスク入出力データ制御レジスタ12の構成は、図12および図13と同じである。設定としては、図14および図15に示したタスク入出力データ制御レジスタ12においては、該当半導体装置が、半導体装置2_2であるため、タスク入出力データ転送制御レジスタ0:701_0に、半導体装置2_1の代わりに半導体装置2_2(識別情報ID2)が設定されていることである。また、図2に示したように、半導体装置2_2では、受信ブロック1から順番にフィルタ演算B用タスクを実行するため、タスク入出力データ領域0設定レジスタ:702_0において、タスク起動時の自動割り当てブロック番号の初期値は1が設定されている。さらに、半導体装置2_2のタスク入出力データ制御レジスタ12には、タスクとしてフィルタ演算A用タスクではなく、フィルタ演算B用タスクが設定されている。
<<半導体装置2_1、2_2のレジスタ設定動作>>
半導体装置2_1、2_2においては、ソフトウェアを実行することにより、スケジュール装置10(ID1)、10(ID2)内のレジスタ等を設定する。図16および図17は、実施の形態1に係わる半導体装置における設定の動作を示すフローチャート図である。ここで、図16は、半導体装置2_1における動作を示し、図17は、半導体装置2_2における動作を示している。
図16のステップS90において、スケジュール装置10(ID1)の設定が開始する。半導体装置2_1では、フィルタ演算A用タスクを実行する。そのため、ステップS91において、半導体装置2_1内のスケジュール装置10(ID1)において、フィルタ演算A用タスクの制御に係わるレジスタの設定が行われる。このステップS90において、半導体装置2_1内のタスク入出力データ制御レジスタ12に対して、図12および図13に示したように設定を行う。次に、ステップS92において、モニタ回路15による転送モニタ領域0、1(メモリ17、18)の監視を有効化する。ステップS93において、図12に示したタスク入出力データ転送制御レジスタ0に設定された内容に従って転送制御が実行されるように、転送制御の有効化が行われる。さらに、ステップS94において、フレーム受信終了イベントによるフィルタ演算A用タスクの起動を有効化する。その後、ステップS95で、半導体装置2_1におけるスケジュール装置10(ID1)の設定を終了する。
半導体装置2_2についても、半導体装置2_1と同様なステップが、図17に示したステップS100~S105として実行される。図16と図17との相異点は、図17では、ステップS101において、フィルタ演算B用タスクに係わるレジスタの設定か行われ、このときに図14および図15に示したように、タスク入出力データ制御レジスタ12が設定されることである。
<<半導体装置2_1、2_2におけるタスク起動>>
次に、半導体装置2_1、2_2におけるタスク起動の動作を説明する。半導体装置2_1においては、フィルタ演算A用タスクが起動され、半導体装置2_2においては、フィルタ演算B用タスクが起動される。フィルタ演算A用タスクおよびフィルタ演算B用タスクが起動され、実行されることにより、半導体装置2_1、2_2における送信バッファ(演算バッファ)にフィルタ演算結果が格納されることになる。
図18および図19は、実施の形態1に係わる半導体装置におけるタスク起動の動作を示すフローチャート図である。ここで、図18は、半導体装置2_1におけるタスク起動の動作を示し、図19は、半導体装置2_2におけるタスク起動の動作を示している。半導体装置2_1、2_2が備えているタスク入出力データ制御回路11が、図18および図19に示す制御を実施する。図18と図19は類似しているので、先ず図18を説明し、その後で図18と図19の相異点を説明する。
図18において、ステップS110でタスク起動の動作が開始する。次にステップS111において、フィルタ演算A用タスクの起動が有効化されるまで待機する。フィルタ演算A用タスクの起動が有効化されると、ステップS112が実行される。ステップS112においては、受信ブロックの番号を示す変数mと、送信ブロックの番号を示す変数nを0に設定する。その後、ステップS113において、フレーム受信終了イベントの発生を待機する。このフレーム受信終了イベントの発生が、フィルタ演算A用タスクを起動する起動トリガとなる。
起動トリガが検出されると、次にステップS114が実行される。ステップS114では、並列起動数を示す変数cが0に設定される。その後、ステップS115が実行される。
ステップS115においては、フィルタ演算A用タスクに対するタスク入力データ領域として、ブロックmから2ブロック分の論理アドレスを割り当てる。また、フィルタ演算A用タスクに対するタスク出力データ領域として、ブロックnから4ブロック分の論理アドレスを割り当てる。これにより、フィルタ演算A用タスクが起動されると、メモリ17においてブロックmから2ブロック分が、フィルタ演算A用タスクの入力データとなり、フィルタ演算Aの演算結果は、メモリ18においてブロックnから4ブロック分に書き込まれることになる。また、それぞれのアドレス領域、すなわちタスク入力データ領域およびタスク出力データ領域の先頭アドレスを、フィルタ演算A用タスクの起動関数fへの引数としてセットする。なお、上記した2ブロックおよび4ブロックは、タスク起動時の自動割り当てブロック数であり、図13に示したタスク入出力データ領域0設定レジスタ702_0およびタスク入出力データ領域1設定レジスタ702_1に設定されているブロック数である。
ステップS115において、起動関数fへの引数のセットが終了すると、ステップS116が実行される。このステップS116において、フィルタ演算A用タスクが起動される。次に、ステップS117において、変数c、mおよびnの更新が行われる。すなわち、c=c+1、m=m+2、n=n+4の演算が行われる。ここで、2および4は、上記したブロック数である。
次に、ステップS118が実行される。ステップS118では、変数cの値に基づいて、並列起動数が、2以下か否かの判定が行われる。並列起動数が2以下の場合、ステップS115に戻り、並列起動数が2を超えるまで、ステップS115~S118が繰り返される。一方、並列起動数が、2を超えた場合、次にステップS113に戻り、ステップS113でタスク起動トリガの発生を待機する。実施の形態1においては、半導体装置2_1は2つのプロセッサCPU1、CPU2を備えているため、並列起動数は2まで設定することが可能である。
以上で、連続した2つの受信ブロック(1KB)の受信データを用いてフィルタ演算Aが実行され、フィルタ演算結果は、4つの送信ブロック(0.25KB)に書き込まれることになる。
半導体装置2_2においても、図18に示したステップS110~S118と類似のステップS120~S128(図19)によって、フィルタ演算B用タスクが起動される。半導体装置2_2において実行されるステップS120~S128において、ステップS110~S118と異なる部分は、対象のタスクがフィルタ演算B用タスクである点と、ステップS122で変数mに設定する値が0ではなく、1である点である。変数mに1を設定するのは、図2に示したように、半導体装置2_2は、受信ブロック0ではなく、受信ブロック1からフィルタ演算Bを実行するためである。
<<タスク出力データの送信(転送)動作>>
半導体装置2_1、2_2の送信バッファ(演算バッファ)に格納されたフィルタ演算結果は、半導体装置2_3へ送信(転送)される。次に、半導体装置2_1、2_2におけるフィルタ演算結果(タスク出力データ)の送信動作を説明する。図20および図21は、実施の形態1に係わる半導体装置における送信動作を示すフローチャート図である。ここで、図20は、半導体装置2_1における送信動作を示し、図21は、半導体装置2_2における送信動作を示している。図20および図21に示す制御は、半導体装置2_1、2_2に設けられているタスク入出力データ制御回路11によって実行される。
図20と図21は、類似しているので、図20を参照して、半導体装置2_1における送信動作を説明し、その後で、図21を用いて半導体装置2_2における送信動作との相異点を説明する。
図20のステップS130において、送信動作を開始する。次にステップS131において、図12に示したタスク入出力データ転送制御レジスタ0:701_0の設定により転送制御が有効になるまで待機する。転送制御が有効になると、ステップS132において、転送開始トリガ1、転送開始トリガ2の発生を待機する。
例えば転送開始トリガ1が発生すると、ステップS133が実行される。ステップS133において、ライト検出領域(転送元である半導体装置2_1の転送モニタ領域1)内で未転送のアドレス領域のあるブロックを全て抽出する。ここで、未転送のアドレス領域のあるブロックは、「c.未参照フラグ」=「a.ライトフラグ」-「b.リードフラグ」が0でないアドレスの存在するブロックを意味している。上記した未参照フラグ、ライトフラグおよびリードフラグは、後で図35~図56等で示すが、ライトフラグは、書き込みが行われたアドレスに付され、リードフラグは、読み出しが行われたアドレスに付され、未参照フラグは、書き込みが行われたアドレスであって、読み出しが行われていないアドレスに付される。そのため、ステップS133では、送信バッファ(演算バッファ)を構成するメモリ18をモニタ回路15で監視し、書き込みが行われたアドレスであって、読み出しが行われていないアドレスが存在するブロックを、全て抽出することが行われることになる。
次に、ステップS134が実行される。ステップS134では、S133で抽出したブロック番号のリストを送信順に並び替えたリスト(以下、送信順のブロック番号リストと称する)を作成する。ブロック番号の並び替え方法としては、次に説明する第1~第4の方法がある。ここでは、それぞれの並び替え方法に対応する優先度評価関数を考え、ステップS134では、優先度評価関数に基づいて優先度の高い順にブロック番号の並び替えを行うものとして説明する。
第1の方法は、送信バッファに滞留している時間が長いデータが格納されているブロックを優先的に送信させたい場合に適する方法である。前記第1の方法を採用する場合の優先度評価関数fp1は、現在の時刻をtc、最終ライト時刻をtweとした場合に、
fp1=tc-twe
とする。ここで、前記現在の時刻tcとは、前記タイマ9からスケジュール装置10(ID1)に供給される時刻情報のことで、半導体装置2_1~2_3およびデータ送信装置3間で同期している。また、前記最終ライト時刻tweとは、後で説明する図41~図46における項目CTB7に設定されている値のことである。またtc、tweは、それぞれ過去の時刻よりも未来の時刻の方が大きい値になるものとし、fp1の値は大きいほど優先度は高い。
第2の方法は、タイミング制約の厳しいタスクで参照されるデータが格納されているブロックを優先的に送信させたい場合に適する方法である。前記第2の方法を採用する場合の優先度評価関数fp2は、送信するデータを参照するタスクが終了していなければならない時刻をtlmとした場合に、前記現在の時刻tcを用いて、
fp2=tc-tlm
とする。前記第2の方法を採用する場合は、図12のタスク入出力データ転送制御レジスタ0:701_0に、前記tlmの設定フィールドを追加して設定する。前記tlmは、ある一つの転送モニタ領域に格納されるデータを複数のタスクで参照する場合には、前記一つの転送モニタ領域に格納されるデータを参照する全てのタスクの内、最も早く終了していなければならないタスクのタイミング制約が使用される。ここで、前記tlmは過去の時刻よりも未来の時刻の方が大きい値となるものとすると、タイミング制約違反が発生していないときは、tlm≧tcの関係が成立し前記fp2は負の値または0となる。また前記fp2の値は大きいほど優先度は高い。
第3の方法は、実行優先度が高く設定されているタスクで参照されるデータが格納されているブロックを優先的に送信させたい場合に適する方法である。前記第3の方法を採用する場合の優先度評価関数fp3は、送信するデータを参照するタスクの実行優先度をprとした場合に、
fp3=pr
とする。前記第3の方法を採用する場合は、図12のタスク入出力データ転送制御レジスタ0:701_0に、前記prの設定フィールドを追加して設定する。ここで、前記prの値および前記fp3の値は、共に大きいほど優先度は高い。
第4の方法は、前記第1の方法と、前記第2の方法と、前記第3の方法を組み合わせて優先的に送信させるブロックを決定したい場合に適する方法である。前記第1の方法による評価結果に対する重みをw1、前記第2の方法による評価結果に対する重みをw2、前記第3の方法による評価結果に対する重みをw3、とした場合に、前記第4の方法を採用する場合の優先度評価関数fp4は、
fp4=w1×fp1+w2×fp2+w3×fp3
とする。ここで前記w1~w3にはそれぞれ任意の実数を重みとして設定する。また前記w1~w3は、任意のイベントに同期して値を変化させることができるように構成する。
例えば、実施の形態1ではタイミング制約1を満足させるために、前記第4の方法を採用し、次の設定を行う。送受信終了イベントが発生したときに、w1=1、w2=1、w3=0と設定する。またSYNC0イベントが発生したときに、w1=0、w2=0、w3=1と設定する。また半導体装置2_1と半導体装置2_2のそれぞれのタスク入出力データ転送制御レジスタ0に設ける前記tlmは、SYNC0イベントが発生したときに、次回SYNC0イベントが発生する時刻を設定する。なおSYNC0イベントは前記タイマ9に同期して一定の周期で発生するので、前述のとおりSYNC0イベントが発生したときに、次回SYNC0イベントが発生する時刻を設定することができる。また半導体装置2_1と半導体装置2_2のそれぞれのタスク入出力データ転送制御レジスタ0に設ける前記prは、任意の値を設定できるが、ここでは最も低い優先度を表す0を設定する。これらの設定により、送受信終了イベントからSYNC0イベントの間の期間では、前記第1の方法と、前記第2の方法を組み合わせてタイミング制約1に対応した優先度で送信するブロックが決定される。また送受信終了イベントからSYNC0イベントの間の期間以外では、前記第3の方法で優先的に送信するブロックが決定される。またこれらの設定を行うことで、例えば半導体装置2_1および半導体装置2_2上でCPUの数を大幅に上回るタスクが並列に動作している場合であっても、各々のタスクのタイミング制約に対応した優先度で送信するブロックを決定させることができる。
次に、ステップS135が実行される。ステップS135では、ステップS134で作成した送信順のブロック番号リストの順番に、連続する未転送のアドレス領域を抽出する。抽出したアドレス領域ごとに、抽出したアドレス領域の先頭アドレス(論理アドレス)と、抽出したアドレス領域の領域サイズ(バイト数)のヘッダ情報を付加したデータグラムを作成する。以下、作成したデータグラムを順番に、データグラム0、データグラム1、データグラム2、・・・と称する。
次のステップS136では、各データグラムのヘッダ情報である領域サイズの合計が、1フレーム当たりの最大転送バイト数(図12のタスク入出力データ転送制御レジスタ0:701_0参照)を超えないように、データグラム0、データグラム1、データグラム2、・・・を結合したデータ(以下、送信データグラムと称する)を作成する。
ステップS137では、ステップS136で作成した送信データグラムに対して、リード検出領域(転送先である半導体装置2_3における転送モニタ領域0)の宛先情報を含むネットワークヘッダを付加して、送信フレームを作成する。リード検出領域は、図12に示したタスク入出力データ転送制御レジスタ701_0において設定されており、宛先情報は、転送先の半導体装置を特定する識別情報ID3と、転送モニタ領域0のアドレス領域を特定するアドレス情報とを備えている。
ステップS138では、通信装置5_1に含まれるDMAコントローラを用いて.作成した送信フレームを、半導体装置2_3へ送信する。ステップS138の後は、ステップS132に戻り、転送開始トリガ1、転送開始トリガ2の発生か検知されると、上記したステップが繰り返される。
半導体装置2_2においても、図20のステップS130~S138と類似したステップS140~S148(図21)が実行される。図21と図20との相違点は、図21では、半導体装置2_2が、送信フレームを半導体装置2_3へ送信する点と、ステップS147において、送信データグラムに付加する宛先情報が、半導体装置2_3の転送モニタ領域1であることである。
なお、図20のS133~S137、および図21のS143~S147は、一部の処理を並列に実行したり、一部の処理を細分化して実行する順番を入れ替えたりすることで、実行時間を短縮出来る場合があるが、図面上は処理の流れを分かり易くする為に各々の処理を順番に実行するフローを記載している。
<<半導体装置2_3>>
次に、半導体装置2_3を説明する。半導体装置2_3においては、半導体装置2_1から受信したフィルタ演算結果に対して、出力演算A用タスクが実行され、半導体装置2_2から受信したフィルタ演算結果に対して、出力演算B用タスクが実行される。
半導体装置2_3におけるメモリ17および18には、出力演算A用タスクに対応したアドレス領域(転送モニタ領域)と、出力演算B用タスクに対応したアドレス領域(転送モニタ領域)とが設定される。図22~図25は、実施の形態1に係わる半導体装置のメモリアドレス領域を説明するための図である。ここで、図22には、出力演算A用タスクに対応したメモリ17のアドレス領域(転送モニタ領域0)が示され、図23には、出力演算A用タスクに対応したメモリ18のアドレス領域(転送モニタ領域1)が示されている。また、図24には、出力演算B用タスクに対応したメモリ17のアドレス領域(転送モニタ領域2)が示され、図25には、出力演算B用タスクに対応したメモリ18のアドレス領域(転送モニタ領域3)が示されている。
図22および図24に示すように、メモリ17のアドレス領域は、0.25KB単位のバンクウェイ17_0~17_3によって構成される。また、メモリ18のアドレス領域は、図23および図25に示すように、1KB単位のバンクウェイ18_0~18_3によって構成されている。図22~図25において、メモリ17および18のアドレス領域は、物理アドレスで表示されているが、アドレス変換回路13(図1)によって論理アドレスに変換される。それぞれのバンクウェイにおけるブロックの論理アドレスは、それぞれの図に示した変換式(例えば、図22では、ブロックmの論理アドレス=20000H+100H×m)に従って変換される。
メモリ17を構成するバンクウェイ17_0~17_3のうち、バンクウェイ17_0および17_1が、半導体装置2_1からの演算結果に対する出力演算A用タスクに対応し、バンクウェイ17_2および17_3が、半導体装置2_2からの演算結果に対する出力演算B用タスクに対応している。また、メモリ18を構成するバンクウェイ18_0~18_3のうち、バンクウェイ18_0および18_2が、出力演算A用タスクに対応し、出力演算A用タスクによる出力演算結果が格納される。一方、バンクウェイ18_1および18_3は、出力演算B用タスクに対応し、出力演算B用タスクによる出力演算結果が格納される。
半導体装置2_1において実行されたフィルタ演算A用タスクの演算結果は、半導体装置2_1のメモリ18におけるバンクウェイに書き込まれ(ライト)、ライトされた演算結果が、図22に示すように、半導体装置2_1から半導体装置2_3へ転送され、半導体装置2_3におけるプロセッサにより読み出される(リード)。例えば、図22のバンクウェイ17_0におけるブロック0には、半導体装置2_1において、プロセッサCPU1が半導体装置2_1のバンクウェイにライトした演算結果のデータが、半導体装置2_3に転送され、ブロック0にライトされる。このブロック0にライトされたデータは、半導体装置2_3におけるプロセッサCPU1がリードする。図22に示した残りのブロック1~7も同様である。
半導体装置2_3においては、プロセッサCPU1,CPU2が、ブロック0~7からリードしたデータに対して出力演算A用タスクを実行し、プロセッサCPU1は、図23に示すように、バンクウェイ18_0のブロック0に演算結果をライトする。同様に、プロセッサCPU2は、図23に示すように、バンクウェイ18_2のブロック1に演算結果をライトする。
一方、半導体装置2_2において実行されたフィルタ演算B用タスクの演算結果は、半導体装置2_2のメモリ18におけるバンクウェイに書き込まれ(ライト)、ライトされた演算結果が、図24に示すように、半導体装置2_2から半導体装置2_3へ転送され、半導体装置2_3におけるプロセッサにより読み出される(リード)。例えば、図24のバンクウェイ17_2におけるブロック0には、半導体装置2_2において、プロセッサCPU1が半導体装置2_2のバンクウェイにライトした演算結果のデータが、半導体装置2_3に転送され、ブロック0にライトされる。このブロック0にライトされたデータは、半導体装置2_3におけるプロセッサCPU1がリードする。図24に示した残りのブロック1~7も同様である。
半導体装置2_3においては、プロセッサCPU1,CPU2が、ブロック0~7からリードしたデータに対して出力演算B用タスクを実行し、プロセッサCPU1は、図25に示すように、バンクウェイ18_1のブロック0に演算結果をライトする。同様に、プロセッサCPU2は、図25に示すように、バンクウェイ18_3のブロック1に演算結果をライトする。
これにより、フィルタ演算および出力演算が実施されたデータが、取得されることになる。
<<<半導体装置2_3のタスク入出力データ制御レジスタ>>>
図26~図29は、実施の形態1に係わる半導体装置のタスク入出力データ制御レジスタの構成を示す図である。図26~図29に示す半導体装置2_3におけるタスク入出力データ制御レジスタ12は、図12~図15に類似しているので、相異点を主に説明する。
半導体装置2_1、2_2のそれぞれは、転送モニタ領域設定レジスタとして、転送モニタ領域0設定レジスタ:700_0と転送モニタ領域1設定レジスタ:700_1の2つを備えていたが、半導体装置2_3は、転送モニタ領域設定レジスタとして。4つの転送モニタ領域設定レジスタを備えている。すなわち、半導体装置2_3は、転送モニタ領域0設定レジスタ:700_0、転送モニタ領域1設定レジスタ:700_1、転送モニタ領域2設定レジスタ:700_2および転送モニタ領域3設定レジスタ:700_3を備えている。
転送モニタ領域0設定レジスタ:700_0は、対象メモリが、図22に示したメモリ17のバンクウェイ17_0と17_1であり、転送モニタ領域1設定レジスタ:700_1は、対象メモリが、図23に示したメモリ18のバンクウェイ18_0と18_2である。また、転送モニタ領域2設定レジスタ:700_2は、対象メモリが、図24に示したメモリ17のバンクウェイ17_2と17_3であり、転送モニタ領域3設定レジスタ:700_3は、対象メモリが、図25に示したメモリ18のバンクウェイ18_1と18_3である。図22~図25に示したように、半導体装置2_3を動作させる場合、転送モニタ領域0設定レジスタ:700_0~転送モニタ領域3設定レジスタ:700_3における「対象領域のブロック割り当て制約」は、図26および図28に示すようになる。また、対象領域の自動ブロック割り当てトリガは、設定なしを設定し、対象領域の1ブロック当たりのバイト数および対象領域の1フラグ当たりのバイト数も、図26および図28に示すように設定する。
半導体装置2_1、2_2では、タスク入出力データ転送制御レジスタとして、1つのタスク入出力データ転送制御レジスタ0:701_0を備えていたが、半導体装置2_3は、タスク入出力データ転送制御レジスタとして、2つのタスク入出力データ転送制御レジスタ0:701_0、701_1を備えている。
タスク入出力データ転送制御レジスタ0:701_0には、リード検出領域(転送先)として、半導体装置2_3の転送モニタ領域0(図22)が設定され、リードタスク(転送先)として、半導体装置2_3の出力演算A用タスクが設定される。また、ライト検出領域(転送元)には、半導体装置2_1の転送モニタ領域1が設定され、ライトタスク(転送元)として、半導体装置2_1のフィルタ演算A用タスクが設定される。一方、タスク入出力データ転送制御レジスタ1:701_1には、リード検出領域(転送先)として、半導体装置2_3の転送モニタ領域2(図24)が設定され、リードタスク(転送先)として、半導体装置2_3の出力演算B用タスクが設定される。また、ライト検出領域(転送元)には、半導体装置2_2の転送モニタ領域1が設定され、ライトタスク(転送元)として、半導体装置2_2のフィルタ演算B用タスクが設定される。
タスク入出力データ転送制御レジスタ0:701_0およびタスク入出力データ転送制御レジスタ1:701_1において、1フレーム当たりの最大転送バイト数は512に設定され、転送開始トリガ1および2は、図26および図28に示すように設定される。
また、半導体装置2_1、2_2では、タスク入出力データ領域設定レジスタとして、タスク入出力データ領域0設定レジスタ:702_0と、タスク入出力データ領域1設定レジスタ:702_1との2つを備えていたが、半導体装置2_3は、タスク入出力データ領域設定レジスタとして、4つのタスク入出力データ領域設定レジスタを備えている。すなわち、半導体装置2_3は、タスク入出力データ領域0設定レジスタ:702_0、タスク入出力データ領域1設定レジスタ:702_1、タスク入出力データ領域2設定レジスタ:702_2およびタスク入出力データ領域3設定レジスタ:702_3を備えている。
タスク入出力データ領域0設定レジスタ:702_0~タスク入出力データ領域3設定レジスタ:702_3の入出力データ領域としては、転送モニタ領域0~3(図22~図25)が設定される。入出力を行うタスク、入力または出力(入力/出力)、タスク起動時の自動割り当てのブロック番号の初期値およびタスク起動時の自動割り当てブロック数は、図27および図29に示されているように設定される。
さらに、半導体装置2_1、2_2は、タスク起動条件設定レジスタとして、1つのタスク起動条件設定レジスタ0:703_0を備えていたが、半導体装置2_3は、2つのタスク起動条件設定レジスタ0:703_0、タスク起動条件設定レジスタ1:703_1を備えている。起動対象タスク、起動関数名、並列起動数、起動関数への引数、タスク起動トリガおよびタスク一時停止トリガは、図27および図29に示すように設定される。
半導体装置2_1、2_2のタスク入出力データ制御レジスタ12は、半導体装置2_3と同じ構成にし、半導体装置2_1および2_2においては、タスク入出力データ制御レジスタを構成するレジスタのうちの一部を、図12~図15で説明したように設定するようにしてもよい。
<<<半導体装置2_3のレジスタ設定動作>>>
半導体装置2_3においても、ソフトウェアを実行することにより、スケジュール装置10(ID3)内のレジスタ等を設定する。図30は、実施の形態1に係わる半導体装置における設定の動作を示すフローチャート図である。
図30のステップS210において、スケジュール装置10(ID3)の設定が開始する。半導体装置2_3では、出力演算A用および出力演算B用のタスクを実行する。そのため、ステップS211において、半導体装置2_3内のスケジュール装置10(ID3)において、出力演算A用タスクおよび出力演算B用タスクの制御に係わるレジスタの設定が行われる。このステップS211において、半導体装置2_3内のタスク入出力データ制御レジスタ12に対して、図26~図29に示したように設定を行う。次に、ステップS212において、モニタ回路15による転送モニタ領域0~3(メモリ17、18)の監視を有効化する。ステップS213において、図26および図28に示したタスク入出力データ転送制御レジスタ0および1に設定された内容に従って転送制御が実行されるように、転送制御の有効化が行われる。さらに、ステップS214において、モニタ回路15を用いて、転送モニタ領域0へのデータの転送が完了したことをタスク起動トリガにより検出すると、出力演算A用タスクの起動を有効化する。また、ステップS215で、モニタ回路15を用いて、転送モニタ領域2へのデータの転送が完了したことをタスク起動トリガにより検出すると、出力演算B用タスクの起動を有効化する。その後、ステップS216でレジスタ設定動作を終了する。
<<<タスク入力データの受信フロー>>>
半導体装置2_3は、半導体装置2_1から出力演算A用タスクの入力データを受信する動作と、半導体装置2_2から出力演算B用タスクの入力データを受信する動作とを実行する。この動作は、半導体装置2_3におけるタスク入出力データ制御回路13が実行する。図31および図32は、実施の形態1に係わるタスク入力データの受信フローを示す図である。ここで、図31は出力演算A用タスクの入力データを受信するときの動作を示し、図32は出力演算B用タスクの入力データを受信するときの動作を示している。
図31において、ステップS220で受信を開始する。ステップS221では、図26に示したタスク入出力データ転送制御レジスタ0:701_0の設定による転送制御の有効化を待機する。タスク入出力データ転送制御レジスタ0:701_0により転送制御が有効化されると、ステップS222が実行される。ステップS222では、半導体装置2_1からの受信フレームの受信を待機する。
受信フレームが受信されると、次にステップS223が実施される。ステップS223では、受信フレーム内の各データグラムのヘッダ情報(先頭アドレス情報と領域サイズ情報)に基づいて、タスク入力データ領域(転送モニタ領域0)に、ヘッダ情報に対応したデータ(タスク入力データ)を展開する。受信フレームのデータの展開が終わると、ステップS222に戻り、新たな受信フレームの受信を待機する。
図32は、図31と類似しており、相異点は、ステップS221に対応するステップS231において、図28に示したタスク入出力データ転送制御レジスタ1:701_1の設定による転送制御の有効化を待機する点と、ステップS223に対応するステップS233において、タスク入力データを転送モニタ領域2(タスク入力データ領域)に展開する点である。
以上の動作で、フィルタ演算A用タスクの実行により得られたデータは、通信装置5_3が備えるDMAコントローラによって、転送モニタ領域1に展開され、フィルタ演算B用タスクの実行により得られたデータは、DMAコントローラによって、転送モニタ領域2に展開されることになる。
<<半導体装置2_3におけるタスク起動>>
次に、半導体装置2_3におけるタスク起動の動作を説明する。図33および図34は、実施の形態1に係わる半導体装置におけるタスク起動の動作を示すフローチャート図である。ここで、図33は、出力演算A用タスクの起動の動作を示し、図34は、出力演算B用タスクの起動の動作を示している。半導体装置2_3が備えているタスク入出力データ制御回路11が、図33および図34に示す制御を実施する。図33と図34は類似しているので、先ず図33を説明し、その後で図33と図34の相異点を説明する。
図33において、ステップS240でタスク起動の動作が開始する。次にステップS241において、出力演算A用タスクの起動が有効化されるまで待機する。出力演算A用タスクの起動が有効化されると、ステップS242が実行される。ステップS242においては、タスク入力データ領域におけるブロックの番号を示す変数mと、タスク出力データ領域におけるブロックの番号を示す変数nを0に設定する。その後、ステップS243において、タスク起動トリガを待機する、すなわち図26に示したリード検出領域(転送先)に設定された転送モニタ領域0へのデータの転送完了を待機することになる。
転送モニタ領域0へのデータの転送が完了すると、転送開始トリガ1が発生し、次にステップS244が実行される。ステップS244では、並列起動数を示す変数cが0に設定される。その後、ステップS245が実行される。
ステップS245においては、出力演算A用タスクに対するタスク入力データ領域として、ブロックmから4ブロック分の論理アドレスを割り当てる。また、出力演算A用タスクに対するタスク出力データ領域として、ブロックnから1ブロック分の論理アドレスを割り当てる。これにより、出力演算A用タスクが実行されたとき、演算結果が格納されるタスク出力データ領域が、メモリ18に格納されることになる。また、それぞれのアドレス領域、すなわちタスク入力データ領域およびタスク出力データ領域の先頭アドレスを。出力演算A用タスクの起動関数fgへの引数としてセットする。なお、上記した4ブロックおよび2ブロックは、タスク起動時の自動割り当てブロック数であり、図27に示したタスク入出力データ領域0設定レジスタ702_0およびタスク入出力データ領域1設定レジスタ702_1に設定されているブロック数である。
ステップS245において、起動関数fgへの引数のセットが終了すると、ステップS246が実行される。このステップS246において、出力演算A用タスクが起動される。次に、ステップS247において、変数c、mおよびnの更新が行われる。すなわち、c=c+1、m=m+4、n=n+1の演算が行われる。ここで、4および1は、上記したブロック数である。
次に、ステップS248が実行される。ステップS248では、変数cの値に基づいて、並列起動数が、2以下か否かの判定が行われる。並列起動数が2以下の場合、ステップS245に戻り、並列起動数が2を超えるまで、ステップS245~S248が繰り返される。一方、並列起動数が、2を超えていた場合、次にステップS243に戻り、ステップS243でタスク起動トリガの発生を待機する。実施の形態1においては、半導体装置2_3は2つのプロセッサCPU1、CPU2を備えているため、並列起動数は2まで設定することが可能である。
以上で、連続した4つのブロック(0.25KB)のデータを用いて出力演算Aが実行され、出力演算結果は、1つのブロック(1KB)に書き込まれることになる。
出力演算B用タスクにおいても、図33に示したステップS240~S248と類似のステップS250~S258(図34)によって、出力演算B用タスクが起動される。半導体装置2_3において実行されるステップS250~S258において、ステップS240~S248と異なる部分は、対象のタスクが出力演算B用タスクである点と、タスク入力データ領域が転送モニタ領域2である点と、タスク出力データ領域が転送モニタ領域3である点である。
以上の動作で、転送モニタ領域0において連続した4つのブロックに格納されたフィルタ演算Aの検算結果に対して、出力演算Aが実行され、その演算結果が、転送モニタ領域1の1つのブロックに格納される。同様に、転送モニタ領域2において連続した4つのブロックに格納されたフィルタ演算Bの検算結果に対して、出力演算Bが実行され、その演算結果が、転送モニタ領域3の1つのブロックに格納される。
<<<モニタ回路で取得する情報>>>
スケジュール装置12内のタスク入出力データ制御回路10(ID1)~10(ID3)は、図1に示したように、モニタ回路15に接続されている。モニタ回路15は、バススイッチ14からメモリ17および18に供給されるアドレス信号を監視し、監視により得た情報をタスク入出力データ制御回路10(ID1)~10(ID3)に供給する。タスク入出力データ制御回路10(ID1)~10(ID3)は、供給された情報に基づいて動作する。ここでは、説明を容易にするために、タスク入出力データ制御回路10(ID1)~10(ID3)が、供給された情報に基づいた管理テーブルを作成して、作成した管理テーブルに基づいて、動作するものとして説明する。勿論、タスク入出力データ制御回路10(ID1)~10(ID3)は、動作のために管理テーブルを作成しなくてもよい。
図35~図56は、実施の形態1に係わる管理テーブルを説明するための図である。ここで、図35~図46、図53および図54は、半導体装置2_1のタスク入出力データ制御回路10(ID1)で形成される管理テーブルを示し、図47~図52、図55および図56は、半導体装置2_3のタスク入出力データ制御回路10(ID3)で形成される管理テーブルを示している。半導体装置2_2のタスク入出力データ制御回路10(ID2)で形成される管理テーブルは、タスク入出力データ制御回路10(ID1)で形成される管理テーブルと類似しているため、説明は省略する。
図35~図56に示す管理テーブルの項目は、同一であるため、図35を用いて、先ず管理テーブルの項目を説明する。管理テーブルは、CTB1~CTB10の項目を備えている。
項目CTB1には、対象の転送モニタ領域が設定され、項目CTB2には、モニタ対象の半導体装置が設定される。項目CTB3には、対象の物理アドレスのベースアドレスと論理アドレスのベースアドレスが設定され、項目CTB4には、対象のモニタ領域の領域サイズが設定され、項目CTB5には、後で説明する1フラグ当たりのバイト数が設定される。
また、項目CTB6には、対象の転送モニタ領域への初回書き込み(ライト)時刻が設定され、項目CTB7には、対象の転送モニタ領域への最終書き込み(ライト)時刻が設定される。項目CTB8には、対象の転送モニタ領域に対する初回の読み出し(リード)時刻が設定され、項目CTB9には、対象の転送モニタ領域に対する最終の読み出し(リード)時刻が設定される。
項目CTB10は、対象の転送モニタ領域の状態が設定される。項目CTB10には、転送モニタ領域におけるアドレスを特定するオフセットアドレスと、a.ライトフラグと、b.リードフラグと、c.未参照フラグとが設けられている。a.ライトフラグには、モニタ回路15を用いたモニタを開始するときに、論理値“0”を設定し、対応するオフセットアドレスで特定されるアドレスに対して書き込みが行われた場合、a.ライトフラグには、論理値“1”を設定する。また、b.リードフラグには、論理値“0”を設定し、対応するオフセットアドレスで特定されるアドレスに対して読み出しが行われた場合、b.リードフラグには、論理値“1”を設定する。
c.未参照フラグには、(a.ライトフラグ)-(b.リードフラグ)を設定する。すなわち、対応するアドレスに対して書き込みが行われ、読み出しが行われていない場合、c.未参照フラグには、論理値“1”を設定し、対応するアドレスに対して書き込みが行われた後、読み出しが行われた場合、c.未参照フラグには、論理値“0”を設定する。なお、対応するアドレスに対して書き込みが行われていない場合も、c.未参照フラグには論理値“0”を設定する。また、項目CTB10には、a.ライトフラグ、b.リードフラグおよびc.未参照フラグの合計値が設定される。
<<<<半導体装置2_1における情報>>>>
図35~図40は、受信バッファを構成するメモリ17に対応する管理テーブルを示している。メモリ17に対応するために、項目CTB1には、メモリ17である転送モニタ領域0が設定され、項目CTB1には、半導体装置2_1(ID1)が設定されている。項目CTB4には、転送モニタ領域の領域サイズとして1024バイトが設定されている。また、項目CTB10におけるオフセットアドレスが、1バイト単位であるため、項目CTB5の1フラグ当たりのバイト数としては、1が設定されている。
図35は、モニタを開始したとき(モニタ開始時)の管理テーブルの状態を示し、図36は、初回ライト転送を検出したとき(初回ライト転送検出時(初回ライトが4バイトライトの場合))の状態を示している。また、図37は、1020バイトのライト転送を検出したとき(1020バイトライト検出直後)の状態を示し、図38は、全てのアドレスに対してのライト転送が検出された時(全てのアドレスでのライト転送検出時)の状態を示している。すなわち、受信バッファに対してライト転送が順次行われているときの管理テーブルの変化が、図35~図40として示されている。
モニタ開始時(図35)では、未だ読み出しも書き込みも実施されていないため、項目CTB6~CTB9は未設定である。また、項目CTB3のベースアドレスも未設定である。モニタ回路15では、バススイッチ14からメモリ17へのアクセスも検出されていないため、項目CTB10に設定されているオフセットアドレスにより特定されるアドレスへの書き込みおよび読み出しが行われていないため、項目CTB10は、図35に示すように、a.ライトフラグ、b.リードフラグおよびc.未参照フラグのいずれもが、論理値“0”に設定されている。
図36に示すように、スケジュール装置10(ID1)が、物理アドレスのベースアドレスを、00000Hに設定し、論理アドレスのベースアドレスを、20000Hに設定して、4バイトの書き込みが行われると、このときの時刻id1m0tw4が、初回ライト時刻および最終ライト時刻として設定される。一方、モニタ回路15によって、連続したオフセットアドレス0000H~0003Hへの4バイトの書き込みが検出され、タスク入出力データ制御回路10(ID1)に通知され、これらに対応するa.ライトフラグが、論理値”1”に変更されるとともに、これらに対応するc.未参照フラグも、論理値“1”に変更される。
1020バイトの書き込みが行われると、図37に示すように、そのときの時刻(id1m0tw1020)が、最終ライト時刻として設定される。また、モニタ回路15からの通知により、タスク入出力データ制御回路10(ID1)は、1020個のオフセットアドレスに対応するa.ライトフラグおよびc.未参照フラグを論理値“1”とする。1024バイトの書き込みが行われると、図38に示すように、オフセットアドレス0000H~03FFHに対応するa.ライトフラグおよびc.未参照フラグが論理値“1”と変更される。
プロセッサによって、メモリ17に対して読み出しが行われると、b.リードフラグ、c.未参照フラグが変更されるとともに、初回リード時刻および最終リード時刻が変更される。すなわち、初回リード転送検出時(初回リードが4バイトリードの場合)では、図30に示すように、初回リード時刻および最終リード時刻が、リード時刻id1m0tr4に設定される。また、モニタ回路15によって、連続したオフセットアドレス0000H~0003Hへの4バイトの読み出しが検出され、タスク入出力データ制御回路10(ID1)に通知される。これにより、タスク入出力データ制御回路10(ID1)は、これらのオフセットアドレスに対応するa.リードフラグを、論理値”1”に変更するとともに、これらに対応するc.未参照フラグを、論理値“0”に変更する。
メモリ17である転送モニタ領域0から、全てのアドレスでのリード転送が検出されたときには、図40に示すように、オフセットアドレス0000H~03FFHに対応するb.リードフラグが倫理値“1”に変更され、これらに対応するc.未参照フラグは論理値“0”に変更される。
これにより、タスク入出力データ制御回路11を含むスケジュール装置10(ID1)は、c.未参照フラグを参照することにより、プロセッサによって読み出されていないデータの数を把握することが可能である。
図41~図46は、演算バッファ(送信バッファ)を構成するメモリ18に対応した管理テーブルの状態を示している。図41~図46は、図35~図40に類似しているので、主に相異点を説明する。
モニタ開始時では、図41に示すように、項目CTB1として、演算バッファに対応する転送モニタ領域1を設定する。また、転送モニタ領域1のサイズとして256バイトを設定する。モニタ開始時であるため、項目CT10に示すオフセットアドレスに対応する
a.ライトフラグ、b.リードフラグおよびc.未参照フラグのいずれもが、論理値“0”に設定されている。
プロセッサによる初回ライト転送検出時(初回ライトが4バイトの場合)では、図42に示すように、物理アドレスのベースアドレスが10000Hに設定され、論理アドレスのベースアドレスが30000Hに設定され、そのときの時刻(id1m1tw4)が、初回ライト時刻および最終ライト時刻として設定される。また、モニタ回路15からの検出結果に基づいて、タスク入出力データ制御回路11は、オフセットアドレス0000H~0003Hに対応するa.ライトフラグおよびc.未参照フラグを、論理値“1”に変更する。
プロセッサによる演算バッファへの書き込みが進み、252バイトの書き込みが行われると、図43に示すように、252個のa.ライトフラグおよびc.未参照フラグが論理値“1”に変更され、そのときの時刻(id1m1tw252)が、最終ライト時刻として設定される。さらに、全てのアドレスでのライト転送が検出されると、図44に示すように、256個のa.ライトフラグおよびc.未参照フラグが論理値“1”に変更され、そのときの時刻(id1m1tw256)が、最終ライト時刻として設定される。
一方、スケジュール装置10(ID1)によって、メモリ18に対して読み出しが行われると、b.リードフラグ、c.未参照フラグが変更されるとともに、初回リード時刻および最終リード時刻が変更される。図45に示すように、初回リード転送動作検出時(初回リードが4バイトの場合)には、そのときの時刻(id1m1tr4)が、初回リード時刻および最終リード時刻として設定される。また、モニタ回路15からの検出結果に従って、タスク入出力データ制御回路11は、オフセットアドレス0000H~0003Hに対応するb.リードフラグを論理値“1”に変更し、対応するc.未参照フラグを論理値“0”に変更する。スケジュール装置10(ID1)による読み出しが進み、全てのアドレスでのリード転送が検出されたときには、図46に示すように、256個のb.リードフラグが論理値“1”に変更され、対応するc.未参照フラグが論理値“0”に変更される。このときの時刻(id1m1tr256)が、最終リード時刻として設定される。
これにより、タスク入出力データ制御回路11を含むスケジュール装置10(ID1)は、c.未参照フラグを参照することにより、プロセッサによって書き込まれたデータのうち読み出されていないデータの数を把握することが可能である。
<<<<半導体装置2_3における情報>>>>
半導体装置2_3においては、4つの転送モニタ領域(転送モニタ領域0~3)の情報を取得して、それぞれに対応した管理テーブルを作成する。それぞれの管理テーブルは類似しているので、ここでは転送モニタ領域0に対応する管理テーブルを説明する。
図47~図52は、図41~図46と類似している。相異点は、図47~図52においては、モニタ対象として半導体装置2_3が、項目CTB2に設定され、半導体装置2_3におけるメモリ17が、転送モニタ領域0として設定される点である。また、図47~図50においては、スケジュール装置10(ID3)による転送モニタ領域0へのライト転送が検出され、図51および図52では、プロセッサによる転送モニタ領域0からのリード転送が検出される点が異なっている。すなわち、図48では、スケジュール装置10(ID3)による初回ライト転送検出時(初回ライトが4バイトライトの場合)が示され、図49には、スケジュール装置10(ID3)による252バイトライト検出直後が示され、図50には、スケジュール装置10(ID3)による全てのアドレスでのライト転送検出時が示されている。また、図51には、プロセッサによる初回リード検出時(初回リードが4バイトリードの場合)が示され、図52には、プロセッサによる全てのアドレスでのリード転送検出時が示されている。なお、図47には、モニタ開始時が示されている。
図53には、図46に示した状態から、再度オフセットアドレス0004H~0007Hに書き込みが行われたときの状態が示されている。この場合、モニタ回路15によって、当該オフセットアドレスへの書き込みアクセスが検出され、タスク入出力データ制御回路11は、当該オフセットアドレスに対応するb.リードフラグを論理値“0”に変更し、対応するc.未参照フラグを論理値“1”に変更する。
また、図54には、図53に示した状態から、再度全てのアドレスでのリード転送が検出されたときの状態が示されている。この場合、タスク入出力データ制御回路11は、モニタ回路15による検出に基づいて、オフセットアドレス0004H~0007Hに対応するb.リードフラグを論理値“1”に変更し、対応するc.未参照フラグを論理値“0”に変更する。
さらに、図55には、図54の後で、半導体装置2_3における転送モニタ領域0において、再度オフセットアドレス0004H~0007Hにライトが行われた場合が示されている。タスク入出力データ制御回路11は、当該オフセットアドレスに対応するb.リードフラグを論理値“0”に変更し、対応するc.未参照フラグを論理値“1”に変更する。また、図56には、図55の後で、再度全てのアドレスでのリード転送が検出されたときの状態が示されている。この場合、タスク入出力データ制御回路11は、モニタ回路15による検出に基づいて、オフセットアドレス0004H~0007Hに対応するb.リードフラグを論理値“1”に変更し、対応するc.未参照フラグを論理値“0”に変更する。
<<<ネットワークシステムの動作>>>
実施の形態1に係わるネットワークシステム1においては、データ送信装置3から送信されたフレームに対して実施する演算(フィルタ演算および出力演算)が、半導体装置2_1~2_3に分散され、実施される。すなわち、フィルタ演算は、フィルタ演算Aとフィルタ演算Bに分けられ、半導体装置2_1および2_2において実施され、フィルタ演算AおよびBの演算結果に対して、半導体装置2_3において出力演算が実施される。これらの演算を実施する際の半導体装置2_1~2_3の動作を次に説明する。図57~図60は、実施の形態1に係わるネットワークシステムにおける半導体装置の動作を示すタイミング図である。
図57および図58は、半導体装置2_1と2_3に係わる動作を示しており、図57の下側に、図58を配置することにより、半導体装置2_1と2_3の動作を示すタイミング図となる。同様に、図59および図60は、半導体装置2_2と2_3に係わる動作を示しており、図59の下側に、図60を配置することにより、半導体装置2_2と2_3の動作を示すタイミング図となる。
図57において、半導体装置2_1が受信フレームを受信すると、タスク入出力データ制御回路11は、受信バッファを構成するメモリ17のバンクウェイ17_0~17_3に、受信フレームのデータを書き込む。このとき、タスク入出力データ制御回路11は、モニタ回路15を用いて、バンクウェイ17_0~17_3のそれぞれに書き込まれたデータが、所定のデータ量(1024バイト)に到達したか否かを監視する。
バンクウェイ17_0~17_3に書き込まれたデータが所定のデータ量に到達すると、タスク入出力データ制御回路11を含むスケジュール装置10(ID1)は、図12に示した転送モニタ領域0設定レジスタ:700_0の「対象領域のブロック割り当て制約」に従って、バンクウェイ17_0~17_3をブロック0~3に割り当て、2つのブロック単位に対してプロセッサCPU1、CPU2を割り当て、フィルタ演算A用タスクを起動する。これにより、プロセッサCPU1、CPU2は、バンクウェイ17_0~17_3から、データを読み出し(図57:CPU1(f01-R)、CPU2(f23-R))、フィルタ演算Aを実行し、フィルタ演算Aの演算結果を、送信バッファ(演算バッファ)を構成するメモリのバンクウェイ18_0~18_3に、図12に示した転送モニタ領域1設定レジスタ:700_1の「対象領域のブロック割り当て制約」に示したブロック0~7として、書き込む(図57:CPU1(f01-W)、CPU2(f23-W))。
このとき、タスク入出力データ制御回路11は、モニタ回路15を用いて、バンクウェイ18_0~18_3において未送信のデータ量が所定のデータ量(256バイト)に到達したか否かを監視する。バンクウェイ18_0~18_3に書き込まれ、未送信のデータ量が、所定のデータ量(256バイト)に到達すると、タスク入出力データ制御回路11は、バンクウェイ18_0~18_3に書き込まれているデータをフレーム130~133として、半導体装置2_3へ送信(通信)する。
半導体装置2_3においては、タスク入出力データ制御回路11が、半導体装置2_1から受信したフレーム130~133を、受信フレームを構成するメモリ17のバンクウェイ17_0、17_1に書き込む。このとき、半導体装置2_3におけるタスク入出力データ制御回路11は、モニタ回路15を用いて、バンクウェイ17_0、17_1に書き込まれたデータのデータ量が所定のデータ量(256バイト)に到達したか否かを監視する。所定のデータ量のデータが、バンクウェイ17_0、17_1に書き込まれると、タスク入出力データ制御回路11を含むスケジュール装置10(ID3)は、出力演算A用タスクを起動する。これにより、半導体装置2_3におけるプロセッサCPU1,CPU2は、バンクウェイ17_0、17_1に書き込まれたデータを読み出し(図58:CPU1(fg01-R)、CPU2(fg23-R))、出力演算Aを実行して、出力演算Aの演算結果を、演算バッファ(送信バッファ)を構成するメモリ18のバンクウェイ18_0、18_2に書き込む(図58:CPU1(fg01-W)、CPU2(fg23-W))。
すなわち、半導体装置2_1においては、送信バッファに所定のデータ量だけ、フィルタ演算Aの演算結果(未送信データ)が書き込まれると、自動的に、半導体装置2_3へ送信される。半導体装置2_3においても、受信バッファに所定のデータ量が書き込まれると、出力演算A用タスクが自動的に起動される。すなわち、半導体装置2_3においては、優先的に出力演算A用タスクが起動されることになる。
フィルタ演算A用タスクは、半導体装置2_1において実行され、出力演算A用タスクは、半導体装置2_3において実行される。また、出力演算A用タスクは、半導体装置2_3に所定のデータ量が書き込まれると起動されるため、図57および図58に示すように、フィルタ演算A用タスクと出力演算A用タスクが並列的に実行されることになる。その結果、実施の形態1によれば、図57および図58に示すように、フィルタ演算Aおよび出力演算Aを、タイミング制約1を満たすように、実施することが可能である。
半導体装置2_2および2_3においても、半導体装置2_1および2_3と同様に動作する。すなわち、半導体装置2_2においては、モニタ回路15による監視により、バンクウェイ17_0~17_3に所定のデータ量のデータが書き込まれたと判定されると、図59に示すように、プロセッサCPU1、CPU2によって読み出しが実行される(CPU1(f12-R)、CPU2(f34-R))。また、読み出したデータを用いたフィルタ演算Bが実施され、バンクウェイ18_0~18_3に書き込みが実施される(図59:CPU1(f12-W)、CPU2(f34-W))。バンクウェイ18_0~18_3への書き込みも、モニタ回路15によって監視され、所定のデータ量に到達すると、フレーム230~233として、半導体装置2_3へ送信(通信)される。
半導体装置2_3においては、受信したフレーム230~233が、バンクウェイ17_2、17_3に書き込まれる。バンクウェイ17_2、17_3に書き込まれたフレームのデータ量が、所定のデータ量に到達したか否かが、モニタ回路15を用いて監視され、所定のデータ量に到達すると、出力演算B用タスクが起動される。すなわち、バンクウェイ17_2、17_3からデータが読み出され(図60:CPU1(fg12-R)、CPU2(fg34-R))、出力演算Bが実施されて、バンクメモリ18_1、18_3へ書き込まれる(図60:CPU1(fg12-W)、CPU2(fg34-W))。
これにより、フィルタ演算Bおよび出力演算Bも、図59および図60に示すように、タイミング制約1を満たすように実施することが可能である。
フィルタ演算A用タスクとフィルタ演算B用タスクは、半導体装置2_1および2_2において、並列的に実施され、出力演算A用タスクおよび出力演算B用タスクは、半導体装置2_3において、並列的に実施される。その結果、フィルタ演算および出力演算を、タイミング制約1を満たすように、実施することが可能である。
前記した管理テーブルは、アクセスモニタ回路15が備えていてもよい。この場合、管理テーブルは、アドレス領域内を細分化した各々のアドレス領域毎に、転送すべきデータが格納されているか否かを示す情報、または/およびアクセス時刻に関する情報、を保持している。スケジュール装置は、アクセスモニタ回路15から提供される情報に基づいて、細分化した各々のアドレス領域に格納されているデータの中から、送信バッファに滞留している時間が長いデータ、または/およびタイミング制約の厳しいタスクで参照されるデータ、または/および実行優先度が高く設定されているタスクで参照されるデータ、を選択して優先的に転送するように動作する。また、半導体装置2_3にデータが転送される場合、半導体装置2_3におけるアクセスモニタ回路は、半導体装置2_3の第1アドレス領域内を細分化した各々のアドレス領域毎に、転送元の半導体装置のメモリから転送されたデータが格納されているか否かを示す情報、または/およびアクセス時刻に関する情報、を保持している管理テーブルの状態をリアルタイムに更新する。また、半導体装置2_3におけるアクセスモニタ回路は、管理テーブルの状態に基づいて、転送元の半導体装置のメモリから、半導体装置2_3の第1アドレス領域に転送完了したデータ量に関する情報を、半導体装置2_3におけるスケジュール装置に、リアルタイムに提供する。この場合、半導体装置2_3におけるスケジュール装置は、アクセスモニタ回路から提供される情報に基づいて、第1アドレス領域に転送されたデータを参照するタスクを起動する、または/および第1アドレス領域に転送されたデータを参照するタスクの実行優先順位を変更する。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。