(57)【要約】【課題】送受信装置間の通信におけるレイテンシーを低減する。【解決手段】送信装置１７２から複数のレーンを介してデータを受信する受信装置１５２は、複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファ１５３と、複数のレーン間のタイミングを合わせる第１のタイミング信号を、レーンの通信速度と、送信装置１７２及び受信装置１５２の動作クロックとに基づいて出力する速度差制御部１７５と、複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、送信装置１７２と受信装置１５２との周波数差の調整時に、第１のタイミング信号において、第２のタイミング信号、並びに、バッファ１５３からの受信データの読み出し位置と、バッファ１５３への受信データの書き込み位置との差に基づいて、バッファ１５３からの受信データの読み出しタイミングを調節する制御部１５５と、をそなえる。【選択図】図６
2014216981.tif 000002
【特許請求の範囲】
【請求項１】
送信装置から複数のレーンを介してデータを受信する受信装置であって、
前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、
前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、
前記送信装置と前記受信装置との周波数差の調整時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、
をそなえることを特徴とする受信装置。
【請求項２】
前記制御部は、前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を２インクリメントさせる信号を出力することを特徴とする請求項１記載の受信装置。
【請求項３】
前記制御部は、前記所定値を複数そなえ、前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を２インクリメントさせる信号を出力する時間を変えることを特徴とする請求項２記載の受信装置。
【請求項４】
前記制御部は、前記読み出し位置を２インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第１のタイミング信号とに基づいて、前記バッファの前記読み出し位置を１又は２インクリメントすることを特徴とする請求項２記載の受信装置。
【請求項５】
送信装置と、
該送信装置から複数のレーンを介してデータを受信する受信装置と、
前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、をそなえ、
前記受信装置は、
前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、
前記送信装置と前記受信装置との周波数差の調整時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、をそなえ、
前記送信装置は、
前記複数のレーンのそれぞれに対して設けられ、前記第１のタイミング信号において送信データを書き込む第２のバッファをそなえる
ことを特徴とする情報処理装置。
【請求項６】
複数のレーンを介してデータを受信するデータ受信方法であって、
前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力し、
前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力し、
前記送信装置と前記受信装置との周波数差の調整時を検出し、
前記検出時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記複数のレーンのそれぞれに対して設けられ、受信データを格納するバッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する
ことを特徴とするデータ受信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、受信装置、情報処理装置及びデータ受信方法に関する。
【背景技術】
【０００２】
装置（ポート）間で複数レーンのシリアル通信を行う場合、接続元装置の送信回路は送信データをレーン数に分割し、分割したデータをそれぞれのレーンで送信する。接続先装置の受信回路は、それぞれのレーンで受信したデータを復元する。
このような受信回路においてPhysical Coding Sublayer（ＰＣＳ）クロックが使用される場合がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開昭６３−２２２５３６号公報
【特許文献２】特開平４−２６８８５０号公報
【特許文献３】特開平５−１３００９０号公報
【特許文献４】特開平５−２９２１４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このようなＰＣＳ受信回路においては、システムバス等のインタフェース（Ｉ／Ｆ）速度に依存して、ＰＣＳクロック回路のクロック（pcs_clock）の周波数を遅くするためにＰＣＳクロック回路の通過レイテンシーが悪化する。
又、pcs_clockから装置内部のクロックに乗り換えるためのFirst-in First-outバッファ（ＦＩＦＯ）が必要なことも、レイテンシーを悪化させる一因となる。
【０００５】
１つの側面では、本発明は、装置間の通信におけるレイテンシーを低減することを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【０００６】
このため、本開示の受信装置は、送信装置から複数のレーンを介してデータを受信する受信装置であって、前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、前記送信装置と前記受信装置との周波数差の調整時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、をそなえる。
【０００７】
又、本開示の情報処理装置は、送信装置と、該送信装置から複数のレーンを介してデータを受信する受信装置と、前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、をそなえ、前記受信装置は、前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、前記送信装置と前記受信装置との周波数差の調整時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、をそなえ、前記送信装置は、前記複数のレーンのそれぞれに対して設けられ、前記第１のタイミング信号において送信データを書き込む第２のバッファをそなえる。
【０００８】
さらに、本開示のデータ受信方法は、複数のレーンを介してデータを受信するデータ受信方法であって、前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力し、前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力し、前記送信装置と前記受信装置との周波数差の調整時を検出し、前記検出時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記複数のレーンのそれぞれに対して設けられ、受信データを格納するバッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する。
【発明の効果】
【０００９】
本発明によれば、装置間の通信におけるレイテンシーを低減することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態の一例としてのＸＢをそなえるサーバの構成図である。
【図２】実施形態の一例としてのＳＢの構成図である。
【図３】実施形態の一例としてのＩＯＢの構成図である。
【図４】実施形態の一例としてのＸＢＢの構成図である。
【図５】実施形態の一例としてのＸＢの構成図である。
【図６】実施形態の一例としてのポート回路の構成図である。
【図７】接続元ＸＢと接続先ＸＢとにおける、オシレータ（ＯＳＩ）と受信クロックとの関係を示す図である。
【図８】実施形態の一例におけるクロック周波数差補償パターンのフォーマットを示す図である。
【図９】実施形態の一例におけるトレーニングパターンのフォーマットを示す図である。
【図１０】実施形態の一例としてのレーン間スキューの調整回路の構成図である。
【図１１】実施形態の変形例としてのレーン間スキューの調整回路の構成図である。
【図１２】実施形態の一例としての受信回路を示す構成図である。
【図１３】実施形態の一例としての送信回路を示す構成図である。
【図１４】実施形態の一例としてのエラスティックバッファ、及びクロック周波数差補償パターン／デスキュー検出部の構成図である。
【図１５】実施形態の一例としての転送速度差制御部を例示する図である。
【図１６】実施形態の一例としての受信制御部の構成を例示する図である。
【図１７】実施形態の一例としてのクロック周波数差補償パターン部の構成を例示する図である。
【図１８】実施形態の一例としての送信側ＸＢポート回路の動作を示すフローチャートである。
【図１９】実施形態の一例としての受信側ＸＢポート回路の動作を示すフローチャートである。
【図２０】実施形態の一例としてのエラスティックバッファのデスキュー時のタイムチャートである。
【図２１】実施形態の一例としての受信制御部のデスキュー時のタイムチャートである。
【図２２】実施形態の一例としてのエラスティックバッファのデスキュー完了後のクロック周波数差補償（ホールド）時のタイムチャートである。
【図２３】実施形態の一例としての受信制御部のデスキュー完了後のクロック周波数差補償（ホールド）時のタイムチャートである。
【図２４】実施形態の一例としてのエラスティックバッファのデスキュー完了後のクロック周波数差補償（２インクリメント）時のタイムチャートである。
【図２５】実施形態の一例としての受信制御部のデスキュー完了後のクロック周波数差補償（２インクリメント）時のタイムチャートである。
【図２６】実施形態の一例としての本発明のエラスティックバッファを使用しないで従来のエラスティックバッファを使用したポート回路の構成図である。
【図２７】実施形態の一例としての本発明のエラスティックバッファを使用しないで従来のエラスティックバッファを使用した受信回路の構成図である。
【図２８】実施形態の一例としての本発明のエラスティックバッファを使用しないで従来のエラスティックバッファを使用した送信回路の構成図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら本実施形態の一例を説明する。
（Ａ）構成
まず、本実施形態の一例の構成について説明する。
図１は、実施形態の一例としてのクロスバー（ＸＢ）をそなえるサーバ１０１の構成図である。
【００１２】
サーバ１０１は、情報処理装置である。サーバ１０１は、システムボード（ＳＢ）１０２−０〜１０２−５（ＳＢ＃０〜＃５）、ＩＯボード（ＩＯＢ）１０３−０，１０３−１（ＩＯＢ＃０，＃１）、クロスバーボード（ＸＢＢ）１０４−０，１０４−１（ＸＢＢ＃０，＃１）、及びバックプレーンボード（ＢＰ）１０５をそなえる。
なお、以下、実施形態の一例の各構成要素を示す符号としては、複数の構成要素のうち１つを特定する必要があるときには、符番にハイフンと数字とを付した符号××−０〜××−ｎを用いる。しかし、複数の構成要素のうちの任意の構成要素を指すときには、その構成要素の符番のみの符号××を用いる。
【００１３】
例えば、図１のシステムボードを示す符号としては、複数のシステムボードのうち１つを特定する必要があるときには符号１０２−０〜１０２−５を用いるが、任意のシステムボードを指すときには符号１０２を用いる。
ＳＢ１０２は、サーバ１０１における各種処理を行う基板であり、後述するように、Central Processing Unit（ＣＰＵ）やDynamic Random Access Memory（ＤＲＡＭ）等をそなえる。
【００１４】
ＩＯＢ１０３は、Local Area Network（ＬＡＮ）やHard Disk Drive（ＨＤＤ）等と接続するコネクタをそなえた基板である。
ＸＢＢ１０４は、ＳＢ１０２やＩＯＢ１０３を相互に接続するためのクロスバースイッチをそなえる基板であり、当該ＸＢＢ１０４に接続された機器同士を相互に接続する。
ＢＰ１０５は、ＳＢ１０２、ＩＯＢ１０３及びＸＢＢ１０４を、図示しないコネクタを介して相互に接続する基板である。
【００１５】
ＳＢ−ＸＢＢ間、ＩＯＢ−ＸＢＢ間、ＸＢＢ−ＸＢＢ間は、それぞれＢＰ１０５を介して、システムバス１０６−０〜１０６−１７により接続されている。システムバス１０６−０〜１０６−１７は、マルチレーンシリアルバスである。
ＳＢ１０２上のＣＰＵが他ＳＢのＤＲＡＭにアクセスする場合は、システムバス１０６を使用して、ＸＢＢ１０４経由でパケットが送信される。同様にＩＯＢ１０３上のGigabit Ethernet（登録商標）（ＧｂＥ）コントローラがＳＢ１０２上のＤＲＡＭにアクセスする場合もシステムバス１０６を使用して、ＸＢＢ１０４経由でパケットが送信される。
【００１６】
例えば、ＳＢ１０２−０からＳＢ１０２−１にアクセスする場合は、ＳＢ１０２−０からＸＢＢ１０４−０を介してＳＢ１０２−１へとパケットが送信される。
又、ＳＢ１０２−０からＳＢ１０２−４にアクセスする場合は、ＳＢ１０２−０からＸＢＢ１０４−０及びＸＢＢ１０４−１を介してＳＢ１０２−４へとパケットが送信される。
【００１７】
パケット送受信において、ＸＢＢ１０４を経由することにより、アクセスレイテンシーが増加する。そのため、ＸＢＢ１０４に搭載されるクロスバースイッチ（ＸＢ）等はレイテンシーが小さいことが望まれる。
図２は、実施形態の一例としてのＳＢの構成図である。
ＳＢ１０２は、ＣＰＵ１１１−１〜１１１−２、ＤＲＡＭ１１２−１〜１１２−２、及びメモリコントローラ（ＭＣ）１１３をそなえる。
【００１８】
ＣＰＵ１１１は中央処理装置であり、ＳＢ１０２の各種処理を行う。
ＭＣ１１３は、ＤＲＡＭ１１２のデータの読み出し、書き込み、リフレッシュなどの制御を行う。ＭＣ１１３は、ＢＰ１０５を介して、ＸＢＢ１０４とシステムバス１１５とにより接続されている。
ＭＣ１１３は、システムバス１１５にデータを送信する不図示の送信回路と、システムバス１１５からのデータを受信する不図示の受信回路とを有するポート回路１１４とをそなえる。
【００１９】
ＭＣ１１３はＣＰＵ１１１から送信されるパケットにより、ＳＢ１０２内のＤＲＡＭ１１２にアクセスするか、他のＳＢ１０２内のＤＲＡＭ１１２にアクセスするのか、ＩＯＢ１０３内のＧｂＥコントローラやSerial Attached Small Computer System Interface（ＳＡＳ）コントローラ１２３にアクセスするのかの制御を行う。
図３は、実施形態の一例としてのＩＯＢの構成図である。
【００２０】
ＩＯＢ１０３は、ＩＯＣ１２１、ＧｂＥコントローラ１２２、ＳＡＳコントローラ１２３、及びHard Disk Drive（ＨＤＤ）１２４をそなえる。
ＩＯＣ１２１はＩＯコントローラである。ＩＯＣ１２１は、ＧｂＥコントローラ１２２及びＳＡＳコントローラ１２３と、それぞれＩＯバス１２６−１、１２６−２により接続されている。
【００２１】
ＩＯＣ１２１には、ＳＡＳコントローラ１２３を介してＨＤＤ１２４が接続されている。
ＩＯＣ１２１は、ＢＰ１０５を介してＸＢＢ１０４とシステムバス１２７によって接続されている。
ＩＯＣ１２１は、システムバス１２７にデータを送信する不図示の送信回路と、システムバス１２７からのデータを受信する不図示の受信回路とを有するポート回路１２５をそなえる。
【００２２】
ＧｂＥコントローラ１２２は、ＧｂＥでの通信を行うコントローラであり、ＬＡＮポートを有する。
ＳＡＳコントローラ１２３は、シリアル通信を行うコントローラであり、ＨＤＤ１２４と接続される。
図４は、実施形態の一例としてのＸＢＢの構成図である。
【００２３】
ＸＢＢ１０４は、ＸＢ１３１をそなえる。
ＸＢ１３１は、データの経路を動的に切り替えて選択するクロスバースイッチである。ＸＢ１３１はシステムバス１３２−１〜１３２−５により、他のＸＢＢ１０４、ＳＢ１０２、又はＩＯＢ１０３に接続されている。
ＸＢ１３１は、ＳＢ１０２等から送信されるパケットを受信し、そのパケットのヘッダーに含まれる宛先を認識し、送信先にルーティングを行う。
【００２４】
図５は、実施形態の一例としてのＸＢ１３１の構成図である。
ＸＢ１３１は、例えば、ＸＢＢ１０４に搭載されるLarge Scale Integration（ＬＳＩ）である。ＸＢ１３１は、ポート回路１４２−０〜１４２−４とスイッチ及びデータバッファ１４３とをそなえる。又、データバッファ１４３には図示しないデータバッファもそなえられている。
【００２５】
ポート回路１４２は、システムバスのプロトコル制御を行う。
スイッチ及びデータバッファ１４３は、ポート回路１４２のいずれかからパケットを受け取り、パケットの宛先に指定されているポート回路１４２にパケットを出力する。
又、ＸＢ１３１は、Inter-Integrated Circuit（Ｉ２Ｃ）バス１３８を介してサービスプロセッサ１３９に接続されている。サービスプロセッサ１３９は、ＸＢ１３１のＩ／Ｆ速度とcore_clockとを設定する。
【００２６】
図６は、図５に示したポート回路（受信装置）１４２の構成図である。
図６に示すように、各ポート回路１４２には、送信Ｉ／Ｆ（Ｉ／Ｆ (TX)）と受信Ｉ／Ｆ（Ｉ／Ｆ (RX)）とが接続される。
本例では、ポート数がポート０〜４の５ポート（図５参照）、システムバスのレーン数は、レーン０〜レーン７の８レーン（図６参照）である。
【００２７】
以下の説明及び図面において、アスタリスク（＊）は、０〜７のレーン番号のいずれかを示すために用いられる。
又、ｍも０〜７のレーン番号のいずれかを示すために用いられる。このため、レーンｍ（ｍ＝０〜７）と接続される受信レーンブロック１５０−ｍ又は送信レーンブロック１７０−ｍを、「レーンｍ受信部」又は「レーンｍ送信部」と呼ぶことがある。
【００２８】
又、以下の説明及び図面において、信号名に含まれる「ｐ」は、０〜４のポート番号のいずれかを表わす。例えば、受信クロック信号rx_p_0_clockは、ポート０のレーン０の受信クロック信号を指す場合には、rx_0_0_clockとなる。
各ポート回路１４２は、レーンｍ受信部１５０−０〜１５０−７、受信データ復元部１５４、レーンｍ送信部１７０−０〜１７０−７、送信データ分割部１７４、転送速度差制御部（速度差制御部）１７５、及び受信制御部１５５をそなえる。なお、図６は、転送速度差制御部１７５と受信制御部１５５とを便宜上、一体に示している。
【００２９】
レーンｍ受信部１５０は、システムバスの対応するレーンからデータを受信する。
各レーンｍ受信部１５０は、デシリアライザ（SerDes (RX)）１５１−０〜１５１−７及びエラスティックバッファ１５３−０〜１５３−７をそなえる。
デシリアライザ１５１は、受信した１ビット幅のシリアルデータから１６ビット幅のパラレルデータを生成する。
【００３０】
エラスティックバッファ１５３は、受信データを格納し、接続装置間のクロック周波数差を吸収するＦＩＦＯである。
エラスティックバッファ１５３において、エラスティックバッファ１５３のライトアドレスは１サイクル毎に１ずつインクリメントされる。一方、リードアドレスは、転送速度差制御部１７５（図１２参照）からの信号に基づいて、１ずつインクリメントされるが、周波数差補償パターン検出時はクロック周波数差補償パターン／デスキュー検出部（デスキュー制御部）１６０（図１２参照）からの信号と、受信制御部１５５（図１２参照）からの信号とに基づいて、ホールド、１インクリメント或いは２インクリメントされる。エラスティックバッファ１５３の詳細な構成については図１４を参照して後述する。
【００３１】
受信データ復元部１５４は、各レーンｍ受信部１５２で受信した複数（図中の例では８）の２０ビットのデータを併合して、１６０ビットの受信データを復元する。
レーンｍ送信部１７０は、システムバスの各レーンにデータを送信する。
レーンｍ送信部１７０は、シリアライザ（SerDes (TX)）１７１−０〜１７１−７、送信回路１７２−０〜１７２−７、及び送信データ分割部１７４をそなえる。
【００３２】
シリアライザ１７１は、送信する１６ビット幅のパラレルデータから１ビット幅のシリアルデータを生成する。
送信回路１７２−０〜１７２−７は、それぞれ、送信ギアボックス（TX-Gear；ギアボックス）１７３−０〜１７３−７をそなえる。
送信ギアボックス１７３は、送信データを格納するＦＩＦＯである。
【００３３】
送信データ分割部１７４は、１６０ビットの送信データを複数（図中の例では８）の２０ビットのデータに分割して、各送信回路１７２に出力する。
転送速度差制御部１７５は、送信ギアボックス１７３への書き込みや、エラスティックバッファ１５３の読み出しの有効タイミングを示す、例えば１ビットの信号data_valid_timing（第１のタイミング信号）を生成する。転送速度差制御部１７５の詳細な構成については、図１５を参照して後述する。
【００３４】
受信制御部１５５は、data_valid_timing信号と、後述するエラスティックバッファ１５３−０〜１５３−７からの信号とを受け取り、エラスティックバッファ１５３−０〜１５３−７のリードポインタ（read_pointer）値の更新を制御する信号を出力する。受信制御部１５５の詳細な構成については、図１６を参照して後述する。
なお、図６に示すクロック信号core_clockは、ＸＢ１３１のＬＳＩ内部で使用される１ビットのクロック信号であり、Ｉ／Ｆ速度に依存せず、例えば０．８ＧＨｚで動作する。図６のレーン０〜７の各々の受信用のクロックrx_p_*_clockと送信用のクロックtx_p_*_clockとは、例えばＩ／Ｆ転送速度の１６分の１の速度で動作する。
【００３５】
なお、前述のように、Ｉ／Ｆ速度とcore_clockとは、サービスプロセッサ（図５参照）によって設定される。
なお、図６の一点鎖線はクロックドメイン境界を示す。
図７は、接続元ＸＢ１３１と接続先ＸＢ１３１とにおける、オシレータ（ＯＳＩ）２０５と受信クロックとの関係を示す図である。
【００３６】
自ＸＢ１３１が接続先ＸＢ１３１と接続されており、接続先ＸＢ１３１が送信側、自ＸＢ１３１が受信側である。
自ＸＢ１３１は、オシレータ２０５、Phase Locked Loop（ＰＬＬ）２０６、ＰＣＳ２０７、及びデシリアライザ２０８をそなえる。デシリアライザ２０８は、前述のデシリアライザ１５１をそなえ、デシリアライザ１５１は内部にClock Data Recovery（ＣＤＲ）２１０をそなえる。
【００３７】
オシレータ２０５は、クロックの生成に用いられる基準周波数を発生させる。
ＰＬＬ２０６は、オシレータ２０５からの基準周波数からＸＢ１３１の内部クロックcore_clockを生成する。
デシリアライザ２０８は、受信した１ビット幅のシリアルデータから１６ビット幅のパラレルデータを生成する。
【００３８】
Clock Data Recovery（ＣＤＲ）２１０は、受信用のクロックrx_clockを復元する。デシリアライザから出力される１６ビット幅のパラレルデータはrx_clockと同期している。
ＰＣＳ２０７は、core_clock、受信用のクロックrx_clock及び送信用のクロックtx_clockを受け取る。受信側２０７ＰＣＳはエラスティックバッファでrx_clockからcore_clockへの乗換、１０Ｂ８Ｂ変換、及び、デスクランブルを行う。送信側ＰＣＳ２０７はスクランブル、８Ｂ１０Ｂ変換、及び、送信ギアボックス１７３でcore_clockからtx_clockへの乗換を行う。
【００３９】
なお、前述のレーン毎の受信用クロックrx_p_*_clockはＣＤＲ２１０から、レーン毎の送信用クロックtx_p_*_clockはＰＬＬ２１２から生成される。
一方、接続先ＸＢ１３１は、オシレータ２０５、ＰＬＬ２０６、ＰＣＳ２０７、ＰＬＬ２１２及びシリアライザ２１１をそなえる。シリアライザ２１１は、前述のシリアライザ１７１をそなえる。
【００４０】
シリアライザ２１１は、送信する１６ビット幅のパラレルデータから１ビット幅のシリアルデータ生成を行う。
ＰＬＬ２１２は、オシレータ２０５からの基準周波数から送信用のクロックtx_clockを生成する。
図７に示すように、自ＸＢ１３１が接続先ＸＢ１３１とには、それぞれ別のオシレータ２０５からリファレンスクロックが供給される。
【００４１】
前述のように、rx_p_*_clockは、ＣＤＲ２１０から復元される。ここでは、例えば、rx_p_*_clockは、接続先ＸＢ１３１のオシレータ２０５の逓倍であり、core_clockと±３００ｐｐｍ以内のクロック周波数差が存在する。
これらcore_clock、rx_p_*_clock、tx_p_*_clock間の周波数差を吸収するため、図６の転送速度差制御部１７５は、送信ギアボックス１７３への書き込みや、エラスティックバッファ１５３の読み出しの有効タイミングを示す信号data_valid_timingを生成する。
【００４２】
例えば、Ｉ／Ｆ速度が１６ＧＨｚの場合、転送速度差制御部１７５は、毎サイクル、data_valid_timingに‘１’を出力し、毎サイクル、送信ギアボックス１７３にデータを書き込ませる。又、後述するクロック周波数差補償を行なわない限り、毎サイクル、エラスティックバッファ１５３からデータを読み出させる。
Ｉ／Ｆ速度が１０ＧＨｚの場合、転送速度差制御部１７５は、８サイクル中５サイクルの間、data_valid_を‘１’にする。Ｉ／Ｆ速度が８ＧＨｚの場合、２サイクル中１サイクルの間、data_valid_timingを‘１’にする。
【００４３】
このとき、転送速度差制御部１７５は、data_valid_timingに‘１’と‘０’とをできるだけ均等に出力することで、カットスルーによるパケット溜め込み時間を短縮する。
ここで、カットスルーとは、パケットの末尾まで受信せずに、データバッファにパケットの末尾の受信が保証できる量だけデータを蓄積した状態で、パケットの先頭の送信を開始する動作を指す。
【００４４】
例えば、転送速度差制御部１７５はＩ／Ｆ速度が１０ＧＨｚの場合、data_valid_timingに１，１，１，１，１，０，０，０…のように１、０を連続させる代わりに、１，１，０，１，１，０，１，０…を繰り返し設定し、０、１をできるだけ交互に出現させる。
ここで、送信側の送信ギアボックス１７３（図６参照）は、tx_p_*_clockの毎サイクル、１６ビット幅のデータを読み出し、シリアライザ１７１に出力する。又、送信ギアボックス１７３への書き込みは、core_clockでdata_valid_timing＝１の時のみ２０ビット幅のデータを書き込むことで、送信側のＩ／ＦとＸＢ１３１内部との転送速度差を吸収する。
【００４５】
一方、受信側のエラスティックバッファ１５３（図６参照）は、クロック周波数差補償機能、レーン間スキューの調節位置ホールド機能、及びカットスルー動作を考慮した送速度差吸収機能をそなえる。
エラスティックバッファ１５３は、rx_p_*_clockに同期して１６ビット幅のデータを毎サイクル書き込む。
【００４６】
エラスティックバッファ１５３は、書き込み時にはシンボル境界を検出し、読み出す際に２０ビットのシンボル単位で読み出せるようにアライメントする。
読み出し時には、エラスティックバッファ１５３から、core_clockに同期して２０ビット幅でデータが読み出される。読み出し制御としては、クロック周波数差補償機能、レーン間スキューの調節位置ホールド機能、及びＩ／ＦとＸＢ１３１内部との転送速度差吸収機能をそなえる。
【００４７】
エラスティックバッファ１５３は、クロック周波数差補償パターンを使用して、クロック周波数補償を行う。
図８は、実施形態の一例におけるクロック周波数差補償パターンのフォーマットを示す図である。
実施形態の一例としてのクロック周波数差補償パターンは、複数（例えば７個）のシンボルで構成され、１つのシンボルは２０ビットで構成されている。シンボルの種類としては、ＣＨ及びＤＭがある。
【００４８】
ＣＨは、Clock Headを表わし、クロック周波数差補償パターンの先頭を示すシンボルである。
ＤＭは、Dummyを表わし、クロック周波数差補償動作時に追加又は削除されるシンボルである。ＤＭの追加又は削除は、エラスティックバッファ１５３のリードアドレス制御で行なわれる。
【００４９】
エラスティックバッファ１５３は、図８に示すクロック周波数差補償パターンを受信すると、クロック周波数補償を行う。送信回路１７２は、最大±３００ｐｐｍの周波数差を吸収するため、１６６６シンボル時間に一度、全てのレーンに同じタイミングで周波数差補償パターンを送信する必要がある。
ここで、１シンボル時間とは、１シンボルを送受信する時間、つまり２０ビットを送受信する時間である。
【００５０】
エラスティックバッファ１５３は、ＣＨとＤＭとの連続（以下、ＣＨ＋ＤＭと記する）を受信すると、クロック周波数補償パターンを受信したと認識する。
Ｉ／Ｆ速度が１６Ｇｂｐｓの場合、つまり、毎サイクルdata_valid_timing＝１となる場合は、一般に、エラスティックバッファ１５３は、リードポインタ（read_pointer）を、毎サイクル１インクリメント（＋１）する。
【００５１】
しかし、クロック周波数差補償パターンの受信時には、エラスティックバッファ１５３のリードポインタ（read_pointer）がライトポインタ（write_pointer）よりも早い場合は、エラスティックバッファ１５３は、リードポインタ（read_pointer）を１サイクルホールドする。このとき、リードデータにおいて、クロック周波数差補償パターンのＤＭシンボルが、１サイクル余分に読み出される。
【００５２】
一方、エラスティックバッファ１５３のリードポインタ（read_pointer）がライトポインタ（write_pointer）よりも遅い場合は、エラスティックバッファ１５３は、リードポインタ（read_pointer）を２インクリメント（＋２）する。このとき、リードデータにおいて、クロック周波数差補償パターンのＤＭシンボルが１個読み飛ばされる。
エラスティックバッファ１５３は、リードポインタ（read_pointer）がライトポインタ（write_pointer）よりも早いか遅いかを、ライトポインタ（write_pointer）とリードポインタ（read_pointer）との差分（以下、ライト−リードアドレス差分と呼ぶ）を所定の基準値（以下、この値を所定値と呼ぶ）と比較することにより判定する。ライト−リードアドレス差分が所定値と等しい場合には、エラスティックバッファ１５３は、リードポインタ（read_pointer）のホールドも２インクリメントも行わない。
【００５３】
なお、所定値は、ＸＢ１３１に予め設定されている値である。
Ｉ／Ｆ速度が１６Ｇｂｐｓの場合、１シンボルタイムとcore_clock１サイクルとが一致するため、エラスティックバッファ１５３は、クロック周波数差を吸収するためのクロック周波数補償パターン１個につき１サイクル、ホールド又は＋２する。
つまり、Ｉ／Ｆ速度とＬＳＩ内部の転送速度とが同じであるため、転送速度差制御部１７５は、data_valid_timingを‘０’にしてＸＢ１３１のＬＳＩ内部で間引きしてデータを読み出す必要がないので、毎サイクルdata_valid_timingを‘１’にする。
【００５４】
Ｉ／Ｆ速度が８Ｇｂｐｓの場合は、１シンボルタイムがcore_clock２サイクル分に対応し、転送速度差制御部１７５はdata_valid_timingが‘１’と‘０’とを繰り返す。エラスティックバッファ１５３は、１つのクロック周波数差補償パターンに対して、１シンボルタイム補正する必要があるため、core_clockで最大２サイクル分補正する。
リードポインタ（read_pointer）が所定値よりcore_clock２サイクル分（＝１シンボルタイム）早い場合、エラスティックバッファ１５３は、ＣＨ＋ＤＭ受信時に、data_valid_timingが連続して‘１’の場合、リードポインタ（read_pointer）２回分をホールドする。
【００５５】
リードポインタ（read_pointer）が所定値よりcore_clock１サイクル分（＝０．５シンボルタイム）早い場合には、エラスティックバッファ１５３は、data_valid_timing＝１のときに、リードポインタ（read_pointer）を１回分ホールドする。
このように、本実施形態の一例としてのエラスティックバッファ１５３は、ライト−リードポインタ（read_pointer）差分の所定値からのずれに応じて、リードポインタ（read_pointer）をホールドする時間を調整する。
【００５６】
詳細には、リードポインタ（read_pointer）が所定値よりcore_clock２サイクル分（＝１シンボルタイム）遅い場合、ＣＨ＋ＤＭを受信した次のサイクルのdata_valid_timing＝０のタイミングで、エラスティックバッファ１５３は、リードポインタ（read_pointer）を＋１する。又、その直後にdata_valid_timing＝１のタイミングでリードポインタ（read_pointer）を＋２する。
【００５７】
一方、リードポインタ（read_pointer）が所定値よりcore_clock１サイクル分（＝０．５シンボルタイム）遅い場合、data_valid_timing＝０のタイミングでリードポインタ（read_pointer）を＋１するか、或いは、data_valid_timing＝１のタイミングでリードポインタ（read_pointer）を＋２する。
Ｉ／Ｆ速度が１２Ｇｂｐｓの場合、１シンボルタイムがcore_clockの４／３サイクル分に対応し、転送速度差制御部１７５は、data_valid_timingとして“１，１，１，０”を繰り返す。
【００５８】
１２Ｇｂｐｓでリードポインタ（read_pointer）がcore_clock２サイクル分遅い場合、data_valid_timingに‘１’が連続するため、data_valid_timing＝０になったタイミングで、エラスティックバッファ１５３は、リードポインタ（read_pointer）を＋１することができない。
クロック周波数補償パターンが十分に長いことがプロトコル上保障されていれば、エラスティックバッファ１５３は、data_valid_timing＝１のときにリードポインタ（read_pointer）を＋２し、次のdata_valid_timing＝１のときにさらに＋２する。或いは、エラスティックバッファ１５３が、data_valid_timing＝１のときにリードポインタ（read_pointer）を３インクリメント（＋３）することが考えられる。
【００５９】
しかし、プロトコル上、周波数補償パターンが十分に長くない場合には、エラスティックバッファ１５３は、最初のdata_valid_timing＝１のときに＋２し、次にdata_valid_timing＝０となるまで待ってリードポインタ（read_pointer）を＋１する。さらに、例外的ではあるが、data_valid_timing＝０のときもリードデータを読み出す必要がある。
なお、カットスルー性能を低下させないためには、パケット内の隙間量が予想できることが必要となる。
【００６０】
このように、エラスティックバッファ１５３が行うクロック周波数差補償においては、転送速度差制御部１７５が生成するdata_valid_timing＝１のときに決められる量よりもパケット内の隙間が大きくならない。つまり、クロック周波数差補償が、カットスルー時のパケット蓄積に影響しない。
ここで、各レーンがそれぞれ独立してクロック周波数差補償を行うと、デスキュー調節位置がずれてしまう。
【００６１】
そのための解決策として、エラスティックバッファ１５３とデスキューバッファとを一体化し、レーン間スキュー調節完了後は、ポート単位でクロック周波数差補償を行う方法が考えられる。
図９は、実施形態の一例におけるトレーニングパターンのフォーマットを示す図である。
【００６２】
トレーニングパターンは、リンク初期化時に接続先ポート間の情報交換やデスキュー等に使用される。
実施形態の一例としてのトレーニングパターンは、３２個のシンボルで構成される。シンボルの種類としては、ＴＨ、ＡＬ、ＤＳ、及びＳＩがある。なお、１つのシンボルは２０ビットで構成されている。
【００６３】
ＴＨは、Training Pattern Headを表わし、トレーニングパターンの先頭を示すシンボルである。
ＡＬは、Alignmentを表わし、２０ビット境界パターンを示すシンボルである。
ＤＳは、Deskewを表わし、デスキューパターンを示すシンボルである。
ＳＩは、Sequence Informationを表わし、初期化手順で接続先ポートに通知する情報を示すシンボルである。
【００６４】
なお、トレーニングパターンにおいて、１つのシンボルでＴＨ、ＡＬ、ＤＳの機能を持つフォーマットを使用することもできる。
又、トレーニングパターンや、図８を参照して上述したクロック周波数差補償パターンの長さは、上述した長さに限定されない。トレーニングパターン及びクロック周波数差補償パターンの長さは、送信回路１７２の動作周波数、配置配線やシリアルバスプロトコルに依存して、適宜変更することができる。
【００６５】
図１０に、実施形態の一例としてのレーン間スキューの調整回路の構成図を示す。
この構成においては、エラスティックバッファ１５３を用いてレーン間スキューを調整し、各レーンのエラスティックバッファ１５３が受信制御部１５５と接続される。レーン＊（＊＝０〜７の整数）のエラスティックバッファ１５３は、ＣＨ＋ＤＭを検出すると、受信制御部１５５にclock_pattern_detect_*信号をアサートする。
【００６６】
ここで、clock_pattern_detect_*信号は、対応するレーン＊においてクロック周波数差補償パターンを受信したことを示す１ビットの信号であり、エラスティックバッファ１５３により設定される。
又、deskew_pattern_detect_*信号（第２のタイミング信号）は、対応するレーンにおいてデスキュー指示を受信したことを示す１ビットの信号であり、エラスティックバッファ１５３により設定される。
【００６７】
一方、address_hold_*信号は、対応するレーン＊のエラスティックバッファ１５３のリードアドレスのホールドを指示する１ビットの信号である。
address_plus2_*信号は、対応するレーン＊のエラスティックバッファ１５３のリードアドレスの２インクリメントを指示する信号である。
deskew_flag_*信号は、レーン間スキューの調整を行うことを示すデスキューを指示する１ビットの信号である。
【００６８】
read_fast_*[1:0]及びread_slow_*[1:0]は、ライト−リードアドレス差分の状態を示す２ビットの信号である。
ここで、エラスティックバッファ１５３はデスキュー機能を持つので、各レーンが同じタイミングでclock_pattern_detect_*信号をアサートする。
エラスティックバッファ１５３のリードポインタ（read_pointer）がcore_clock１サイクル分早い場合は、エラスティックバッファ１５３はread_fast_*[1:0]に“０１”を出力する。
【００６９】
リードポインタ（read_pointer）がcore_clock２サイクル分以上早い場合は、エラスティックバッファ１５３は、read_fast_*[1:0]に“１０”を出力する。
エラスティックバッファ１５３は、リードポインタ（read_pointer）が１サイクル分遅い場合は、read_slow_*[1:0]に“０１”を出力し、２サイクル分以上遅い場合は、read_slow_*[1:0]に“１０”を出力する。
【００７０】
ライト−リードアドレス差分が所定値以内の場合、エラスティックバッファ１５３は、read_fast_*[1:0]に“００”を、read_slow_*[1:0]に“００”をそれぞれ出力する。
受信制御部１５５は、clock_pattern_detect_*信号がアサートされたタイミングで、各レーンのread_fast_*[1:0]とread_slow_*[1:0]との値に応じて、address_hold_*信号及びaddress_plus2_*信号のそれぞれの値を制御する。
【００７１】
詳細には、受信制御部１５５は、各レーンのread_fast_*[1:0]とread_slow*[1:0]との値が異なる場合は、read_fast_*[1]の情報を最優先する。以降、read_fast_*[0]、read_slow_*[0]、read_slow_*[1]の順に優先する。
つまり、受信制御部１５５は、read_fast_*[1]がアサートされているレーンが１つでも存在する場合には、リードポインタ（read_pointer）をcore_clock２サイクル遅くする制御を行う。つまり、受信制御部１５５は、data_valid_timingが連続して‘１’の間、合計２サイクル間、address_hold_*信号をアサートする。address_hold_*信号がアサートされている間、エラスティックバッファ１５３は、エラスティックバッファ１５３のリードポインタ（read_pointer）をホールドする。
【００７２】
全レーンでread_fast_*[1]＝‘０’であり、かつ、いずれかのレーンでread_fast_*[0]がアサートされている場合、受信制御部１５５は、data_valid_timing＝１のタイミングで１サイクル間address_hold_*信号をアサートする。
全レーンでread_fast_*[1:0]が“００”であり、かつ、全てのレーンでread_slow_*[1:0]が“００”の場合、受信制御部１５５は何もしない。
【００７３】
全レーンでread_fast_*[1:0]＝“００”であり、かつ、全てのレーンでread_slow_*[1:0]が“００”ではなく、かつ、いずれかのレーンでread_slow_*[1:0]が“０１”の場合、受信制御部１５５は、１サイクル間address_plus2_*信号をアサートする。
全レーンでread_fast_*[1:0]が“００”であり、かつ、全てのレーンでread_slow_*[1:0]が“１０”の場合、受信制御部１５５は、連続する２サイクル間、address_plus2_*信号をアサートする。
【００７４】
エラスティックバッファ１５３は、address_plus2_*信号をアサートされている時にdata_valid_timing＝１の場合、read_pointerを＋２する。一方、data_valid_timing＝０の場合、エラスティックバッファ１５３は、read_pointerを＋１する。
但し、プロトコル上、クロック周波数補償パターンが十分であることを保証されていない場合、エラスティックバッファ１５３は２サイクル目のaddress_plus2_*信号が‘１’であることを覚えておき、次にdata_valid_timing＝０になったタイミングでread_pointerを＋１し、かつデータを読み出す。
【００７５】
或いは、上記実施形態の変形例として、デスキューバッファにクロック周波数補償情報を通知し、エラスティックバッファ１５３においてずれた分のレーン間スキュー位置を、デスキューバッファで再調節する方法がある。
図１１に、実施形態の変形例としてのレーン間スキューの調整回路の構成図を示す。
この変形例においては、デスキューバッファ１５７−０〜１５７−７を用いてレーン間スキューを調整する。
【００７６】
各レーン０〜７に、レーン間スキューの調節を行うデスキューバッファ１５７−０〜１５７−７がそれぞれ設けられている。
ここで、read_hold_done_*信号は、エラスティックバッファ１５３のリードポインタ（read_pointer）をホールドしたことを示す１ビットの信号である。
又、read_do_plus2_done_*信号は、エラスティックバッファ１５３のリードポインタ（read_pointer）を２インクリメント（＋２）したことを示す１ビットの信号である。
【００７７】
各エラスティックバッファ１５３はクロック周波数差補償動作を行ない、リードポインタ（read_pointer）をホールドした場合、デスキューバッファ１５７にread_hold_done_*信号をアサートする。
各エラスティックバッファ１５３は、data_valid_timing＝１のときにread_pointerを＋２した場合、若しくは、data_valid_timingがデアサートされてread_pointerを＋１した場合、デスキューバッファ１５７にread_do_plus2_done_*信号をアサートする。
【００７８】
デスキューバッファ１５７は、エラスティックバッファ１５３から出力された上記信号の値に応じて、デスキューバッファ１５７の読み出し位置を調節し、レーン間スキューの再調節を行う。
図１２は、実施形態の一例としての受信回路１５２を示す構成図である。
この構成においては、図１０のレーン間スキューの調整回路が採用されている。又、以降に示す例は、全て図１０のレーン間スキューの調整回路を採用した構成を示す。
【００７９】
受信回路１５２は、レーンブロック１５０−０〜１５０−７、受信データ復元部１５４、受信制御部１５５及び転送速度差制御部１７５、及びトレーニングパターン受信部１６４をそなえる。
実施形態の一例において、レーン数は、レーン０〜レーン７の８レーンである。データは、送信回路１７２で分割され、レーン０〜レーン７を通じて送信される。
【００８０】
以下の説明及び図面において、レーンｍ（ｍ＝０〜７）と接続するレーンブロック１５０−ｍを、レーンｍブロックと呼ぶことがある。
レーンｍブロックは、レーンｍを通過するデータを処理する。
図１２においては、レーン０ブロックのみ詳細な構成図を示す。レーン１ブロック〜レーン７ブロックの構成は、レーン０ブロックと同様である。
【００８１】
レーン０ブロック１５０−０は、デシリアライザ１５１、２０ビット境界検出部１５９、エラスティックバッファ１５３、クロック周波数差補償パターン／デスキュー検出部１６０、８Ｂ１０Ｂ変換部１６１、及びデスクランブラ１６２をそなえる。
デシリアライザ１５１は、受信した１ビット幅のシリアルデータを１６ビット幅のパラレルデータに変換する。又、デシリアライザ１５１は、受信したシリアルデータからクロックリカバリにより、受信クロック（rx_p_*_clock）を生成する。
【００８２】
クロックcore_clockは自ポート（接続先ポート）のリファレンスクロックより生成される。
デシリアライザ１５１、２０ビット境界検出部１５９、及びエラスティックバッファ１５３の書き込みまでは、rx_p_*_clockと同期して動作する。
エラスティックバッファ１５３からの読み出し、クロック周波数差補償パターン／デスキュー検出部１６０、８Ｂ１０Ｂ変換部１６１、及びデスクランブラ１６２は、core_clockと同期して動作する。
【００８３】
２０ビット境界検出部１５９は、受信データの境界パターンを検出して、受信データを、１０ｂ−ｃｏｄｅ単位の２０ビット境界データに調節する。
エラスティックバッファ１５３は、クロック周波数差を吸収するＦＩＦＯである。エラスティックバッファ１５３は、通常時はリードアドレスを転送速度差制御部１７５から出力されるdata_valid_timing信号に応じて、１インクリメント（＋１）する。しかし、受信制御部１５５、及び、クロック周波数差補償パターン／デスキュー検出部１６０からの制御信号に応じて、リードアドレスをホールド、１インクリメント、若しくは２インクリメント（＋２）する。
【００８４】
エラスティックバッファ１５３は、データを読み出し、該データをクロック周波数差補償パターン／デスキュー検出部１６０及び８Ｂ１０Ｂ変換部１６１に出力する。又、ライトアドレスとリードアドレスとの差分と所定値の大小関係を示す信号を出力する。
エラスティックバッファ１５３の詳細については、図１４を参照して後述する。ここで、エラスティックバッファ１５３には、同期化Flip Flop（ＦＦ）１６６，１６７、ライトアドレス制御部１６５、ＦＩＦＯ１６８、及びリードアドレス制御部１６９が含まれる。
【００８５】
図１２に示すように、クロック周波数差補償パターン／デスキュー検出部１６０は、エラスティクバッファ１５３に、リードアドレスを制御する信号を出力する。クロック周波数差補償パターン／デスキュー検出部１６０は、クロック周波数差補償パターン及びデスキューを検出する。そして、レーン間のスキューを合わせるdeskew_pattern_detect_*信号を出力する。このため、クロック周波数差補償パターン／デスキュー検出部１６０は、デスキュー制御部としての機能を有する。
【００８６】
８Ｂ１０Ｂ変換部１６１は、１０ｂ−ｃｏｄｅのデータを８ｂ−ｃｏｄｅに変換する。
シリアルデータ転送は８Ｂ１０Ｂ変換データで行なわれる。送信回路１７２で８ビット幅のデータ（８ｂ−ｃｏｄｅ）は１０ビット幅のデータ（１０ｂ−ｃｏｄｅ）に変換され、変換されたデータが送信される。受信回路１５２では、１０ｂ−ｃｏｄｅを８ｂ−ｃｏｄｅに復元する。
【００８７】
なお、８Ｂ１０Ｂ以外の変換を行うシリアルバスプロトコルの場合、８Ｂ１０Ｂ変換部１６１を、プロトコルに依存した他の変換部に適宜変更してもよい。又、２０ビット境界検出部１５９もプロトコルに依存して適宜変更する。
デスクランブラ１６２は、生成多項式に基づき、疑似ランダマイズ化されたデータを復元する。
【００８８】
トレーニングパターン受信部１６４は、トレーニングパターンを認識し、初期化シーケンスを制御する。
受信制御部１５５及び転送速度差制御部１７５は、各レーンブロックのエラスティックバッファ１５３、及び、クロック周波数差補償パターン／デスキュー検出部１６０と接続している。受信制御部１５５及び転送速度差制御部１７５は、レーン間のスキューを検出し、レーン間スキューの調整を行うことを示すデスキュー指示（deskew_flag）を各レーンのエラスティックバッファ１５３に出力する。又、レーン間のスキューを無くすために、後述するように、リードアドレスを調節する信号も、各レーンのエラスティックバッファ１５３に出力する。
【００８９】
図１３は、実施形態の一例としての送信回路１７２を示す構成図である。
この構成においては、図１０のレーン間スキューの調整回路が採用されている。
送信回路１７２は、送信データ分割部１７４、レーンブロック１７０−０〜１７０−７、転送速度差制御部１７５、及びトレーニングパターン／クロック周波数差補償パターン生成部１７８をそなえる。
【００９０】
実施形態の一例において、レーン数は、レーン０〜レーン７の８レーンである。データは、送信回路１７２で分割され、レーン０〜レーン７を通じて送信される。
以下の説明及び図面において、レーンｍ（ｍ＝０〜７）と接続するレーンブロック１７０−ｍを、レーンｍブロックと呼ぶことがある。
レーンｍブロックは、レーンｍを通過するデータを処理する。
【００９１】
図１３においては、レーン０ブロックのみ詳細な構成図を示す。レーン１ブロック〜レーン７ブロックの構成は、レーン０ブロックと同様である。
送信データ分割部１７４は、前述のように１６０ビットの送信データを分割して、各送信回路１７２に出力する。
レーン０ブロック１７０−０は、シリアライザ１７１、送信ギアボックス１７３、８Ｂ１０Ｂ変換部１７６をそなえる。
【００９２】
スクランブラ１７７は、一般的なAdditive Synchronous Scramblerであり、生成多項式に基づき、２０ビットの送信データを疑似ランダマイズ化する。
８Ｂ１０Ｂ変換部１７６は、８ｂ−ｃｏｄｅのデータを１０ｂ−ｃｏｄｅに変換する。
なお、８Ｂ１０Ｂ以外の変換を行うシリアルバスプロトコルの場合、８Ｂ１０Ｂ変換部１７６を、プロトコルに依存した他の変換部に適宜変更してもよい。
【００９３】
送信ギアボックス１７３は、ＦＩＦＯであり、core_clockクロックで２０ビット幅のデータを書き込まれ、tx_p_*_clockクロックで１６ビット幅のデータを読み出される。
シリアライザ１７１は、受信した１６ビット幅のパラレルデータを、１ビット幅のシリアルデータをに変換する。
クロックcore_clockは自ポート（接続先ポート）のリファレンスクロックより生成される。
【００９４】
送信ギアボックス１７３への書き込みまでは、core_clockと同期して動作する。
送信ギアボックス１７３からの読み出しとシリアライザ１７１とは、tx_p_*_clockと同期して動作する。
クロック周波数差補償パターン／デスキュー検出部１６０は、エラスティクバッファ１５３に、リードアドレスを制御する信号を出力する。
【００９５】
シリアルデータ転送は８Ｂ１０Ｂ変換データで行なわれる。送信回路１７２で８ビット幅のデータ（８ｂ−ｃｏｄｅ）は１０ビット幅のデータ（１０ｂ−ｃｏｄｅ）に変換され、変換されたデータが送信される。受信回路１５２では、１０ｂ−ｃｏｄｅを８ｂ−ｃｏｄｅに復元する。
トレーニングパターン／クロック周波数差補償パターン生成部１７８は、シリアルバス初期化中または初期化完了後に関わらず、接続元ＸＢ１３１と接続先ＸＢ１３１とのクロック周波数差補償のため、クロック周波数差補償パターンを定期的に送信する。例えば、接続装置間のリファレンスクロック周波数許容誤差を±３００ｐｐｍ以内とする場合は、１６６６サイクル以内に一度、クロック周波数差補償パターンを送信する。
【００９６】
転送速度差制御部１７５は、前述の受信回路１５２の転送速度差制御部１７５と共通であるため、その説明を省略する。
図１４は、実施形態の一例としてのエラスティックバッファ１５３の構成図である。
エラスティックバッファ１５３は、ライトアドレス制御部１６５、リードアドレス制御部１６９、ＦＩＦＯ１６８、同期化ＦＦ１６６，１６７、及びクロック周波数差補償パターン／デスキュー検出部１６０をそなえる。
【００９７】
ライトアドレス制御部１６５は、ＦＩＦＯ１６８のライトアドレス（write_address）を制御する。
リードアドレス制御部１６９は、ＦＩＦＯ１６８のリードアドレス（read_address）を制御する。
ＦＩＦＯ１６８は、例えば、２０ビット幅の２２段のＦＩＦＯである。
【００９８】
クロックrx_p_*_clockが、ライトアドレス制御部１６５とＦＩＦＯ１６８とに入力される。ライトアドレス制御部１６５及びＦＩＦＯ１６８は、rx_p_*_clockに同期して動作する。上述のように、rx_p_*_clockは、デシリアライザ１５１によって、受信したシリアルデータからクロックリカバリにより生成される。
クロックcore_clockが、同期化ＦＦ１６６，１６７、リードアドレス制御部１６９及びクロック周波数差補償パターン／デスキュー検出部１６０に入力される。同期化ＦＦ１６６，１６７、リードアドレス制御部１６９及びクロック周波数差補償パターン／デスキュー検出部１６０は、core_clockと同期して動作する。
【００９９】
ＦＩＦＯ１６８は、例えば、２０ビット幅の２２段のＦＩＦＯである。又、ライトクロックとリードクロックとの差のため、書き込みと読み出しに僅かなスループット差がある。実施形態の一例において、ＦＩＦＯ段数は２２段であるが、これに限られるものではない。システムバスのレーン間スキューが小さい場合は、ＦＩＦＯ段数をより小さくしてもよい。
【０１００】
ＦＩＦＯ１６８には、ライトアドレス制御部１６５から入力されるライトアドレスwrite_addressにデータwrite_dataが書き込まれる。
ライトアドレス制御部１６５は、２０ビット境界検出部１５９からの境界検出通知（alignment_detect信号）を受けると、シンボル単位でＦＩＦＯ１６８へデータ（alignment_data）の書き込みを開始する。
【０１０１】
ライトアドレス制御部１６５は、rx_p_*_clockに同期して書き込みを行う。すなわち、rx_p_*_clockがライトクロックとなる。
ライトアドレス制御部１６５は、write_enable信号が１の時にＦＩＦＯ１６８のアドレスwrite_addressにデータを書き込む。ライトアドレス制御部１６５は、ライトアドレス（write_address）を０から開始し、常に１ずつインクリメントする。ライトアドレス制御部１６５は、ライトアドレスを２１でラップラウンドして０に戻す。ライトアドレス制御部１６５は、ライトアドレスを０に戻す時に、リード側にライトアドレスが一周したことを通知するために、write_lap_round信号を反転する。
【０１０２】
同期化ＦＦ１６６は、core_clockと同期して、write_enable信号をwrite_enable_sync信号として出力する。
同期化ＦＦ１６７は、core_clockと同期して、write_lap_round信号をwrite_lap_round_sync信号として出力する。
リードアドレス制御部１６９は、write_enable信号を同期化したwrite_enable_sync信号のアサートより、read_address＝０より読み出しを開始する。ライトアドレス制御部１６５は、基本的にread_addressを１サイクルごとに１ずつインクリメントし、read_addressが２１になるとラップラウンドして、read_addressを０に戻す。
【０１０３】
リードアドレス制御部１６９は、core_clockと同期してＦＩＦＯ１６８の読み出しを行う。すなわち、core_clockがリードクロックとなる。ＦＩＦＯ１６８から読み出されたデータdata_20bitは、クロック周波数差補償パターン／デスキュー検出部１６０及び８Ｂ１０Ｂ変換部１６１に出力される。
リードアドレス制御部１６９はwrite_lap_round信号をcore_clockと同期化したwrite_lap_round_sync信号の変化（反転）を検出することでライトアドレスが０になったことを認識する。これにより、ライトアドレスとリードアドレスの差分であるライト−リードアドレス差分を認識する。ライト−リードアドレス差分はクロック周波数差によって変化する。
【０１０４】
ライトクロックとリードクロックを比較して、ライトクロックの方が早い（リードクロックの方が遅い）場合は、ライト−リードアドレス差分は基準値より徐々に大きくなる。
ライトクロックの方が遅い（リードクロックの方が早い）場合は、ライト−リードアドレス差分は基準値より徐々に小さくなる。
リードアドレス制御部１６９は、ライト−リードアドレス差分が基準値より大きい場合、リードクロックの方が遅いことを示すために、read_slow_*[1:0]に値を設定する。詳細には、リードアドレス制御部１６９は、エラスティックバッファ１５３のリードポインタ（read_pointer）がcore_clock１サイクル分遅い場合は、read_slow_*[1:0]に“０１”を設定する。リードポインタ（read_pointer）がcore_clock２サイクル分以上遅い場合は、エラスティックバッファ１５３は、read_slow_*[1:0]に“１０”を設定する。
【０１０５】
リードアドレス制御部１６９は、ライト−リードアドレス差分が基準値より小さい場合、リードクロックの方が早いことを示すために、read_fast_*[1:0]に値を設定する。詳細には、リードアドレス制御部１６９は、エラスティックバッファ１５３のリードポインタ（read_pointer）がcore_clock１サイクル分早い場合は、read_fast_*[1:0]に“０１”を設定する。リードポインタ（read_pointer）がcore_clock２サイクル分以上早い場合は、エラスティックバッファ１５３は、read_fast_*[1:0]に“１０”を設定する。
【０１０６】
ライト−リードアドレス差分が基準値にある場合は、リードアドレス制御部１６９は、read_slow_*[1:0]、read_fast_*[1:0]の両方に値“００”を設定する。read_slow_*[1:0]及びread_fast_*[1:0]は、クロック周波数差補償パターン／デスキュー検出部１６０に出力される。
リードアドレス制御部１６９はクロック周波数差補償機能により、ライト−リードアドレス差分を基準値に調節する。
【０１０７】
基準値への制御は、address_hold_*信号及びaddress_plus2_*信号の値に従って行う。
リードアドレス制御部１６９はaddress_hold_*信号がアサートされている（値‘１’である）の時はリードアドレスのインクリメントを行なわない。
一方、リードアドレス制御部１６９はaddress_plus2_*信号がアサートされている（値‘１’である）の時はリードアドレスを＋２インクリメントする。
【０１０８】
ライト−リードアドレス差分情報は、write_lap_round_sync信号の変化、或いはaddress_hold及びaddress_plus2_*信号のアサートにより更新される。
エラスティックバッファ１５３は、alignment_detectを契機に書き込みを開始する。ライトアドレスは毎サイクル毎に１インクリメントし、エラスティックバッファ１５３のリードアドレス制御部１６９で２０ビットアライメントされているように、16ビット単位でライトを行う。write_enable信号が同期化されwrite_enable_sync信号が出力され、リードアドレス制御部１６９は書き込み状態であることを認識する。
【０１０９】
ライトアドレス制御部１６５は、write_addressに値‘０’を書き込む時にwrite_lap_round信号をトグルさせ、リードアドレス制御部１６９にライトアドレス位置を通知する。
リードアドレス制御部１６９は、write_lap_round信号が同期化されたwrite_lap_round_sync信号により、write_addressが‘０’に設定されたタイミングを認識して、ライト−リードアドレス差分を認識する。
【０１１０】
リードアドレス制御部１６９は、ライト−リードアドレス差分が所定値になるように、read_addressをホールド、２インクリメントすることで調節する。
デスキュー完了前の状態では、各レーンのエラスティックバッファ１５３は、ライト−リードアドレス差分が所定値になるように、clock_pattern_detect_*＝１のタイミングで、それぞれ独自にリードアドレスを調節する。
【０１１１】
デスキュー完了後は、レーン間スキュー調節位置がずれないように、エラスティックバッファ１５３は、read_fast[1:0]、read_slow[1:0]を受信制御部に出力し、受信制御部から出力されるaddress_hold_*信号、address_plus2_*信号に従って、ライト−リードアドレス差分を調節する。
図１５は、実施形態の一例としての転送速度差制御部１７５を例示する図である。
【０１１２】
転送速度差制御部１７５は、×２０逓倍器３０１、加算器３０２、比較器３０３、減算器３０４、セレクタ３０５、及びＦＦ３０６をそなえる。
加算器３０２は、サービスプロセッサ１３９から、値がvalue_A（ＭＨｚ）であるＩ／Ｆ速度を入力される。一方、×２０逓倍器３０１は、サービスプロセッサ１３９から、値がvalue_B（ＭＨｚ）であるcore_clock周波数を入力される。また、転送速度差制御部１７５は、一時変数であるvalue_Cも使用する。このvalue_Cは、value_B×２０より小さい値である。
【０１１３】
ここで、転送速度差制御部１７５は、data_valid_timing信号の計算を、core_clockの毎サイクル行う。×２０逓倍器３０１から出力されるvalue_B×２０が、加算器３０２から出力されるvalue_C＋value_A以下の場合、つまり、（value_B×２０）≦（value_C＋value_A）の条件を満たしている場合は、比較器３０３は、data_valid_timing＝１を出力する。一方、この条件を満たしていない場合、比較器３０３はdata_valid_timing＝０を出力する。
【０１１４】
１サイクル後のvalue_Cの値をpost_value_Cとする場合、post_value_Cは、減算器３０４、セレクタ３０５及びＦＦ３０６において、value_Cから、post_value_C＝（value_C＋value_A）％（value_B×２０）として計算される。ここで、‘％’は剰余を求める演算子である。そして、post_value_Cが、新たなvalue_Cとして加算器３０２に入力される。
なお、上記計算に、value_B×２０が含まれるのは、Ｉ／Ｆ部分では、各レーンは１ビット幅でデータ転送を行い、core_clock領域では２０ビット幅でデータ転送を行うためである。この時、value_A≦（value_B×２０）を満たしていない場合、Ｉ／Ｆ速度が常に速く、エラスティックバッファ１５３がオーバーフローするため、value_Aとvalue_Bとは、value_A≦（value_B×２０）を満たしている必要がある。
【０１１５】
図１６は、実施形態の一例としての受信制御部１５５の構成を例示する図である。
受信制御部１５５は、デスキュー制御部１７９と、クロック周波数差補償パターン部１８０とをそなえる。
デスキュー制御部１７９は、各レーンからのdeskew_pattern_detect_*信号よりレーン間スキューを調節するように、address_hold_*信号を出力する。デスキュー制御部１７９は、デスキューの実行時にはdeskew_timをアサートし、デスキューの実行時及びデスキュー完了後はdeskew_flagをアサートする。
【０１１６】
クロック周波数差補償パターン部１８０は、デスキュー完了後、図１７を用いて後述するように、各レーンから出力されるclock_pattern_detect_*信号、read_slow_*[1:0]及びread_fast_*[1:0]から、cmpns_adrs_hold信号とcmpns_adrs_plus2信号とを生成する。
ここで、cmpns_adrs_hold信号は、address_hold_*信号の生成に使用され、エラスティックバッファ１５３のリードアドレスをライトアドレスに対して遅らせるよう指示する。cmpns_adrs_hold信号は、clock_pattern_detect_*、data_valid_timing、read_slow_*[1:0]及びread_fast_*[1:0]から生成される。
【０１１７】
cmpns_adrs_plus2信号は、address_plus2_*信号の生成に使用され、エラスティックバッファ１５３のリードアドレスをライトアドレスに対して早くするよう指示する。cmpns_adrs_plus2信号は、clock_pattern_detect_*、data_valid_timing、read_slow_*[1:0]及びread_fast_*[1:0]から生成される。
図１７は、図１６のクロック周波数差補償パターン部１８０の構成を例示する図である。
【０１１８】
クロック周波数差補償パターン部１８０は、セレクタ３０９，３１０と、２ビット幅のfast_cnt[1:0]カウンタ３１１と、２ビット幅のslow_cnt[1:0]カウンタ３１２とをそなえる。
fast_cnt[1:0]カウンタ３１１は、全てのレーンのclock_pattern_detect_*＝１であり、かつ、いずれかのレーンのread_fast_*[1:0]≠“００”の時に、read_fast_*[1:0]によって決定される値がセットされる。cmpns_adrs_holdは、data_valid_timing＝１であり、かつ、fast_cnt[1:0]≠“００”の時に１がアサートされ、fast_cnt[1:0]はcmpns_adrs_hold＝１の時に−１される。
【０１１９】
slow_cnt[1:0]カウンタ３１２は、全てのレーンのclock_pattern_detect_*＝１であり、かつ、全てのレーンのread_slow_*[1:0]≠“００”の時に、read_slow_*[1:0]によって決定される値がセットされる。cmpns_adrs_plus2は、slow_cnt[1:0]≠“００”の時に１がアサートされ、slow_cnt[1:0]はmpns_adrs_plus2＝１の時に−１される。
デスキュー完了後のクロック周波数差補償（ホールド）時には、全てのレーンのclock_pattern_detect_*＝１かついずれかのレーンのread_fast_*[1:0]≠“００”の場合、受信制御部１５５は各レーンのaddress_hold_*信号をアサートする。read_fast_*[1:0]＝“１０”の場合は、次にdata_valid_timing＝１となるタイミングで、２サイクル間、address_hold_*信号をアサートしてアドレスホールドを通知する。read_fast_*[1:0]＝“０１”の場合は、次にdata_valid_timing＝１となるタイミングで、１サイクル間、address_hold_*信号をアサートしてアドレスホールドを通知する。この動作については、図２２，図２３を参照して後述する。
【０１２０】
デスキュー完了後のクロック周波数差補償（２インクリメント）時には、全てのレーンのclock_pattern_detect_*＝１であり、かつ、全てのレーンのread_slow_*[1:0]≠“００”の場合、受信制御部１５５は各レーンにaddress_plus2_*信号をアサートする。read_slow_*[1:0]＝“１０”の場合は、２サイクル間、cmpns_adrs_plus2＝１をアサートする。read_slow_*[1:0]＝“０１”の場合は、１サイクル間、address_plus2_*信号を出力する。この動作については、図２４，図２５を参照して後述する。
【０１２１】
なお、図１５〜図１７に示した回路は例示に過ぎず、上記の動作を実現するものであれば、他の回路構成を使用することも可能である。
（Ｂ）動作
以下、本実施形態の一例としてのＸＢ１３１の動作について説明する。
まず、図７に示した接続先（送信側）ＸＢ１３１の動作を示す。
【０１２２】
図１８は、実施形態の一例としての送信側ＸＢ１３１のポート回路１４２の動作を示すフローチャート（ステップＳ１〜Ｓ１０）である。
ステップＳ１において、送信側ＸＢ１３１の転送速度差制御部１７５は、サービスプロセッサ１３９（図５参照）によってＩ／Ｆ及びcore_clock周波数を設定され、data_valid_timingの出力を開始する。
【０１２３】
ステップＳ２において、送信側ＸＢ１３１のトレーニングパターン／クロック周波数差補償パターン生成部１７８が、デスキューなし状態を示す情報を持つトレーニングパターンを送信する。
なお、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、トレーニングパターン又は周波数差補償パターンを、全てのレーンで同じタイミングで送信する。
【０１２４】
ステップＳ３において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、前回の周波数補償パターンを送信してから１６６６サイクル経過しているか判定する。
１６６６サイクル経過している場合（ステップＳ３のＹＥＳルート参照）、ステップＳ４において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、周波数差補償パターンを送信してステップＳ５に進む。
【０１２５】
一方、１６６６サイクル経過していない場合（ステップＳ３のＮＯルート参照）、ステップＳ５において、送信側ＸＢ１３１は、受信側ＸＢ１３１がデスキューを完了しているかを判定する。
デスキューを完了していない場合（ステップＳ５のＮＯルート参照）、処理がステップＳ２に戻る。
【０１２６】
一方、デスキューを完了している場合（ステップＳ５のＹＥＳルート参照）、ステップＳ６において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、デスキュー完了状態を示す情報を持つトレーニングパターンを送信する。
次に、ステップＳ７において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、前回の周波数補償パターンを送信してから１６６６サイクル経過しているか判定する。
【０１２７】
１６６６サイクル経過している場合（ステップＳ７のＹＥＳルート参照）、ステップＳ８において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、周波数差補償パターンを送信してステップＳ９に進む。
一方、１６６６サイクル経過していない場合（ステップＳ７のＮＯルート参照）、ステップＳ９において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、受信側ＸＢ１３１のトレーニングパターン受信部１６４がデスキュー完了状態を示す情報を持つトレーニングパターンを受信したかを判定する。
【０１２８】
受信側ＸＢ１３１がデスキュー完了状態を示す情報を持つトレーニングパターンを受信していない場合（ステップＳ９のＮＯルート参照）、処理がステップＳ６に戻る。
一方、受信側ＸＢ１３１がデスキュー完了状態を示す情報を持つトレーニングパターンを受信している場合（ステップＳ９のＹＥＳルート参照）、ステップＳ１０において、トレーニングパターン／クロック周波数差補償パターン生成部１７８は、デスキュー完了状態を示す情報を持つトレーニングパターンを１６個送信し、パケットの送信を開始する。その後処理は終了する。
【０１２９】
次に、図７の自（受信側）ＸＢ１３１の動作を示す。
図１９は、実施形態の一例としての受信側ＸＢ１３１のポート回路１４２の動作を示すフローチャート（Ｓ２１〜Ｓ２９）である。
ステップＳ２１において、受信側ＸＢ１３１の転送速度差制御部１７５は、サービスプロセッサ１３９（図５参照）によってＩ／Ｆ及びcore_clock周波数を設定され、data_valid_timingの出力を開始する。
【０１３０】
ステップＳ２２において、受信側ＸＢ１３１の２０ビット境界検出部１５９は、受信トレーニングパターンの“ＡＬ”によって、２０ビット境界パターンを検出したかを判定する。
２０ビット境界パターンを検出していない場合（ステップＳ２２のＮＯルート参照）、２０ビット境界パターン未検出を示す情報を送信してステップＳ２２に戻る。
【０１３１】
２０ビット境界パターンを検出した場合（ステップＳ２２のＹＥＳルート参照）、ステップＳ２３において、エラスティックバッファ１５３は、２０ビット境界パターンの検出後から２０ビットのシンボル境界に合わせて、自身への書き込み及び自身からの読み出しを開始する。
その際、エラスティックバッファ１５３は、エラスティックバッファ１５３への書き込み状態であることをwrite_enable_sync信号（図１４参照）によって、リードアドレス制御部１６９に通知する。リードアドレス制御部１６９は、write_lap_round_sync信号でライトアドレスに‘０’が設定されたタイミングを認識し、リード−ライトアドレスの差分が適切な値になるように、読み出しを開始する。
【０１３２】
ステップＳ２４において、クロック周波数差補償パターン／デスキュー検出部１６０は、クロック周波数差補償パターンを受信したかを判定する。
クロック周波数差補償パターンを受信した場合（ステップＳ２４のＹＥＳルート参照）、ステップＳ２５において、受信側ＸＢ１３１の各レーンのエラスティックバッファ１５３は独立に、クロック周波数差補償を行う。その際、エラスティックバッファ１５３のライトアドレスとリードアドレスとの差分（ライト−リードアドレス差分）が基準値以内に入るように、エラスティックバッファ１５３のリードアドレスを調節する。受信制御部１５５は全てのレーンでデスキューパターンを検出することを継起にレーン間スキューを調節する。その後、処理はステップＳ２６に進む。
【０１３３】
クロック周波数差補償パターンを受信していない場合（ステップＳ２４のＮＯルート参照）、ステップＳ２６において、デスキュー制御部１７９は、デスキューを完了しているかを判定する。
デスキューを完了していない場合（ステップＳ２６のＮＯルート参照）、処理はステップＳ２３に戻る。
【０１３４】
デスキューが完了している場合（ステップＳ２６のＹＥＳルート参照）、ステップＳ２７において、クロック周波数差補償パターン／デスキュー検出部１６０は、クロック周波数差補償パターンを受信したかを判定する。
クロック周波数差補償パターンを受信した場合（ステップＳ２７のＹＥＳルート参照）、ステップＳ２８において、受信側ＸＢ１３１の各レーンのエラスティックバッファ１５３は受信制御部１５５と協調することで、ポート単位に、クロック周波数差補償を行う。その後、処理はステップＳ２９に進む。
【０１３５】
クロック周波数差補償パターンを受信していない場合（ステップＳ２７のＮＯルート参照）、ステップＳ２９において、トレーニングパターン受信部１６４は、デスキュー完了状態を示す情報を持つトレーニングパターンを受信しているかを判定する。
デスキュー完了状態を示す情報を持つトレーニングパターンを受信していない場合（ステップＳ２９のＮＯルート参照）、処理がステップＳ２７に戻る。
【０１３６】
一方、デスキュー完了状態を示す情報を持つトレーニングパターンを受信している場合（ステップＳ２９のＹＥＳルート参照）、処理は終了する。
シリアルバス初期化完了後に、送信側ＸＢ１３１のトレーニングパターン／クロック周波数差補償パターン生成部１７８はトレーニングパターン送信を止め、データ送信を開始する。トレーニングパターン／クロック周波数差補償パターン生成部１７８は、初期化完了後も定期的なクロック周波数差補償パターン送信を継続する。
【０１３７】
受信側ＸＢ１３１は受信データの復元を行う。このとき、受信側ＸＢ１３１のエラスティックバッファ１５３はポート単位のクロック周波数差補償を継続する。
初期化時に送信するトレーニングパターンは初期化状態を示す情報を持つ。それにより接続先ポートがどの状態であるか、例えば、２０ビット境界パターンを検出した、デスキューが完了した等の状態を知ることができ、同期して初期化処理を完了することができる。例えば、デスキュー制御部１７９は、接続元ポート２０１から受信するトレーニングパターンと自ポート（接続先ポート）２１１が送信するトレーニングパターンとから、両ポートがデスキュー完了状態であることを認識して、初期化が完了し、パケット送受信が可能な状態であると判断する。
【０１３８】
なお、動作は図１８，図１９の動作に限定するものではなく、シリアルバスのプロトコルに合わせて、適宜変更されてもよい。
図２０，図２１に、デスキュー時のタイムチャートを示す。
図２０は、実施形態の一例としてのエラスティックバッファ１５３のデスキュー時のタイムチャートである。図２１は、実施形態の一例としての受信制御部のデスキュー時のタイムチャートである。図２０，図２１は、同一時間範囲における各信号の状態を示す。
【０１３９】
図２０には、レーン０の各信号のみを示し、レーン２〜７ブロックの信号は省略する。
又、図２０〜図２５において、「×」は、パケット等の受信データを示し、“ＣＨ”，“ＤＭ”，“ＤＳ”以外のデータである。
ｔ１において、レーン０が最初にデスキューパターンを検出し、ｔ２において、レーン１が最後にデスキューパターンを検出している（図２１参照）。
【０１４０】
デスキュー未完了状態で、全レーンでデスキューパターンを検出時に、スキューの一番大きい、つまり、最後にデスキューパターンを受信したレーンのタイミングで、deskew_flag信号がアサートされると、address_hold_*信号がアサートされる。
address_hold_*信号がアサートされると、リードアドレス（read_address）はホールドされる。したがって、図２０において、read_addressは、アドレス８で９サイクル、ホールドされている。
【０１４１】
又、全レーンでデスキューパターンを検出後に、ｔ３において、deskew_flag及びdeskew_timがアサートされる。deskew_timはデスキューによるアドレスホールド動作完了後に、ｔ４においてデアサートされる。なお、レイテンシーが最短になるように、デスキューパターンを最後に検出したレーン１はデスキューによるアドレスホールドを行なわない。それ以外のレーンはdata_valid_timing＝１、かつ、レーン間スキューが調整される時間、address_hold_*信号がアサートされる。
【０１４２】
図２０，図２１の例では、レーン０に対して、ｔ３からｔ４の間８サイクル間、address_hold_0＝‘１’がアサートされる。その内、data_valid_timing＝１の５サイクル間がデスキュー調節のためにリードアドレスを停止した時間である。data_valid_timing＝０の３サイクル間は、デスキュー調節とは関係なく、転送速度差吸収のために停止した時間である。
【０１４３】
エラスティックバッファ１５３は、deskew_flagがデアサートされているときは各レーン独立でクロック周波数差補償動作を行う一方、deskew_flagがアサートされているときはポート単位でクロック周波数差動作を行う。
図２２，図２３に、デスキュー完了後にポート単位でクロック周波数差補償を行う動作のタイムチャート（ホールド）を示す。
【０１４４】
図２２は、実施形態の一例としてのエラスティックバッファ１５３のデスキュー完了後のクロック周波数差補償（ホールド）時のタイムチャートである。図２３は、実施形態の一例としての受信制御部のデスキュー完了後のクロック周波数差補償（ホールド）時のタイムチャートである。図２２，図２３は、同一時間範囲における各信号の状態を示す。
図２２には、レーン０の各信号のみを示し、レーン２〜７ブロックの信号は省略する。
【０１４５】
全てのレーンのclock_pattern_detect_*＝１かついずれかのレーンのread_fast[1:0]≠“００”の場合、受信制御部１５５は各レーンのaddress_hold_*信号をアサートする。read_fast_*[1:0]＝“１０”の場合は、data_valid_timing＝１の２サイクル間（次にdata_valid_timing＝１となるタイミングで）、address_hold_*信号をアサートしてアドレスホールドを通知する。図２３では、read_fast_0[1:0]＝“１０”を条件に、t１３からt１５の間２サイクル間、cmpns_adrs_hold＝１をアサートする。read_fast_*[1:0]＝“０１”の場合は、data_valid_timing＝１の１サイクル間（次にdata_valid_timing＝１となるタイミングで）、address_hold_*信号をアサートしてアドレスホールドを通知する。図２３では、read_fast_0[1:0]＝“０１”、または、read_fast_1[1:0]＝“０１”を条件に、t１１からｔ１２の１サイクル間、cmpns_adrs_hold＝１をアサートする。
【０１４６】
エラスティックバッファ１５３は、アドレスホールドが通知されたｔ１１、ｔ１３、ｔ１４の間、読み出しアドレスのインクリメントを停止する。
図２４，図２５に、デスキュー完了後にポート単位でクロック周波数差補償を行う動作のタイムチャート（２インクリメント）を示す。
図２４は、実施形態の一例としてのエラスティックバッファ１５３のデスキュー完了後のクロック周波数差補償（２インクリメント）時のタイムチャートである。図２５は、実施形態の一例としての受信制御部１５５のデスキュー完了後のクロック周波数差補償（２インクリメント）時のタイムチャートである。図２４，図２５は、同一時間範囲における各信号の状態を示す。
【０１４７】
図２４には、レーン０の各信号のみを示し、レーン２〜７ブロックの信号は省略する。
全てのレーンのclock_pattern_detect_*＝１であり、かつ、全てのレーンのread_slow_*[1:0]≠“００”の場合、受信制御部１５５は各レーンにaddress_plus2_*信号をアサートする。read_slow_*[1:0]＝“１０”の場合は、data_valid_timing＝１の２サイクル間、cmpns_adrs_plus2＝１をアサートする。図２５では、read_slow_0[1:0]＝“１０”、read_slow_1[1:0]＝“１０”、read_slow_7[1:0]＝“１０”であり、かつ、図２５に記述していないread_slow_2[1:0]からread_slow_6[1:0]の信号全てが“１０”であることを条件に、ｔ２３からｔ２５の２サイクル間、cmpns_adrs_plus2＝１をアサートする。read_slow_*[1:0]＝“０１”の場合は、data_valid_timing＝１の１サイクル間、address_plus2_*信号を出力する。図２５では、read_slow_0[1:0]＝“０１”、read_slow_1[1:0]＝“０１”、read_slow_7[1:0]＝“１０”、かつ図２５に記述していないread_slow_2[1:0]からread_slow_6[1:0]の信号全てが“１０”もしく“０１”を条件に、ｔ２１からｔ２２の１サイクル間、cmpns_adrs_plus2＝１をアサートする。この場合、read_slow_*[1:0]＝“１０”でないレーンも存在するため、cmpns_adrs_plus2がアサートされるのは、１サイクルのみである。
【０１４８】
エラスティックバッファ１５３はaddress_plus2_*信号がアサートされ、かつ、data_valid_timing＝１の場合は、read_addressが２インクリメント（＋２）される。図２４のｔ２５のタイミングで＋２されている。address_plus2_*信号がアサートされ、かつ、data_valid_timing＝０の場合は、read_addressが１インクリメント（＋１）される。図２４のｔ２２、ｔ２４のタイミングで＋１されている。
【０１４９】
（Ｃ）作用・効果
前述のように、実施形態の一例としてのエラスティックバッファ１５３によれば、ＰＣＳ受信部内に設けられたエラスティックバッファ１５３の読み出し側をcore_clockで動作させる。エラスティックバッファ１５３の読み出しは、転送速度差を吸収するため、間引きを行ない、全てのレーンでタイミングを合わせて、有効タイミングで読み出しを行う。つまり、有効タイミングでエラスティックバッファ１５３からデータを読み出し、かつ、リードポインタ（read_pointer）を＋１する。
【０１５０】
クロック周波数差補償パターン受信によるクロック周波数偏差補償は、リードポインタ（read_pointer）が速く、ライトポインタ（write_pointer）に追いつきそうな場合は、ライト−リードポインタ（read_pointer）差により、有効タイミングで１〜数サイクル間、リードポインタ（read_pointer）をホールドする。リードポインタ（read_pointer）が遅く、ライトポインタ（write_pointer）との差が大きい場合は、有効タイミングでリードポインタ（read_pointer）を＋２し、かつ、無効タイミングにリードデータを読み出し、リードポインタ（read_pointer）を＋１する。このとき、レーン間スキュー位置を保つための制御をエラスティックバッファ１５３若しくは、デスキューバッファ１５７で行う必要がある。
【０１５１】
又、ＰＣＳ受信部内に設けられた送信ギアボックス１７３の書き込み側をcore_clockで動作させる。送信ギアボックス１７３の書き込みは、転送速度差を吸収するため、間引きを行ない、全てのレーンでタイミングを合わせて、有効タイミングで書き込む。つまり、有効タイミングで送信ギアボックス１７３にデータを書き込み、かつ、ライトポインタ（write_pointer）を＋１する。
【０１５２】
このため、Ｉ／Ｆの転送速度とＸＢ  ＬＳＩ内部の転送速度との差を吸収できる。
又、実施形態の一例としてのエラスティックバッファ１５３によれば、クロック補償動作時に、デスキュー位置を保ちつつ、転送速度差を吸収できる。
さらに、実施形態の一例としてのエラスティックバッファ１５３によれば、エラスティックバッファ１５３のホールドのタイミングは、クロック周波数差補償パターン受信時のエラスティックバッファ１５３の読み出し、有効タイミングのみである。このため、パケット途中の有効タイミングでエラスティックバッファ１５３の読み出しが中断されないため、パケット内の隙間が増加することがなく、カットスルー動作に影響しない。
【０１５３】
ここで、比較のために、図２６〜図２８を参照して、本エラスティックバッファ１５３を使用しない構成を示す。
図２６は、本エラスティックバッファ１５３を使用しないポート回路の構成図、図２７は、図２６の受信回路５２の構成図、図２８は、図２６の送信回路７２の構成図である。
図２６に示すように、各ポート回路は、レーンｍ受信部５０−０〜５０−７、受信データ復元部５４、レーンｍ送信部７０−０〜７０−７、送信データ分割部７４、受信制御部５５、転送速度差制御部６５、ＲＸ−ＦＩＦＯ５６、及びＴＸ−ＦＩＦＯ７５をそなえる。
【０１５４】
本例では、ポート数がポート０〜４の５ポート、システムバスのレーン数は、レーン０〜レーン７の８レーンである。
以下の説明及び図面において、レーンｍ（ｍ＝０〜７）と接続される受信レーンブロック５０−ｍ又は送信レーンブロック７０−ｍを、「レーンｍ受信部」又は「レーンｍ送信部」と呼ぶことがある。
【０１５５】
又、各機能ブロックの機能及び構成は、上記の本実施形態の一例としてのポート回路の機能ブロックの機能及び構成に対応している。
レーンｍ受信部５０は、システムバスの対応するレーンからデータを受信する。
各レーンｍ受信部５０は、デシリアライザ（SerDes (RX)）５１−０〜５１−７及び送信回路７２−０〜７２−７をそなえる。
【０１５６】
デシリアライザ５１は、受信した１ビット幅のシリアルデータから６ビット幅のパラレルデータを生成する。
送信回路７２−０〜７２−７は、それぞれ、エラスティックバッファ５３−０〜５３−７をそなえる。
エラスティックバッファ５３は、受信データを格納する受信データを格納するＦＩＦＯである。
【０１５７】
受信データ復元部５４は、各レーンｍ受信部５２で受信したデータを併合して、受信データを復元する。
レーンｍ送信部７０は、システムバスの各レーンにデータを送信する。
レーンｍ送信部７０は、シリアライザ（SerDes (TX)）７１−０〜７１−７、送信回路７２−０〜７２−７、及び送信データ分割部７４をそなえる。
【０１５８】
シリアライザ７１は、送信する６ビット幅のパラレルデータから１ビット幅のシリアルデータを生成する。
送信回路７２−０〜７２−７は、それぞれ、送信ギアボックス（TX-Gear）７３−０〜７３−７をそなえる。
送信ギアボックス７３は、送信データを格納するＦＩＦＯである。
【０１５９】
送信データ分割部７４は、６０ビットの送信データを分割して、各送信回路７２に出力する。
ＲＸ−ＦＩＦＯ５６は、pcs_clockからcore_clockへの乗り換えを行うＦＩＦＯである。
ＴＸ−ＦＩＦＯ７５は、core_clockからpcs_clockへの乗り換えを行うＦＩＦＯである。
【０１６０】
ここで、各ポートは任意のシリアライザ／デシリアライザ（SerDes）Ｉ／Ｆ速度を設定できるとする。
core_clockはＩ／Ｆ速度に依存しない周波数で動作し、rx_p_*_clock、tx_p_*_clock、pcs_clockはＩ／Ｆに比例した速度で動作する。
core_clockはＩ／Ｆに依存せず、０．８ＧＨｚとする。Ｉ／Ｆ速度が１６Ｇｂｐｓの場合、デシリアライザ５１の読み出しからエラスティックバッファ５３書き込み部間のバス幅が16ビットとすると、rx_p_*_clockは１ＧＨｚ（＝１６Ｇｂｐｓ／１６ビット）になる。エラスティックバッファ５３の読み出しバス幅と送信ギアボックス７３の書き込みバス幅とが２０ビットとすると、pcs_clockは０．８ＧＨｚ（＝１６Ｇｂｐｓ／２０ビット）になる。シリアライザ７１の書き込みバス幅が１６ビットとすると、tx_p_*_clockは１ＧＨｚとなる。さらに、rx_p_*_clockは接続先ポートのオシレータに比例するため、クロック周波数差が存在する。
【０１６１】
pcs_clockはＩ／Ｆ速度に比例するため、Ｉ／Ｆ速度は最大値１６Ｇｂｐｓをターゲットとし、ｐｃｓ内部回路が最大０．８ＧＨｚで動作する性能を持っていたとしても、pcs_clockはシステムのシリアルバス経路に依存する。例えば、Ｉ／Ｆ速度が１２Ｇｂｐｓや８Ｇｂｐｓの場合、pcs_clockは０．６ＧＨｚ、０．４ＧＨｚとなる。
図２７，図２８においては、レーン０ブロックのみ詳細な構成図を示す。レーン１ブロック〜レーン７ブロックの構成は、レーン０ブロックと同様である。
【０１６２】
図２７に示すように、この受信部５２は、シリアルＩ／Ｆから１ビットで入力された信号をデシリアライザで１６ビットにし、この１６ビットデータより２０ビット境界を検出し、エラスティックバッファ５３の読み出し側で２０ビット境界単位で読み出せるように書き込みを行う。エラスティックバッファ５３読み出し後に１０Ｂから８Ｂへの変換、及びデスクランブルを行う。エラスティックバッファ５３で読み出した受信データより、クロック周波数差補償パターン、デスキューパターンを検出する。デスキュー完了後は、受信制御部５５によって、読み出し制御を行う。トレーニングパターン受信部６４でトレーニングパターンを認識し、初期化シーケンスを制御する。エラスティックバッファ５３への書き込みはrx_p_*_clock、エラスティックバッファ５３の読み出しはpcs_clockで行う。ＲＸ−ＦＩＦＯ５６でＩ／Ｆ速度とcore_clockの転送速度差の吸収を行う。
【０１６３】
又、この送信部７２は、初期化シーケンス中は、トレーニングパターンをスクランブラ７７に入力する。初期化中、パケット送信中に関わらず１６６６サイクル毎にクロック周波数差補償パターンを送信する。初期化完了後はパケット送信を行ない、ＴＸ−ＦＩＦＯ７５でcore_clockからpcs_clockに乗り換える。このとき、パケット内にクロック周波数差補償パターンを入れないように制御が行なわれる。パケットは、スクランブル及び８Ｂ→１０Ｂ変換を受け、送信ギアボックス７３に書き込まれる。送信ギアボックス７３によって、送信データが２０ビット幅から１６ビット幅に変換され、pcs_clockからtx_p_*_clockへの乗り換えが行なわれる。送信ギアボックス７３から出力される１６ビットのデータはシリアライザ７１で１ビットに変換され、Ｉ／Ｆから送信される。
【０１６４】
図２７，図２８に示す構成と比較して、図１２，図１３に示す本実施形態の一例の構成においては、pcs_clockが使用されておらず、転送速度差を吸収するＲＸ−ＦＩＦＯ５６とＴＸ−ＦＩＦＯ７５とが削除されている。送速度差の吸収は、本実施形態の一例の構成においては、エラスティックバッファ５３及び送信ギアボックス７３で行う。
本エラスティックバッファ１５３を使用しない受信回路５２では、受信回路５２の内部で転送速度差吸収を行わずに、RX-FIFO５６で転送速度差吸収を行っていた。そのため、受信回路５２はI/F速度に依存するpcs_clockで動作し、pcs_clockはcore_clockと同じか、もしくは、低速であった。
【０１６５】
このため、I／Ｆ速度に依存せず、core_clockで動作する低レイテンシーな受信装置を提供でき、pcs_clockからcore_clockへの乗換のためのＦＩＦＯ分のレイテンシーが改善される。
更に、実施形態の一例においては、pcs_clockからcore_clockへの乗換のためのＦＩＦＯを省略できるので、回路構成の簡略化を図ることができる。
【０１６６】
（Ｄ）その他
なお、上述した実施形態に関わらず、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上記の実施形態においては、５ポート、８レーンの構成を例に挙げて説明したが、ポート数及び／又はレーン数は任意に変更することができる。
【０１６７】
更に、各種信号のビット数も任意に変更することができる。
例えば、前述の各構成ブロックの機能を複数のブロックとして分割したり、或いは複数の機能ブロックを１つのブロックに集約してもよい。
又は、前述の各構成ブロックを、回路等のハードウェアとして実装しても、ファームウェアとして実装しても、ソフトウェアとして実装してもよい。
【０１６８】
又は、上記のフローチャートのステップの実行順序を適宜変更してもよい。
（Ｅ）付記
上記の実施形態に関し、更に以下の付記を開示する。
（付記１）
送信装置から複数のレーンを介してデータを受信する受信装置であって、
前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、
前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、
前記送信装置と前記受信装置との周波数差の調整時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、
をそなえることを特徴とする受信装置。
【０１６９】
（付記２）
前記制御部は、前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、
前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を２インクリメントさせる信号を出力することを特徴とする付記１記載の受信装置。
【０１７０】
（付記３）
前記制御部は、前記所定値を複数そなえ、前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を２インクリメントさせる信号を出力する時間を変えることを特徴とする付記２記載の受信装置。
（付記４）
前記制御部は、前記読み出し位置を２インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第１のタイミング信号とに基づいて、前記バッファの前記読み出し位置を１又は２インクリメントすることを特徴とする付記２記載の受信装置。
【０１７１】
（付記５）
送信装置と、
該送信装置から複数のレーンを介してデータを受信する受信装置と、
前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、をそなえ、
前記受信装置は、
前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力するデスキュー制御部と、
前記送信装置と前記受信装置との周波数差の調整時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、をそなえ、
前記送信装置は、
前記複数のレーンのそれぞれに対して設けられ、前記第１のタイミング信号において送信データを書き込む第２のバッファをそなえる
ことを特徴とする情報処理装置。
【０１７２】
（付記６）
前記制御部は、前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、
前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を２インクリメントさせる信号を出力することを特徴とする付記５記載の情報処理装置。
【０１７３】
（付記７）
前記制御部は、前記所定値を複数そなえ、前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を２インクリメントさせる信号を出力する時間を変えることを特徴とする付記６記載の情報処理装置。
（付記８）
前記制御部は、前記読み出し位置を２インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第１のタイミング信号とに基づいて、前記バッファの前記読み出し位置を１又は２インクリメントすることを特徴とする付記６記載の情報処理装置。
【０１７４】
（付記９）
複数のレーンを介してデータを受信するデータ受信方法であって、
前記複数のレーン間のタイミングを合わせる第１のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力し、
前記複数のレーン間のスキューを合わせる第２のタイミング信号を出力し、
前記送信装置と前記受信装置との周波数差の調整時を検出し、
前記検出時に、前記第１のタイミング信号において、前記第２のタイミング信号の値、並びに、前記複数のレーンのそれぞれに対して設けられ、受信データを格納するバッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する
ことを特徴とするデータ受信方法。
【０１７５】
（付記１０）
前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、
前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を２インクリメントさせる信号を出力することを特徴とする付記９記載のデータ受信方法。
【０１７６】
（付記１１）
前記所定値が複数存在し、
前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を２インクリメントさせる信号を出力する時間を変えることを特徴とする付記１０記載のデータ受信方法。
【０１７７】
（付記１２）
前記読み出し位置を２インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第１のタイミング信号とに基づいて、前記バッファの前記読み出し位置を１又は２インクリメントすることを特徴とする付記１０記載のデータ受信方法。
【符号の説明】
【０１７８】
１０１  サーバ（情報処理装置）
１０２  ＳＢ
１０３  ＩＯＢ
１０４  ＸＢＢ
１０５  ＢＰ
１０６  システムバス
１１１  ＣＰＵ
１１２  ＤＲＡＭ
１１３  ＭＣ
１４２  ポート回路（受信装置）
１５０  レーンｍ受信部
１５１  デシリアラライザ
１５２  受信回路
１５４  受信データ復元部
１５５  受信制御部
１５３  エラスティックバッファ（バッファ）
１６０  クロック周波数差補償パターン／デスキュー検出部（デスキュー制御部）
１６５  ライトアドレス制御部
１６９  リードアドレス制御部
１６１  ８Ｂ１０Ｂ復元部
１６２  デスクランブラ
１６６，１６７  同期化ＦＦ
１６８  ＦＩＦＯ
１６４  トレーニングパターン受信部
１７０  レーンｍ送信部
１７１  シリアラライザ
１７２  送信回路
１７３  送信ギアボックス（ギアボックス）
１７４  送信データ分割部
１７５  転送速度差制御部（速度差制御部）
１７６  ８Ｂ１０Ｂ復元部
１７７  スクランブラ
１７８  トレーニングパターン／クロック周波数差補償パターン生成部
１７９  デスキュー制御部
１８０  クロック周波数補償パターン部
【図１】
2014216981.tif 000003
【図２】
2014216981.tif 000004
【図３】
2014216981.tif 000005
【図４】
2014216981.tif 000006
【図５】
2014216981.tif 000007
【図６】
2014216981.tif 000008
【図７】
2014216981.tif 000009
【図８】
2014216981.tif 000010
【図９】
2014216981.tif 000011
【図１０】
2014216981.tif 000012
【図１１】
2014216981.tif 000013
【図１２】
2014216981.tif 000014
【図１３】
2014216981.tif 000015
【図１４】
2014216981.tif 000016
【図１５】
2014216981.tif 000017
【図１６】
2014216981.tif 000018
【図１７】
2014216981.tif 000019
【図１８】
2014216981.tif 000020
【図１９】
2014216981.tif 000021
【図２０】
2014216981.tif 000022
【図２１】
2014216981.tif 000023
【図２２】
2014216981.tif 000024
【図２３】
2014216981.tif 000025
【図２４】
2014216981.tif 000026
【図２５】
2014216981.tif 000027
【図２６】
2014216981.tif 000028
【図２７】
2014216981.tif 000029
【図２８】
2014216981.tif 000030