(57)【特許請求の範囲】
【請求項１】
第１のビット数単位で区切られた通信データと、前記第１のビット数単位で区切られた制御用データとを含むシリアルデータを受信するシリアルデータ受信回路装置であって、
前記シリアルデータを受信して、前記第１のビット数よりも少ない第２のビット数のパラレルデータに前記シリアルデータを変換するシリアル・パラレル変換回路と、
前記第２のビット数単位のビット幅を持つ複数のレジスタを有し、前記シリアル・パラレル変換回路で変換されたパラレルデータを入力された順に、前記複数のレジスタの中で前記パラレルデータが直接入力される第１のレジスタから前記複数のレジスタの配置順にシフトしながら保持するデータ保持回路と、
前記データ保持回路に格納されたデータに含まれる制御用データを検出して、受信したシリアルデータの区切り位置を検出する検出回路と、
前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、前記データ保持回路に格納されたパラレルデータに含まれる、前記データ区切り位置から第２のビット数分のデータを選択するための選択信号を生成する検出位置保持回路と、
前記検出位置保持回路で生成された選択信号に基づいて、前記データ保持回路に格納されたデータのうち、検出した区切り位置を基準として、第２のビット数単位でデータを選択する選択回路とを有し、
前記検出位置保持回路は、前記第２のビット数分のデータが前記複数のレジスタの中の前記第１のレジスタおよび前記第１のレジスタの近くに配置されたレジスタに最大限保持されるように前記第２のビット数分のデータを選択する前記選択信号を生成する
ことを特徴とするシリアルデータ受信回路装置。
【請求項２】
請求項１記載のシリアルデータ受信回路装置であって、
前記検出回路は、前記検出回路に入力された第１のビット数のパラレルデータが前記制御用データの特定のビットパターンと一致するか否かを比較するための、前記第２のビット数と同数の複数の比較回路を有し、
前記複数の比較回路には、前記データ保持回路に格納された受信データから、前記第１のビット数単位で１ビットずつずらしたデータがそれぞれ入力され、
各比較回路は、入力された前記第１のビット数のデータが前記特定のビットパターンに一致するか否かを比較することにより、受信データの区切り位置を検出すること、
を特徴とするシリアルデータ受信回路装置。
【請求項３】
請求項１又は請求項２記載のシリアルデータ受信回路装置であって、
前記データ保持回路は、前記データ保持回路を構成する複数のレジスタの中で前記シリアル・パラレル変換回路からのデータを格納する第１のレジスタと、前記第１のレジスタに格納されたデータを格納する第２のレジスタとを有し、
前記検出位置保持回路は、前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、前記特定のビットパターンが検出された制御用データ以降の受信データであって、データ区切り位置を基準として第２のビット数分のデータを前記第１及び第２のレジスタに格納されたデータから前記選択回路で選択できるタイミングを判定し、判定したタイミングにおいて前記データ区切り位置から第２のビット数分のデータを前記選択回路で選択する選択信号を生成すること、
を特徴とするシリアルデータ受信回路装置。
【請求項４】
請求項１乃至請求項３記載のシリアルデータ受信回路装置であって、さらに、
前記シリアルデータの転送クロックに同期した第１のクロックに同期して前記選択回路により選択された前記第２のビット数のデータが書き込まれ、当該書き込まれたデータがシリアルデータ受信回路装置内部の回路を動作させるための第２のクロックに同期して前記第１のビット数単位で読み出されるクロック乗り換えバッファと、
前記選択回路により選択された前記第２のビット数のデータを前記クロック乗り換えバッファに書き込む第１クロックに同期した第１の制御信号を生成し、前記選択回路により選択された前記第２のビット数のデータを前記クロック乗り換えバッファへ書き込む制御を当該第１の制御信号を用いて行なう書き込み制御回路と、
前記書き込み制御回路で生成された第１の制御信号を前記第２のクロックに同期化して第２の制御信号を生成する同期化回路と、
前記同期化回路で第２クロックに同期化された第２の制御信号を用いて、前記第１のビット数単位でクロック乗り換えバッファに書き込まれたデータを前記第２のクロックに同期して読み出すための第３の制御信号を生成する読み出し制御回路と、
を有することを特徴とするシリアルデータ受信回路装置。
【請求項５】
請求項４記載のシリアルデータ受信回路装置であって、
前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、検出した特定のビットパターンを有する制御用データ以降の受信データであって前記データ区切り位置から第２のビット数分のデータを前記選択回路で選択できるタイミングを判定し、判定したタイミングに関する情報に基づいて、前記データ区切り位置から前記クロック乗り換えバッファへの書き込みを開始するための書き込みタイミング制御信号を生成する書き込みタイミング制御回路をさらに有し、
前記書き込み制御回路は、前記書き込みタイミング制御回路により生成された書き込みタイミング制御信号を用いて前記第１の制御信号を生成すること、
を特徴とするシリアルデータ受信回路装置。
【請求項６】
第１のビット数単位で区切られた通信データと、前記第１のビット数単位で区切られた制御用データとを含むシリアルデータを受信するシリアルデータ受信方法であって、
前記シリアルデータを受信してパラレルデータに変換するシリアル・パラレル変換回路により、受信した前記シリアルデータを前記第１のビット数と同じか、それよりも少ない第２のビット数のパラレルデータに前記シリアルデータを変換するシリアル・パラレル変換ステップと、
前記第２のビット数単位のビット幅を持つ複数のレジスタを有するデータ保持回路により、前記シリアル・パラレル変換回路で変換されたパラレルデータを入力された順に、前記複数のレジスタの中で前記パラレルデータが直接入力される第１のレジスタから前記複数のレジスタの配置馴にシフトしながら保持する保持ステップと、
前記データ保持回路に格納されたデータに含まれる制御用データ特有のビットパターンを検出するための検出回路により、受信したシリアルデータの区切り位置を検出する検出ステップと、
前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、前記データ保持回路に格納されたパラレルデータに含まれる、前記データ区切り位置から第２のビット数分のデータを選択するための選択信号を生成して保持する検出位置保持回路により、前記選択信号を生成する検出位置保持ステップと、
前記検出位置保持回路で生成された選択信号に基づいて、前記データ保持回路に格納されたデータの中から前記第２のビット数分のデータを選択する選択回路により、前記データ保持回路に格納されたデータのうち、検出した区切り位置を基準として、第２のビット数単位でデータを選択する選択ステップと、
前記選択回路により選択された前記第２のビット数のデータを、前記シリアルデータの転送クロックに同期した第１のクロックから受信回路装置内部の回路を動作させるためのクロックに同期した第２のクロックに乗り換えるためのクロック乗り換えバッファに書き込む書き込みステップと、
前記書き込みステップにより書き込まれたデータを、前記第２のクロックに同期して前記第１のビット数単位で読み出す読み出しステップとを有し、
前記検出位置保持ステップは、前記第２のビット数分のデータが前記複数のレジスタの中の前記第１のレジスタおよび前記第１のレジスタの近くに配置されたレジスタに最大限保持されるように前記第２のビット数分のデータを選択する前記選択信号を生成する
ことを特徴とするシリアルデータ受信方法。
【請求項７】
請求項６記載のシリアルデータ受信方法であって、
前記検出回路で前記特定のビットパターンを検出して受信データの区切り位置を検出した場合に、前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、前記特定のビットパターンが検出された制御用データ以降の受信データであって、データ区切り位置を基準として第２のビット数分のデータを前記選択回路で選択できるタイミングを判定し、判定したタイミングに関する情報に基づいて、前記データ区切り位置から前記クロック乗り換えバッファへの書き込みを開始する書き込みタイミングの制御を行なう書き込みタイミング制御ステップをさらに有すること、
を特徴とするシリアルデータ受信方法。
【請求項８】
第１のビット数単位で区切られた通信データと、前記第１のビット数単位で区切られた制御用データとを含むシリアルデータを受信するシリアルデータ受信回路装置であって、
前記シリアルデータを受信して、前記第１のビット数と同じか、それよりも少ない第２のビット数のパラレルデータに前記シリアルデータを変換するシリアル・パラレル変換回路と、
前記第２のビット数単位のビット幅を持つ複数のレジスタを有し、前記シリアル・パラレル変換回路で変換されたパラレルデータを入力された順に、前記複数のレジスタの中で前記パラレルデータが直接入力される第１のレジスタから前記複数のレジスタの配置順にシフトしながら保持するデータ保持回路と、
前記データ保持回路に格納されたデータに含まれる制御用データを検出して、受信したシリアルデータの区切り位置を検出する検出回路と、
前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、前記データ保持回路に格納されたパラレルデータに含まれる、前記データ区切り位置から第２のビット数分のデータを選択するための選択信号を生成する検出位置保持回路と、
前記検出位置保持回路で生成された選択信号に基づいて、前記データ保持回路に格納されたデータのうち、検出した区切り位置を基準として、第２のビット数単位でデータを選択する選択回路とを有し、
前記検出位置保持回路は、前記第２のビット数分のデータが前記複数のレジスタの中の前記第１のレジスタおよび前記第１のレジスタの近くに配置されたレジスタに最大限保持されるように前記第２のビット数分のデータを選択する前記選択信号を生成する
ことを特徴とするシリアルデータ受信回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速転送されるシリアルデータの受信回路装置及びシリアルデータ受信方法に関する。
【背景技術】
【０００２】
図１は、従来のシリアルバスの適用事例を示した図である。図１に示すコンピュータ・システムの構成例は、CPU(Central Processing Unit)１０、MCU(Memory Control Unit)１１、メモリ１２、リード・オンリー・メモリー（ROM）１７やLocal Area Network（LAN）１８等の各種周辺制御装置とのデータ通信を行なうためのIO Adapter１４〜１６、IO Adapter１４〜１６の制御を行なうためのIO Unit (IOU)１３を有する。
【０００３】
コンピュータ間やコンピュータの部品間のデータ転送は、従来からパラレルバスを用いた転送やシリアルバスを用いた転送により行なわれてきた。ここで、半導体集積回路では、ピン数が増えるほど高価になるので、ピン数を減らすため、速度が重視されないデータ転送にはシリアルバスを使うことが多い。そのため、例えば、図１におけるROM１７とIO Adapter１５間や、LAN１８とIO Adapter１６間の部分や、IO Adapter１４〜１６とIOU１３間等でシリアルバスが用いられてきた。
【０００４】
図２は、高速なシリアルバスの適用事例を示した図である。従来、図１に示すようにシリアル転送はCPU１０からのアクセス・レイテンシが大きく影響しない比較的低速でアクセスするIOデバイスとの接続等の場面で多く用いられていた。しかし、コンピュータ・システムの高速化等に伴い、図２に示すように、CPU１０とMCU１１間やMCU１１とIOU１３間といった、CPUのアクセス・レイテンシに影響を与えるようなシステムバス１９−１、１９−２等でも利用されるようになってきた。このようなシステムバスにシリアルバスが用いられるようになってきた理由としては、シリアル転送を用いた場合、パラレル転送で問題となる配線長の差に起因するビット間スキューを考慮する必要がない等の利点があるためである。
【０００５】
シリアルバスを用いた転送を行うインタフェースでは、シリアルバスに接続された送信回路はパラレルデータをシリアルデータに変換して送信を行う。シリアルバスに接続された受信回路ではシリアルデータとして転送されてきたデータをパラレルデータに復元して受信する。このようなシリアルバスを用いたデータ転送を行なう場合、送信側と受信側でパラレルデータの基準位置を合わせる必要がある。高速シリアル転送等においては、一般に、動作の初期段階、その他特定のタイミングでトレーニング期間を設け、その間、特定のコードを送信して、データ通信に必要な準備処理等が行なわれる。そのため、このようなトレーニング期間中に送信側と受信側でのパラレルデータの基準位置を合わせる処理も行なわれる。
【０００６】
高速シリアル転送を行なう場合には、例えば８ビット幅のパラレルデータをシリアルデータに変換して送信する際に、8B10Bエンコーダ回路により８ビットデータを１０ビット化して送信する場合がある。8B10Bエンコード方式は、シリアルデータ中にクロック信号の情報を埋め込むことで、データとクロックを同じ配線で転送する。
【０００７】
この8B10Bエンコード方式では、シリアル通信時に送信する「０」と「１」のデータの数を同数にすることによりDCバランスを保ったり、伝送路上のデータ化けをある程度検出させることができる。また、８ビットデータを１０ビット化すると、転送データ以外に特殊な意味を持たせた特殊コードも転送することが可能となる。この特殊コードに特殊な意味を持たせてデータ転送時の制御等に用いることができる。また、この特殊コードは、送信側と受信側でデータ境界を合わせるために利用される。
【０００８】
ここで、背景技術として、特許文献１では、8B10Bでエンコードされたシリアルデータに含まれる特定のcomma信号に着目して、入力されたシリアルデータに含まれるcomma信号を含むか否かを検出して受信データのワード同期を行なう発明が開示されている。また、特許文献２では、２つのリングバッファからなるパターン検出器によりシリアルデータに含まれる特定のコードを検出し、シリアルデータをパラレルデータとして取り込むタイミングを決定する発明が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第3094973号公報
【特許文献２】特開2009-94891号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、従来技術では10 Gbpsやそれ以上の高速データ転送では、転送データの境界を検出するための回路の動作速度が間に合わなくなるという問題がある。また、システムバス等にシリアル通信を用いる場合、アクセス・レイテンシを最小限に抑える必要もある。従って、アクセス・レイテンシを抑えつつ、高速なシリアル転送を実現したいという課題がある。
【課題を解決するための手段】
【００１１】
上記の課題を解決するために、本発明に係るシリアルデータ受信回路装置は、所定の転送ビット数である第１のビット数単位で区切られた通信データと前記第１のビット数単位で区切られた制御用データとを含むシリアルデータを受信するシリアルデータ受信回路装置であって、前記シリアルデータを受信して前記第１のビット数よりも少ないビット数である第２のビット数のパラレルデータに前記シリアルデータを変換するシリアル・パラレル変換回路と、前記第２のビット数単位のビット幅を持つ複数のレジスタを有し、前記シリアル・パラレル変換回路で変換されたパラレルデータを入力された順に、前記複数のレジスタの中で前記パラレルデータが直接入力される第１のレジスタから前記複数のレジスタの配置順にシフトしながら保持するデータ保持回路と、前記データ保持回路に格納されたデータに含まれる制御用データを検出して、受信したシリアルデータの区切り位置を検出する検出回路と、前記検出回路の検出結果から得られる前記データ区切り位置に関する情報を基に、前記データ保持回路に格納されたパラレルデータに含まれる、前記データ区切り位置から第２のビット数分のデータを選択するための選択信号を生成する検出位置保持回路と、前記検出位置保持回路で生成された選択信号に基づいて、前記データ保持回路に格納されたデータのうち、検出した区切り位置を基準として、第２のビット数単位でデータを選択する選択回路と、を有し、前記検出位置保持回路は、前記第２のビット数分のデータが前記複数のレジスタの中の前記第１のレジスタおよび前記第１のレジスタの近くに配置されたレジスタに最大限保持されるように前記第２のビット数分のデータを選択する前記選択信号を生成する。
【発明の効果】
【００１２】
本発明に係るシリアルデータ受信回路装置では、高速転送されてくるシリアルデータについて、受信データの境界位置に関係なく所定のビット数単位で一旦パラレルデータに変換し、変換した複数のパラレルデータに含まれる特定コードを検出する。このような構成にすることで、所望のデータ境界で区切られた受信データを高速、かつ短い処理レイテンシで取り出すことが可能となる。
【図面の簡単な説明】
【００１３】
【図１】従来のシリアルバスの適用事例を示した図である。
【図２】高速なシリアルバスの適用事例を示した図である。
【図３】高速なシリアルバスの受信装置例の機能概要を示した図である。
【図４】高速なシリアルバスの受信装置例に係る10bit境界検出回路と10bitデータ選択回路を示した図である。
【図５】高速なシリアルバスの受信装置例に係るクロック乗り換えバッファの概要を示した図である。
【図６】高速なシリアルバスの受信装置例に係るシリアルデータ受信回路の動作タイムチャートを示した図である。
【図７】実施例に係る機能概要を示した図である。
【図８】実施例に係るシリアルバスの適用事例の機能概要を示した図である。
【図９】実施例に係る10bit境界検出回路と4bitデータ選択回路を示した図である。
【図１０】実施例に係る動作概要タイムチャートを示した図である。
【図１１】実施例に係るクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミング（Ａ）を示した図である。
【図１２】実施例に係るクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミング（Ｂ）を示した図である。
【図１３】実施例に係るクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミング（Ｃ）を示した図である。
【図１４】実施例に係るクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミング（Ｄ）を示した図である。
【図１５】実施例に係るシリアルデータ受信回路の動作タイムチャートを示した図である。
【発明を実施するための形態】
【００１４】
高速なシリアル転送を実現する際、例えば前記8B10B転送エンコード方法を用いてシリアル転送を行なう場合に、受信側装置において、まずシリアルデータを単にパラレルデータに変換してから、10bit境界を検出する方法が考え得る。
【００１５】
図３は、高速なシリアルバスの受信装置例を示した図である。図３は、受信側装置において、受信したシリアルデータを単にパラレルデータに変換してから10bit境界を検出する場合の適用事例の機能概要を示す。図３の事例では、送信側装置２０は８ビット幅のパラレルデータをシリアル化し、シリアルバス２６を介して受信側装置３０にシリアルデータを転送する。受信側装置３０は、シリアルバス２６を介して受信したシリアルデータをパラレルデータに変換し、受信側装置３０の内部回路において受信したデータに対する必要な処理を行なう。以下、具体的に送信側装置２０及び受信側装置３０におけるデータ変換等について説明する。
【００１６】
送信側装置２０において、8B10B変換回路２２は、８ビット幅の送信データ保持レジスタ２１から出力される８ビットのパラレル信号を所定の変換規則に従って１０ビットデータに変換する。１０ビット幅の送信データ保持レジスタ２３は、8B10B変換回路２２により変換された１０ビットデータを保持する。SerDes（SERializer/DESerializer）回路２４は、送信データ保持レジスタ２３から出力される１０ビット幅のパラレルデータを、所定の方式に従ってシリアルデータに変換する。SerDes回路２４によって変換されたシリアルデータは、バッファ２５を介してシリアルバス２６に出力される。バッファ２５は、ドライバ用バッファであって、差動タイプのバッファであっても良い。シリアルバス２６は、例えばIEEE 1394、USB（Universal Serial Bus）、SATA（Serial Advanced Technology Attachment）、PCI Express等のシリアル転送方式で用いられるシリアル形式のバスを言う。
【００１７】
受信側装置３０では、シリアルバス２６を介して送信されるシリアルデータをバッファ３１により受信する。バッファ３１は受信用バッファであって、差動信号として送信されてきたデータ信号を受信するバッファであっても良い。
【００１８】
SerDes回路３２は、バッファ３１により受信したシリアルデータを１０ビットのパラレルデータに変換する。SerDes回路３２でデータ変換する際、受信したシリアルデータのデータ境界に関係なく、１０ビット単位でシリアルデータからパラレルデータへの変換が行なわれる。SerDes回路３２で変換されたパラレルデータは、所定のタイミングで１０ビットの受信データレジスタ３３に格納される。受信データレジスタ３３は、後述の複数の１０ビットレジスタにより構成され、SerDes回路３２から出力されるパラレルデータを順次格納する。
【００１９】
受信データレジスタ３３に格納された１０ビット単位のデータは、送信側装置２０の8B10B変換回路２２で変換した際の１０ビットデータと境界位置が合うとは限らない。従って、受信側装置３０において受信したデータの境界位置を検出する必要がある。１０ビット境界検出回路３４は、受信データレジスタ３３に格納されたパラレルデータの中から、送信側装置２０から受信側装置３０に転送されたデータに含まれる、データ転送時の制御等に用いられる特殊コードのうちの、データ境界位置検出のための特定コードを検出する。１０ビット境界検出回路３４は、このデータ境界位置検出のための特定コードを検出することにより、転送データにおける１０ビット毎のデータ境界位置を検出する。１０ビット境界検出回路３４により検出されたデータ境界の情報に基づいて、検出されたデータ境界から１０ビット分のデータが受信データレジスタから取り出され、１０ビットの受信データレジスタ３５に格納される。ここで、受信側装置３０の動作速度の要件を満たす限りにおいて、受信データレジスタ３５によるデータラッチを省略することもできる。
【００２０】
尚、図３には示されていないが、SerDes回路３２は、受信データの変換を行なう際、受信したシリアルデータからクロックも再生する。この再生クロックはSerDes回路３２や１０ビットの受信データレジスタ３３等で使用される。また、図示されていないが、前記再生クロックから所定の分周比で分周したクロックが生成され、受信データレジスタ３３、１０ビット境界検出回路３４、受信データレジスタ３５、又は後述のクロック乗り換えバッファ３６等の動作クロックとして使用される。例えば、SerDes回路３２で受信されたシリアルデータを１０ビット単位でパラレルデータに変換する場合には、再生クロックを１０分周した分周クロックを生成して用いることができる。これらの再生クロック及び分周クロックは、基本的に送信側装置２０のクロックに同期したクロックであり、受信側装置３０で用いられるクロックとは異なるクロックである。
【００２１】
ところで、イーサネット（登録商標）等のシリアルバス２６を介して接続される送信側装置２０と受信側装置３０は離れた位置に設置されている場合も多々あり、同じ動作周波数で動作させる場合でも個々の装置ごとに異なるクロックオシレータによりクロックが生成される。送信側と受信側で異なるクロックオシレータを使用した場合、クロックオシレータの個体差により、クロックの周波数に微妙にズレが生じる場合がある。このクロックのズレを吸収して受信側装置３０のクロックに乗り換えるために、クロック乗り換えバッファ３６が用いられる。
【００２２】
クロック乗り換えバッファ３６では、送信側装置２０から受信したシリアルデータから再生されたクロックを分周した分周クロックに加えて、受信側装置３０のクロック、すなわち、受信側クロックが入力され、受信データのクロック乗り換えが行なわれる。具体的には、送信側クロックである前記分周クロックで動作する受信データレジスタ３５から出力されたパラレルデータが、同じ分周クロックで動作するクロック乗り換えバッファ３６の書き込みポートに書き込まれる。クロック乗り換えバッファ３６に書き込まれたデータは、次に、受信側クロックで動作する読み出しポートから読み出され、受信側クロックで動作する１０ビットの受信データレジスタ３７に格納される。このようにクロック乗り換えバッファ３６において、送信側クロックで受信データを書き込み、書き込まれたデータを受信側クロックで読み出すことにより、受信データのクロック乗り換えが行なわれる。
【００２３】
受信データレジスタ３７に格納された１０ビットデータは、さらに10B8B変換回路３８により所定の変換規則に従って８ビットデータに変換され、８ビットの受信データレジスタ３９に格納される。このようにして送信側装置２０からシリアルバス２６を介して受信側装置３０にデータ送信が行なわれる。
【００２４】
尚、図３における前記各レジスタ２１、２３、３３、３５、３７、３９は、必ずしも複数のフリップ・フロップにより構成されるレジスタである必要はなく、メモリや複数のラッチにより実現しても良い（以下に述べる各レジスタについても同様）。また、図３では、高速なシリアル転送を行なうための高速動作する送受信回路の構成を想定しているため、種々のデータ処理の間ごとにレジスタでデータをラッチする構成としている。しかし、高速動作を要しない場合等において動作速度の要件を満たす場合には、例えば、レジスタ２１、３５、３７、３９等を省略した実装設計を行なうことも可能である。
【００２５】
図４は、図３における受信側装置３０内の受信データレジスタ３３からクロック乗り換えバッファ３６までの回路の詳細を示した図である。受信データレジスタ３３は、２つの１０ビットレジスタ３３−１及び３３−２を有し、SerDes回路３２から送られてきた順に１０ビットデータをレジスタ３３−１及び３３−２に格納する。前述の通り、SerDes回路３２では受信したシリアルデータの１０ビット境界位置に関係なくシリアル・パラレル変換する。そのため、SerDes回路３２で１０ビット単位でパラレルデータに変換した場合には、少なくとも２つの１０ビット・レジスタ３３−１、３３−２に受信データを展開して、データの境界位置を検出する必要がある。すなわち、２つのレジスタ３３−１と３３−２に格納された一連の１９ビット・データ（Data[18:0]）のどの位置にデータ境界があるのか不明であるため、一連の１９ビット・データ内を１０ビット単位で１ビットずつずらした１０個のデータの各々について、データ境界位置検出のための特定コードと一致するか否かを検出する。
【００２６】
前記一連の１９ビットのデータ（Data[18:0]）のどの位置に受信データの境界位置があるのか検出するために、特定コード検出回路３４は、１０個の特定コード検出回路、すなわち、特定コード検出回路（Ａ）３４−１〜特定コード検出回路（Ｊ）３４−１０を有する。特定コード検出回路（Ａ）３４−１では、特定コード検出回路（Ａ）に入力された１０ビットの信号Data[9:0]が、データ境界位置検出のための「特定コード」に一致するか否かを比較し、一致する場合には、出力信号であるdetect[A]信号をアサートする。残りの９個の特定コード検出回路（Ｂ）〜（Ｊ）についても、特定コード検出回路（Ａ）と同様の回路構成となっており、１０ビット単位で１ビットずつずらしたデータ、すなわち、Data[10:1]からData[18:9]までの各１０ビットデータのいずれかが入力される。各検出回路（Ｂ）〜（Ｊ）は、それぞれに入力したData[10:1]からData[18:9]までの１０ビットデータについて特定コードと一致するか否かを比較し、一致した場合には対応するdetect[B:J]信号をアサートする。
【００２７】
各特定コード検出回路３４−１〜３４−１０から出力される検出信号（detect[A:J]）の中で、特定コードを検出した検出回路から出力される検出信号のみがアサートされ、残余の検出信号はデアサートされる。すなわち、例えば検出信号の信号極性がHigh-Activeの場合、特定コードを検出した検出回路から出力される検出信号のみ“１”となり、その他の検出回路から出力される検出信号は“０”となる。
【００２８】
特定コード検出回路３４−１〜３４−１０から出力される検出信号（detect[A:J]）は、検出位置保持回路３４−１１に入力される。検出位置保持回路３４−１１は、例えば、保持している検出信号に対して入力した検出信号（detect[A:J]）に変化が生じた場合に変化後の検出信号の内容を記録し、次の変化があるまで検出信号の内容を保持する動作を行なう。検出位置保持回路３４−１１が保持する内容としては、アサートされている検出信号がどれであるかといった情報を保持する。
【００２９】
検出位置保持回路３４−１１は、保持している検出信号の内容に基づいて、前記受信データレジスタ３３−１及び３３−２に格納されたデータ（Data[19:0]）のどの部分が境界で区切られた１０ビットのデータであるかを示す選択信号Select[A:J]を生成する。ここで、選択信号Select[A:J]は１０ビットの信号として記載しているが、１６進数等によりどのビット位置が区切り位置であるかを示す４ビットの選択信号としても良い。
【００３０】
セレクタ３４−２１は、前記受信データレジスタ３３−１及び３３−２に格納されたデータ（Data[19:0]）のうち、境界位置で区切られた１０ビットのデータを前記選択信号Select[A:J]を用いて選択し、Data 10B Alignment[9:0]信号として出力する。セレクタ３４−２１から出力された１０ビットデータData 10B Alignment[9:0]は、一旦、１０ビットのデータレジスタ３５で保持され、その後、クロック乗り換えバッファ３６−１に書き込まれる。クロック乗り換えバッファ３６に関連する動作については、図５を用いて説明する。
【００３１】
図５は、前記クロック乗り換えバッファ３６の動作を説明するための図である。図５において、検出位置保持回路３４−１１、セレクタ３４−２１、データレジスタ３５、書き込み制御回路３６−２、及びクロック乗り換えバッファ３６−１の書き込みポートは、送信側クロックである前記分周クロックに基づいて動作する。そのため、データレジスタ３５に保持された１０ビットデータは、分周クロックを用いてクロック乗り換えバッファ３６−１に書き込まれる。一方、クロック乗り換えバッファ３６−１の読み出しポート、同期化回路３６−３、読み出し制御回路３６−４、及びデータレジスタ３７は、受信側装置３０の動作クロックである受信側クロックに基づいて動作する。
【００３２】
クロック乗り換えバッファは、FIFO（First In First Out）であっても良いし、リングバッファでも良く、書き込みと読み出しを別のクロックで行なうことができる２ポートＲＡＭであっても良い。また、クロック乗り換えバッファを複数のレジスタにより構成することもできる。
【００３３】
書き込み制御回路３６−２は、検出位置保持回路３４−１１から出力される選択信号に基づいて、クロック乗り換えバッファ３６−１へのデータの書き込み制御信号を生成する。具体的には、検出位置保持回路３４−１１からの選択信号の情報に基づいてクロック乗り換えバッファ３６−１へ書き込むデータの有無及び書き込みタイミングを判定して、クロック乗り換えバッファ３６−１への書き込み許可信号であるWrite Enable信号を出力する。また、書き込み制御回路３６−２は、Write Enable信号がアサートされる期間、クロック乗り換えバッファ３６−１への書き込みアドレスであるWrite Address信号も出力する。Write Enable信号がアサートされる期間、データレジスタ３５に保持されている境界位置で区切られた１０ビットデータが、クロック乗り換えバッファ３６−１の書き込みポートのWrite Address信号で示されるアドレス領域に書き込まれる。
【００３４】
同期化回路３６−３は、書き込み制御回路３６−２において送信側クロックに同期して生成されたクロック乗り換えバッファ３６−１への書き込み制御信号を、受信側クロックで動作する回路を用いて受信側クロックに同期化させる。
【００３５】
読み出し制御回路３６−４は、書き込み制御回路３６−２で生成された制御信号を同期化回路３６−３で同期化した信号を受けて、クロック乗り換えバッファ３６−１のデータ読み出し制御信号を生成する。具体的には、読み出し制御回路３６−４は、クロック乗り換えバッファ３６−１の所定のアドレス領域に１０ビットの受信データが格納されたか否かを、前記同期化回路３６−３により同期化した制御信号を用いて判定する。そして、読み出し制御回路３６−４は、クロック乗り換えバッファ３６−１に格納された１０ビット受信データを読み出せるタイミングで、読み出し許可信号であるRead Enable信号を、受信側装置３０の動作クロックのタイミングに合わせて出力する。また、読み出し制御回路３６−４は、Read Enable信号がアサートされる期間、クロック乗り換えバッファ３６−１からの読み出しアドレスであるRead Address信号も出力する。Read Enable信号がアサートされる期間、クロック乗り換えバッファ３６−１の読み出しポートから、Write Address信号で示されるアドレス値に従って１０ビットデータが読み出される。
【００３６】
クロック乗り換えバッファ３６−１の読み出しポートから読み出されたデータは、受信側クロックで動作する１０ビットのデータレジスタ３７に書き込まれる。このようにして、境界位置で区切られた１０ビットデータについてのクロック乗換えが行なわれる。
【００３７】
ところで、前述の通り、送信側装置２０と受信側装置３０を同じ周波数で動作させる場合においても、装置ごとに異なるクロックオシレータを用いた場合には、クロックオシレータの個体差により送信側クロックと受信側クロックの周波数に微妙なズレが生じる場合がある。この送信側クロックと受信側クロックのズレについては、クロック乗り換えバッファ３６を用いて吸収することができる。
【００３８】
具体的には、前述の通り、8B10Bエンコード方式では通信データと合わせて特定の特殊コードを送信することができるので、クロック乗り換えバッファ３６−１の読み出しポートからのデータ読み出しをスキップさせることができるタイミング調整用の特殊コードを転送データに混ぜて送信することができる。送信側クロックと受信側クロックのズレについては、クロック乗り換えバッファ３６−１の書き込みアドレス（Write Address）と読み出しアドレス（Read Address）の差分を特定の検出回路（不図示）で検出することにより、クロックのズレを検出することができる。クロックのズレを検出した場合には、前記スキップさせることができるタイミング調整用の特殊コードのクロック乗り換えバッファ３６−１からの読み出しをスキップ（読み飛ばし）させ、あるいはクロック乗り換えバッファ３６−１からの読み出しを待たせることにより、クロックのズレを補正することができる。
【００３９】
図６は、受信側装置３０におけるシリアルデータ受信処理の動作タイムチャートを示した図である。図６の最上段（Serial Data）は、高速シリアルデータ通信の動作クロックに同期して、時刻t00〜t63までの期間にシリアルデータd03〜d66が１ビットずつ受信側装置３０に入力されてくる様子を示したものである。d66以降のデータも順次受信側装置３０に入力されてくるが、図６の説明においては省略する。説明の便宜上、送信側装置２０から送られてきたシリアルデータは、d10〜d19、d20〜d29、d30〜d39、d40〜d49、d50〜d59、といった単位のデータ境界で区切られており、d10〜d19のデータに受信データの境界位置を検出するための特定コードが含まれているものとする。以下、図３、図４の各回路と図６を対比させながら受信側装置３０の動作について説明する。
【００４０】
SerDes回路３２は、受信側装置３０に入力されたシリアルデータのデータ境界位置に関係なく、１０ビット単位で、例えば、図６においてシリアルデータd03〜d12等の１０ビットの単位でシリアル・パラレル変換を行い、１０ビットのパラレルデータd03-12を出力する（SerDes出力）。SerDes回路３２は、次の１０ビットのシリアルデータd13〜d22のシリアル・パラレル変換を行なうまでの期間であるＴ１００の期間中、変換済みの１０ビット・パラレルデータd03-12を保持する。SerDes回路３２は、後続のシリアルデータについても同様に順次パラレルデータに変換し、期間Ｔ１０１〜Ｔ１０５にかけて、変換されたパラレルデータ（d13-22、d23-32、d33-42、d43-52、d53-62）を順次出力する。
【００４１】
SerDes回路３２は、受信したシリアルデータからクロックを再生し、シリアル・パラレル変換のタイミングに合わせて、分周クロックを生成する。この分周クロックの分周比を１０分周とすると、分周クロックの周期は、図６における期間Ｔ１００〜Ｔ１０８の各期間に一致する。
【００４２】
受信データレジスタ３３−１は、前記１０分周クロックに同期したタイミングでSerDes回路３２から出力されたパラレルデータをラッチし、Ｔ１０１の期間、Data[9:0]出力にd03-12を出力する。受信データレジスタ３３−２は、受信データレジスタ３３−１から出力されたData[9:0]をラッチし、Ｔ１０２の期間、Data[19:10]にd03-12を出力する。
【００４３】
Ｔ１０２の期間、受信データレジスタ３３−１及び３３−２はd03〜d22の２０ビットを出力するので、特定コード検出回路３４−１〜３４−１０のそれぞれにおいて、特定コードd10〜d19の検出を行なう。図６の例では、受信データレジスタ３３から出力されるData[19]にd03が、Data[0]
にd22が格納されており、特定コードが含まれているd10〜d19はData[12:3]に含まれるので、特定コード検出回路（Ｄ）が特定コードを検出する。従って、Ｔ１０２の期間に特定コード検出回路（Ｄ）から出力される検出信号detect[D]信号がアサートされる。図６では、detect[D]信号の右側に描かれている横棒がdetect[D]信号がアサートされていることを示す。
【００４４】
検出位置保持回路３４−１１は、検出信号detect[D]を基にセレクタ３４−２１への選択信号を生成し、Ｔ１０３以降の期間についても、次にdetect[A:J]が変化するまでの間、生成した選択信号を保持する。セレクタ３４−２１は、Ｔ１０２以降の期間、検出位置保持回路から出力される選択信号に基づいてData[12:3]、つまりd10-19を選択し、１０ビット境界で区切られたデータであるData 10B Alignment[9:0]として出力する。Data 10B Alignment[9:0]は、１０ビットのデータレジスタ３５でラッチされ、Ｔ１０３の期間において、クロック乗り換えバッファ３６−１へのライトデータBuffer WT Data[9:0]として保持される。
【００４５】
前述の通り、受信側装置３０のクロックである受信側クロックは、送信側クロックとずれている場合がある。図６においては、受信側クロックに同期したＴ２０４〜Ｔ２０９等の期間が、送信側クロックに同期したＴ１００〜Ｔ１０８等の期間とずれたものとして描いている。
【００４６】
送信側クロックのＴ１０３の期間の終了時点においては、クロック乗り換えバッファ３６−１に１０ビットデータd10-19が格納された状態となっている。従って、クロック乗り換えバッファ３６−１の読み出しポート側では、Ｔ１０３よりも後のＴ２０４の期間において、受信側クロックに同期して１０ビットデータd10-19が読み出される（Buffer RD Data[9:0]）。後続の１０ビット単位のデータd20-29、d30-39、d40-49、d50-59、d60-69等も同様にクロック乗り換えバッファを介して受信側装置３０に読み出されていく。
【００４７】
図６では、シリアルデータのd66以降の記載を省略しているが、実際のデータ転送においては、d66以降のデータも継続して転送され、前記クロック乗り換えバッファ３６−１等を介して受信側装置３０に受信されていく。d10-19等の特定コードはトレーニング期間等に送信されるものであるが、上記d10-19の特定コードを検出した後は、受信データの境界位置は同じ間隔となるので、トレーニング期間に続く通常のデータ転送においても、継続してシリアルデータを正常に受信可能となる。
【００４８】
以上のように、シリアルバス２６を介して高速で転送されてきたシリアルデータに対して受信データ境界の検出処理を行なわないまま、SerDes回路３２でシリアル・パラレル変換し、比較的低速な分周クロックで受信データの境界位置の検出処理等を行なうことで、例えば10 Gbps以上といった高速なシリアル通信等にも対応することが可能となる。
【００４９】
ところで、上述の例では、転送データの境界位置に合わせて１０ビット単位で転送データをシリアル・パラレル変換して、境界位置の検出処理等を行なっているが、CPUのアクセス・レイテンシの短縮の観点からは、受信側装置３０での受信処理をより短い期間で行なうことが望ましい。このような要求に対応するため、以下に示す実施例では、上述の例による高速シリアル転送方式に加えて、アクセス・レイテンシを抑えることができるシリアル転送方法を示す。
【００５０】
図７は、実施例に係る受信側装置５０における受信データの境界位置を短いレイテンシで検出するための一実施例の機能概要を示した図である。図７では、シリアルバス２６を介して転送されるデータがＭビットごとに区切られているものとして説明する。シリアルバス２６から送信されてきたシリアルデータは、バッファ５１を介してSerDes回路５２に入力される。SerDes回路５２は、入力されたシリアルデータを、受信データを区切るＭビットよりも少ないビット数のＮビット単位でシリアル・パラレル変換を行なう。Ｍビットよりも少ないビット数のＮビット単位で受信データのデータ境界位置の検出等を行なうことにより、受信したシリアルデータから境界位置で区切られたＭビット単位のデータを取り出すまでの期間を短くすることが可能となる。
【００５１】
SerDes回路５２で変換されたＮビット単位のパラレルデータは、受信データレジスタ５３を構成するＫ個（Ｋは正の整数）のＮビットのデータレジスタ５３−１〜５３−Ｋを有するシフトレジスタに、受信された順に逐次格納される。ここで、SerDes回路５２では、受信データの境界位置に関係なくＮビット単位でシリアル・パラレル変換を行なうため、受信データの境界位置を検出する必要がある。従って、Ｎビット単位の複数のレジスタ５３−１〜５３−Ｋに格納できるデータの全ビット数が少なくとも（Ｍ＋Ｎ−１）で表される数以上になるように、データレジスタ５３−１〜５３−Ｋの個数Ｋを決定する。なお、図７の例では、受信データレジスタ５３をシフトレジスタとしているが、サーキュラーバッファのような構成であっても良い。
【００５２】
特定コード検出回路５４−１は、受信データレジスタ５３に格納された一連のデータを入力し、その一連のデータ中のＭビットデータが、受信データの境界位置を検出するための特定コードに一致するか否かを検出する。具体的には、特定コード検出回路５４−１は、Ｍビット単位で１ビットずつずらしたＮ個のデータ各々について特定コードと一致するか否かを検出する。従って、特定コード検出回路５４−１は、Ｎ個のＭビット単位のデータ各々が特定コードと一致するか否かを検出するための、Ｎ個の検出回路を有する（図７において不図示）。この特定コード検出回路５４−１のＮ個の検出回路に、前記受信データレジスタ５３に格納されたデータをＭビット単位で１ビットずつずらしたＮ個のデータを入力し、入力したＭビットデータが特定コードに一致するか否かを各々の検出回路が検出する。特定コード検出回路５４−１は、Ｎ個の検出回路のいずれかにおいて特定コードを検出した場合に、その検出結果から判別できる特定コードの検出位置を示す情報を検出信号（detect[1:N]）として検出位置保持回路５４−１１へ通知する。
【００５３】
検出位置保持回路５４−１１は、特定コード検出回路５４−１で生成された検出信号により得られる特定コードの検出位置を示す情報を保持し、セレクタ５４−２１への選択信号Select[1:N]を生成する。具体的には、検出位置保持回路５４−１１は、受信データの境界の区切り位置の情報を基に、受信側装置５０における処理レイテンシが最短になるように、受信データレジスタ５３−１及び５３−２から出力されるデータの中から特定のＮビットを選択するための選択信号を生成する。処理レイテンシが最短となるための処理の詳細については、後述する。
【００５４】
セレクタ５４−２１は、検出位置保持回路５４−１１で生成された選択信号を用いて、前記データレジスタ５３−１と５３−２とが出力する２Ｎビットのうちの、検出した区切り位置を基準としたＮビットデータを選択する。データレジスタ５５は、セレクタ５４−２１で選択されたＮビットのデータをラッチし、クロック乗り換えバッファ５６−１への書き込みデータを出力する。
【００５５】
書き込み開始タイミング調整回路５４−１２は、特定コード検出回路５４−１で生成された検出信号を基に、特定コード検出回路５４−１が検出した境界位置の次のＭビットデータの境界位置から開始するＮビットデータがセレクタ５４−２１に出現するタイミングを判定し、判定結果から書き込み制御回路５６−２への制御信号を生成する。
【００５６】
書き込み制御回路５６−２は、書き込み開始タイミング調整回路５４−１２で生成された制御信号を基に、クロック乗り換えバッファ５６−１への書き込み許可信号であるWrite Enable信号を生成し、合わせて書き込みアドレスであるWrite Address信号を生成する。このWrite Enable信号がアサートされている期間、Write Address信号で示される書き込みアドレスに従って、データレジスタ５５から出力されたデータがクロック乗り換えバッファ５６−１へ書き込まれる。尚、図４におけるデータレジスタ３５と同様に、受信側装置５０での動作周波数の要件を満たす場合には、データレジスタ５５の実装を省略することも可能である。その場合、書き込み制御回路５６−２で生成するWrite Enable等は１サイクル早いタイミングでアサートされることになる。
【００５７】
同期化回路５６−３は、書き込み制御回路５６−２で生成された書き込みアドレス等の制御信号を受信側クロックで同期化する。同期化回路５６−３で同期化された制御信号を受けて動作する読み出し制御回路５６−４、クロック乗り換えバッファ５６−１の読み出しポート、及びＭビットのデータレジスタ５７は、いずれも受信側クロックに同期して動作する。ここで、図７の実施例では、送信側クロックと受信側クロックは必ずしも同じ周波数である必要はなく、例えば、クロック周期の比率がＮ：Ｍとなるようなクロックを用いても良い。
【００５８】
読み出し制御回路５６−４は、同期化回路５６−３で同期化された書き込みアドレス等の情報を基に、クロック乗り換えバッファ５６−１の読み出しポートからＭビット単位の境界位置で区切られたデータを読み出せるタイミングでデータ読み出し用の制御信号を生成する。図７では図示されていないが、読み出し制御回路５６−４は、クロック乗り換えバッファ５６−１の読み出しポートからＭビット単位でデータを読み出せるタイミングで、読み出し許可信号であるRead Enable信号及び読み出しアドレス信号であるRead Address信号を出力する。このRead Enable信号がアサートされている期間、Read Address信号で示される読み出しアドレスに従って、クロック乗り換えバッファ５６−１の読み出しポートからＭビット単位でデータが読み出される。このようにして、クロック乗り換えバッファ５６−１でクロック乗り換えを行なうと同時に、クロック乗り換えバッファ５６−１にＮビット単位で書き込まれたデータが、境界位置で区切られたＭビット単位のデータとして読み出される。
【００５９】
クロック乗り換えバッファ５６−１の読み出しポートから読み出されたＭビットのデータは、受信側クロックで動作するＭビットのデータレジスタ５７に書き込まれる。このようにＭビットよりも少ないＮビット単位で境界検出処理を行なうことにより、図４の回路例に比べてより短い処理レイテンシで境界位置で区切られたＭビットデータを得ることができる。
【００６０】
図７では、実施例を一般化して説明しているが、以下、図４での説明にならって、8B10Bエンコードされた１０ビットデータを４ビット単位に分割して処理する実施例を例に詳細な動作を説明する。
【００６１】
図８は、実施例に係るシリアルバスの適用事例の機能概要を示した図である。図８において、送信側装置２０は図３における送信側装置２０と同じであるので説明を省略する。受信側装置６０では、図３における受信側装置３０と異なり、図８の楕円形の破線で囲まれた回路において、受信したシリアルデータに対する各種処理を４ビット単位で行なうことを特徴とする。
【００６２】
すなわち、SerDes回路６２は、４ビット単位でシリアル・パラレル変換を行う。受信データレジスタ６３は４ビットのデータレジスタを複数有し、４ビット単位でSerDes回路６２で変換されたパラレルデータを格納する。そして、１０ビット境界検出回路６４は、４つの検出回路（不図示）により、受信データの１０ビット単位の境界位置を検出する。検出されたデータ境界の位置情報を基に、受信データレジスタ６３に格納されたデータのうち特定の４ビットデータが選択され、４ビットのデータレジスタ６５でラッチされる。４ビットのデータレジスタ６５から出力されたデータは、４ビット単位でクロック乗り換えバッファ６６の書き込みポートに書き込まれる。
【００６３】
クロック乗り換えバッファ６６の読み出しポートでは、境界位置で区切られた１０ビット単位のデータを読み出せるタイミングで、１０ビットデータが読み出され、１０ビットの受信データレジスタ６７に格納される。すなわち、クロック乗り換えバッファ６６において、４ビットから１０ビットへのデータ変換が行なわれると同時に、送信側クロックと受信側クロックのクロック乗り換えも行なわれる。ここで、図８の実施例では、送信側クロックと受信側クロックは必ずしも同じ周波数である必要はなく、例えば、クロック周期の比率が２：５となるようなクロックを用いることができる。
【００６４】
受信データレジスタ６７に格納された１０ビットデータは、10B8B変換回路６８で所定の変換規則に従って８ビットデータに変換され、８ビットの受信データレジスタ６９に最終的な８ビットの受信データが格納される。
【００６５】
図９は、実施例に係る受信側装置３０内の受信データレジスタ６３から、クロック乗り換えバッファ６６の出力データを受ける１０ビットデータレジスタ６７までの回路の詳細を示した図である。図７での説明と対比すると、受信データの境界位置で区切られるデータのビット数Ｍは、図９において１０ビットであり、SerDes回路で変換する際のデータのビット数の単位であるＮは４ビットである。従って、受信データレジスタ６３を構成する４ビット単位のレジスタの数としては、（Ｍ＋Ｎ−１）＝（１０＋４−１）＝１３ビット分のデータを格納できる４つの４ビットレジスタ６３−１〜６３−４があれば足りることになる。すなわち、４ビット単位でデータをまとめた場合、受信データのずれは０〜３ビットとなり、１０ビット境界を検出するためには１３ビットあれば良いことになる。尚、受信データレジスタ６３は、リングバッファやＲＡＭ等で構成しても良いが、図９では、データレジスタ６３−１〜６３−４を用いたシフトレジスタで構成する実施例で説明する。
【００６６】
受信データレジスタ６３は、４つの４ビットレジスタ６３−１〜６３−４を有し、SerDes回路６２から送られてきた順に４ビットデータをレジスタ６３−１〜６３−４に格納する。換言すれば、SerDes回路６２から送られてきた４ビットデータは、順にデータレジスタ６３−１、６３−２、６３−３、６３−４へと４ビット単位でシフトされながら格納され、最初に送られてきたData[15]から最後に送られてきたData[0]までが受信データレジスタ６３に並ぶことになる。
【００６７】
SerDes回路６２では受信したシリアルデータの１０ビット境界位置に関係なく４ビット単位でシリアル・パラレル変換を行なうので、受信データレジスタ６３及び特定コード検出回路６４−１〜６４−４を用いて受信データの境界位置の検出が行なわれる。具体的には、１０ビット単位で１ビットずつずらした４つのデータ（Data[9:0], Data[10:1], Data[11:2], Data[12:3]）が受信データレジスタ６３から取り出され、それぞれ４つの特定コード検出回路６４−１〜６４−４のいずれかに入力される。特定コード検出回路６４−１〜６４−４は、各１０ビットデータに特定コードが含まれるか否かを各々検出し、検出結果に関する情報を検出信号（detect[A:D]）として出力する。受信データレジスタ６３に格納された一連のデータの中の１０ビットデータが特定コードを含む場合、特定コード検出回路６４−１〜６４−４の一つだけが特定コードを検出することになる。
【００６８】
検出位置保持回路６４−１１は、特定コード検出回路６４−１〜６４−４で生成された検出信号（detect[A:D]）により得られる特定コードの検出位置に関する情報を保持し、受信データの処理レイテンシが最短となるようにセレクタ６４−２１への選択信号Select[1:0]を生成する。ここで、選択信号は、前記４つのデータ（Data[9:0], Data[10:1], Data[11:2], Data[12:3]）のうち、特定コードが検出されたデータの下位４ビット、すなわち、Data[3:0], Data[4:1], Data[5:2], Data[6:3]のいずれかを選択する信号とすることもできる。しかし、選択信号は、後述の図１１〜図１４で説明する理由により、Data[3:0]とData[4:1]のいずれかのみを選択する信号とすれば足りる。選択信号は、再度受信データの１０ビット境界を検出する条件が発生するまで保持される。
【００６９】
セレクタ６４−２１は、検出位置保持回路６４−１１で生成された選択信号を用いて、データレジスタ６３−１及び６３−２に格納されたデータのうち、４ビットデータData[3:0]とData[4:1]のいずれかを選択する。特定コードが検出されて前記選択信号が確定した後は、セレクタ６４−２１は、選択信号の内容に従って同じビット位置の４ビットデータを選択し続ける。４ビットのデータレジスタ６５は、セレクタ６４−２１で選択された４ビットのデータをラッチする。
【００７０】
書き込みタイミング調整回路６４−１２は、特定コード検出回路６４−１〜６４−４から出力される検出信号detect[A:D]、又は検出位置保持回路６４−１１で保持する検出位置に関する情報を基に、クロック乗り換えバッファ６６−１へのデータ書き込みタイミングを決定する。書き込みタイミング調整回路６４−１２は、決定された書き込みタイミングを、例えば、クロック乗り換えバッファ６６−１へデータ書き込み可能な期間を制御するためのWrite valid信号として、書き込み制御回路６６−２に通知する。書き込みタイミングの決定に関する詳細については、図１１〜図１４を用いて後述する。
【００７１】
書き込み制御回路６６−２は、書き込みタイミング調整回路６４−１２で生成されたWrite valid信号を基に、クロック乗り換えバッファ６６−１の書き込みポートへの書き込み許可信号であるWrite Enable信号を生成し、合わせて書き込みアドレスであるWrite Address信号を生成する。
【００７２】
クロック乗り換えバッファ６６−１の書き込みポートには、書き込み制御回路６６−２から出力されるWrite Enable信号及びWrite Address信号に基づいて、送信側クロックに同期して、データレジスタ６５に格納された４ビットデータが書き込まれる。ここで、受信データの１０ビット境界のから５つの４ビットデータをクロック乗り換えバッファ６６−１に書き込むことにより、１０ビット境界で区切られた２つの１０ビットデータを得ることができる。得られた１０ビットデータは、受信側クロックに同期した所定のタイミングでクロック乗り換えバッファ６６−１の読み出しポートから読み出すことができる。このようにして、クロック乗り換えバッファ６６−１において、クロック乗り換えと合わせて、４ビットデータから１０ビットデータへの変換が行なわれる。
【００７３】
同期化回路６６−３は、書き込み制御回路６６−２で生成された書き込みアドレス等の制御信号を受信側クロックで同期化する。読み出し制御回路６６−４は、同期化回路６６−３で同期化された書き込みアドレス等の情報を基に、クロック乗り換えバッファ６６−１の読み出しポートから１０ビット単位の境界位置で区切られたデータを読み出せるタイミングでデータ読み出し用の制御信号を生成する。図９では図示されていないが、読み出し制御回路６６−４は、クロック乗り換えバッファ６６−１の読み出しポートから１０ビット単位でデータを読み出せるタイミングで読み出し許可信号であるRead Enable信号、及び読み出しアドレス信号であるRead Address信号を出力する。
【００７４】
次に、図９におけるクロック乗り換えバッファ６６−１の読み出しポート側に示すアドレス値を例に読み出しアドレス信号Read Addressの動作について説明する。クロック乗り換えバッファ６６−１の書き込みポート側で４ビット単位で書き込まれたデータは、クロック乗り換えバッファ６６−１の読み出しポート側において１０ビット単位で読み出される。
【００７５】
最初のRead Addressの値は、Data0〜Data4の５つの４ビットデータから２つの１０ビットデータを読み出せるように、Data0が格納されている最初のアドレス番地とする。この最初のアドレス番地で示される１０ビットデータが格納されたアドレス領域、すなわち、Data0、Data1、及びData2の下位側アドレス領域の２ビットで構成された１０ビットデータがクロック乗り換えバッファ６６−１から読み出され、セレクタ６６−５で選択される。
【００７６】
次に、２番目のRead Addressの値は、Data2の上位側２ビットの領域を示すアドレス番地とし、Data2の下位２ビット、Data3、及びData4で構成された１０ビットデータがクロック乗り換えバッファ６６−１から読み出され、セレクタ６６−５で選択される。Data5〜Data9からも同様に２つの１０ビットデータを読み出せるようにRead Addressが決定され、２つの１０ビットデータが同様に読み出される。
【００７７】
セレクタ６６−５は、読み出し制御回路６６−４から出力されるRead Address信号が示すアドレス値等に基づいて、クロック乗り換えバッファ６６−１から読み出される２つの１０ビットデータのいずれかを選択する。１０ビットのデータレジスタ６７は、セレクタ６６−５で選択された１０ビットデータをラッチする。データレジスタ６７で保持された受信データの境界位置で区切られた１０ビットデータは、その後10B8B変換回路６８で８ビットデータに変換される。
【００７８】
図１０は、実施例の受信側装置６０におけるシリアルデータ受信処理の動作タイムチャートを示した図である。図１０の最上段（Serial Data）は、高速シリアルデータ通信の動作クロックに同期して、時刻t00〜t50までの期間にシリアルデータd03〜d53が１ビットずつ入力されてくる様子を示したものである。ここで、説明の便宜上、送信側装置２０から送られてきたシリアルデータは、d10〜d19、d20〜d29、d30〜d39、d40〜d49、といった１０ビット単位のデータ境界で区切られており、d10〜d19のデータに受信データの境界位置を検出するための特定コードが含まれているものとする。図１０では、特定コードを構成するデータの格納位置を分かりやすくするために、星印を付している。以下、図８、図９の各回路と図１０を対比させながら受信側装置６０の動作について説明する。
【００７９】
SerDes回路６２は、受信したシリアルデータのデータ境界位置に関係なく、４ビット単位で、例えば、図１０においてシリアルデータd03〜d06、d07〜d10といった４ビットの単位でシリアル・パラレル変換を行い、４ビットのパラレルデータ（d03-06、d07-10等）を出力する（SerDes出力）。SerDes回路６２は、４ビット毎のシリアル・パラレル変換が行なわれるまでの期間中、変換済みのパラレルデータを保持する。SerDes回路６２は、後続のシリアルデータについても同様に順次パラレルデータに変換し、期間Ｔ３００〜Ｔ３０９にかけて、変換された４ビット・パラレルデータ（d07-10, d11-14, d15-18, d19-22, d23-26, d27-30, d31-34, d35-38, d39-42）を順次出力する。Ｔ３１０以降の期間についても同様に変換された４ビットのパラレルデータがSerDes回路６２から出力されていくが、図１０では省略する。
【００８０】
SerDes回路６２は、受信したシリアルデータからクロックを再生し、合わせてシリアル・パラレル変換のタイミングに合わせて分周クロックを生成する。図１０の実施例では、４ビット単位でシリアル・パラレル変換するので、分周クロックの分周比を例えば４分周とすることができる。この４分周クロックの周期は、図１０における期間Ｔ３００〜Ｔ３１２の各期間に一致する。
【００８１】
受信データレジスタ６３−１は、前記４分周クロックに同期したタイミングでSerDes回路６２から出力されたパラレルデータをラッチし、Ｔ３０１の期間に、Data[3:0]出力にd03-06を出力する。受信データレジスタ６３−１から出力されたデータはその後のＴ３０２〜Ｔ３０４の期間にかけて、順次、受信データレジスタ６３−２〜６３−４へシフトしていく。d03-06に続くd07-10以降のSerDes回路６２で変換された４ビット・パラレルデータについても同様に順次受信データレジスタ６３−１〜６３−４へシフトされていく。
【００８２】
特定コード検出回路６４−１〜６４−４の各々は、Ｔ３００〜Ｔ３１２等の各期間毎に入力された１０ビットが受信データの境界位置を示す特定コードと一致するかを比較する。図１０のタイムチャート例では、Ｔ３０５の期間において、受信データレジスタ６３−１〜６３−４から出力されるData[12:0]の中に、１０ビットの特定コード、すなわち、図１０の破線の楕円で囲まれたデータが出現する。Ｔ３０５の期間において、特定コードはData[12:3]に存在するため、特定コード検出回路（Ｄ）がこの特定コードを検出し、検出信号detect[D]をアサートする。
【００８３】
検出位置保持回路６４−１１は、Ｔ３０５の期間に特定コード検出回路（Ｄ）６４−４からアサートされた検出信号detect[D]で示される検出位置に関する情報を基に、セレクタ６４−２１への選択信号を生成する。ここで、検出位置保持回路６４−１１は、Ｔ３０６以降の期間で、受信側装置６０における処理レイテンシが最短となるように、１０ビットのデータ境界で区切られた次以降のデータが最初に受信データレジスタ６３−１に出現する適切なタイミングを導出する。このタイミングの導出については、図１１〜１４を用いて後述する。この適切なタイミングの期間で、受信データレジスタ６３−１から出力される、検出したデータ境界を基準とした４ビット単位のデータ（Data[3:0], Data[4:1], 等）を選択できるように前記選択信号の内容を決定する。決定された選択信号は、Ｔ３０６以降の転送期間中、検出位置保持回路６４−１１により保持される。
【００８４】
セレクタ６４−２１は、Ｔ３０５の期間以降、検出位置保持回路６４−１１が出力する選択信号の内容に応じて、受信データレジスタ６３からのData[3:0]またはData[4:1]のいずれかを選択し、Data 10B Alignment[3:0]として出力する。
【００８５】
書き込みタイミング調整回路６４−１２は、セレクタ６４−２１に境界で区切られた次以降の受信データの最初の４ビットが現れるＴ３０８以降の期間にWrite valid信号をアサートする。書き込み制御回路６６−２は、書き込みタイミング調整回路６４−１２から出力されたWrite valid信号を受けて、Ｔ３０９以降の期間において、クロック乗り換えバッファへのデータ書き込み許可信号であるWrite Enable信号（不図示）等を生成する。
【００８６】
検出位置保持回路６４−１１及び書き込みタイミング調整回路６４−１２においてどのように前記選択信号及びWrite valid信号を決定するかについて、図１１〜図１４を用いて説明する。
【００８７】
図１１は、特定コード検出回路（Ａ）で特定コードを検出した場合のクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミングを示した図である。図１１では、受信データレジスタ６３−１〜６３−４に格納された各データ（Data[3:0], Data[7:4], Data[11:8], Data[15:12]）が左側から右側へ向かって時間の経過と共に更新されていく様子が示されている。図１１中、Ｔ４００の期間において、Data[9:0]の位置にある特定コードd10-19が特定コード検出回路（Ａ）６４−１で検出される。
【００８８】
ここで、特定コードを検出したタイミングＴ４００の受信データの１０ビット境界であるData[9:6]のデータを利用しようとすると、受信データレジスタ６３−１及び６３−２を経由したデータを利用しなければならず、受信側装置６０における処理レイテンシが大きいという問題点がある。しかし、図１１において次のサイクル期間であるＴ４０１に、次の１０ビットデータのデータ境界にあるデータd20を含むデータd20-23が受信データレジスタ６３−１の出力Data[3:0]に来ることが分かる。そのため、特定コード検出から１サイクル待たせたＴ４０１の期間からの受信データd20-23から、クロック乗り換えバッファ６６−１による変換を開始することで、データレジスタ６３−１及び６３−２を通過する時間をスキップすることができ、受信側装置６０における処理レイテンシを短縮させることができる。
【００８９】
Ｔ４０１の期間においてData[3:0]の位置にあるd20-23のデータはセレクタ６４−２１で選択され、４ビットデータレジスタ６５を介してクロック乗り換えバッファ６６−１に書き込まれる。d20-23のデータは、クロック乗り換えバッファ６６−１に書き込まれる際、書き込みアドレス信号Write Addressで示されるライトポインタ（WT PT）が“０”を示す位置に書き込まれる。後続のd24-27、d28-31の４ビット単位のデータが書き込まれた後、クロック乗り換えバッファ６６−１の読み出しポート側では、リードポインタ（RD PT）が“０”のデータとしてd20-29の１０ビット単位で、受信データを読み出す。
【００９０】
図１２は、特定コード検出回路（Ｂ）で特定コードを検出した場合のクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミングを示した図である。図１２では、Ｔ４１０の期間において、Data[10:1]の位置にある特定コードd10-19が特定コード検出回路（Ｂ）６４−２で検出される。この場合、次のサイクルであるＴ４１１の期間に、次の１０ビットデータの境界位置にあるデータd20を含むデータd20-23がData[4:1]の位置に来ているので、Data[4:1]の位置にあるd20-23以降のデータについて、クロック乗り換えバッファ６６−１による変換処理をしていけば良い。
【００９１】
図１３は、特定コード検出回路（Ｃ）で特定コードを検出した場合のクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミングを示した図である。図１３では、Ｔ４２０の期間において、Data[11:2]の位置にある特定コードd10-19が特定コード検出回路（Ｃ）６４−３で検出される。この場合、次のサイクルであるＴ４２１の期間に、次の１０ビットデータの境界位置にあるデータd20を含むデータd20-23がData[5:2]に来るが、さらに２サイクル待つと、Ｔ４２３の期間にd30-39の１０ビットデータの境界位置にあるデータd30を含むd30-33がData[3:0]に来ることが分かる。そのため、Ｔ４２３の期間から受信データのクロック乗り換えバッファ６６−１による変換を開始することで、受信側装置６０での処理レイテンシが一番短くなるData[3:0]を使用することができる。
【００９２】
なお、この場合、d20-29のデータはクロック乗り換えバッファ６６−１により変換されないことになるが、特定コードの検出は、前述のようにトレーニング期間中に行なわれるのが一般であることから、データ転送の制御に関係しないデータが変換されなかったとしても差し支えない（図１４においても同様）。
【００９３】
図１４は、特定コード検出回路（Ｄ）で特定コードを検出した場合のクロック乗り換えバッファへの書き込みデータ選択と書き込みタイミングを示した図である。図１４では、Ｔ４３０の期間において、Data[12:3]の位置にある特定コードd10-19が特定コード検出回路（Ｄ）６４−４で検出される。この場合、次のサイクルであるＴ４３１の期間に、次の１０ビットデータの境界位置にあるデータd20-23がData[6:3]に来るが、さらに２サイクル待つと、Ｔ４３３の期間にd30-39の１０ビットのデータ境界にあるデータd30-33がData[4:1]に来ることが分かる。そのため、Ｔ４３３の期間から受信データのData[4:1]を使用してクロック乗り換えバッファ６６−１による変換を開始することができる。
【００９４】
図１１〜図１４で説明したように、特定コード検出後の所定のタイミング以降にセレクタ６４−２１でData[3:0], Data[4:1]のいずれかだけを選択することで、受信データの処理レイテンシを最短にしつつ、より少ない回路規模及び回路遅延で必要な受信データを取り出すことができる。
【００９５】
図１５は、実施例の受信側装置６０におけるシリアルデータ受信処理の動作タイムチャートを、クロック乗り換えバッファ６６−１の読み出しポート側の動作まで含めて示した図である。図１５において、セレクタ６４−２１でData 10B Alignmentが選択されるまでの動作波形については、図１０と同様であるので説明を省略する。尚、図１５において、受信側クロックとしては、シリアル転送クロックを１０分周した場合の周期に相当する周期を有するクロックで動作しており、受信側クロックの周期はＴ５００〜Ｔ５０４等の各周期に等しいものとする。以下、図８、図９の各回路と図１５を対比させながら受信側装置６０の動作について説明する。
【００９６】
セレクタ６４−２１で選択された４ビットのデータであるData 10B Alignmentは、４ビットデータレジスタ６５でラッチされ、クロック乗り換えバッファ６６−１へライトデータ（Buffer WT Data）として入力される。このとき、１０ビットのデータ境界にあるデータd30-33がクロック乗り換えバッファ６６−１へ入力されるＴ３０９の期間に合わせて、クロック乗り換えバッファ６６−１への書き込み許可信号であるWrite Enable信号が書き込み制御回路６６−２からアサートされる。このWrite Enable信号は、書き込みタイミング調整回路６４−１２で生成されたWrite valid信号を基に生成され、１０ビットのデータ境界にあるデータd30-33以降のデータがクロック乗り換えバッファ６６−１に入力されるＴ３０９以降の期間においてアサートされる。
【００９７】
クロック乗り換えバッファ６６−１へのWrite Enableは、Ｔ３０９以降にBuffer WT Dataのd30-33以降のデータに対してアサートされるので、クロック乗り換えバッファ６６−１にはd30-33以降のデータが書き込まれ、d10-19やd20-29のデータは書き込まれない。そのため、クロック乗り換えバッファ６６−１の読み出しポート側からは、Ｔ５０２以降の期間においてd30-39以降の１０ビットデータが読み出される。このようにして読み出された１０ビットデータは、受信データレジスタ６７、10B8B変換回路６８、及び受信データレジスタ６９を経て最終的な８ビットの受信データに変換される。
【００９８】
以上に述べた構成により、受信側装置６０のSerDes回路６２でのシリアル・パラレル変換から所定のデータ境界で区切られた受信データを取り出し、クロック乗り換えバッファ６６−１でのクロック乗り換えまでの処理を、高速かつ短い処理レイテンシで行なうことができる。そのため、高速シリアルバスを有するシステムの性能を向上させる事ができる。例えば、高速なシリアルバスの受信装置例に係る図６と実施例に係る図１５との各受信装置側での処理レイテンシを比較する。図６及び図１５の両方において、シリアルクロックの転送クロックのサイクルでt27のサイクルでd30のデータが入力されている。このd30のデータがクロック乗り換えバッファの読み出しポートから読み出されるタイミングは、高速なシリアルバスの受信装置例に係る図６ではt80であるのに対し、実施例に係る図１５ではt68となっているので、実施例において２２サイクル短縮されていることが分かる。
【００９９】
尚、実施例に係る発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。例えば、上述した実施形態において、転送データのデータ境界は１０ビット単位である必要はなく、他のビット数であってもよい。また、受信側装置のSerDes回路６０は、シリアル・パラレル変換を４ビット単位で行なうのではなく、受信側装置の動作周波数やデータ境界のビット数に合わせて他のビット数単位でシリアル・パラレル変換を行なうようにすることができる。
【０１００】
その際、受信データ境界で区切られたビット数が、SerDes回路でパラレルデータにまとめる際のビット数よりも大きくすることとし、パラレルデータにまとめる際のビット数も２のべき乗のビット数が望ましい。これは、受信側装置におけるSerDes回路において、容易に再生クロックに基づいて分周クロックを生成してシリアル・パラレル変換を行なうことが可能となるためである。また、パラレルデータにまとめる際のビット数は受信側装置の動作可能周波数にも依存するが、できる限り少ないビット数が望ましい。SerDes回路で変換したパラレルデータと受信データの境界位置とのずれを小さくできるためである。さらに、受信データの境界位置を区切るビット数との最小公倍数が出来る限り小さくなるように、パラレルデータにまとめる際のビット数を決定することが望ましい。そうすることで、クロック乗り換えバッファの段数を減らすことができ、クロック乗り換えバッファに対するデータの書き込み、読み出し制御が容易となる。
【産業上の利用可能性】
【０１０１】
本発明は高速転送されるシリアルデータの受信に利用することができる。
【符号の説明】
【０１０２】
５２        SerDes回路
５３        受信データレジスタ
５４−１    特定コード検出回路
５４−１１  検出位置保持回路
５４−１２  書き込みタイミング調整回路
５４−２１  セレクタ
５５        Ｎビットのデータレジスタ
５６−１    クロック乗り換えバッファ
５６−２    書き込み制御回路
５６−３    同期化回路
５６−４    読み出し制御回路
５７        Ｍビットのデータレジスタ
【図１】
0005531655.tif 000002
【図２】
0005531655.tif 000003
【図３】
0005531655.tif 000004
【図４】
0005531655.tif 000005
【図５】
0005531655.tif 000006
【図６】
0005531655.tif 000007
【図７】
0005531655.tif 000008
【図８】
0005531655.tif 000009
【図９】
0005531655.tif 000010
【図１０】
0005531655.tif 000011
【図１１】
0005531655.tif 000012
【図１２】
0005531655.tif 000013
【図１３】
0005531655.tif 000014
【図１４】
0005531655.tif 000015
【図１５】
0005531655.tif 000016