Fタイル・ダイナミック・リコンフィグレーションのデザイン例ユーザーガイド

ID 710582
日付 4/03/2023
Public
ドキュメント目次

3.1.1. PMA/FEC Direct PHY Multirateデザイン例のシミュレーション・テストベンチ

次の図に、PMA/FEC Direct PHY Multirateデザイン例シミュレーション・テストベンチのブロック図を示します。
図 9. 50G-1ベースバリアントのシミュレーション・テストベンチのブロック図
図 10. 400G-8ベースバリアントのシミュレーション・テストベンチのブロック図

テストベンチ・プログラムは、 Avalon® メモリーマップド・インターフェイスのアクセス、ステータス、およびコントロール信号を介してテストベンチ・コンポーネントを制御します。 Avalon® メモリーマップド・インターフェイス・アービターは、テストベンチ・プログラムから複数の Avalon® メモリーマップド・インターフェイス・スレーブへの Avalon® メモリーマップド・インターフェイスのアクセスをデコードします。

testwrapブロックは内部的にPRBSジェネレーターとPRBSベリファイアーで構成されます。testwrapブロックには2種類あります。
  • PMA testwrap - PMA directコンフィグレーションで使用されます。
  • FEC testwrap - FEC directコンフィグレーションで使用されます。
50G-1ベースバリアントのデータレート25.7812Gbps以下の場合、デザインは単一の25G PMA testwrapを共有します。
50G-1ベースバリアントのデザインの場合、3つのリファレンス・クロック (156.25MHz、153.6MHz、および184.32MHz) がシステムクロックに供給されます。
  • 156.25MHzのリファレンス・クロックは、イーサネット・プロトコル・データレート (つまり、53.125G (PAM4) PMA Direct、53.125G (PAM4) FEC Direct、25.7812G (NRZ) PMA Direct、および10.3125G (NRZ) PMA Direct) に使用されます。
  • 153.6MHzのリファレンス・クロックは、9.8304G (NRZ) PMA Direct、4.9152G (NRZ) PMA Direct、および2.4576G (NRZ) PMA Direct CPRIプロトコル・データレートに使用されます。
  • 184.32MHzのリファレンス・クロックは、24.3302G (NRZ) PMA Directおよび10.1376G (NRZ) PMA Direct CPRIプロトコル・データレートに使用されます。

400G-8ベースバリアントのデザインの場合、1つのリファレンス・クロック (156.25MHz) がシステムクロックに供給されます。

シミュレーションのフロー

  • PMA/FEC Direct PHY Multirate IPは、ベース・プロファイルに基づいて起動されます。
  • パワーアップ・プロファイルに基づいて、テストベンチ変数を初期化します。top_tst.sv ファイルにあるパラメーター設定は、次のとおりです。
    • DR_NUM: ダイナミック・リコンフィグレーション移行の数を示します。
    • DR_SEQ: ダイナミック・リコンフィグレーション・シーケンスを示します。
  • パラメーター設定のシーケンスに基づいて、ダイナミック・リコンフィグレーションを実行します。
  • テストベンチのエラーフラグを確認し、テストベンチが成功したか失敗したかを判断します。ダイナミック・リコンフィグレーションのトラフィック・テスト後にエラーが発生した場合、このエラーフラグは1に設定されます。

カスタマイズの場合は、top_tst.sv ファイルにある DR_NUM および DR_SEQ localparamを変更して、テストフローをコンフィグレーションできます。プロファイルIDはIPに渡され、目的のダイナミック・リコンフィグレーション・タスクをコンフィグレーションします。

50G-1ベースバリアントのダイナミック・リコンフィグレーション・シーケンスの例: 53.1G > 25.78125G > 53.1G FEC > 24.3G > 53.1G: このダイナミック・リコンフィグレーション・シーケンスを実現するには、以下に示すダイナミック・リコンフィグレーション移行 (4つの移行) を実行し、リコンフィグレーション・シーケンスを指定する必要があります。次のように、ローカル・パラメーター設定ファイルを更新します。
// Available Modes
localparam DR_MODE_50G_1      = 4'b0000; // ETH
localparam DR_MODE_25G_1      = 4'b0001; // ETH
localparam DR_MODE_24G_1      = 4'b0010; // CPRI
localparam DR_MODE_10p1G_1    = 4'b0011; // CPRI
localparam DR_MODE_9p8G_1     = 4'b0100; // CPRI
localparam DR_MODE_4p9G_1     = 4'b0101; // CPRI
localparam DR_MODE_2p4G_1     = 4'b0110; // CPRI
localparam DR_MODE_10G_1      = 4'b0111; // ETH
localparam DR_MODE_50GKP_1    = 4'b1000; // ETH

// DR from base variant (DR_MODE_50G_1) to other variants in the following order, starting from left.
localparam DR_NUM = 4;
localparam [3:0] DR_SEQ [0 : DR_NUM-1] = {DR_MODE_25G_1,DR_MODE_50GKP_1,DR_MODE_24G_1,DR_MODE_50G_1};
50G-1ベースバリアントのダイナミック・リコンフィグレーション・シーケンスの例: 53.1G > 9.8G > 4.9G: このダイナミック・リコンフィグレーション・シーケンスを実現するには、以下に示すダイナミック・リコンフィグレーション移行 (2つの移行) を実行し、リコンフィグレーション・シーケンスを指定する必要があります。次のように、ローカル・パラメーター設定ファイルを更新します。
// Available Modes
localparam DR_MODE_50G_1      = 4'b0000; // ETH
localparam DR_MODE_25G_1      = 4'b0001; // ETH
localparam DR_MODE_24G_1      = 4'b0010; // CPRI
localparam DR_MODE_10p1G_1    = 4'b0011; // CPRI
localparam DR_MODE_9p8G_1     = 4'b0100; // CPRI
localparam DR_MODE_4p9G_1     = 4'b0101; // CPRI
localparam DR_MODE_2p4G_1     = 4'b0110; // CPRI
localparam DR_MODE_10G_1      = 4'b0111; // ETH
localparam DR_MODE_50GKP_1    = 4'b1000; // ETH

// DR from base variant (DR_MODE_50G_1) to other variants in the following order, starting from left.
localparam DR_NUM = 2;
localparam [3:0] DR_SEQ [0 : DR_NUM-1] = {DR_MODE_9p8G_1,DR_MODE_4p9G_1};
400G-8ベースバリアントのダイナミック・リコンフィグレーション・シーケンスの例: 1x400G-8 > 2x100G-4 > 1x400G-8 > 2x200G-4: このダイナミック・リコンフィグレーション・シーケンスを実現するには、以下に示すダイナミック・リコンフィグレーション移行 (3つの移行) を実行し、リコンフィグレーション・シーケンスを指定する必要があります。次のように、ローカル・パラメーター設定ファイルを更新します。
// Available Modes
localparam DR_MODE_400G_8      = 4'b0000;
localparam DR_MODE_200G_4      = 4'b0001;
localparam DR_MODE_100G_4      = 4'b0010;

// DR from base variant (DR_MODE_400G_8) to other variants in the following order, starting from left.
localparam DR_NUM = 3;
localparam [3:0] DR_SEQ [0 : DR_NUM-1] = {DR_MODE_100G_4,DR_MODE_400G_8,DR_MODE_200G_4};