(57)【特許請求の範囲】
【請求項１】
複数のレーンでシリアル通信によるデータを受信する受信回路において、
データの読み書きを行い、レーンごとに１つずつ設けられた複数のバッファと、
前記複数のレーンの各々でデスキューパターンを検出することで、レーン間のスキューを検出し、複数のアドレス制御回路のうち、前記デスキューパターンを最後に受信したレーン以外のレーンに対応するアドレス制御回路に該レーン間のスキューを無くすように前記バッファのリードアドレスをインクリメントしない第１の信号およびレーン間のスキューの調整を行うことを示すデスキュー信号を出力するマルチレーン制御回路と、
前記デスキュー信号に応じて、前記第１の信号を前記バッファに出力する、レーンごとに１つずつ設けられた前記複数のアドレス制御回路と、
を備える受信回路。
【請求項２】
前記複数のバッファは、ライトアドレスとリードアドレスとの差分が所定値より大きいか小さいかを示す差分信号を出力し、
前記マルチレーン制御回路は、レーン間のスキューの調整後に、所定のタイミングにおける複数の前記差分信号に基づいて、前記リードアドレスをインクリメントしない前記第１の信号および前記リードアドレスを２インクリメントする第２の信号を出力し、
前記複数のアドレス制御回路は、前記第１の信号および前記第２の信号を前記バッファに出力することを特徴とする請求項１記載の受信回路。
【請求項３】
前記マルチレーン制御回路は、いずれかの前記レーンの前記差分信号が前記所定値より小さいことを示す場合は、前記リードアドレスをインクリメントしない前記第１の信号を出力し、全ての前記レーンの前記差分信号が前記所定値より大きいことを示す場合は、前記リードアドレスを２インクリメントする前記第２の信号を出力する請求項２記載の受信回路。
【請求項４】
複数のレーンでシリアル通信によるデータを受信する受信回路を備えた情報処理装置おいて、
前記受信回路は、
データの読み書きを行い、レーンごとに１つずつ設けられた複数のバッファと、
前記複数のレーンの各々でデスキューパターンを検出することで、レーン間のスキューを検出し、複数のアドレス制御回路のうち、前記デスキューパターンを最後に受信したレーン以外のレーンに対応するアドレス制御回路に該レーン間のスキューを無くすように前記バッファのリードアドレスをインクリメントしない第１の信号およびレーン間のスキューの調整を行うことを示すデスキュー信号を出力するマルチレーン制御回路と、
前記デスキュー信号に応じて、前記第１の信号を前記バッファに出力する、レーンごとに１つずつ設けられた前記複数のアドレス制御回路と、
を備えることを特徴とする情報処理装置。
【請求項５】
前記複数のバッファは、ライトアドレスとリードアドレスとの差分が所定値より大きいか小さいかを示す差分信号を出力し、
前記マルチレーン制御回路は、レーン間のスキューの調整後に、所定のタイミングにおける複数の前記差分信号に基づいて、前記リードアドレスをインクリメントしない前記第１の信号および前記リードアドレスを２インクリメントする第２の信号を出力し、
前記複数のアドレス制御回路は、前記第１の信号および前記第２の信号を前記バッファに出力することを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記マルチレーン制御回路は、いずれかの前記レーンの前記差分信号が前記所定値より小さいことを示す場合は、前記リードアドレスをインクリメントしない前記第１の信号を出力し、全ての前記レーンの前記差分信号が前記所定値より大きいことを示す場合は、前記リードアドレスを２インクリメントする前記第２の信号を出力する請求項５記載の情報処理装置。
【請求項７】
複数のレーンでシリアル通信によるデータを受信する受信回路のバッファ制御方法において、
データの読み書きをレーンごとに１つずつ設けられた複数のバッファで行い、
前記複数のレーンの各々でデスキューパターンを検出することで、レーン間のスキューを検出し、複数のアドレス制御回路のうち、前記デスキューパターンを最後に受信したレーン以外のレーンに対応するアドレス制御回路に該レーン間のスキューを無くすように前記バッファのリードアドレスをインクリメントしない第１の信号およびレーン間のスキューの調整を行うことを示すデスキュー信号を出力する工程と、
前記デスキュー信号に応じて、前記第１の信号を前記バッファに出力する工程と、
を備えるバッファ制御方法。
【請求項８】
ライトアドレスとリードアドレスとの差分が所定値より大きいか小さいかを示す差分信号を出力する工程と、
レーン間のスキューの調整後に、所定のタイミングにおける複数の前記差分信号に基づいて、前記リードアドレスをインクリメントしない前記第１の信号および前記リードアドレスを２インクリメントする第２の信号を前記複数のレーンに出力する工程と、
前記第１の信号および前記第２の信号をバッファに出力する工程と、
をさらに備える請求項７記載のバッファ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数レーンでシリアル通信を行う受信回路および該受信回路を備える情報処理装置に関する。
【背景技術】
【０００２】
ポート間を複数レーンでシリアル通信を行う場合、接続元ポートの送信回路は送信データをレーン数に分割し、分割したデータをそれぞれのレーンで送信する。接続先ポートの受信回路は、それぞれのレーンで受信したデータを復元する。
【０００３】
図１は、従来の受信回路の構成図である。
受信回路１１は、レーンブロック２１−ｍ（ｍ＝０〜７）およびデスキュー処理部３１を備える。
【０００４】
ここではレーン数を８とし、レーンｍは、レーンブロック２１−ｍと接続している。
レーンブロック２１−０は、DESerializer４１、Gear-Box４２、10bit境界検出回路４３、エラスティックバッファ４４、クロック周波数差補償パターン検出回路４５、および8B10B変換回路４６を備える。
【０００５】
レーンブロック２１−１〜２１−７は、レーンブロック２１−０と同様の構成を持つ。
DESerializer４１は受信した1ビット幅のシリアルデータを4ビット幅のパラレルデータ(DATA_4BIT５１)に変換する。また、受信シリアルデータよりクロックリカバリして、受信クロック(RX_CLOCK_DIVIDE_4, RX_CLOCK_DIVIDE_10)を生成する。
【０００６】
RX_CLOCK_DIVIDE_4はシリアルデータ転送速度に対して1/4の周波数クロックであり、RX_CLOCK_DIVIDE_10は1/10の周波数クロックである。例えば、シリアルデータ転送速度が2.5GT/sの場合、RX_CLOCK_DIVIDE_4 = 625MHz, RX_CLOCK_DIVIDE_10 = 250MHzとなる。
【０００７】
シリアルデータ転送は一般的に良く知られた8B10B変換データで行う。8B10B変換では、送信回路で8ビットのデータ(8b-code)を10ビットのデータ(10b-code)に変換して、送信する。受信回路では、10b-codeを8b-codeに復元する。また、10b-codeをシンボルと呼ぶ。
【０００８】
Gear-Box４２はFIFOであり、RX_CLOCK_DIVIDE_4クロックで4ビット幅のDATA_4BIT５１を書き込み、RX_CLOCK_DIVIDE_10クロックで10ビット幅のDATA_10BIT_UNALIGNMENT５２を読み出す。
【０００９】
10ビット境界検出回路４３は境界パターンを検出して、DATA_10BIT_UNALIGNMENT５２を10b-code単位の10ビット境界データ(DATA_10BIT_ALIGNMENT５３)に調節し、DATA_10BIT_ALIGNMENT５３をエラスティックバッファ４４に出力する。10ビット境界パターンはシリアルバス初期化時に転送されるトレーニングパターンに含まれる。
【００１０】
トレーニングパターンは複数のシンボルから構成され、送信回路はそれぞれのレーンで同じタイミングでトレーニングパターンを送信する。
エラスティックバッファ４４は、接続装置間のクロック周波数差を吸収するFIFOである。ライトアドレスは１サイクル毎に１ずつインクリメントされる。リードアドレスは通常時に１サイクルごとに１ずつインクリメントされるが、クロック周波数差補償パターン検出時にクロック周波数差補償パターン検出回路４５からの信号に基づいて、ホールド、１インクリメント、もしくは、２インクリメントされる。
【００１１】
クロック周波数差補償パターンは複数のシンボルから構成され、シリアルバス初期化時および通常動作時に、それぞれのレーンで同じタイミングで送信される。
クロック周波数差補償パターン検出回路４５は、エラスティックバッファ４４のリードアドレスを調節する信号を出力する。
【００１２】
クロック周波数差補償パターンは接続装置間のクロック周波数差を補償するために、シリアルバスで定期的に送信される。例えば、接続装置間のクロック周波数許容誤差を±300ppm以内にする場合、送信回路は1666cycle以内に１個のクロック周波数差補償パターンを送信する。
【００１３】
8B10B変換回路４６は10b-code（DATA_10BIT５４）を8b-code（DATA_8BIT５５）に変換する回路である。
デスキュー処理部３１は、デスキューバッファ５１−ｍ（ｍ＝０〜７）およびデスキューパターン検出回路５２を備える。
【００１４】
デスキューバッファ５１は、FIFOであり、デスキューパターン検出位置に基づき、レーン間スキューを揃えて、復元データを出力する。
但し、単純なFIFOでなく、デスキュー位置調節時は、リードアドレスを変化させる。
【００１５】
デスキューパターン検出回路５２は、各レーンからの出力されるデータから、デスキューパターンの位置を検出し、レーン間スキューを揃えるようにリードアドレスを制御する信号をデスキューバッファ５１に出力する。
【００１６】
デスキューパターンはシリアルバス初期化時に転送されるトレーニングパターンに含まれる。
また、シリアルバス初期化時のデスキュー位置調節後も、定期的なクロック周波数差補償パターン受信毎に、デスキュー位置を再調節する。各レーンのエラスティックバッファ４４は独立にクロック周波数差補償を行うため、デスキュー処理部３１は、各レーンより、クロック周波数差補償情報５６を受信し、デスキュー位置を再調節する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２００５−１５９５７８号公報
【特許文献２】特開２００８−１７２６５７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
従来、複数レーンのシリアルバスはIOバス等のレイテンシーが性能に大きく影響しないバスで使用されていた。
大規模サーバ等の情報処理装置のシステムバスに複数レーンのシリアルバスを採用した場合、サーバに搭載されるLSIの受信回路のレイテンシーは、サーバ全体の性能に大きく影響する。
【００１９】
しかしながら、従来の受信回路は、機能毎に分かれた２個のFIFO(エラスティックバッファおよびデスキューバッファ)を備えるため、レイテンシーが大きくなるという問題があった。
【００２０】
本発明の課題は、低レイテンシーの受信回路を提供することである。
【課題を解決するための手段】
【００２１】
実施の形態の受信回路は、複数のレーンでシリアル通信によるデータを受信し、複数のバッファ、マルチレーン制御回路、および複数のアドレス制御回路を備える。
バッファは、データの読み書きを行う。バッファは、レーン毎に設けられる。
【００２２】
マルチレーン制御回路は、レーン間のスキューを検出し、該レーン間のスキューを無くすように前記バッファのリードアドレスを調節する第１の信号およびレーン間のスキューの調整を行うことを示すデスキュー信号を出力する。
【００２３】
アドレス制御回路は、前記デスキュー信号に応じて、前記第１の信号を前記バッファに出力する。アドレス制御回路は、レーンごとに設けられる。
実施の形態の受信回路は、複数のレーンでシリアル通信によるデータを受信し、複数のバッファ、マルチレーン制御回路、および複数のアドレス制御回路を備える。
【００２４】
バッファは、データの読み書きを行い、データの読み書きを行い、ライトアドレスとリードアドレスとの差分が所定値より大きいか小さいかを示す差分信号を出力する。バッファは、レーン毎に設けられる。
【００２５】
マルチレーン制御回路は、レーン間のスキューの調整後に、所定のタイミングにおける複数の前記差分信号に基づいて、前記リードアドレスを調節する第１の信号を出力する。
アドレス制御回路は、前記第１の信号を前記バッファに出力する、アドレス制御回路は、レーンごとに設けられる。
【発明の効果】
【００２６】
実施の形態の受信回路によれば、受信回路のレイテンシーを小さくすることができる。
【図面の簡単な説明】
【００２７】
【図１】従来の受信回路の構成図である。
【図２】本実施の形態に係るサーバの構成図である。
【図３】実施の形態に係るSBの構成図である。
【図４】実施の形態に係るIOBの構成図である。
【図５】実施の形態に係るXBBの構成図である。
【図６】実施の形態に係るXBの構成図である。
【図７】実施の形態に係るデータ送受信方式を示す図である。
【図８】トレーニングパターンのフォーマットを示す図である。
【図９】クロック周波数差補償パターンのフォーマットを示す図である。
【図１０】実施の形態に係る受信回路の構成図である。
【図１１】受信回路のシリアルバス初期化時の動作のフローチャートである。
【図１２】送信回路のシリアルバス初期化時の動作のフローチャートである。
【図１３】実施の形態に係るエラスティックバッファの構成図である。
【図１４】実施の形態に係るパターン検出回路の構成図である。
【図１５】レーン単位のクロック周波数差補償タイムチャートである。
【図１６】実施の形態に係るマルチレーン制御回路の構成図である。
【図１７】実施の形態の受信回路の配置配線図である。
【図１８】デスキュー時のレーンブロックのタイムチャートである。
【図１９】デスキュー時のマルチレーン制御回路のタイムチャートである。
【図２０】デスキュー完了後のクロック周波数差補償のレーンブロックのタイムチャートである。
【図２１】デスキュー完了後のクロック周波数差補償のマルチレーン制御回路のタイムチャートである。
【発明を実施するための形態】
【００２８】
以下、図面を参照しながら本発明の実施の形態を説明する。
図２は、実施の形態に係るサーバの構成図である。
サーバ１０１は、システムボード（SB）１０２−ｉ（ｉ＝０〜５）、ＩＯボード（IOB）１０３−ｊ（ｊ＝０〜１）、クロスバーボード（XBB）１０４−ｋ（ｋ＝０〜１）、およびバックプレーンボード（BP）１０５を備える。
【００２９】
SB１０２は、Central Processing Unit（CPU）やDRAM（Dynamic Random Access Memory）等を備え、各種処理を行う基板である。
IOB１０３は、Local Area Network（LAN）やHard Disk Drive（HDD）等と接続するコネクタを備えた基板である。
【００３０】
XBB１０４は、SB１０２やIOB１０３を相互に接続するためのクロスバースイッチを備える基板である。
BP１０５は、SB１０２、IOB１０３、およびXBB１０４をコネクタを介して相互に接続するための基板である。
【００３１】
それぞれのSB-XBB間、IOB-XBB間とXBB-XBB間はBP１０５経由でシステムバス１０６−ｒ（ｒ＝０〜１７）で接続されている。システムバス１０６は、マルチレーンシリアルバスである。
【００３２】
SB１０２上のCPUが他SBのDRAMにアクセスする場合は、システムバス１０６を使用して、XBB１０４経由でパケットが送信される。同様にIOB１０３上のGigabit Ethernet (GbE)コントローラがSB１０２上のDRAMにアクセスする場合もシステムバス１０６を使用して、XBB１０４経由でパケットが送信される。
【００３３】
例えば、SB１０２−０からSB１０２−１にアクセスする場合は、SB１０２−０からXBB１０４−０を介してSB１０２−１へとパケットが送信される。
また、SB１０２−０からSB１０２−４にアクセスする場合は、SB１０２−０からXBB１０４−０およびXBB１０４−１を介してSB１０２−４へとパケットが送信される。
【００３４】
パケット送受信において、XBB１０４を経由することにより、アクセスレイテンシーが増加する。そのため、XBB１０４に搭載されるクロスバースイッチ（XB）等はパケット通過レイテンシーが小さいことが望まれる。
【００３５】
図３は、実施の形態に係るSBの構成図である。
SB１０２は、CPU１１１−ｎ（ｎ＝１〜２）、DRAM１１２−ｎ、およびMemory Controller （MC）１１３を備える。
【００３６】
CPU１１１は中央処理装置であり、SB１０２の各種処理を行う。
MC１１３は、DRAM１１２のデータの読み出し、書き出し、リフレッシュなどの制御を行う。MC１１３は、システムバス１１５でBP１０５を介してXBB１０４と接続されている。
【００３７】
MC１１３は、送信回路および受信回路を有するポート部１１４を備える。
送信回路は、システムバス１１５にデータを送信し、受信回路は、システムバス１１５からのデータを受信する。
【００３８】
受信回路には、後述の実施の形態の受信回路が用いられる。
MC１１３はCPU１１１から送信されるパケットにより、SB１０２内のDRAM１１２にアクセスするか、他のSB１０２内のDRAM１１２にアクセスするのか、IOB１０３内のGbEコントローラやシリアル・アタッチ・SCSIコントローラにアクセスするのかの制御を行う。
【００３９】
図４は、実施の形態に係るIOBの構成図である。
IOB１０３は、IOC１２１、GbEコントローラ１２２、シリアル・アタッチ・SCSI （SAS）コントローラ１２３、およびHDD１２４を備える。
【００４０】
IOC１２１はIOコントローラである。IOC１２１は、GbEコントローラ１２２およびSASコントローラ１２３とそれぞれIOバス１２６−１、１２６−２で接続されている。
IOC１２１はシステムバスでBP１０５を介してXBB１０４と接続されている。
【００４１】
IOC１２１は、送信回路および受信回路を有するポート部１２５を備える。
送信回路は、システムバスにデータを送信し、受信回路は、システムバスからのデータを受信する。
【００４２】
受信回路には、後述の実施の形態の受信回路が用いられる。
GbEコントローラ１２２は、GbEでの通信を行うコントローラであり、LANポートを有する。
SASコントローラ１２３は、シリアル通信を行うコントローラであり、HDD１２４と接続される。
【００４３】
図５は、実施の形態に係るXBBの構成図である。
XBB１０４は、複数のXB１３１−ｐ（ｐ＝１〜２）を備える。
XB１３１は、データの経路を動的に選択するクロスバースイッチである。XB１３１はシステムバス１３２−ｓ（ｓ＝１〜８）で他のXBB１０４、SB１０２、またはIOB１０３に接続されている。また、XB１３１−１とXB１３１−２の間もシステムバス１３２−９で接続されている。
【００４４】
XB１３１は、SB１０２等から送信されるパケットを受信し、そのパケットのヘッダーに含まれる宛先を認識し、送信先にルーティングを行う。
【００４５】
図６は、実施の形態に係るXBの構成図である。
XB１３１はXBB１０４に搭載されるLSI（Large Scale Integration）である。
XB１３１は、システムバス I/F１４１−ｐ（ｐ＝１〜５）、ポート部１４２−ｐ、およびルーティング部を１４３を備える。
【００４６】
システムバス I/F１４１は、マルチレーンのシリアルバスに接続するインターフェースであり、送信I/F（TX）と受信I/F（RX）を備える。
ポート部１４２はシステムバスのプロトコル制御を行う。
【００４７】
ポート部は、送信回路および受信回路を備える。
送信回路は、システムバスにデータを送信し、受信回路は、システムバスからのデータを受信する。
【００４８】
受信回路には、後述の実施の形態の受信回路が用いられる。
ルーティング部１４３は、ポート部１４２から入力されたパケットの宛先に対応するポート部１４２にパケットを出力する。
【００４９】
図７は、実施の形態に係るデータ送受信方式を示す図である。
ここでは、接続元装置の送信回路から接続先装置の受信回路にデータを送信する場合について述べる。
【００５０】
例えば、図２において、SB１０２−０からXBB１０４−０にデータを送る場合、接続元装置はSB１０２−０に該当し、接続先装置はXBB１０４−０に該当する。
接続元装置のポート部（以下、接続元ポート）２０１は、送信回路２０２、受信回路２０３、およびマルチレーン制御回路２０４を備える。
【００５１】
接続先装置のポート部（以下、接続先ポート）２１１は、送信回路２１２、受信回路２１３、およびマルチレーン制御回路２１４を備える。
接続元ポート２０１の送信回路２０２は複数レーン（ここでは、レーン0〜レーン7からなる８レーン）のシリアルバスにより、接続先ポート２１１の受信回路２１３に接続される。
【００５２】
送信回路２０２は、トレーニングパターンおよびクロック周波数差補償パターン生成回路２０６、送信データ分割部２０７、レーンｍ送信データ送信部２０８−ｍ（ｍ＝０〜７）、セレクタ２０９−ｍ、および8B10B変換部２１０−ｍを備える。
【００５３】
受信回路２１３は、トレーニングパターン受信回路２１７、レーンｍ受信データ処理部２１８−ｍ、調節部２１９−ｍ、および8B10B変換部２２０−ｍを備える
シリアルバス初期化完了後に、送信データ分割部２０２は、送信データを８レーンのそれぞれで送信するデータに分割する。
【００５４】
レーンｍ送信データ送信部２０８−ｍは、分割された送信データをセレクタ２０９−ｍに出力する。
セレクタ２０９は、送信データ、トレーニングパターン、またはクロック周波数差補償パターンのいずれかを選択して出力する。
【００５５】
8B10B変換部２１０−ｍは、送信データを8b-codeから10b-codeに変換してシリアルバスに出力する。
受信回路２１３は、レーンｍ受信データ処理部２１８−ｍ、調節部２１９−ｍ、8b10b変換部２２０−ｍ、およびトレーニングパターン受信回路２１７を備える。
【００５６】
レーンｍ受信データ処理部２１８−ｍは、受信したデータから、クロックリカバリにより受信クロックの生成や１０b-code単位のデータへ調節を行う。
調節部２１９−ｍは、レーン間のスキューやクロック周波数差を調節する。
【００５７】
8b10b変換部２２０−ｍは、それぞれのレーンで受信した10b-codeを8b-codeに変換して、受信データを復元する。正しくデータ復元を行うには、レーンスキュー調節、および、クロック周波数差補償が行われている必要がある。
【００５８】
シリアルバス初期化時は、データでなく、トレーニングパターンの送受信を行う。受信側はトレーニングパターン受信により、デスキュー等を行う。
マルチレーン制御回路２０４は、トレーニングパターンの送受信指示を送信回路２０２および受信回路２０３に行う。
【００５９】
マルチレーン制御回路２１４は、トレーニングパターンの送受信指示を送信回路２１２および受信回路２１３に行う。
マルチレーン制御回路２０４、２１４は、初期化完了後に、データの送受信指示を行う。
【００６０】
トレーニングパターンおよび周波数差補償パターンは、送信回路２０２のトレーニングパターンおよびクロック周波数差補償パターン生成回路２０６で生成される。
トレーニングパターンは、受信回路２１３のトレーニングパターン受信回路２１７に入力される。
【００６１】
接続元ポート２０１と接続先ポート２１１には、それぞれ別のオシレータ２０５、２１５からリファレンスクロックが供給される。オシレータの個体差により、各リファレンスクロック周波数は僅かに異なる。
【００６２】
トレーニングパターンおよびクロック周波数差補償パターン生成回路２０６は、シリアルバス初期化中または初期化完了後に関わらず、接続元ポート２０１と接続先ポート２１１のクロック周波数差補償のため、クロック周波数差補償パターンを定期的に送信する。例えば、接続装置間のリファレンスクロック周波数許容誤差を±300ppm以内とする場合は、1666cycle以内に一度、クロック周波数差補償パターンを送信する。
【００６３】
図８は、トレーニングパターンのフォーマットを示す図である。
実施の形態に係るトレーニングパターンは、３２個のシンボルで構成される。シンボルの種類は、TH、AL、DS、およびSIである。尚、１つのシンボルは１０ビットで構成されている。
【００６４】
THは、Training Pattern Headであり、トレーニングパターンの先頭を示すシンボルである。
ALは、Alignmentであり、１０ビット境界パターンを示すシンボルである。
DSは、Deskewであり、デスキューパターンを示すシンボルである。
【００６５】
SIは、Sequence Informationであり、初期化手順で接続先ポートに通知する情報を示すシンボルである。
尚、1つのシンボルで"TH"、"AL"、"DS"の機能を持つフォーマットとすることも可能である。
【００６６】
図９は、クロック周波数差補償パターンのフォーマットを示す図である。
実施の形態に係るクロック周波数差補償パターンは、７個のシンボルで構成される。シンボルの種類は、CHおよびDMである。
CHは、Clock Headであり、クロック周波数差補償パターン先頭を示すシンボルである。
【００６７】
DMは、Dummyであり、クロック周波数差補償動作時に追加または削除されるシンボルである。DMの追加または削除は、エラスティックバッファのリードアドレス制御で行われる。
【００６８】
尚、トレーニングパターンおよびクロック周波数差補償パターンの長さは、上述した長さに限定されない。トレーニングパターンおよびクロック周波数差補償パターンの長さは、受信回路の動作周波数、配置配線やシリアルバスプロトコルに依存して、適宜変更することができる。
【００６９】
図１０は、実施の形態に係る受信回路の構成図である。
受信回路３０１は、レーンブロック３０２−ｍ（ｍ＝０〜７）およびマルチレーン制御回路３０３を備える。
【００７０】
受信回路３０１は、図７の受信回路２０３、２１３に対応する。
実施の形態において、レーン数は、レーン0〜レーン7からなる８レーンである。データは、送信回路で分割され、レーン0〜レーン7を通じて送信される。
【００７１】
以下の説明および図面において、レーンm（m=0〜7）と接続するレーンブロック３０２−ｍは、レーンmブロックと記すことがある。
レーンmブロックは、レーンmを通過するデータを処理する。
【００７２】
図１０においては、レーン0ブロックのみ詳細な構成図を示す。レーン1ブロック〜レーン7ブロックの構成は、レーン0ブロックと同様である。
レーン0ブロック３０２−０は、DESerializer３１１、Gear-Box３１２、10ビット境界検出回路３１３、エラスティックバッファ３１４、パターン検出回路３１５、および8B10B変換回路３１６を備える。
【００７３】
DESerializer３１１は、受信した1ビット幅のシリアルデータを4ビット幅のパラレルデータ(DATA_4BIT３２１)に変換する。また、DESerializer３１１は、受信したシリアルデータからクロックリカバリにより、受信クロック(RX_CLOCK_DIVIDE_4, RX_CLOCK_DIVIDE_10)を生成する。
【００７４】
RX_CLOCK_DIVIDE_4はシリアルデータ転送速度に対して1/4の周波数クロックである。RX_CLOCK_DIVIDE_10はシリアルデータ転送速度に対して、1/10の周波数クロックである。
すなわち、データを送信する接続元ポートのリファレンスクロック周波数の定倍となる。
【００７５】
クロックINTERNAL_CLOCKは自ポート（接続先ポート）のリファレンスクロックより生成する。
RX_CLOCK_DIVIDE_4、RX_CLOCK_DIVIDE_10とINTERNAL_CLOCKの周波数比は略5:2:2となる。
例えば、シリアルバス転送速度が5.0GT/sの場合、RX_CLOCK_DIVIDE_4=1.25GHz, RX_CLOCK_DIVIDE_4=0.5GHz, INTERNAL_CLOCK=0.5GHzとなる。
【００７６】
Gear-Box３１２への書き込みまでは、RX_CLOCK_DIVIDE_4と同期して動作する。
Gear-Box３１２からの読み出し、１０ビット境界検出回路３１３、およびエラスティックバッファの書き込みは、RX_CLOCK_DIVIDE_10と同期して動作する。
エラスティックバッファの読み出し、パターン検出回路３１５、マルチレーン制御回路３０３、8B10B変換回路３１６は、INTERNAL_CLOCKと同期して動作する。
【００７７】
また、DESerializer３１１が4ビット幅以外のパラレルデータを出力する場合、例えば、8ビット、16ビット幅で出力する場合は、DESerializer３１１はシリアルバス転送速度の1/8、1/16の受信クロックを出力し、Gear-Box３１２へ書き込みを行う。
【００７８】
Gear-Box３１２は、FIFOであり、RX_CLOCK_DIVIDE_4クロックで4ビット幅のDATA_4BIT３２１を書き込み、RX_CLOCK_DIVIDE_10クロックで10ビット幅のDATA_10BIT_UNALIGNMENT３２２を読み出す。Gear-Box３１２は、DATA_10BIT_UNALIGNMENT３２２を10ビット境界検出回路３１３に出力する。
【００７９】
10ビット境界検出回路３１３は、境界パターンを検出して、DATA_10BIT_UNALIGNMENT ３２２を10b-code単位の10ビット境界データ(DATA_10BIT_ALIGNMENT３２３)に調節する。10ビット境界検出回路３１３は、DATA_10BIT_ALIGNMENT３２３をエラスティックバッファ３１４に出力する。
【００８０】
エラスティックバッファ３１４は、クロック周波数差を吸収するFIFOである。エラスティックバッファ３１４は、リードアドレスは通常時に毎サイクル+1するが、パターン検出回路３１５からの制御信号に応じて、リードアドレスをホールド、１インクリメント、もしくは、２インクリメントする。
【００８１】
エラスティックバッファ３１４は、データ（DATA_10BIT３２４）を読み出し、該データをパターン検出回路３１５および8B10B変換回路３１６に出力する。また、ライトアドレスとリードアドレスとの差分と所定値の大小関係を示す信号を出力する。
【００８２】
パターン検出回路３１５は、エラスティクバッファ３１４に、リードアドレスを制御する信号を出力する。
シリアルデータ転送は8B10B変換データで行われる。送信回路で8ビット幅のデータ(8b-code)は10ビット幅のデータ(10b-code)に変換され、変換されたデータが送信される。受信回路では、10b-codeを8b-codeに復元する。
【００８３】
8B10B変換回路３１６は、10b-codeのデータ（DATA_10BIT３２４）を8b-code（DATA_8BIT３２５）に変換する。
尚、8B10B以外の変換を行うシリアルバスプロトコルの場合、8B10B変換回路３１６はプロトコルに依存した変換回路に適宜変更する。また、10ビット境界検出回路３２２もプロトコルに依存して適宜変更する。
【００８４】
マルチレーン制御回路３０３は、各レーンブロックのパターン検出回路３１５と接続している。マルチレーン制御回路３０３は、レーン間のスキューを検出し、レーン間スキューの調整を行うことを示すデスキュー指示(deskew_flag)およびレーン間のスキューを無くすためにリードアドレスを調節する信号を全てのレーンブロックのパターン検出回路３１５に出力する。
【００８５】
図1に示す従来の受信回路１１と図１０に示す実施の形態の受信回路３０１とを比較すると、実施の形態の受信回路３０１では、デスキューバッファ５１とデスキューパターン検出回路５２が削除されている。
【００８６】
従来の受信回路１１でデスキューバッファ５１とデスキューパターン検出回路５２が行っていた、レーン間スキュー調節機能およびポート単位のクロック周波数差補償機能は、実施の形態ではパターン検出回路３１５、マルチレーン制御回路３０３およびエラスティックバッファ３１４で行われる。
【００８７】
次に、シリアルバス初期化時の受信回路３０１の動作を示す。
図１１は、受信回路３０１のシリアルバス初期化時の動作のフローチャートである。
ステップＳ４０１において、受信回路３０１は、10ビット境界検出回路が受信するトレーニングパターンより10ビット境界パターンを検出した場合、制御はステップＳ４０２に進み、10ビット境界パターンを検出していない場合、10ビット境界パターン未検出を示す情報を送信して制御は最初に戻る。
【００８８】
ステップＳ４０２において、受信回路３０１は、10ビット境界パターンの検出後から10ビットのシンボル境界に合わせて、エラスティックバッファ３１４への書き込みおよびエラスティックバッファ３１４から読み出しを開始する。
【００８９】
ステップＳ４０３において、受信回路３０１がクロック周波数差補償パターンを受信した場合ステップＳ４０４に制御は進み、受信していない場合ステップＳ４０５に制御は進む。
【００９０】
ステップＳ４０４において、受信回路３０１の各レーンのエラスティックバッファは独立に、エラスティックバッファ３１４のライトアドレスとリードアドレスとの差分（ライトリードアドレス差分）が基準値になるように、エラスティックバッファ３１４のリードアドレスを調節し、クロック周波数差補償を行う。受信回路３０１は、デスキュー指示により、デスキューパターンを検出し、レーン間スキューを調節する。
【００９１】
ステップＳ４０５において、デスキューが完了した場合はステップＳ４０６に制御は進み、デスキューが完了していない場合はステップＳ４０３に制御は戻る。
ステップＳ４０６において、受信回路３０１がクロック周波数差補償パターンを受信した場合、ステップＳ４０７に制御は進み、受信していない場合、ステップＳ４０８に制御は進む。
【００９２】
ステップＳ４０７において、受信回路３０１は、レーン全体、すなわちポート単位でクロック周波数差補償を行う。
ステップＳ４０８において、受信回路３０１は、デスキュー完了を示す情報を持つトレーニングパターンを受信した場合、制御は終了し、受信していない場合、制御はステップＳ４０６に戻る。
【００９３】
シリアルバス初期化完了後に、送信回路２０２はトレーニングパターン送信を止め、データ送信を開始する。送信回路２０２、は初期化完了後も定期的なクロック周波数差補償パターン送信を継続する。
【００９４】
受信回路３０１は受信データの復元を行う。この時、受信回路３０１はポート単位のクロック周波数差補償を継続する。
初期化時に送信するトレーニングパターンは初期化状態を示す情報を持つ。それにより接続先ポートがどの状態であるか、例えば、１０ビット境界パターンを検出した、デスキューが完了した等の状態を知ることができ、同期して初期化処理を完了することができる。例えば、受信回路３０１は、接続元ポート２０１から受信するトレーニングパターンと自ポート（接続先ポート）２１１が送信するトレーニングパターンから、両ポートがデスキュー可能状態であることを認識してデスキュー指示を行う。
【００９５】
次に、シリアルバス初期化時の送信回路２０２の動作を示す。
図１２は、送信回路２０２のシリアルバス初期化時の動作のフローチャートである。
尚、トレーニングパターン、周波数差補償パターンは、送信回路のすべてのレーンで同じタイミングで送信する。
【００９６】
ステップＳ４１１において、送信回路２０２は10ビット境界パターン未検出を示す情報を持つトレーニングパターンを送信する。
ステップＳ４１２において、送信回路は２０２は、前回の周波数補償パターン送信より1666cycle経過しているか判定する。1666cycle経過している場合、ステップＳ４１３に制御は進み、1666cycle経過していない場合、ステップＳ４１４に制御は進む。
【００９７】
ステップＳ４１３において、送信回路２０２は、周波数差補償パターンを送信する
ステップＳ４１４において、受信回路２０３が10ビット境界パターン検出した場合、ステップＳ４１５に進み、10ビット境界パターンを検出していない場合、ステップＳ４１１に戻る。
【００９８】
ステップＳ４１５において、送信回路２０２はデスキュー可能状態を示す情報を持つトレーニングパターンを送信する。
ステップＳ４１６において、送信回路２０２は、前回の周波数補償パターン送信より1666cycle経過しているか判定する。1666cycle経過している場合、ステップＳ４１７に制御は進み、1666cycle経過していない場合、ステップＳ４１８に制御は進む。
【００９９】
ステップＳ４１７において、送信回路２０２は、周波数差補償パターンを送信する。
ステップＳ４１８において、受信回路２０３がデスキューを完了している場合、制御はステップＳ４１９に進み、デスキューを完了していない場合、制御はステップＳ４１５に戻る。
【０１００】
ステップＳ４１９において、送信回路２０２はデスキュー完了状態を示す情報を持つトレーニングパターン送信する。
ステップＳ４２０において、送信回路２０２は、前回の周波数補償パターン送信より1666cycle経過しているか判定する。1666cycle経過している場合、ステップＳ４２１に制御は進み、1666cycle経過していない場合、ステップＳ４２２に制御は進む。
【０１０１】
ステップＳ４２１において、送信回路２０２は、周波数差補償パターンを送信する。
ステップＳ４２２において、受信回路２０３がデスキュー完了を示す情報を持つトレーニングパターン受信した場合、制御はステップＳ４２３に進み、受信しなかった場合、制御はステップＳ４１９に戻る。
【０１０２】
ステップＳ４２３において、送信回路２０２は、デスキュー完了状態を示す情報を持つトレーニングパターンを16個送信する。
尚、シリアルバス初期化時の動作は図１１、図１２の動作に限定するものではない。シリアルバスプロトコルに合わせて、適宜変更する。
【０１０３】
図１３は、実施の形態に係るエラスティックバッファの構成図である。
エラスティックバッファ５０１は、Write Address制御回路５０２、Read Address制御回路５０３、FIFO５０４、FF５０５、同期化FF５０６−１、５０６−２を備える。
【０１０４】
エラスティックバッファ５０１は、図１０のエラスティックバッファ３１４に対応する。
クロックRX_CLOCK_DIVIDE_10は、Write Address制御回路５０２、FIFO５０４、FF５０５に入力される。Write Address制御回路５０２、FIFO５０４、およびFF５０５は、RX_CLOCK_DIVIDE_10に同期して動作する。上述のように、RX_CLOCK_DIVIDE_10は、DESerializer３１１で、受信したシリアルデータからクロックリカバリにより、生成される。
【０１０５】
クロックINTERNAL_CLOCKは、同期化FF５０６−１、５０６−２およびRead Address制御回路５０３に入力される。同期化FF５０６−１、５０６−２、およびRead Address制御回路５０３は、INTERNAL_CLOCKと同期して動作する。
【０１０６】
FIFO５０４は、10ビット幅の22段のFIFOである。また、ライトクロックとリードクロックの差のため、書き込みと読み出しに僅かなスループット差がある。実施の形態において、FIFO段数は22段であるが、これに限られるものではない。システムバスのレーン間スキューが小さい場合は、FIFO段数をより小さくしてもよい。
【０１０７】
FIFO５０４には、Write Address制御回路５０２から入力されるライトアドレスwrite_addressでデータwrite_dataが書き込まれる。
FF５０５は、DATA_10BIT_ALIGNMENT３２３をRX_CLOCK_DIVIDE_10と同期してwrite_dataとして出力する。
【０１０８】
Write Address制御回路５０２は10ビット境界検出回路からの境界検出通知(alignment_detect信号)を受けるとシンボル単位でFIFO５０４へデータ（write_data）の書き込みを開始する。
【０１０９】
Write Address制御回路５０２は、RX_CLOCK_DIVIDE_10に同期して書き込みを行う。すなわち、RX_CLOCK_DIVIDE_10がライトクロックとなる。
Write Address制御回路５０２は、write_enable信号が1の時にFIFO５０４のアドレスwrite_addressにデータを書き込む。Write Address制御回路５０２は、ライトアドレス（write_address）を0から開始し、常に1づつインクリメントする。Write Address制御回路５０２は、ライトアドレスを21でラップラウンドして0に戻す。Write Address制御回路５０２は、ライトアドレスを0に戻す時に、リード側にライトアドレスが一周したことを通知するために、write_lap_round信号を反転する。
【０１１０】
同期化FF５０６−１は、write_enable信号をRX_CLOCK_DIVIDE_10と同期して、write_enable_sync信号として出力する。
同期化FF５０６−２は、write_lap_round信号をRX_CLOCK_DIVIDE_10と同期して、write_lap_round_sync信号をして出力する。
【０１１１】
Read Address制御回路５０３は、write_enable信号を同期化したwrite_enable_sync信号のアサートよりリードアドレス0より読み出しを開始する。Write Address制御回路５０２は、基本的にリードアドレスを１サイクルごとに1づつインクリメントし、リードアドレスが21になるとラップラウンドして、リードアドレスを0に戻す。
【０１１２】
Read Address制御回路５０３は、INTERNAL_CLOCKと同期して読み出しを行う。すなわち、INTERNAL_CLOCKがリードクロックとなる。読み出されたデータDATA_10BIT３２４は、パターン検出回路３１５および8B10B変換回路３１６に出力される。
【０１１３】
Read Address制御回路５０３はwrite_lap_round信号をINTERNAL_CLOCKと同期化したwrite_lap_round_sync信号の変化（反転）を検出することでライトアドレスが0になったことを認識する。これにより、ライトアドレスとリードアドレスの差分であるライトリードアドレス差分を認識する。ライトリードアドレス差分はクロック周波数差によって変化する。
【０１１４】
ライトクロックとリードクロックを比較して、ライトクロックの方が速い（リードクロックの方が遅い）場合は、ライトリードアドレス差分は基準値より徐々に大きくなる。
ライトクロックの方が遅い（リードクロックの方が速い）場合は、ライトリードアドレス差分は基準値より徐々に小さくなる。
【０１１５】
Read Address制御回路５０３は、ライトリードアドレス差分が基準値より大きい場合、リードクロックの方が遅いことを示すread_slow信号をアサートする。
Read Address制御回路５０３は、ライトリードアドレス差分が基準値より小さい場合、リードクロックの方が速いことを示すread_fast信号をアサートする。
【０１１６】
ライトリードアドレス差分が基準値にある場合は、read_slow信号, read_fast信号のどちらもアサートしない。read_slow信号および read_fast信号は、パターン検出回路に３１５に出力される。
【０１１７】
Read Address制御回路５０３はクロック周波数差補償機能により、ライトリードアドレス差分を基準値に調節する。
基準値への制御はaddress_hold信号、address_plus2信号に従う。address_hold信号、address_plus2信号は、パターン検出回路３１５から入力される。
【０１１８】
Read Address制御回路５０３はaddress_hold信号が1の時はリードアドレスのインクリメントを行わないことにより、クロック周波数差補償パターンの"DM"を追加する。
Read Address制御回路５０３はaddress_plus2信号が1の時はリードアドレスを+2インクリメントすることにより、クロック周波数差補償パターンの"DM"を削除する。
【０１１９】
ライトリードアドレス差分情報は、write_lap_round_sync信号の変化、もしくは、address_hold, address_plus2信号のアサートにより更新される。
【０１２０】
図１４は、実施の形態に係るパターン検出回路の構成図である。
パターン検出回路６０１は、デスキューパターン比較回路６０２、クロック周波数差補償パターン先頭比較回路６０３、カウンタ６０４、レーンリードアドレス制御回路６０５、およびセレクタ６０６を備える。
【０１２１】
パターン検出回路６０１は、図１０のパターン検出回路３１５に対応する。
クロックINTERNAL_CLOCKは、カウンタ６０４およびレーンリードアドレス制御回路６０５に入力される。カウンタ６０４およびレーンリードアドレス制御回路６０５は、INTERNAL_CLOCKと同期して動作する。
【０１２２】
デスキューパターン比較回路は６０２トレーニングパターンに含まれる"DS"検出時にdeskew_pattern_detect信号をアサートする。デスキューパターン検出回路６０２は、deskew_pattern_detect信号をカウンタ６０４へ出力する。
【０１２３】
クロック周波数差補償パターン先頭比較回路６０３は、クロック周波数差補償パターンに含まれる"CH"検出時にclock_pattern_detect信号をアサートする
クロック周波数差補償パターン先頭比較回路６０３は、clock_pattern_detect信号をレーンリードアドレス制御回路６０５およびマルチレーン制御回路３０３に出力する。
【０１２４】
カウンタ６０４は、deskew_pattern_detect信号がアサートされている期間をカウントする。すなわち、カウンタは"DS"検出からのサイクル数をカウントする。カウントは1から7まで行い、このカウント値がレーン間のスキューとなる。例えば、カウント値が0の場合は"DS"未検出を示す。カウント値が1の場合は、"DS"検出から1サイクル後を示す。カウンタ６０４は、カウント値をdeskew_pattern_cycle信号としてマルチレーン制御回路３０３に出力する。
【０１２５】
レーンリードアドレス制御部６０５は、clock_pattern_detect信号が1の時の、read_fast信号, read_slow信号の値により、address_hold_lane信号, address_plus2_lane信号を制御する。
【０１２６】
read_fast信号およびread_slow信号は、Read Address制御回路５０３からレーンリードアドレス制御回路６０５およびマルチレーン制御回路３０３に入力されている。
レーンリードアドレス制御部６０５は、clock_pattern_detect信号が1の時、read_fast信号が1の場合は、address_hold_lane信号をアサートする。
【０１２７】
レーンリードアドレス制御部６０５は、clock_pattern_detect信号が1の時、read_slow信号が1の場合は、address_plus2_laneをアサートする。
レーンリードアドレス制御部６０５は、read_fast信号が0、且つread_slow信号が0の場合はaddress_hold_lane信号およびaddress_plus2_lane信号のどちらもアサートしない。
【０１２８】
セレクタ６０６は、マルチレーン制御回路３０３からのdeskew_flag信号が0のとき、address_hold_lane信号をaddress_hold、且つaddress_plus2_lane信号をaddress_plus2信号として出力する。
【０１２９】
セレクタ６０６は、マルチレーン制御回路３０３からのdeskew_flag信号が1のとき、address_hold_port信号をaddress_hold信号、且つaddress_plus2_port信号をaddress_plus2信号として出力する。
セレクタ６０６は、address_hold信号 およびaddress_plus2信号をエラスティックバッファへ出力する。
【０１３０】
図１５は、レーン単位のクロック周波数差補償タイムチャートである。
デスキュー前は、各レーンのレーンリードアドレス制御部６０５がクロック周波数差補償を行う。
図１５において、リードアドレス（read_address）が１６のときに、"CH"が検出され、clock_pattern_detectがアサートされている。clock_pattern_detect信号が1且つread_fast信号が1なので、address_hold_lane信号がアサートされる。
【０１３１】
リードアドレス（read_address）が１７のときに、address_hold_lane信号がアサートされている。このとき、deskew_flagが０なので、address_hold_lane信号は、address_holdとして出力される。したがって、address_holdは、address_hold_lane信号と同様にアサートされている。
address_hold信号がアサートされているので、リードアドレスは１７で２サイクル、ホールドされている。
【０１３２】
図１６は、実施の形態に係るマルチレーン制御回路の構成図である。
マルチレーン制御回路７０１は、配線ディレイ対策FF７０２−ｍ−ｎ（ｍ＝０〜７、ｎ＝１〜４）およびポートリードアドレス制御回路７０３を備える。
尚、以下の説明および図面において、レーン毎の信号名を区別するために、レーンmブロック（m=0〜７）の信号は、信号名の後ろに「_m」を付加して説明および記すことがある。例えば、レーン0ブロックのdeskew_pattern_cycleは、deskew_pattern_cycle_0と記すことがある。
【０１３３】
クロックINTERNAL_CLOCKは、配線ディレイ対策FF７０２およびポートリードアドレス制御回路７０３に入力される。配線ディレイ対策FF７０２およびポートリードアドレス制御回路７０３は、INTERNAL_CLOCKと同期して動作する。
【０１３４】
配線ディレイ対策FF７０２は、配線ディレイに対応するためのフリップフロップである。実施の形態において、マルチレーン制御回路７０１へ入力される信号は、２つの配線ディレイ対策FF７０２−ｍ−０、７０２−ｍ−１を通り、ポートリードアドレス制御回路７０３へ入力される。ポートリードアドレス制御回路７０３から出力される信号は、２つの配線ディレイ対策FF７０２−ｍ−３、７０２−ｍ−４を通り、パターン検出回路３１５へ出力される。
【０１３５】
ポートリードアドレス制御回路７０３は各レーン個別でなく、レーン全体、すなわちポートで合わせての動作が必要となるデスキューとデスキュー完了後のクロック周波数差補償を行う。
【０１３６】
ポートリードアドレス制御回路７０３には、配線ディレイ対策FF７０２−ｍ−１、７０２−ｍ−２を介して、レーンmブロックのパターン検出回路３１５からdeskew_pattern_cycle_m信号、clock_pattern_detect_m信号、read_fast_m信号、およびread_slow_m信号が入力される。
【０１３７】
ポートリードアドレス制御回路７０３は、配線ディレイ対策FF７０２−ｍ−３、７０２−ｍ−４を介して、レーンｍブロック３０２−ｍのパターン検出回路３１５にaddress_hold_port_m信号、address_plus2_port_m信号、およびdeskew_flag_m信号を出力する。
【０１３８】
ポートリードアドレス制御回路７０３は、各レーンブロックから通知されるdeskew_pattern_cycle信号のすべてが0以外の時に、すべてのレーンブロック３０２で"DS"を検出したと認識する。この時、ポートリードアドレス制御回路７０３は、各レーンブロック３０２のdeskew_flag信号をアサートする。deskew_flag信号が1のときは、デスキュー中またはデスキュー完了後を示す。
【０１３９】
ポートリードアドレス制御回路７０３は各レーンブロック３０２から通知されるclock_pattern_detect信号が1の時のread_fast信号およびread_slow信号に基づき、address_hold_port信号およびaddress_plus2_port信号を制御する。
【０１４０】
clock_pattern_detect信号が1のとき、いずれかのレーンブロック３０２のread_fast信号が1の場合、ポートリードアドレス制御回路７０３は、すべてのレーンブロック３０２のaddress_hold_port信号をアサートする。
【０１４１】
clock_pattern_detect信号が1のとき、すべてのレーンブロック３０２のread_slow信号が1の場合、ポートリードアドレス制御回路７０３は、すべてのレーンブロック３０２のaddress_plus2_port信号をアサートする。
【０１４２】
図１７は、実施の形態の受信回路３０１の配置配線図である。
実施の形態において、各レーンブロック３０２とマルチレーン制御回路３０３の間の配線距離が長い、特にレーン0ブロック３０２−０およびレーン7ブロック３０２−7とマルチレーン制御回路３０３との間の配線距離が長いとする。その場合、配線ディレイを満たすために、各レーンブロック３０２と接続する配線ディレイ対策FF７０２の段数は図１６に示すように2とする。
【０１４３】
2段の配線ディレイ対策FF７０２は例であり、これに限られるものではない。配置配線、動作周波数により、配線ディレイ対策FF７０２の段数とクロック周波数差補償パターン長を適宜設定することができる。
【０１４４】
図１７の受信回路の配置配線図では、8レーン構成を示しているが、システムバスは転送帯域が大きいことが望まれる。例えば、レーン数が16レーンの場合、遠くにあるレーンブロック３０２とマルチレーン制御回路３０３間の距離が長くなり、配線ディレイが大きくなる。この場合、動作周波数にも依存するが、図１６のマルチレーン制御回路の配線ディレイ対策FF７０２数を増やし、図９に示すクロック周波数差補償パターン長を長くする。
【０１４５】
逆に、転送帯域が小さいシリアルバスに実施の形態の受信回路を適応する場合、レーン数が少ないことや動作周波数が遅い条件等により、配線ディレイ対策FF７０２数を減らし、クロック周波数差補償パターン長を短くすることが可能である。
【０１４６】
また、既存のシリアルバスプロトコルに実施の形態の受信回路を適応する場合、クロック周波数差補償パターン長がすでにプロトコルで決定されている。その場合は、シリアルバスプロトコルのクロック周波数差補償パターン長を満たすように、配線ディレイ対策FF７０２の段数を決定する。
【０１４７】
各レーン個別でなく、ポートで合わせての動作が必要となるデスキューとデスキュー完了後のクロック周波数差補償について説明する。
【０１４８】
図１８は、デスキュー時のレーンブロックの各信号のタイムチャートを示す。
図１８において、トレーニングパターンの”DS”が検出されると、deskew_pattern_detect信号はアサートされる。
deskew_pattern_detect信号がアサートされると、deskew_pattern_cycle信号は、カウントが開始される。
【０１４９】
deskew_flag信号およびaddress_hold_port信号がアサートされると、セレクタ６０６はaddress_hold_port信号をaddress_hold信号として出力する。したがって、address_hold信号は、address_hold_port信号と同期する。
【０１５０】
address_hold信号がアサートされると、リードアドレス(read_address)はホールドされる。したがって、図１８において、read_addressは、アドレス１２で４サイクル、ホールドされている。
【０１５１】
図１９は、デスキュー時のマルチレーン制御回路の各信号のタイムチャートを示す。
図１９には、レーン０、１、および７ブロックのdeskew_pattern_cycle信号、deskew_flag信号、deskew_address_hold信号のタイムチャートを示し、レーン２〜６ブロックの信号は省略する。
【０１５２】
ポートリードアドレス制御回路７０３は、各レーンブロックから通知されるdeskew_pattern_cycle信号のすべてが0以外の時に、すべてのレーンブロックで"DS"を検出したと認識する。この時、ポートリードアドレス制御回路７０３は、各レーンブロックのdeskew_flag信号をアサートする。deskew_flag信号が1のときは、デスキュー中またはデスキュー完了後を示す。
【０１５３】
図１９においては、レーン１ブロックで”DS”が最後に検出されている。したがって、deskew_pattern_cycle_1信号が１となるのは、他のレーンブロックのdeskew_pattern_cycle信号と比べて最後になる。
【０１５４】
全てのレーンブロックのdeskew_flag信号をアサートするのと同時に、ポートリードアドレス制御回路７０３は、全てのレーンブロックのdeskew_pattern_cycle信号が0以外となったときの、各レーンブロックのdeskew_pattern_cycleの値に対応するサイクル間、各レーンブロックのaddress_hold_port信号をアサートする。
【０１５５】
図１９において、最後に”DS”が検出されるレーン１ブロックのdeskew_pattern_cycle_1信号が１となったとき、レーン０ブロックのdeskew_pattern_cycle_0信号の値は４である。すなわち、deskew_pattern_cycle_0信号が１となったときとdeskew_pattern_cycle_1信号が１となったときは、３サイクルの差がある。
【０１５６】
したがって、レーン０ブロックのdeskew_address_hold_0信号は３サイクル、アサートされる。
レーン７ブロックのdeskew_address_hold_7信号は同様に２サイクル、アサートされる。
【０１５７】
deskew_pattern_cycleに対応する値がレーン間のスキューとなる。
ポートリードアドレス制御回路７０３は、最後に"DS"を検出したレーンブロックのaddress_hold_portはアサートしない。
【０１５８】
図１９において、最後に"DS"を検出したレーン１ブロックのaddress_hold_port_1信号はアサートされない。
エラスティックバッファ５０１のRead Address制御回路５０３はaddress_hold_port信号がアサートされている間、リードアドレスをインクリメントしない。つまり、最後に"DS"を検出したレーンのエラスティックバッファのライトリードアドレス差分は基準値付近となる。それ以外のレーンのライトリードアドレスの差分は基準値よりも大きくなる。
【０１５９】
尚、図１８、図１９のタイムチャートは、図１６に示すようにマルチレーン制御回路に入力される前およびマルチレーン制御回路から出力された後の信号を示す。すなわち、入力信号（例えば、deskew_pattern_cycle）は配線ディレイ対策FFを通過する前の信号であり、出力信号（例えば、deskew_flag）は配線ディレイ対策FFを通過した後の信号である。
【０１６０】
したがって、例えば、上述のようにポートリードアドレス制御回路７０３は、deskew_pattern_cycle信号のすべてが0以外の時に各レーンブロックのdeskew_flag信号をアサートしているが、図１８および図１９のタイムチャートは、配線ディレイ対策FF通過前または通過後の信号を示しているので、deskew_flag信号が1となるタイミングはdeskew_flag信号がアサートしたタイミングよりも数サイクル遅れて示されている。後述の図２０、２１も同様である。
【０１６１】
次にポート単位でのクロック周波数差補償について説明する。
小規模サーバでは構成するLSI数が少ないため、システムバスを持つすべてのLSIに同じリファレンスクロックを供給することは容易である。そのため、小規模サーバのシステムバスではクロック周波数差補償機能は不要となる。
【０１６２】
しかし、大規模サーバのシステムバスでは、多くのLSIに同じリファレンスクロックを分配すると、配線距離が長いことや、分配のためのリピーター段数が多くなることで、ジッター等が大きくなり、同じリファレンスクロックを分配できない。そのため、接続装置間のリファレンスクロックが異なるので、クロック周波数差補償機能が必要となる。
【０１６３】
図２０は、デスキュー完了後のレーンブロックのクロック周波数差補償のタイムチャートを示す。
図２０において、クロック周波数差補償パターンの”CH”が検出されると、clock_pattern_detect信号はアサートされる。
【０１６４】
deskew_flag信号がアサートされているので、address_hold信号およびaddress_plus2信号はそれぞれaddress_hold_port信号およびaddress_plus2_port信号と同期する。
したがって、address_plus2_port信号がアサートされるとaddress_plus2信号もアサートされる。リードアドドレス（read_address）が１９のとき、address_plus2信号はアサートされているので、リードアドレスは、２インクリメントされ、２１となる。
【０１６５】
図２１は、デスキュー完了後のマルチレーン制御回路のクロック周波数差補償のタイムチャートを示す。
図２１において、レーン０、１、および７ブロックのdeskew_flag信号、read_fast信号、read_slow信号、clock_pattern_detect信号、address_hold信号、address_plus2信号のタイムチャートを示し、レーン２〜６ブロックの信号は省略している。
【０１６６】
ポートリードアドレス制御回路７０３は各レーンブロックから通知されるclock_pattern_detect信号が1の時のread_fast信号およびread_slow信号に基づき、address_hold_port信号およびaddress_plus2_port信号を制御する。
【０１６７】
clock_pattern_detect信号が1のとき、いずれかのレーンブロックのread_fast信号が1の場合、ポートリードアドレス制御回路７０３は、すべてのレーンブロックのaddress_hold_port信号をアサートする。
【０１６８】
clock_pattern_detect信号が1のとき、すべてのレーンブロックのread_slow信号が1の場合、ポートリードアドレス制御回路７０３は、すべてのレーンブロックのaddress_plus2_port信号をアサートする。
【０１６９】
図２１において、デスキュー完了後はレーン間のスキュー位置がそろっているので、各レーンブロックのclock_pattern_detect信号は同時にアサートされている。
clock_pattern_detect信号がアサートされたとき、全てのレーンブロックのread_slow信号がアサートされているので、各レーンブロックのaddress_plus2_port信号はアサートされる。
【０１７０】
各レーンブロックのdeskew_flagはアサートされているので、各レーンブロックのaddress_hold信号およびaddress_plus2信号は、それぞれaddress_hold_port信号およびaddress_plus2_port信号と同期する。
しがたって、上述のように各レーンブロックのaddress_plus2_port信号はアサートされると、各レーンブロックのaddress_plus2信号もアサートされる。
【０１７１】
尚、図２０、図２１のタイムチャートは、図１６に示すようにマルチレーン制御回路に入力される前およびマルチレーン制御回路から出力された後の信号を示す。すなわち、入力信号（例えば、deskew_pattern_detect）は配線ディレイ対策FFを通過する前の信号であり、出力信号（例えば、address_plus2_port）は配線ディレイ対策FFを通過した後の信号である。
【０１７２】
したがって、例えば、上述のようにclock_pattern_detect信号が1のとき、すべてのレーンブロックのread_slow信号が1の場合、ポートリードアドレス制御回路７０３は、すべてのレーンブロックのaddress_plus2_port信号をアサートするが、図２０および図２１のタイムチャートは、配線ディレイ対策FF通過前または通過後の信号を示しているので、address_plus2信号が1となるタイミングは遅れて示されている。
【０１７３】
実施の形態の受信回路によれば、従来の受信回路に存在したデスキューバッファが削減されているため、回路のレイテンシーを小さくすることができる。また、実施の形態の受信回路によれば、ポート単位でのクロック周波数差補償を行うことが出来る。
【０１７４】
サーバに搭載されるシステムバスI/Fを持つすべてのLSIの受信回路に上述の受信回路を適応すれば、レイテンシー削減効果は、パケット送信時に経由するLSI個数倍となる。特に、大規模サーバでは、パケット送信時に経由するLSI数が多いため、レイテンシー削減効果は大きくなる。
【０１７５】
尚、本発明は上述の実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において、様々な変更を加えることができる。
【符号の説明】
【０１７６】
１１    受信回路
２１    レーンブロック
３１    デスキュー処理部
４１    DESerializer
４２    Gear-Box
４３    １０ビット境界検出回路
４４    エラスティックバッファ
４５    クロック周波数差補償パターン検出回路
４６    8B10B変換回路
５１    デスキューバッファ
５２    デスキューパターン検出回路
１０１    サーバ
１０２    SB
１０３    IOB
１０４    XBB
１０５    BP
１０６    システムバス
１１１    CPU
１１２    DRAM
１１３    MC
１１４    ポート部
１２１    IOC
１２２    GbEコントローラ
１２３    SASコントローラ
１２４    HDD 
１２５    ポート部
１２６    ＩＯバス
１３１    XB
１３２    システムバス
１４１    システムバスI/F
１４２    ポート部
１４３    ルーティング部
２０１    接続元ポート
２０２    送信回路
２０３    受信回路
２０４    マルチレーン制御回路
２０５    オシレータ
２０７    送信データ分割部
２０８    レーン送信データ送信部
２０９    セレクタ
２１０    8B10B変換部
２１１    接続先ポート
２１２    送信回路
２１３    受信回路
２１４    マルチレーン制御回路
２１５    オシレータ
２１７    トレーニングパターン受信回路
２１８    レーン受信データ処理部
２１９    調節部
２２０    8B10B変換部
３０１    受信回路
３０２    レーンブロック
３０３    マルチレーン制御回路
３１１    DESerializer
３１２    Gear-Box
３１３    １０ビット境界検出回路
３１４    エラスティックバッファ
３１５    パターン検出回路
３１６    8B10B変換回路
５０１    エラスティックバッファ
５０２    Write Address制御回路
５０３    Read Address制御回路
５０４    FIFO
６０１    パターン検出回路
６０２    デスキューパターン比較回路
６０３    クロック周波数差補償パターン先頭比較回路
６０４    カウンタ
６０５    レーンリードアドレス制御回路
６０６    セレクタ
７０１    マルチレーン制御回路
７０２    配線ディレイ対策FF
７０３    ポートリードアドレス制御回路
【図１】
0005544896.tif 000002
【図２】
0005544896.tif 000003
【図３】
0005544896.tif 000004
【図４】
0005544896.tif 000005
【図５】
0005544896.tif 000006
【図６】
0005544896.tif 000007
【図７】
0005544896.tif 000008
【図８】
0005544896.tif 000009
【図９】
0005544896.tif 000010
【図１０】
0005544896.tif 000011
【図１１】
0005544896.tif 000012
【図１２】
0005544896.tif 000013
【図１３】
0005544896.tif 000014
【図１４】
0005544896.tif 000015
【図１５】
0005544896.tif 000016
【図１６】
0005544896.tif 000017
【図１７】
0005544896.tif 000018
【図１８】
0005544896.tif 000019
【図１９】
0005544896.tif 000020
【図２０】
0005544896.tif 000021
【図２１】
0005544896.tif 000022