(57)【特許請求の範囲】
【請求項１】
複数のレーンでシリアル通信によるデータを受信する受信回路であって、
受信データのエラーをチェックするレーンごとに設けられた複数のエラーチェック部と、
前記受信データを格納するレーンごとに設けられた複数のメモリと、
前記受信データを前記複数のメモリから読み出しタイミングを合わせて読み出し、出力する処理部と、
を備え、
前記複数のレーンは、前記受信データに対する冗長データを送信する冗長レーンを含み、
前記複数のメモリは、前記受信データをそれぞれが備える複数の領域のうちの第１の領域に格納し、前記受信データの次に受信された他の受信データを前記複数の領域のうちの第２の領域に格納し、
前記処理部は、前記受信データを格納する複数のメモリの各々の第1の領域に格納された受信データのいずれかにエラーがある場合、前記冗長データを格納するメモリの第1の領域に格納された冗長データを用いて、正常なデータを生成し、エラーのある受信データに代えて前記正常なデータを出力し、
前記受信回路は、
前記受信データの書き込み位置を示すライトポインタ値を前記メモリに出力するレーンごとに設けられた複数のライトポインタ部と、
前記受信データをチェックし、前記受信データの受信終了を前記複数のライトポインタ部に通知するレーンごとに設けられた複数のデータ監視部と、
をさらに備え、
前記複数のライトポインタ部は、前記受信データが格納された前記第１の領域のアドレスを前記ライトポインタ値として出力し、前記受信データの受信終了が通知された場合、前記第２の領域のアドレスを前記ライトポインタ値として出力し、
前記メモリは、前記ライトポインタ値で示される位置に入力されたデータを格納することを特徴とする受信回路。
【請求項２】
前記複数のデータ監視部は、前記受信データをチェックし、前記受信データの受信開始を前記複数のライトポインタ部に通知し、
前記複数のライトポインタ部は、前記受信データの受信開始が通知された場合、前記ライトポインタ値のインクリメントを開始することを特徴とする請求項１記載の受信回路。
【請求項３】
前記受信データの読み出し位置を示すリードポインタ値を前記複数のメモリに出力するリードポインタ部と、
をさらに備え、
前記処理部は、前記複数のメモリから読み出したリードデータをチェックし、前記リードデータの読み出し終了を前記リードポインタ部に通知し、
前記リードポインタ部は、前記受信データが格納された前記第１の領域のアドレスを前記リードポインタ値として出力し、前記リードデータの読み出し終了が通知された場合、前記第２の領域のアドレスを前記リードポインタ値として出力し、
前記複数のメモリは、前記リードポインタ値で示される位置に格納されたデータを出力することを特徴とする請求項１または２記載の受信回路。
【請求項４】
前記複数のデータ監視部は、前記受信データをチェックし、前記受信データの受信開始を前記リードポインタ部に通知し、
前記リードポインタ部は、前記複数のデータ監視部のすべてから前記受信データの受信開始の通知を受信したとき、前記リードポインタ値のインクリメントを開始することを特徴とする請求項３記載の受信回路。
【請求項５】
複数のレーンでシリアル通信によるデータを受信する受信回路を備える情報処理装置であって、
前記受信回路は、
受信データのエラーをチェックするレーンごとに設けられた複数のエラーチェック部と、
前記受信データを格納するレーンごとに設けられた複数のメモリと、
前記受信データを前記複数のメモリから読み出しタイミングを合わせて、出力する処理部と、
を備え、
前記複数のレーンは、前記受信データに対する冗長データを送信する冗長レーンを含み、
前記複数のメモリは、前記受信データをそれぞれが備える複数の領域のうちの第１の領域に格納し、前記受信データの次に受信された他の受信データを前記複数の領域のうちの第２の領域に格納し、
前記処理部は、前記受信データを格納する複数のメモリの各々の第１の領域に格納された受信データのいずれかにエラーがある場合、前記冗長データを格納するメモリの第1の領域に格納された冗長データを用いて、正常なデータを生成し、エラーのある受信データに代えて前記正常なデータを出力し、
前記受信回路は、
前記受信データの書き込み位置を示すライトポインタ値を前記メモリに出力するレーンごとに設けられた複数のライトポインタ部と、
前記受信データをチェックし、前記受信データの受信終了を前記複数のライトポインタ部に通知するレーンごとに設けられた複数のデータ監視部と、
をさらに備え、
前記複数のライトポインタ部は、前記受信データが格納された前記第１の領域のアドレスを前記ライトポインタ値として出力し、前記受信データの受信終了が通知された場合、前記第２の領域のアドレスを前記ライトポインタ値として出力し、
前記メモリは、前記ライトポインタ値で示される位置に入力されたデータを格納する
ことを特徴とする情報処理装置。
【請求項６】
複数のレーンでシリアル通信によるデータを受信する受信回路の制御方法であって、
受信データおよび前記受信データに対する冗長データを受信し、
前記受信データのエラーをチェックし、
前記受信データを複数のメモリに格納し、
前記受信データを前記複数のメモリから読み出しタイミングを合わせて読み出し、出力する
制御方法であって、
前記格納する処理において、前記受信データを前記複数のメモリのそれぞれが備える複数の領域のうちの第１の領域に格納し、前記受信データの次に受信された他の受信データを前記複数の領域のうちの第２の領域に格納し、
前記出力する処理において、前記受信データを格納する複数のメモリの各々の第１の領域に格納された受信データのいずれかにエラーがある場合、前記冗長データを格納するメモリの第1の領域に格納された冗長データを用いて、正常なデータを生成し、エラーのある受信データに代えて前記正常なデータを出力し、
前記受信データの書き込み位置を示すライトポインタ値を前記メモリに出力し、
前記受信データをチェックし、前記受信データの受信終了を通知し、
前記ライトポインタ値を前記メモリに出力する処理において、前記受信データが格納された前記第１の領域のアドレスを前記ライトポインタ値として出力し、前記受信データの受信終了が通知された場合、前記第２の領域のアドレスを前記ライトポインタ値として出力し、
前記格納する処理において、前記ライトポインタ値で示される位置に入力されたデータを格納する
ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数レーンでシリアル通信を行う受信回路、該受信回路を備える情報処理装置、および制御方法に関する。
【背景技術】
【０００２】
ポート間を複数レーンでシリアル通信を行う場合、接続元ポートの送信回路は送信データをレーン数に分割し、分割したデータをそれぞれのレーンで送信する。接続先ポートの受信回路は、それぞれのレーンで受信したデータを復元する。
【０００３】
図１は、従来の受信回路の構成図である。
図１は、２つのレーン（レーン０およびレーン１）を用いた受信回路の構成図である。
【０００４】
受信回路１０は、SERializer/DESerializer（SerDes）１１−ｉ（ｉ＝０〜１）、Cyclic Redundancy Check（ＣＲＣ）チェック部１２−ｉ、デュアルポートRandom Access Memory（ＲＡＭ）１３−ｉ、ライトポインタ１４−ｉ、およびリードポインタ１５を備える。
【０００５】
SerDes１１−ｉ、ＣＲＣチェック部１２−ｉ、デュアルポートＲＡＭ１３−ｉ、およびライトポインタ１４−ｉは、レーンｉのデータを処理する。
【０００６】
SerDes１１は、シリアルデータとパラレルデータを相互に変換する回路である。受信回路１０において、SerDes１１は、受信したシリアルデータをパラレルデータに変換する。
【０００７】
ＣＲＣ１２チェック部は、ＣＲＣを用いてデータのエラーチェックを行う。
デュアルポートＲＡＭ１３は、データを格納する記憶装置である。デュアルポートＲＡＭ１３は、ライトポインタ値で示される位置にデータを書き込み、リードポインタ値で示される位置からデータを読み出す。
【０００８】
ライトポインタ１４は、デュアルポートＲＡＭ１３にデータの書き込み位置を示すライトポインタ値を送信する。
【０００９】
リードポインタ１５は、デュアルポートＲＡＭ１３にデータの読み出し位置を示すリードポインタ値を送信する。リードポインタ１５は、デュアルポートＲＡＭ１３にレーン間スキューが揃うようにリードポインタ値を送信する。それにより、デュアルポートＲＡＭ１３からは、レーン間スキューの揃ったデータが出力される。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−２２３２０３号公報
【特許文献２】特開２００２−７３１２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
従来の受信回路において、SerDesで受信したデータに対して、ＣＲＣチェック部でエラーを検出した場合、該データは無効となるだけでなく、ライトポインタ値が途中で止まる等により、レーン間のライトポインタ値にずれが生じる。
【００１２】
その為、従来は、リセットをして、デュアルポートＲＡＭ、ライトポインタ、リードポインタのクリアを行い、再度、転送を行っていた。
【００１３】
従来は、エラー発生時にリセットを行っており、リセットの期間は、通常の転送が出来ず、性能の低下が発生していた。
【００１４】
本発明の課題は、エラーの発生による性能低下を防ぐことである。
【課題を解決するための手段】
【００１５】
実施の形態の受信回路は、複数のレーンでシリアル通信によるデータを受信する。
受信回路は、レーンごとに設けられたエラーチェック部と、設けられた複数のメモリと、処理部と、を備える。
【００１６】
前記複数のエラーチェック部は、受信データのエラーをチェックする。
前記複数のメモリは、前記受信データを格納する。
前記処理部は、前記受信データを前記複数のメモリから読み出しタイミングを合わせて読み出し、出力する。
前記複数のレーンは、前記受信データに対する冗長データを送信する冗長レーンを含む。
【００１７】
前記複数のメモリは、前記受信データをそれぞれが備える複数の領域のうちの第１の領域に格納し、前記受信データの次に受信された他の受信データを前記複数の領域のうちの第２の領域に格納し、前記処理部は、前記受信データを格納する複数のメモリの各々の第1の領域に格納された受信データのいずれかにエラーがある場合、前記冗長データを格納するメモリの第1の領域に格納された冗長データを用いて、正常なデータを生成し、エラーのある受信データに代えて前記正常なデータを出力する、
【発明の効果】
【００１８】
実施の形態の受信回路によれば、エラーの発生による性能低下を防ぐことができる。
【図面の簡単な説明】
【００１９】
【図１】従来の受信回路の構成図である。
【図２】実施の形態に係る送信回路および受信回路の全体図である。
【図３】実施の形態に係る送信回路の構成図である。
【図４】実施の形態に係る受信回路の構成図である。
【図５】実施の形態に係るデュアルポートＲＡＭのメモリマップである。
【図６】データ復元を説明する図である。
【図７】エラー発生時、エラー復元時、および次データ受信時のデュアルポートＲＡＭの格納データの例を示す図である
【図８】実施の形態に係る受信処理のフローチャートである。
【図９】実施の形態に係る受信回路のタイムチャートである。
【図１０】他の実施の形態に係る送信回路および受信回路の全体図である。
【図１１】実施の形態に係る情報処理装置の構成図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら実施の形態について説明する。
図２は、実施の形態に係る送信回路および受信回路の全体図である。
【００２１】
実施の形態の送信回路および受信回路は、Large Scale Integration（ＬＳＩ）１０１、１１１に搭載される。
【００２２】
ＬＳＩ１０１、１１１は、各種処理を行う回路であり、例えば、Input/Output（Ｉ／Ｏ）コントローラ、インタフェースコントローラ、およびメモリコントローラ等である。
【００２３】
ＬＳＩ１０１は、送信回路２０１および受信回路３１１を備える。
ＬＳＩ１１１は、送信回路２１１および受信回路３０１を備える。
【００２４】
ＬＳＩ１０１とＬＳＩ１１１は、マルチレーンシリアルバスにより接続されている。
実施の形態において、ＬＳＩ１０１とＬＳＩ１１１は、シリアルバスとして３つのレーン３０１−ｊ（ｊ＝０〜２）で通信している。ここでは、３つのレーン３０１−ｊをそれぞれレーン０、レーン１、およびレーン２と呼ぶ。また、レーン２は、冗長レーンとも呼ぶ。
【００２５】
ここで、ＬＳＩ１０１からＬＳＩ１１１にデータが送信される場合について述べる。
送信回路２０１には、ＬＳＩ１０１の内部回路から送信対象のデータが分割された２つ分割データが入力される。２つの分割データは、それぞれレーン０データおよびレーン１データと呼ぶ。
【００２６】
レーン０データおよびレーン１データは、送信回路２０１において、シリアルデータへの変換やＣＲＣの付加等が行われ、レーン０送信データおよびレーン１送信データとなる。
【００２７】
レーン０送信データおよびレーン１送信データは、それぞれレーン０およびレーン１を介して受信回路３０１に送信される。
【００２８】
また、送信回路２０１は、レーン０データおよびレーン１データからパリティデータを生成し、レーン２を介して、パリティデータを受信回路３０１に送信する。
【００２９】
受信回路３０１は、レーン０送信データおよびレーン１送信データを受信し、パラレルデータへ変換やエラーチェック等を行い、レーン０データおよびレーン１データを出力する。
【００３０】
また、受信回路３０１は、レーン０送信データまたはレーン１送信データのいずれかにエラーがあった場合、パリティデータを使用して、正常なレーン０データまたはレーン１データを生成して出力する。
【００３１】
尚、送信回路２１１から受信回路３１１へのデータの送受信処理については、上記と同様であるため説明は省略する。
【００３２】
図３は、実施の形態に係る送信回路の構成図である。
送信回路２０１は、パリティ生成部２０２、制御コード生成部２０３−ｊ（ｊ＝０〜２）、ＣＲＣ生成部２０４−ｊ、およびSERDES２０５−ｊを備える。
【００３３】
パリティ生成部２０２は、入力されたレーン０データおよびレーン１データからパリティデータを生成する。パリティデータは、レーン０データおよびレーン１データの奇数パリティ（Odd Parity）である。
【００３４】
パリティ生成部２０２は、レーン０データ、レーン１データ、およびパリティデータを制御コード生成部２０３−ｊにそれぞれ出力する。
【００３５】
制御コード生成部２０３−０は、入力されたデータ（すなわち、レーン０データ）に制御コードを付加し、ＣＲＣ生成部２０４−０に出力する。制御コードとしては、例えば、データの開始を示すスタートコード（/S）、データの終わりを示すターミネイトコード（/T）等がある。また、制御コードは、例えば、IEEE802.3等の規格で規定されている情報である。
【００３６】
ＣＲＣ生成部２０４−０は、入力されたデータのＣＲＣを算出し、ＣＲＣを入力されたデータに付加し、SERDES２０５−０に出力する。
【００３７】
SERDES２０５−０は、入力されたデータをシリアルデータに変換し、レーン０に出力する。尚、レーンｊに出力されるデータは、レーンｊ送信データと呼ぶ。
【００３８】
制御コード生成部２０３−１、２０３−２、ＣＲＣ生成部２０４−１、２０４−２、およびSERDES２０５−１、２０５−２の機能は、それぞれ上述の制御コード生成部２０３−０、ＣＲＣ生成部２０４−０、およびSERDES２０５−０と同様であるため、説明は省略する。
【００３９】
図４は、実施の形態に係る受信回路の構成図である。
受信回路３０１は、レーンデータ処理部３２１−ｊ、リードポインタ３３１、およびスキュー合わせ／データ復元部３４１を備える。
【００４０】
レーンデータ処理部３２１−ｊは、レーンｊから受信したデータを処理する。
レーンデータ処理部３２１−ｊは、SERDES３２２−ｊ、ＣＲＣチェック部３２３−ｊ、レーンデータ監視部３２４−ｊ、エラーレジスタ３２５−０、ライトポインタ３２６−ｊ、デュアルポートＲＡＭ３２７−ｊを備える。
【００４１】
SERDES３２２−ｊは、入力されたデータをパラレルデータに変換し、ＣＲＣチェック部３２３−ｊに出力する。
【００４２】
ＣＲＣチェック部３２３−ｊは、入力されたデータのＣＲＣをチェックし、エラーがあるか否か判定する。ＣＲＣチェック部３２３−ｊは、エラーがあると判定した場合、エラーレジスタ３２５−ｊにエラーがあったことを示す情報を設定する。ＣＲＣチェック部３２３−ｊは、入力されたデータをレーンデータ監視部３２４−ｊに出力する。
【００４３】
レーンデータ監視部３２４−ｊは、入力されたデータを監視（チェック）し、制御コードを検出する。/Sや/T等の制御コードを検出した場合、検出した制御コードをライトポインタ３２６−ｊおよびリードポインタ３３１に通知する。
【００４４】
エラーレジスタ３２５−ｊは、レーンｊから受信したデータのエラーの有無を示す情報を格納する。
【００４５】
ライトポインタ３２６−ｊは、データの書き込み位置を示すライトポインタ値をデュアルポートＲＡＭ３２７−ｊに出力する。ライトポインタ３２６−ｊは、レーンデータ監視部３２４から/Tの検出の通知を受信すると、ライトポインタ値を他の（次の）空間のアドレスに変更する。
【００４６】
デュアルポートＲＡＭ３２７−ｊは、入力されたデータをライトポインタ値で指定されたアドレスに書き込む。デュアルポートＲＡＭ３２７−ｊは、リードポインタ値で指定されたアドレスからデータを読み出し、スキュー合わせ／データ復元部３４１に出力する。
【００４７】
ここで、デュアルポートＲＡＭ３２７のデータの格納について説明する。
図５は、実施の形態に係るデュアルポートＲＡＭのメモリマップである。
【００４８】
デュアルポートＲＡＭ３２７には、複数の空間（領域）が設定される。
実施の形態においては、４つの空間（領域）が設定されているものとする。４つの空間は、それぞれＡ空間、Ｂ空間、Ｃ空間、およびＤ空間と呼ぶ。
【００４９】
Ａ空間は、アドレス00hから1Fhまでの領域である。
Ｂ空間は、アドレス20hから3Fhまでの領域である。
Ｃ空間は、アドレス40hから5Fhまでの領域である。
Ｄ空間は、アドレス60hから7Fhまでの領域である。
【００５０】
尚、上記アドレスの数字の最後の”h”は、アドレスが１６進数表記であることを示す。
【００５１】
実施の形態において、各空間の先頭のアドレスには、NOP（no operation）が予め格納されている。NOPは、何もしないことを示す特定のデータ列である。NOPは、例えば、0000_0000hやffff_ffffh等の予め定められたデータ列である。
【００５２】
各空間の先頭の次のアドレスには、格納するデータの制御コード（/S）であるヘッダーが格納され、以下、格納するデータのペイロードが格納されていく。
【００５３】
実施の形態において、デュアルポートＲＡＭ３２７は、開始を示す/Sから終了を示す/Tまでのデータを一つのデータとし、データごとに異なる空間に格納していく。具体的には、レーンデータ監視部３２４が/Tを検出すると、/Tの検出をライトポインタ３２６に通知する。ライトポインタ３２６は、/Tの検出が通知されると、デュアルポートＲＡＭ３２７に出力するライトポインタ値を現在のメモリアドレスから他の空間（例えば、次の空間）のメモリアドレスに変更する。
【００５４】
上述のように、各空間の先頭のアドレスにはＮＯＰが格納される。したがって、実施の形態において、ライトポインタ３２６は、/Tの検出の通知を受信すると、ライトポインタ値を次の空間の先頭のアドレスの次（２番目）のアドレスに変更する。
【００５５】
例えば、ライトポインタ３２６は、現在のライトポインタ値がＡ空間の02hである場合、/Tの検出の通知を受信すると、ライトポインタ値をＢ空間の21hに変更する。
【００５６】
このように、ライトポインタ３２６が、/Tの検出ごとに、ライトポインタ値を他の空間のアドレスに変更することにより、デュアルポートＲＡＭ３２７には、レーンデータ処理部３２１が受信したデータが、/Sから/Tまでのデータごとに、異なる空間に格納される。
【００５７】
ここで、各空間のアドレスの設定方法について説明する。
各空間のアドレスは、空間ごとにアドレスの上位nビットが異なるように設定される。すなわち、同一空間において、アドレスの上位nビットは同一となる。実施の形態では、n=3としている。
【００５８】
例えば、上記のＡ空間およびＢ空間をそれぞれ２進数表記で表す。
Ａ空間は、アドレス0000_0000bから0001_1111bまでの領域である。
【００５９】
Ｂ空間は、アドレス0010_0000bから0011_1111bまでの領域である。
尚、上記アドレスの数字の最後の”b”は、アドレスが２進数表記であることを示す。また、理解を容易にするために、４ビットごとに”_”を挿入して表示している。
【００６０】
上記のように、Ａ空間の上位３ビットは、”000”であり、Ｂ空間の上位３ビットは、”001”である。
【００６１】
ライトポインタ３２６は、/Tの検出の通知を受信したときに出力する次の空間のアドレス値を、現在のライトポインタ値の上位３ビットから算出する。
【００６２】
例えば、現在のライトポインタ値がＡ空間、すなわち00h（=0000_0000b）から1Fh(=0001_1111b)の間の値であれば、Ａ空間のアドレスの上位３ビット”000”に１を加算した”001”と先頭のアドレスの次（２番目）のアドレス”0_0001”を結合した値”0010_0001b(=21h)”が、/Tの検出の通知を受信したときにライトポインタ３２６が出力する次の空間のアドレス値となる。
【００６３】
図５においては、デュアルポートRAM３２７の空間を４つの空間に分け、かつ各空間の深さ（サイズ）を20h分としている。
【００６４】
空間の分割数については、２分割以上あれば良いが、データの間隔の短いシステムで採用する場合においては、分割数を増やし、違うデータを誤読みしてしまうリスクを排除することが望ましい。
【００６５】
また、レーン間のスキューが大きいシステム(環境)で使用する場合は、スキューを吸収するため、1空間当たりの深さ（領域）を40h分等、大きい領域とすることが望ましい。
【００６６】
図４に戻り説明を続ける。
リードポインタ３３１は、データの読み出し位置を示すリードポインタ値を各デュアルポートＲＡＭ３２７に出力する。リードポインタ３３１は、全てのレーンデータ監視部３２４から/Sの検出の通知を受信すると、リードポインタ値のカウントアップを開始する。また、リードポインタ３３１は、レーンデータ監視部３２４から/Tの検出の通知を受信すると、リードポインタ値を他の空間のアドレスに変更する。
【００６７】
例えば、リードポインタ３３１は、レーンデータ監視部３２４から/Tの検出の通知を受信すると、リードポインタ値を次の空間の先頭のアドレスに変更する。
【００６８】
次の空間のアドレスの算出は、上述のライトポインタ３２６と同様の処理である。
例えば、現在のリードポインタ値がＡ空間、すなわち00h（=0000_0000b）から1Fh(=0001_1111b)の間の値であれば、Ａ空間のアドレスの上位３ビット”000”に１を加算した”001”と先頭のアドレス”0_0000”を結合した値”0010_0000b(=20h)”が、/Tの検出の通知を受信したときにリードポインタ３３１が出力する次の空間のアドレス値となる。
【００６９】
スキュー合わせ／データ復元部３４１は、レーン間のスキューを合わせ（デスキュー）、冗長レーン以外の各レーンのデータを出力する。実施の形態では、レーン０データおよびレーン１データを出力する。スキュー合わせ／データ復元部３４１は、デュアルポートＲＡＭ３２７−ｊからデータを読み出しタイミングを合わせて読み出す。
【００７０】
スキュー合わせ／データ復元部３４１は、受信したデータにエラーがあった場合、パリティデータを用いて、正常なデータを生成し、正常なデータをエラーデータの代わりに出力する。
【００７１】
ここで、スキュー合わせ／データ復元部３４１におけるデータ復元、すわなち、正常なデータの生成について説明する。
【００７２】
図６は、データ復元を説明する図である。
ここでは、上記と同様に３レーンでシリアル通信を行い、送信対象のデータが分割された２つのデータ（レーン０データおよびレーン１データ）が送信された場合について説明する。
【００７３】
送信側において、パリティ生成部２０２は、レーン０データ４０１−０およびレーン１データ４０１−１からパリティデータ（または、レーン２データとも呼ぶ）４０１−２を生成する。パリティデータ４０１−２は、レーン０データ４０１−０およびレーン１データ４０１−１の奇数パリティである。
【００７４】
レーン０データ４０１−０、レーン１データ４０１−１、およびパリティデータ４０１−２は、それぞれレーン０、レーン１、およびレーン２を介して受信回路３０１に送信される。
【００７５】
ここでは、受信側で受信されたレーン１データ４０２−１にエラーが検出されたものとする。
【００７６】
この場合、スキュー合わせ／データ復元部３４１は、受信されたレーン１データ４０２−０と受信されたパリティデータ４０２−１を用いて、正常なレーン１データ４０３−１を生成する。
【００７７】
スキュー合わせ／データ復元部３４１は、エラーが検出されたレーン１データ４０２−１の代わりに、正常なレーン１データ４０３−１を出力する。
【００７８】
図７は、エラー発生時、エラー復元時、および次データ受信時のデュアルポートＲＡＭの格納データの例を示す図である。
【００７９】
図７の左側はエラー発生時、真ん中はエラー復元時、右側は次データ受信時を示す。
まず、デュアルポートＲＡＭ３２７−ｊ（ｊ＝０〜２）のＡ空間には、パケット１−ｊが格納され、Ｂ空間には、パケット２−ｊが格納されている。
【００８０】
そして、デュアルポートＲＡＭ３２７−ｊは、パケット３−ｊをＣ空間に格納する。
このとき、デュアルポートＲＡＭ３２７−１のＣ空間に格納されるパケット３−１にエラーがあったものとする。デュアルポートＲＡＭ３２７−１のＣ空間には、エラーのあるパケット３−１（エラー）が格納されている（図７の左側）。
【００８１】
パケット３−１にエラーがあった場合、スキュー合わせ／データ復元部３４１は、パケット３−０とパケット３−２から正常なパケット３−１を生成し、正常なパケット３−１を出力する。
【００８２】
尚、データ復元時でも、デュアルポートＲＡＭ３２７−１のＣ空間には、エラーのあるパケット３−１（エラー）が格納されたままである（図７の真ん中）。
【００８３】
また、デュアルポートＲＡＭ３２７−ｊのライトポインタ値は、パケット３−ｊの/Tの検出を契機として、Ｃ空間からＤ空間に変更される。
【００８４】
そして、デュアルポートＲＡＭ３２７−ｊは、次のデータとしてパケット４−ｊを受信する。デュアルポートＲＡＭ３２７−ｊは、パケット４−ｊをＤ空間に格納する（図７の右側）。
【００８５】
パケット３−１がエラーの場合、パケット３−１の内容および量の妥当性が無いため、ライトポインタ値がずれてしまっている可能性がある。
【００８６】
そのため、従来は、デュアルポートＲＡＭ３２７やライトポインタ３２６のクリア（リセット）を行っていた。
【００８７】
それに対し、実施の形態では、データの切れ目（/T）を検出すると、ライトポインタ値を次の空間のアドレスに変更している。それにより各デュアルポートＲＡＭ３２７において、次のデータは、同一の位置から格納されていく。
【００８８】
このように、データのエラーによりライトポインタ値がずれてしまっている場合でも、データ毎に、データを格納する空間を変更することで、次のデータに対するライトポインタ値は、一致するようになる。
【００８９】
したがって、デュアルポートＲＡＭ３２７やライトポインタ３２６等のリセットが不要となり、性能の低下を防ぐことができる。
【００９０】
図８は、実施の形態に係る受信処理のフローチャートである。
ここでは、図３で示した３レーンを用いた受信回路の処理について説明する。
【００９１】
ステップＳ５０１において、レーンデータ処理部３２１は、送信回路２０１からレーン３０１を介してデータを受信し、SERDES２０５は、受信したデータをパラレルデータに変換する。
【００９２】
ステップＳ５０２において、ＣＲＣチェック部３２３は、入力されたデータのエラーチェックを行う。エラーがあった場合、制御はステップＳ５０３に進み、エラーが無かった場合、制御はステップＳ５０４に進む。
【００９３】
ステップＳ５０３において、ＣＲＣチェック部は、エラーレジスタ３２５にエラーがあったことを示す情報を設定する。
【００９４】
ステップＳ５０４において、レーンデータ監視部３２６は、入力されたデータを監視し、該データがどのようなデータであるかチェックする。データが/Sである場合、制御はステップＳ５０５に進み、/Tである場合、制御はステップＳ５０７に進み、/Sまたは/T以外（例えば、アイドルを示す制御コード（/i）やエラーチェック用のCRC、ペイロード（データ）など）の場合、制御はステップＳ５０６に進む。尚、上述のように、/Sはデータの開始を示す制御コードであり、/Tはデータの終了を示す制御コードである。
【００９５】
ステップＳ５０５において、レーンデータ監視部３２４は、ライトポインタ３２６に/Sの検出を通知する。
【００９６】
ステップＳ５０６において、レーンデータ監視部３２４は、ライトポインタ３２６に動作保持を通知する。
【００９７】
ステップＳ５０７において、レーンデータ監視部３２４は、ライトポインタ３２６およびリードポインタ３３１に/Tの検出を通知する。
【００９８】
ステップＳ５０８において、ライトポインタ３２６は、レーンデータ監視部３２４からの通知に応じたライトポインタ値をデュアルポートＲＡＭ３２７に出力する。詳細には、ライトポインタ３２６は、/Sの検出の通知を受信すると、ライトポインタ値のインクリメントを開始する。また、ライトポインタ３２６は、動作保持の通知を受信すると、ライトポインタ値のインクリメントを継続する。ライトポインタ３２６は、/Tの検出の通知を受信すると、ライトポインタ値を次の空間のアドレス値に変更する。尚、ライトポインタ値のインクリメントに関して、ライトポインタ値はライトポインタ３２６の動作クロックに同期して、１ずつインクリメントされる。
【００９９】
また、デュアルポートＲＡＭ３２７は、ライトポインタ値に示される位置に入力されたデータを書き込む。
【０１００】
ステップＳ５０９において、リードポインタ３３１は、レーンデータ監視部３２４からの/Sの検出の通知をチェックする。そして、リードポインタ３３１は、全てのレーンデータ監視部３２４（実施の形態ではレーンデータ監視部３２４−０〜３２４−２）から/Sの検出の通知を受信したら、リードポインタ値のインクリメント（カウントアップ）を開始する。リードポインタ値のインクリメント開始後、リードポインタ値は、リードポインタ３３１の動作クロックに応じて１ずつインクリメントされていく。
【０１０１】
ステップＳ５１０において、スキュー合わせ／データ復元部３４１は、全てのデュアルポートＲＡＭ３２７からデータを一斉に読み出す。すなわち、スキュー合わせ／データ復元部３４１は、全てのデュアルポートＲＡＭ３２７からデータを読み出しタイミングを合わせて読み出す。ここで、デュアルポートＲＡＭ３２７−０、デュアルポートＲＡＭ３２７−１、およびデュアルポートＲＡＭ３２７−２から読み出されるデータをそれぞれ、レーン０データ、レーン１データ、およびパリティデータ（レーン２データ）と呼ぶ。
【０１０２】
ステップＳ５１１において、スキュー合わせ／データ復元部３４１は、各レーンデータ処理部３２１のエラーレジスタ３２５を参照する。
【０１０３】
ステップＳ５１２において、エラーレジスタ３２５−０にエラーがあったことを示す情報が設定されていた場合、制御はステップＳ５１３に進み、エラーレジスタ３２５−１にエラーがあったことを示す情報が設定されていた場合、制御はステップＳ５１４に進み、エラーレジスタ３２５−２にエラーがあったことを示す情報が設定されていた、またはエラーレジスタ３２５−０およびエラーレジスタ３２５−１にエラーがあったことを示す情報が設定されていなかった場合、制御はステップＳ５１５に進む。
【０１０４】
ステップＳ５１３において、スキュー合わせ／データ復元部３４１は、レーン１データとパリティデータを用いて、正常なレーン０データを生成する。尚、正常なデータの生成方法については、図６で説明した通りである。そして、スキュー合わせ／データ復元部３４１は、生成した正常なレーン０データをデュアルポートＲＡＭ３２７−０から読み出したエラーのあるレーン０データの代わりにレーン０データとして用いる。
【０１０５】
ステップＳ５１４において、スキュー合わせ／データ復元部３４１は、レーン０データとパリティデータを用いて、正常なレーン１データを生成する。そして、スキュー合わせ／データ復元部３４１は、生成した正常なレーン１データをデュアルポートＲＡＭ３２７−１から読み出したエラーのあるレーン１データの代わりにレーン１データとして用いる。
【０１０６】
ステップＳ５１５において、スキュー合わせ／データ復元部３４１は、レーン０データとレーン１データを出力する。
【０１０７】
ステップＳ５１６において、スキュー合わせ／データ復元部３４１は、デュアルポートRAM３２７から読み出したデータを監視し、/Tを検出したら、/Tの検出をリードポインタ３３１に通知する。リードポインタ３３１は、/Tの検出の通知を受信すると、リードポインタ値を次の空間のアドレス値（例えば、次の空間の先頭のアドレス値）に変更し、変更した値を維持する。
【０１０８】
図９は、実施の形態に係る受信回路のタイムチャートである。
図９に示すデータは、上から順にレーンデータ監視部３２４−０の出力（すなわち、デュアルポートRAM３２７−０のライトデータ）、ライトポインタ３２６−０が出力するライトポインタ値、レーンデータ監視部３２４−１の出力（すなわち、デュアルポートRAM３２７−１のライトデータ）、ライトポインタ３２６−１が出力するライトポインタ値、レーンデータ監視部３２４−０の出力（すなわち、デュアルポートRAM３２７−２のライトデータ）、ライトポインタ３２６−２が出力するライトポインタ値、リードポインタ値、デュアルポートRAM３２７−０から読み出したリードデータである。また、レーンデータ監視部３２４−０の出力、レーンデータ監視部３２４−１の出力、レーンデータ監視部３２４−２の出力をそれぞれレーン０のデータ、レーン１のデータ、レーン２のデータを呼ぶ場合がある。
【０１０９】
また、図９のライトポインタ値およびリードポインタ値は１６進数表記である。
図９のタイムチャートの横方向は時間軸であり、２目盛りが１τを示す。
【０１１０】
ここでは、レーン０とレーン１間では３τ分、レーン０とレーン２間では１τ分のスキューがあるデータを受信している場合について記載している。
【０１１１】
時刻t1において、デュアルポートRAM３２７−０は、/Sを先頭にデータの受信を開始し、ライトポインタ値にしたがって受信データを格納している。
【０１１２】
時刻t2において、レーンデータ監視部３２４−０は、/Tを受信したので、/Tの検出をライトポインタ３２６−０に通知する。
【０１１３】
時刻t3において、/Tの検出の通知を受信したライトポインタ３２６−０は、ライトポインタ値を次の空間のアドレスに変更する。詳細には、ライトポインタ３２６−０は、現在のライトポインタ値がＡ空間の03hであるので、Ｂ空間のアドレス21hに変更する。
【０１１４】
また、時刻t2の１τ後および３τ後に、レーンデータ監視部３２４−２およびレーンデータ監視部３２４−１で、それぞれ/Tが検出されている。それにより、時刻t3の１τ後および３τ後に、ライトポインタ３２６−２および３２６−１において、それぞれライトポインタ値が次空間のアドレスに変更されている。尚、別空間のアドレスに変更されたライトポインタ値は、次の/Sが検出されるまで、インクリメントされない。
【０１１５】
また、時刻t3において、レーンデータ監視部３２４−１は、/Sを検出したので、/Sの検出をリードポインタ３３１に通知する。これにより、リードポインタ３３１は、全てのレーンデータ監視部３２４から/Sの検出の通知を受信したので、リードポインタ３３１は、リードポインタ値のインクリメントを開始する。ただし、情報の同期化に４τ程度必要なため、時刻t３から４τ後の時刻t4において、リードポインタ３３１は、リードポインタ値のインクリメントを開始する。
【０１１６】
時刻t5において、レーンデータ監視部３２４−０は、/Sを受信したので、/Sの検出をライトポインタ３２６−０に通知する。
【０１１７】
そして、/Sの検出の通知を受信したライトポインタ３２６−０は、ライトポインタ値のインクリメントを開始する。図９に示すように、時刻t5以降、ライトポインタ３２６−０の出力（ライトポインタ値）は、21hからインクリメントされている。
【０１１８】
時刻t6において、リードデータとして/Tが読み出され、スキュー合わせ／データ復元部３４１は、リードポインタ３３１に、/Tの検出を通知する。そして、/Tの検出の通知を受信したリードポインタ３３１は、リードポインタ値を次空間のアドレスに変更する。詳細には、リードポインタ３３１は、現在のリードポインタ値がＡ空間の04hであるので、Ｂ空間の先頭のアドレス20hに変更する。
【０１１９】
また、時刻t5から１τ後および３τ後に、レーンデータ監視部３２４−２およびレーンデータ監視部３２４−１で、それぞれ/Sが検出され、全てのレーンデータ監視部３２４で/Sが検出されている。上記と同様に、全てのレーンデータ監視部３２４から/Sの検出の４τ後の時刻t7において、リードポインタ値のインクリメントが開始される。
【０１２０】
図１０は、他の実施の形態に係る送信回路および受信回路の全体図である。
上述の実施の形態では、３レーンを用いたシリアル通信を実施していたが、レーン数はこれに限られるものではない。
【０１２１】
例えば、図１０に示すように、送信回路と受信回路との間を５つのレーン３０１−ｍ（ｍ＝０〜４）を用いてシリアル通信を行ってもよい。
【０１２２】
他の実施の形態に係る送信回路および受信回路では、レーン３０１−４を冗長レーンとして用いる。すなわち、レーン３０１−０〜３０１−３で送信されるデータから生成されるパリティデータがレーン３０１−４を介して送信される。
【０１２３】
図１１は、実施の形態に係る情報処理装置の構成図である。
情報処理装置１は、例えば、パーソナルコンピュータやサーバである。
【０１２４】
情報処理装置１は、装置６１１と装置６２１を備える。
装置６１１および装置６２１は、例えば、システムボード、Ｉ／Ｏボード、およびバックプレーンボード等である。
【０１２５】
装置６１１は、Central Processing Unit（ＣＰＵ）６１２、主記憶装置６１３、およびＩ／Ｏコントローラ６１４を備える。
【０１２６】
ＣＰＵ６１２は、各種処理を行うプロセッサである。
主記憶装置６１３は、データを一時的に格納する記憶装置である。主記憶装置６１３は、例えば、Random Access Memory（ＲＡＭ）である。
【０１２７】
Ｉ／Ｏコントローラ６１４は、装置６１１と装置６２１間のデータの送受信の制御を行う。Ｉ／Ｏコントローラ６４１は、インタフェースコントローラ６２２とシリアルバスにより接続し、高速シリアル伝送により通信を行う。
【０１２８】
装置６２１は、インタフェースコントローラ６２２、メモリコントローラ６２３−ｋ（ｋ＝１〜２）、およびメモリ６２４−ｋを備える。
【０１２９】
インタフェースコントローラ６２２は、Ｉ／Ｏコントローラ６４１およびメモリコントローラ６２３と接続し、インタフェースコントローラ６２２とＩ／Ｏコントローラ６４１間、並びにインタフェースコントローラ６２２とメモリコントローラ６２３間のデータの送受信の制御を行う。
【０１３０】
インタフェースコントローラ６２２は、メモリコントローラ６２３とシリアルバスにより接続し、高速シリアル伝送により通信を行う。
【０１３１】
メモリコントローラ６２３は、メモリ６２４のデータの書き込みおよび読み出しを制御する。
【０１３２】
メモリ６２４は、データを一時的に格納する記憶装置である。メモリ６２４は、例えば、Random Access Memory（ＲＡＭ）である。
【０１３３】
Ｉ／Ｏコントローラ６１４、インタフェースコントローラ６２２、およびメモリコントローラ６２３は、図２のＬＳＩ１０１、１１１に対応する。
【０１３４】
実施の形態の送信回路２０１、２１１および受信回路３０１、３１１は、シリアルバスで接続された回路に搭載される。すなわち、実施の形態の送信回路２０１、２１１および受信回路３０１、３１１は、例えば、Ｉ／Ｏコントローラ６１４、インタフェースコントローラ６２２、およびメモリコントローラ６２３に搭載される。
【０１３５】
実施の形態の受信回路によれば、冗長データを受信しているため、受信データにエラーが発生している場合でも、エラー訂正により、正常なデータを取得することができる。それにより、エラー時に再送の必要が無くなる。
【０１３６】
また、実施の形態の受信回路によれば、エラー発生後もパケットの切れ目（/T）で、データの書き込みおよび読み出し空間を切り替えているため、ゴミ（古い）データが残っていたとしても、新しいデータで上書きされ、上書きしたデータのみを読み出しているので、ゴミデータを読み込むという様な不具合は発生しない。したがって、エラー発生時にデュアルポートRAMのリセットの必要が無く、データ転送を続けることができる。
【符号の説明】
【０１３７】
１０１、１１１    ＬＳＩ
２０１、２１１    送信回路
２０２    パリティ生成部
２０３    制御コード生成部
２０４    ＣＲＣ生成部
２０５    SERDES
３０１、３１１    受信回路
３２１    レーンデータ処理部
３２２    SERDES
３２３    ＣＲＣチェック部
３２４    レーンデータ監視部
３２５    エラーレジスタ
３２６    ライトポインタ
３２７    デュアルポートＲＡＭ
３３１    リードポインタ
３４１    スキュー合わせ／データ復元部
６１１、６２１    装置
６１２    ＣＰＵ
６１３    主記憶装置
６１４    Ｉ／Ｏコントローラ
６２２    インタフェースコントローラ
６２３    メモリコントローラ
６２４    メモリ
【図１】
0005970917.tif 000002
【図２】
0005970917.tif 000003
【図３】
0005970917.tif 000004
【図４】
0005970917.tif 000005
【図５】
0005970917.tif 000006
【図６】
0005970917.tif 000007
【図７】
0005970917.tif 000008
【図８】
0005970917.tif 000009
【図１０】
0005970917.tif 000010
【図１１】
0005970917.tif 000011
【図９】
0005970917.tif 000012