Eタイル・トランシーバーPHYユーザーガイド

ID 683723
日付 12/09/2021
Public
ドキュメント目次

8.1. リセット・コントローラーを自動モードで使用したデュプレックスPMAのリコンフィグレーション

ダイナミック・リコンフィグレーションは、デバイスの動作中に変化する要件に合わせて、トランシーバー・チャネルを変更するプロセスです。チャネルをカスタマイズするには、デバイスの動作、またはデバイス・コンフィグレーション後にリコンフィグレーションを初期化します。
リコンフィグレーションする主なPMAパラメーターは、リファレンス・クロック・ソース、データレート、およびPMAシリアライゼーション/デシリアライゼーション・ファクターです。属性コードの変更方法については、PMA属性コード を参照してください。次の例は、デュプレックスPMAチャネルをNRZモードでリコンフィグレーションする方法を示しています。その目的は次のとおりです。
  • ネイティブ PHY IPのリストのとおり、PMAリファレンス・クロックをリコンフィグレーションして、refclk0 から refclk1 にする
  • PMAボーレートを変更する
  • デシリアライゼーション係数を変更する
図 109.  Avalon® Memory-Mappedインターフェイスを介したPMA属性の送信

リコンフィグレーション・フロー

  1. tx_reset/rx_reset をアサートします。
  2. tx_ready/rx_ready がデアサートするのを待ちます。
  3. PMA属性コード0x0001を使用してPMAをディスエーブルします。
    1. オプション: 0x8A[7] = 0x1を書き込み、PMA属性ステータスフラグ (前の属性の0x8A[7]) がクリアされるようにします。これは、レジスター0x84から0x87に書き込み、新しいPMA属性をロードする前に行います。
    2. 0x84[7:0] = 0x00を書き込みます。
    3. 0x85[7:0] = 0x00を書き込みます。
    4. 0x86[7:0] = 0x01を書き込みます。
    5. 0x87[7:0] = 0x00を書き込みます。
    6. 0x90[0] = 1'b1を書き込みます。
    7. 0x8A[7] を読み出します。これは1である必要があります。
    8. 0x8B[0] を読み出します。0に変わるまで行います。
    9. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  4. tx_pma_ready/rx_pma_ready がデアサートするのを待ちます。
  5. リファレンス・クロックの変更方法については、リファレンス・クロックの切り替え を参照してください。
  6. PMA内の内部コントローラーをリセットします。これは、REFCLKソースが、次に示す事項によって変更されるためです。
    1. 0x200[7:0] = 0x00を書き込みます。
    2. 0x201[7:0] = 0x00を書き込みます。
    3. 0x202[7:0] = 0x00を書き込みます。
    4. 0x203[7:0] = 0x81を書き込みます。
    5. 0x207を読み出します。0x80になるまで行います。これは、動作が正常に完了したことを示します。
  7. TX/RXボーレートをrefclk * 50、かつ15Gbps以上に変更します。これにはPMA属性コード0x0005を使用します。
    1. 0x84[7:0] = 0x32を書き込みます。
    2. 0x85[7:0] = 0x80を書き込みます (ビット7はTX/RXの両方に更新を適用します)。
    3. 0x86[7:0] = 0x05を書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  8. シリアライゼーション/デシリアライゼーション・ファクターを40ビット幅に変更します。これにはPMA属性コード0x0014を使用します。
    1. 0x84[7:0] = 0x33を書き込みます。
    2. 0x85[7:0] = 0x00を書き込みます。
    3. 0x86[7:0] = 0x14を書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  9. RXフェーズスリップを変更して、RX PMAタイミングマージンを最大化します。
    1. 0x84[7:0] = 0x00を書き込みます。
    2. 0x85[7:0] = 0xA4を書き込み、36UIだけスリップさせます。
    3. 0x86[7:0] = 0x0Eを書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  10. PMA属性コード0x0001を使用してPMAをイネーブルします。
    1. 0x84[7:0] = 0x07を書き込みます。
    2. 0x85[7:0] = 0x00を書き込みます。
    3. 0x86[7:0] = 0x01を書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  11. PRBS31データをイネーブルします。
    1. 0x84[7:0] = 0x25を書き込みます。
    2. 0x85[7:0] = 0x03を書き込みます。
    3. 0x86[7:0] = 0x02を書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  12. 内部シリアル・ループバック・モードに変更します。これにはPMA属性コード0x0008を使用します。
    1. 0x84[7:0] = 0x01を書き込みます。
    2. 0x85[7:0] = 0x01を書き込みます。
    3. 0x86[7:0] = 0x08を書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  13. 初期粗調アダプティブ・イコライゼーションをイネーブルします。これにはPMA属性0x000Aを使用します。
    1. 0x84[7:0] = 0x01を書き込みます。
    2. 0x85[7:0] = 0x00を書き込みます。
    3. 0x86[7:0] = 0x0Aを書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  14. 初期粗調アダプテーション・ステータスを読み出します。これにはPMA属性0x0126を使用します。
    1. 0x84[7:0] = 0x00を書き込みます。
    2. 0x85[7:0] = 0x0Bを書き込みます。
    3. 0x86[7:0] = 0x26を書き込みます。
    4. 0x87[7:0] = 0x01を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
    9. レジスター0x88を読み出します。0x88[0] = 0になるまでこのステップ14を繰り返して、初期粗調アダプテーションが完了したことを示します。
  15. PMAアナログ・コンフィグレーションをロードします (該当する場合)。
    1. 0x40143 = 0x80に加えて、ロードするコンフィグレーション番号を書き込みます。例えば、コンフィグレーション2をロードするには0x82を書き込みます。
    2. 0x40144[0] を読み出します。0x1が報告されるまで行います。

内部シリアル・ループバック・モードを実行している場合は、次の手順はスキップします。

  1. ミッションモードをイネーブルするか、内部シリアル・ループバック・モードをディスエーブルします。
    1. 0x200 = 0xD2を書き込みます。
    2. 0x201 = 0x00を書き込みます。
    3. 0x202 = 0x00を書き込みます。
    4. 0x203 = 0x96を書き込みます。これにより、START_ADAPTATION のオペコードが選択されます。
    5. 0x80になるまで0x207を読み出します。これは、動作が正常に完了したことを示します。

内部シリアル・ループバック・モードを実行している場合は、次の手順はスキップします。

  1. ミッションモードで初期粗調アダプティブ・イコライゼーションをイネーブルします。
    1. 0x200 = 0xD2を書き込みます。
    2. 0x201 = 0x00を書き込みます。
    3. 0x202 = 0x01を書き込みます。
    4. 0x203 = 0x96を書き込みます。これにより、START_ADAPTATION のオペコードが選択されます。
    5. 0x80になるまで0x207を読み出します。これは、動作が正常に完了したことを示します。

内部シリアル・ループバック・モードを実行している場合は、次の手順はスキップします。

  1. 初期粗調アダプテーション・ステータスを読み出します。これにはPMA属性0x0126を使用します。
    1. 0x84[7:0] = 0x00を書き込みます。
    2. 0x85[7:0] = 0x0Bを書き込みます。
    3. 0x86[7:0] = 0x26を書き込みます。
    4. 0x87[7:0] = 0x01を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
    9. レジスター0x88を読み出します。0x88[0] = 0になるまでこのステップ18を繰り返して、初期粗調アダプテーションが完了したことを示します。
  2. tx_reset/rx_reset をアサートします。
  3. PRBS31データをディスエーブルします。
    1. 0x200 = 0xE2を書き込みます。
    2. ミッションモードの場合は、0x201 = 0x01を書き込みます。
    3. 内部シリアル・ループバック・モードの場合、0x201 = 0x03を書き込みます。
    4. 0x202 = 0x00を書き込みます。
    5. 0x203 = 0x96を書き込みます。これにより、START_ADAPTATION のオペコードが選択されます。
    6. 0x80になるまで0x207を読み出します。これは、動作が正常に完了したことを示します。
  4. 有効なデータレート・トラフィックがRXで使用可能な場合は、次の手順に進みます。または、トラフィックが有効になるまで初期粗調アダプテーションを再実行します。
  5. 継続アダプテーションの実行前にPMAアナログ・パラメーターを設定する必要がある場合は、属性を送信します。属性を使用したPMAアナログ・パラメーターの読み出しと書き込み を参照してください。
  6. 連続アダプティブ・イコライゼーションをイネーブルします。これにはPMA属性コード0x000Aを使用します。
    1. 0x84[7:0] = 0x06を書き込みます。
    2. 0x85[7:0] = 0x00を書き込みます。
    3. 0x86[7:0] = 0x0Aを書き込みます。
    4. 0x87[7:0] = 0x00を書き込みます。
    5. 0x90[0] = 1'b1を書き込みます。
    6. 0x8A[7] を読み出します。これは1である必要があります。
    7. 0x8B[0] を読み出します。0に変わるまで行います。
    8. 0x8A[7] を1'b1に書き込み、0x8A[7] 値をクリアします。
  7. 必要に応じて、 rx_is_lockedtodata 出力ピンを確認します。
  8. リンクがアップしました。