本文作者:AMD 工程师 Cheng Zhang
一、关于 PRBS13、QPRBS13、PRBS13Q 和 QPRBS13-CEI 的定义。
1. PRBS13 的表达式为 x13 + x12 + x2 + x + 1。
2. 在 AR72117 中对 QPRBS13、PRBS13Q 和 QPRBS13-CEI 有以下定义:
PRBS13Q 按照 IEEE 802.3bs-2017 120.5.11.2.1 被定义为重复两次以格雷编码的 PRBS13
QPRBS13-CEI 与 PRBS13Q 相同
QPRBS13 是 PRBS13 和反转的 PRBS13 组合
目前对于 Vivado 2023.1 版本的 IBERT GUI 界面暂时不支持 QPRBS13 的设置,需要通过 tcl 或者端口设置的方法来实现。
Tips:不建议同时用 IBERT GUI 和 Properties 窗口设置 GTM 的 Attributes,可能会导致寄存器值出错。
3. PRBS13、QPRBS13、PRBS13Q 解析。
首先,根据 PRBS13 的表达式来构建一个数列表格, PRBS13 每 8191 个 bit 循环一次,此处选取前 64 位数据展示并且与仿真波形作对比:
PRBS13 仿真波形 (TXQPRBSEN = 0, TX_GRAY_BYP_EN = 1)
注意:按照 AM017 的描述,当 TX_GRAY_BYP_EN 为 1 时,关闭 GARY 编码器。当 TX_GRAY_BYP_EN 为 0 时,使能 GARY 编码器。
PRBS13Q 仿真波形 (TXQPRBSEN = 0, TX_GRAY_BYP_EN = 0)
QPRBS13 仿真波形 (TXQPRBSEN = 1, TX_GRAY_BYP_EN = 1)
当前输入为反转后的 PRBS13(连续12位“1”),因此按照 PRBS13 表达式产生的 64 位数据如下表所示:
在了解 QPRBS13 的编码规则后,接下去搭建工程做实际的测试。
二、新建 Versal GTM 工程
对于 Versal GTM,IBERT 工具已经被集成到 GTM 内部。因此需要使用 Versal Transceivers Wizard 新建一个测试工程,本文的测试工程基于 VPK120 评估板设计。
在 Wizard 中主要更改两个地方的设置:
Transceiver type:设置为 GTM
Preset:选择 GTM(PAM4) Ethernet 51G
设置完成后打开 IP Example Design:
三、调整硬件设置
此处需要对 Example design 做四个调整:
1. 把 gpio_enable、gt_reset 和 rate_sel 三个信号连接到 VIO 的输出。
2. 添加 Clocking wizard 模块,设置 clk_out1 的频率为 200MHz,并且提供给 gt_bridge 和 gt_quad 的 apb3_clk 作为时钟。
3. 设置 TX 和 RX 的 Reference Clock 频率为 156.25MHz。
4. 把 GT Quad 约束到 Quad 202,Reference clock 约束到管脚 V45。
修改完成后点击 Generate Device Image 生成 PDI 文件,连接 JTAG 并且把 PDI 下载到 VPK120。
四、构建寄存器读写函数
控制 GTM 相关寄存器需要按位操作,因此首先需要设计一个能够按位读写的函数,函数内部执行步骤如下:
1. 获取对象名称。
本文中的 IBERT 名称为 IBERT_0,在后面的操作中都以 IBERT_0 作为操作的对象名称。因为工程中用了 GT Quad202,所以 tcl 命令对于 Quad202 的 ch0 定义为:IBERT_0.Quad_202.CH_0 ,其他通道可参照这个命名类推。
2. 刷新全部寄存器。
这一步操作很重要,如果没有刷新全部寄存器的步骤,将无法读取到最新的寄存器数据,可能会读出来上一次的数据或者全 0 的数据。
3. 数据格式转换。
刷新寄存器后会发现在 GT Properties 窗口显示的数据从 0xXXXXXXXX 变为了 0xXXXX_XXXX,然而在 tcl 的按位与和按位或的运算中无法识别下划线,下划线会导致数据运算出错,这一步需要先从相应的寄存器把数据读取出来,然后将下划线移除。
这里的 channel 和 reg 是函数的参数,channel 代表 GT 的通道编号,reg 是需要操作的寄存器。
4. 判断和位运算。
这里的 op 和 value 是函数的参数,op 代表运算操作是按位与还是按位或,value 是具体运算的值。
5. 将系数设回到相应的寄存器 。
6. 操作函数定义。
操作函数有4个传递参数 proc change_gtm_attributes { channel reg value op },具体作用在上文已经说明。例如对于下面这个函数,其对应的操作是向 Quad_202.CH_0 的 CH0_FABRIC_INTF_CFG0 寄存器按位与的方式写入 0xFFFEFFDF,即将 CH0_FABRIC_INTF_CFG0 寄存器的 Bit5 和 Bit16 置为“0”,其余位保持不变。
五、配置 GTM 的相关寄存器产生 QPRBS13 序列
1. 打开 Attributes 控制使能,关闭端口控制。
2. 设置 TX PRBS 的 Pattern。
3. 设置 RX PRBS 的 Pattern。
4. 打开 TXQPRBS 使能。
5. 打开 RXQPRBS 使能。
6. 关闭 TX Gray Encoder 使能。
7. 关闭 TX Gray Decoder 使能。
8. 设置 LOOPBACK 为 Near end PCS。
六、实际运行结果
1. 将 PDI 文件下载到器件中,并且运行 tcl 命令,先不使能 QPRBS,设置为常规 PRBS13 输出。
可以看到 NEAR-END PCS 回环已经建立,并且 RXPRBSLOCKED 也已经拉高。
2. 运行 TCL 命令,打开 TXQPRBS 使能,对于 RX 继续输出常规 PRBS,此时 Link status 显示为 No Link 和实际速率之间翻转,且 RXPRBSLOCKED 输出状态也呈现为周期性翻转。
3. 再次运行 TCL 命令,打开 RXQPRBS 使能,此时的 Link status 再次恢复显示为实际速率,RXPRBSLOCKED 输出也再次呈现为高电平。
4. Versal GTM 除了不支持 QPRBS-7,其他的 Pattern 都是支持的。
5. 这个方法也可以用于产生其他 QPRBS Pattern。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !