4.1.1. PMA/FEC Direct PHY Multirate设计示例:仿真测试台
PMA/FEC Direct PHY Multirate设计示例支持下表中显示的配置。
PMA/FEC Direct PHY Multirate示例设计仿真测试台结构图如下。
基本类别(base variant) | 可用于动态重配置的类别(variant) |
---|---|
50G-1 | 53.1250Gbps (PAM4) PMA Direct |
53.1250Gbps (PAM4) FEC Direct (544,514) | |
25.7812Gbps (NRZ) PMA Direct | |
24.3302Gbps (NRZ) PMA Direct | |
10.3125Gbps (NRZ) PMA Direct | |
10.1376Gbps (NRZ) PMA Direct | |
9.8304Gbps (NRZ) PMA Direct | |
4.9152Gbps (NRZ) PMA Direct | |
2.4576Gbps (NRZ) PMA Direct |
图 13. 50G-1 Base Variant的仿真测试台结构图
测试台程序通过 Avalon® memory-mapped interface访问信号,状态信号和控制信号对测试台组件进行控制。 Avalon® memory-mapped interface仲裁器(arbiter)用于将从测试台程序的 Avalon® memory-mapped interface访问解码成多个 Avalon® memory-mapped interface slave。
testwrap模块中包含PRBS generator和PRBS verifier。有2种类型的testwrap模块:
- PMA testwrap – 用于PMA direct配置。
- FEC testwrap – 用于FEC direct配置。
有两个参考时钟提供给50G-1 base variant的F-Tile Reference and System PLL Clocks Intel FPGA IP。156.25 MHz的参考时钟用于Ethernet协议数据速率,而122.88 MHz的参考时钟用于CPRI协议数据速率。
仿真流程:
- PMA/FEC Direct PHY Multirate IP根据基本配置文件(base profile)进行上电。
- 根据上电配置文件(power-up profile)对测试台变量进行初始化。位于top_tst.sv文件中的参数设置是:
- DR_NUM:表示动态重配置转换的数量(number of dynamic reconfiguration transition)。
- DR_SEQ:表示动态重配置序列(dynamic reconfiguration sequence)。
- 根据参数设置中的序列执行动态重配置。
- 检查测试台错误标志(error flag)并确定测试台是通过了还是失败了。动态重配置流量测试之后,如果有任何错误,那么此错误标志被设为1。
若要进行自定义(customization),您可以通过修改top_tst.sv文件中的DR_NUM和DR_SEQ本地参数对测试流程进行配置。profile ID被传递到IP以配置原定的动态重配置任务。
动态重配置序列示例:53.1G > 25.7G > 53.1G FEC > 24.3G > 10.1G > 9.8G > 53.1G
若要实现此动态重配置序列,您必须执行六次动态重配置转换,然后指定重配置序列。更新以下本地参数设置文件:
// 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 = 6;
localparam [3:0] DR_SEQ [0 : DR_NUM-1] = {DR_MODE_25G_1,DR_MODE_50GKP_1,DR_MODE_24G_1,DR_MODE_10p1G_1,DR_MODE_9p8G_1,DR_MODE_50G_1};