YT8512收发包统计应用(已实践)
一、Packet Checker(收发包统计)应用说明
核心功能
统计从 MDI(线路侧)和 MII/RMII(主机侧)接收的数据包,按 “正确包” 和 “CRC 错误包” 分类,所有统计寄存器均为read clear(读清除) 特性。
操作步骤
- 打开 Packet Checker:写扩展寄存器
0x40A0[15:14] = 2’b10(仅启用统计功能,不影响其他模块)。 - 保持芯片正常工作,Checker 自动统计接收数据包状态。
- 查看统计结果(读取后寄存器自动清零,需及时缓存数据):
- MDI 侧正确包:读取
0x40A3~0x40A8(含不同长度合规、CRC 正确的包)。 - MDI 侧 CRC 错误包:读取
0x40A9~0x40AC(含不同长度的 CRC 错误包、碎片包、缺 SFD 包)。 - MII/RMII 侧正确包:读取
0x40AD~0x40B2(含不同长度合规、CRC 正确的包)。 - MII/RMII 侧 CRC 错误包:读取
0x40B3~0x40B6(含不同长度的 CRC 错误包)。
- MDI 侧正确包:读取
- 关闭 Packet Checker:写扩展寄存器
0x40A0[15:14] = 2’b01(禁用统计功能)。
二、Packet Generator(包生成器)应用说明
核心功能
生成指定长度、数量、格式的数据包,支持从 MII/RMII 发送,可配置 IPG、负载类型、CRC 是否错误等参数。
操作步骤
- 设置发送包长度:写扩展寄存器
0x40A1[15:0](单位:字节,默认 64 字节,需符合实际需求配置)。 - 设置发送包个数:写扩展寄存器
0x40A2[15:0],0 表示持续发包,非 0 表示生成指定数量后自动停止。 - (可选)设置 IPG 长度:写扩展寄存器
0x40A0[7:4](单位:字节,默认 12 字节,≥2 字节有效)。 - (可选)配置包其他参数(写
0x40A0对应位):- 前导码长度:
0x40A0[11:8](默认 8 字节,≥2 字节有效)。 - 负载类型:
0x40A0[1:0](00 = 递增字节,01 = 随机,10 = 固定模式 0x5AA5…)。 - CRC 控制:
0x40A0[2](0=CRC 正确,1=CRC 错误)。 - 强制发送:
0x40A0[3](1 = 链路未建立也发送)。
- 前导码长度:
- 配置模块模式:写扩展寄存器
0x40A0[15:13] = 3’b100(同时启用 Checker 统计和 Generator 测试模式)。 - 打开 Packet Generator:写扩展寄存器
0x40A0[12] = 1’b1,开始发包。 - 监控发包状态:轮询
0x40A0[12],当该位为1’b0时,表示已发完设置的包个数(仅包个数非 0 时有效)。 - 停止发包(按需操作):
- 包个数为 0(持续发包):写
0x40A0[12] = 1’b0手动停止。 - 包个数非 0:自动停止,无需额外操作。
- 包个数为 0(持续发包):写
- 关闭模块时钟:写扩展寄存器
0x40A0[14] = 1’b1(关闭 Generator 时钟,省电)。 - 关闭 Generator 和 Checker:写扩展寄存器
0x40A0[15:13] = 3’b010(禁用两个模块,恢复默认状态)。
三、配置寄存器列表
1. EXT 40A0H: PKG_SELFTEST CONTROL(核心控制位)
| 位域 | 符号 | 访问权限 | 默认值 | 关键功能说明 |
|---|---|---|---|---|
| 15 | Pkg_chk_en | RW | 0 | 使能 RX/TX 数据包校验器:- 1:启用(RX 校验器检查 PCS 接收的 MII 数据,TX 校验器检查 MII 桥发送的 MII 数据)- 0:禁用 |
| 14 | Pkg_en_gate | RW | 1 | 时钟门控控制:当Pkg_chk_en=0、bp_pkg_gen=1、pkg_gen_en=0时,1 = 关闭自测试模块时钟(省电),0 = 不关闭 |
| 13 | Bp_pkg_gen | RW | 1 | 数据包来源选择:- 1:正常模式(从 PAD 发送 xMII TX 数据)- 0:测试模式(发送pkg_gen模块生成的 MII 数据) |
| 12 | Pkg_gen_en | RW (SC) | 0 | 启用数据包生成器:- 1:开始生成数据包(仅当bp_pkg_gen=0时才发送到 transceiver)- 若pkg_burst_size=0:持续生成,直到该位被清 0- 若pkg_burst_size≠0:生成指定数量后自动停止,该位自清除(SC=Self-Cleared) |
| 11:8 | Pkg_prm_lth | RW | 4’d8 | 生成数据包的前导码长度(单位:字节),需≥2 字节,小于 2 的值会被忽略 |
| 7:4 | Pkg_ipg_lth | RW | 4’d12 | 帧间隙(IPG)长度(单位:字节),需≥2 字节,小于 2 的值会被忽略 |
| 3 | Xmit_mac_force_gen | RW | 0 | 强制发送:1 = 即使链路未建立,也允许pkg_gen发送数据 |
| 2 | Pkg_corrupt_crc | RW | 0 | CRC 错误控制:1 = 生成 CRC 错误的数据包,0 = 生成 CRC 正确的数据包 |
| 1:0 | Pkg_payload | RW | 2’b0 | 负载类型:- 00:递增字节负载- 01:随机负载- 10:固定模式(0x5AA55AA5…)- 11:保留 |
2. EXT 40A1H: PKG_SELFTEST CONTROL
- 功能:配置生成数据包的长度(单位:字节)。
- 位域:15:0
Pkg_length(RW,默认 64),即数据包总长度(含前导码、SFD、负载、CRC 等)。
3. EXT 40A2H: PKG_SELFTEST CONTROL
- 功能:配置一次突发(burst)生成的数据包数量。
- 位域:15:0
Pkg_burst_size(RW,默认 0):- 0:持续生成数据包(直到
pkg_gen_en被清 0) - 非 0:生成指定数量的数据包后停止(
pkg_gen_en自清除)。
- 0:持续生成数据包(直到
四、状态寄存器列表
这些寄存器均为只读(RO),用于统计收发数据包的各种状态(按方向、长度、CRC 正确性等分类),部分 32 位计数器分为高 16 位(_high)和低 16 位(_low)。
1. 接收方向(RX,从线路接收的数据包)
| 寄存器 | 符号 | 统计内容 |
|---|---|---|
| 40A3H | Pkg_ib_valid_high | pkg_ib_valid[31:16]:CRC 正确、长度 64~1518 字节的有效数据包数量(高 16 位) |
| 40A4H | Pkg_ib_valid_low | pkg_ib_valid[15:0]:同上(低 16 位) |
| 40A5H | Pkg_ib_os_good_high | pkg_ib_os_good[31:16]:CRC 正确、长度 > 1518 字节的超大数据包数量(高 16 位) |
| 40A6H | Pkg_ib_os_good_low | pkg_ib_os_good[15:0]:同上(低 16 位) |
| 40A7H | Pkg_ib_us_good_high | pkg_ib_us_good[31:16]:CRC 正确、长度 < 64 字节的短数据包数量(高 16 位) |
| 40A8H | Pkg_ib_us_good_low | (注:原文档描述有误,应为pkg_ib_us_good[15:0],即长度 < 64 字节的 CRC 正确包) |
| 40A9H | Pkg_ib_err | CRC 错误、长度 64~1518 字节的数据包数量 |
| 40AAH | Pkg_ib_os_bad | CRC 错误、长度≥1518 字节的超大数据包数量 |
| 40ABH | Pkg_ib_frag | 长度 < 64 字节的碎片数据包数量(无论 CRC 是否正确) |
| 40ACH | Pkg_ib_nosfd | 缺少 SFD(帧起始定界符)的数据包数量 |
2. 发送方向(TX,从 MII 发送的数据包)
| 寄存器 | 符号 | 统计内容 |
|---|---|---|
| 40ADH | Pkg_ob_valid_high | pkg_ob_valid[31:16]:CRC 正确、长度 64~1518 字节的有效数据包数量(高 16 位) |
| 40AEH | Pkg_ob_valid_low | pkg_ob_valid[15:0]:同上(低 16 位) |
| 40AFH | Pkg_ob_os_good_high | pkg_ob_os_good[31:16]:CRC 正确、长度 > 1518 字节的超大数据包数量(高 16 位) |
| 40B0H | Pkg_ob_os_good_low | pkg_ob_os_good[15:0]:同上(低 16 位) |
| 40B1H | Pkg_ob_us_good_high | pkg_ob_us_good[31:16]:CRC 正确、长度 < 64 字节的短数据包数量(高 16 位) |
| 40B2H | Pkg_ob_us_good_low | (注:原文档描述有误,应为pkg_ob_us_good[15:0],即长度 < 64 字节的 CRC 正确包) |
