(57)【要約】【課題】複数のレーンでリンクを構成しレーン毎にデータを伝送する上でリンク毎の出力を高スペック化に対応させる。【解決手段】実施形態のデータ伝送装置は、複数のレーンに含まれる少なくとも第１レーン及び第２レーンが伝送単位としてのリンクを構成し、リンクに規定された伝送レートでデータ伝送可能であり、第１クロック生成回路、第２クロック生成回路、第１回路を備える。第１クロック生成回路は第１レーンにおいてデータ伝送の基準となる第１クロックを生成する。第１クロック生成回路は第２レーンにおいて第２クロックを生成する。第１回路は第１クロックの第１遅延量に関する情報と第２クロックの第２遅延量に関する情報とを互いに通知し合うことによって一方のクロックの遅延量と他方のクロックの遅延量とが合うように遅延量のシフト量を決定する。【選択図】図１
2020154789.tif 000002
【特許請求の範囲】
【請求項１】
データ伝送路として複数のレーンを備え、前記複数のレーンに含まれる少なくとも第１レーン及び第２レーンが伝送単位としてのリンクを構成し、前記リンクに規定された伝送レートでデータ伝送可能なデータ伝送装置であって、
前記第１レーンにおいてデータ伝送の基準となる第１クロックを生成する第１クロック生成回路と、
前記第２レーンにおいてデータ伝送の基準となる第２クロックを生成する第２クロック生成回路と、
前記第１クロックの第１遅延量に関する情報と前記第２クロックの第２遅延量に関する情報とを互いに通知し合うことによって、前記第１クロックおよび前記第２クロックのうちのいずれか一方のクロックの遅延量と他方のクロックの遅延量とが合うように遅延量のシフト量を決定する第１回路と、
前記第１回路により決定されたシフト量を基に、前記第１遅延量または前記第２遅延量をシフトさせる第２回路と
を具備するデータ伝送装置。
【請求項２】
前記第１回路は、
前記第１遅延量と前記第２遅延量のうち、タイミングが遅い方の遅延量に合わせるように前記遅延量のシフト量を決定する請求項１記載のデータ伝送装置。
【請求項３】
前記第１回路は、
レーンに入力されるクロックを規定のタイミングでラッチし、ラッチした時点からの該レーンの遅延量を計測する第１計測回路と、
前記第１計測回路により計測された遅延量とこのレーンに隣接する他のレーンから得られる遅延量との差を計算して隣接レーン間のクロックスキューの差分値を求める第２計測回路と、
前記第２計測回路により求められる差分値とマスタレーンとして設定されているレーンの差分値とを加算してマスタレーンとの間の差分値を求める第３計測回路と、
このレーンの前記差分値と他のレーンから得られる差分値のうち大きい値を選択して他のレーンへ渡し、前記他のレーンから戻されてきた最大差分値を記憶する選択回路と、
前記最大差分値から前記第２計測回路により求められた前記差分値を引き算してこのレーンの遅延量のシフト量を求める第４計測回路と
を具備する請求項１または２いずれか１項に記載のデータ伝送装置。
【請求項４】
前記第２回路によりシフトされたクロックのタイミングで読み込んだパラレルデータをシリアルデータに変換する変換回路をさらに具備する請求項１乃至３いずれか１項に記載のデータ伝送装置。
【請求項５】
前記遅延量をシフトさせる対象のレーンの範囲を設定する設定回路を具備する請求項１乃至４いずれか１項に記載のデータ伝送装置。
【請求項６】
データ伝送路として複数のレーンを備え、前記複数のレーンに含まれる少なくとも第１レーン及び第２レーンが伝送単位としてのリンクを構成し、前記リンクに規定された伝送レートでデータ伝送可能なデータ伝送装置におけるデータ伝送方法であって、
前記第１レーンにおいてデータ伝送の基準となる第１クロックを生成し、
前記第２レーンにおいてデータ伝送の基準となる第２クロックを生成し、
前記第１レーンの第１遅延量に関する情報と前記第２レーンの第２遅延量に関する情報とを互いに通知し合うことによって前記第１クロックおよび前記第２クロックのうちのいずれか一方のクロックの遅延量と他方のクロックの遅延量とが合うように遅延量のシフト量を決定し、
決定したシフト量を基に、前記第１遅延量または前記第２遅延量をシフトさせる
データ伝送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、例えばPCI Express（登録商標）等のインターフェース規格に基づきデータ伝送を行うデータ伝送装置およびデータ伝送方法に関する。
【背景技術】
【０００２】
PCI Expressの規格に準拠したデータ伝送では、接続されるデバイスの構成や用途に応じて、リンクを構成するレーン数が可変する“Bifurcation”と呼ばれる機能のニーズが高まっている。
【０００３】
Bifurcationの機能を有するデータ伝送装置では、各レーンが異なるデータレート（伝送レート）で通信することを可能とするため、各レーンに、独立したクロック分周回路が設けられる。
【０００４】
レーン毎に独立したクロック分周回路を設ける場合、それぞれのクロック分周回路が出力する分周クロックについて、受信側の回路におけるレーン間のクロックのスキュー（タイミング差）、いわゆるレーン間スキューが発生する。
【０００５】
複数のレーンを有する受信側の回路において、各レーンで分周クロックを用いてデータをラッチする際に、レーン間スキューによってデータのラッチタイミングがレーン毎に異なる。このため、レーン間でラッチタイミングの差が大きくなると、データ伝送性能に影響が及ぶ恐れがある。
【０００６】
データレートが高速化するにつれて要求スペックが厳しくなることが予測されるため、レーン間のクロックスキューの影響をなくすことが望まれる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１３−１５２５４８号公報
【特許文献２】特開２００５−２４４４７９号公報
【特許文献３】特許第５５７７９３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、複数レーンで構成されるリンクにおいて好適にデータ伝送することができるデータ伝送装置およびデータ伝送方法を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態のデータ伝送装置は、データ伝送路として複数のレーンを備え、前記複数のレーンに含まれる少なくとも第１レーン及び第２レーンが伝送単位としてのリンクを構成し、前記リンクに規定された伝送レートでデータ伝送可能なデータ伝送装置であり、第１クロック生成回路、第２クロック生成回路、第１回路、第２回路を備える。第１クロック生成回路は第１レーンにおいてデータ伝送の基準となる第１クロックを生成する。第２クロック生成回路は第２レーンにおいてデータ伝送の基準となる第２クロックを生成する。第１回路は第１クロックの第１遅延量に関する情報と第２クロックの第２遅延量に関する情報とを互いに通知し合うことによって、第１クロックおよび第２クロックのうちのいずれか一方のクロックの遅延量と他方のクロックの遅延量とが合うように遅延量のシフト量を決定する。第２回路は第１回路により決定されたシフト量を基に、第１遅延量または第２遅延量をシフトさせる。
【図面の簡単な説明】
【００１０】
【図１】実施形態にかかるデータ伝送装置の概略的な構成を示す図である。
【図２】実施形態にかかるデータ伝送装置が備えるシフト計算回路の概略的な構成を示す図である。
【図３】実施形態においてシフト計算回路における対隣接Lane間スキュー計測回路の構成を示す図である。
【図４】実施形態においてPCLK_TX0に対してPCLK_TX1の方が遅い場合の動作を説明するための図である。
【図５】実施形態においてPCLK_TX0に対してPCLK_TX1の方が早い場合の動作を説明するための図である。
【図６】実施形態においてデータシフト回路の概略的な構成を示す図である。
【図７】実施形態においてLane間にクロックスキューが発生している状態を示す図である。
【図８】実施形態においてシフト計算回路の各構成要素の動作を説明するための図である。
【図９】実施形態においてLane間のクロックスキューが低減された状態を示す図である。
【図１０】実施形態にかかるデータ伝送装置の効果を説明するための図である。
【図１１】他の実施形態においてHSCLKのタイミングを得るための例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態を詳細に説明する。以下に示す図面は例示であり、実施形態は、これらの構成に限定されない。
図１は一つの実施形態のデータ伝送装置の概略的な構成を示す図である。
実施形態のデータ伝送装置は、例えばPCI Expressなどの規格に準拠して、データを送信する送信回路及びデータを受信する受信回路を備えるインターフェース装置である。本実施形態では、主に送信回路の構成及び動作について説明する。
【００１２】
図１に示すように、実施形態のデータ伝送装置の送信回路は、第１レーンとしてのLane_TX0、第２レーンとしてのLane_TX1、第３レーンとしてのLane_TX2、および第４レーンとしてのLane_TX3を含む４つのLaneを有する。Laneは、複数の信号線を含んで構成されるデータ伝送路である。
【００１３】
実施形態のデータ伝送装置は、Bifurcation機能をサポートし、複数のLaneのうち所定数のLaneで１つのLinkを構成し、Link毎に各Laneを通じてパラレルデータをシリアルデータに変換して出力することが可能である。１つのLinkを構成するLane数は可変であり、例えば、４つのLaneを有するデータ伝送装置について、４Lane×1Linkの構成を、2Lane×2Linkの構成として利用することが可能である。
【００１４】
実施形態のデータ伝送装置は、データ伝送路として複数の（具体的には４つの）Lane_TX0〜Lane_TX3を備えている。これら複数のLane_TX0〜Lane_TX3のうち一以上のLaneが伝送単位としてのLinkを構成し、Link毎に規定された伝送レートでデータ伝送可能である。例えば複数のLane_TX0〜Lane_TX3のうち２つのLane（Lane_TX0及びLane_TX1）が伝送単位としてのリンクを構成し、リンクに規定された伝送レートでデータ伝送可能である。
【００１５】
なお、本実施形態では、４つのLaneで１つのLinkを構成する例を説明するが、Lane数やLink数はこの例に限定されるものではなく、例えば8Laneを備えたデータ伝送装置において、4Lane×2Link、8Lane×1Link、2Lane×4Link、又は1Lane×4Linkの構成にするなど、さまざまな組み合わせに変更が可能である。
【００１６】
データ伝送装置は、第１回路群１と第２回路群２とで構成される。第１回路群１は、コンピュータにおいて各種パラメータを基に自動的に回路設計が行われる回路部分である。第２回路群２は、実物の回路要素を組み込んで実現される回路部分である。第１回路群１は、Lane毎に分周回路１１ａ〜１１ｄを有する。
【００１７】
第１クロック生成回路としての分周回路１１ａは、デバイダおよびセレクタなどを含むClock分周回路１２ａとラッチ回路１３ａ、１４ａを有する。Clock分周回路１２ａは、源クロックであるPCLK_sourceを分周したPCLK_TX0を出力する。ラッチ回路１３ａは、同期信号SYNCをPCLK_TX0でラッチした信号SYNC_TX0を出力する。ラッチ回路１４ａは、データ０〜データ３１までの３２ビット分のデータDATA [31:0]_TX0をそれぞれPCLK_TX0でラッチした３２ビットのパラレルデータDATA_TX0を出力する。
なお、この例では、パラレルデータのビット数を32としたが、本発明はビット数に限定されるものではなく、例えば16ビットや64ビットなど、さまざまなビット数で利用可能である。
【００１８】
すなわち、分周回路１１ａは、Lane_TX0に設けられており、PCLK_sourceを分周して第１クロックであるPCLK_TX0を生成し、生成したPCLK_TX0を、SYNC_TX0、DATA_TX0と共に、Lane_TX0に対応し、第２回路群２に設けられるパラレルシリアル変換回路２２ａに出力する。
【００１９】
第１クロック生成回路としての分周回路１１ｂは、デバイダおよびセレクタなどのClock分周回路１２ｂとラッチ回路１３ｂ、１４ｂを有する。Clock分周回路１２ｂは、PCLK_sourceを分周したPCLK_TX1を出力する。ラッチ回路１３ｂは同期信号SYNCをPCLK_TX1でラッチした信号SYNC_TX1を出力する。ラッチ回路１４ｂは、DATA [31:0]_TX1をそれぞれPCLK_TX1でラッチした３２ビットのパラレルデータDATA_TX1を出力する。
なお、分周回路１１ａと同様に、パラレルデータはさまざまなビット数で利用可能である。
【００２０】
すなわち、分周回路１１ｂは、Lane_TX1に設けられており、分岐入力されたPCLK_sourceを分周して第２クロックであるPCLK_TX1を生成し、生成したPCLK_TX1を、SYNC_TX1、DATA_TX1と共に、Lane_TX1に対応し、第２回路群２に設けられるパラレルシリアル変換回路２２ｂに出力する。なお、他の分周回路１１ｃ、１１ｄも同様の構成であり、個々の説明は省略する。
【００２１】
第２回路群２は、各Laneへ分岐して供給される源クロックとしてのPCLK_sourceを生成する基準クロック生成回路（COM）２１、Lane毎に設けられたパラレルシリアル変換回路２２ａ〜２２ｄを有する。以下に詳細に説明するように、各パラレルシリアル変換回路２２ａ〜２２ｄが協働することにより、４つのLane_TX0〜Lane_TX3間に生じるクロックスキューの差を低減する。
【００２２】
以下では、レーン間クロックスキューを以下のように定義する。レーン間クロックスキューとは、ある基準時刻（例えば、各Lane共通のCOM２１からPCLK sourceが出力されたタイミング）からLane毎に分岐して受信側の第２回路群２で受信されるまでの各PCLK_TXnのdelay量（図７を参照）の差分（差異）とする。これ以降、レーン間クロックスキューを単にスキューと称することもある。
【００２３】
各パラレルシリアル変換回路２２ａ〜２２ｄは、Lane_TX0〜Lane_TX3それぞれに設けられた回路の中の一つの回路であり、PCLK_TXnのシフト量を決定する第１回路としてのシフト計算回路（Shift Calc）２３ａ〜２３ｄ、PCLK_TXnとDATA_TXnをシフトする第２回路としてのデータシフト回路（Data Shift）２４ａ〜２４ｄ、パラレルシリアル変換回路としてのパラレルインシリアルアウト回路（PISO）２５ａ〜２５ｄを有する。なお、ＰＩＳＯとは、Parallel-In,Serial-Outの略称である。TXnのnは0から始まる整数であり、この例は4Lane構成のため0〜3までの数字である。
【００２４】
すなわち、Shift Calc２３ａ〜２３ｄ、Data Shift２４ａ〜２４ｄ、PISO２５ａ〜２５ｄは、Lane_TX0〜Lane_TX3毎にそれぞれ１つずつ設けられている。例えばLane_TX0は、第１シフト計算回路であるShift Calc２３ａ、第１データシフト回路であるData Shift２４ａ、第１変換回路であるPISO２５ａを有する。他のLane_TX1〜Lane_TX3も同様である。
【００２５】
COM２１は、ＰＬＬ回路及び分周回路を有しており、源クロックとなるPCLK_sourceを生成し、生成したPCLK_sourceを第１回路群１の各分周回路１１ａ〜１１ｄに分岐して供給する。
【００２６】
（パラレルシリアル変換回路２２ａ（Lane_TX0：第１レーン）について）
この例の回路構成では、Lane_TX0（第１レーン）は、図１において左側にLaneが接続されていないLaneであるため、その左側にLaneが接続されているLane_TX1（第２レーン）乃至Lane_TX3（第４レーン）の動作が主たる動作となる。このため、詳細は下記Lane_TX1（第２レーン）のパラレルシリアル変換回路２２ｂの説明で詳述する。Lane_TX0（第１レーン）が、その左側にLaneが接続されていないことは、例えば、Shift Calc２３ａに対して左側のLaneから入力される信号を所定レベル（例えばグランドレベル）とすることで実現され得る。なお、図１において、右側のLaneから左側のLaneに情報が伝達される場合は、Lane_TX0（第１レーン）内の各構成は、他のLaneの各構成と同様の動作を行う。
【００２７】
Lane_TX0のShift Calc２３ａは、分周回路１１ａから入力されるPCLK_TX0のdelay量を算出し、図１において右側に隣接するLane_TX1（第２レーン）へ通知する。
【００２８】
なお、Lane_TX0のShift Calc２３ａと、隣接するLane_TX1のShift Calc２３ｂとはディジーチェーン接続されており、Lane間で情報の受け渡し（delay量や隣接Lane間スキュー値の伝達、最大スキュー値のフィードバック、など）が行われる。本実施形態では、他のLane_TX2のShift Calc２３ｃ及びLane_TX3のShift Calc２３ｄも同様にディジーチェーン接続されており、４Lane間で情報の受け渡しが行われる。ディジーチェーン接続されるLane間での情報の受け渡しの向きは、上流と下流とが定義される。隣接Lane間のスキュー値の伝達は上流から下流へ行われる。その後、最大スキュー値のフィードバックが、下流から上流へ戻される。
【００２９】
本実施形態のデータ伝送装置では、後述するようにセレクタ３１（図２参照）によりLane_TX0〜Lane_TX3のうちいずれか一つのLaneがマスタLaneとして設定される。本実施形態では、Lane_TX0がマスタLane、Lane_TX1,Lane_TX2,Lane_TX3がスレーブLane、特にLane_TX3がスレーブエンドLaneに設定される例として説明する。このため、各Laneの回路の構成は同じであるが、その動作は異なる。
【００３０】
例えばマスタLaneとして設定されたLane_TX0のShift Calc２３ａは、各Lane_TX0〜Lane_TX3により算出される隣接するLane間のPCLKのクロックスキューに基づいて、PCLK_TX0〜TX3のうち、位相が最も遅れるLane（例えばLane_TX2など）のPCLKの遅れ量（最遅ドリフト位置）を取得する回路として機能する。この機能を実現する詳細な回路構成については、図２を用いて説明する。
【００３１】
Data Shift２４ａは、第１データシフト回路の一例である。Data Shift２４ａは、Shift Calc２３ａにより取得された、最遅ドリフト位置に合わせるようにPCLK_TX0のパルスの出力タイミングを遅延させる（補正する）とともに、補正したPCLK_TX0のパルスの出力タイミングで、分周回路１１ａから入力されるパラレルデータDATA_TX0をロードするようにパラレルデータDATA_TX0それぞれのシフト量を決定する。パルスをクロックビットともいう。
【００３２】
PISO２５ａは、パラレルデータ読込回路（PISO_LOAD）２６ａ、データ変換回路（PISO_n_to_4）２７ａ、分周回路２８ａ、P to S変換回路（PISO_4_to_1）２９ａ、出力回路３０ａを含む。PISO_LOAD２６ａは、分周回路１１ａから入力されるパラレルデータを読み込む。PISO_n_to_4 ２７ａは、PISO_LOAD２６ａにより読み込まれたｎビット（ここでは３２ビット）のパラレルデータを保持し４ビットのパラレルデータを出力する。
【００３３】
分周回路２８ａは、COM２１のＰＬＬ回路から入力されるHSCLKを１／４分周して１／４分周clock（QSCLK）を生成する。PISO_4_to_1 ２９ａは、PISO_n_to_4 ２７ａから入力される４ビットのパラレルデータを、QSCLKを用いて１ビットのシリアルデータに変換する。出力回路３０ａは、PISO_4_to_1 ２９ａにより変換されたシリアルデータに基づく差動データTX0_P/Nを出力する。
【００３４】
PISO_LOAD２６ａは、PCLK_TX0の立ち上がりエッジ（Riseエッジ）に基づいてPISO_Load信号を生成しPISO_n_to_4 ２７ａに出力する。PISO_n_to_4 ２７ａは、シフトレジスタを有する。なお、この例では、３２ビットのパラレルデータをPISO_n_to_4 ２７ａで一旦４ビットのパラレルデータにした後、PISO_4_to_1 ２９ａで１ビットのシリアルデータに変換したが、３２ビットのパラレルデータを１ビットのシリアルデータに一度に変換してもよい。
【００３５】
すなわち、PISO２５ａは、Data Shift２４ａによりシフトされたタイミングで、分周回路１１ａから入力される３２ビットのパラレルデータDATA_TX0をロードし、ロードしたパラレルデータDATA_TX0を１ビットのシリアルデータに変換し、変換したシリアルデータに基づく差動データTX0_P/N出力する。
【００３６】
（パラレルシリアル変換回路２２ｂ（Lane_TX1：第２レーン）について）
例えばLane_TX0とLane_TX1との2laneについて、Shift Calc２３ｂは、PCLK_TX0のdelay量を含むクロックスキューに関する情報とPCLK_TX1のdelay量を含むクロックスキューに関する情報とを互いに通知し合うことによって、PCLK_TX0およびPCLK_TX1のうちのいずれか一方のクロック（PCLK）のdelay量と他方のクロックのdelay量とが合うようにクロックのシフト量を決定する。クロックスキューに関する情報とは、図８に示す計測手順で得られるdelay量の値や、差分値、最大差分値などの数値を含む。
【００３７】
具体的には、Shift Calc２３ｂは、Lane_TX0から通知されたPCLK_TX0のdelay量と自Lane_TX1のPCLK_TX1のdelay量を基に、Lane_TX0,Lane_TX1のうち位相が遅れている方のPCLKのパルスのRiseエッジ（クロックビットの立ち上がり位置またはドリフト位置）を検出し、検出したRiseエッジに合わせたPCLKのシフト量を決定する。具体的にはPCLKのパルスのRiseエッジのタイミングが遅れている一方のPCLKの位相に合うように、他方のPCLKをシフト（ドリフト）するシフト量（ドリフト量）を決定する。
【００３８】
換言すると、Lane_TX1において、Shift Calc２３ｂは、分周回路１１ｂから入力されるPCLK_TX1のdelay量を算出し、算出したPCLK_TX1のdelay量と、隣接するLane_TX0（第１レーン）から得られるPCLK_TX0のdelay量との差を算出する。Shift Calc２３ｂは、算出したdelay量の差に基づいて、Lane_TX0,Lane_TX1のうち位相が遅れている方のPCLK（パルス）のドリフト位置を検出し、検出したドリフト位置に合わせたPCLKのシフト量を決定する。
【００３９】
Data Shift２４ｂは、Lane_TX0のData Shift２４ａと同様に構成される第２データシフト回路の一例である。Data Shift２４ｂは、Shift Calc２３ｂにより取得された最遅ドリフト位置に合わせるようにPCLK_TX1のパルスの出力タイミングを遅延させる（補正する）とともに、補正したPCLK_TX1のパルスの出力タイミングで、分周回路１１ｂから入力されるパラレルデータDATA_TX1をロードするようにパラレルデータDATA_TX1それぞれのシフト量を決定する。
【００４０】
PISO２５ｂは、Lane_TX0のPISO２５ａと同様の構成（PISO_LOAD２６ｂ、PISO_n_to_4 ２７ｂ、分周回路２８ｂ、PISO_4_to_1 ２９ｂ）を有する第２変換回路である。PISO２５ｂは、Data Shift２４ｂによりシフトされたタイミングで、分周回路１１ｂから入力される３２ビットのパラレルデータDATA_TX1をロードし、ロードしたパラレルデータDATA_TX1を１ビットのシリアルデータに変換し、変換したシリアルデータに基づく差動データTX1_P/Nを出力する。なお、Lane_TX2（第３レーン）、Lane_TX3（第４レーン）についても同様の回路構成であるため、個々の説明は省略する。
【００４１】
ここで、図２を参照してShift Calc２３ａ〜２３ｄの詳細な回路構成を説明する。なお、この例では、Shift Calc２３ａがマスタLane（特定のLane）であり、Shift Calc２３ｂ〜２３ｄがスレーブLaneであるため、代表的に、スレーブLaneの１つであるShift Calc２３ｂについて説明する。
【００４２】
図２に示すように、Shift Calc２３ｂは、PCLK_TX1（第２Clock）をラッチし、PCLK_TX1のdelay量を計測する第１計測回路としてのPCLKラッチ回路（PCLK Latch）３２ｂ、PCLK_TX1のdelay量と隣接する一方（左隣）のLane_TX0のdelay量との差を計測する第２計測回路としての対隣接Lane間スキュー計測回路（Calc Skew_A）３３ｂ、PCLK_TX1のdelay量とマスタLaneのdelay量との差を計測する第３計測回路としての対マスタLane間スキュー計測回路（Calc Skew_M）３４ｂ、同じLink内でdelay量が最大の値を計測する選択回路としての最大delay量計測回路（Calc Max）３５ｂ、delay量が最大の値に基づいて個々のLaneのデータシフト量を計算する第４計測回路としてのシフト量計算回路（Calc Shift）３６ｂ、セレクタ３１ｂ、３７ｂなどを有する。
【００４３】
PCLK Latch３２ｂは、SYNC_TX1がHIの期間に、PCLK_TX1をラッチする。PCLK Latch３２ｂは、PCLK_TX1を所定のタイミングでラッチし、PCLK_TX1をラッチした時点からの該Lane_TX1のPCLK_TX1のdelay量を計測する。PCLK Latch３２ｂは、計測した結果（delay量）を出力する。
【００４４】
Calc Skew_A３３ｂは、PCLK Latch３２ｂにより計測されたLane_TX1のPCLK_TX1のdelay量とLane_TX1の左側に隣接するLane_TX0から得られるPCLK_TX0のdelay量との差に対応する値（隣接Lane間差分値）を求める。
【００４５】
具体的には、Calc Skew_A３３ｂは、PCLK_TX1及びSYNC_TX1を受け、PCLK_TX1よりも十分に高速なクロック信号であるHSCLKを用いて、隣接するLane_TX0のPCLK_TX0のdelay量と、自Lane（Lane_TX1）のPCLK_TX1のdelay量との差を計算して、隣接Lane間差分値として算出する。例えばPCLK_TX1が500MHzとすると、HSCLKはそれよりも十分高速な16GHzなどである。
【００４６】
Calc Skew_M３４ｂは、算出された隣接Lane間差分値と、マスタLaneとして設定されているLane_TX0から得られる隣接Lane間差分値とに基づいて、マスタLaneとの間のdelay量の差に対応する値（マスタLane間差分値）を求める。
【００４７】
具体的には、Calc Skew_M３４ｂは、Lane_TX0〜Lane_TX3のうち、マスタLaneとして設定されているLane（この例ではLane_TX0）の隣接Lane間差分値に自Lane（Lane_TX1）の隣接Lane間差分値を加算したマスタLane 間差分値を算出する。
【００４８】
Calc Max３５ｂは、算出されたこのLane_TX1のマスタLane間差分値と隣接するLane_TX0から得られるマスタLane 間差分値のうち大きい値を選択してディジーチェーン接続された他の下流のLane_TX2,Lane_TX3へ渡し、Lane_TX2, Lane_TX3から戻されてきた最大値を記憶する。つまりCalc Max３５ｂは、各Lane_TX0〜Lane_TX3で計測されたマスタLane間差分値のうち、最大差分値のLane（つまり、マスタLaneに対して最もタイミングが遅延するLane）の差分値を得る。
【００４９】
Calc Shift３６ｂは、記憶した最大差分値からLane_TX1（自Lane）のマスタLane間差分値を引き算してLane_TX1（自Lane）のPCLK_TX1のdelay量のシフト量（最もタイミングが遅延するLaneに合わせるためにPCLK_TX1を何パルス分遅らせるかを示すシフト値）を求める。つまりこのCalc Shift３６ｂは、最大差分値に対して自LaneのPCLK_TX1の出力タイミングをシフトさせるシフト量（シフト値）を計算する。
【００５０】
セレクタ３１ｂ、３７ｂは、delay量をシフトさせる対象のLaneの範囲を設定する設定回路として機能する。  
セレクタ３１ｂは、Lane_TX1（自Lane）がマスタLaneかスレーブLaneかを設定するための選択回路であり、制御端子、左隣に隣接するLane_TX0のShift Calc２３ａに接続された複数の入力端子、および複数の出力端子を有する。セレクタ３１ｂは、制御端子に入力された入力値（MASTER_TX1=“１”か“０”）に応じて自身のLaneのレーン設定をマスタLaneかスレーブLaneのいずれかに切り替える。
【００５１】
例えばセレクタ３１ｂは、制御端子にマスタ設定の入力値（MASTER_TX1=“１”）が入力されると、Lane_TX1（自Lane）をマスタLaneとして機能させるため、内部のスイッチを「１」の側に切り替え、複数の出力端子を介して、所定値をLane_TX1（自Lane）のCalc Skew_A３３ｂ、Calc Skew_M３４ｂおよびCalc Max３５ｂそれぞれに提供する。
【００５２】
また、セレクタ３１ｂは、制御端子にスレーブ設定の入力値（MASTER_TX1=“０”）が入力されると、Lane_TX1（自Lane）をスレーブLaneとして機能させるため、内部のスイッチを「０」の側に切り替え、第２入力端子に接続された左隣に隣接するLane_TX0のShift Calc２３ａからのクロックスキューに関する情報（delay量、差分値、最大差分値など）を、複数の出力端子を介して、Calc Skew_A３３ｂ、Calc Skew_M３４ｂおよびCalc Max３５ｂに提供する。
【００５３】
セレクタ３７ｂは、Lane_TX1（自Lane）が終端のスレーブLaneであるか否かを設定するための選択回路であり、制御端子、第１入力端子、第２入力端子、及び出力端子を有する。
セレクタ３７ｂは、制御端子に入力された入力値（SLAVE_END_TX1=“１”か“０”）に応じて自身のLaneのLane設定をスレーブLaneか、スレーブエンドLaneのいずれかに切り替える。
【００５４】
例えばセレクタ３７ｂは、制御端子にスレーブエンドLane設定の入力値（SLAVE_END_TX1=“１”）が入力されると、Lane_TX1（自Lane）をスレーブエンドLaneとして機能させるため、入力値「１」に対応する第１入力端子に切り替える。これにより、セレクタ３７ｂは、第１入力端子に接続されたCalc Max３５ｂからのマスタLane間差分値の最大値を、Calc Shift３６ｂに提供すると共に、左隣に隣接するLane_TX0に出力端子を介して提供する。
【００５５】
また、セレクタ３７ｂは、制御端子にスレーブエンドLane設定でない入力値（SLAVE_END_TX1= “０”）が入力されると、入力値「０」に対応する第２入力端子に切り替える。これにより、スレーブエンドに達したマスタLane 間差分値の最大値が下流のLaneから戻されて下流のLaneに通知されるようになる。
【００５６】
なお、図２は、Lane_TX0がマスタLane、Lane_TX3がスレーブエンドLaneである例である。従って、Lane_TX0では、セレクタ３１ａは“１”、セレクタ３７ｂは“０”、にそれぞれ設定され、Lane_TX1とLane_TX2では、セレクタ３１ｂ，３１ｃは“０”、セレクタ３７ｂは“０”、にそれぞれ設定され、Lane_TX3では、セレクタ３１ｄは“０”、セレクタ３７ｂは“１”、にそれぞれ設定されている。
【００５７】
セレクタ３１とセレクタ３７によって、複数のLaneのうちマスタLaneに設定されたLane_TX0と、スレーブエンドLaneに設定されたLane_TX3との間でPCLK_TX1〜PCLK_TX3をシフトさせる範囲を設定できる。この例では、４本の全てのLaneがクロックのシフト対象とされる。
【００５８】
続いて、図３を参照して、Calc Skew_A３３ａ〜３３ｄの回路構成を概略的に説明する。図３は、一例としてLane_TX0,Lane_TX1に備えられるCalc Skew_A３３ａ,３３ｂの構成を示す図である。Calc Skew_A３３ｂは、隣接Lane_TX0のPCLKと自Lane_TX1のPCLKとのスキュー量（何パルス分ドリフトしているか）とその時間方向（マイナス（早い）、プラス（遅い））を判定する。
【００５９】
以下、Lane_TX0（第１レーン）とLane_TX1（第２レーン）のCalc Skew_A３３ａ,３３ｂの動作について説明する。なお、動作を説明するにあたり、２つのレーンのうち１つのレーン、主にLane_TX1でのクロックの遅れ／進みの判定動作を説明するため、ここではLane_TX0の側のカウンタ回路、判定回路などは明示しない。
【００６０】
例えば図３に示すように、Lane_TX0のCalc Skew_A３３ａは、複数のラッチ回路４１、４２を有する。ラッチ回路４１は、HSCLKに基づいてSYNC_TX0によりリセットする。ラッチ回路４２は、ラッチ回路４１がSYNC_TX0によりリセットしたことに応じて、HSCLKに基づいてPCLK_TX0をラッチする。
【００６１】
Lane_TX1のCalc Skew_A３３ｂは、複数のラッチ回路４３、４４と、複数のカウンタ回路４５、４６と、判定回路４７とを有する。ラッチ回路４３は、HSCLKに基づいてSYNC_TX1によりリセットする。ラッチ回路４４は、ラッチ回路４３がSYNC_TX1によりリセットしたことに応じて、HSCLKに基づいてPCLK_TX1をラッチする。
【００６２】
カウンタ回路４５（Count0）は、start端子、stop端子を有する。start端子はLane_TX0のラッチ回路４２の出力に接続されている。stop端子はLane_TX1のラッチ回路４４の出力に接続されている。
【００６３】
カウンタ回路４５（Count0）は、Lane_TX0（隣接する他のLane）からstart端子にPCLK_TX0が入力されるタイミングでカウントを開始し、Lane_TX1（自Lane）のPCLK_TX1がstop端子に入力されるタイミングでカウントを終了して、その間のクロックHSCLKのサイクル数（パルス数）をカウントする。
【００６４】
カウンタ回路４５（Count0）は、Lane_TX0（隣接する他のLane）に対してLane_TX1（自Lane）のPCLK_TX1が遅いことを計数するカウンタである。カウンタ回路４５（Count0）は、カウンタしたパルス数（カウント値）を判定回路４７に出力する。判定回路４７は、このカウンタの値を選択する場合はカウント値に符号「＋」を付与して出力する。
【００６５】
カウンタ回路４６（Count1）は、start端子、stop端子を有する。start端子はLane_TX1のラッチ回路４４の出力に接続されている。stop端子はLane_TX0のラッチ回路４２の出力に接続されている。カウンタ回路４６（Count1）は、Lane_TX1（自Lane）のPCLK_TX1がstart端子に入力されるタイミングでカウントを開始し、Lane_TX0（隣接する他のLane）からstop端子にPCLK_TX0が入力されるタイミングでカウントを終了して、その間のクロックHSCLKのサイクル数（パルス数）をカウントする。
【００６６】
カウンタ回路４６（Count1）は、Lane_TX0（隣接する他のLane）に対してLane_TX1（自Lane）のPCLK_TX1が早いことを計数するカウンタである。カウンタ回路４６（Count1）は、カウンタしたパルス数（カウント値）を判定回路４７に出力する。判定回路４７は、このカウンタの値を選択する場合はカウント値に符号「−」を付与して出力する。
【００６７】
判定回路４７は、Lane_TX1（自Lane）のPCLK_TX1がHIになったことに応じて、リセット解除後のカウンタ回路４５、４６からのカウント値の大小関係から、いずれかからのカウント値を選択してPCLK_skewとして出力する。
【００６８】
Lane_TX1において、Calc Skew_A３３ｂは、PCLKをHSCLK（PCLKに対して十分に高速なClock）でラッチし、ラッチしたPCLKのRiseエッジ位置から隣接する他のLane_TX0に対するPCLK Skewを算出する。
【００６９】
ここで、図４、図５を参照して具体的な動作例を説明する。例えばLane_TX0のPCLK_TX0に対してLane_TX1のPCLK_TX1の方が遅い場合、図４に示すように、Lane_TX0では、SYNC_TX0がHIになった後の始めのPCLKのRiseエッジ直後の位置６１でHSCLKによってPCLK_TX0がラッチされ、ラッチされた信号がカウンタ回路４５（Count0）のstart端子に入力される。これにより、カウンタ回路４５（Count0）によるパルス数（HSCLKのRiseエッジ数のカウント）が開始される。
【００７０】
また、Lane_TX1でも、SYNC_TX1がHIになった後の始めのPCLKのRiseエッジ直後の位置６２でHSCLKによってPCLK_TX1がラッチされ、ラッチされた信号がカウンタ回路４５（Count0）のstop端子とカウンタ回路４６（Count1）のstart端子に入力される。
【００７１】
これにより、カウンタ回路４５（Count0）によるパルス数（HSCLKのRiseエッジ数のカウント）が終了するとともに、カウンタ回路４６（Count1）によるパルス数（HSCLKのRiseエッジ数のカウント）が開始される。
【００７２】
このとき、カウンタ回路４５（Count0）のカウント開始からカウンタ回路４６（Count1）のカウント開始までで遅延６３が発生する。カウンタ回路４５（Count0）では、カウント結果として、遅延６３に対応するカウント値「３」が得られる。
【００７３】
Lane_TX0では、SYNC_TX0がHIになった後の２回目のPCLKのRiseエッジ直後の位置６４でHSCLKによってPCLK_TX0がラッチされ、ラッチされた信号がカウンタ回路４６（Count1）のstop端子に入力される。
【００７４】
これにより、カウンタ回路４６（Count1）によるパルス数（HSCLKのRiseエッジ数のカウント）が終了する。この結果、カウンタ回路４６（Count1）では、カウント結果としてカウント値「７」が得られる。
【００７５】
判定回路４７は、カウンタ回路４５（Count0）とカウンタ回路４６（Count1）のカウント値を常に比較し、両カウンタ回路４５，４６のうち、リセット解除後のカウント値が大きい方のカウンタ回路のカウント値を最終カウント値として選定する。
【００７６】
例えば、判定回路４７が動作を開始後、カウンタ回路４５（Count0）が先にカウントを開始して終了した場合、カウンタ回路４５（Count0）のカウント値は「３」、カウンタ回路４６（Count1）のカウントは「０」、のため、Count0 > Count1である。この場合、PCLK_TX1の方が遅いという結果となるため、判定回路４７は、このカウンタ回路４５（Count0）を選択した符号「＋」とカウンタ回路４５（Count0）の値である「３」とをPCLK_skewとして出力する。
【００７７】
一方、Lane_TX0のPCLK_TX0に対してLane_TX1のPCLK_TX1の方が早い場合、図５に示すように、Lane_TX1では、SYNC_TX1がHIになった後の始めのPCLKのRiseエッジ直後の位置６６でHSCLKによってPCLK_TX1がラッチされ、ラッチされた信号がカウンタ回路４６（Count1）のstart端子に入力される。これにより、カウンタ回路４６（Count1）によるパルス数（HSCLKのRiseエッジ数のカウント）が開始される。
【００７８】
また、Lane_TX0でも、SYNC_TX0がHIになった後の始めのPCLKのRiseエッジ直後の位置６７でHSCLKによってPCLK_TX0がラッチされ、ラッチされた信号がカウンタ回路４６（Count1）のstop端子とカウンタ回路４５（Count0）のstart端子に入力される。これにより、カウンタ回路４６（Count1）によるパルス数（HSCLKのRiseエッジ数のカウント）が終了するとともに、カウンタ回路４５（Count0）によるパルス数（HSCLKのRiseエッジ数のカウント）が開始される。
【００７９】
このとき、カウンタ回路４６（Count1）のカウント開始からカウンタ回路４５（Count0）のカウント開始までで遅延６８が発生する。カウンタ回路４６（Count1）では、カウント結果として、遅延６８に対応するカウント値「３」が得られる。
【００８０】
Lane_TX1では、SYNC_TX1がHIになった後の２回目のPCLKのRiseエッジ直後の位置６９でHSCLKによってPCLK_TX0がラッチされ、ラッチされた信号がカウンタ回路４６（Count1）のstop端子に入力される。これにより、カウンタ回路４６（Count1）によるパルス数（HSCLKのRiseエッジ数のカウント）が終了する。この結果、カウンタ回路４６（Count1）では、カウント結果としてカウント値「７」が得られる。
【００８１】
判定回路４７は、カウンタ回路４５（Count0）とカウンタ回路４６（Count1）のカウント値を常に比較し、両カウンタ回路４５，４６のカウント値のうち、リセット解除後のカウント値が大きい方のカウンタ回路のカウント値を最終カウント値として選定する。なお、リセット解除のタイミングは、両カウンタ回路４５，４６のうち遅い側の回路がカウントを始めるタイミングである。
【００８２】
例えば、判定回路４７が動作を開始後、カウンタ回路４６（Count1）が先にカウントを開始して終了した場合、カウンタ回路４６（Count1）のカウント値は「３」、カウンタ回路４５（Count0）のカウント値は「０」のため、Count0 < Count1である。この場合、PCLK_TX1の方が早いという結果となるため、判定回路４７は、このカウンタ回路４６（Count1）を選択した符号「‐」とカウンタ回路４６（Count1）の値である「３」をPCLK_skewとして出力する。
【００８３】
次に、図６を参照して上記Data Shift２４ａ〜２４ｄの回路構成を説明する。なお、これら回路は、すべて同じ構成のため、Data Shift２４ａについて説明する。
【００８４】
図６に示すように、Data Shift２４ａは、PCLK_TX0をHSCLKでラッチする複数のシフトレジスタ５１と、各シフトレジスタ５１から出力されるクロック信号を、Shift Calc２３ａから入力されるシフト量の値に応じて選択して出力するセレクタ５２と、入力されるDATA_TX0及びSYNC_TX0をラッチする複数のシフトレジスタ５３と、各シフトレジスタ５３から出力されるデータDATA_TX0及びSYNC_TX0を、Shift Calc２３ａから入力されるシフト量の値に応じて選択して出力するセレクタ５４とを有する。
【００８５】
すなわち、Data Shift２４ａは、Shift Calc２３ａにより算出されたシフト量に基づき、それぞれがHSCLKに同期してシフトした、PCLK_TX0、DATA_ TX0、SYNC_TX0を出力する。
【００８６】
以下、図１、図７乃至図９を参照して実施形態に係るデータ伝送装置の動作を説明する。  
図１に示したように、実施形態に係るデータ伝送装置では、COM２１から出力されるPCLK_sourceは、各Laneの分周回路１１ａ〜１１ｄに分岐して供給される。分周回路１１ａでは、入力されたPCLK_sourceからPCLK_TX0が生成されてパラレルシリアル変換回路２２ａへ出力される。この他、分周回路１１ａからは、SYNC_TX0、DATA_TX0がパラレルシリアル変換回路２２ａへ出力される。
【００８７】
同様に、分周回路１１ｂでは、分岐して入力されたPCLK_sourceからPCLK_TX1が生成されてパラレルシリアル変換回路２２ｂへ出力される。この他、分周回路１１ｂからは、SYNC_TX1、DATA_TX1がパラレルシリアル変換回路２２ｂへ出力される。他の分周回路１１ｃ、１１ｄについても同様である。
【００８８】
ここでは、パラレルシリアル変換回路２２ａ〜２２ｄの端子設定により、予めパラレルシリアル変換回路２２ａがマスタLane、パラレルシリアル変換回路２２ｂ〜２２ｄがスレーブLane、そのうちパラレルシリアル変換回路２２ｄがスレーブエンドLaneに設定されているものとする。
【００８９】
また、パラレルシリアル変換回路２２ａ〜２２ｄに入力されるPCLK_TX0〜PCLK_TX3間には、図７に示すようなクロックスキューが発生していたものとする。
【００９０】
すなわち、図７に示すように、リセット後、高速なHSCLKに対してPCLK_TX0が１０HSCLK（１０パルス分）遅く、PCLK_TX1が８HSCLK（８パルス分）遅く、PCLK_TX2が１３HSCLK（１３パルス分）遅く、PCLK_TX3が１１HSCLK（１１パルス分）遅く、Lane間クロックスキューが発生したものとする。なお、HSCLK１パルス分をHSCLKサイクル数ともいう。
【００９１】
この場合、各PCLK_TX0〜PCLK_TX3がShift Calc２３ａ〜２３ｄに入力されると、図８に示すように、Lane_TX0では、PCLK Latch３２ａが、PCLK_TX0のdelay量として+１０を計測する。Lane_TX1では、PCLK Latch３２ｂが、PCLK_TX1のdelay量として+８を計測する。Lane_TX2では、PCLK Latch３２ｃが、PCLK_TX2のdelay量として+１３を計測する。Lane_TX3では、PCLK Latch３２ｄが、PCLK_TX3のdelay量として+１１を計測する。
【００９２】
次に、各Laneでは、Calc skew_A３３ａ〜３３ｄにより、左隣のレーンとの隣接Lane間差分値が計測される。なお、Lane_TX0は、マスタLaneに設定されているため、隣接Lane間差分値、マスタLane間差分値、及び最大差分値は何れも「０」が設定され、Lane間スキューは計測されない。
【００９３】
Lane_TX1では、Calc skew_A３３ｂが、Lane_TX0から得られる隣接Lane間差分値「＋１０」と自身のLane_TX1で計測された隣接Lane間差分値「＋８」との差を算出する。この場合、「＋８」−「＋１０」＝「−２」となり、この値が、Lane_TX1の隣接Lane間差分値とされる。他のレーンについても同様に、Lane_TX2の隣接Lane間差分値は「＋５」、Lane_TX3の隣接Lane間差分値は「−２」とされる。
【００９４】
次に、Lane_TX1では、Calc skew_M３４ｂが、マスタLaneであるLane_TX0のCalc skew_M３４ａと接続された信号線（図２の回路参照）を通じて得られる隣接Lane間差分値「０」と自身のLane_TX1で算出した隣接Lane間差分値「−２」とを加算してマスタLane間差分値を算出する。
【００９５】
この場合、マスタLane間差分値は、「０」+「−２」＝「−２」となる。他のレーンについても同様に、Lane_TX2のマスタLane間差分値は「＋３」、Lane_TX3のマスタLane間差分値は「＋１」とされる。
【００９６】
次に、Lane_TX1では、Calc Max３５ｂが、Lane_TX0から得られる最大差分値「０」と自身のLane_TX1で算出したマスタLane間差分値「−２」とを比較して大きい方の値を最大差分値とする。この場合、「０」と「−２」を比較した結果、大きい方の値が「０」となり、この値がLane_TX0とLane_TX1のLane間での最大差分値とされる。
【００９７】
他のLaneについても同様に最大差分値が計算され、Lane_TX2では、Lane_TX1とLane_TX2のLane間における最大差分値が「＋３」、Lane_TX3では、Lane_TX2とLane_TX3のLane間における最大差分値は「＋３」とされ、この最大差分値「＋３」がスレーブエンドレーンであるLane_TX3から各Lane_TX2〜Lane_TX1〜Lane_TX0に順に戻され（通知され）、各Laneで記憶される。
【００９８】
最後に、Lane_TX1では、Calc Shift３６ｂが、記憶した最大差分値「＋３」から、自身のマスタLane間差分値を引き算してPCLK_TX1のシフト値（自Laneのdelay量の値から何パルス分遅らせるか）を算出する。
【００９９】
この場合、「＋３」から「−２」を引いた結果（互いの差をとった結果）、「＋５」となり、この値がPCLK_TX1のシフト値とされる。他のレーンについても同様に、Lane_TX2におけるPCLK_TX2のシフト値は「０」、Lane_TX3におけるPCLK_TX3のシフト値は「＋２」とされる。また、ここでは、マスタLaneであるLane_TX0についてもシフト値は計算されて、「＋３」から「０」を引いた結果、PCLK_TX0のシフト値は「＋３」となる。
【０１００】
このようにして各Laneの各Shift Calc２３ａ〜２３ｄから、それぞれのシフト値が、各Data Shift２４ａ〜２４ｄに出力されるので、各LaneのData Shift２４ａ〜２４ｄは、それぞれのPCLK_TX0〜PCLK_TX3を、それぞれのシフト値に応じてシフトさせる（最遅のPCLK_TX2に合すように遅らせる）。
【０１０１】
具体的には、図９に示すように、Data Shift２４ａは、自Lane_TX0のdelay量のタイミング（破線矢印の終端位置）から３パルス分（＋３）遅延させてPCLK_TX0をラッチする。Data Shift２４ｂは、自Lane_TX1のdelay量のタイミングから５パルス分（＋５）遅延させてPCLK_TX1をラッチする。Data Shift２４ｃは、自Lane_TX2のdelay量が＋１３で最も遅いため、次にPCLK_TX2のパルスが立ち上がるタイミングでラッチする。Data Shift２４ｄは、自Lane_TX3のdelay量のタイミングから２パルス分（＋２）遅延させてPCLK_TX3をラッチする。
【０１０２】
図１０を参照してこの実施形態のデータ伝送装置における効果を説明する。  
例えば、図７に例示したように、Lane_TX1のdelay量（PCLK_TX1のSkew）が「＋８」、最遅のLane_TX2のdelay量（PCLK_TX2のskew）が「＋１３」である。
【０１０３】
この場合、図１０に示すように、Lane_TX1において、タイミング７０でPCLK_TX1をHSCLKでラッチすると、PCLK_hsclk_latchとなる。これに対して本実施形態では、Data Shift２４ｂが、Shift Calc２３ｂから入力されるシフト値「＋５」に応じてPCLK_TX1をHSCLK５パルス分シフトさせてラッチするので、タイミング７１でPCLK_TX1がラッチされたPCLK_shiftが得られ、このPCLK_shiftとSYNC_TX1、DATA_shift_TX1がPISO_LOAD２６ｂに入力される。
【０１０４】
PISO_LOAD２６ｂは、タイミング７２でPISO_Load信号をPISO_n_to_4 ２７ｂへ出力し、PISO_n_to_4 ２７ｂからは、タイミング７３でDATA_shift_TX1が４ビットのパラレルデータに変換されて、順にPISO_4_to_1 ２９ｂへ出力される。PISO_4_to_1 ２９ｂでは、入力された４ビットのパラレルデータOUT_32_to_4 [3:0]が１ビットのシリアルデータに変換されて出力回路３０ｂから、タイミング７４で順次出力されるようになる。
【０１０５】
一方、Lane_TX2では、Lane_TX1でPCLK_TX1がシフトされた分（５パルス分の間隔７５）と同じだけ遅延したタイミング７６で、PCLK_TX2がHSCLKでラッチされて、PCLK_hsclk_latchが得られる。このPCLK_hsclk_latchは、Lane_TX1のPCLK_shiftと同じタイミングで遷移する信号となる。Lane_TX2のPCLK_TX2は、Lane_TX0 〜Lane_TX3の中で最も遅いPLCKであるためシフトされず、このPCLK_TX2そのものがPCLK_shiftとしてPISO_LOAD２６ｃへ出力される。
【０１０６】
PISO_LOAD２６ｃは、タイミング７８でPISO_Load信号をPISO_n_to_4 ２７ｃへ出力し、PISO_n_to_4 ２７ｃからは、タイミング７９でDATA_shift_TX2が４ビットのパラレルデータに変換されて、順にPISO_4_to_1 ２９ｃへ出力される。PISO_4_to_1 ２９ｃでは、入力された４ビットのパラレルデータOUT_32_to_4 [3:0]が１ビットのシリアルデータに変換されて出力回路３０ｃから、タイミング８０で順次出力されるようになる。
【０１０７】
この結果、Lane_TX2におけるタイミング８０とLane_TX1におけるタイミング７４とでは、１パルス分に満たないわずかな時間差８１が生じる。しかし、これはanalog skewであり、回路の構造上、必ず発生するものであるため、Lane間のSkewとしては充分に許容範囲である。
【０１０８】
以上説明したように、この実施形態のデータ伝送装置によれば、複数のLane_TX0〜Lane_TX3でLinkを構成しLane毎にPCLKを用いてデータを伝送する上で、Lane毎に設けた分周回路１１ａ〜１１ｄから出力されるPCLK_TX0〜PCLK_TX3（パラレルデータ用Clock）に生じるLane間Skewの影響をなくしてSkew低減を図ることができる。これにより、例えばLink毎に異なるData Rateで通信を行うBifurcation機能を利用したデータ伝送におけるLink毎の出力を高SPEC化に対応させることができる。
【０１０９】
（他の実施形態）  
上記実施形態では、PCLK_TX1よりも十分に高速なHSCLKを用いたが、HSCLKが高速すぎて、タイミング設計が困難な場合が考えられる。このような場合、図１１に示すように、HSCLKのエッジ毎に同期して９０度ずつ位相を変えた、例えばそれぞれがHSCLKの１／４の周波数（４倍の周期）の複数の分周クロックPCLK_1/4〜PCLK_4/4（多相Clock）（異なる位相の多相Clock）を用いることで、HSCLKと同じ分解能でSkewを調整することができる。なお、ここに示した４相の多相Clockは一例であり、この例以外であってもよく、本発明は相数に限定されるものではない。
【０１１０】
上記実施形態では、各Laneにシフト計算回路（Shift Calc）を配置したが、最小構成として、2Lane構成の場合、シフト計算回路（Shift Calc）は、2Laneのうち少なくとも一つのLaneに配置されていればよい。また、データシフト回路（Data Shift）は、シフト対象のLaneに配置されていればよい。
【０１１１】
また、上記実施形態では、４つのレーンの１つ目のレーンをマスタLaneとし、最後のレーンをスレーブエンドレーンとしたが、さらにレーン数やLink数が多い場合、ディジーチェーン接続される複数のレーンの中でclock Shiftを行う対象Laneを限定し、その対象Laneの範囲でマスタ／スレーブエンドの設定を行うことで、BifurcationやAggregationなどのさまざまなLane構成に対応することが可能になる。
【０１１２】
上記実施形態では、複数のLaneすべてをシフト対象としたが、このうち一部のLaneだけをシフト対象としてもよい。この場合、シフト対象とされた複数のLaneの中の１つのLaneをマスタLaneに設定しマスタLaneからディジーチェーン接続された終端のLaneをスレーブエンドLaneに設定し、マスタLaneからスレーブエンドLaneまでの間で分周クロックをシフトすればよい。
【０１１３】
上記実施形態では、PCI Expressのインターフェース装置について説明したが、これ以外に、例えばアクセラレーテッド グラフィックス ポート（ＡＧＰ）やＳＡＴＡ、Ｍ．２など、パラレルデータをシリアルデータに変換する際に、複数のLaneを有しLane毎に異なる分周クロックを利用する装置であれば、本発明を適用できることはいうまでもない。
【０１１４】
本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。上記実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１５】
１…第１回路群、２…第２回路群、１１ａ〜１１ｄ…分周回路、２２ａ〜２２ｄ…パラレルシリアル変換回路、２３ａ〜２３ｄ…シフト計算回路（Shift Calc）、２４ａ〜２４ｄ…データシフト回路（Data Shift）、２５ａ〜２５ｄ…パラレルインシリアルアウト回路（PISO）、１３ａ、１３ｂ、１４ａ、１４ｂ…ラッチ回路、２１…基準クロック生成回路（COM）、２６ａ〜２６ｃ…パラレルデータ読込回路（SIPO_LOAD）、２７ａ〜２７ｄ…データ変換回路（PISO_n_to_4）、２８ａ〜２８ｄ…分周回路、２９ａ〜２９ｄ…P to S変換回路（PISO_4_to_1）、３０ａ〜３０ｄ…出力回路、３１ａ〜３１ｄ…セレクタ、３２ａ〜３２ｄ…ラッチ回路、３３ａ〜３３ｄ…対隣接Lane間スキュー計測回路（Calc Skew_A）、３４ａ〜３４ｄ…対マスタLane間スキュー計測回路（Calc Skew_M）、３５ａ〜３５ｄ…最大delay量計測回路（Calc Max）、３６ａ〜３６ｄ…シフト量計算回路（Calc Shift）、３７ａ〜３７ｄ…セレクタ、４１〜４４…ラッチ回路、４５、４６…カウンタ回路、４７…判定回路、５１、５２…シフトレジスタ、５２、５４…セレクタ、６１、６２、６４、６６、６７、６９…Riseエッジ位置、６３、６８…遅延、７０〜７４、７６〜８０…タイミング、７５…間隔、８１…時間差（analog skew）。
【図１】
2020154789.tif 000003
【図２】
2020154789.tif 000004
【図３】
2020154789.tif 000005
【図４】
2020154789.tif 000006
【図５】
2020154789.tif 000007
【図６】
2020154789.tif 000008
【図７】
2020154789.tif 000009
【図８】
2020154789.tif 000010
【図９】
2020154789.tif 000011
【図１０】
2020154789.tif 000012
【図１１】
2020154789.tif 000013