开发者分享|AMD Versal™ 自适应 SoC GTM 如何通过 APB3 总线读取 Attributes 并计算误码率

科技   2024-09-12 19:01   中国香港  


本文作者:AMD 工程师 Zhang Cheng


PRBS 误码测试时,通常需要计算误码率。如果使用 IBERT,误码率可以在 AMD Vivado™ Design Suite 的 GUI 界面中读取,但是在无法使用 JTAG 连接到 AMD Vivado 的场景,需要用户通过读取相应的寄存器来计算误码率。本文将对这一过程作详细介绍。


APB3 总线接口时序


AM017 提供了 APB3 的读写时序,过程还是比较简单的。地址线为 APB3PADDR,写数据为 APB3PWDATA,读数据为 APB3PRDATA。读写操作通过 APB3PWRITE 切换,当 APB3WRITE 为1时进行写入操作,当为0时进行读取操作。APB3PSEL 指示从设备已被选中,并需要进行数据传输。APB3PENABLE 被置位表示进入访问阶段的开始。当 APB3PREADY 被置位时,表示从设备可以在下一个 APB3CLK 的上升沿时完成传输。参考下图:


1. 读取


2. 写入


访问寄存器步骤


1. 设置 PRBS Pattern 模式和 Loopback 模式,TX 和 RX 的 Pattern 需要保持一致,设置完成后需要对 GTM 做一次复位。如果外部链路连接没有问题或者使用近端 PMA/PCS 回环,就可以看到 RXPRBSLOCKED 已经被置1。


2. 使用 RXPRBSCNTRESET 管脚对总 Counter 和 Error Counter 清零。

注意:当使用 RXPRBSCNTRESET 复位 Counter 时(无论时使用 Port 还是在 IBERT 界面点击 BER RESET),会导致 RXPMARESETDONE 短时的拉低后再拉高。尽管 RXPMARESETDONE 翻转,但是 PMA 层的任何模块都没有被复位。详细信息可参考 AR000036588 的说明:https://adaptivesupport.:.com/s/article/000036588?language=en_US


3. AMD Versal™ 自适应 SoC GTM 每个 Lane 都提供了两组可以用于计算 PRBS 误码率的寄存器,分别是 DO_FROM_PRBSERR 和 DO_FROM_RX_CYCLECNT。这两组寄存器是64位长度,因此会占用4个地址,分别是0x0840(COE_STATUS_PRBSERR_CNT0)和0x0841(COE_STATUS_PRBSERR_CNT1)以及0x0842(COE_STATUS_RX_CYCLECNT0)和0x0843(COE_STATUS_RX_CYCLECNT1)。


4. 因为 PHY Clock 的 Counter 和 Error Bit 的 Counter 在 PRBS 测试运行时会实时变化,GTM 内部有锁存机制来保证两组寄存器被同时捕获,不会因为读取数据的时间差导致误码率计算的误差。在读取过程中,要保证先读取0x0840地址,0x0840读取后内部会自动刷新0x0841、0x0842和0x0843的数据。如果0x0840地址没有被读取,那么0x0841、0x0842和0x0843的数据会始终保持上一次的值。注意:AM017 v1.0的相关描述有误,详细信息可参考 AR000036550 的说明:

https://adaptivesupport.amd.com/s/article/000036550?language=en_US



计算误码率


1. 误码率计算公式:

误码率 = 错误 Bit 位数量 / 实际 Bit 位数量

实际Bit位数量 = COE_STATUS_RX_CYCLECNT* RX_Interface_width

RX_Interface_width 的位宽可以有两种方法获取:

a. 通过读取 RX_PCS_CFG0 的参数

比如下图中0x9代表 RX_DATA_WIDTH 是160位长度。


b. RX_Interface_width = Line rate / RXUSRCLK


2. 误码率计算示例:

假设:RX_Interface_width = 160-bit,PRBSERR_CNT0 = 0x30,COE_STATUS_RX_CYCLECNT= 0x255B80CCEC = 160,448,957,676

Actual bits = COE_STATUS_RX_CYCLECNT * RX_Interface_width = 160,448,957,676 * 160

BER(误码率) = 48 / (160,448,957,676 * 160) = 1.869753498840423e-12



AMD 自适应 SOC 及 FPGA 中文技术支持社区

欢迎您访问本社区论坛:

[https://support.xilinx.com/s/?language=zh_CN]

我们希望能帮助您快速找到所需内容。本网站是AMD 自适应 SoC 及 FPGA 支持资源登录页面,其中包括我们的知识库、社区论坛以及指向更多内容的链接。搜索并探索您所选主题的内容,然后登录以查看更多支持选项。


XILINX开发者社区
Xilinx开发者社区源于社区,服务社区,是面向广大开发者与产学研合作的平台,以技术为驱动,创建共享知识社区。(注: Xilinx is now a part of AMD)
 最新文章