JP6221328B2 - 受信装置、情報処理装置及びデータ受信方法 - Google Patents

受信装置、情報処理装置及びデータ受信方法 Download PDF

Info

Publication number
JP6221328B2
JP6221328B2 JP2013095064A JP2013095064A JP6221328B2 JP 6221328 B2 JP6221328 B2 JP 6221328B2 JP 2013095064 A JP2013095064 A JP 2013095064A JP 2013095064 A JP2013095064 A JP 2013095064A JP 6221328 B2 JP6221328 B2 JP 6221328B2
Authority
JP
Japan
Prior art keywords
read
data
timing
signal
lanes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013095064A
Other languages
English (en)
Other versions
JP2014216981A (ja
Inventor
竜二 岩月
竜二 岩月
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013095064A priority Critical patent/JP6221328B2/ja
Priority to EP14162323.1A priority patent/EP2800322A1/en
Priority to US14/245,217 priority patent/US20140325107A1/en
Publication of JP2014216981A publication Critical patent/JP2014216981A/ja
Application granted granted Critical
Publication of JP6221328B2 publication Critical patent/JP6221328B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/10Distribution of clock signals, e.g. skew
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/368Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control
    • G06F13/372Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control using a time-dependent priority, e.g. individually loaded time counters or time slot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L25/00Baseband systems
    • H04L25/02Details ; arrangements for supplying electrical power along data transmission lines
    • H04L25/14Channel dividing arrangements, i.e. in which a single bit stream is divided between several baseband channels and reassembled at the receiver

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Power Engineering (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Synchronisation In Digital Transmission Systems (AREA)

Description

本件は、受信装置、情報処理装置及びデータ受信方法に関する。
装置(ポート)間で複数レーンのシリアル通信を行う場合、接続元装置の送信回路は送信データをレーン数に分割し、分割したデータをそれぞれのレーンで送信する。接続先装置の受信回路は、それぞれのレーンで受信したデータを復元する。
このような受信回路においてPhysical Coding Sublayer(PCS)クロックが使用される場合がある。
特開昭63−222536号公報 特開平4−268850号公報 特開平5−130090号公報 特開平5−292143号公報
このようなPCS受信回路においては、システムバス等のインタフェース(I/F)速度に依存して、PCSクロック回路のクロック(pcs_clock)の周波数を遅くするためにPCSクロック回路の通過レイテンシーが悪化する。
又、pcs_clockから装置内部のクロックに乗り換えるためのFirst-in First-outバッファ(FIFO)が必要なことも、レイテンシーを悪化させる一因となる。
1つの側面では、本発明は、装置間の通信におけるレイテンシーを低減することを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
このため、本開示の受信装置は、送信装置から複数のレーンを介してデータを受信する受信装置であって、前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、前記複数のレーン間の読み出しタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記バッファの読み出し動作クロックとに基づいて出力する速度差制御部と、前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力するデスキュー制御部と、前記送信装置と前記受信装置との周波数差の調整時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節するタイミング制御部と、をそなえる。
又、本開示の情報処理装置は、送信装置と、該送信装置から複数のレーンを介してデータを受信し、前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファをそなえる受信装置と、前記複数のレーン間の読み出しタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記バッファの読み出し動作クロックとに基づいて出力する速度差制御部と、をそなえ、前記受信装置は、前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力するデスキュー制御部と、前記送信装置と前記受信装置との周波数差の調整時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節するタイミング制御部と、をそなえ、前記送信装置は、前記複数のレーンのそれぞれに対して設けられ、前記第1のタイミング信号において送信データを書き込む第2のバッファをそなえる。
さらに、本開示のデータ受信方法は、複数のレーンを介してデータを受信するデータ受信方法であって、前記複数のレーン間の読み出しタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、受信データを格納する複数のバッファの読み出し動作クロックとに基づいて出力し、前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力し、前記送信装置と前記受信装置との周波数差の調整時を検出し、前記検出時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記複数のレーンのそれぞれに対して設けられ、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する。
本発明によれば、装置間の通信におけるレイテンシーを低減することができる。
実施形態の一例としてのXBをそなえるサーバの構成図である。 実施形態の一例としてのSBの構成図である。 実施形態の一例としてのIOBの構成図である。 実施形態の一例としてのXBBの構成図である。 実施形態の一例としてのXBの構成図である。 実施形態の一例としてのポート回路の構成図である。 接続元XBと接続先XBとにおける、オシレータ(OSI)と受信クロックとの関係を示す図である。 実施形態の一例におけるクロック周波数差補償パターンのフォーマットを示す図である。 実施形態の一例におけるトレーニングパターンのフォーマットを示す図である。 実施形態の一例としてのレーン間スキューの調整回路の構成図である。 実施形態の変形例としてのレーン間スキューの調整回路の構成図である。 実施形態の一例としての受信回路を示す構成図である。 実施形態の一例としての送信回路を示す構成図である。 実施形態の一例としてのエラスティックバッファ、及びクロック周波数差補償パターン/デスキュー検出部の構成図である。 実施形態の一例としての転送速度差制御部を例示する図である。 実施形態の一例としての受信制御部の構成を例示する図である。 実施形態の一例としてのクロック周波数差補償パターン部の構成を例示する図である。 実施形態の一例としての送信側XBポート回路の動作を示すフローチャートである。 実施形態の一例としての受信側XBポート回路の動作を示すフローチャートである。 実施形態の一例としてのエラスティックバッファのデスキュー時のタイムチャートである。 実施形態の一例としての受信制御部のデスキュー時のタイムチャートである。 実施形態の一例としてのエラスティックバッファのデスキュー完了後のクロック周波数差補償(ホールド)時のタイムチャートである。 実施形態の一例としての受信制御部のデスキュー完了後のクロック周波数差補償(ホールド)時のタイムチャートである。 実施形態の一例としてのエラスティックバッファのデスキュー完了後のクロック周波数差補償(2インクリメント)時のタイムチャートである。 実施形態の一例としての受信制御部のデスキュー完了後のクロック周波数差補償(2インクリメント)時のタイムチャートである。 実施形態の一例としての本発明のエラスティックバッファを使用しないで従来のエラスティックバッファを使用したポート回路の構成図である。 実施形態の一例としての本発明のエラスティックバッファを使用しないで従来のエラスティックバッファを使用した受信回路の構成図である。 実施形態の一例としての本発明のエラスティックバッファを使用しないで従来のエラスティックバッファを使用した送信回路の構成図である。
以下、図面を参照しながら本実施形態の一例を説明する。
(A)構成
まず、本実施形態の一例の構成について説明する。
図1は、実施形態の一例としてのクロスバー(XB)をそなえるサーバ101の構成図である。
サーバ101は、情報処理装置である。サーバ101は、システムボード(SB)102−0〜102−5(SB#0〜#5)、IOボード(IOB)103−0,103−1(IOB#0,#1)、クロスバーボード(XBB)104−0,104−1(XBB#0,#1)、及びバックプレーンボード(BP)105をそなえる。
なお、以下、実施形態の一例の各構成要素を示す符号としては、複数の構成要素のうち1つを特定する必要があるときには、符番にハイフンと数字とを付した符号××−0〜××−nを用いる。しかし、複数の構成要素のうちの任意の構成要素を指すときには、その構成要素の符番のみの符号××を用いる。
例えば、図1のシステムボードを示す符号としては、複数のシステムボードのうち1つを特定する必要があるときには符号102−0〜102−5を用いるが、任意のシステムボードを指すときには符号102を用いる。
SB102は、サーバ101における各種処理を行う基板であり、後述するように、Central Processing Unit(CPU)やDynamic Random Access Memory(DRAM)等をそなえる。
IOB103は、Local Area Network(LAN)やHard Disk Drive(HDD)等と接続するコネクタをそなえた基板である。
XBB104は、SB102やIOB103を相互に接続するためのクロスバースイッチをそなえる基板であり、当該XBB104に接続された機器同士を相互に接続する。
BP105は、SB102、IOB103及びXBB104を、図示しないコネクタを介して相互に接続する基板である。
SB−XBB間、IOB−XBB間、XBB−XBB間は、それぞれBP105を介して、システムバス106−0〜106−17により接続されている。システムバス106−0〜106−17は、マルチレーンシリアルバスである。
SB102上のCPUが他SBのDRAMにアクセスする場合は、システムバス106を使用して、XBB104経由でパケットが送信される。同様にIOB103上のGigabit Ethernet(登録商標)(GbE)コントローラがSB102上のDRAMにアクセスする場合もシステムバス106を使用して、XBB104経由でパケットが送信される。
例えば、SB102−0からSB102−1にアクセスする場合は、SB102−0からXBB104−0を介してSB102−1へとパケットが送信される。
又、SB102−0からSB102−4にアクセスする場合は、SB102−0からXBB104−0及びXBB104−1を介してSB102−4へとパケットが送信される。
パケット送受信において、XBB104を経由することにより、アクセスレイテンシーが増加する。そのため、XBB104に搭載されるクロスバースイッチ(XB)等はレイテンシーが小さいことが望まれる。
図2は、実施形態の一例としてのSBの構成図である。
SB102は、CPU111−1〜111−2、DRAM112−1〜112−2、及びメモリコントローラ(MC)113をそなえる。
CPU111は中央処理装置であり、SB102の各種処理を行う。
MC113は、DRAM112のデータの読み出し、書き込み、リフレッシュなどの制御を行う。MC113は、BP105を介して、XBB104とシステムバス115とにより接続されている。
MC113は、システムバス115にデータを送信する不図示の送信回路と、システムバス115からのデータを受信する不図示の受信回路とを有するポート回路114とをそなえる。
MC113はCPU111から送信されるパケットにより、SB102内のDRAM112にアクセスするか、他のSB102内のDRAM112にアクセスするのか、IOB103内のGbEコントローラやSerial Attached Small Computer System Interface(SAS)コントローラ123にアクセスするのかの制御を行う。
図3は、実施形態の一例としてのIOBの構成図である。
IOB103は、IOC121、GbEコントローラ122、SASコントローラ123、及びHard Disk Drive(HDD)124をそなえる。
IOC121はIOコントローラである。IOC121は、GbEコントローラ122及びSASコントローラ123と、それぞれIOバス126−1、126−2により接続されている。
IOC121には、SASコントローラ123を介してHDD124が接続されている。
IOC121は、BP105を介してXBB104とシステムバス127によって接続されている。
IOC121は、システムバス127にデータを送信する不図示の送信回路と、システムバス127からのデータを受信する不図示の受信回路とを有するポート回路125をそなえる。
GbEコントローラ122は、GbEでの通信を行うコントローラであり、LANポートを有する。
SASコントローラ123は、シリアル通信を行うコントローラであり、HDD124と接続される。
図4は、実施形態の一例としてのXBBの構成図である。
XBB104は、XB131をそなえる。
XB131は、データの経路を動的に切り替えて選択するクロスバースイッチである。XB131はシステムバス132−1〜132−5により、他のXBB104、SB102、又はIOB103に接続されている。
XB131は、SB102等から送信されるパケットを受信し、そのパケットのヘッダーに含まれる宛先を認識し、送信先にルーティングを行う。
図5は、実施形態の一例としてのXB131の構成図である。
XB131は、例えば、XBB104に搭載されるLarge Scale Integration(LSI)である。XB131は、ポート回路142−0〜142−4とスイッチ及びデータバッファ143とをそなえる。又、データバッファ143には図示しないデータバッファもそなえられている。
ポート回路142は、システムバスのプロトコル制御を行う。
スイッチ及びデータバッファ143は、ポート回路142のいずれかからパケットを受け取り、パケットの宛先に指定されているポート回路142にパケットを出力する。
又、XB131は、Inter-Integrated Circuit(IC)バス138を介してサービスプロセッサ139に接続されている。サービスプロセッサ139は、XB131のI/F速度とcore_clockとを設定する。
図6は、図5に示したポート回路(受信装置)142の構成図である。
図6に示すように、各ポート回路142には、送信I/F(I/F (TX))と受信I/F(I/F (RX))とが接続される。
本例では、ポート数がポート0〜4の5ポート(図5参照)、システムバスのレーン数は、レーン0〜レーン7の8レーン(図6参照)である。
以下の説明及び図面において、アスタリスク(*)は、0〜7のレーン番号のいずれかを示すために用いられる。
又、mも0〜7のレーン番号のいずれかを示すために用いられる。このため、レーンm(m=0〜7)と接続される受信レーンブロック150−m又は送信レーンブロック170−mを、「レーンm受信部」又は「レーンm送信部」と呼ぶことがある。
又、以下の説明及び図面において、信号名に含まれる「p」は、0〜4のポート番号のいずれかを表わす。例えば、受信クロック信号rx_p_0_clockは、ポート0のレーン0の受信クロック信号を指す場合には、rx_0_0_clockとなる。
各ポート回路142は、レーンm受信部150−0〜150−7、受信データ復元部154、レーンm送信部170−0〜170−7、送信データ分割部174、転送速度差制御部(速度差制御部)175、及び受信制御部155をそなえる。なお、図6は、転送速度差制御部175と受信制御部155とを便宜上、一体に示している。
レーンm受信部150は、システムバスの対応するレーンからデータを受信する。
各レーンm受信部150は、デシリアライザ(SerDes (RX))151−0〜151−7及びエラスティックバッファ153−0〜153−7をそなえる。
デシリアライザ151は、受信した1ビット幅のシリアルデータから16ビット幅のパラレルデータを生成する。
エラスティックバッファ153は、受信データを格納し、接続装置間のクロック周波数差を吸収するFIFOである。
エラスティックバッファ153において、エラスティックバッファ153のライトアドレスは1サイクル毎に1ずつインクリメントされる。一方、リードアドレスは、転送速度差制御部175(図12参照)からの信号に基づいて、1ずつインクリメントされるが、周波数差補償パターン検出時はクロック周波数差補償パターン/デスキュー検出部(デスキュー制御部)160(図12参照)からの信号と、受信制御部155(図12参照)からの信号とに基づいて、ホールド、1インクリメント或いは2インクリメントされる。エラスティックバッファ153の詳細な構成については図14を参照して後述する。
受信データ復元部154は、各レーンm受信部152で受信した複数(図中の例では8)の20ビットのデータを併合して、160ビットの受信データを復元する。
レーンm送信部170は、システムバスの各レーンにデータを送信する。
レーンm送信部170は、シリアライザ(SerDes (TX))171−0〜171−7、送信回路172−0〜172−7、及び送信データ分割部174をそなえる。
シリアライザ171は、送信する16ビット幅のパラレルデータから1ビット幅のシリアルデータを生成する。
送信回路172−0〜172−7は、それぞれ、送信ギアボックス(TX-Gear;ギアボックス)173−0〜173−7をそなえる。
送信ギアボックス173は、送信データを格納するFIFOである。
送信データ分割部174は、160ビットの送信データを複数(図中の例では8)の20ビットのデータに分割して、各送信回路172に出力する。
転送速度差制御部175は、送信ギアボックス173への書き込みや、エラスティックバッファ153の読み出しの有効タイミングを示す、例えば1ビットの信号data_valid_timing(第1のタイミング信号)を生成する。転送速度差制御部175の詳細な構成については、図15を参照して後述する。
受信制御部155は、data_valid_timing信号と、後述するエラスティックバッファ153−0〜153−7からの信号とを受け取り、エラスティックバッファ153−0〜153−7のリードポインタ(read_pointer)値の更新を制御する信号を出力する。受信制御部155の詳細な構成については、図16を参照して後述する。
なお、図6に示すクロック信号core_clockは、XB131のLSI内部で使用される1ビットのクロック信号であり、I/F速度に依存せず、例えば0.8GHzで動作する。図6のレーン0〜7の各々の受信用のクロックrx_p_*_clockと送信用のクロックtx_p_*_clockとは、例えばI/F転送速度の16分の1の速度で動作する。
なお、前述のように、I/F速度とcore_clockとは、サービスプロセッサ(図5参照)によって設定される。
なお、図6の一点鎖線はクロックドメイン境界を示す。
図7は、接続元XB131と接続先XB131とにおける、オシレータ(OSI)205と受信クロックとの関係を示す図である。
自XB131が接続先XB131と接続されており、接続先XB131が送信側、自XB131が受信側である。
自XB131は、オシレータ205、Phase Locked Loop(PLL)206、PCS207、及びデシリアライザ208をそなえる。デシリアライザ208は、前述のデシリアライザ151をそなえ、デシリアライザ151は内部にClock Data Recovery(CDR)210をそなえる。
オシレータ205は、クロックの生成に用いられる基準周波数を発生させる。
PLL206は、オシレータ205からの基準周波数からXB131の内部クロックcore_clockを生成する。
デシリアライザ208は、受信した1ビット幅のシリアルデータから16ビット幅のパラレルデータを生成する。
Clock Data Recovery(CDR)210は、受信用のクロックrx_clockを復元する。デシリアライザから出力される16ビット幅のパラレルデータはrx_clockと同期している。
PCS207は、core_clock、受信用のクロックrx_clock及び送信用のクロックtx_clockを受け取る。受信側207PCSはエラスティックバッファでrx_clockからcore_clockへの乗換、10B8B変換、及び、デスクランブルを行う。送信側PCS207はスクランブル、8B10B変換、及び、送信ギアボックス173でcore_clockからtx_clockへの乗換を行う。
なお、前述のレーン毎の受信用クロックrx_p_*_clockはCDR210から、レーン毎の送信用クロックtx_p_*_clockはPLL212から生成される。
一方、接続先XB131は、オシレータ205、PLL206、PCS207、PLL212及びシリアライザ211をそなえる。シリアライザ211は、前述のシリアライザ171をそなえる。
シリアライザ211は、送信する16ビット幅のパラレルデータから1ビット幅のシリアルデータ生成を行う。
PLL212は、オシレータ205からの基準周波数から送信用のクロックtx_clockを生成する。
図7に示すように、自XB131が接続先XB131とには、それぞれ別のオシレータ205からリファレンスクロックが供給される。
前述のように、rx_p_*_clockは、CDR210から復元される。ここでは、例えば、rx_p_*_clockは、接続先XB131のオシレータ205の逓倍であり、core_clockと±300ppm以内のクロック周波数差が存在する。
これらcore_clock、rx_p_*_clock、tx_p_*_clock間の周波数差を吸収するため、図6の転送速度差制御部175は、送信ギアボックス173への書き込みや、エラスティックバッファ153の読み出しの有効タイミングを示す信号data_valid_timingを生成する。
例えば、I/F速度が16GHzの場合、転送速度差制御部175は、毎サイクル、data_valid_timingに‘1’を出力し、毎サイクル、送信ギアボックス173にデータを書き込ませる。又、後述するクロック周波数差補償を行なわない限り、毎サイクル、エラスティックバッファ153からデータを読み出させる。
I/F速度が10GHzの場合、転送速度差制御部175は、8サイクル中5サイクルの間、data_valid_を‘1’にする。I/F速度が8GHzの場合、2サイクル中1サイクルの間、data_valid_timingを‘1’にする。
このとき、転送速度差制御部175は、data_valid_timingに‘1’と‘0’とをできるだけ均等に出力することで、カットスルーによるパケット溜め込み時間を短縮する。
ここで、カットスルーとは、パケットの末尾まで受信せずに、データバッファにパケットの末尾の受信が保証できる量だけデータを蓄積した状態で、パケットの先頭の送信を開始する動作を指す。
例えば、転送速度差制御部175はI/F速度が10GHzの場合、data_valid_timingに1,1,1,1,1,0,0,0…のように1、0を連続させる代わりに、1,1,0,1,1,0,1,0…を繰り返し設定し、0、1をできるだけ交互に出現させる。
ここで、送信側の送信ギアボックス173(図6参照)は、tx_p_*_clockの毎サイクル、16ビット幅のデータを読み出し、シリアライザ171に出力する。又、送信ギアボックス173への書き込みは、core_clockでdata_valid_timing=1の時のみ20ビット幅のデータを書き込むことで、送信側のI/FとXB131内部との転送速度差を吸収する。
一方、受信側のエラスティックバッファ153(図6参照)は、クロック周波数差補償機能、レーン間スキューの調節位置ホールド機能、及びカットスルー動作を考慮した送速度差吸収機能をそなえる。
エラスティックバッファ153は、rx_p_*_clockに同期して16ビット幅のデータを毎サイクル書き込む。
エラスティックバッファ153は、書き込み時にはシンボル境界を検出し、読み出す際に20ビットのシンボル単位で読み出せるようにアライメントする。
読み出し時には、エラスティックバッファ153から、core_clockに同期して20ビット幅でデータが読み出される。読み出し制御としては、クロック周波数差補償機能、レーン間スキューの調節位置ホールド機能、及びI/FとXB131内部との転送速度差吸収機能をそなえる。
エラスティックバッファ153は、クロック周波数差補償パターンを使用して、クロック周波数補償を行う。
図8は、実施形態の一例におけるクロック周波数差補償パターンのフォーマットを示す図である。
実施形態の一例としてのクロック周波数差補償パターンは、複数(例えば7個)のシンボルで構成され、1つのシンボルは20ビットで構成されている。シンボルの種類としては、CH及びDMがある。
CHは、Clock Headを表わし、クロック周波数差補償パターンの先頭を示すシンボルである。
DMは、Dummyを表わし、クロック周波数差補償動作時に追加又は削除されるシンボルである。DMの追加又は削除は、エラスティックバッファ153のリードアドレス制御で行なわれる。
エラスティックバッファ153は、図8に示すクロック周波数差補償パターンを受信すると、クロック周波数補償を行う。送信回路172は、最大±300ppmの周波数差を吸収するため、1666シンボル時間に一度、全てのレーンに同じタイミングで周波数差補償パターンを送信する必要がある。
ここで、1シンボル時間とは、1シンボルを送受信する時間、つまり20ビットを送受信する時間である。
エラスティックバッファ153は、CHとDMとの連続(以下、CH+DMと記する)を受信すると、クロック周波数補償パターンを受信したと認識する。
I/F速度が16Gbpsの場合、つまり、毎サイクルdata_valid_timing=1となる場合は、一般に、エラスティックバッファ153は、リードポインタ(read_pointer)を、毎サイクル1インクリメント(+1)する。
しかし、クロック周波数差補償パターンの受信時には、エラスティックバッファ153のリードポインタ(read_pointer)がライトポインタ(write_pointer)よりも早い場合は、エラスティックバッファ153は、リードポインタ(read_pointer)を1サイクルホールドする。このとき、リードデータにおいて、クロック周波数差補償パターンのDMシンボルが、1サイクル余分に読み出される。
一方、エラスティックバッファ153のリードポインタ(read_pointer)がライトポインタ(write_pointer)よりも遅い場合は、エラスティックバッファ153は、リードポインタ(read_pointer)を2インクリメント(+2)する。このとき、リードデータにおいて、クロック周波数差補償パターンのDMシンボルが1個読み飛ばされる。
エラスティックバッファ153は、リードポインタ(read_pointer)がライトポインタ(write_pointer)よりも早いか遅いかを、ライトポインタ(write_pointer)とリードポインタ(read_pointer)との差分(以下、ライト−リードアドレス差分と呼ぶ)を所定の基準値(以下、この値を所定値と呼ぶ)と比較することにより判定する。ライト−リードアドレス差分が所定値と等しい場合には、エラスティックバッファ153は、リードポインタ(read_pointer)のホールドも2インクリメントも行わない。
なお、所定値は、XB131に予め設定されている値である。
I/F速度が16Gbpsの場合、1シンボルタイムとcore_clock1サイクルとが一致するため、エラスティックバッファ153は、クロック周波数差を吸収するためのクロック周波数補償パターン1個につき1サイクル、ホールド又は+2する。
つまり、I/F速度とLSI内部の転送速度とが同じであるため、転送速度差制御部175は、data_valid_timingを‘0’にしてXB131のLSI内部で間引きしてデータを読み出す必要がないので、毎サイクルdata_valid_timingを‘1’にする。
I/F速度が8Gbpsの場合は、1シンボルタイムがcore_clock2サイクル分に対応し、転送速度差制御部175はdata_valid_timingが‘1’と‘0’とを繰り返す。エラスティックバッファ153は、1つのクロック周波数差補償パターンに対して、1シンボルタイム補正する必要があるため、core_clockで最大2サイクル分補正する。
リードポインタ(read_pointer)が所定値よりcore_clock2サイクル分(=1シンボルタイム)早い場合、エラスティックバッファ153は、CH+DM受信時に、data_valid_timingが連続して‘1’の場合、リードポインタ(read_pointer)2回分をホールドする。
リードポインタ(read_pointer)が所定値よりcore_clock1サイクル分(=0.5シンボルタイム)早い場合には、エラスティックバッファ153は、data_valid_timing=1のときに、リードポインタ(read_pointer)を1回分ホールドする。
このように、本実施形態の一例としてのエラスティックバッファ153は、ライト−リードポインタ(read_pointer)差分の所定値からのずれに応じて、リードポインタ(read_pointer)をホールドする時間を調整する。
詳細には、リードポインタ(read_pointer)が所定値よりcore_clock2サイクル分(=1シンボルタイム)遅い場合、CH+DMを受信した次のサイクルのdata_valid_timing=0のタイミングで、エラスティックバッファ153は、リードポインタ(read_pointer)を+1する。又、その直後にdata_valid_timing=1のタイミングでリードポインタ(read_pointer)を+2する。
一方、リードポインタ(read_pointer)が所定値よりcore_clock1サイクル分(=0.5シンボルタイム)遅い場合、data_valid_timing=0のタイミングでリードポインタ(read_pointer)を+1するか、或いは、data_valid_timing=1のタイミングでリードポインタ(read_pointer)を+2する。
I/F速度が12Gbpsの場合、1シンボルタイムがcore_clockの4/3サイクル分に対応し、転送速度差制御部175は、data_valid_timingとして“1,1,1,0”を繰り返す。
12Gbpsでリードポインタ(read_pointer)がcore_clock2サイクル分遅い場合、data_valid_timingに‘1’が連続するため、data_valid_timing=0になったタイミングで、エラスティックバッファ153は、リードポインタ(read_pointer)を+1することができない。
クロック周波数補償パターンが十分に長いことがプロトコル上保障されていれば、エラスティックバッファ153は、data_valid_timing=1のときにリードポインタ(read_pointer)を+2し、次のdata_valid_timing=1のときにさらに+2する。或いは、エラスティックバッファ153が、data_valid_timing=1のときにリードポインタ(read_pointer)を3インクリメント(+3)することが考えられる。
しかし、プロトコル上、周波数補償パターンが十分に長くない場合には、エラスティックバッファ153は、最初のdata_valid_timing=1のときに+2し、次にdata_valid_timing=0となるまで待ってリードポインタ(read_pointer)を+1する。さらに、例外的ではあるが、data_valid_timing=0のときもリードデータを読み出す必要がある。
なお、カットスルー性能を低下させないためには、パケット内の隙間量が予想できることが必要となる。
このように、エラスティックバッファ153が行うクロック周波数差補償においては、転送速度差制御部175が生成するdata_valid_timing=1のときに決められる量よりもパケット内の隙間が大きくならない。つまり、クロック周波数差補償が、カットスルー時のパケット蓄積に影響しない。
ここで、各レーンがそれぞれ独立してクロック周波数差補償を行うと、デスキュー調節位置がずれてしまう。
そのための解決策として、エラスティックバッファ153とデスキューバッファとを一体化し、レーン間スキュー調節完了後は、ポート単位でクロック周波数差補償を行う方法が考えられる。
図9は、実施形態の一例におけるトレーニングパターンのフォーマットを示す図である。
トレーニングパターンは、リンク初期化時に接続先ポート間の情報交換やデスキュー等に使用される。
実施形態の一例としてのトレーニングパターンは、32個のシンボルで構成される。シンボルの種類としては、TH、AL、DS、及びSIがある。なお、1つのシンボルは20ビットで構成されている。
THは、Training Pattern Headを表わし、トレーニングパターンの先頭を示すシンボルである。
ALは、Alignmentを表わし、20ビット境界パターンを示すシンボルである。
DSは、Deskewを表わし、デスキューパターンを示すシンボルである。
SIは、Sequence Informationを表わし、初期化手順で接続先ポートに通知する情報を示すシンボルである。
なお、トレーニングパターンにおいて、1つのシンボルでTH、AL、DSの機能を持つフォーマットを使用することもできる。
又、トレーニングパターンや、図8を参照して上述したクロック周波数差補償パターンの長さは、上述した長さに限定されない。トレーニングパターン及びクロック周波数差補償パターンの長さは、送信回路172の動作周波数、配置配線やシリアルバスプロトコルに依存して、適宜変更することができる。
図10に、実施形態の一例としてのレーン間スキューの調整回路の構成図を示す。
この構成においては、エラスティックバッファ153を用いてレーン間スキューを調整し、各レーンのエラスティックバッファ153が受信制御部155と接続される。レーン*(*=0〜7の整数)のエラスティックバッファ153は、CH+DMを検出すると、受信制御部155にclock_pattern_detect_*信号をアサートする。
ここで、clock_pattern_detect_*信号は、対応するレーン*においてクロック周波数差補償パターンを受信したことを示す1ビットの信号であり、エラスティックバッファ153により設定される。
又、deskew_pattern_detect_*信号(第2のタイミング信号)は、対応するレーンにおいてデスキュー指示を受信したことを示す1ビットの信号であり、エラスティックバッファ153により設定される。
一方、address_hold_*信号は、対応するレーン*のエラスティックバッファ153のリードアドレスのホールドを指示する1ビットの信号である。
address_plus2_*信号は、対応するレーン*のエラスティックバッファ153のリードアドレスの2インクリメントを指示する信号である。
deskew_flag_*信号は、レーン間スキューの調整を行うことを示すデスキューを指示する1ビットの信号である。
read_fast_*[1:0]及びread_slow_*[1:0]は、ライト−リードアドレス差分の状態を示す2ビットの信号である。
ここで、エラスティックバッファ153はデスキュー機能を持つので、各レーンが同じタイミングでclock_pattern_detect_*信号をアサートする。
エラスティックバッファ153のリードポインタ(read_pointer)がcore_clock1サイクル分早い場合は、エラスティックバッファ153はread_fast_*[1:0]に“01”を出力する。
リードポインタ(read_pointer)がcore_clock2サイクル分以上早い場合は、エラスティックバッファ153は、read_fast_*[1:0]に“10”を出力する。
エラスティックバッファ153は、リードポインタ(read_pointer)が1サイクル分遅い場合は、read_slow_*[1:0]に“01”を出力し、2サイクル分以上遅い場合は、read_slow_*[1:0]に“10”を出力する。
ライト−リードアドレス差分が所定値以内の場合、エラスティックバッファ153は、read_fast_*[1:0]に“00”を、read_slow_*[1:0]に“00”をそれぞれ出力する。
受信制御部155は、clock_pattern_detect_*信号がアサートされたタイミングで、各レーンのread_fast_*[1:0]とread_slow_*[1:0]との値に応じて、address_hold_*信号及びaddress_plus2_*信号のそれぞれの値を制御する。
詳細には、受信制御部155は、各レーンのread_fast_*[1:0]とread_slow*[1:0]との値が異なる場合は、read_fast_*[1]の情報を最優先する。以降、read_fast_*[0]、read_slow_*[0]、read_slow_*[1]の順に優先する。
つまり、受信制御部155は、read_fast_*[1]がアサートされているレーンが1つでも存在する場合には、リードポインタ(read_pointer)をcore_clock2サイクル遅くする制御を行う。つまり、受信制御部155は、data_valid_timingが連続して‘1’の間、合計2サイクル間、address_hold_*信号をアサートする。address_hold_*信号がアサートされている間、エラスティックバッファ153は、エラスティックバッファ153のリードポインタ(read_pointer)をホールドする。
全レーンでread_fast_*[1]=‘0’であり、かつ、いずれかのレーンでread_fast_*[0]がアサートされている場合、受信制御部155は、data_valid_timing=1のタイミングで1サイクル間address_hold_*信号をアサートする。
全レーンでread_fast_*[1:0]が“00”であり、かつ、全てのレーンでread_slow_*[1:0]が“00”の場合、受信制御部155は何もしない。
全レーンでread_fast_*[1:0]=“00”であり、かつ、全てのレーンでread_slow_*[1:0]が“00”ではなく、かつ、いずれかのレーンでread_slow_*[1:0]が“01”の場合、受信制御部155は、1サイクル間address_plus2_*信号をアサートする。
全レーンでread_fast_*[1:0]が“00”であり、かつ、全てのレーンでread_slow_*[1:0]が“10”の場合、受信制御部155は、連続する2サイクル間、address_plus2_*信号をアサートする。
エラスティックバッファ153は、address_plus2_*信号をアサートされている時にdata_valid_timing=1の場合、read_pointerを+2する。一方、data_valid_timing=0の場合、エラスティックバッファ153は、read_pointerを+1する。
但し、プロトコル上、クロック周波数補償パターンが十分であることを保証されていない場合、エラスティックバッファ153は2サイクル目のaddress_plus2_*信号が‘1’であることを覚えておき、次にdata_valid_timing=0になったタイミングでread_pointerを+1し、かつデータを読み出す。
或いは、上記実施形態の変形例として、デスキューバッファにクロック周波数補償情報を通知し、エラスティックバッファ153においてずれた分のレーン間スキュー位置を、デスキューバッファで再調節する方法がある。
図11に、実施形態の変形例としてのレーン間スキューの調整回路の構成図を示す。
この変形例においては、デスキューバッファ157−0〜157−7を用いてレーン間スキューを調整する。
各レーン0〜7に、レーン間スキューの調節を行うデスキューバッファ157−0〜157−7がそれぞれ設けられている。
ここで、read_hold_done_*信号は、エラスティックバッファ153のリードポインタ(read_pointer)をホールドしたことを示す1ビットの信号である。
又、read_do_plus2_done_*信号は、エラスティックバッファ153のリードポインタ(read_pointer)を2インクリメント(+2)したことを示す1ビットの信号である。
各エラスティックバッファ153はクロック周波数差補償動作を行ない、リードポインタ(read_pointer)をホールドした場合、デスキューバッファ157にread_hold_done_*信号をアサートする。
各エラスティックバッファ153は、data_valid_timing=1のときにread_pointerを+2した場合、若しくは、data_valid_timingがデアサートされてread_pointerを+1した場合、デスキューバッファ157にread_do_plus2_done_*信号をアサートする。
デスキューバッファ157は、エラスティックバッファ153から出力された上記信号の値に応じて、デスキューバッファ157の読み出し位置を調節し、レーン間スキューの再調節を行う。
図12は、実施形態の一例としての受信回路152を示す構成図である。
この構成においては、図10のレーン間スキューの調整回路が採用されている。又、以降に示す例は、全て図10のレーン間スキューの調整回路を採用した構成を示す。
受信回路152は、レーンブロック150−0〜150−7、受信データ復元部154、受信制御部155及び転送速度差制御部175、及びトレーニングパターン受信部164をそなえる。
実施形態の一例において、レーン数は、レーン0〜レーン7の8レーンである。データは、送信回路172で分割され、レーン0〜レーン7を通じて送信される。
以下の説明及び図面において、レーンm(m=0〜7)と接続するレーンブロック150−mを、レーンmブロックと呼ぶことがある。
レーンmブロックは、レーンmを通過するデータを処理する。
図12においては、レーン0ブロックのみ詳細な構成図を示す。レーン1ブロック〜レーン7ブロックの構成は、レーン0ブロックと同様である。
レーン0ブロック150−0は、デシリアライザ151、20ビット境界検出部159、エラスティックバッファ153、クロック周波数差補償パターン/デスキュー検出部160、8B10B変換部161、及びデスクランブラ162をそなえる。
デシリアライザ151は、受信した1ビット幅のシリアルデータを16ビット幅のパラレルデータに変換する。又、デシリアライザ151は、受信したシリアルデータからクロックリカバリにより、受信クロック(rx_p_*_clock)を生成する。
クロックcore_clockは自ポート(接続先ポート)のリファレンスクロックより生成される。
デシリアライザ151、20ビット境界検出部159、及びエラスティックバッファ153の書き込みまでは、rx_p_*_clockと同期して動作する。
エラスティックバッファ153からの読み出し、クロック周波数差補償パターン/デスキュー検出部160、8B10B変換部161、及びデスクランブラ162は、core_clockと同期して動作する。
20ビット境界検出部159は、受信データの境界パターンを検出して、受信データを、10b−code単位の20ビット境界データに調節する。
エラスティックバッファ153は、クロック周波数差を吸収するFIFOである。エラスティックバッファ153は、通常時はリードアドレスを転送速度差制御部175から出力されるdata_valid_timing信号に応じて、1インクリメント(+1)する。しかし、受信制御部155、及び、クロック周波数差補償パターン/デスキュー検出部160からの制御信号に応じて、リードアドレスをホールド、1インクリメント、若しくは2インクリメント(+2)する。
エラスティックバッファ153は、データを読み出し、該データをクロック周波数差補償パターン/デスキュー検出部160及び8B10B変換部161に出力する。又、ライトアドレスとリードアドレスとの差分と所定値の大小関係を示す信号を出力する。
エラスティックバッファ153の詳細については、図14を参照して後述する。ここで、エラスティックバッファ153には、同期化Flip Flop(FF)166,167、ライトアドレス制御部165、FIFO168、及びリードアドレス制御部169が含まれる。
図12に示すように、クロック周波数差補償パターン/デスキュー検出部160は、エラスティクバッファ153に、リードアドレスを制御する信号を出力する。クロック周波数差補償パターン/デスキュー検出部160は、クロック周波数差補償パターン及びデスキューを検出する。そして、レーン間のスキューを合わせるdeskew_pattern_detect_*信号を出力する。このため、クロック周波数差補償パターン/デスキュー検出部160は、デスキュー制御部としての機能を有する。
8B10B変換部161は、10b−codeのデータを8b−codeに変換する。
シリアルデータ転送は8B10B変換データで行なわれる。送信回路172で8ビット幅のデータ(8b−code)は10ビット幅のデータ(10b−code)に変換され、変換されたデータが送信される。受信回路152では、10b−codeを8b−codeに復元する。
なお、8B10B以外の変換を行うシリアルバスプロトコルの場合、8B10B変換部161を、プロトコルに依存した他の変換部に適宜変更してもよい。又、20ビット境界検出部159もプロトコルに依存して適宜変更する。
デスクランブラ162は、生成多項式に基づき、疑似ランダマイズ化されたデータを復元する。
トレーニングパターン受信部164は、トレーニングパターンを認識し、初期化シーケンスを制御する。
受信制御部155及び転送速度差制御部175は、各レーンブロックのエラスティックバッファ153、及び、クロック周波数差補償パターン/デスキュー検出部160と接続している。受信制御部155及び転送速度差制御部175は、レーン間のスキューを検出し、レーン間スキューの調整を行うことを示すデスキュー指示(deskew_flag)を各レーンのエラスティックバッファ153に出力する。又、レーン間のスキューを無くすために、後述するように、リードアドレスを調節する信号も、各レーンのエラスティックバッファ153に出力する。
図13は、実施形態の一例としての送信回路172を示す構成図である。
この構成においては、図10のレーン間スキューの調整回路が採用されている。
送信回路172は、送信データ分割部174、レーンブロック170−0〜170−7、転送速度差制御部175、及びトレーニングパターン/クロック周波数差補償パターン生成部178をそなえる。
実施形態の一例において、レーン数は、レーン0〜レーン7の8レーンである。データは、送信回路172で分割され、レーン0〜レーン7を通じて送信される。
以下の説明及び図面において、レーンm(m=0〜7)と接続するレーンブロック170−mを、レーンmブロックと呼ぶことがある。
レーンmブロックは、レーンmを通過するデータを処理する。
図13においては、レーン0ブロックのみ詳細な構成図を示す。レーン1ブロック〜レーン7ブロックの構成は、レーン0ブロックと同様である。
送信データ分割部174は、前述のように160ビットの送信データを分割して、各送信回路172に出力する。
レーン0ブロック170−0は、シリアライザ171、送信ギアボックス173、8B10B変換部176をそなえる。
スクランブラ177は、一般的なAdditive Synchronous Scramblerであり、生成多項式に基づき、20ビットの送信データを疑似ランダマイズ化する。
8B10B変換部176は、8b−codeのデータを10b−codeに変換する。
なお、8B10B以外の変換を行うシリアルバスプロトコルの場合、8B10B変換部176を、プロトコルに依存した他の変換部に適宜変更してもよい。
送信ギアボックス173は、FIFOであり、core_clockクロックで20ビット幅のデータを書き込まれ、tx_p_*_clockクロックで16ビット幅のデータを読み出される。
シリアライザ171は、受信した16ビット幅のパラレルデータを、1ビット幅のシリアルデータをに変換する。
クロックcore_clockは自ポート(接続先ポート)のリファレンスクロックより生成される。
送信ギアボックス173への書き込みまでは、core_clockと同期して動作する。
送信ギアボックス173からの読み出しとシリアライザ171とは、tx_p_*_clockと同期して動作する。
クロック周波数差補償パターン/デスキュー検出部160は、エラスティクバッファ153に、リードアドレスを制御する信号を出力する。
シリアルデータ転送は8B10B変換データで行なわれる。送信回路172で8ビット幅のデータ(8b−code)は10ビット幅のデータ(10b−code)に変換され、変換されたデータが送信される。受信回路152では、10b−codeを8b−codeに復元する。
トレーニングパターン/クロック周波数差補償パターン生成部178は、シリアルバス初期化中または初期化完了後に関わらず、接続元XB131と接続先XB131とのクロック周波数差補償のため、クロック周波数差補償パターンを定期的に送信する。例えば、接続装置間のリファレンスクロック周波数許容誤差を±300ppm以内とする場合は、1666サイクル以内に一度、クロック周波数差補償パターンを送信する。
転送速度差制御部175は、前述の受信回路152の転送速度差制御部175と共通であるため、その説明を省略する。
図14は、実施形態の一例としてのエラスティックバッファ153の構成図である。
エラスティックバッファ153は、ライトアドレス制御部165、リードアドレス制御部169、FIFO168、同期化FF166,167、及びクロック周波数差補償パターン/デスキュー検出部160をそなえる。
ライトアドレス制御部165は、FIFO168のライトアドレス(write_address)を制御する。
リードアドレス制御部169は、FIFO168のリードアドレス(read_address)を制御する。
FIFO168は、例えば、20ビット幅の22段のFIFOである。
クロックrx_p_*_clockが、ライトアドレス制御部165とFIFO168とに入力される。ライトアドレス制御部165及びFIFO168は、rx_p_*_clockに同期して動作する。上述のように、rx_p_*_clockは、デシリアライザ151によって、受信したシリアルデータからクロックリカバリにより生成される。
クロックcore_clockが、同期化FF166,167、リードアドレス制御部169及びクロック周波数差補償パターン/デスキュー検出部160に入力される。同期化FF166,167、リードアドレス制御部169及びクロック周波数差補償パターン/デスキュー検出部160は、core_clockと同期して動作する。
FIFO168は、例えば、20ビット幅の22段のFIFOである。又、ライトクロックとリードクロックとの差のため、書き込みと読み出しに僅かなスループット差がある。実施形態の一例において、FIFO段数は22段であるが、これに限られるものではない。システムバスのレーン間スキューが小さい場合は、FIFO段数をより小さくしてもよい。
FIFO168には、ライトアドレス制御部165から入力されるライトアドレスwrite_addressにデータwrite_dataが書き込まれる。
ライトアドレス制御部165は、20ビット境界検出部159からの境界検出通知(alignment_detect信号)を受けると、シンボル単位でFIFO168へデータ(alignment_data)の書き込みを開始する。
ライトアドレス制御部165は、rx_p_*_clockに同期して書き込みを行う。すなわち、rx_p_*_clockがライトクロックとなる。
ライトアドレス制御部165は、write_enable信号が1の時にFIFO168のアドレスwrite_addressにデータを書き込む。ライトアドレス制御部165は、ライトアドレス(write_address)を0から開始し、常に1ずつインクリメントする。ライトアドレス制御部165は、ライトアドレスを21でラップラウンドして0に戻す。ライトアドレス制御部165は、ライトアドレスを0に戻す時に、リード側にライトアドレスが一周したことを通知するために、write_lap_round信号を反転する。
同期化FF166は、core_clockと同期して、write_enable信号をwrite_enable_sync信号として出力する。
同期化FF167は、core_clockと同期して、write_lap_round信号をwrite_lap_round_sync信号として出力する。
リードアドレス制御部169は、write_enable信号を同期化したwrite_enable_sync信号のアサートより、read_address=0より読み出しを開始する。ライトアドレス制御部165は、基本的にread_addressを1サイクルごとに1ずつインクリメントし、read_addressが21になるとラップラウンドして、read_addressを0に戻す。
リードアドレス制御部169は、core_clockと同期してFIFO168の読み出しを行う。すなわち、core_clockがリードクロックとなる。FIFO168から読み出されたデータdata_20bitは、クロック周波数差補償パターン/デスキュー検出部160及び8B10B変換部161に出力される。
リードアドレス制御部169はwrite_lap_round信号をcore_clockと同期化したwrite_lap_round_sync信号の変化(反転)を検出することでライトアドレスが0になったことを認識する。これにより、ライトアドレスとリードアドレスの差分であるライト−リードアドレス差分を認識する。ライト−リードアドレス差分はクロック周波数差によって変化する。
ライトクロックとリードクロックを比較して、ライトクロックの方が早い(リードクロックの方が遅い)場合は、ライト−リードアドレス差分は基準値より徐々に大きくなる。
ライトクロックの方が遅い(リードクロックの方が早い)場合は、ライト−リードアドレス差分は基準値より徐々に小さくなる。
リードアドレス制御部169は、ライト−リードアドレス差分が基準値より大きい場合、リードクロックの方が遅いことを示すために、read_slow_*[1:0]に値を設定する。詳細には、リードアドレス制御部169は、エラスティックバッファ153のリードポインタ(read_pointer)がcore_clock1サイクル分遅い場合は、read_slow_*[1:0]に“01”を設定する。リードポインタ(read_pointer)がcore_clock2サイクル分以上遅い場合は、エラスティックバッファ153は、read_slow_*[1:0]に“10”を設定する。
リードアドレス制御部169は、ライト−リードアドレス差分が基準値より小さい場合、リードクロックの方が早いことを示すために、read_fast_*[1:0]に値を設定する。詳細には、リードアドレス制御部169は、エラスティックバッファ153のリードポインタ(read_pointer)がcore_clock1サイクル分早い場合は、read_fast_*[1:0]に“01”を設定する。リードポインタ(read_pointer)がcore_clock2サイクル分以上早い場合は、エラスティックバッファ153は、read_fast_*[1:0]に“10”を設定する。
ライト−リードアドレス差分が基準値にある場合は、リードアドレス制御部169は、read_slow_*[1:0]、read_fast_*[1:0]の両方に値“00”を設定する。read_slow_*[1:0]及びread_fast_*[1:0]は、クロック周波数差補償パターン/デスキュー検出部160に出力される。
リードアドレス制御部169はクロック周波数差補償機能により、ライト−リードアドレス差分を基準値に調節する。
基準値への制御は、address_hold_*信号及びaddress_plus2_*信号の値に従って行う。
リードアドレス制御部169はaddress_hold_*信号がアサートされている(値‘1’である)の時はリードアドレスのインクリメントを行なわない。
一方、リードアドレス制御部169はaddress_plus2_*信号がアサートされている(値‘1’である)の時はリードアドレスを+2インクリメントする。
ライト−リードアドレス差分情報は、write_lap_round_sync信号の変化、或いはaddress_hold及びaddress_plus2_*信号のアサートにより更新される。
エラスティックバッファ153は、alignment_detectを契機に書き込みを開始する。ライトアドレスは毎サイクル毎に1インクリメントし、エラスティックバッファ153のリードアドレス制御部169で20ビットアライメントされているように、16ビット単位でライトを行う。write_enable信号が同期化されwrite_enable_sync信号が出力され、リードアドレス制御部169は書き込み状態であることを認識する。
ライトアドレス制御部165は、write_addressに値‘0’を書き込む時にwrite_lap_round信号をトグルさせ、リードアドレス制御部169にライトアドレス位置を通知する。
リードアドレス制御部169は、write_lap_round信号が同期化されたwrite_lap_round_sync信号により、write_addressが‘0’に設定されたタイミングを認識して、ライト−リードアドレス差分を認識する。
リードアドレス制御部169は、ライト−リードアドレス差分が所定値になるように、read_addressをホールド、2インクリメントすることで調節する。
デスキュー完了前の状態では、各レーンのエラスティックバッファ153は、ライト−リードアドレス差分が所定値になるように、clock_pattern_detect_*=1のタイミングで、それぞれ独自にリードアドレスを調節する。
デスキュー完了後は、レーン間スキュー調節位置がずれないように、エラスティックバッファ153は、read_fast[1:0]、read_slow[1:0]を受信制御部に出力し、受信制御部から出力されるaddress_hold_*信号、address_plus2_*信号に従って、ライト−リードアドレス差分を調節する。
図15は、実施形態の一例としての転送速度差制御部175を例示する図である。
転送速度差制御部175は、×20逓倍器301、加算器302、比較器303、減算器304、セレクタ305、及びFF306をそなえる。
加算器302は、サービスプロセッサ139から、値がvalue_A(MHz)であるI/F速度を入力される。一方、×20逓倍器301は、サービスプロセッサ139から、値がvalue_B(MHz)であるcore_clock周波数を入力される。また、転送速度差制御部175は、一時変数であるvalue_Cも使用する。このvalue_Cは、value_B×20より小さい値である。
ここで、転送速度差制御部175は、data_valid_timing信号の計算を、core_clockの毎サイクル行う。×20逓倍器301から出力されるvalue_B×20が、加算器302から出力されるvalue_C+value_A以下の場合、つまり、(value_B×20)≦(value_C+value_A)の条件を満たしている場合は、比較器303は、data_valid_timing=1を出力する。一方、この条件を満たしていない場合、比較器303はdata_valid_timing=0を出力する。
1サイクル後のvalue_Cの値をpost_value_Cとする場合、post_value_Cは、減算器304、セレクタ305及びFF306において、value_Cから、post_value_C=(value_C+value_A)%(value_B×20)として計算される。ここで、‘%’は剰余を求める演算子である。そして、post_value_Cが、新たなvalue_Cとして加算器302に入力される。
なお、上記計算に、value_B×20が含まれるのは、I/F部分では、各レーンは1ビット幅でデータ転送を行い、core_clock領域では20ビット幅でデータ転送を行うためである。この時、value_A≦(value_B×20)を満たしていない場合、I/F速度が常に速く、エラスティックバッファ153がオーバーフローするため、value_Aとvalue_Bとは、value_A≦(value_B×20)を満たしている必要がある。
図16は、実施形態の一例としての受信制御部155の構成を例示する図である。
受信制御部155は、デスキュー制御部179と、クロック周波数差補償パターン部180とをそなえる。
デスキュー制御部179は、各レーンからのdeskew_pattern_detect_*信号よりレーン間スキューを調節するように、address_hold_*信号を出力する。デスキュー制御部179は、デスキューの実行時にはdeskew_timをアサートし、デスキューの実行時及びデスキュー完了後はdeskew_flagをアサートする。
クロック周波数差補償パターン部180は、デスキュー完了後、図17を用いて後述するように、各レーンから出力されるclock_pattern_detect_*信号、read_slow_*[1:0]及びread_fast_*[1:0]から、cmpns_adrs_hold信号とcmpns_adrs_plus2信号とを生成する。
ここで、cmpns_adrs_hold信号は、address_hold_*信号の生成に使用され、エラスティックバッファ153のリードアドレスをライトアドレスに対して遅らせるよう指示する。cmpns_adrs_hold信号は、clock_pattern_detect_*、data_valid_timing、read_slow_*[1:0]及びread_fast_*[1:0]から生成される。
cmpns_adrs_plus2信号は、address_plus2_*信号の生成に使用され、エラスティックバッファ153のリードアドレスをライトアドレスに対して早くするよう指示する。cmpns_adrs_plus2信号は、clock_pattern_detect_*、data_valid_timing、read_slow_*[1:0]及びread_fast_*[1:0]から生成される。
図17は、図16のクロック周波数差補償パターン部180の構成を例示する図である。
クロック周波数差補償パターン部180は、セレクタ309,310と、2ビット幅のfast_cnt[1:0]カウンタ311と、2ビット幅のslow_cnt[1:0]カウンタ312とをそなえる。
fast_cnt[1:0]カウンタ311は、全てのレーンのclock_pattern_detect_*=1であり、かつ、いずれかのレーンのread_fast_*[1:0]≠“00”の時に、read_fast_*[1:0]によって決定される値がセットされる。cmpns_adrs_holdは、data_valid_timing=1であり、かつ、fast_cnt[1:0]≠“00”の時に1がアサートされ、fast_cnt[1:0]はcmpns_adrs_hold=1の時に−1される。
slow_cnt[1:0]カウンタ312は、全てのレーンのclock_pattern_detect_*=1であり、かつ、全てのレーンのread_slow_*[1:0]≠“00”の時に、read_slow_*[1:0]によって決定される値がセットされる。cmpns_adrs_plus2は、slow_cnt[1:0]≠“00”の時に1がアサートされ、slow_cnt[1:0]はmpns_adrs_plus2=1の時に−1される。
デスキュー完了後のクロック周波数差補償(ホールド)時には、全てのレーンのclock_pattern_detect_*=1かついずれかのレーンのread_fast_*[1:0]≠“00”の場合、受信制御部155は各レーンのaddress_hold_*信号をアサートする。read_fast_*[1:0]=“10”の場合は、次にdata_valid_timing=1となるタイミングで、2サイクル間、address_hold_*信号をアサートしてアドレスホールドを通知する。read_fast_*[1:0]=“01”の場合は、次にdata_valid_timing=1となるタイミングで、1サイクル間、address_hold_*信号をアサートしてアドレスホールドを通知する。この動作については、図22,図23を参照して後述する。
デスキュー完了後のクロック周波数差補償(2インクリメント)時には、全てのレーンのclock_pattern_detect_*=1であり、かつ、全てのレーンのread_slow_*[1:0]≠“00”の場合、受信制御部155は各レーンにaddress_plus2_*信号をアサートする。read_slow_*[1:0]=“10”の場合は、2サイクル間、cmpns_adrs_plus2=1をアサートする。read_slow_*[1:0]=“01”の場合は、1サイクル間、address_plus2_*信号を出力する。この動作については、図24,図25を参照して後述する。
なお、図15〜図17に示した回路は例示に過ぎず、上記の動作を実現するものであれば、他の回路構成を使用することも可能である。
(B)動作
以下、本実施形態の一例としてのXB131の動作について説明する。
まず、図7に示した接続先(送信側)XB131の動作を示す。
図18は、実施形態の一例としての送信側XB131のポート回路142の動作を示すフローチャート(ステップS1〜S10)である。
ステップS1において、送信側XB131の転送速度差制御部175は、サービスプロセッサ139(図5参照)によってI/F及びcore_clock周波数を設定され、data_valid_timingの出力を開始する。
ステップS2において、送信側XB131のトレーニングパターン/クロック周波数差補償パターン生成部178が、デスキューなし状態を示す情報を持つトレーニングパターンを送信する。
なお、トレーニングパターン/クロック周波数差補償パターン生成部178は、トレーニングパターン又は周波数差補償パターンを、全てのレーンで同じタイミングで送信する。
ステップS3において、トレーニングパターン/クロック周波数差補償パターン生成部178は、前回の周波数補償パターンを送信してから1666サイクル経過しているか判定する。
1666サイクル経過している場合(ステップS3のYESルート参照)、ステップS4において、トレーニングパターン/クロック周波数差補償パターン生成部178は、周波数差補償パターンを送信してステップS5に進む。
一方、1666サイクル経過していない場合(ステップS3のNOルート参照)、ステップS5において、送信側XB131は、受信側XB131がデスキューを完了しているかを判定する。
デスキューを完了していない場合(ステップS5のNOルート参照)、処理がステップS2に戻る。
一方、デスキューを完了している場合(ステップS5のYESルート参照)、ステップS6において、トレーニングパターン/クロック周波数差補償パターン生成部178は、デスキュー完了状態を示す情報を持つトレーニングパターンを送信する。
次に、ステップS7において、トレーニングパターン/クロック周波数差補償パターン生成部178は、前回の周波数補償パターンを送信してから1666サイクル経過しているか判定する。
1666サイクル経過している場合(ステップS7のYESルート参照)、ステップS8において、トレーニングパターン/クロック周波数差補償パターン生成部178は、周波数差補償パターンを送信してステップS9に進む。
一方、1666サイクル経過していない場合(ステップS7のNOルート参照)、ステップS9において、トレーニングパターン/クロック周波数差補償パターン生成部178は、受信側XB131のトレーニングパターン受信部164がデスキュー完了状態を示す情報を持つトレーニングパターンを受信したかを判定する。
受信側XB131がデスキュー完了状態を示す情報を持つトレーニングパターンを受信していない場合(ステップS9のNOルート参照)、処理がステップS6に戻る。
一方、受信側XB131がデスキュー完了状態を示す情報を持つトレーニングパターンを受信している場合(ステップS9のYESルート参照)、ステップS10において、トレーニングパターン/クロック周波数差補償パターン生成部178は、デスキュー完了状態を示す情報を持つトレーニングパターンを16個送信し、パケットの送信を開始する。その後処理は終了する。
次に、図7の自(受信側)XB131の動作を示す。
図19は、実施形態の一例としての受信側XB131のポート回路142の動作を示すフローチャート(S21〜S29)である。
ステップS21において、受信側XB131の転送速度差制御部175は、サービスプロセッサ139(図5参照)によってI/F及びcore_clock周波数を設定され、data_valid_timingの出力を開始する。
ステップS22において、受信側XB131の20ビット境界検出部159は、受信トレーニングパターンの“AL”によって、20ビット境界パターンを検出したかを判定する。
20ビット境界パターンを検出していない場合(ステップS22のNOルート参照)、20ビット境界パターン未検出を示す情報を送信してステップS22に戻る。
20ビット境界パターンを検出した場合(ステップS22のYESルート参照)、ステップS23において、エラスティックバッファ153は、20ビット境界パターンの検出後から20ビットのシンボル境界に合わせて、自身への書き込み及び自身からの読み出しを開始する。
その際、エラスティックバッファ153は、エラスティックバッファ153への書き込み状態であることをwrite_enable_sync信号(図14参照)によって、リードアドレス制御部169に通知する。リードアドレス制御部169は、write_lap_round_sync信号でライトアドレスに‘0’が設定されたタイミングを認識し、リード−ライトアドレスの差分が適切な値になるように、読み出しを開始する。
ステップS24において、クロック周波数差補償パターン/デスキュー検出部160は、クロック周波数差補償パターンを受信したかを判定する。
クロック周波数差補償パターンを受信した場合(ステップS24のYESルート参照)、ステップS25において、受信側XB131の各レーンのエラスティックバッファ153は独立に、クロック周波数差補償を行う。その際、エラスティックバッファ153のライトアドレスとリードアドレスとの差分(ライト−リードアドレス差分)が基準値以内に入るように、エラスティックバッファ153のリードアドレスを調節する。受信制御部155は全てのレーンでデスキューパターンを検出することを継起にレーン間スキューを調節する。その後、処理はステップS26に進む。
クロック周波数差補償パターンを受信していない場合(ステップS24のNOルート参照)、ステップS26において、デスキュー制御部179は、デスキューを完了しているかを判定する。
デスキューを完了していない場合(ステップS26のNOルート参照)、処理はステップS23に戻る。
デスキューが完了している場合(ステップS26のYESルート参照)、ステップS27において、クロック周波数差補償パターン/デスキュー検出部160は、クロック周波数差補償パターンを受信したかを判定する。
クロック周波数差補償パターンを受信した場合(ステップS27のYESルート参照)、ステップS28において、受信側XB131の各レーンのエラスティックバッファ153は受信制御部155と協調することで、ポート単位に、クロック周波数差補償を行う。その後、処理はステップS29に進む。
クロック周波数差補償パターンを受信していない場合(ステップS27のNOルート参照)、ステップS29において、トレーニングパターン受信部164は、デスキュー完了状態を示す情報を持つトレーニングパターンを受信しているかを判定する。
デスキュー完了状態を示す情報を持つトレーニングパターンを受信していない場合(ステップS29のNOルート参照)、処理がステップS27に戻る。
一方、デスキュー完了状態を示す情報を持つトレーニングパターンを受信している場合(ステップS29のYESルート参照)、処理は終了する。
シリアルバス初期化完了後に、送信側XB131のトレーニングパターン/クロック周波数差補償パターン生成部178はトレーニングパターン送信を止め、データ送信を開始する。トレーニングパターン/クロック周波数差補償パターン生成部178は、初期化完了後も定期的なクロック周波数差補償パターン送信を継続する。
受信側XB131は受信データの復元を行う。このとき、受信側XB131のエラスティックバッファ153はポート単位のクロック周波数差補償を継続する。
初期化時に送信するトレーニングパターンは初期化状態を示す情報を持つ。それにより接続先ポートがどの状態であるか、例えば、20ビット境界パターンを検出した、デスキューが完了した等の状態を知ることができ、同期して初期化処理を完了することができる。例えば、デスキュー制御部179は、接続元ポート201から受信するトレーニングパターンと自ポート(接続先ポート)211が送信するトレーニングパターンとから、両ポートがデスキュー完了状態であることを認識して、初期化が完了し、パケット送受信が可能な状態であると判断する。
なお、動作は図18,図19の動作に限定するものではなく、シリアルバスのプロトコルに合わせて、適宜変更されてもよい。
図20,図21に、デスキュー時のタイムチャートを示す。
図20は、実施形態の一例としてのエラスティックバッファ153のデスキュー時のタイムチャートである。図21は、実施形態の一例としての受信制御部のデスキュー時のタイムチャートである。図20,図21は、同一時間範囲における各信号の状態を示す。
図20には、レーン0の各信号のみを示し、レーン2〜7ブロックの信号は省略する。
又、図20〜図25において、「×」は、パケット等の受信データを示し、“CH”,“DM”,“DS”以外のデータである。
t1において、レーン0が最初にデスキューパターンを検出し、t2において、レーン1が最後にデスキューパターンを検出している(図21参照)。
デスキュー未完了状態で、全レーンでデスキューパターンを検出時に、スキューの一番大きい、つまり、最後にデスキューパターンを受信したレーンのタイミングで、deskew_flag信号がアサートされると、address_hold_*信号がアサートされる。
address_hold_*信号がアサートされると、リードアドレス(read_address)はホールドされる。したがって、図20において、read_addressは、アドレス8で9サイクル、ホールドされている。
又、全レーンでデスキューパターンを検出後に、t3において、deskew_flag及びdeskew_timがアサートされる。deskew_timはデスキューによるアドレスホールド動作完了後に、t4においてデアサートされる。なお、レイテンシーが最短になるように、デスキューパターンを最後に検出したレーン1はデスキューによるアドレスホールドを行なわない。それ以外のレーンはdata_valid_timing=1、かつ、レーン間スキューが調整される時間、address_hold_*信号がアサートされる。
図20,図21の例では、レーン0に対して、t3からt4の間8サイクル間、address_hold_0=‘1’がアサートされる。その内、data_valid_timing=1の5サイクル間がデスキュー調節のためにリードアドレスを停止した時間である。data_valid_timing=0の3サイクル間は、デスキュー調節とは関係なく、転送速度差吸収のために停止した時間である。
エラスティックバッファ153は、deskew_flagがデアサートされているときは各レーン独立でクロック周波数差補償動作を行う一方、deskew_flagがアサートされているときはポート単位でクロック周波数差動作を行う。
図22,図23に、デスキュー完了後にポート単位でクロック周波数差補償を行う動作のタイムチャート(ホールド)を示す。
図22は、実施形態の一例としてのエラスティックバッファ153のデスキュー完了後のクロック周波数差補償(ホールド)時のタイムチャートである。図23は、実施形態の一例としての受信制御部のデスキュー完了後のクロック周波数差補償(ホールド)時のタイムチャートである。図22,図23は、同一時間範囲における各信号の状態を示す。
図22には、レーン0の各信号のみを示し、レーン2〜7ブロックの信号は省略する。
全てのレーンのclock_pattern_detect_*=1かついずれかのレーンのread_fast[1:0]≠“00”の場合、受信制御部155は各レーンのaddress_hold_*信号をアサートする。read_fast_*[1:0]=“10”の場合は、data_valid_timing=1の2サイクル間(次にdata_valid_timing=1となるタイミングで)、address_hold_*信号をアサートしてアドレスホールドを通知する。図23では、read_fast_0[1:0]=“10”を条件に、t13からt15の間2サイクル間、cmpns_adrs_hold=1をアサートする。read_fast_*[1:0]=“01”の場合は、data_valid_timing=1の1サイクル間(次にdata_valid_timing=1となるタイミングで)、address_hold_*信号をアサートしてアドレスホールドを通知する。図23では、read_fast_0[1:0]=“01”、または、read_fast_1[1:0]=“01”を条件に、t11からt12の1サイクル間、cmpns_adrs_hold=1をアサートする。
エラスティックバッファ153は、アドレスホールドが通知されたt11、t13、t14の間、読み出しアドレスのインクリメントを停止する。
図24,図25に、デスキュー完了後にポート単位でクロック周波数差補償を行う動作のタイムチャート(2インクリメント)を示す。
図24は、実施形態の一例としてのエラスティックバッファ153のデスキュー完了後のクロック周波数差補償(2インクリメント)時のタイムチャートである。図25は、実施形態の一例としての受信制御部155のデスキュー完了後のクロック周波数差補償(2インクリメント)時のタイムチャートである。図24,図25は、同一時間範囲における各信号の状態を示す。
図24には、レーン0の各信号のみを示し、レーン2〜7ブロックの信号は省略する。
全てのレーンのclock_pattern_detect_*=1であり、かつ、全てのレーンのread_slow_*[1:0]≠“00”の場合、受信制御部155は各レーンにaddress_plus2_*信号をアサートする。read_slow_*[1:0]=“10”の場合は、data_valid_timing=1の2サイクル間、cmpns_adrs_plus2=1をアサートする。図25では、read_slow_0[1:0]=“10”、read_slow_1[1:0]=“10”、read_slow_7[1:0]=“10”であり、かつ、図25に記述していないread_slow_2[1:0]からread_slow_6[1:0]の信号全てが“10”であることを条件に、t23からt25の2サイクル間、cmpns_adrs_plus2=1をアサートする。read_slow_*[1:0]=“01”の場合は、data_valid_timing=1の1サイクル間、address_plus2_*信号を出力する。図25では、read_slow_0[1:0]=“01”、read_slow_1[1:0]=“01”、read_slow_7[1:0]=“10”、かつ図25に記述していないread_slow_2[1:0]からread_slow_6[1:0]の信号全てが“10”もしく“01”を条件に、t21からt22の1サイクル間、cmpns_adrs_plus2=1をアサートする。この場合、read_slow_*[1:0]=“10”でないレーンも存在するため、cmpns_adrs_plus2がアサートされるのは、1サイクルのみである。
エラスティックバッファ153はaddress_plus2_*信号がアサートされ、かつ、data_valid_timing=1の場合は、read_addressが2インクリメント(+2)される。図24のt25のタイミングで+2されている。address_plus2_*信号がアサートされ、かつ、data_valid_timing=0の場合は、read_addressが1インクリメント(+1)される。図24のt22、t24のタイミングで+1されている。
(C)作用・効果
前述のように、実施形態の一例としてのエラスティックバッファ153によれば、PCS受信部内に設けられたエラスティックバッファ153の読み出し側をcore_clockで動作させる。エラスティックバッファ153の読み出しは、転送速度差を吸収するため、間引きを行ない、全てのレーンでタイミングを合わせて、有効タイミングで読み出しを行う。つまり、有効タイミングでエラスティックバッファ153からデータを読み出し、かつ、リードポインタ(read_pointer)を+1する。
クロック周波数差補償パターン受信によるクロック周波数偏差補償は、リードポインタ(read_pointer)が速く、ライトポインタ(write_pointer)に追いつきそうな場合は、ライト−リードポインタ(read_pointer)差により、有効タイミングで1〜数サイクル間、リードポインタ(read_pointer)をホールドする。リードポインタ(read_pointer)が遅く、ライトポインタ(write_pointer)との差が大きい場合は、有効タイミングでリードポインタ(read_pointer)を+2し、かつ、無効タイミングにリードデータを読み出し、リードポインタ(read_pointer)を+1する。このとき、レーン間スキュー位置を保つための制御をエラスティックバッファ153若しくは、デスキューバッファ157で行う必要がある。
又、PCS受信部内に設けられた送信ギアボックス173の書き込み側をcore_clockで動作させる。送信ギアボックス173の書き込みは、転送速度差を吸収するため、間引きを行ない、全てのレーンでタイミングを合わせて、有効タイミングで書き込む。つまり、有効タイミングで送信ギアボックス173にデータを書き込み、かつ、ライトポインタ(write_pointer)を+1する。
このため、I/Fの転送速度とXB LSI内部の転送速度との差を吸収できる。
又、実施形態の一例としてのエラスティックバッファ153によれば、クロック補償動作時に、デスキュー位置を保ちつつ、転送速度差を吸収できる。
さらに、実施形態の一例としてのエラスティックバッファ153によれば、エラスティックバッファ153のホールドのタイミングは、クロック周波数差補償パターン受信時のエラスティックバッファ153の読み出し、有効タイミングのみである。このため、パケット途中の有効タイミングでエラスティックバッファ153の読み出しが中断されないため、パケット内の隙間が増加することがなく、カットスルー動作に影響しない。
ここで、比較のために、図26〜図28を参照して、本エラスティックバッファ153を使用しない構成を示す。
図26は、本エラスティックバッファ153を使用しないポート回路の構成図、図27は、図26の受信回路52の構成図、図28は、図26の送信回路72の構成図である。
図26に示すように、各ポート回路は、レーンm受信部50−0〜50−7、受信データ復元部54、レーンm送信部70−0〜70−7、送信データ分割部74、受信制御部55、転送速度差制御部65、RX−FIFO56、及びTX−FIFO75をそなえる。
本例では、ポート数がポート0〜4の5ポート、システムバスのレーン数は、レーン0〜レーン7の8レーンである。
以下の説明及び図面において、レーンm(m=0〜7)と接続される受信レーンブロック50−m又は送信レーンブロック70−mを、「レーンm受信部」又は「レーンm送信部」と呼ぶことがある。
又、各機能ブロックの機能及び構成は、上記の本実施形態の一例としてのポート回路の機能ブロックの機能及び構成に対応している。
レーンm受信部50は、システムバスの対応するレーンからデータを受信する。
各レーンm受信部50は、デシリアライザ(SerDes (RX))51−0〜51−7及び送信回路72−0〜72−7をそなえる。
デシリアライザ51は、受信した1ビット幅のシリアルデータから6ビット幅のパラレルデータを生成する。
送信回路72−0〜72−7は、それぞれ、エラスティックバッファ53−0〜53−7をそなえる。
エラスティックバッファ53は、受信データを格納する受信データを格納するFIFOである。
受信データ復元部54は、各レーンm受信部52で受信したデータを併合して、受信データを復元する。
レーンm送信部70は、システムバスの各レーンにデータを送信する。
レーンm送信部70は、シリアライザ(SerDes (TX))71−0〜71−7、送信回路72−0〜72−7、及び送信データ分割部74をそなえる。
シリアライザ71は、送信する6ビット幅のパラレルデータから1ビット幅のシリアルデータを生成する。
送信回路72−0〜72−7は、それぞれ、送信ギアボックス(TX-Gear)73−0〜73−7をそなえる。
送信ギアボックス73は、送信データを格納するFIFOである。
送信データ分割部74は、60ビットの送信データを分割して、各送信回路72に出力する。
RX−FIFO56は、pcs_clockからcore_clockへの乗り換えを行うFIFOである。
TX−FIFO75は、core_clockからpcs_clockへの乗り換えを行うFIFOである。
ここで、各ポートは任意のシリアライザ/デシリアライザ(SerDes)I/F速度を設定できるとする。
core_clockはI/F速度に依存しない周波数で動作し、rx_p_*_clock、tx_p_*_clock、pcs_clockはI/Fに比例した速度で動作する。
core_clockはI/Fに依存せず、0.8GHzとする。I/F速度が16Gbpsの場合、デシリアライザ51の読み出しからエラスティックバッファ53書き込み部間のバス幅が16ビットとすると、rx_p_*_clockは1GHz(=16Gbps/16ビット)になる。エラスティックバッファ53の読み出しバス幅と送信ギアボックス73の書き込みバス幅とが20ビットとすると、pcs_clockは0.8GHz(=16Gbps/20ビット)になる。シリアライザ71の書き込みバス幅が16ビットとすると、tx_p_*_clockは1GHzとなる。さらに、rx_p_*_clockは接続先ポートのオシレータに比例するため、クロック周波数差が存在する。
pcs_clockはI/F速度に比例するため、I/F速度は最大値16Gbpsをターゲットとし、pcs内部回路が最大0.8GHzで動作する性能を持っていたとしても、pcs_clockはシステムのシリアルバス経路に依存する。例えば、I/F速度が12Gbpsや8Gbpsの場合、pcs_clockは0.6GHz、0.4GHzとなる。
図27,図28においては、レーン0ブロックのみ詳細な構成図を示す。レーン1ブロック〜レーン7ブロックの構成は、レーン0ブロックと同様である。
図27に示すように、この受信部52は、シリアルI/Fから1ビットで入力された信号をデシリアライザで16ビットにし、この16ビットデータより20ビット境界を検出し、エラスティックバッファ53の読み出し側で20ビット境界単位で読み出せるように書き込みを行う。エラスティックバッファ53読み出し後に10Bから8Bへの変換、及びデスクランブルを行う。エラスティックバッファ53で読み出した受信データより、クロック周波数差補償パターン、デスキューパターンを検出する。デスキュー完了後は、受信制御部55によって、読み出し制御を行う。トレーニングパターン受信部64でトレーニングパターンを認識し、初期化シーケンスを制御する。エラスティックバッファ53への書き込みはrx_p_*_clock、エラスティックバッファ53の読み出しはpcs_clockで行う。RX−FIFO56でI/F速度とcore_clockの転送速度差の吸収を行う。
又、この送信部72は、初期化シーケンス中は、トレーニングパターンをスクランブラ77に入力する。初期化中、パケット送信中に関わらず1666サイクル毎にクロック周波数差補償パターンを送信する。初期化完了後はパケット送信を行ない、TX−FIFO75でcore_clockからpcs_clockに乗り換える。このとき、パケット内にクロック周波数差補償パターンを入れないように制御が行なわれる。パケットは、スクランブル及び8B→10B変換を受け、送信ギアボックス73に書き込まれる。送信ギアボックス73によって、送信データが20ビット幅から16ビット幅に変換され、pcs_clockからtx_p_*_clockへの乗り換えが行なわれる。送信ギアボックス73から出力される16ビットのデータはシリアライザ71で1ビットに変換され、I/Fから送信される。
図27,図28に示す構成と比較して、図12,図13に示す本実施形態の一例の構成においては、pcs_clockが使用されておらず、転送速度差を吸収するRX−FIFO56とTX−FIFO75とが削除されている。送速度差の吸収は、本実施形態の一例の構成においては、エラスティックバッファ53及び送信ギアボックス73で行う。
本エラスティックバッファ153を使用しない受信回路52では、受信回路52の内部で転送速度差吸収を行わずに、RX-FIFO56で転送速度差吸収を行っていた。そのため、受信回路52はI/F速度に依存するpcs_clockで動作し、pcs_clockはcore_clockと同じか、もしくは、低速であった。
このため、I/F速度に依存せず、core_clockで動作する低レイテンシーな受信装置を提供でき、pcs_clockからcore_clockへの乗換のためのFIFO分のレイテンシーが改善される。
更に、実施形態の一例においては、pcs_clockからcore_clockへの乗換のためのFIFOを省略できるので、回路構成の簡略化を図ることができる。
(D)その他
なお、上述した実施形態に関わらず、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上記の実施形態においては、5ポート、8レーンの構成を例に挙げて説明したが、ポート数及び/又はレーン数は任意に変更することができる。
更に、各種信号のビット数も任意に変更することができる。
例えば、前述の各構成ブロックの機能を複数のブロックとして分割したり、或いは複数の機能ブロックを1つのブロックに集約してもよい。
又は、前述の各構成ブロックを、回路等のハードウェアとして実装しても、ファームウェアとして実装しても、ソフトウェアとして実装してもよい。
又は、上記のフローチャートのステップの実行順序を適宜変更してもよい。
(E)付記
上記の実施形態に関し、更に以下の付記を開示する。
(付記1)
送信装置から複数のレーンを介してデータを受信する受信装置であって、
前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
前記複数のレーン間のタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、
前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力するデスキュー制御部と、
前記送信装置と前記受信装置との周波数差の調整時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、
をそなえることを特徴とする受信装置。
(付記2)
前記制御部は、前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、
前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を2インクリメントさせる信号を出力することを特徴とする付記1記載の受信装置。
(付記3)
前記制御部は、前記所定値を複数そなえ、前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を2インクリメントさせる信号を出力する時間を変えることを特徴とする付記2記載の受信装置。
(付記4)
前記制御部は、前記読み出し位置を2インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第1のタイミング信号とに基づいて、前記バッファの前記読み出し位置を1又は2インクリメントすることを特徴とする付記2記載の受信装置。
(付記5)
送信装置と、
該送信装置から複数のレーンを介してデータを受信する受信装置と、
前記複数のレーン間のタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力する速度差制御部と、をそなえ、
前記受信装置は、
前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力するデスキュー制御部と、
前記送信装置と前記受信装置との周波数差の調整時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する制御部と、をそなえ、
前記送信装置は、
前記複数のレーンのそれぞれに対して設けられ、前記第1のタイミング信号において送信データを書き込む第2のバッファをそなえる
ことを特徴とする情報処理装置。
(付記6)
前記制御部は、前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、
前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を2インクリメントさせる信号を出力することを特徴とする付記5記載の情報処理装置。
(付記7)
前記制御部は、前記所定値を複数そなえ、前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を2インクリメントさせる信号を出力する時間を変えることを特徴とする付記6記載の情報処理装置。
(付記8)
前記制御部は、前記読み出し位置を2インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第1のタイミング信号とに基づいて、前記バッファの前記読み出し位置を1又は2インクリメントすることを特徴とする付記6記載の情報処理装置。
(付記9)
複数のレーンを介してデータを受信するデータ受信方法であって、
前記複数のレーン間のタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記送信装置及び前記受信装置の動作クロックとに基づいて出力し、
前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力し、
前記送信装置と前記受信装置との周波数差の調整時を検出し、
前記検出時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記複数のレーンのそれぞれに対して設けられ、受信データを格納するバッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する
ことを特徴とするデータ受信方法。
(付記10)
前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、
前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を2インクリメントさせる信号を出力することを特徴とする付記9記載のデータ受信方法。
(付記11)
前記所定値が複数存在し、
前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を2インクリメントさせる信号を出力する時間を変えることを特徴とする付記10記載のデータ受信方法。
(付記12)
前記読み出し位置を2インクリメントさせる信号と前記レーン間のタイミングを合わせる前記第1のタイミング信号とに基づいて、前記バッファの前記読み出し位置を1又は2インクリメントすることを特徴とする付記10記載のデータ受信方法。
101 サーバ(情報処理装置)
102 SB
103 IOB
104 XBB
105 BP
106 システムバス
111 CPU
112 DRAM
113 MC
142 ポート回路(受信装置)
150 レーンm受信部
151 デシリアラライザ
152 受信回路
154 受信データ復元部
155 受信制御部
153 エラスティックバッファ(バッファ)
160 クロック周波数差補償パターン/デスキュー検出部(デスキュー制御部)
165 ライトアドレス制御部
169 リードアドレス制御部
161 8B10B復元部
162 デスクランブラ
166,167 同期化FF
168 FIFO
164 トレーニングパターン受信部
170 レーンm送信部
171 シリアラライザ
172 送信回路
173 送信ギアボックス(ギアボックス)
174 送信データ分割部
175 転送速度差制御部(速度差制御部)
176 8B10B復元部
177 スクランブラ
178 トレーニングパターン/クロック周波数差補償パターン生成部
179 デスキュー制御部
180 クロック周波数補償パターン部

Claims (6)

  1. 送信装置から複数のレーンを介してデータを受信する受信装置であって、
    前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファと、
    前記複数のレーン間の読み出しタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記バッファの読み出し動作クロックとに基づいて出力する速度差制御部と、
    前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力するデスキュー制御部と、
    前記送信装置と前記受信装置との周波数差の調整時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節するタイミング制御部と、
    をそなえることを特徴とする受信装置。
  2. 前記タイミング制御部は、前記バッファへの前記読み出し位置と前記書き込み位置との差を示す差分信号に基づいて前記複数のバッファからの前記受信データの読み出しタイミングを調節し、前記複数のレーンのいずれかの前記差分信号が所定値より小さいことを示す場合は、前記読み出し位置のインクリメントを抑制する信号を出力し、前記複数のレーンの前記差分信号が前記所定値より大きいことを示す場合は、前記読み出し位置を2インクリメントさせる信号を出力することを特徴とする請求項1記載の受信装置。
  3. 前記タイミング制御部は、前記所定値を複数そなえ、前記差分信号の量によって、前記読み出し位置のインクリメントを抑制する信号及び前記読み出し位置を2インクリメントさせる信号を出力する時間を変えることを特徴とする請求項2記載の受信装置。
  4. 前記タイミング制御部は、前記読み出し位置を2インクリメントさせる信号と前記第1のタイミング信号とに基づいて、前記バッファの前記読み出し位置を1又は2インクリメントすることを特徴とする請求項2記載の受信装置。
  5. 送信装置と、
    該送信装置から複数のレーンを介してデータを受信し、前記複数のレーンのそれぞれに対して設けられ、受信データを格納する複数のバッファをそなえる受信装置と、
    前記複数のレーン間の読み出しタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、前記バッファの読み出し動作クロックとに基づいて出力する速度差制御部と、をそなえ、
    前記受信装置は
    前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力するデスキュー制御部と、
    前記送信装置と前記受信装置との周波数差の調整時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節するタイミング制御部と、をそなえ、
    前記送信装置は、
    前記複数のレーンのそれぞれに対して設けられ、前記第1のタイミング信号において送信データを書き込む第2のバッファをそなえる
    ことを特徴とする情報処理装置。
  6. 複数のレーンを介してデータを受信するデータ受信方法であって、
    前記複数のレーン間の読み出しタイミングを合わせる第1のタイミング信号を、前記レーンにおける通信速度と、受信データを格納する複数のバッファの読み出し動作クロックとに基づいて出力し、
    前記複数のレーン間のスキューを合わせる第2のタイミング信号を出力し、
    前記送信装置と前記受信装置との周波数差の調整時を検出し、
    前記検出時に、前記第1のタイミング信号において、前記第2のタイミング信号の値、並びに、前記複数のレーンのそれぞれに対して設けられ、前記バッファからの前記受信データの読み出し位置と、前記バッファへの前記受信データの書き込み位置との差に基づいて、前記複数のバッファからの前記受信データの読み出しタイミングを調節する
    ことを特徴とするデータ受信方法。
JP2013095064A 2013-04-30 2013-04-30 受信装置、情報処理装置及びデータ受信方法 Active JP6221328B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2013095064A JP6221328B2 (ja) 2013-04-30 2013-04-30 受信装置、情報処理装置及びデータ受信方法
EP14162323.1A EP2800322A1 (en) 2013-04-30 2014-03-28 Reception apparatus, information processing apparatus and method of receiving data
US14/245,217 US20140325107A1 (en) 2013-04-30 2014-04-04 Reception apparatus, information processing apparatus and method of receiving data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013095064A JP6221328B2 (ja) 2013-04-30 2013-04-30 受信装置、情報処理装置及びデータ受信方法

Publications (2)

Publication Number Publication Date
JP2014216981A JP2014216981A (ja) 2014-11-17
JP6221328B2 true JP6221328B2 (ja) 2017-11-01

Family

ID=50828660

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013095064A Active JP6221328B2 (ja) 2013-04-30 2013-04-30 受信装置、情報処理装置及びデータ受信方法

Country Status (3)

Country Link
US (1) US20140325107A1 (ja)
EP (1) EP2800322A1 (ja)
JP (1) JP6221328B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8559971B1 (en) * 2011-04-05 2013-10-15 Exelis, Inc. Determination of state vector, timing, and navigation quality metrics from reception of SBS transmissions
US10505837B1 (en) * 2013-07-09 2019-12-10 Altera Corporation Method and apparatus for data re-packing for link optimization
US9577820B2 (en) * 2015-02-03 2017-02-21 Avago Technologies General Ip (Singapore) Pte. Ltd. Elastic gear first-in-first-out buffer with frequency monitor
JP6531513B2 (ja) * 2015-06-22 2019-06-19 株式会社リコー シリアル通信装置及びシリアル通信方法
US9705620B2 (en) 2015-09-18 2017-07-11 Qualcomm Incorporated Synchronization of endpoints using tunable latency
US10553110B2 (en) * 2017-06-23 2020-02-04 Here Global B.V. Detection and estimation of variable speed signs
JP7037035B2 (ja) * 2017-09-01 2022-03-16 富士通株式会社 データ伝送装置、演算処理装置及びデータ伝送装置の制御方法
JP7069936B2 (ja) * 2018-03-27 2022-05-18 富士通株式会社 送受信システム、データ受信装置、およびデータ受信方法
US10581587B1 (en) * 2019-04-29 2020-03-03 Advanced Micro Devices, Inc. Deskewing method for a physical layer interface on a multi-chip module
JP2021061469A (ja) * 2019-10-03 2021-04-15 ルネサスエレクトロニクス株式会社 半導体装置
TWI768275B (zh) * 2019-12-20 2022-06-21 群聯電子股份有限公司 訊號接收電路、記憶體儲存裝置及訊號接收方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6654824B1 (en) * 2001-08-28 2003-11-25 Crossroads Systems, Inc. High-speed dynamic multi-lane deskewer
US7631118B2 (en) * 2003-12-31 2009-12-08 Intel Corporation Lane to lane deskewing via non-data symbol processing for a serial point to point link
US7093061B2 (en) * 2004-02-19 2006-08-15 Avago Technologies Fiber Ip (Singapore) Pte. Ltd. FIFO module, deskew circuit and rate matching circuit having the same
US7454537B1 (en) * 2004-04-22 2008-11-18 Altera Corporation Synchronization and channel deskewing circuitry for multi-channel serial links
US7499516B2 (en) * 2004-11-19 2009-03-03 Agere Systems, Inc. Methods and apparatus for interface buffer management and clock compensation in data transfers
JP5544896B2 (ja) * 2010-01-22 2014-07-09 富士通株式会社 受信回路、情報処理装置、およびバッファ制御方法
JP2013055502A (ja) * 2011-09-05 2013-03-21 Ricoh Co Ltd シリアル通信回路

Also Published As

Publication number Publication date
US20140325107A1 (en) 2014-10-30
JP2014216981A (ja) 2014-11-17
EP2800322A1 (en) 2014-11-05

Similar Documents

Publication Publication Date Title
JP6221328B2 (ja) 受信装置、情報処理装置及びデータ受信方法
US9001954B2 (en) Reception circuit, information processing device, and buffer control method
US10423553B2 (en) System-on-chip including asynchronous interface and driving method thereof
US10038450B1 (en) Circuits for and methods of transmitting data in an integrated circuit
US20090086874A1 (en) Apparatus and method of elastic buffer control
US7352836B1 (en) System and method of cross-clock domain rate matching
WO2017189796A1 (en) Data transmission method and data transmission system
US20100322365A1 (en) System and method for synchronizing multi-clock domains
US8132036B2 (en) Reducing latency in data transfer between asynchronous clock domains
TWI579706B (zh) 使用可選擇之同步器於非同步邊界上進行資料同步化以最小化潛時
WO2002054262A9 (en) Low latency synchronization of asynchronous data
US7500132B1 (en) Method of asynchronously transmitting data between clock domains
JP2009239768A (ja) 半導体集積回路装置、及び、クロックデータ復元方法
EP2862090B1 (en) Adaptive offset synchronization of data based on ring buffers
US7542506B2 (en) Data receiver and equalizer adapter
JP5610540B2 (ja) シリアル通信用インターフェース回路及びパラレルシリアル変換回路
JP5704988B2 (ja) 通信装置
TWI740564B (zh) 跨時鐘域信號傳輸方法、電路以及電子裝置
US9484967B1 (en) Method for duty cycle distortion detection through decision feedback equalizer taps
JP5492951B2 (ja) 半導体集積回路装置、及び、クロックデータ復元方法
JP2008287490A (ja) データ転送システムおよびデータ転送方法
JP4799707B1 (ja) データ同期化回路、通信インタフェース回路及び通信装置
WO2023166201A1 (en) Interface circuit portions
JP5315882B2 (ja) 半導体装置及び通信方法
CN117955583A (zh) 用于互连协议的通道同步的方法、控制器以及存储装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170308

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170905

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170918

R150 Certificate of patent or registration of utility model

Ref document number: 6221328

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150