アイ スキャンのアーキテクチャ

Versal ACAP GTY および GTYP トランシーバー アーキテクチャ マニュアル (AM002)

Document ID
AM002
Release Date
2021-05-05
Revision
1.2 日本語

次の図に示す灰色のブロックは、PMA アーキテクチャのアイ スキャンをサポートする部分です。水平方向オフセット (HORZ_OFFSET) によって、データ サンプルに関連するオフセット サンプルのサンプリング時間を短縮または遅延させます。垂直方向オフセット (VERT_OFFSET) によって、平均化された波形が比較される差動電圧のしきい値を大きくまたは小さくします。データ サンプルは Rdata バスに、オフセット サンプルは Sdata バスにデシリアライズされます。

DFE モード (CH*_RXLPMEN=0) の場合、最初の DFE タップ値はループ展開されていないため、2 つの独立したアイ スキャン計測が必要です。つまり、+UT と –UT での計測で、垂直方向および水平方向オフセットにおける TOTAL BER を測定します。

図 1. アイ スキャンをサポートする PMA アーキテクチャ

次の図に、PCS アーキテクチャのアイ スキャンをサポートする部分を示します。80 ビットの Rdata バスにはデータ サンプルが含まれます。80 ビットの Sdata バスの各ビットは、対応するデータ サンプルとオフセット サンプルが同一でない場合かつそのときに限り 1 です(表 2 の ES_ERRDET_EN 参照)。

図 2. アイ スキャンをサポートする PCS アーキテクチャ

上の図では、サンプル カウンターおよびエラー カウンターが、検証されたビットの総数と確認されたエラーの総数をカウントします(このサンプル数に 2^(1+ ES_PRESCALE) と int_datawidth を乗じます。(図 4 および 図 5 を参照してください)。ステート マシンは FIFO 内の Rdata と Sdata 値の記録、およびサンプル カウンターとエラー カウンター内のカウント数の累算を管理します。上の図に示すさまざまなブロックの機能は次のとおりです。

  • FIFO は直近の 2 サイクル分 (最大 160 ビット) の Rdata および Sdata を保持します。このデータは、次の目的で使用されます。
    • Sdata の検証によってエラー検出をサポートする。
    • Rdata の検証によって目的のデータ パターンの検出をサポートする。
    • 外部検証用にデータのスナップショットを提供する。ステート マシンは一部の条件下で FIFO の動作を停止させる可能性があり、FIFO の内容はその後に APB3 インターフェイスを介してインターコネクト ロジックに対して読み出し可能になります。
  • カウント クオリファイアは Rdata FIFO の内容と ES_QUALIFIER とを比較します。出力が High になると一致を示し、サンプル カウンター (プリスケーラを介する) およびエラー カウンターの値が増加します。High の ES_QUAL_MASK ビットは、Rdata の一部のビットを比較から除外します。ビットがすべて High の場合、Rdata のビットは一致する必要がなく、カウンターの動作は常に有効になります。一部の ES_QUAL_MASK ビットを Low に設定すると、Rdata の対応するビットが ES_QUALIFIER の指定パターンと一致するまでカウンターの動作が禁止されます。0 ~ 159 のすべての k について条件 (Rdata_FIFO[k] EQUALS ES_QUALIFIER[k]) OR ES_QUAL_MASK[k] が満たされている場合、カウント クオリファイアの出力が High になります。統計アイの表示では、ES_QUAL_MASK は {160{1’b1}} に設定されています。波形の表示では、一部の ES_QUAL_MASK ビットを 0 に設定して、カウンターの動作に制約を与える、または検証用に Rdata および Sdata をキャプチャするトリガーを定義することができます。
  • プリスケーラはカウント クオリファイア出力信号を受信して一部の High の値の約数をサンプル カウンターに渡し、サンプル カウンターの各増分がカウント クオリファイアから受信した High 出力の倍数に対応するようにします。ES_PRESCALE は、サンプル カウンターの各増分 (2ES_PRESCALE+1) によって示される、High のカウント クオリファイアの出力数を 2 ~ 4,294,967,296 の範囲で定義します。
  • サンプル カウンターは、カウント クオリファイアでビット エラーのカウントが有効になるサイクルの合計数 (ES_PRESCALE を乗じた値) をカウントします。
  • エラー カウンターは、それまでのエラー カウントを累算します。統計アイ表示用にビット エラーの合計数をカウントするには、ES_SDATA_MASK[159:80] = {80{1’b1}} と設定する必要があります。この場合、エラー カウンターは Sdata[79:0] 内のビット エラー (1 ビットのデータ) の合計数をカウントします。High の ES_SDATA_MASK ビットは、Sdata の一部のビットを除外できます。一般に、統計アイ表示は、80 ビットのデータの場合は ES_SDATA_MASK[159:0] = {80{1’b1}、80{1’b0}} を使用します (RX マージン解析の属性の表を参照)。前のサイクルでカウントされた Sdata[79:0] の以前の値が Sdata[159:80] に含まれるため、Sdata[159:80] 内のエラー ビットはカウントされません。あるサイクルでカウントされたビット エラーの数は、Sdata_FIFO[k] AND NOT ES_SDATA_MASK[k] 条件が満たされている場合の 0 ~ 79 の k の値の数です。

    アイ スキャン データ (波形表示など) のその他の使用については、ES_SDATA_MASK[159:0] の 1 ビットが 0 に設定されます。エラー カウンターは、ES_SDATA_MASK[k] = 0 の場合のビット k について、Rdata_FIFO[k] 内のエラーの数をカウントします (つまり、Sdata_FIFO[k] = 1)。または、ES_ERRDET_EN が FALSE の場合、エラー カウンターは、オフセット データ Sdata_FIFO[k] が 1 のときの合計時間を (その値が正しいかどうかにかかわらず) カウントします。ES_SDATA_MASK[159:0] の 1 ビットが 0 のとき、または ES_SDATA_MASK[159:80] の少なくとも 1 ビットが 0 のとき、カウント クオリファイアの出力が High で、Sdata_FIFO[k] AND NOT ES_SDATA_MASK[k] 条件が満たされている場合にエラー カウンターは 1 つずつ増分します。ES_SDATA_MASK[159:80] のいずれかのビットが 0 の場合、エラー カウンターは、ビット エラーの合計数単位ではなく 1 つずつでしか増分しません。合計数単位で増分すると、1 サイクル内で検出されます。

  • ステート マシンは、エラーをカウントするまたは Rdata および Sdata 用に目的のスナップショットをキャプチャするといったアイ スキャン ブロックの動作を制御します。Run および Arm の 2 つの動作モードがあります。
    • Run モード (次の図の左側のループ) は、統計アイ表示、波形表示、およびスコープ表示用の統計データの収集をサポートします。このモードは、サンプル カウンターおよびエラー カウンターの動作を既述のとおり開始し、サンプル カウンターまたはエラー カウンターのいずれかが飽和状態になった (最大値に達した) 場合、または APB3 動作が Run モードを終了した場合に動作を停止します。
    • Arm モード (次の図の右側のループ) は、(FIFO の動作を無効にすることによって) APB3 インターフェイスを介して読み出し可能な Rdata および Sdata のスナップショットのキャプチャをサポートします。たとえば、Arm モードを使用すると、アイ マージンの低下につながるデータ パターンを判断できます。その後、これらのパターンから今後の解析用に波形表示を生成します。ステート マシンは、次の場合に Rdata および Sdata FIFO の動作を停止するように設定可能です。
      • エラーが発生する (Sdata_FIFO[159:0] のどこか、ES_SDATA_MASK[159:0] によるマスクの対象)。
      • Rdata が指定パターンと一致する (ES_QUALIFIER および ES_QUAL_MASK によって定義)。
      • インターコネクト入力 EYESCANTRIGGER が High になることでトリガーを発生させる。
      • ES_CONTROL への属性の書き込みによってトリガーが強制される。

次の図に、アイ スキャンのステート マシンにおけるステートの遷移を示します。

図 3. アイ スキャンのステート マシン

ES_CONTROL[1:0] は、arm および run をそれぞれ実行する信号です。WAIT ステートから始まり、run は BER 計測ループ (左側) を、arm は診断ループ (右側) を開始します。

RESET ステートはエラーおよびサンプルのカウンターをゼロにし、その後 run または arm がアクティブかどうかによって COUNT ステートまたは ARMED ステートへ遷移します。

COUNT ステートでは、サンプルおよびエラーがカウンターに累算されます。いずれかのカウンターが飽和状態になると、それら両方が停止し、END ステートに遷移します。この遷移は、es_control_status[3:0] をポーリングすることで検出されます。ビット 0 (done) は、END、READ、および WAIT ステートでのみアクティブに設定されます。ビット [3:1] は、ステート マシンの現在のステートを示します。

END ステートは、run が 0 に設定し直されると WAIT ステートへ遷移します。es_sample_count[15:0] および es_error_count[15:0] は、END または WAIT ステートのいずれかで読み出すことができます。

LPM モードでは、BER が次のように計算されます。

図 4. BER

DFE モードでは、2 つのエラー累算が必要です (1 つは EYESCAN_VS_UT_SIGN = 0 を使用、1 つは EYESCAN_VS_UT_SIGN = 1 を使用)。その後、ビット エラー率が次のように計算されます。

図 5. DFE モードの BER

これらのエラー累算の解と再現性を保持して信頼性の高い BER 値を得るには、優れた再現性への必要性と必要以上に時間をかけないこととをバランスにかけながら、累算ごとに ES_PRESCALE を動的に調整する必要があります。つまり、1 つの累算上でのエラーが 1 または 2 つの場合、繰り返しの累算におけるエラーは 0 または 3 つまたは 5 つとなる可能性があり、著しく BER が変わります。しかし、ある累算でのエラーが 30 で別の累算では 27 または 35 であれば、BER は大して変わりません。次の表に、特定の BER を確実にするために必要な最大 ES_PRESCALE をバス幅別に示します。

表 1. 特定のバス幅における BER を確認するために必要な最大 ES_PRESCALE
バス幅 BER フロア (99.5% コンフィデンス)
1E-06 1E-07 1E-08 1E-09 1E-10 1E-11 1E-12 1E-13 1E-14 1E-15
16 2 5 8 12 15 18 22 25 28 32
20 1 5 8 11 15 18 21 25 28 31
32 1 4 7 11 14 17 21 24 27 31
40 0 4 7 10 14 17 20 24 27 30
64 0 3 6 10 13 16 20 23 26 30
80 0 3 6 9 13 16 19 23 26 29

ARMED ステートでは、FIFO (Rdata および Sdata の連続するサイクル) は、トリガー イベントが発生すると停止します。このトリガー イベントは、カウント クオリファイアのパルス、エラー カウンターに反映されるビットすべての論理和、APB3 データ入力による手動トリガー、またはポートを介した手動トリガーのいずれかで発生します。これら 4 つのオプションのうち 1 つを trig[3:0] = ES_CONTROL[5:2] で選択します。

READ ステートでは、Rdata の最後の 2 サイクル間を APB3 読み出し専用レジスタ (es_rdata[159:0]) から、Sdata の最後の 2 サイクル間を APB3 読み出し専用レジスタ (es_sdata[159:0]) から読み出すことができます。

表 2. ES_HORZ_OFFSET の位相オフセット デコード一覧
レート 最小カウント値 [10 進数 (2 進数)] アイ中央 [10 進数 (2 進数)] 最大カウント値 [10 進数 (2 進数)]
フル –32 (11'b11111100000) +0 (11'b00000000000) +32 (11'b00000100000)
1/2 –64 (11'b11111000000) +0 (11'b00000000000) +64 (11'b00001000000)
1/4 –128 (11'b11110000000) +0 (11'b00000000000) +128 (11'b00010000000)
1/8 –256 (11'b11100000000) +0 (11'b00000000000) +256 (11'b00100000000)
1/16 –512 (11'b11000000000) +0 (11'b00000000000) +512 (11'b01000000000)
表 3. ES_SDATA_MASK の説明
ES_SDATA_MASK 説明

ES_SDATA_MASK0

ES_SDATA_MASK1

ES_SDATA_MASK2

ES_SDATA_MASK3

ES_SDATA_MASK4

これら 5 つの 32 ビット単位で 160 ビットの ES_SDATA_MASK を構成します。

(たとえば、ES_SDATA_MASK4[31:0] はビット [159:128] を保持します。) 80 ビット Sdata バスの最大 2 サイクル分をマスクします。バイナリ ビット 1 で対応するバス ビットがマスクされ、バイナリ ビット 0 でマスクされないままとなります。

統計アイの表示に対応する場合、エラー カウンターは、Sdata バスの直近のサイクルでマスクされていない 1 の総数を累積します (ES_SDATA_MASK[79:0] でマスクされる)。

波形の表示に対応する場合、エラー カウンターは、Sdata バスの以前のサイクルでマスクされていない 1 の 0 以外の各値に対して 1 ずつインクリメントします (ES_SDATA_MASK[159:80] でマスクされる)。

この属性および ES_QUAL_MASK は、80 ビットよりも小さいバス幅の未使用ビットもマスクする必要があります。統計アイの表示では、この属性は次の値をファンクションのバス幅と見なします。

  • 80 ビット幅: ES_SDATA_MASK = ({80{1'b1}}, {80{1'b0}})
  • 64 ビット幅: ES_SDATA_MASK = ({80{1'b1}}, {64{1'b0}},{16{1'b1}})
  • 40 ビット幅: ES_SDATA_MASK = ({80{1'b1}}, {40{1'b0}},{40{1'b1}})
  • 32 ビット幅: ES_SDATA_MASK = ({80{1'b1}}, {32{1'b0}},{48{1'b1}})
  • 20 ビット幅: ES_SDATA_MASK = ({80{1'b1}}, {20{1'b0}},{60{1'b1}})
  • 16 ビット幅: ES_SDATA_MASK = ({80{1'b1}}, {16{1'b0}},{64{1'b1}})

スコープおよび波形の表示には計測シーケンスが必要で、各計測のシングル ビットのみがマスクされません。

表 4. ES_QUALIFIER の説明
ES_QUALIFIER 説明

ES_QUALIFIER0

ES_QUALIFIER1

ES_QUALIFIER2

ES_QUALIFIER3

ES_QUALIFIER4

これら 5 つの 32 ビット単位で 160 ビットの ES_QUALIFIER を構成します。

(たとえば、ES_QUALIFIER4[31:0] はビット [159:128] を保持します。) アイ スキャンでは、入力データのどの位置でも、最大 80 ビットの連続ビット長のパターンに基づいて BER 測定が可能です。データ、つまりクオリファイア パターンは揃えられないため、パターンの位置をバレル シフト検索によって検出する必要があります。たとえば、20 ビット データ幅の 10’b0011111010 パターン (8B/10B コードの K28.5) を検索する場合、次のような計測シーケンスが必要です。ここでは、正確なアライメントでの 0 以外のサンプル数を検索しています。

  • ES_QUALIFIER = ({130{1’b?}}, 10’b0011111010, {20{1’b?}})
  • ES_QUALIFIER = ({129{1’b?}}, 10’b0011111010, {21{1’b?}})
  • ES_QUALIFIER = ({128{1’b?}}, 10’b0011111010, {22{1’b?}})
  • …など (「?」は、マスクされる「Don't Care」ビットを示す)

クオリファイア パターンは、バス幅 (80、64、40、32、20、または 16) の有効なビットに対してのみシフトされます。RX_INT_DATA_WIDTH の説明を参照してください。

表 5. ES_QUAL_MASK の説明
ES_QUAL_MASK 説明

ES_QUAL_MASK0

ES_QUAL_MASK1

ES_QUAL_MASK2

ES_QUAL_MASK3

ES_QUAL_MASK4

これら 5 つの 32 ビット単位で 160 ビットの ES_QUAL_MASK を構成します。(たとえば、ES_QUAL_MASK4[31:0] はビット [159:128] を保持します。) クオリファイア パターンに含まれないビットをマスクします。たとえば、上記で例として挙げた K28.5 に対応する値は次のとおりです。

  • ES_QUAL_MASK = ({130{1’b?}}, {10{1’b0}}, {20{1’b?}})
  • ES_QUAL_MASK = ({129{1’b?}}, {10{1’b0}}, {21{1’b?}})
  • ES_QUAL_MASK = ({128{1’b?}}, {10{1’b0}}, {22{1’b?}})
  • …など
表 6. ES_RDATA_DWORD (読み出し専用) の説明
ES_RDATA_DWORD 説明

ES_RDATA_DWORD0

ES_RDATA_DWORD1

ES_RDATA_DWORD2

ES_RDATA_DWORD3

ES_RDATA_DWORD4

これら 5 つの 32 ビット単位で 160 ビットの ES_RDATA を構成します。(たとえば、ES_RDATA_DWORD4[31:0] はビット [159:128] を保持します。) ARMED ステートでトリガー イベントが発生すると、ES_RDATA[79:0] は Rdata バスの現在のステート、ES_RDATA[159:80] は Rdata バスの前のステートを表します。

注記: この属性は読み出し専用です。
表 7. ES_SDATA_DWORD (読み出し専用) の説明
ES_SDATA_DWORD 説明

ES_SDATA_DWORD0

ES_SDATA_DWORD1

ES_SDATA_DWORD2

ES_SDATA_DWORD3

ES_SDATA_DWORD4

これら 5 つの 32 ビット単位で 160 ビットの ES_SDATA を構成します。(たとえば、ES_SDATA_DWORD4[31:0] はビット [159:128] を保持します。) ARMED ステートでトリガー イベントが発生すると、ES_SDATA[79:0] は Rdata バスの現在のステート、ES_SDATA[159:80] は Rdata バスの前のステートを表します。

注記: この属性は読み出し専用です。