以下、本発明の実施の形態を、図面を参照して説明する。
図1は、実施の形態の概要を示す図である。送信装置1と受信装置2とは、複数の通信経路3a,3b,3cで接続されている。
送信装置1は、冗長転送部1a、データ分割転送部1b、および複数のデータ送信部1c,1d,1eを有している。
冗長転送部1aは、冗長転送の対象となるデータ4が入力されると、入力されたデータと同一内容の複数の冗長転送データ4a,4b,4cを複数の通信経路3a,3b,3cそれぞれに向けて転送することにより、複数の通信経路を介した冗長転送を行う。
データ分割転送部1bは、分割転送の対象となるデータ5が入力されると、入力されたデータ5を複数の分割データ5a,5b,5cに分割する。データ分割転送部1bは、分割した分割データ5a,5b,5cを複数の通信経路3a,3b,3cに振り分ける。そして、データ分割転送部1bは、分割データ5a,5b,5cを、振り分けられた通信経路3a,3b,3cに向けて転送することにより、複数の通信経路を介した分割転送を行う。
データ送信部1c,1d,1eは、複数の通信経路3a,3b,3cそれぞれに対応付けて設けられている。各データ送信部1c,1d,1eは、対応する通信経路3a,3b,3cに向けて冗長転送部1aまたはデータ分割転送部1bから転送された冗長転送データ4a,4b,4cまたは分割データ5a,5b,5cを受信する。そしてデータ送信部1c,1d,1eは、受信したデータを、対応する通信経路3a,3b,3cを介して受信装置2へ送信する。
受信装置2は、複数のデータ受信部2a,2b,2c、複数のデータ解析部2d,2e,2f、データ選択部2g、およびデータ合成部2hを有する。
データ受信部2a,2b,2cは、複数の通信経路3a,3b,3cそれぞれに対応付けて設けられている。そしてデータ受信部2a,2b,2cは、冗長転送データ4a,4b,4c、または分割データ5a,5b,5cを、対応する通信経路3a,3b,3cを介して送信装置1から受信する。
データ解析部2d,2e,2fは、複数のデータ受信部2a,2b,2cそれぞれに対応付けて設けられている。データ解析部2d,2e,2fは、対応するデータ受信部2a,2b,2cが受信したデータを解析する。そして、データ解析部2d,2e,2fは、受信したデータが、複数の通信経路3a,3b,3cを用いて同一データの冗長送信が行われた冗長転送データ4a,4b,4cなのか、または元データを分割することで得られたデータを複数の通信経路3a,3b,3cに分散してデータ転送が行われた分割データ5a,5b,5cなのかを判断する。データ解析部2d,2e,2fは、受信したデータが冗長転送データ4a,4b,4cであれば、その冗長転送データ4a,4b,4cをデータ選択部2gに送信する。また、データ解析部2d,2e,2fは、受信したデータが分割データ5a,5b,5cであれば、その分割データ5a,5b,5cをデータ合成部2hに送信する。
データ選択部2gは、複数のデータ解析部2d,2e,2fそれぞれからデータ4a,4b,4cを取得し、取得したデータ4a,4b,4cのうちの1つを選択する。例えば最初に入力されたデータが選択される。そしてデータ選択部2gは、選択したデータを出力する。
データ合成部2hは、複数のデータ解析部2d,2e,2fそれぞれから分割データ5a,5b,5cを取得する。データ合成部2hは、取得した分割データ5a,5b,5cを合成してデータ5を生成する。そしてデータ合成部2hは、生成したデータ5を出力する。
このような構成の送信装置1および受信装置2によれば、データ4は複数の通信経路3a,3b,3cで冗長転送データによる同一内容の重複伝送が行われる。また、データ5は、複数の通信経路3a,3b,3cで並列伝送が行われる。その結果、データ4の高信頼性とデータ5のデータ転送の高速性との両立を図ることが可能となる。
図1に示した伝送方式を複数のサーバが連携して動作するコンピュータシステムに適用することで、コンピュータシステムの高信頼性と高速性との両立を図ることができる。すなわち、複数のサーバが連携して動作するシステムでは、サーバが協働するために、適切なタイミングでコマンドの受け渡しを正確に行う必要がある。また、システム全体の性能の向上には、サーバ間のデータ伝送の高速化が必要である。
そこで、図1に示した通信方式を複数のサーバを連係動作させるシステムに適用した場合を例に採り、本実施の形態の詳細を説明する。
図2は、本実施の形態のシステム構成例を示す図である。図2に示すシステムは、複数の情報処理装置としてのサーバ100,100a,・・・と1台の共用(共有)メモリ装置200を有する。
サーバ100は、演算処理装置としてのCPU(Central Processing Unit)101、記憶装置としてのメモリ102、および転送制御ユニット110を有している。CPU101、メモリ102、および転送制御ユニット110は、内部バス103で互いに接続されている。CPU101は、サーバ100全体を制御する。メモリ102は、CPU101に実行させるプログラムや処理に必要なデータを記憶する。
転送制御ユニット110は、装置間インタフェースケーブル群10を介して共用メモリ装置200内の転送制御ユニット210に接続されている。転送制御ユニット110は、内部バス103を介して入力されたコマンドまたはデータを、装置間インタフェースケーブル群10を介して送信する。また、転送制御ユニット110は、装置間インタフェースケーブル群10を介して入力されたコマンドまたはデータを受信する。
サーバ100aもサーバ100と同様に、CPU101a、メモリ102a、および転送制御ユニット110aを有している。CPU101a、メモリ102a、および転送制御ユニット110aは、内部バス103aで互いに接続されている。転送制御ユニット110aは、装置間インタフェースケーブル群20を介して共用メモリ装置200内の転送制御ユニット220に接続されている。CPU101a、メモリ102a、および転送制御ユニット110aは、それぞれサーバ100内の同名の要素と同様の機能を有している。
共用メモリ装置200は、メモリ201、メモリ制御部202、システム構成制御部203、および複数の転送制御ユニット210,220,230,・・・を有している。メモリ制御部202、システム構成制御部203、および複数の転送制御ユニット210,220,230,・・・は、互いに内部バス204で接続されている。
メモリ201には、複数のサーバ100,100a,・・・で共有するデータが格納される。メモリ制御部202は、メモリ201への共有データの入出力を管理する。システム構成制御部203は、システム全体の構成を管理する。転送制御ユニット210,220,230,・・・は、それぞれ装置間インタフェースケーブル群10,20,30を介してサーバ100,100a,・・・に接続されている。そして、転送制御ユニット210,220,230,・・・は、サーバ100,100a,・・・とコマンドやデータの通信を行う。
装置間インタフェースケーブル群10,20,30は、それぞれ複数の装置間インタフェースケーブルを有している。この装置間インタフェースケーブルによってシリアル伝送を行うことができる。
このように、共用メモリ装置200は、サーバ間の共用データの管理をするだけでなく、システムの構成制御も行う。システムの構成制御では、例えば各サーバ100,100a,・・・が正常に動作しているか否かの確認処理などが行われる。サーバ間の共用データの各サーバ100,100a,・・・との間の送受信は、できるだけ高速に行われることが望まれる。また、システムの構成制御に関連するコマンドの送受信は、信頼性の高い伝送が望まれる。すなわち、図2に示した共用メモリ装置200と各サーバ100,100a,・・・との間の通信インタフェースには、高速転送と高信頼性転送との両立が必要である。
そこで、伝送制御ユニット間に複数の伝送路を設け、個々の伝送路で高速のシリアル伝送を行う。伝送すべきデータを分割して複数の伝送路で並行して送信すれば、高速伝送が可能となる。また、伝送すべきコマンドのコピーを生成し、複数の伝送路で同じコマンドを重複して送信すれば、高信頼性の伝送が可能となる。
図3は、転送制御ユニット間の接続関係を示す図である。図3には、サーバ100の転送制御ユニット110と共用メモリ装置200の転送制御ユニット210との間の接続関係を示している。
転送制御ユニット110内の送信装置111と転送制御ユニット210内の受信装置212との間は、装置間インタフェースケーブル群10に含まれる複数の装置間インタフェースケーブルで接続されている。同様に、転送制御ユニット210内の送信装置211と転送制御ユニット110内の受信装置112との間は、装置間インタフェースケーブル群10に含まれる複数の装置間インタフェースケーブルで接続されている。
図4は、送信装置と受信装置との間のインタフェースの詳細を示す図である。送信装置111は、出力変換器111aを有している。出力変換器111aには、送信側コマンドバス111bと送信側ストアデータバス111cとが接続されている。送信側コマンドバス111bは、共用メモリ装置200に送信するコマンドを伝送する内部バスである。送信側ストアデータバス111cは、共用メモリ装置200に格納するデータを伝送する内部バスである。
また、出力変換器111aには、複数の送信モジュール141,142,143,・・・,14nが接続されている。ここで、送信モジュール141,142,143,・・・,14nがn個(nは自然数)であり、それぞれの識別情報をTX1,TX2,TX3,・・・,TXnとする。識別情報の「TX」に続く数値は、送信モジュール141,142,143,・・・,14nに対して付与された1から順の識別番号である。
出力変換器111aは、システムの構成制御を行うコマンドを、送信側コマンドバス111bを介して受け取る。コマンドの伝送には信頼性が要求される。そのため、出力変換器111aは、入力されたコマンドを含むn個のコマンドパケットを生成する。そして、出力変換器111aは、生成された各コマンドパケットを各送信モジュール141,142,143,・・・,14nに出力する。送信モジュール141,142,143,・・・,14nは入力されたコマンドパケットをシリアル形式の信号に変換する。そして、送信モジュール141,142,143,・・・,14nは、シリアル形式の信号に変換されたパケットを、装置間インタフェースケーブル11,12,13,・・・,1nを介して受信装置に送信する。
また、出力変換器111aは、送信側ストアデータバス111cを介してストアデータを受け取る。ストアデータはシステムの性能に関係するので高速性が要求される。そのため、出力変換器111aは、ストアデータを所定のデータ長(例えば512バイト)の複数の単位データに分割する。そして、出力変換器111aは、識別情報が「TX1」〜「TX(n−1)」の各送信モジュールに単位データを割り当てる。出力変換器111aは、識別情報が「TXn」の送信モジュールには、単位データ「n−1」個に対応する復元用冗長データを割り当てる。さらに、出力変換器111aは、送信モジュール141,142,143,・・・,14nごとに、割り当てた単位データを所定個数纏めてストアデータパケットを生成する。そして、出力変換器111aは、各送信モジュール141,142,143,・・・,14nに対して対応するストアデータパケットを出力する。各送信モジュール141,142,143,・・・,14nは入力されたストアデータパケットをシリアル形式の信号に変換する。そして、送信モジュール141,142,143,・・・,14nは、シリアル形式の信号に変換されたストアデータパケットを、装置間インタフェースケーブル11,12,13,・・・,1nを介して受信装置212に送信する。
受信装置212は、入力変換器212aを有している。入力変換器212aには、受信側コマンドバス212bと受信側ストアデータバス212cとが接続されている。受信側コマンドバス212bは、システム構成制御部203に送信するコマンドを伝送する内部バスである。受信側ストアデータバス212cは、メモリ201に格納するデータを伝送する内部バスである。
また、入力変換器212aには、複数の受信モジュール241,242,243,・・・,24nが接続されている。ここで、受信モジュール241,242,243,・・・,24nがn個(nは自然数)であり、それぞれの識別情報をRX1,RX2,RX3,・・・,RXnとする。識別情報の「RX」に続く数値は、受信モジュール241,242,243,・・・,24nに対して付与された1から順の識別番号である。
受信モジュール241,242,243,・・・,24nは、装置間インタフェースケーブル11,12,13,・・・,1nからシリアル信号のパケットを受信する。そして、受信モジュール241,242,243,・・・,24nは、シリアル信号を解析してパケットを構成し、入力変換器212aに転送する。
入力変換器212aは、送信装置111から送られたパケットを受信モジュール241,242,243,・・・,24nを介して取得する。そして、入力変換器212aは、取得したパケットがコマンドパケットなのかストアデータパケットなのかを判断する。取得したパケットがコマンドパケットであれば、入力変換器212aは、各受信モジュール241,242,243,・・・,24nから受信したコマンドパケットのうち、最初に正しく受信したコマンドパケットのみを取得する。入力変換器212aは、2つ目以降のコマンドは破棄する。そして、入力変換器212aは、取得したコマンドパケットに含まれるコマンドデータのみを受信側コマンドバス212bを介してシステム構成制御部203に送信する。
また、入力変換器212aは、取得したパケットがストアデータであれば、各受信モジュール241,242,243,・・・,24nから受信したストアデータパケットから単位データを抽出し、ストアデータを再構成する。そして、入力変換器212aは、取得したストアデータを受信側ストアデータバス212cを介してメモリ制御部202に送信する。
次に、出力変換器111a内部構造について詳細に説明する。
図5は、出力変換器の内部構造を示す図である。出力変換器111aは、コマンドパケット作成回路40、ストアデータパケット作成回路50、およびセレクタ61,62,63,・・・,6nを有している。
コマンドパケット作成回路40の入力側端子は、送信側コマンドバス111bに接続されている。また、コマンドパケット作成回路40の1つの出力側端子は、複数のセレクタ61,62,63,・・・,6nに接続されている。コマンドパケット作成回路40は、送信側コマンドバス111bを介してコマンドデータを受け取る。コマンドパケット作成回路40は、受け取ったコマンドデータに基づいて1つのコマンドパケットを作成する。そして、コマンドパケット作成回路40は、作成したコマンドパケットを各セレクタ61,62,63,・・・,6nに送信する。
ストアデータパケット作成回路50の入力側端子は、送信側ストアデータバス111cに接続されている。また、ストアデータパケット作成回路50のn個の出力側端子は、それぞれセレクタ61,62,63,・・・,6nに接続されている。ストアデータパケット作成回路50は、送信側ストアデータバス111cを介してストアデータを受け取る。ストアデータパケット作成回路50は、受け取ったストアデータに基づいてn個のストアデータパケットを作成する。そして、ストアデータパケット作成回路50は、セレクタ61,62,63,・・・,6nに対し、作成したストアデータパケットを1つずつ送信する。すなわち、各セレクタ61,62,63,・・・,6nには、生成されたn個のストアデータパケットのうちの1つが送信される。また、生成された各ストアデータパケットは、いずれか1つのセレクタに送信される。
セレクタ61,62,63,・・・,6nは、入力されたコマンドパケットまたはストアデータパケットを対応する送信モジュール141,142,143,・・・,14nに転送する。具体的には、セレクタ61,62,63,・・・,6nは、コマンドパケットとストアデータパケットとのいずれも入力されていない状態でいずれかのパケットが入力された場合、入力されたパケットを送信モジュール141,142,143,・・・,14nに転送する。また、セレクタ61,62,63,・・・,6nは、コマンドパケットまたはストアデータパケットの転送中に、他方のパケットの入力があると、後から入力されたパケットの転送を一旦待機させる。そして、セレクタ61,62,63,・・・,6nは、転送中のパケットの転送完了後、待機させていたパケットの転送を行う。
このような出力変換器111aに送信側コマンドバス111bを介してコマンドデータが入力されると、そのコマンドデータに基づいてコマンドパケット作成回路40によって1個のコマンドパケットに変換される。そして、生成されたコマンドパケットが各セレクタ61,62,63,・・・,6nに送信される。送信されたコマンドパケットは、セレクタ61,62,63,・・・,6nを介して送信モジュール141,142,143,・・・,14nに転送される。そして、同じ内容のコマンドパケットが、各送信モジュール141,142,143,・・・,14nから装置間インタフェースケーブル11,12,13,・・・,1nに送出される。
また、出力変換器111aに送信側ストアデータバス111cを介してストアデータが入力されると、そのストアデータに基づいてストアデータパケット作成回路50によってn個のストアデータパケットが生成される。そして、生成されたストアデータパケットが、それぞれセレクタ61,62,63,・・・,6nに送信される。送信されたストアデータパケットは、セレクタ61,62,63,・・・,6nを介して送信モジュール141,142,143,・・・,14nに転送される。そして、個別のストアデータパケットが、各送信モジュール141,142,143,・・・,14nから装置間インタフェースケーブル11,12,13,・・・,1nに送出される。
次に、コマンドパケット作成回路40、ストアデータパケット作成回路50、およびセレクタ61,62,63,・・・,6nで実行される処理の処理手順について説明する。
図6は、コマンドパケット作成処理の手順を示すフローチャートである。以下、図6に示す処理をステップ番号に沿って説明する。
[ステップS11]コマンドパケット作成回路40は、送信側コマンドバス111bよりコマンドデータを受信する。
[ステップS12]コマンドパケット作成回路40は、受信したコマンドデータにパケット情報を付加してコマンドパケットを生成する。ここでパケット情報には、パケットの識別番号などが含まれる。
[ステップS13]コマンドパケット作成回路40は、コマンドパケットをn個のセレクタ61,62,63,・・・,6nに送信する。
図7は、ストアデータパケット作成処理の手順を示すフローチャートである。以下、図7に示す処理をステップ番号に沿って説明する。
[ステップS21]ストアデータパケット作成回路50は、送信側ストアデータバス111cよりストアデータを受信する。
[ステップS22]ストアデータパケット作成回路50は、ストアデータを分割し、(n−1)個の送信モジュールに割り当てる。具体的には、ストアデータパケット作成回路50は、ストアデータを所定データ長の単位データに分割し、単位データを先頭から順に、(n−1)個の送信モジュール(識別情報が「TX1」〜「TX(n−1)」の送信モジュール)に対して割り当てる。各送信モジュールに振り分けられた単位データの配列が、送信モジュールごとのデータ列となる。
[ステップS23]ストアデータパケット作成回路50は、復元用冗長データを作成する。具体的には、ストアデータパケット作成回路50は、送信モジュールに割り当てられた1つずつの単位データに基づいて、単位データと同じサイズの1つの復元用冗長データを作成する。このような復元用冗長データが、(n−1)個の送信モジュールそれぞれに割り当てられた単位データの数と同数だけ作成される。すなわち、復元用冗長データを並べた復元用冗長データ列が作成される。
[ステップS24]ストアデータパケット作成回路50は、送信モジュールごとの単位データ列または復元用冗長データ列を、所定長のブロックに分割する。各ブロックは、所定数の単位データまたは復元用冗長データを含んでいる。
[ステップS25]ストアデータパケット作成回路50は、各ブロックにパケット情報を付加して、送信モジュールごとのストアデータパケットを生成する。送信モジュールごとのストアデータパケットには、1以上のブロックが含まれる。パケット情報には、パケットの識別番号が含まれる。パケットの識別番号は、送信モジュールごとのストアデータパケットに共通の値が付与される。
[ステップS26]ストアデータパケット作成回路50は、n個のストアデータパケットをn個のセレクタに送信する。
図8は、パケット送信処理の手順を示すフローチャートである。以下、図8に示す処理をステップ番号に沿って説明する。
[ステップS31]各セレクタ61,62,63,・・・,6nは、コマンドパケットまたはストアデータパケットが入力されると、入力されたパケットを選択する。コマンドパケットまたはストアデータパケットが同時期に入力された場合、セレクタ61,62,63,・・・,6nは、入力された順にパケットを選択する。そして、セレクタ61,62,63,・・・,6nは、選択したパケットを対応する送信モジュール141,142,143,・・・,14nに転送する。
[ステップS32]送信モジュール141,142,143,・・・,14nは、入力されたパケットをシリアル形式で装置間インタフェースケーブル11,12,13,・・・,1nを介して伝送する。
次に、出力変換器111aの内部回路について、図9〜図11を参照して説明する。
図9は、出力変換器の内部回路を示す第1の図である。なお、図9において信号を示す線に対して斜線と共に付加した数値は、各信号線の本数を示している(図10、図11、図19〜図22においても同様)。
図9には、コマンドパケット作成回路40の主要部が示されている。書き込みアドレス回路(RF_WCT_COPY)41には、書き込みアドレス有効信号(tx_rf_read_go_async)と書き込みアドレス(I_PREP_RF_INQCT_COPY)とが入力されている。書き込みアドレス有効信号(tx_rf_read_go_async)は書き込みアドレス(I_PREP_RF_INQCT_COPY)が有効であることを意味する信号である。書き込みアドレス(I_PREP_RF_INQCT_COPY)は、送信コマンドバッファ45の書き込みアドレスを指示する信号である。書き込みアドレス回路41は、書き込みアドレス有効信号(tx_rf_read_go_async)または書き込みアドレス(I_PREP_RF_INQCT_COPY)に基づいて、送信コマンドバッファ45の書き込みアドレスを生成する。書き込みアドレス回路41からは、書き込みアドレス(tx_rf_wadrs)と書き込み許可信号(tx_rf_we)とが出力される。
比較回路(RF_RWCT_COMP)42には、書き込みアドレス回路41から出力される書き込みアドレス(tx_rf_wadrs)と、読み出しアドレス回路(RF_RCT)43から出力される読み出しアドレス(tx_rf_fch_radrs)とが入力される。比較回路42は、書き込みアドレス(tx_rf_wadrs)と読み出しアドレス(tx_rf_fch_radrs)とが一致するか否かを判断する。比較回路42は、アドレスが不一致の場合、不一致信号(tx_rf_rw_uncomp)を出力する。
読み出しアドレス回路43には、送信コマンドバッファ制御回路(RF_READ_CTRL)44より出力された読み出しアドレスインクリメント信号(tx_rf_adrs_ctup)が入力される。読み出しアドレスインクリメント信号(tx_rf_adrs_ctup)は、送信コマンドバッファ(TX_RF)45の読み出しアドレスのインクリメントを指示する信号である。読み出しアドレス回路43は、読み出しアドレスインクリメント信号が入力されるごとに、出力する読み出しアドレスの値をインクリメントする。そして、読み出しアドレス回路43は、インクリメントした読み出しアドレス(tx_rf_fch_radrs)を出力する。
送信コマンドバッファ制御回路44には、読み出しアドレス回路43から出力された読み出しアドレス(tx_rf_fch_radrs)と、比較回路42から出力された不一致信号(tx_rf_rw_uncomp)とが入力される。送信コマンドバッファ制御回路44は、不一致信号(tx_rf_rw_uncomp)が入力されている間、送信コマンドバッファ45からの逐次的なデータの読み出しを指示する。すなわち、送信コマンドバッファ制御回路44は、読み出しアドレス回路43から入力された読み出しアドレス(tx_rf_fch_radrs)と同じ値の読み出しアドレス(O_PREP_TX_RF_RADRS)と、読み出し許可信号(O_PREP_TX_RE)とを送信コマンドバッファ45に出力する。その後、読み出しアドレス回路43に対して読み出しアドレスインクリメント信号(tx_rf_adrs_ctup)を出力する。
送信コマンドバッファ制御回路44は、不一致信号(tx_rf_rw_uncomp)が入力されていれば、以後同様に、読み出しアドレス(O_PREP_TX_RF_RADRS)と読み出し許可信号(O_PREP_TX_RE)との出力を繰り返す。不一致信号(tx_rf_rw_uncomp)とが入力されていない場合、送信コマンドバッファ45の書き込みアドレス(tx_rf_wadrs)と読み込みアドレス(tx_rf_fch_radrs)とが一致している。すなわち、送信コマンドバッファ45に書き込まれたコマンドデータはすべて読み出されているため、送信コマンドバッファ制御回路44による読み出しのためのアドレスのカウントアップ等の処理が停止する。
また、送信コマンドバッファ制御回路44は、読み出しアドレスのインクリメント回数に基づいて、1パケット分のデータ長(コマンドパケット長)を計算する。そして、送信コマンドバッファ制御回路44は、コマンドパケット長データ(tx_packet_length(cmd))を出力する。
送信コマンドバッファ45には、送信側コマンドバス111bが入力される。送信側コマンドバス111bで入力されるデータには、送信データ(I_TX_RF_RDATA)、パリティ値(I_TX_PARITY)、付加データ(I_TX_RF_TAG)が含まれる。また、送信コマンドバッファ45には、書き込みアドレス回路41より出力された書き込みアドレス(tx_rf_wadrs)と書き込み許可信号(tx_rf_we)とが入力される。送信コマンドバッファ45は、書き込み許可信号(tx_rf_we)が入力されると、そのときの書き込みアドレス(tx_rf_wadrs)で指定されている記憶領域へ、送信側コマンドバス111bを介して入力されたデータを格納する。
さらに、送信コマンドバッファ45には、送信コマンドバッファ制御回路44より出力された読み出しアドレス(O_PREP_TX_RF_RADRS)と読み出し許可信号(O_PREP_TX_RE)とが入力される。送信コマンドバッファ45は、読み出し許可信号(O_PREP_TX_RE)が入力されると、そのときの読み出しアドレス(O_PREP_TX_RF_RADRS)で指定されている記憶領域からデータを読み出し、出力する。出力されるデータには、読み出しデータ(I_PREP_TX_RF_RDATA)、パリティ値(I_PREP_TX_PARITY)、付加データ(I_PREP_TX_RF_TAG)が含まれる。
Valid信号生成回路(RF_VAL_GEN)46には、送信コマンドバッファ制御回路44より出力された読み出し許可信号(O_PREP_TX_RE)と、送信コマンドバッファ45から出力された読み出しデータ(I_PREP_TX_RF_RDATA)とが入力される。Valid信号生成回路46は、読み出し許可信号(O_PREP_TX_RE)に応じて送信コマンドバッファ45から出力された読み出しデータ(I_PREP_TX_RF_RDATA)についての有効信号であるValid信号を生成する。そして、Valid信号生成回路46は、送信コマンドのValid信号(tx_cmd_val)、送信コマンドの種類ごとにコード化したValid信号(tx_valid_out(cmd))、送信コマンドでCRC(Cyclic Redundancy Check)の対象となるタイミング信号(tx_crc_val(cmd))を出力する。
図10は、出力変換器の内部回路を示す第2の図である。図10には、ストアデータパケット作成回路50の主要部が示されている。
書き込みアドレス回路(RAM_WCT_COPY)51には、書き込みアドレス有効信号(tx_ram_read_go_async)、書き込みアドレス(I_PREP_RAM_INQCT_COPY)、およびアドレスインクリメント終了信号(tx_fetch_end_async)が入力されている。書き込みアドレス有効信号(tx_ram_read_go_async)は、書き込みアドレス(I_PREP_RAM_INQCT_COPY)が有効であることを意味する信号である。書き込みアドレス(I_PREP_RAM_INQCT_COPY)は、送信ストアデータバッファ55の書き込みアドレスを指示する信号である。アドレスインクリメント終了信号(tx_fetch_end_async)は、送信ストアデータバッファ55の書き込みアドレスのインクリメントの終了を指示する信号である。書き込みアドレス回路51は、送信ストアデータバッファ55の書き込みアドレスを生成する。具体的には、書き込みアドレス回路51は、書き込みアドレス有効信号(tx_ram_read_go_async)が入力されると、アドレスインクリメント終了信号(tx_fetch_end_async)が入力されるまで、書き込みアドレス(I_PREP_RAM_INQCT_COPY)が書き込みアドレス(tx_ram_wadrs)に出力され、同時に書き込み許可信号(tx_ram_we)が出力される。また、書き込みアドレス回路51は、書き込みアドレス(I_PREP_RAM_INQCT_COPY)が入力されると、指定されたアドレスを書き込みアドレスとする。
比較回路52には、書き込みアドレス回路51から出力される書き込みアドレス(tx_ram_wadrs)と、読み出しアドレス回路(RAM_RCT)53から出力される読み出しアドレス(tx_ram_fch_radrs)とが入力される。比較回路52は、書き込みアドレス(tx_ram_wadrs)と読み出しアドレス(tx_ram_fch_radrs)とが一致するか否かを判断する。比較回路52は、アドレスが一致する場合、一致信号(tx_ram_rw_comp)を出力する。
読み出しアドレス回路53には、アドレスインクリメント終了信号(tx_fetch_end_async)と、送信ストアデータバッファ制御回路54より出力された読み出しアドレスインクリメント信号(tx_ram_adrs_ctup)とが入力される。読み出しアドレスインクリメント信号(tx_ram_adrs_ctup)は、送信ストアデータバッファ55の読み出しアドレスのインクリメントを指示する信号である。読み出しアドレス回路53は、アドレスインクリメント終了信号(tx_fetch_end_async)が入力されるまで、読み出しアドレスインクリメント信号が入力されるごとに、出力する読み出しアドレスの値をインクリメントする。そして、読み出しアドレス回路53は、インクリメントした読み出しアドレス(tx_ram_fch_radrs)を出力する。
送信ストアデータバッファ制御回路54には、フェッチデータ長(I_PREP_FETCH_LENGTH)、読み出しアドレス回路53から出力された読み出しアドレス(tx_ram_fch_radrs)、および比較回路52から出力された一致信号(tx_ram_rw_comp)が入力される。送信ストアデータバッファ制御回路54は、一致信号(tx_ram_rw_comp)が入力されていなければ、送信ストアデータバッファ55からの逐次的なデータの読み出しを指示する。すなわち、送信ストアデータバッファ制御回路54は、読み出しアドレス回路53から入力された読み出しアドレス(tx_ram_fch_radrs)と同じ値の読み出しアドレス(O_PREP_MACx_FCH_RADRS)と、読み出し許可信号(O_PREP_MACx_FCH_RE)とを送信ストアデータバッファ55に出力する。その後、読み出しアドレス回路53に対して読み出しアドレスインクリメント信号(tx_ram_adrs_ctup)を出力する。
送信ストアデータバッファ制御回路54は、送信ストアデータバッファ55から読み出されたデータがフェッチデータ長(I_PREP_FETCH_LENGTH)に達するまで、読み出しアドレス(O_PREP_MACx_FCH_RADRS)と読み出し許可信号(O_PREP_MACx_FCH_RE)との出力を繰り返す。また、送信ストアデータバッファ制御回路54は、読み出し許可信号(O_PREP_MACx_FCH_RE)のコピー信号(tx_ram_fch_re_copy)を出力する。
さらに、送信ストアデータバッファ制御回路54は、読み出しアドレスのインクリメント回数に基づいて、1パケット分のデータ長(ストアデータパケット長)を計算する。そして、送信ストアデータバッファ制御回路54は、ストアデータパケット長データ(tx_packet_length(data))を出力する。
送信ストアデータバッファ55には、送信側ストアデータバス111cが入力される。送信側ストアデータバス111cで入力されるデータには、送信データ(I_MACx_FCH_RDATA)、ECC(Error Correcting Code)値(I_MACx_FCH_RECC)、付加データ(I_MACx_FCH_PAD)が含まれる。また、送信ストアデータバッファ55には、書き込みアドレス回路51より出力された書き込みアドレス(tx_rf_wadrs)と書き込み許可信号(tx_ram_we)とが入力される。送信ストアデータバッファ55は、書き込み許可信号(tx_ram_we)が入力されると、そのときの書き込みアドレス(tx_rf_wadrs)で指定されている記憶領域へ、送信側ストアデータバス111cを介して入力されたデータを格納する。
さらに、送信ストアデータバッファ55には、送信ストアデータバッファ制御回路54より出力された読み出しアドレス(O_PREP_MACx_FCH_RADRS)と読み出し許可信号(O_PREP_MACx_FCH_RE)とが入力される。送信ストアデータバッファ55は、読み出し許可信号(O_PREP_MACx_FCH_RE)が入力されると、そのときの読み出しアドレス(O_PREP_MACx_FCH_RADRS)で指定されている記憶領域からデータを読み出し、出力する。出力されるデータには、読み出しデータ(I_PREP_MACx_FCH_RDATA)、ECC値(I_PREP_MACx_FCH_RECC)、および付加データ(I_PREP_MACx_FCH_PAD)が含まれる。
Valid信号生成回路(MACx_VAL_GEN)56には、送信ストアデータバッファ制御回路54より出力されたパリティエラー(I_PREP_TX_RF_RDATA)が入力される。Valid信号生成回路56は、パリティエラー(I_PREP_TX_RF_RDATA)が入力されていなければ、Valid信号を生成する。そして、Valid信号生成回路56は、送信ストアデータのValid信号(tx_data_val)、コード化された送信ストアデータのValid信号(tx_valid_out(data))、送信ストアデータでCRC対象となるタイミング信号(tx_crc_val(data))を出力する。
ECCチェック回路57には、送信ストアデータバッファ55より出力された読み出しデータ(I_PREP_MACx_FCH_RDATA)、ECC値(I_PREP_MACx_FCH_RECC)、および付加データ(I_PREP_MACx_FCH_PAD)が入力される。ECCチェック回路57は、送信ストアデータバッファ55から読み出されたデータのECCチェックを行う。そして、ECCチェック回路57は、ECCチェック後の送信データを出力する。出力されるデータには、ECCチェック後の送信ストアデータバッファの読み出しデータのValid値(tx_data_val)、ECCチェック後の送信ストアデータバッファの読み出しデータ(tx_macx_data)、ECCチェック後の送信ストアデータバッファの付加データ(tx_macx_pad_val)、およびECCチェック時のエラー検出信号(tx_macx_ecc_err)が出力される。
図11は、出力変換器の内部回路を示す第3の図である。図11には、コマンドパケット作成回路40の一部、ストアデータパケット作成回路50の一部、およびセレクタ群(RAM・RF_SEL)60の接続関係が示されている。ここで、セレクタ群60は、複数のセレクタ61,62,63,・・・,6nを纏めて示したものである。
コマンドパケット作成回路40のデコーダ(DECODE)47には、Valid信号生成回路46より出力されたコマンドデータのValid信号(tx_valid_out(cmd))と、Valid信号生成回路56より出力された送信ストアデータのValid信号(tx_valid_out(data))とが入力される。デコーダ47は、入力されたデータをデコードする。そして、デコーダ47は、デコードしたデータを出力する。
コマンドパケット識別番号生成回路(CMDPID_CT)48は、デコーダ47でデコードされた後のコマンドデータのValid信号(tx_valid_out(cmd))が入力される。コマンドパケット識別番号生成回路48は、Valid信号(tx_crc_val(cmd))に応答して、コマンドパケット用のパケット識別番号を生成する。そして、コマンドパケット識別番号生成回路48は、生成したパケット識別番号(tx_packet_id)を出力する。
ストアデータパケット識別番号生成回路(DATAPID_CT)58は、デコーダ47でデコードされた後のストアデータのValid信号(tx_valid_out(data))が入力される。コマンドパケット識別番号生成回路48は、Valid信号(tx_valid_out(data))に応答して、ストアデータパケット用のパケット識別番号を生成する。そして、ストアデータパケット識別番号生成回路58は、生成したパケット識別番号(tx_packet_id)を出力する。
ヘッダ生成回路(HEADER_GEN)59には、Valid信号生成回路46より出力されたコマンドデータのValid信号(tx_valid_out(cmd))、Valid信号生成回路56より出力された送信ストアデータのValid信号(tx_valid_out(data))、送信コマンドバッファ制御回路44より出力されたコマンドパケット長データ(tx_packet_length(cmd))、および送信ストアデータバッファ制御回路54より出力されたストアデータパケット長データ(tx_packet_length(data))が入力される。ヘッダ生成回路59は、入力されたデータに基づいて、コマンドパケットおよびストアデータパケットのヘッダ情報を生成すると共に、ヘッダ情報のValid信号を生成する。ヘッダ生成回路59からは、ヘッダ情報のValid信号(tx_header_valid)とヘッダ情報(tx_header_lw)とが出力される。
冗長データ作成回路(Mn_DATA_GEN)50aには、ECCチェック回路57より出力されたECCチェック後の送信ストアデータバッファの読み出しデータ(tx_macx_data)が入力される。この入力データは、(n−1)個のセレクタの分だけ入力される。冗長データ作成回路50aは、入力されたデータ(tx_macx_data)に基づいて復元用冗長データを生成する。そして、冗長データ作成回路50aは、復元用冗長データを各セレクタに出力する。
冗長データ作成不可回路(Mn_ERR_OR)50bには、ECCチェック回路57より出力されたECCチェック時のエラー検出信号(tx_macx_ecc_err)が入力される。この入力データは、(n−1)個のセレクタの分だけ入力される。冗長データ作成不可回路50bは、エラー検出信号(tx_macx_ecc_err)に基づいてデータのエラーの有無を判断し、エラーがある場合、復元用冗長データが作成不可であることを示すエラー信号を各セレクタ出力する。
セレクタ群60には、図5に示した複数のセレクタ61,62,63,・・・,6nが含まれている。これらのセレクタ群60には、Valid信号生成回路46から出力された送信コマンドのValid信号(tx_cmd_val)およびタイミング信号(tx_crc_val(cmd))、送信コマンドバッファ45より出力されたすべてのデータ、Valid信号生成回路56から出力されたValid信号(tx_data_val)およびタイミング信号(tx_crc_val(data))、ECCチェック回路57より出力されたすべてのデータが入力される。また、セレクタ群60には、コマンドパケット識別番号生成回路48、ストアデータパケット識別番号生成回路58、冗長データ作成回路50a、および冗長データ作成不可回路50bの出力値が入力される。
なお、ECCチェック回路57より出力されたデータは、[n−1」個のセレクタ61,62,63,・・・に分散して入力される。また、冗長データ作成回路50a、および冗長データ作成不可回路50bから出力されたデータは、セレクタ6nに入力される。
セレクタ群60は、送信モジュール141,142,143,144,14nそれぞれに対応付けて設けられたCRC(Cyclic Redundancy Check)生成回路(TX1_CRC_GEN, TX2_CRC_GEN, TX3_CRC_GEN, TX4_CRC_GEN,・・・, TXn_CRC_GEN),151,152,153,154,・・・,15nに対してデータを出力する。出力されるデータは、送信モジュール用パケットデータ付加コード(m1_tx_code, m2_tx_code, m3_tx_code, m4_tx_code, mn_tx_code)、送信モジュール用パケットデータ(m1_tx_data, m2_tx_data, m3_tx_data, m4_tx_data, mn_tx_data)、送信モジュール用CRC対象パケットデータタイミング信号(m1_ tx_crcgen_val, m2_ tx_crcgen_val, m3_ tx_crcgen_val, m4_ tx_crcgen_val, mn_ tx_crcgen_val)、送信モジュール用CRC作成タイミング信号(m1_rx_crc_val, m2_rx_crc_val, m3_rx_crc_val, m4_rx_crc_val, mn_rx_crc_val)である。
CRC生成回路151,152,152,154,15nは、入力されたデータに基づいてCRCを生成する。そして、CRCを付加したパケットを対応する送信モジュール141,142,143,144,14nに出力する。
以上のような回路構成によって出力変換器111aが実現できる。
次に、出力変換器111aで生成されるコマンドパケットとデータパケットとについて詳細に説明する。
図12は、コマンドパケットのデータ構造を示す図である。コマンドパケット作成回路40では、コマンドデータ300に基づいて、1つのコマンドパケット310が生成される。コマンドパケット310は、コマンドデータフィールド311、パケット識別番号(Packet No.)フィールド312、パケット種別識別子(PacketID)フィールド313、およびチェックコード(Check Code)フィールド314を有している。パケット識別番号フィールド312、パケット種別識別子フィールド313、およびチェックコードフィールド314に設定される情報が、パケット情報である。
コマンドデータフィールド311は、送信側コマンドバス111b経由で入力されたコマンドデータが格納される。
パケット識別番号フィールド312には、コマンドパケットを一意に識別するための通し番号(パケット識別番号)が格納される。例えば、コマンドパケットを作成するごとに1ずつカウントアップされるカウンタによって、パケット識別番号が生成される。そして、コマンドパケット310を生成する際に、そのときのカウンタの値がパケット識別番号フィールド312に格納される。
パケット種別識別子フィールド313には、パケットの種別を識別するためのフラグ(パケット種別識別子)が格納される。パケットの種別には、コマンドパケットとストアデータパケットとがある。コマンドパケットの場合、パケット種別識別子として”CMD”の値が設定される。
チェックコードフィールド314には、コマンドパケットのエラーを検出するためのコード(チェックコード)が格納される。
このように、コマンドデータ300に対して、パケット識別番号、パケット種別識別子、およびチェックコードのパケット情報を付加することでコマンドパケット310が生成される。
図13は、ストアデータパケットのデータ構造例を示す図である。ストアデータパケット作成回路50では、入力されたストアデータ320に基づいて、複数のストアデータパケット330,340,・・・,350,360が生成される。ストアデータパケット330は、識別情報が「TX1」の送信モジュール141用に生成されたパケットである。ストアデータパケット340は、識別情報が「TX2」の送信モジュール142用に生成されたパケットである。ストアデータパケット350は、識別情報が「TX(n−1)」の送信モジュール(図示せず)用に生成されたパケットである。ストアデータパケット360は、識別情報が「TXn」の送信モジュール14n用に生成されたパケットである。
ストアデータ320は、ストアデータパケット作成回路50により、「データ分割」、「復元用冗長データ作成」、「ブロック分割」の処理後にパケット情報が付加される。
「データ分割」では、ストアデータ320が複数の単位データ321,322,・・・,32m,32n,32o,・・・,32r,・・・に分割される。図13の例では、ストアデータ320の先頭から順に、単位データに対して1から昇順の識別番号を付与している。
単位データ321,322,・・・,32m,32n,32o,・・・,32r,・・・は、先頭から順に、識別情報「TX1」〜「TX(n−1)」の「n−1」個の送信モジュールに均等に割り振られる。
各単位データを先頭から順にData[1],Data[2],Data[3],・・・と表した場合、(n−1)個の送信モジュール(「TX1」〜「TX(n−1)」)に対して、次のように振り分けられる。
TX1=Data[1],・・・,Data[n],・・・
TX2=Data[2],・・・,Data[n+1],・・・
:
TX(n−1)=Data[n−1],・・・,Data[2n−2],・・・
各送信モジュールに振り分けられた単位データによって、送信モジュールごとの単位データ列が形成される。
その後、「復元用冗長データ作成」処理が行われる。「復元用冗長データ作成」とは、識別情報「TXn」の送信モジュール用の復元用冗長データを作成することである。復元用冗長データは、他の転送モジュールの同タイミングのデータをビットごとに排他論理和を演算した結果得られるものである。ここで、同タイミングのデータとは、各ストアデータパケット内の同じ順番の単位データである。ビット毎の排他論理和の符号を“∀”とすると、復元用冗長データ(Data[α],Data[β],・・・)の演算式は以下のようになる。
TXn=Data[α]Data[β],・・・
Data[α]=Data[1]∀Data[2]∀,・・・,∀Data[n−1]
Data[β]=Data[n]∀Data[n+1]∀,・・・,∀Data[2n−2]
作成された復元用冗長データは、識別情報「TXn」の送信モジュールに振り分けられる。そして、振り分けられた復元用冗長データにより復元用冗長データ列が形成される。
各送信モジュールに振り分けられた単位データ列および復元用冗長データ列は、それぞれ「ブロック分割」処理が施される。「ブロック分割」とは、転送モジュールごとの単位データ列および作成された復元用冗長データ列を固定長のブロックに分割する処理である。ブロックのサイズは、単位データのサイズ(復元用冗長データのサイズと同じ)の整数倍である。すなわち、1つのブロックには、1以上の単位データまたは復元用冗長データが含まれる。
「ブロック分割」が行われた後、ブロック分割された単位データ列または復元用冗長データ列にパケット情報が付与され、ストアデータパケット330,340,・・・,350,360となる。
ストアデータパケット330,340,・・・,350,360には、パケット識別番号(Packet No.)フィールド331,341,351,361、パケット種別識別子(PacketID)フィールド332,342,352,362、ブロック長(Block-Length)フィールド333,343,353,363、ブロックフィールド334,344,354,364、およびチェックコードフィールド335,345,355,365が設けられている。
パケット識別番号フィールド331,341,351,361には、ストアデータ320を送信するためのパケットであることを識別するための通し番号(パケット識別番号)が格納される。例えば、ストアデータパケット330,340,・・・,350,360を生成するための一連の処理を実行するごとに1ずつカウントアップされるカウンタによって、パケット識別番号が生成される。そして、ストアデータパケット330,340,・・・,350,360を生成する際に、そのときのカウンタの値がパケット識別番号のフィールド331,341,351,361に格納される。すなわち、同一のストアデータ320が分割されたものと識別するため、各ストアデータパケット330,340,・・・,350,360には同じ値のパケット識別番号が格納される。
パケット種別識別子フィールド332,342,352,362には、パケットの種別を識別するためのフラグ(パケット種別識別子:Packet ID)が格納される。パケットの種別には、コマンドパケットとストアデータパケットとがある。ストアデータパケットの場合、パケット種別識別子として”STD”の値が格納される。
ブロック長フィールド333,343,353,363には、次のチェックコードフィールドまでのデータ長(ブロック長)が格納される。所定の1ブロック分のデータがブロックフィールドに含まれていれば、ブロック長フィールド333,343,353,363には所定の1ブロック分のデータ長が設定される。なお、最終のブロックは所定の1ブロック分のよりもデータ量が少ない場合がある。
ブロックフィールド334,344,354,364には、1ブロック分の単位データまたは復元用冗長データが格納される。
チェックコードフィールド335,345,355,365には、直前のブロックのデータのエラーを検出するためのコードが格納される。
ブロックのフィールドとチェックコードのフィールドとは、ストアデータ320内の単位データの数に応じて、交互に繰り返し設けられる。
ここで、識別情報「TX1」の送信モジュール用のストアデータパケット330に着目して、データ構造をさらに詳細に説明する。
図14は、ストアデータパケットの詳細構造を示す図である。図14の例では、ブロック長の値を「L」(単位データ「L」個分)としている。また、図14では、ストアデータ320を分割したときの単位データを通し番号を関数式f(k)で表している。この関数式は、f(k)=(n−1)(k−1)+1と定義される。ここで、kは、ストアデータ320内での単位データの順番を表す自然数である。nは、送信モジュールの数を表す自然数である。ストアデータ320内の先頭の単位データ(k=1)であれば、その単位データの通し番号「f(k)=1」となる。その後、kの値が1増えるごとに、f(k)の値は「n−1」ずつ増加する。
ストアデータパケット330の最初のブロックフィールド334には、L個の単位データが格納されている。そして、最初のチェックコードフィールド335には、ストアデータパケット330の先頭からブロックフィールド334の最後までのデータのエラーを検査するためのチェックコードが格納される。
2つめのブロックフィールド336には、L個の単位データが格納されている。2つめのチェックコードフィールド337には、ブロックフィールド336内のデータを検査するためのチェックコードが格納される。その後、ブロックフィールドとチェックコードフィールドとが交互に設けられる。図14の例では、「p−1」番目(pは自然数)のブロックフィールド338が最後のブロックフィールドである。
最後のブロックフィールド338には、L個以下の単位データが格納される。図14の例では、q個(qは、L以下の自然数)の単位データがブロックフィールド338に格納されている。最後のブロックフィールド338に続くチェックコードフィールド339には、直前のブロックフィールド338に格納されたq個の単位データに対するチェックコードが格納される。
なお、ブロック長の「L」値は他の送信モジュール用のストアデータパケットで共通の値である。送信されるストアデータのデータ長が予め分かっている場合、そのデータ長に応じた最適値が、ブロック長として予め設定される。
次に、入力変換器212aの内部構造について詳細に説明する。
図15は、入力変換器の内部構造を示す図である。入力変換器212aは、複数の受信回路70,70a,70b,・・・,70m、選択回路80、および合成回路90を有している。
受信回路70,70a,70b,・・・,70mは、それぞれ受信モジュール241,242,243,・・・,24nに接続されている。そして、各受信回路70,70a,70b,・・・,70mは、接続された受信モジュール241,242,243,・・・,24n経由で入力されたパケットの内容を解析する。そして、受信回路70,70a,70b,・・・,70mは、入力されたパケットがコマンドパケットであれば、そのコマンドパケットから取得したコマンドデータを選択回路80に転送する。また、受信回路70,70a,70b,・・・,70mは、入力されたパケットがストアデータパケットであれば、そのストアデータパケットから取得したストアデータの単位データ列を合成回路90に転送する。
受信回路70は、デコーダ71、コマンドバッファ72、およびデータバッファ73、を有している。デコーダ71は、受信モジュール241に接続されている。デコーダ71は、受信モジュール241から入力されたパケットのパケット種別識別子を参照し、パケットの種別を判断する。デコーダ71は、入力されたパケットがコマンドパケット、そのコマンドデータをコマンドバッファ72に格納する。また、デコーダ71は、入力されたパケットがストアデータパケットであれば、そのストアデータパケットをデータバッファ73に格納する。
また、デコーダ71は、エラーチェック機能を有している。すなわち、デコーダ71は、コマンドパケットとストアデータコマンドとのエラーチェックを行う。具体的には、デコーダ71は、コマンドパケットのチェックコードを取得し、コマンドパケットのエラーの有無を判断する。すなわち、デコーダ71は、コマンドパケットに基づいてエラーチェックコードを生成し、コマンドパケットに付与されていたエラーチェックコードと一致することを確認する。エラーチェックコードの値が一致すれば、コマンドパケットを正常に受信したと判断できる。エラーチェックコードの値が一致しない場合、エラーが発生したものと判断される。デコーダ71は、エラーが発生したコマンドパケットに、エラーが発生した旨のフラグを付与する。
また、デコーダ71は、ストアデータパケットのブロックごとのエラーの有無を判断する。すなわち、デコーダ71は、ブロック内の単位データ列に基づいてエラーチェックコードを生成し、ストアデータパケットに付与されていたエラーチェックコードと一致することを確認する。エラーチェックコードの値が一致すれば、エラーチェックコードに対応するブロックを正常に受信したと判断できる。エラーチェックコードの値が一致しない場合、エラーチェックコードに対応するブロックにエラーが発生したものと判断される。デコーダ71は、エラーが発生したブロックに、エラーが発生した旨のフラグを付与する。
コマンドバッファ72は、コマンドパケットを記憶する記憶装置である。コマンドバッファ72は、選択回路80に接続されている。そして、コマンドバッファ72に格納されたコマンドパケットは、格納が早い順に選択回路80に出力される。
データバッファ73は、ストアデータパケットを記憶する記憶装置である。データバッファ73は、選択回路80に接続されている。そして、データバッファ73に格納されたストアデータパケットは、格納が早い順に合成回路90に出力される。
受信回路70a,70b,・・・,70mも受信回路70と同様の機能を有している。その結果、選択回路80には、受信回路70a,70b,・・・,70mそれぞれからコマンドパケットが入力される。また、合成回路90には、受信回路70a,70b,・・・,それぞれからストアデータパケットが入力される。
選択回路80は、受信回路70,70a,70b,・・・,70mから入力されたコマンドデータのうち、エラーのない最初のコマンドパケットのみを取得する。選択回路80は、2番目以降に入力されたコマンドパケットは破棄する。最初に入力されたコマンドパケットにエラーがあればそのコマンドパケットは破棄され、次のエラーのないコマンドパケットが取得される。選択回路80は、取得したコマンドパケットからコマンドデータを抽出し、そのコマンドデータを受信側コマンドバス212bを介して転送する。
合成回路90は、受信回路70,70a,70b,・・・から入力されたストアデータパケットに含まれる単位データ列を合成し、ストアデータを生成する。また、合成回路90は、いずれかのブロックにエラーがある場合、対応する1ブロック分の復元用冗長データ列を用いてエラーのあったブロック内の単位データ列を復元する。そして、合成回路90は、生成したストアデータを、受信側ストアデータバス212cを介して転送する。
このような入力変換器212aに受信モジュール241,242,243,・・・,24nを介してパケットが入力されると、受信回路70,70a,70b,・・・,70m内のデコーダでコマンドパケットとストアデータパケットに分類される。そして、コマンドパケットからコマンドデータが抽出される。ストアデータパケットからは、ストアデータの単位データ列または復元用冗長データ列が抽出される。コマンドデータとストアデータの単位データ列または復元用冗長データ列は、受信回路70,70a,70b,・・・,70mにおいてコマンドバッファまたはデータバッファに格納される。格納されたコマンドデータは、エラーチェックが行われる。同様に、格納された単位データ列または復元用冗長データ列は、ブロックごとのエラーチェックが行われる。そして選択回路80によりエラーのないコマンドデータが1つだけ選択されて受信側コマンドバス212bに転送される。また合成回路90により複数の受信モジュール241,242,243,・・・で受信した単位データ列が合成され、合成後のストアデータが受信側ストアデータバス212cに転送される。
次に、受信回路70、選択回路80、および合成回路の処理手順について説明する。
図16は、パケット受信処理の手順を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。なお、装置間インタフェースケーブル11を介してシリアル形式のデータを受信した場合の処理として説明する。
[ステップS41]受信モジュール241は、装置間インタフェースケーブル11を介して受信したシリアル形式のデータをパケットに変換する。受信モジュール241は、パケットを受信回路70に転送する。
[ステップS42]受信回路70のデコーダ71は受信したパケットのエラーチェックを行う。エラーがあれば、デコーダ71は、該当するデータにエラーフラグを設定する。
[ステップS43]デコーダ71は、エラーチェックをしたパケットを、コマンドパケットとストアデータパケットに分類する。そして、デコーダ71は、取得したパケットがコマンドパケットであれば、そのコマンドパケットからコマンドデータを取得してコマンドバッファ72に格納する。また、デコーダ71は、取得したパケットがストアデータパケットであれば、そのストアデータパケットからブロックごとの単位データ列を取得して、データバッファ73に格納する。
次に、コマンドデータの選択処理について説明する。
図17は、コマンドデータ選択処理の手順を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
[ステップS51]選択回路80は、各受信回路70,70a,70b,・・・,70m内のコマンドバッファにコマンドデータが格納されると、そのコマンドデータを取得し、エラーフラグの有無をチェックする。
[ステップS52]選択回路80は、取得したコマンドパケットにエラーがあるか否かを判断する。エラーがあれば処理がステップS53に進められる。エラーがなければ処理がステップS55に進められる。
[ステップS53]選択回路80は、各受信回路70,70a,70b,・・・,70mから取得したすべてのコマンドパケットがエラーになったか否かを判断する。例えば、選択回路80は、コマンドパケットのパケット識別番号に対応付けて、エラーとなったコマンドパケットの数を記憶しておく。そして、選択回路80は、エラーとなったコマンドパケットの数が受信回路の数に等しくなった場合、すべてのコマンドパケットがエラーになったものと判断する。すべてのコマンドパケットがエラーとなった場合、処理がステップS54に進められる。未受信のコマンドパケットがある場合、処理がステップS57に進められる。
[ステップS54]選択回路80は、すべてのコマンドパケットでエラーとなると、コマンドパケットの転送が失敗したときのエラー処理を行う。エラー処理は、例えば、送信装置に対してコマンドパケットの再送を要求する処理である。その後、コマンドデータ選択処理が終了する。
[ステップS55]選択回路80は、同一のコマンドデータを転送済か否かをチェックする。例えば、選択回路80は、最後に転送したコマンドデータのパケット識別番号を記憶しておく。そして、選択回路80は、受信したコマンドパケットのパケット識別番号が、転送済のコマンドデータのパケット識別番号と同じであれば、受信したコマンドパケットに含まれるコマンドデータは転送済である。
[ステップS56]選択回路80は、同一のコマンドデータを転送済であれば、処理をステップS57に進める。また、選択回路80は、同一のコマンドデータが未転送であれば、処理をステップS58に進める。
[ステップS57]選択回路80は、コマンドパケットにエラーがあった場合、あるいはすでに同一のコマンドデータが転送済の場合、受信したコマンドデータを破棄する。その後、コマンドデータ選択処理が終了する。
[ステップS58]選択回路80は、コマンドパケットから抽出したコマンドを受信側コマンドバス212bを介して転送する。
[ステップS59]選択回路80は、同一コマンドデータの以後の転送を抑止する。例えば、選択回路80は、転送したコマンドデータのパケット識別番号を記憶する。そして、選択回路80は、以後、記憶したパケット識別番号と同じパケット識別番号のコマンドパケット内のコマンドデータの転送を抑止する。その後、コマンド選択処理が終了する。
次に、ストアデータ合成処理について説明する。
図18は、ストアデータ合成処理の手順を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。
[ステップS61]合成回路90は、各受信回路70,70a,70b,・・・,70m内のデータバッファにストアデータの単位データ列または復元用冗長データ列が格納されると、それぞれのデータを取得し、ブロック単位でエラーフラグをチェックする。
[ステップS62]合成回路90は、受信モジュール241,242,243,・・・,24nそれぞれで受信されるストアデータパケット内での格納順が同じ順番のブロックのデータが揃うのを待つ。
[ステップS63]合成回路90は、受信モジュール241,242,243,・・・,が受信した各ストアデータパケット内の同じ順番のブロック(単位データ列を含むブロック)のデータがすべて正常か否かを判断する。少なくとも1つのブロックでエラーが検出されていれば、異常ありと判断される。すべてのブロックが正常に受信できていれば、処理がステップS67に進められる。少なくとも1つのブロックでエラーが検出された場合、処理がステップS64に進められる。
[ステップS64]合成回路90は、エラーがあったブロックの復元が可能か否かを判断する。具体的には、合成回路90は、受信モジュール241,242,243,・・・,24nそれぞれで受信されたストアデータパケット内の同一順番のブロックのうち、単位データ列を含むブロックの1つにエラーがあり、復元用冗長データ列を含むブロックにエラーがないことを確認する。この条件を満たしていれば、エラーのあったブロックを復元可能である。復元可能であれば、処理がステップS66に進められる。復元不可能であれば、処理がステップS65に進められる。
[ステップS65]合成回路90は、ストアデータパケットの転送が失敗したときのエラー処理を行う。エラー処理は、例えば、送信装置に対してストアデータパケットの再送を要求する処理である。その後、合成処理が終了する。
[ステップS66]合成回路90は、エラーを検出したパケット内のデータを復元する。具体的には、合成回路90は、エラーが検出されたブロックと同じ送信順の他のブロックのデータ(単位データ列と復元用冗長データ列)のビットごとの排他的論理和を計算する。その計算結果が、エラーが検出されたブロックに含まれる単位データ列となる。
[ステップS67]合成回路90は、単位データを結合し、受信側ストアデータバス212cに送出する。その後、合成処理が終了する。
次に、入力変換器212aの内部回路について、図19〜図22を参照して説明する。
図19は、入力変換器の内部回路を示す第1の図である。受信モジュール241からの入力はデコーダ71の受信パケットデコード回路(RX1_VALID_GEN)71aに入力される。受信パケットデコード回路71aは、受信したパケットを解析し、解析結果を出力する。出力される解析結果には、受信パケットのヘッダ情報を示す信号(mx_rx_header_val)、受信パケットのペイロードを示す信号(mx_rx_val)、受信パケットのデータ(mx_rx_dat)、受信パケットのCRCの値(mx_rx_crc_val)、受信パケットにおけるCRCのチェックの対象を示すタイミング信号(mx_rx_crc_chk)、受信パケットの付加データ(mx_rx_pad)、およびエラー検出信号(mx_rx_err_val)が含まれる。
CRCチェック回路(CRC_CHECK)71bには、受信パケットデコード回路71aからのすべての出力データが入力される。CRCチェック回路71bは、入力されたデータに基づいてCRCのチェックを行う。そして、CRCチェック回路71bは、チェック結果を出力する。出力されるチェック結果には、CRCチェック後のヘッダ情報を示す信号(mx_rx_header_valid)、CRCチェック後のペイロードデータを示す信号(mx_rx_valid)、CRCチェック後の受信パケットのデータ(mx_rx_data)、CRCチェックで正常であることを示す正常検出信号(mx_rx_crc_ok)、CRCでエラーが検出されたことを示すエラー検出信号(mx_rx_crc_ng)、およびCRCチェック後の付加データ(mx_rx_tag)が含まれる。
ECC作成回路(ECC_GEN)71cには、受信パケットデコード回路71aの出力のうち、受信パケットのペイロードを示す信号(mx_rx_val)、受信パケットのデータ(mx_rx_dat)、受信パケットの付加データ(mx_rx_pad)、およびエラー検出信号(mx_rx_err_val)が入力される。ECC作成回路71cは、入力されたデータに基づいてECCを作成する。そして、ECC作成回路71cは、作成したECC(mx_rx_ecc)を出力する。
受信パケット分析回路(VALID_SELECT・PACKET_ID_CHECK)71dには、CRCチェック回路71bとECC作成回路71cとの出力データが入力される。受信パケット分析回路71dは、入力されたデータに基づいて、受信パケットの分析および分類を行う。分類は、ヘッダ情報に含まれるパケット種別識別子に基づいて行われる。すなわち、パケット種別識別子が「CMD」であればコマンドパケット、「STD」であればストアデータパケットであると判断される。
受信パケットがコマンドパケットであれば、受信パケット分析回路71dは、コマンドバッファ72に対する分析結果の書き込み指示を出力する。コマンドバッファ72に出力される書き込み指示には、コマンドバッファ72への書き込み許可信号(mx_rx_cmd_we)、受信コマンドデータ(mx_rx_cmd)、受信コマンドデータのECC(mx_rx_cmd_ecc)、受信コマンドデータの付加データ(mx_rx_cmd_tag)、受信コマンドデータの最終データポインタ(mx_rx_cmd_readgo)、受信コマンドデータのエラー信号(mx_rx_cmd_err)、および受信コマンドデータのパケット識別番号(mx_rx_cmd_pno)が含まれる。なお、パケット識別番号(mx_rx_cmd_pno)以外は、コマンドバッファ72内のコマンドバッファ書き込み制御回路(Mx_CMD_RF_GEN)72aに入力される。
受信パケットがストアデータパケットであれば、受信パケット分析回路71dは、データバッファ73に分析結果の書き込み指示を出力する。データバッファ73に出力される書き込み指示には、受信ストアデータ長(mx_ram_length)、受信ストアデータの最終データポインタ(mx_ram_readgo)、受信ストアデータのエラー信号(mx_ram_err)、受信ストアデータの付加データ(mx_ram_tag)、受信ストアデータのデータ長セット信号(mx_ram_lset)、データバッファ73への書き込み許可信号(mx_ram_we)、書き込み対象のストアデータ(mx_ram_wdata)、およびストアデータのECC(mx_ram_ecc)が含まれる。
受信パケット分析回路71dからデータバッファ73に対して出力されたデータは、すべてデータバッファ73内のデータバッファ書き込み制御回路(Mx_RAM_GEN)73aに入力される。データバッファ書き込み制御回路73aは、ストアデータパケットの書き込みを制御する。データバッファ書き込み制御回路73aは、データバッファクロック同期回路(MX_DATA_RAM_SYNC)73bに対して、データバッファの書き込みアドレス(mx_rx_ram_wadrs_copy)、受信ストアデータの最終データポインタ(mx_rx_ram_read_go)、受信ストアデータのエラー信号(mx_rx_ram_err)、受信ストアデータのデータ長チェックで正常値であったことを示す正常検出信号(mx_rx_ram_lcheck_ok)、および受信ストアデータのデータ長チェックでエラーがあったことを示すエラー信号(mx_rx_ram_lcheck_ng)を出力する。また、データバッファ書き込み制御回路73aは、データバッファ用メモリに対して、データバッファの書き込みアドレス(mx_rx_ram_wadrs)、データバッファの書き込み許可信号(mx_rx_ram_we)、およびデータバッファの書き込みデータ(mx_rx_ram_wdata)を出力する。
図20は、入力変換器の内部回路を示す第2の図である。図20には、コマンドバッファ72の内部構成を示している。コマンドバッファ72のコマンドバッファ書き込み制御回路(Mx_CMD_RF_GEN)72aは、受信パケット分析回路71dから入力されたデータに応じて、コマンドパケットの書き込みを制御する。コマンドバッファ書き込み制御回路72aは、コマンドバッファ用メモリ(Mx_CMD_RF)72bに対して、コマンドバッファ書き込みデータ(mx_rx_cmd_rf_w_data)、コマンドバッファの書き込みアドレス(mx_rx_cmd_rf_wadrs)、およびコマンドバッファ書き込み許可信号(mx_rx_cmd_rf_we)を出力する。また、コマンドバッファ書き込み制御回路72aは、コマンドバッファクロック同期回路(Mx_CMD_RF_SYNC)72cに対して、コマンドバッファ書き込みアドレス(mx_rx_cmd_rf_wadrs_copy)、受信コマンドデータの最終データポインタ(mx_rx_cmd_rf_read_go)、および受信コマンドデータのエラー信号(mx_rx_cmd_rf_err)を出力する。
コマンドバッファクロック同期回路72cは、受信パケット分析回路71dから入力されたデータに基づいてコマンドバッファ用メモリ72bの読み出し同期制御を行う。コマンドバッファクロック同期回路72cは、コマンドバッファ用メモリ72bに対して、コマンドバッファの読み出しアドレス(mx_rx_rf_radrs)とコマンドバッファ読み出し許可信号(mx_rx_cmd_rf_re)とを出力する。また、コマンドバッファクロック同期回路72cは、受信コマンドデータの同期最終データポインタ(mx_rx_cmd_rf_read_go_async)、受信コマンドデータのパケット識別番号(mx_rx_cmd_pno_async)を選択回路80に対して出力する。
コマンドバッファ用メモリ72bは、コマンドバッファ書き込み許可信号(mx_rx_cmd_rf_we)が入力されると、書き込みアドレス(mx_rx_cmd_rf_wadrs)で示される記憶領域にコマンドバッファ書き込みデータ(mx_rx_cmd_rf_w_data)を記憶する。また、コマンドバッファ用メモリ72bは、コマンドバッファ読み出し許可信号(mx_rx_cmd_rf_re)が入力されると、読み出しアドレス(mx_rx_rf_radrs)で示される記憶領域内に格納されていたデータを、コマンドバッファ読み出しデータ(mx_rx_cmd_rf_rdata)として出力する。
図21は、入力変換器の内部回路を示す第3の図である。図21には、選択回路80の内部構成が示されている。選択回路80のECCチェック回路(Mx_CMD_ECC_CHK)81には、コマンドバッファ用メモリ72bから出力されたコマンドバッファ読み出しデータ(mx_rx_cmd_rf_rdata)が入力される。ECCチェック回路81は、コマンドバッファ読み出し後のデータに対するECCチェックを行う。ECCチェック回路81は、ECCチェックの結果を出力する。出力されるチェック結果には、ECCチェック後のコマンドバッファ読み出しデータ(mx_rx_cmd_read_data)、ECCチェックでエラーが検出されたことを示すエラー検出信号(mx_rx_cmd_read_err)、ECCチェック後のコマンドバッファ読み出しデータのValid信号(mx_rx_cmd_read_val)が含まれる。
比較回路(Packet_NO_Comp)82には、コマンドバッファクロック同期回路72cより出力された同期最終データポインタ(mx_rx_cmd_rf_read_go_async)、パケット識別番号(mx_rx_cmd_pno_async)が入力される。また、比較回路82には、パケット識別番号期待値作成回路(PNO_Predict)83からの出力(パケット識別番号の期待値)が入力される。比較回路82は、同期最終データポインタ(mx_rx_cmd_rf_read_go_async)が入力されると、パケット識別番号(mx_rx_cmd_pno_async)と、パケット識別番号との期待値とを比較する。そして、比較の結果一致すると、比較回路82からパケット識別番号期待値作成回路83とコマンド有効判定回路(Cmd_Select_Valid)84とに一致信号が出力される。
パケット識別番号期待値作成回路83は、次に受信するコマンドパケットのパケット識別番号の期待値を生成する回路である。すなわち、パケット識別番号期待値作成回路83は、比較回路82から一致信号を受け取ると、現在の期待値をカウントアップし、次のパケット識別番号の期待値とする。そして、パケット識別番号期待値作成回路83は、新たに生成したパケット識別番号の期待値を、比較回路82に対して出力する。
コマンド有効判定回路84には、比較回路82からの一致信号と、ECCチェック回路81からのコマンドバッファ読み出しデータのValid信号(mx_rx_cmd_read_val)とが入力される。コマンド有効判定回路84は、一致信号が入力された際に、Valid信号(mx_rx_cmd_read_val)に基づいて、コマンドデータが有効か否かを判定する。そして、コマンド有効判定回路84は、コマンドデータが有効な場合、コマンド有効信号(mx_rx_cmd_sel)を出力する。
コマンド選択回路(CMD_SEL)85には、ECCチェック回路81より出力されたコマンドバッファ読み出しデータ(mx_rx_cmd_read_data)とエラー検出信号(mx_rx_cmd_read_err)、およびコマンド有効判定回路84より出力されたコマンド有効信号(mx_rx_cmd_sel)が入力される。なお、図21には、コマンド選択回路85のデータ入力として受信モジュール241に入力されたコマンドパケットに関するデータ入力しか示していないが、他の受信モジュールに入力されたコマンドパケットに関するデータも同様に入力される。コマンド選択回路85は、入力された複数のデータのうち、エラーなしに最も早く入力されたデータを選択する。そして、コマンド選択回路85は、選択したデータに基づいて、受信コマンドのValid信号(O_CMD_VAL)、受信コマンドデータ(O_CMD_DATA)、および受信コマンドのパリティ値(O_CMD_PARITY)を、受信側コマンドバス212bに対して出力する。
図22は、入力変換器の内部回路を示す第4の図である。図22には、データバッファ73の主要部と合成回路90との内部構成が示されている。
データバッファ73のデータバッファクロック同期回路73bは、図19に示した入力データに基づいて、ストアデータバッファにおけるデータ読み出しのクロック同期制御を行う。データバッファクロック同期回路73bは、同期制御のために、受信ストアデータのデータ長チェックで正常を検出したことを示す正常値検出同期信号(mx_rx_ram_lcheck_ok_async)、受信ストアデータのデータ長チェックでエラーを検出したことを示すエラー検出同期信号(mx_rx_ram_lcheck_ng_async)、データ書き込み同期アドレス(mx_rx_ram_wadrs_cp_async)、データバッファ書き込み許可同期信号(mx_rx_ram_read_go_async)、およびデータバッファ書き込みエラー同期信号(mx_rx_ram_err_async)を出力する。
データバッファ書き込み長チェック回路(INQ_LEN_CHK)73cは、データバッファクロック同期回路73bより出力された正常値検出同期信号(mx_rx_ram_lcheck_ok_async)とエラー検出同期信号(mx_rx_ram_lcheck_ng_async)とが入力される。なお、図22には、データバッファ書き込み長チェック回路73cのデータ入力として受信モジュール241に入力されたストアデータパケットに関するデータ入力しか示していないが、他の受信モジュールに入力されたストアデータパケットに関するデータも同様に入力される。データバッファ書き込み長チェック回路73cは、書き込まれたストアデータのデータ長チェックで正常が検出されたか否かを判断する。そして、データバッファ書き込み長チェック回路73cは、判断結果を出力する。出力される判断結果には、合成回路90への通知用のデータ長エラー検出信号(O_INQ_LCHK_ERR)、終了シーケンス要求信号(O_TERM_REQ)、および内部処理用のデータ長エラー検出信号(ram_inq_lchk_err)が含まれる。
データバッファ書き込みアドレス保持回路(Set&hold)73dは、データバッファクロック同期回路73bより出力されたデータ書き込み同期アドレス(mx_rx_ram_wadrs_cp_async)と、データバッファ書き込み許可同期信号(mx_rx_ram_read_go_async)とが入力される。データバッファ書き込みアドレス保持回路73dは、入力されたデータ書き込み同期アドレス(mx_rx_ram_wadrs_cp_async)を一時的に保持する。そして、データバッファ書き込みアドレス保持回路73dは、データバッファ書き込み許可同期信号(mx_rx_ram_read_go_async)が入力されると、保持していたアドレスを書き込みアドレス最小値判定回路(WT-AD_MIN_SEL)73eに対して出力する。なお、書き込みアドレス最小値判定回路73eには、受信モジュール241以外の受信モジュールに入力されたストアデータに関する書き込みアドレスも同様に入力される。
書き込みアドレス最小値判定回路73eは、入力されたアドレスのうちの最小値を検出する。そして、書き込みアドレス最小値判定回路73eは、検出処理の結果を出力する。出力される検出結果には、2パス以上(受信モジュールの異なる2以上のストアデータ)でエラーを検出したことを示すエラー検出信号(ram_2m_dis)、データバッファ書き込み長最小値アドレス(rx_ram_wadrs_min)、およびデータバッファ書き込み長最小値アドレス有効信号(rx_ram_reaad_go_or)が含まれる。
データバッファ読み出し処理停止回路(CNT_STOP)73fには、データバッファ書き込み長チェック回路73cより出力されたデータ長エラー検出信号(ram_inq_lchk_err)と、書き込みアドレス最小値判定回路73eより出力されたエラー検出信号(ram_2m_dis)とが入力される。データバッファ読み出し処理停止回路73fは、エラーが検出された場合に、データバッファ読み出しアドレス比較回路(RAM_ADRS_COMP)73gに対して読み出し処理の停止信号を出力する。
データバッファ読み出しアドレス比較回路73gには、書き込みアドレス最小値判定回路73eより出力されるデータバッファ書き込み長最小値アドレス(rx_ram_wadrs_min)とデータバッファ書き込み長最小値アドレス有効信号(rx_ram_reaad_go_or)とが入力される。また、データバッファ読み出しアドレス比較回路73gには、読み出しアドレス作成回路(RA_CT)73hから出力されるデータバッファ読み出しアドレス(rx_ram_radrs)が入力される。データバッファ読み出しアドレス比較回路73gは、有効なデータバッファ書き込み長最小値アドレス(rx_ram_wadrs_min)に基づいて、有効なストアデータの有無を判断する。データバッファ書き込み長最小値アドレスとデータバッファ読み出しアドレスが一致、すなわち有効なストアデータがなくなれば(バッファ内が空)データバッファ読み出しアドレス比較回路73gは、データバッファアドレス一致信号(comp)を出力する。データバッファアドレス一致信号(comp)は、合成回路90に対してメモリバッファが空であることを通知するエンプティ信号(O_RAM_EMPTY)となる。また、有効なストアデータがあれば、データバッファ読み出しアドレス比較回路73gはデータバッファアドレス不一致信号(uncomp)を出力する。
読み出しアドレス作成回路73hには、データバッファ読み出しアドレス比較回路73gから出力されるデータバッファアドレス不一致信号(uncomp)が入力される。読み出しアドレス作成回路73hは、データバッファアドレス不一致信号(uncomp)が入力されている間、順次データバッファ読み出しアドレスを生成する。そして、読み出しアドレス作成回路73hは、生成したデータバッファ読み出しアドレス(m1_rx_ram_radrs,m2_rx_ram_radrs,・・・,mn_rx_ram_radrs)と、データバッファ読み出し許可信号(m1_rx_ram_re,m2_rx_ram_re,・・・,mn_rx_ram_re)とが、データバッファ用メモリ(DATA_RAM)73iに対して出力される。
データバッファ用メモリ73iは、受信モジュールごとのメモリを有している。そして、各メモリは、データバッファ読み出し許可信号が入力されると、入力されたデータバッファ読み出しアドレスで示される記憶領域内のデータを出力する。出力されるデータバッファ読み出しデータ(m1_rx_ram_rdata,m2_rx_ram_rdata,・・・,mn_rx_ram_rdata)は、合成回路90に対して出力される。
合成回路90は、データ訂正回路91を有している。データ訂正回路91は、データバッファ用メモリ73iから出力されたデータを解析して、エラーがあれば復元用冗長データを用いてデータをエラーがあったデータを復元する。そして、データ訂正回路91は、必要な訂正を施したデータを合成し、ストアデータとして受信側ストアデータバス212cに出力する。出力されるデータには、受信側ストアデータのValid信号(O_MAC0_DT_VAL,O_MAC1_DT_VAL,O_MAC3_DT_VAL)、受信側ストアデータ(O_MAC0_DT,O_MAC1_DT,O_MAC3_DT)、および受信側ストアデータのパリティ値(O_MAC0_DT_PARITY,O_MAC1_DT_PARITY,O_MAC3_DT_PARITY)が含まれる。
以上のような回路構成により、入力変換器212aを実現することができる。
次に、コマンドデータの選択例を説明する。
図23は、コマンドデータ選択例を示す図である。図23は、コマンドパケット310c、コマンドパケット310a、コマンドパケット310bの順で各コマンドパケットを受信した場合の例が示されている。
最初のコマンドパケット310cが選択回路80に入力されると、コマンドパケット310cからコマンドデータ300が抽出される。そして、選択回路80により、コマンドデータ300が受信側コマンドバス212bに転送される。その際、選択回路80によって、コマンドパケット310cのパケット識別番号(Packet-No.)が記憶される。
その後、後続のコマンドパケット310a、コマンドパケット310bを受信すると、選択回路80は、各コマンドパケット310a、コマンドパケット310bのパケット識別番号と、記憶しておいたパケット識別番号とを照合する。この例では、パケット識別番号が一致する。すると、選択回路80はコマンドパケット310a、コマンドパケット310bが抑止の対象であると認識し、各コマンドパケット310a、コマンドパケット310bを破棄する。
このように、パケット識別番号が同一の複数のコマンドパケット310a,210b,210cのうち、最初のコマンドパケット310cに含まれるコマンドデータ300が受信側コマンドバス212bに転送される。そして、他の受信モジュール経由で受信したコマンドパケット310a,210b内のコマンドデータの転送は抑止される。これにより、コマンドの多重受領が抑止される。
次に、ストアデータパケットの合成例を説明する。
図24は、ストアデータの合成例を示す図である。ストアデータパケット330,340,・・・,350は、受信回路70,70a,70b,・・・,70mにおいてデータバッファに順次格納される。受信回路70,70a,70b,・・・,70mでは、ブロック長(Block-Length)の値に基づいて、チェックコード(Check-Code)の位置が検出される。そして、受信回路70,70a,70b,・・・,70mにおいてチェックコードを受信するたびに対応するブロックのデータチェックが行われる。合成回路90は、すべての受信回路70,70a,70b,・・・,70mにおいて、「同一のパケット識別番号(Packet-No)のストアデータパケットにおける同一タイミングのブロックデータ」のチェックが完了するのを待つ。すべての受信回路70,70a,70b,・・・,70mで同一パケット識別番号(Packet-No)のパケットの同一ブロックのデータが揃ったら、合成回路90でData[1],Data[2],・・・の順で受信側ストアデータバス212cにデータが転送される。
この方式では受領したブロック単位にブロックデータのチェック/合成処理が行われる。すなわちストアデータパケットを受信完了前にパケットデータを処理することができる。そのため、ブロック分割しない場合に比べてデータの滞留量が小さくなり、その分データ遅延時間が短縮できる。また各ブロックへの付加データがチェックコードだけである。そのため、パケット識別番号などのパケット情報が付加されるパケット単位で分割する場合と比較して、制御情報の付加に伴うオーバヘッドを低減することができる。
また、本実施の形態では、1つのストアデータパケットに復元用冗長データが含まれている。そのため、エラーが発生したブロックデータは、復元用冗長データを用いて復元することができる。
図25は、ブロックデータの復元状況を示す図である。図25の例では、識別情報「RX1」の受信モジュール241で受信したストアデータパケットの最初のブロックでエラーが検出された場合を示している。
この場合、合成回路90は復元用冗長データを使用してエラーデータを復元する。すなわち、合成回路90は、識別情報「RX1」以外の受信モジュール242,243,・・・,24n(識別情報「RX2」〜「RXn」)で受信した各ストアデータパケット240,・・・,250,260の同じ順番のブロックデータのビットごとの排他論理和を計算する。これにより、ストアデータパケット330の最初のブロックに含まれる各単位データ321,32n,・・・が復元される。
なおストアデータパケットの各チェックコードはその直前のブロックのデータのみ保証している。そのため、第2ブロック以降のエラーの場合、異なるストアデータパケットに含まれる同じ順番のブロックで重複してエラーが発生しない限り、複数のブロックにエラーがあってもデータ復元が可能である。
ただし、第1ブロックでエラーを検出した場合はパケット識別番号などのパケット情報を受信できない。そのため、エラーが発生したストアデータパケットは破棄される。
図26は、複数のブロックでのエラー発生状況を示す図である。図26では、各ブロックに対して、括弧書きで順番を示す番号を付加している。
各ストアデータパケット330,340,370,380の第1ブロック(Block[1])にはエラーは発生していない。第2ブロック(Block[2])では、ストアデータパケット340に含まれるブロックのみにエラーが検出されている。第3ブロック(Block[3])では、ストアデータパケット380に含まれるブロックのみにエラーが検出されている。第4ブロック(Block[4])では、ストアデータパケット330に含まれるブロックのみにエラーが検出されている。
図26に示した例の場合、各ストアデータパケット330,340,370,380の送信順が同じブロック間では、1つのブロックのみにエラーが生じている。そのため、全体としては複数のブロックにエラーが検出されているものの、エラーが発生した各ブロックは、他のストアデータパケットに含まれる同じ順番のブロックを用いていずれも復元可能である。
なお、コマンドデータとストアデータはそれぞれ独立した処理され、送信装置111ではセレクタ61,62,63,・・・,6nでコマンドパケットとストアデータパケットが混合される。混合されたコマンドパケットとストアデータパケットとは、受信装置212のデコーダ71で分離される。したがって装置間インタフェースではコマンドパケットとデータパケットが混在してパケット転送することができる。
図27は、コマンドパケットとストアデータパケットとを混在させたデータ伝送状況を示す図である。図27の例では、送信側コマンドバス111bからコマンドデータ「A」,コマンドデータ「B」が送信装置111に入力されている。それと同時に、送信側ストアデータバス111cからストアデータ「a」,ストアデータ「b」が送信装置111に入力されている。このように同タイミングで入力されたパケットを転送する場合、コマンドデータとストアデータとがそれぞれパケット化され、セレクタ61,62,63,・・・で選択される。このとき、セレクタ61,62,63,・・・では、先に入力されたパケットを優先して選択する。そのため、装置間インタフェースではコマンドデータ「A」のパケット,ストアデータ「a」のパケット,コマンドデータ「B」のパケット,ストアデータ「b」のパケットが混在して転送される。
なお、ストアデータ「a」は単位データに分割され、送信モジュールごとに振り分けられたデータ「a1」,「a2」,「a3」,・・・ごとにパケット化されている。同様に、ストアデータ「b」は単位データに分割され、送信モジュールごとに振り分けられたデータ「b1」,「b2」,「b3」,・・・ごとにパケット化されている。
以上説明したように、本実施の形態によれば、複数の汎用転送モジュールを使用した装置間インタフェースにおいて、転送するデータの必要性に応じて高速転送と高信頼性転送との転送方式を必要に応じて切り替えることができる。その結果、十分な信頼性と転送効率とを兼ね備えた転送が可能となる。
さらに高速転送においてパケットデータをブロック分割し、ブロックごとのエラー修復を可能としたことにより、高速転送の場合においても高信頼の確保が可能となっている。
なお、本実施の形態ではコマンドデータを冗長転送対象のデータとし、コマンドデータを重複して転送することによる高信頼性のデータ転送を行っているが、他のデータを冗長転送の対象とすることもできる。すなわち、送信側コマンドバス111bに他のデータを入力すれば、入力したデータを複数の通信経路で重複転送することができる。例えば、ストアデータの重複転送も可能である。
同様に、本実施の形態ではストアデータを並列転送対象のデータとし、ストアデータの分割データを複数の通信経路で並列転送することによって高速転送を行っているが、他のデータを並列転送の対象とすることもできる。すなわち、送信側ストアデータバス111cに他のデータを入力すれば、入力したデータを並列転送することができる。例えば、コマンドデータの並列転送も可能である。
また、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
(付記1) 受信装置に対して複数の通信経路で接続可能な送信装置であって、
冗長転送の対象となるデータが入力されると、入力されたデータと同一内容の複数の冗長転送データを複数の前記通信経路それぞれに向けて転送する冗長転送部と、
分割転送の対象となるデータが入力されると、入力されたデータを複数の分割データに分割し、前記分割データを複数の前記通信経路に振り分け、振り分けられた前記通信経路に向けて転送するデータ分割転送部と、
複数の前記通信経路それぞれに対応付けて設けられており、対応する前記通信経路に向けて前記冗長転送部または前記データ分割転送部から転送された前記冗長転送データまたは前記分割データを、対応する前記通信経路を介して前記受信装置へ送信するデータ送信部と、
を有する送信装置。
(付記2) 前記冗長転送部は、複数の前記冗長転送データそれぞれに対して、前記冗長転送データであることを示す識別子を付加し、
前記データ分割転送部は、複数の前記分割データにそれぞれに対して、前記分割データであることを示す識別子を付加することを特徴とする付記1記載の送信装置。
(付記3) 前記データ分割転送部は、複数の前記分割データに基づいて、複数の前記分割データの復元用冗長データを生成し、前記復元用冗長データと前記分割データとを前記通信経路に振り分けることを特徴とする付記1記載の送信装置。
(付記4) 前記データ分割転送部は、複数の前記分割データのビットごとの排他的論理和を計算し、計算結果を前記復元用冗長データとすることを特徴とする付記3記載の送信装置。
(付記5) 前記データ分割転送部は、前記分割データを複数のブロックに分け、前記ブロックごとにチェックコードを付加し、複数の前記分割データそれぞれから得られる1つずつの前記ブロックに基づいて、前記復元用冗長データを生成することを特徴とする付記3記載の送信装置。
(付記6) 前記データ分割転送部は、複数の前記分割データそれぞれを送信する際の送信順が同じ複数の前記ブロックに基づいて前記復元用冗長データを生成することを特徴とする付記5記載の送信装置。
(付記7) 前記データ分割転送部は、前記分割データを複数のブロックに分け、前記ブロックごとにチェックコードを付加することを特徴とする付記1記載の送信装置。
(付記8) 複数の前記データ送信部は、前記冗長転送データまたは前記分割データを、前記冗長転送部または前記データ分割転送部からの転送の早い順に送信することを特徴とする付記1記載の送信装置。
(付記9) 複数の前記データ送信部は、前記冗長転送データおよび前記分割データをシリアル伝送方式で送信することを特徴とする付記1記載の送信装置。
(付記10) 送信装置に対して複数の通信経路で接続可能な受信装置であって、
複数の前記通信経路それぞれに対応付けて設けられており、対応する前記通信経路を介して前記送信装置から送られたデータを受信する複数のデータ受信部と、
複数の前記データ受信部それぞれに対応付けて設けられており、対応する前記データ受信部が受信した前記データを解析し、受信した前記データが、複数の前記通信経路を用いて同一データの冗長送信が行われた冗長転送データなのか、または元データを分割することで得られたデータを複数の前記通信経路に分散してデータ転送が行われた分割データなのかを判断する複数のデータ解析部と、
複数の前記データ解析部それぞれから前記冗長転送データを取得し、取得した前記冗長転送データのうちの1つを選択し、選択した前記冗長転送データを出力するデータ選択部と、
複数の前記データ解析部それぞれから前記分割データを取得し、取得した前記分割データを合成して合成データを生成し、生成した前記合成データを出力するデータ合成部と、
を有する受信装置。
(付記11) 前記データ解析部は、受信した前記データに付与されている識別子により、受信した前記データが、前記冗長転送データなのか、または前記分割データなのかを判断することを特徴とする付記10記載の受信装置。
(付記12) 前記データ選択部は、最初に取得したエラーのない前記冗長転送データを選択することを特徴とする付記10記載の受信装置。
(付記13) 前記データ解析部は、対応する前記データ受信部が受信した前記データの解析により、受信した前記データが、前記分割データの復元用冗長データであることを判断し、
前記データ合成部は、複数の前記分割データのうちの1つにエラーがある場合、前記復元用冗長データを用いてエラーのあった前記分割データを復元することを特徴とする付記10記載の受信装置。
(付記14) 前記データ合成部は、エラーのない前記分割データと前記復元用冗長データとのビットごとの排他的論理和を計算し、計算結果をエラーのあった前記分割データとすることを特徴とする付記13記載の受信装置。
(付記15) 前記データ受信部は、前記復元用冗長データまたは前記分割データをブロック単位で受信し、
前記データ合成部は、複数の前記分割データを構成する前記ブロックごとに、エラーがあった前記分割データの復元を行うことを特徴とする付記13記載の受信装置。