以太网 (GMAC)
以太网简介
借助以太网外设,器件可以通过以太网按照 IEEE 802.3-2002 标准发送和接收数据。 以太网提供了可配置、灵活的外设,用以满足客户的各种应用需求。它支持与外部物理层 (PHY) 相连的两个工业标准接口:默认情况下使用的介质独立接口 (MII)(在 IEEE 802.3 规 范中定义)和简化介质独立接口 (RMII)。它有多种应用领域,例如交换机和网络接口卡。 除了 IEEE 802.3 规范中定义的默认接口外,以太网外设还支持多个与 PHY 相连的工业标准 接口。它符合以下标准:
IEEE 802.3-2008,用于以太网 MAC 和介质独立接口 (MII)
IEEE 1588-2008,用于精密网络时钟同步协议 (PTP)
IEEE 802.1AS-2011 和 802.1-Qav-2009,用于音频视频 (AV) 通信
IEEE 802.3az-2010,用于节能型以太网 (EEE)
RMII 联盟的 RMII 规范第 1.2 版
GMAC 简介
GMAC 是一款高性能 1000M/100M/10M 以太网控制器。它支持 GMII/RGMII/MII/RMII MAC-PHY 接口,以及支持 AXI 和 AHB 的系统总线。
GMAC 内核特性
GMAC 的主要特性如下:
支持 10/100/1000M 全双工和 10/100M 半双工。客户在配置 IP 时可选择仅支持 10/100M。
支持 GMII/RGMII/MII/RMII 接口。
支持 AXI/AHB 系统接口。客户在配置 IP 时可选择 AXI 或 AHB 接口。
符合 IEEE 802.3-2008 标准和 IEEE 802.3az 标准。
支持配置接收和发送 SRAM 总大小,可选值为 8KB、12KB、16KB 和 24KB。客户在配置 IP 时可选择大小。
最多 32 个额外的 48 位 MAC 源地址过滤器,每个字节带有掩码。客户在配置 IP 时可选择 0 到 32 之间的数字。
最多 32 个额外的 48 位 MAC 目标地址过滤器,每个字节都带有掩码。客户可以在配置 IP 时选择0 到 32 之间的数字。
支持接收数据包和发送数据包的 MIB 统计信息。
非对称/对称流量控制。
SVLAN 和 VLAN 检测。
CVLAN 标签插入/移除。
魔术包检测。
多播帧、广播帧和单播地址过滤。
支持最大 4KB 的巨型数据包。
支持第 22 条和第 45 条 MDIO 操作。
接收路径支持 IPv4、IPv6、TCP、UDP、ICMP 校验和验证。
发送路径支持 IPv4、IPv6、TCP、UDP、ICMP 校验和卸载。
支持动态时钟门控以节省功耗。
支持 1588 PTP 协议。客户可以在配置 IP 时选择此功能。
支持 PPS_OUT 功能,可将本地 RTC 值输出至外部 PPS_OUT 引脚。
作为 1588 主站时,支持将本地 RTC 与外部 PPS_IN 引脚同步。客户可在配置 IP 时选择此功能。
GMAC 架构
图5.1 GMAC架构图
各模块功能如下:
CSR_REG 模块为内部配置寄存器,可通过外部 APB 总线进行读写。
MAC 模块用于处理 802.3-2008 标准。
SRAM 模块用于存储 RX 数据包和 TX 数据包。SRAM 模块可由客户端生成并实例化。SRAM 大小可配置为 8KB、12KB、16KB 和 24KB。考虑到 AXI/AHB 的非连续读写带宽,更大的 SRAM 大小将有利于 RX 和 TX XMII 性能。默认情况下,我们分配约 2/3 的 SRAM 作为 RX SRAM 来存储接收的数据包,并分配约 1/3 的 SRAM 作为 TX SRAM 来存储发送的数据包。Rx 和 Tx SRAM 的大小比例可以通过 SRAM_CTRL_REG_X 寄存器进行调整。如果您确实希望根据应用调整比例,请联系 nucleisys 的 AE。
DMA 模块使用描述环结构将接收的数据包 DMAW 到主机内存中,并将发送的数据包 DMAR 出主机内存。
功能描述
MAC 源地址过滤
IEEE802.3 协议中,MAC 源地址匹配过滤功能并不强制要求,但某些应用需要 MAC 进行 MAC 源地址过滤。
(注意:MAC 源地址可以是广播地址、多播地址或单播地址,这取决于 SA_FILTER 的配置,硬件对地址类型没有任何限制。)
GMAC 支持 MAC 源地址过滤,并提供两种模式(白名单和黑名单),以适应更多场景,需硬件配置支持。
白名单模式:
将 SA_FILTER_WHITE_BLACK_SEL 控制位设置为 0,即可选择白名单模式。在此模式下,只有符合 SA 过滤器的地址才被允许上传到系统。对于每个过滤器,都有一个相应的 SA_FILTER_EN 启用位, 用于控制是否启用该过滤器。SA_FILTER_EN[0] 对应 SA_FILTER0,以此类推。如果 SA_FILTER_EN[N] 为 0, 则表示我们不会将 MAC SA 与相应的 SA_FILTERN 进行比较。对于每个过滤器, 都有一个 SA_MASK 控制位,SA_MASK[0] 对应字节 0,以此类推。当 MASK 位为 1 时,表示我们不会将相应的字节与过滤器的相应字节进行比较。
以下是一些示例:
接收数据包的 SA 为 00-11-22-33-44-55-66(00 是网络上出现的第一个字节,66 是网络上出现的最后一个字节),我们将该 SA 与所有已启用的过滤器进行比较。以下是比较流程:
如果 SA_FILTER N 的使能位为 0,则视为比较失败,直接进入下一个 SA_FILTER N + 1 的比较。
如果 SA_FILTER N 的使能位为 1:
将第一个字节 00 与 SA_FILTERN[47:40] 进行比较,如果 (00 == SA_FILTER[47:40]) 或 (SA_MASK[5] == 1),则字节 0 的比较结果为通过。
如果字节 0 的比较结果为失败,则中止下一个字节的比较,SA_FILTER N 比较失败,直接进入下一个 SA_FILTER N + 1 的比较。
如果字节 0 的比较结果为通过,则继续进行下一个字节的比较。
如果 SA_FILTER N 的比较结果为通过(所有 6 个字节的比较结果均为通过)。则中止以下 SA_FILTER 的比较,MAC 源地址合法,则允许数据包上传到系统。
如果 SA_FILTER N 的比较失败(任何字节的比较失败),则继续进行下一个 SA_FILTER N + 1 的比较,直到完成所有 SA_FILTER 的比较。如果所有 SA_FILTER 的比较都失败,则 MAC 源地址非法,数据包将被硬件自动丢弃。
黑名单模式:
将 SA_FILTER_WHITE_BLACK_SEL 控制位设置为 1 以选择黑名单模式。在此模式下,只有符合 SA 过滤器的地址才会被视为非法 MAC 源地址,并禁止上传到系统。否则, 数据包将允许上传到系统。对于每个过滤器,都有一个相应的 SA_FILTER_EN 控制位来控制是否启用该过滤器。 SA_FILTER_EN[0] 控制 SA_FILTER0,以此类推。如果 SA_FILTER_EN[N] 为 0, 则表示我们不会将 MAC SA 与相应的 SA_FILTERN 进行比较。对于每个过滤器,都有一个 SA_MASK 控制位, SA_MASK[0] 控制 byte0,以此类推。当 MASK 位为 1 时,表示我们不会将相应的字节与过滤器的相应字节进行比较。
以下是一些示例:
接收数据包的 SA 为 00-11-22-33-44-55-66(00 是网络上出现的第一个字节,66 是网络上出现的最后一个字节), 我们将该 SA 与所有已启用的过滤器进行比较。 以下是比较流程:
如果 SA_FILTER N 的使能位为 0,则视为比较失败,直接进入下一个 SA_FILTER N + 1 的比较。
如果 SA_FILTER N 的使能位为 1:
将第一个字节 00 与 SA_FILTERN[47:40] 进行比较,如果 (00 == SA_FILTER[47:40]) 或 (SA_MASK[5] == 1),则字节 0 的比较结果为通过。
如果字节 0 的比较结果为失败,则中止下一个字节的比较,SA_FILTER N 比较失败,直接进入下一个 SA_FILTER N + 1 的比较。
如果字节 0 的比较结果为通过,则继续进行下一个字节的比较。
如果 SA_FILTER N 的比较通过(所有 6 个字节的比较都通过),则中止接下来的 SA_FILTER 比较,MAC 源地址非法,禁止数据包上传到系统。
如果 SA_FILTER N 的比较失败(任何字节的比较都失败),则继续进行下一个 SA_FILTER N + 1 的比较,直到完成所有 SA_FILTER 的比较。
如果所有 SA_FILTER 的比较都失败,则 MAC 源地址合法,数据包被允许上传到系统。
MAC 目标地址过滤
GMAC 支持对传入数据包进行目标地址过滤。目标地址有三种类型:
单播地址,由寄存器 STAD 定义,当目标地址与 STAD 匹配时,如果数据包没有错误,则允许数据包上传到系统。否则,如果目标地址是单播地址,但与 STAD 不匹配,则数据包将被丢弃。
注意: 目标地址域中出现的第一个字节对应STAD的最高字节,目标地址域中出现的最后一位字节对应STAD的最低字节。
广播地址,配置寄存器 BROAD_EN 用于定义 GMAC 是否接受广播地址(目标地址为 FF-FF-FF-FF-FF-FF)数据包。当该寄存器设置为1时,广播数据包在无错误的情况下可以上传到系统;当该寄存器设置为0时,数据包将被丢弃。
多播地址,当 MULTI_ALL 寄存器位设置为 1 时,允许所有多播地址(目标地址第一个字节的 LSB 位为 1)数据包在无错误的情况下上传到系统。如果驱动程序只想上传特定多播地址数据包(而非所有多播地址数据包),则应将 MULTI_ALL 设置为 0,并将 RX_HASH_EN 设置为 1。这样,只有命中多播哈希表 RX_HASH_TABLE 的多播数据包才能上传到系统。
计算 RX_HASH_TABLE 的算法如下:
使用所需的多播目标地址(6 字节)计算 CRC32 值,CRC 校验码为 0x04C11DB7,初始值为 FFFF_FFFF。
– x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
首先计算互联网上看到的第一个字节,直到遍历整个目标地址(6 个字节)。然后我们可以得到最终的 32 位 CRC 值。选择该值的 6 个最低有效位 (LSB),将其记为“X”,软件驱动程序应将 hash_table[X] 设置为 1’b1。
重复上述操作,使用下一个需要的多播地址计算哈希值,并设置相应的哈希表位。
例如,DA 为 “a3-0a-39-24-38-75”,计算出的 CRC32 应为 “E16DBA1D”,CRC32 的低六位为 6’b01_1101(6’d29),驱动程序应将 hash_table[29] 设置为 1’b1。当 MAC 接收到 DA 为 “a3-0a-39-24-38-75”的数据包时,它将使用相同的 CRC 算法计算 CRC32 值,并选择低六位(6’d29)。然后硬件 将检查 hash_table[29],如果值为 1,则表示哈希命中,数据包可以被接收;如果值为 0,则表示哈希未命中,应丢弃该数据包。软件可以使用这种方式为所有需要上传到系统的多播数据包设置 hash_table。对于哈希表,不可避免地会存在哈希冲突。例如,如果一个多播数据包的 DA 地址不是 “a3-0a-39-24-38-75”,但 CRC32 的低 6 位也为 6’d29,则该数据包也会被哈希命中并上传到系统。
Note
1:如果 PROM 位设置为 1,MAC 将不会进行地址过滤。如果 DEBUG_MODE 位设置为 1,MAC 将不会进行地址过滤,并且无论数据包是否有错误,它都会将数据包上传到系统。
2:DA 地址 01-80-c2-00-00-0e 用于 LLDP 或 PTP 协议,因此 GMAC 始终将此 DA 地址视为合法地址,因为我们支持 802.3AZ,它将使用 LLDP 进行信息交换。
3:DA 地址 01-1B-19-00-00-00 用于 PTP 协议,因此GMAC始终将此 DA 地址视为合法地址,因为我们支持 1588 PTP 协议。
MAC 附加目标地址过滤器
除了默认 MAC 目标地址 (STAD) 外,GMAC 还支持附加 MAC 目标地址过滤器功能(需硬件配置支持)。(注意:MAC 地址可以是多播地址还是单播地址,取决于 DA_FILTER 的配置,硬件对地址类型没有任何限制。)每个过滤器都有一个相应的 DA_FILTER_EN 使能位来控制是否启用该过滤器, DA_FILTER_EN[0] 对应 DA_FILTER0,以此类推。如果 DA_FILTER_EN[N] 为 0,则表示不会将 MAC DA 与相应的 DA_FILTERN 进行比较。每个过滤器都有一个 DA_MASK 控制位,DA_MASK[0] 对应字节 0,以此类推。当 MASK 位为 1 时,表示不会将相应的字节与过滤器的相应字节进行比较。
以下是一些示例:
接收数据包的 DA 为 00-11-22-33-44-55-66(00 是网络上出现的第一个字节,66 是网络上出现的最后一个字节),我们将把该 DA 与所有已启用的过滤器进行比较。以下是比较流程。将 MAC DA 与 STAD 进行比较,如果匹配,则 MAC DA 合法,并中止接下来的 DA_FILTER 比较。 如果不匹配,则继续进行下一个 DA_FILTER 比较。
如果 DA_FILTER N 的使能位为 0,我们可以将其视为比较失败,直接进入下一个 DA_FILTER N+1 的比较。
如果 DA_FILTER N 的使能位为 1:
将第一个字节 00 与 DA_FILTERN[47:40] 进行比较,如果 (00 ==DA_FILTER[47:40]) 或 (DA_MASK[5] == 1),则字节 0 的比较结果为通过。
如果字节 0 的比较结果为失败,则中止后续字节的比较,DA_FILTER N 比较失败,并直接进行下一个 DA_FILTER N + 1 的比较。
如果字节 0 的比较结果为通过,则继续进行下一个字节的比较。
如果 DA_FILTER N 的比较结果为通过(所有 6 个字节的比较均通过),则中止后续 DA_FILTER 的比较,MAC 目标地址合法,数据包可以上传到系统。如果 DA_FILTER N 的比较失败(任何字节的比较失败),则转到下一个 DA_FILTER N + 1 的比较,直到完成所有 DA_FILTER 的比较。 如果所有过滤器的比较都失败,则 MAC 目标地址非法,数据包应由硬件自动丢弃。
Note
1:DA 地址 01-80-c2-00-00-0e 用于 LLDP 或 PTP 协议,因此无论 DA_FILTER 的配置如何,GMAC 始终将此 DA 地址视为合法地址。
2:DA 地址 01-1B-19-00-00-00 用于 PTP 协议,因此无论 DA_FILTER 的配置如何,GMAC 始终将此 DA 地址视为合法地址。
支持 PHY-MAC 接口
GMAC 支持 MAC 和 PHY 之间的 GMII、RGMII、MII 和 RMII 接口。MII_MODE、SPEED 位以及FULL_DUPLEX 位需要进行相应的配置。MAC 和 PHY 必须工作在相同的 MII_MODE、SPEED 和 FULL_DUPLEX 模式下。
GMAC 支持 GMII 1000M 全双工模式和 RGMII 1000M 全双工模式。
GMAC 支持 RGMII、MII 和 RMII 100M 全双工模式、RGMII、MII 和 RMII 100M 半双工模式、RGMII、MII 和RMII 10M 全双工模式以及 RGMII、MII 和 RMII 10M 半双工模式。
在 RGMII 模式下工作时,由于工作在 DDR 模式下,因此需要一条 RX 延迟线和一条 TX 延迟线来调整 RX 时序和 TX 时序。 GMAC 可以配置 RXC_DELAY_SEL 和 TXC_DELAY_SEL,在输入 RXC 时钟和输出 TXC 时钟中添加延迟,以获得更好的时序裕度。GMAC 使用一系列缓冲区树和多路复用器 (MUX) 来构建延迟线。RXC_DELAY_SEL/TXC_DELAY_SEL 用于选择在延迟线中使用多少个缓冲区,值越大,延迟越多。 由于单个缓冲区的延迟不是恒定值,它会在不同工艺和不同角落发生漂移,因此客户应根据工艺选择合适的值以覆盖不同的工艺角落。此外,客户还可以选择在 RXC 和 TXC PAD中使用额外的外部 PCB 板延迟或 PHY 侧的延迟线(如果 PHY 有延迟线),以达到与使用 MAC 延迟线相同的目标。 关键点如下:
当工作在 RGMII 100M/10M 模式下时,在 TX 路径中,GMAC 可以将 TXC_DELAY_SEL 设置为 0,以选择 TXC 时钟无延迟。在 RX 路径中,由于整个延迟线的延迟远小于半个时钟周期,因此 GMAC 可以将 RXC_DELAY_SEL 设置为最大值,以获得最大的设置裕度。
当工作在 RMII 模式下时,有一个寄存器 RMII_MODE 用于定义内部 50M RMII 参考时钟的源。如果 RMII_MODE 为 1,即 RMII 主模式,则 rmii_clk_ref 引脚必须连接到 SoC 提供的 50M 时钟。同时,MAC 也会通过 TXC 引脚将此参考时钟输出到 PHY。
Note
TXC 引脚表示 xmii_gtxc 引脚将用于在 rgmii 模式下输出 txclk。当 RMII_MODE 为 0 时,表示参考时钟由 PHY 从 gmii_rxc 引脚提供。rmii_clk_ref 引脚的输入值无需关心。
GMAC 支持第 22 条 (IEEE 802.3 第 22 条) 和第 45 条 (IEEE 802.3 第 45 条) 规定的 MAC 和 PHY 之间的 MDIO 接口。MAC 将用作 MDIO 主设备来写入或读取 PHY 的寄存器。首先应配置 MDIO_CLK_SEL 位,以使 MDC 时钟频率不超过 802.3 标准要求的 2.5MHz。不同模式下寄存器的配置如下:
如果选择第 22 条模式进行 MDIO 写入,需要将 MDIO_MODE 设置为 0 以选择第 22 条模式,并设置 PHY_ADDR 寄存器(映射到 MDIO 的 PHYAD)和 MDIO_REG_ADDR 寄存器(映射到 MDIO 的 REGAD),将 MDIO_RD_WR 设置为 0 以指示这是一次写入操作,MDIO_DATA 值为要写入 PHY 的值,最后,将 MDIO_START 位设置为 1 以触发写入操作。轮询 MDIO_BUSY 位,直到其为 0,表示写入操作完成。
如果选择第 22 条模式进行 MDIO 读取,需要将 MDIO_MODE 设置为 0 以选择第 22 条模式,并设置 PHY_ADDR 寄存器(映射到 MDIO 的 PHYAD)和 MDIO_REG_ADDR 寄存器(映射到 MDIO 的 REGAD),并将 MDIO_RD_WR 设置为 1 以指示这是读取操作,最后将 MDIO_START 位设置为 1 以触发读取操作。轮询 MDIO_BUSY 位,直到该位为 0(表示 MDIO 操作完成),然后读取 MDIO_READOUT_DATA 的值,即 PHY 寄存器的读取值。
如果选择 Clause 45 模式进行 MDIO 写入,需要将 MDIO_MODE 设置为 1 以选择 Clause 45 模式,并设置 PRTAD 寄存器(映射到 MDIO 的 PRTAD)和 DEVAD 寄存器(映射到 MDIO 的 DEVAD),将 MDIO_RD_WR 设置为 0,并将 EX_REG_ADDR 设置为 MDIO ADDR 值。将 MDIO_DATA 设置为将要写入 PHY 的值。然后将 MDIO_START 位设置为 1 以触发写入操作。轮询 MDIO_BUSY 位,直到其为 0,表示写入操作完成。
如果选择 Clause 45 模式进行 MDIO 读取,需要将 MDIO_MODE 设置为 1,以选择 Clause 45 模式,并设置 PRTAD 寄存器(映射到 MDIO 的 PRTAD)和 DEVAD 寄存器(映射到 MDIO 的 DEVAD),将 MDIO_RD_WR 设置为 1,并将 EX_REG_ADDR 设置为 MDIO ADDR 值。然后将 MDIO_START 位设置为 1,以触发读取操作。轮询 MDIO_BUSY 位,直到该位为 0(表示 MDIO 操作完成),然后读取 MDIO_READOUT_DATA 的值,即 PHY 寄存器的读取值。
如果选择第 45 条模式进行后读 MDIO 操作,则在完成上述第 45 条 MDIO 读取操作后,将 MDIO_POST_RD_INC 设置为 1,并将 MDIO_START 位设置为 1,以触发后读操作。轮询 MDIO_BUSY 位,直到该位为 0(表示 MDIO 操作完成),然后读取 MDIO_READOUT_DATA 的值,该值即为下一个增量 PHY 寄存器的读出值。重复上述操作,直到读出所有需要读取的 PHY 后续寄存器的值。
支持 10/100M 半双工
- 在半双工模式下,FULL_DUPLEX 位应设置为 0。在半双工模式下,GMAC 支持:
CSMA/CD 协议。
冲突时延迟、退避和重试。
延迟冲突、过度冲突、过度延迟。
使用背压支持的流量控制。
寄存器 BACKOFF_EN 用于定义发生冲突时是否进行退避。寄存器 RETRY 定义发生冲突时的重试次数。如果冲突发生在 512 位时间之前,则称为早期冲突,MAC 将重试,直到重试次数等于 RETRY 寄存器的值,然后中止当前数据包传输。如果冲突发生在 512 位时间之后,则称为晚期冲突,MAC 将立即中止当前数据包传输。
支持流量控制
当 RX SRAM 的已用线路数(每线路 8 个字节)超过 RXF_UOF_THRESHOLD 时,如果工作在全双工模式,将发出暂停帧,让发送方停止发送数据包;如果工作在半双工模式,将使用 背压机制让发送方停止发送数据包。
当 RX SRAM 的已用线路数(每线路 8 个字节)小于 RXF_DOF_THRESHOLD 时,如果工作在全双工模式,将发出暂停帧,让发送方恢复发送数据包;如果工作在半双工模式,将 取消背压机制,让发送方恢复发送数据包。
- MAC 将在暂停帧的量子时间到期之前重新发送暂停帧。
当 MAC 收到暂停帧时,它将暂停 TX 数据包的发送,直到收到暂停帧或暂停帧的量子时间到期。然后恢复 TX 数据包的发送。
当 MAC 在半双工模式下接收到背压时,它将暂停 TX 数据包的发送,直到背压消除。
TXFC 和 RXFC 位应设置为 1 以支持流量控制。
VLAN 支持
在 RX 路径中,IP 支持 2 个 VLAN:SVLAN (88a8) 和 CVLAN (8100)。RX 数据包可以不包含 VLAN,或者仅包含 SVLAN,或者仅包含 CVLAN,或者两者兼有。
寄存器 VLAN_STRIP 用于定义是否允许 MAC 剥离 CVLAN,如果设置为 1,则可以从传入数据包中剥离 CVLAN。SVLAN 不受 VLAN_STRIP 位的影响,SVLAN 永远不会被剥离。
在 TX 路径中,发送数据包描述 (TPD) 可允许 MAC 附加 CVLAN。因此,在发送路径中,IP 支持以下 6 种情况:
主机内存中的数据包没有任何 VLAN,且发送数据包描述不希望 MAC 附加 CVLAN(TPD 中的 CVTAG 和 SVTAG 以及 INST_VLAN_TAG 均为 0)。
主机内存中的数据包没有任何 VLAN,且发送数据包描述希望 MAC 附加发送数据包中的 CVLAN(TPD 中的 CVTAG 和 SVTAG 均为 0,且 INST_VLAN_TAG 为 1)。
主机内存中的数据包已具有 CVLAN,且发送数据包描述不需要 MAC 附加 CVLAN(TPD 中的 CVTAG 为 1,SVTAG 为 0,INST_VLAN_TAG 为 0)。
主机内存中的数据包已具有 SVLAN,并且发送数据包描述不需要 MAC 附加 CVLAN(TPD 中的 CVTAG 为 0,SVTAG 为 1,INST_VLAN_TAG 为 0)。
主机内存中的数据包已具有 SVLAN,并且发送数据包描述需要 MAC 附加 CVLAN(TPD 中的 SVTAG 为 1,CVTAG 为 0,INST_VLAN_TAG 为 1)。
主机内存中的数据包已具有 SVLAN 和 CVLAN(TPD 中的 CVTAG 和 SVTAG 均为 1,INST_VLAN_TAG 均为 0)。
802.3 AZ 支持
802.2AZ 定义的节能以太网 (Efficient Efficient) 功能用于使 PHY 进入 LPI 模式以节省功耗。
MAC 的 LPI 功能由控制寄存器 LPI_EN 启用。该功能由 MAC 和 PHY 共同参与。如果 PHY 不支持 LPI,则 MAC 端不得启用该功能。
如果连接到 MAC 的 PHY 也支持 LPI,则在链路建立后,软件驱动程序需要与链路伙伴协商,通过 LLDP 数据包交换 LPI 的功能和唤醒时间。如果链路伙伴不支持 LPI,则不得启用 LPI_EN。
LPI_ENTER_CNT 用于控制进入 LPI 模式的定时器,当 MAC 空闲时间超过此值时,MAC 将通知 PHY 进入 LPI 模式。LPI_ENTER_CNT 应大于或等于 LPI_WT,以便在功耗和性能之间取得良好的平衡。 LPI_WT 用于控制 LPI 退出定时器,它应该大于或等于本地 PHY 的 TX LPI 退出时间(可在 PHY 的数据手册中找到)。通常情况下,LPI_WI 大约为 40us。
XMII |
gmii_txen pad |
gmii_txer pad |
gmii_txd pad |
|---|---|---|---|
GMII 1000M |
|
|
|
RGMII 1000M |
R(0) F(1) |
NC |
R(4’h1) F(4’h0) |
MII |
|
|
|
RGMII 100/10M |
R(0) F(1) |
NC |
R(4’h1) F(4’h1) |
RMII |
|
NC |
|
Note
NC 表示无关,R 表示 CLK 的高脉冲,F 表示 CLK 的低脉冲。“2’b0, 2’b0, 2’b0, 2’b01”表示连续 4 个周期内的 TXD 模式。
对于 RMII 接口,由于 RMII 接口中没有 TX_ER 信号,并且 802.3 规范没有定义 在 RMII 模式下 TX LPI 序列。因此,MAC 中定义的发送操作码可能与 PHY 中的定义不兼容。因此,如果在 RMII 模式下工作,并且 MAC 和 PHY 中的发送操作码定义不匹配,则 不得启用 LPI_EN。并且 RMII 模式下 RX_IN_LPI 状态寄存器位将始终为 0。
自动时钟门控支持
GMAC 支持空闲时自动时钟门控,以节省功耗。空闲意味着没有数据传输。
魔法模式检测支持
当控制位 MAGIC_FRAME_EN 为 1 时,传入数据包将与魔法数据包模式进行比较。魔法数据包模式是 AMD 定义的特殊数据模式, 由 6 个字节的 0xFF 后跟 16 次设备 MAC 地址迭代组成, 可位于有效载荷内的任意位置。当找到这样的数据序列时,MAGIC_FRAME_INT 位将置位, top_intr 也将置位。 接收数据包必须具有有效的目标地址才能进行魔法数据包检测。 当控制位 MAGIC_FRAME_EN 为 1 时,所有传入数据包将被 MAC 丢弃,所有中断 将被硬件自动屏蔽,MAGIC_FRAME_INT 除外,因此 SoC 可以使用 top_intr 作为唤醒信号。
CRC 支持
在 RX 路径中,我们支持对 RX 数据包进行 CRC 校验。如果数据包不是巨型数据包,但存在 CRC 错误,则 MAC 会丢弃该数据包。 对于巨型数据包,CRC 错误的数据包将被上传到主机内存,RRD 的error_flag 将指示错误状态。
在 TX 路径中,如果 MAC 控制寄存器的 CRCE 位为 0,则软件驱动程序必须计算 CRC,并且系统内存中的发送数据包必须在数据包末尾包含 CRC。
在 TX 路径中,如果 MAC 控制寄存器的 CRCE 位为 1,则 MAC 将计算发送数据包的 CRC 并将其附加到数据包末尾,因此系统内存中的发送数据包不能包含 CRC。
Note
如果驱动程序希望硬件连接 VLAN、连接 PAD 或执行 TX 校验和卸载,则驱动程序必须将 CRCE 设置为1。
PAD 支持
最小数据包大小为 64 字节。如果主机内存中的发送数据包小于 64 字节,硬件可以自动执行 PAD 操作。
Note
如果软件驱动程序希望硬件自动附加 PAD,则必须将 MAC 控制寄存器中的 CRCE 位设置为 1。
TX IPG 和 RX IPG
802.3 标准规定,连续发送数据包之间的最小间隔应为 96 位。IPGT 寄存器定义了最小 TX 数据包间隔。 MIFG 寄存器定义了 RX 数据包之间的最小间隔。如果 RX 数据包中的间隔小于 MIFG,则该数据包被视为无效数据包并被丢弃。
校验和
如果分片数据包跨越多个数据包,则不支持 TCP/UDP/ICMP 校验和。这是因为如果分片数据包中的 TCP/UDP/ICMP 数据跨越多个数据包,则无法在单个数据包内计算校验和。
Note
如果分片数据包并非跨越多个数据包,而是在单个数据包内计算,则仍然支持接收和发送校验和。
支持对接收数据包进行校验和验证,包括 IPv4 的 IP 校验和、IPv4 的 TCP 校验和、IPv4 的 UDP 校验和、IPv4 的 ICMP 校验和、IPv6 的 TCP 校验和、IPv6 的 UDP 校验和以及 IPv6 的 ICMP 校验和(IPv6 没有 IP 校验和)。
接收和发送数据包的 IP 报头均支持 IPv4 选项字段,这意味着 IPv4 IP 报头可以大于 20 个字节。
对于 IPv6 数据包,IP 支持在接收和发送路径中解析 RFC2460 要求的扩展报头:
逐跳选项报头
目标选项报头
路由报头
分片报头
Note
硬件会解析分片报头以确定分片数据包是否跨越多个数据包。如果它不跨越多个数据包,硬件将执行 RX 校验和验证和 TX 校验和卸载。如果它跨越多个数据包,硬件将不执行 RX 校验和验证或 TX 校验和卸载。
身份验证报头。
封装安全有效载荷报头。
Note
ESP 报头用于 IPsec,并且有效载荷已加密。因此,如果检测到 ESP 报头,硬件将不执行 RX 校验和验证或 TX 校验和卸载。
RX_CHKSUM_EN 寄存器用于启用 RX 校验和功能。如果启用 RX_CHKSUM_EN,则包含 IP、TCP、UDP 或 ICMP 校验和错误的 RX 数据包将被丢弃。如果禁用 RX_CHKSUM_EN,则包含 IP、TCP、UDP 或 ICMP 校验和错误的数据包仍会上传到主机内存,但校验和错误会在数据包的接收返回描述中指示,以便软件驱动程序进一步处理。支持 IPv4 出站数据包的 IP/TCP/UDP/ICMP 校验和卸载,以及 IPv6 出站数据包的 TCP/UDP/ICMP 校验和卸载。硬件计算校验和并将其附加到出站数据包中。 校验和卸载支持两种模式:
模式 1:软硬件协同模式(MAC 寄存器中的 TX_PARSER_EN 控制位为 0)。
当操作系统为 Linux 内核或 Windows 操作系统时使用此模式。内核将出站数据包信息传递给驱动程序,驱动程序随后可以通过 TPD 通知硬件。
对于 TCP/UDP 校验和,Microsoft 传输层或 Linux 内核将计算 IP 伪报头校验和,并将该值放入 TCP/UDP 校验和字段中,因此 GMAC 硬件无需触及 IP 报头即可计算正确的 TCP/UDP 校验和。因此,在硬件方面,它始终假设 IP 伪报头校验和已生成并已放入 TCP/UDP 校验和域中。
在此模式下,硬件和软件协同工作,以支持 IPV4/IPV6 IP/TCP/UDP 校验和卸载。
模式 2:纯硬件模式(MAC 寄存器 TX_PARSER_EN 控制位为 1)。
当操作系统是轻量级嵌入式系统时使用这种方式。驱动程序无法获取必要的发送数据包信息。因此,如果发送数据包是 IP/TCP/UDP/ICMP 数据包,则硬件将对其进行解析,然后计算校验和。
MAC 控制寄存器 TX_IP_SUM_EN 用于控制在此模式下是否执行 IP 校验和卸载。 MAC 控制寄存器 TX_TCP_ICMP_SUM_EN 用于控制在此模式下是否执行 TCP/ICMP 校验和卸载。MAC 控制寄存器 TX_UDP_SUM_EN 用于控制是否执行 UDP 校验和卸载。如果 TX_TCP_ICMP_SUM_EN 或 TX_UDP_SUM_EN 设置为 1,则 TX_IP_SUM_EN 也必须设置为 1。
在此模式下,操作系统上层无需计算 IP 伪报头校验和并将其值放入 TCP/UDP 校验和字段。硬件会在计算 TCP/UDP 校验和时自行计算 IP 伪报头校验和。
在此模式下,我们支持 IPV4/IPV6 IP/TCP/UDP/ICMP 校验和卸载。
Note
如果软件希望硬件执行 TX 校验和卸载(无论模式 1 还是模式 2),驱动程序必须将 MAC 控制寄存器的 CRCE 位设置为 1。
接收方丢包算法
为了减轻软件负担,MAC 系统会自动丢弃以下数据包:
MAC 目标地址不匹配。
MAC 源地址不匹配。
接收到的数据包为 PAUSE 帧,PAUSE 帧将不会上传到主机内存。
接收到的数据包字节数小于 64 字节或大于 MTU。
当 CUT_THRU_EN 为 0 时,如果 XMII 接口的 RX_ER 为 1,则接收到的数据包将被丢弃;当 CUT_THRU_EN 为 1 时,数据包也可能被丢弃。
当 CUT_THRU_EN 为 0 时,接收到的数据包如果存在 CRC 错误,则将被丢弃;当 CUT_THRU_EN 为 1 时,接收到的数据包如果存在 CRC 错误,则可能被丢弃。
当 CUT_THRU_EN 为 0 时,在 10/100M 模式下,接收到的数据包如果存在半字节错误,将被丢弃;当 CUT_THRU_EN 为 1 时,在 10/100M 模式下,接收到的数据包如果存在半字节错误,则可能会被丢弃。
当 CUT_THRU_EN 为 0 且 RX_CHKSUM_EN 为 1 时,如果 IP、TCP 或 UDP 校验和存在错误,将被丢弃。当 RX_CHKSUM_EN 为 0 时,如果数据包存在校验和错误,则不会被丢弃。
当 CUT_THRU_EN 为 1 时,如果数据包存在校验和错误,则可能会被丢弃。
Note
当 DEBUG_MODE 为 1 时,MAC 不会丢弃上述列表中的数据包;当 PROM_MODE 为 1 时,MAC 不会丢弃目的地址或源地址不匹配的数据包。当 CUT_THRU_EN 为 1 时,数据包在仅接收到部分数据包时才会上传到主机内存。因此,如果在数据包开始上传到主机内存之前发生错误,则该数据包将被丢弃;否则,即使数据包有错误,也会上传到主机内存。
MAC 环回功能
MAC_LP_EN 用于执行内部 MAC 环回,以进行调试或测试。如果使用 MAC 环回功能,FULL_DUPLEX 必须设置为 1,并且软件驱动程序需要确保环回数据包的目标地址为有效的 DA,否则 MAC 会丢弃环回数据包。
当 MAC 控制寄存器的 CRCE 位为 1 时,由于硬件会附加 CRC 值,因此环回数据包将比发送数据包多 4 个字节。
当 MAC 控制寄存器的 CRCE 位为 0 时,软件必须计算发送数据包中的 CRC,否则,如果 CRC 错误,则硬件会丢弃环回数据包。
巨型数据包支持
IP 支持最大 4K 字节的巨型数据包,如果需要支持巨型数据包,CUT_THRU_EN 控制位必须设置为 1, 并且 MTU 控制寄存器应配置为大于或等于巨型数据包的大小。 关键点如下:
网络上的所有设备都必须配置为能够处理发送和接收的最大帧大小,否则巨型帧将被阻塞。
请务必注意,仅当网络上所有设备都支持巨型帧且配置为使用相同帧大小时,才可启用巨型帧。
巨型数据包不支持 TX TCP/UDP 校验和卸载。
巨型帧功能仅在全双工模式下启用。
当 CUT_THRU_EN 控制位设置为 1 时,必须确保 AXI/AHB 总线有效带宽大于 XMII 带宽,否则将发生欠载错误。如果发生欠载错误,RX 数据包或 TX 数据包将被丢弃。
DMA 环
使用环结构进行 DMA 传输。主机内存中有 3 个环。每个环的结构如下:
图5.2 环形结构图
对于环,它有一个消费者索引,即消费者的读取地址,还有一个生产者索引,即生产者的写入地址。环存储在主机内存中的连续内存空间中,因此在主机内存中会有一个基地址,该基地址是元素 0 在主机内存中的地址。 例如,如果基地址为 0x8000,每个环元素为 8 字节,则元素 1 的地址为 0x8008,元素 2 的地址为 0x8010,以此类推,元素 11 的地址为 0x8058。 环大小是环中元素的数量,应配置为 2 的 n 次方值,例如 256、512、1024 等等。
接收空闲描述环
接收空闲描述 (RFD) 环表示分配给接收入口数据包的内存块。它由软件驱动程序生成,并由硬件使用。该环必须占用连续的内存空间,且不跨越 32 位字节地址边界。RFD 中的每个元素都是 8 字节,因此 RFD 环的基地址应为 8 字节对齐(低 3 位应为 0)。
RFD 元素如下所示:
word 位序 |
位 |
描述 |
|---|---|---|
0 |
31:0 |
主机内存中接收缓冲区低 32 位地址 |
1 |
63:32 |
主机内存中接收缓冲区高 32 位地址 |
如果是 32 位系统,驱动程序只需将RFD中的高32位地址配置为全零即可
接收返回描述环
接收返回描述环 (RRD) 表示接收到的数据包的摘要信息。它由 GMAC 生成并 由驱动程序使用。该环必须占用连续的内存空间,且不跨越 32 位字节地址边界。 驱动程序可以先检查 RRD,然后再检查接收到的数据包。每个 RRD 元素为 8 字节,因此 RRD 环的基地址应为 8 字节对齐(最低 3 位应为 0)。
RRD 元素如下所示:
word 位序 |
位 |
助记符 |
描述 |
|---|---|---|---|
0 |
11:0 |
RFD_START_INDEX |
启动接收数据包的 RFD 消费者索引 |
15:12 |
CONSUME_RFD_NUM |
此接收数据包使用的 RFD 数量,单个数据包最多消耗 8 个 RFD |
|
18:16 |
PKT_ID |
1588 事件数据包 ID,驱动程序可使用此 pkt_id 在本地寄存器中检索接收时间戳。若 pkt_id = 0,则接收时间戳存储于 RX_PTP_0 寄存器中。 |
|
19 |
RSV |
保留 |
|
20 |
CVLAN_DET |
检测到 TPID 8100 CVLAN |
|
21 |
ETH_TYPE |
|
|
22 |
BROAD |
接收到了广播地址数据包 |
|
23 |
MULTI |
接收到了组播地址数据包 |
|
25:24 |
MAC_LAYER_ERR_FLAG |
|
|
26 |
IP_CHKSUM_ERR |
IP 校验和错误, |
|
27 |
L4_CHKSUM_ERR |
TCP or UDP or ICMP 校验和错误, |
|
31:28 |
PKT TYPE |
|
|
1 |
15:0 |
VLAN_TAG |
CVLAN 的 802.1Q VLAN 标签 |
29:16 |
PKT_SIZE |
接收数据包的大小(单位:字节) |
|
30 |
SVLAN_DET |
检测到 TPID 88a8 SVLAN |
|
31 |
UPDT |
|
Note
对于 MAC_LAYER_ERR_FLAG,数据包可能包含多种错误类型,MAC_LAYER_ERR_FLAG 只会指示一种错误类型。
对于接收的数据包,寄存器 VLAN_STRIP 定义是否剥离数据包中的 CVLAN。如果设置为1,则 CVLAN 将被剥离,VLAN 标签将存储在接收返回描述中。对于 SVLAN,它不受 VLAN_STRIP 控制位的影响,它将始终随数据包一起上传到主机内存。
发送数据包描述环
发送数据包描述 (TPD) 表示发送数据包的信息,它由驱动程序生成并由 GMAC 硬件使用。该环必须占用连续的内存空间,且不跨越 32 位字节地址边界。 每个 TPD 元素为 16 字节,因此 TPD 环的基地址应为 16 字节对齐(4 LSB 应为 0)。
如果 TX_PARSER_EN 控制位为 0,驱动程序可以通知硬件是否执行校验和卸载,并在 TPD 中提供 必要的发送数据包信息。
如果 TX_PARSER_EN 控制位为 1,硬件将自动解析发送数据包,因此 TPD 中的某些域 可以用 “0” 填充。是否进行校验和卸载由控制寄存器 TX_IP_SUM_EN、TX_TCP_ICMP_SUM_EN 和 TX_UDP_SUM_EN 定义。
word 位序 |
位 |
助记符 |
描述 |
|---|---|---|---|
0 |
15:0 |
BUF_LEN |
需要从 BUFFER_ADDR 获取的字节数 |
0 |
31:16 |
VLAN_TAG |
如果设置了 INS_VLAN_TAG,则插入的 VLAN 标签 |
1 |
7:0 |
L4_HEAD_OFFSET |
TCP 头或 UDP 头相对于数据包第一个字节的偏移量。如果 TX_PARSER_EN 为 1,则该字段应全为 0 |
1 |
8 |
IP_CHKSUM_OFFLOAD |
IP 校验和卸载,当设置时,让 GMAC 卸载 IPv4 校验和。如果 TX_PARSER_EN 为 1,则该字段应全为 0 |
1 |
9 |
TCP_CHKSUM_OFFLOAD |
TCP 校验和卸载,当设置时,让 GMAC 卸载 TCP 校验和。如果 TX_PARSER_EN 为 1,则该字段应全为 0 |
1 |
10 |
UDP_CHKSUM_OFFLOAD |
UDP 校验和卸载,当设置时,让 GMAC 卸载 UDP 校验和。如果 TX_PARSER_EN 为 1,则该字段应全为 0 |
1 |
11 |
SVTAG |
当设置时,表示主机内存中的该数据包已包含一个 SVLAN 标签(四字节) |
1 |
12 |
CVTAG |
当设置时,表示主机内存中的该数据包已包含一个 CVLAN 标签(四字节) |
1 |
13 |
INST_VLAN_TAG |
插入 VLAN 标签:当设置时,让硬件在发送的数据包中插入 CVLAN |
1 |
14 |
IPV4 |
当设置时,表示这是一个IPv4数据包。如果 TX_PARSER_EN 为 1,则该字段应全为 0 |
1 |
15 |
ETH_II |
当设置时,表示这是一个 Ethernet_II 数据包;当清除时,表示这是一个 802.3 SNAP 数据包。如果 TX_PARSER_EN 为 1,则该字段应全为 0 |
1 |
18:16 |
PKT_ID |
当 TX_TIMESTAMP 为 1 时,这 3 位表示当前 1588 事件数据包的数据包 ID,GMAC 将把发送时间戳记录到 TX_TIMESTAMP_$PKT_ID 寄存器的 CSR寄存器中 |
1 |
29:19 |
RSV |
保留 |
1 |
30 |
TX_TIMESTAMP |
让 GMAC 记录发送的1588事件数据包的时间戳 |
1 |
31 |
LAST |
当设置时,表示这是发送数据包的最后一个段。当一个数据包消耗多个 TPD 时,最后一个 TPD 的 LAST 位应为 1;当一个数据包消耗一个 TPD 时,LAST 位也应为 1 |
2 |
31:0 |
BUFFER_ADDR_LO |
发送数据包的低 32 位缓冲区起始地址 |
3 |
31:0 |
BUFFER_ADDR_HI |
发送数据包的高 32 位缓冲区起始地址。如果是 32 位系统,该字段应全为0。 |
支持一个数据包占用一个或多个 TPD,如多 TPD 示意图所示。
图 5.3: 多 TPD 示意图
Note
图中展示了三种情况:
情况1:数据包完全在一个TPD中
情况2:数据包跨两个TPD
情况3:数据包跨三个TPD
如果 TX_PARSER_EN 为 1,发送数据包的第一个 TPD 应包含 MAC 头 + IP 头(如果存在)+ TCP/UDP/ICMP 头(如果存在)。
如果 TX_PARSER_EN 为 0,则可以取消对多 TPD 的上述要求,这意味着甚至数据包头也可以在不同的 TPD 中。
命令字管理功能
命令字管理(CMB)用于通过 DMAW 操作将 TPD 消费索引上传到主机内存,因此软件驱动程序无需通过 APB 轮询 tpd_cons_idx,可以直接从主机内存获取该值。上传频率由寄存器 CMB_TIMER 和 CMB_THRESHOLD 定义。在 CMB DMA 操作后,当经过的时间超过 CMB_TIMER 定义的值或消耗的 TPD 索引超过 CMB_THRESHOLD 时,将触发新的 CMB DMAW。
CMB DMAW 地址由寄存器 CMB_BASE_ADDR 定义。由于 CMB 数据是 16 位的,因此 CMB_BASE_ADDR 应 2 字节对齐(最低有效位应为 0)。
发送数据流
发送数据流的处理过程如下:
软件驱动 将发送数据放入发送缓冲区。发送缓冲区位于操作系统的存储设备中,如 DRAM。
设备驱动 更新传输包描述符(TPD),以指示发送缓冲区地址、帧长度和其他信息。一个帧可以有一个发送缓冲区或多个由多个 TPD 表示的发送缓冲区。
设备驱动 更新 TPD 环的 TPD_PROD_IDX 寄存器,通知 GMAC 发送数据已就绪。
GMAC 从发送缓冲区读取发送数据,然后将数据发送到 PHY,并通过 DMA 将 TPD_CONS_IDX 传输到主机内存地址(CMB_BASE_ADDR)。
发送一些数据包后,GMAC 将生成 top_intr,然后驱动程序读取中断状态寄存器 INT_STA_REG。如果设置了 CMB_INT 位,驱动程序应从 CMB_BASE_ADDR 读取 TPD 消费者索引并更新 TPD 生产者索引(驱动程序应确保生产者索引不会回绕消费者索引)。
接收数据流
接收数据流的处理过程如下:
软件驱动 为接收数据包分配内存空间(由 RFD 定义)。然后驱动程序更新 RFD 生产者索引(RFD_PROD_IDX),通知 GMAC 接收缓冲区可用。
MAC 接收数据包,然后通过 DMA 将数据包传输到由 RFD 分配的主机内存地址。然后将数据包状态 DMA 到接收返回描述符(RRD)。
GMAC 将生成 top_intr,然后驱动程序读取中断状态寄存器 INT_STA_REG,RX_PKT_INT 位通知驱动程序有新数据包到达。
软件驱动 读取 RRD,读取 RRD 后,软件驱动将主机内存中 RRD 的 UPDT 位设置为 0。在读取的 RRD 中,包含此数据包的 RFD_START_INDEX 和 CONSUME_RFD_NUM 信息,软件驱动可以使用这些信息了解数据包在主机内存中的位置。
软件驱动 逐个读取 RRD,直到 RRD 中的 UPDT 位为 0。
软重置
软件驱动程序可以通过向 SOFT_RST 寄存器写入 1 来执行软重置,该寄存器会自动清零为 0。
1588 模块不受影响:SOFT_RST 不会重置 1588 模块,因为 RTC 的累加不应中断。其他功能模块将被重置。
应用场景:当 MAC 速度更改或工作模式更改时,软件驱动程序可以写入 SOFT_RST 执行软重置。
RTC 功能
IP 中有一个 RTC(实时时钟)。RTC 具有以下功能:
预加载RTC :设置 RTC_PRELOAD 位,将整个 RTC_OFFSET 值(RTC_OFFSET_SH、RTC_OFFSET_SL、RTC_OFFSET_NS)加载为当前 RTC 值。
RTC重置 :设置 RTC_RESET 位将 RTC 值重置为全0。
偏移取消 :使用 RTC_OFFSET_LOAD 让当前RTC增加或减少RTC_OFFSET值(RTC_OFFSET_SL、RTC_OFFSET_NS)以获得新的RTC值。
RTC累积 :RTC 值将在 ptp_ref_clk 的上升沿以 RTC_INC_DELTA 为步长累积,初始 RTC_INC_DELTA 应根据 ptp_ref_clk 的周期进行配置。
Note
RTC 的 MSB 16位不受偏移取消操作的影响,RTC MSB 16位的1位约等于136年,在实际应用中不应受到影响。
Note
RTC 的 MSB 16位不受RTC累积操作的影响,RTC MSB 16位的1位约等于136年,在实际应用中不应受到影响。
PPS_IN 和 PPS_OUT 硬件同步
IP 支持通过硬件自动将 RTC 同步到 PPS_IN 并输出 PPS_OUT。
图 5.4: PPS 输入/输出示意图
相关寄存器配置如下:
PPSIN_LATENCY :应根据估计的延迟设置,包括外部设备的 PPS_OUTPAD 延迟、外部设备与IP之间的设备延迟以及 IP 的 PPS_INPAD 延迟。
PPS_IN_OUT_PULSE_CTRL :应根据 PPS_IN 的频率设置。通常,PPS_IN 应为1秒脉冲,具有0.5 秒高电平和0.5 秒低电平。PPS_OUT 将与 PPS_IN 具有相同的频率。
RTC_INC_DELTA :应根据 ptp_ref_clk 的时钟周期设置。
PTP_EN位 :设置为1’b1。
使用预加载 RTC 功能预加载初始 RTC 值。
设置 PPSIN_SYNC_EN 为1,让硬件自动将本地 RTC 同步到 PPS_IN 输入并输出 PPS_OUT。硬件将使用硬件 PI 控制算法调整 RTC 偏移和 RTC_INC_VALUE,使 PPS_OUT 的相位尽可能准确地跟踪 PPS_IN 的相位。硬件还将同步本地 RTC 值与外部设备。
Note
PPS_IN_OUT_SYNC 无法在秒级进行同步。如果需要,客户可以使用RTC的偏移取消功能来取消秒级偏移。
1588同步功能
使用两步1588事件包进行同步,操作如下:
将
PTP_EN设置为1。使用预加载 RTC 功能将初始 RTC 值预加载到本地 RTC。
软件驱动程序使用 1588 公告通用消息与外部设备建立主从层次结构。
软件驱动程序定期发送 1588 事件包,同时 IP 也会定期接收 1588 事件包。
当在 XMII 接口接收到 1588 事件包时:
记录RX时间戳
立即置位
top_intr中断INT_STA_REG寄存器的RX_PTP_EVENT_INT位将置1软件应尽快处理 RX 数据包
接收到的 1588 事件包的 RRD 将指示
rx_pkt_id和数据包类型为 1588 事件包软件可以使用
rx_pkt_id作为索引从RX_PTP_TS_${rx_pkt_id}寄存器中读出 RX 时间戳
发送 1588 事件包操作:
在TPD中指示
tx_pkt_id并设置TX_TIMESTAMP位下一个 TX 1588 事件包的
tx_pkt_id应增加1当数据包通过 XMII 接口时:
硬件将当前本地 RTC 值存储到
TX_PTP_TS_${tx_pkt_id}寄存器TX_PTP_TS_UPDT[tx_pkt_id]位将置1(表示时间戳有效)
关键要点:
中断处理:
立即置位
top_intr中断INT_STA_REG的TX_PTP_EVENT_INT位将置1软件驱动程序需检查
TX_PTP_TS_UPDT[tx_pkt_id]确认时间戳有效性读取后清除
TX_PTP_TS_UPDT[tx_pkt_id] = 0
时钟同步算法:
使用PI控制算法计算偏移取消值
通过
RTC_OFFSET_LOAD执行 RTC 偏移取消更新
RTC_INC_DELTA值使从时钟与主时钟保持同步
调试支持:
PPS_OUT引脚可输出 RTC 的 PPS 信号用于调试使用
PPS_IN_OUT_PULSE_CTRL寄存器控制 PPS_OUT 频率
Note
对于 1588 “延迟请求-响应延迟”机制或”对等延迟”机制:
RX 1588 事件包的序列顺序是固定的
如果某些 RX 1588 事件包被丢弃:
软件驱动程序可以感知该情况
应使所有相关 1588 事件包无效
使用下一个有效的”延迟请求-响应延迟”或”对等延迟”包进行计算
MAC PAD 映射到 XMII
在 SoC 层级中, xmii_gtxc PAD 是输出 PAD, xmii_txc PAD 是输入 PAD。
MAC PAD |
GMII |
RGMII |
MII |
RMII |
|---|---|---|---|---|
gmii_rxc |
RX_CLK |
RXC |
RX_CLK |
REF_CLK |
xmii_txe |
TX_CLK |
NC |
TX_CLK |
NC |
xmii_gtxc |
GTX_CLK |
TXC |
NC |
REF_CLK |
gmii_rxd_bit0 |
RXD[0] |
RXD[0] |
RXD[0] |
RXD[0] |
gmii_rxd_bit1 |
RXD[1] |
RXD[1] |
RXD[1] |
RXD[1] |
gmii_rxd_bit2 |
RXD[2] |
RXD[2] |
RXD[2] |
NC |
gmii_rxd_bit3 |
RXD[3] |
RXD[3] |
RXD[3] |
NC |
gmii_rxd_bit4 |
RXD[4] |
NC |
NC |
NC |
gmii_rxd_bit5 |
RXD[5] |
NC |
NC |
NC |
gmii_rxd_bit6 |
RXD[6] |
NC |
NC |
NC |
gmii_rxd_bit7 |
RXD[7] |
NC |
NC |
NC |
gmii_txd_bit0 |
TXD[0] |
TXD[0] |
TXD[0] |
TXD[0] |
gmii_txd_bit1 |
TXD[1] |
TXD[1] |
TXD[1] |
TXD[1] |
gmii_txd_bit2 |
TXD[2] |
TXD[2] |
TXD[2] |
NC |
gmii_txd_bit3 |
TXD[3] |
TXD[3] |
TXD[3] |
NC |
gmii_txd_bit4 |
TXD[4] |
NC |
NC |
NC |
gmii_txd_bit5 |
TXD[5] |
NC |
NC |
NC |
gmii_txd_bit6 |
TXD[6] |
NC |
NC |
NC |
gmii_txd_bit7 |
TXD[7] |
NC |
NC |
NC |
gmii_rcx |
CRS |
CRS |
CRS |
NC |
gmii_col |
COL |
COL |
COL |
NC |
gmii_rxd |
RX_DV |
RX_CTL |
RX_DV |
CRS_DV |
gmii_rxer |
RX_ER |
NC |
RX_ER |
RX_ER |
gmii_txe |
TX_EN |
TX_CTL |
TX_EN |
TX_EN |
gmii_txe |
TX_ER |
NC |
TX_ER |
NC |
对于 GMII 接口,当工作在 1000M 时,MAC通过
xmii_gtxcPAD 向 PHY 输出 txclk。对于 MII 接口,当工作在 100M/10M 时,PHY应通过
xmii_txcPAD 向 MAC 输出 txclk。对于 RGMII 接口,当工作在 1000M/100M/10M 时,MAC始终通过``xmii_gtxc``PAD向 PHY 输出 txclk。
对于 RMII 模式,如果 MAC 工作在 RMII 主模式,MAC应通过
xmii_gtxcPAD向 PHY 输出 REF_CLK;如果 MAC 工作在 RMII 从模式,PHY 应通过gmii_rxcPAD 向 MAC 输出 REF_CLK。NC 表示不连接。
中断
在顶部,IP 将向 SoC 输出一个 top_intr 信号,该信号是 INT_STA_REG 寄存器中所有未屏蔽中断的“或”运算结果。内部中断分为两类:一类是紧急中断,需立即处理;另一类是常规接收数据包和发送数据包中断。当进行大规模传输时,这两类数据包中断会频繁触发。软件驱动程序不希望被高频中断打断,否则将给 CPU 带来沉重负担。
中断模块
为解决上述问题,针对常规的接收和发送数据包中断,我们将采用中断调制功能显著减少中断次数。关键点如下:
设有 INTR_MOD_RX_TIMER 和 INTR_MOD_TX_TIMER 寄存器分别控制接收和发送调制定时器。例如当触发 TX 中断时,首先置位对应的中断状态位 TX_PKT_INT,随后等待 TX 调制定时器倒计时至 0 再置位 top_intr,如此可忽略所有发生在 TX 调制等待期内的相同 TX 数据包事件。
接收与发送调制定时器分别独立计数。
在调制等待期间,若触发紧急中断,无需等待调制定时器计数归零,顶端中断 (top_intr) 将立即置位。
中断屏蔽功能
DIS_INT 位用于禁用所有中断,当 DIS_INT 为 1 时,top_intr 不会被置高。INT_MASK 用于屏蔽相应的中断。INT_MASK 的位 0 用于屏蔽 INT_STA 的位 0,依此类推。
魔术包中断
对于典型应用,当系统处于睡眠状态时,会使用魔术模式唤醒系统。因此当系统进入睡眠时,软件驱动程序可将控制位 MAGIC_FRAME_EN 设为 1。当 MAGIC_FRAME 为 1 时,硬件仅会为 MAGIC_FRAME_INT 触发 top_intr 中断,并自动忽略所有其他中断。当 MAGIC_FRAME_EN 为 1 时,软件驱动程序无需为其他中断设置屏蔽位。
Note
系统唤醒后,软件驱动程序可将 MAGIC_FRAME_EN 重置为 0。
如何处理中断
各中断寄存器的含义如下:
RXF_OF_INT:表示接收 SRAM 发生溢出,可能有两种情况:一是接收 AXI 带宽低于 MAC 接收带宽,需在 SoC 层面解决;二是 RFD 全部耗尽导致新数据包无法上传至主机内存,此时软件驱动需检查 RFD_PROD_IDX 以确保接收数据包有足够的 RFD 存储空间。
RFD_UR_INT:当接收数据包到来时,若主机内存中的 RFD 不足且即将耗尽,则需软件驱动程序分配 RFD 并更新 RFD_PROD_IDX,确保有足够的 RFD 存储接收数据包。
TXF_UR_INT:仅在发送巨型数据包时发生,表明 TX AXI 带宽低于 MAC 传输带宽。应在 SoC 层面解决。
DMAR_TO_INT:DMAR 操作超时,可能导致系统挂起。软件驱动程序可选择重置或继续等待。
DMAW_TO_INT:DMAW 操作超时,可能导致系统挂起。软件驱动可选择重置或继续等待。
TX_PKT_INT:发送数据包通过 XMII 接口发出。
RX_PKT_INT:接收数据包经 DMA 传输至主机内存,软件驱动可开始检查 RRD。
DMAW_BUS_ERR_INT/DMAR_BUS_ERR_INT:DMA 总线错误,SoC 可选择执行软件复位或忽略。若需复位,需检查状态寄存器 XEC_IDLE 位,当 XEC_IDLE 为 1 时执行复位。
CMB_INT:软件驱动需从主机内存的 CMB 基址读取数据以获取 TPD 消费者索引。
MAGIC_FRAME_INT:SoC 可利用此中断唤醒系统。
RX_PTP_EVENT_INT:软件驱动需检查 RRD,定位 1588 事件数据包的 RRD 以获取接收数据包 ID(RX PKT_ID),并以此 ID 为索引读取对应接收 1588 事件数据包的接收时间戳。
TX_PTP_EVENT_INT:软件驱动程序检查 TX_PTP_TS_UPDT 寄存器,获取硬件更新的 TX PKT_ID 时间戳寄存器,随后读取对应的 TX 时间戳并将对应的 TX_PTP_TS_UPDT 位清零。
寄存器
MAC_BLOCK 寄存器
寄存器及其在 MAC_BLOCK 中的对应偏移地址如下表所示:
表 7.1: MAC_BLOCK 寄存器偏移地址及功能描述 偏移地址
寄存器名称
功能描述
0x0
MAC_CTRL_REG
MAC 基本和基础控制
0x4
MAC_IPG_REG
IPG 控制
0x8
MAC_HALF_CTRL_REG
半双工控制
0xC
MAC_MTU_REG
MTU 控制
0x10
MAC_STAD_LO_REG
源地址低 32 位
0x14
MAC_STAD_HI_REG
源地址高 32 位
0x18
MAC_LPI_REG
802.3az 控制和状态
0x1C
RX_HASH_TABLE1_REG
接收哈希表 1
0x20
RX_HASH_TABLE2_REG
接收哈希表 2
0x24
SRAM_CTRL_REG_1
SRAM RFD 位置
0x28
SRAM_CTRL_REG_2
SRAM 发送控制字位置
0x2C
SRAM_CTRL_REG_3
RX FIFO 头尾地址
0x30
SRAM_CTRL_REG_4
SRAM TXD 位置
0x34
SRAM_CTRL_REG_5
SRAM RX 和 TX FIFO 深度
0x38
SRAM_CTRL_REG_6
加载指针
0x40
DESCRIPTOR_CTRL_REG_2
RFD 基地址低 32 位
0x44
DESCRIPTOR_CTRL_REG_3
RRD 基地址低 32 位
0x48
DESCRIPTOR_CTRL_REG_4
RFD 描述
0x4C
DESCRIPTOR_CTRL_REG_5
RRD 和 TPD 环大小
0x54
DESCRIPTOR_CTRL_REG_7
TPD 基地址低 32 位
0x5C
CMB_BASE_ADDR_LO
CMB 基地址低 32 位
0x60
DMA_BURST_CTRL_1
TPD 突发控制
0x64
DMA_BURST_CTRL_2
RFD 突发和直通控制
0x68
FC_WATERMARK_REG
流控水位控制
0x6C
CMB_CTR_REG
CMB控制
0x70
MAILBOX_REG_1
RFD 索引
0x74
MAILBOX_REG_2
TPD 索引
0x78
INT_STA_REG
中断状态
0x7C
INT_MSK_REG
中断屏蔽
0x80
INTR_TIMER2_REG
仲裁器定时器
0x84
MAC_RX_OK
接收的良好数据包数量
0x88
MAC_RX_BCAST
接收的良好广播包数量
0x8C
MAC_RX_MCAST
接收的良好组播包数量
0x90
MAC_RX_PAUSE
接收的暂停包数量
0x94
MAC_RX_LLDP
接收的 LLDP 包数量
0x98
MAC_RX_FCS_ERR
FCS错误的数据包数量
0x9C
MAC_RX_LEN_ERR
长度字段与实际大小不匹配的数据包数量
0xA0
MAC_RX_BYTE_CNT
接收的良好数据包字节数
0xA4
MAC_RX_RUNT
接收的小于 64 字节且 FCS 良好的数据包数量
0xA8
MAC_RX_FRAGMENT
接收的小于 64 字节且 FCS 错误的数据包数量
0xAC
MAC_RX_SIZE_64
接收的 64 字节数据包数量
0xB0
MAC_RX_SIZE_65TO127
接收的 65-127 字节数据包数量
0xB4
MAC_RX_SIZE_128TO255
接收的 128-255 字节数据包数量
0xB8
MAC_RX_SIZE_256TO511
接收的 256-511 字节数据包数量
0xBC
MAC_RX_SIZE_512TO1023
接收的 512-1023 字节数据包数量
0xC0
MAC_RX_SIZE_1024TO1518
接收的 1024-1518 字节数据包数量
0xC4
MAC_RX_SIZE_1519TOMAX
接收的 1519 字节至 MTU 大小的数据包数量
0xC8
MAC_RX_OVERSIZE
接收的大于 MTU 大小的数据包数量
0xCC
MAC_RX_OVERFLOW
因 RX FIFO 溢出而丢弃的数据包数量
0xD0
MAC_RX_NIBBLE_ERR
半字节错误包数量
0xD4
MAC_RX_BCAST_BYTE_CNT
接收的广播包字节数
0xD8
MAC_RX_MCAST_BYTE_CNT
接收的组播包字节数
0xDC
MAC_RX_ADDR_ERR
目的地址或源地址错误的数据包数量
0xE0
MAC_TX_OK
成功发送的数据包数量
0xE4
MAC_TX_BCAST
成功发送的广播包数量
0xE8
MAC_TX_MCAST
成功发送的组播包数量(不包括暂停帧)
0GMAC
MAC_TX_PAUSE
发送的暂停包数量
0xF0
MAC_TX_DEFFER
延迟发送的数据包数量
0xF4
MAC_TX_BYTE_CNT
发送的数据字节数
0xF8
MAC_TX_SIZE_64B
发送的 64 字节数据包数量
0xFC
MAC_TX_SIZE_65TO127
发送的 65-127 字节数据包数量
0x100
MAC_TX_SIZE_128TO255
发送的 128-255 字节数据包数量
0x104
MAC_TX_SIZE_256TO511
发送的 256-511 字节数据包数量
0x108
MAC_TX_SIZE_512TO1023
发送的 512-1023 字节数据包数量
0x10C
MAC_TX_SIZE_1024TO1518
发送的 1024-1518 字节数据包数量
0x110
MAC_TX_SIZE_1519TOMAX
发送的 1519 字节至 MTU 大小的数据包数量
0x114
MAC_TX_SINGLE_COL
单次碰撞后成功发送的数据包数量
0x118
MAC_TX_MULT_COL
多次碰撞后成功发送的数据包数量
0x11C
MAC_TX_LATE_COL
延迟碰撞发送的数据包数量
0x120
MAC_TX_ABORT_COL
因过度碰撞而中止发送的数据包数量
0x124
MAC_TX_UNDERUN
因发送 FIFO 下溢而中止的数据包数量
0x128
MAC_TX_LENGTH_ERR
长度字段与实际帧大小不匹配的发送数据包数量
0x12C
MAC_TX_TRUNC
大小大于 MTU 的发送数据包数量
0x130
MAC_TX_BCAST_BYTE_CNT
发送的广播包字节数
0x134
MAC_TX_MCAST_BYTE_CNT
发送的组播包字节数(不包括暂停帧)
0x138
MDIO_CTRL_REG_1
MDIO 控制寄存器
0x13C
MDIO_CTRL_REG_2
MDIO 条款 45 控制寄存器
0x140
MDIO_STATUS_REG
MDIO 读出数据和忙状态
0x144
DMA_BURST_REG
DMA 读写突发长度
0x148
WATCHDOG_REG
DMA 看门狗定时器
0x14C
LOW_POWER_CTRL
低功耗控制
0x150
GMAC_STATUS
GMAC 状态
0x154
DELAY_SEL
延迟线选择
0x158
SVLAN
支持 SVLAN ID
0x15C
DBG_TEST_REG
调试控制寄存器
0x174
IP_VERSION
GMAC IP 版本
0x178
SOFT_RESET
软复位
0x17C
SA_FILTER_CTRL_0
源地址过滤器控制 0
0x180
SA_FILTER_CTRL_1
源地址过滤器控制 1
0x184
DA_FILTER_CTRL
目的地址过滤器控制
0x188
SA_FILTER0_LOW
源地址过滤器 0 低 32 位
0x18C
SA_FILTER0_HIGH_MASK
源地址过滤器 0 高 32 位掩码
0x190
SA_FILTER1_LOW
源地址过滤器 1 低 32 位
0x194
SA_FILTER1_HIGH_MASK
源地址过滤器 1 高 32 位掩码
0x198
SA_FILTER2_LOW
源地址过滤器 2 低 32 位
0x19C
SA_FILTER2_HIGH_MASK
源地址过滤器 2 高 32 位掩码
0x1A0
SA_FILTER3_LOW
源地址过滤器 3 低 32 位
0x1A4
SA_FILTER3_HIGH_MASK
源地址过滤器 3 高 32 位掩码
0x1A8
SA_FILTER4_LOW
源地址过滤器 4 低 32 位
0x1AC
SA_FILTER4_HIGH_MASK
源地址过滤器 4 高 32 位掩码
0x1B0
SA_FILTER5_LOW
源地址过滤器 5 低 32 位
0x1B4
SA_FILTER5_HIGH_MASK
源地址过滤器 5 高 32 位掩码
0x1B8
SA_FILTER6_LOW
源地址过滤器 6 低 32 位
0x1BC
SA_FILTER6_HIGH_MASK
源地址过滤器 6 高 32 位掩码
0x1C0
SA_FILTER7_LOW
源地址过滤器 7 低 32 位
0x1C4
SA_FILTER7_HIGH_MASK
源地址过滤器 7 高 32 位掩码
0x1C8
SA_FILTER8_LOW
源地址过滤器 8 低 32 位
0x1CC
SA_FILTER8_HIGH_MASK
源地址过滤器 8 高 32 位掩码
0x1D0
SA_FILTER9_LOW
源地址过滤器 9 低 32 位
0x1D4
SA_FILTER9_HIGH_MASK
源地址过滤器 9 高 32 位掩码
0x1D8
SA_FILTER10_LOW
源地址过滤器 10 低 32 位
0x1DC
SA_FILTER10_HIGH_MASK
源地址过滤器 10 高 32 位掩码
0x1E0
SA_FILTER11_LOW
源地址过滤器 11 低 32 位
0x1E4
SA_FILTER11_HIGH_MASK
源地址过滤器 11 高 32 位掩码
0x1E8
SA_FILTER12_LOW
源地址过滤器 12 低 32 位
0x1EC
SA_FILTER12_HIGH_MASK
源地址过滤器 12 高 32 位掩码
0x1F0
SA_FILTER13_LOW
源地址过滤器 13 低 32 位
0x1F4
SA_FILTER13_HIGH_MASK
源地址过滤器 13 高 32 位掩码
0x1F8
SA_FILTER14_LOW
源地址过滤器 14 低 32 位
0x1FC
SA_FILTER14_HIGH_MASK
源地址过滤器 14 高 32 位掩码
0x200
SA_FILTER15_LOW
源地址过滤器 15 低 32 位
0x204
SA_FILTER15_HIGH_MASK
源地址过滤器 15 高 32 位掩码
0x208
SA_FILTER16_LOW
源地址过滤器 16 低 32 位
0x20C
SA_FILTER16_HIGH_MASK
源地址过滤器 16 高 32 位掩码
0x210
SA_FILTER17_LOW
源地址过滤器 17 低 32 位
0x214
SA_FILTER17_HIGH_MASK
源地址过滤器 17 高 32 位掩码
0x218
SA_FILTER18_LOW
源地址过滤器18低32位
0x21C
SA_FILTER18_HIGH_MASK
源地址过滤器 18 高 32 位掩码
0x220
SA_FILTER19_LOW
源地址过滤器 19 低 32 位
0x224
SA_FILTER19_HIGH_MASK
源地址过滤器 19 高 32 位掩码
0x228
SA_FILTER20_LOW
源地址过滤器 20 低 32 位
0x22C
SA_FILTER20_HIGH_MASK
源地址过滤器 20 高 32 位掩码
0x230
SA_FILTER21_LOW
源地址过滤器 21 低 32 位
0x234
SA_FILTER21_HIGH_MASK
源地址过滤器 21 高 32 位掩码
0x238
SA_FILTER22_LOW
源地址过滤器 22 低 32 位
0x23C
SA_FILTER22_HIGH_MASK
源地址过滤器 22 高 32 位掩码
0x240
SA_FILTER23_LOW
源地址过滤器 23 低 32 位
0x244
SA_FILTER23_HIGH_MASK
源地址过滤器 23 高 32 位掩码
0x248
SA_FILTER24_LOW
源地址过滤器 24 低 32 位
0x24C
SA_FILTER24_HIGH_MASK
源地址过滤器 24 高 32 位掩码
0x250
SA_FILTER25_LOW
源地址过滤器 25 低 32 位
0x254
SA_FILTER25_HIGH_MASK
源地址过滤器 25 高 32 位掩码
0x258
SA_FILTER26_LOW
源地址过滤器 26 低 32 位
0x25C
SA_FILTER26_HIGH_MASK
源地址过滤器 26 高 32 位掩码
0x260
SA_FILTER27_LOW
源地址过滤器 27 低 32 位
0x264
SA_FILTER27_HIGH_MASK
源地址过滤器 27 高 32 位掩码
0x268
SA_FILTER28_LOW
源地址过滤器 28 低 32 位
0x26C
SA_FILTER28_HIGH_MASK
源地址过滤器 28 高 32 位掩码
0x270
SA_FILTER29_LOW
源地址过滤器 29 低 32 位
0x274
SA_FILTER29_HIGH_MASK
源地址过滤器 29 高 32 位掩码
0x278
SA_FILTER30_LOW
源地址过滤器 30 低 32 位
0x27C
SA_FILTER30_HIGH_MASK
源地址过滤器 30 高 32 位掩码
0x280
SA_FILTER31_LOW
源地址过滤器 31 低 32 位
0x284
SA_FILTER31_HIGH_MASK
源地址过滤器 31 高 32 位掩码
0x288
DA_FILTER0_LOW
目的地址过滤器 0 低 32 位
0x28C
DA_FILTER0_HIGH_MASK
目的地址过滤器 0 高 32 位掩码
0x290
DA_FILTER1_LOW
目的地址过滤器 1 低 32 位
0x294
DA_FILTER1_HIGH_MASK
目的地址过滤器 1 高 32 位掩码
0x298
DA_FILTER2_LOW
目的地址过滤器 2 低 32 位
0x29C
DA_FILTER2_HIGH_MASK
目的地址过滤器 2 高 32 位掩码
0x2A0
DA_FILTER3_LOW
目的地址过滤器 3 低 32 位
0x2A4
DA_FILTER3_HIGH_MASK
目的地址过滤器 3 高 32 位掩码
0x2A8
DA_FILTER4_LOW
目的地址过滤器 4 低 32 位
0x2AC
DA_FILTER4_HIGH_MASK
目的地址过滤器 4 高 32 位掩码
0x2B0
DA_FILTER5_LOW
目的地址过滤器 5 低 32 位
0x2B4
DA_FILTER5_HIGH_MASK
目的地址过滤器 5 高 32 位掩码
0x2B8
DA_FILTER6_LOW
目的地址过滤器 6 低 32 位
0x2BC
DA_FILTER6_HIGH_MASK
目的地址过滤器 6 高 32 位掩码
0x2C0
DA_FILTER7_LOW
目的地址过滤器 7 低 32 位
0x2C4
DA_FILTER7_HIGH_MASK
目的地址过滤器 7 高 32 位掩码
0x2C8
DA_FILTER8_LOW
目的地址过滤器 8 低 32 位
0x2CC
DA_FILTER8_HIGH_MASK
目的地址过滤器 8 高 32 位掩码
0x2D0
DA_FILTER9_LOW
目的地址过滤器 9 低 32 位
0x2D4
DA_FILTER9_HIGH_MASK
目的地址过滤器 9 高 32 位掩码
0x2D8
DA_FILTER10_LOW
目的地址过滤器 10 低 32 位
0x2DC
DA_FILTER10_HIGH_MASK
目的地址过滤器 10 高 32 位掩码
0x2E0
DA_FILTER11_LOW
目的地址过滤器 11 低 32 位
0x2E4
DA_FILTER11_HIGH_MASK
目的地址过滤器 11 高 32 位掩码
0x2E8
DA_FILTER12_LOW
目的地址过滤器 12 低 32 位
0x2EC
DA_FILTER12_HIGH_MASK
目的地址过滤器 12 高 32 位掩码
0x2F0
DA_FILTER13_LOW
目的地址过滤器 13 低 32 位
0x2F4
DA_FILTER13_HIGH_MASK
目的地址过滤器13高32位掩码
0x2F8
DA_FILTER14_LOW
目的地址过滤器 14 低 32 位
0x2FC
DA_FILTER14_HIGH_MASK
目的地址过滤器 14 高 32 位掩码
0x300
DA_FILTER15_LOW
目的地址过滤器 15 低 32 位
0x304
DA_FILTER15_HIGH_MASK
目的地址过滤器 15 高 32 位掩码
0x308
DA_FILTER16_LOW
目的地址过滤器 16 低 32 位
0x30C
DA_FILTER16_HIGH_MASK
目的地址过滤器 16 高 32 位掩码
0x310
DA_FILTER17_LOW
目的地址过滤器 17 低 32 位
0x314
DA_FILTER17_HIGH_MASK
目的地址过滤器 17 高 32 位掩码
0x318
DA_FILTER18_LOW
目的地址过滤器 18 低 32 位
0x31C
DA_FILTER18_HIGH_MASK
目的地址过滤器 18 高 32 位掩码
0x320
DA_FILTER19_LOW
目的地址过滤器 19 低 32 位
0x324
DA_FILTER19_HIGH_MASK
目的地址过滤器 19 高 32 位掩码
0x328
DA_FILTER20_LOW
目的地址过滤器 20 低 32 位
0x32C
DA_FILTER20_HIGH_MASK
目的地址过滤器 20 高 32 位掩码
0x330
DA_FILTER21_LOW
目的地址过滤器 21 低 32 位
0x334
DA_FILTER21_HIGH_MASK
目的地址过滤器 21 高 32 位掩码
0x338
DA_FILTER22_LOW
目的地址过滤器 22 低 32 位
0x33C
DA_FILTER22_HIGH_MASK
目的地址过滤器 22 高 32 位掩码
0x340
DA_FILTER23_LOW
目的地址过滤器 23 低 32 位
0x344
DA_FILTER23_HIGH_MASK
目的地址过滤器 23 高 32 位掩码
0x348
DA_FILTER24_LOW
目的地址过滤器 24 低 32 位
0x34C
DA_FILTER24_HIGH_MASK
目的地址过滤器 24 高 32 位掩码
0x350
DA_FILTER25_LOW
目的地址过滤器 25 低 32 位
0x354
DA_FILTER25_HIGH_MASK
目的地址过滤器 25 高 32 位掩码
0x358
DA_FILTER26_LOW
目的地址过滤器 26 低 32 位
0x35C
DA_FILTER26_HIGH_MASK
目的地址过滤器 26 高 32 位掩码
0x360
DA_FILTER27_LOW
目的地址过滤器 27 低 32 位
0x364
DA_FILTER27_HIGH_MASK
目的地址过滤器 27 高 32 位掩码
0x368
DA_FILTER28_LOW
目的地址过滤器 28 低 32 位
0x36C
DA_FILTER28_HIGH_MASK
目的地址过滤器 28 高 32 位掩码
0x370
DA_FILTER29_LOW
目的地址过滤器 29 低 32 位
0x374
DA_FILTER29_HIGH_MASK
目的地址过滤器 29 高 32 位掩码
0x378
DA_FILTER30_LOW
目的地址过滤器 30 低 32 位
0x37C
DA_FILTER30_HIGH_MASK
目的地址过滤器 30 高 32 位掩码
0x380
DA_FILTER31_LOW
目的地址过滤器 31 低 32 位
0x384
DA_FILTER31_HIGH_MASK
目的地址过滤器 31 高 32 位掩码
MAC_CTRL_REG
地址偏移: 0x0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TXEN |
0 |
读/写 |
0 |
|
RXEN |
1 |
读/写 |
0 |
|
TXFC |
2 |
读/写 |
1 |
|
RXFC |
3 |
读/写 |
1 |
|
MAC_LP_EN |
4 |
读/写 |
0 |
|
FULL_DUPLEX |
5 |
读/写 |
1 |
|
CRCE |
6 |
读/写 |
1 |
注意:如果数据包小于 64 字节,MAC 将始终启用填充(pad)功能。 |
FLCHK |
7 |
读/写 |
1 |
|
PRLEN |
11:8 |
读/写 |
7 |
前导码长度,标准值为 0x07 |
保留 |
12 |
/ |
0x0 |
/ |
VLAN_STRIP |
13 |
读/写 |
1 |
|
PROM_MODE |
14 |
读/写 |
0 |
|
TX_IP_SUM_EN |
15 |
读/写 |
1 |
|
TX_TCP_ICMP_SUM_EN |
16 |
读/写 |
1 |
|
TX_UDP_SUM_EN |
17 |
读/写 |
1 |
|
SPEED |
19:18 |
读/写 |
1 |
|
MII_MODE |
21:20 |
读/写 |
0 |
|
TX_PARSER_EN |
22 |
读/写 |
0 |
|
RX_CHKSUM_EN |
23 |
读/写 |
1 |
|
MULTI_ALL |
24 |
读/写 |
1 |
|
RX_HASH_EN |
25 |
读/写 |
0 |
|
BROAD_EN |
26 |
读/写 |
1 |
|
DEBUG_MODE |
27 |
读/写 |
0 |
|
SYS_CLK_IS_125 |
28 |
读/写 |
0 |
|
SYS_CLK_IS_25 |
29 |
读/写 |
1 |
|
RMII_MODE |
30 |
读/写 |
1 |
注意:此位仅在 RMII 模式下有意义。 |
MAGIC_FRAME_EN |
31 |
读/写 |
0 |
|
MAC_IPG_REG
地址偏移: 0x4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_IPG |
6:0 |
读/写 |
96 |
最小背靠背发送包间隔 |
保留 |
7 |
/ |
0 |
保留 |
RX_IPG |
15:8 |
读/写 |
8 |
对背靠背接收帧的最小间隔要求。间隔低于此值的帧将被视为非法。 |
保留 |
16 |
/ |
0 |
保留 |
RGMII_100M_RX_NEG_SEL |
17 |
读/写 |
0 |
|
RGMII_100M_TX_NEG_SEL |
18 |
读/写 |
0 |
|
RMII_RX_NEG_SEL |
19 |
读/写 |
0 |
|
RMII_TX_NEG_SEL |
20 |
读/写 |
0x1 |
|
MII_RX_NEG_SEL |
21 |
读/写 |
0 |
|
MII_TX_NEG_SEL |
22 |
读/写 |
0x1 |
|
保留 |
31:23 |
读/写 |
0 |
保留 |
MAC_HALF_CTRL_REG
地址偏移: 0x8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RETRY_NUM |
3:0 |
读/写 |
10 |
发生冲突时的最大重试次数 |
BACKOFF_EN |
4 |
读/写 |
1 |
|
保留 |
31:5 |
读/写 |
0 |
保留 |
MAC_MTU_REG
地址偏移: 0xC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
MTU |
15:0 |
读/写 |
1536 |
最大帧大小 |
保留 |
31:16 |
/ |
0 |
保留 |
MAC_STAD_LO_REG
地址偏移: 0x10
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
STAD_LO |
31:0 |
读/写 |
0 |
MAC 的单播站地址(低32位) |
MAC_STAD_HI_REG
地址偏移: 0x14
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
STAD_HI |
15:0 |
读/写 |
0 |
MAC 的单播站地址(高16位) |
保留 |
31:16 |
/ |
0 |
保留 |
MAC_LPI_REG
地址偏移: 0x18
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
LPI_ENTER_CNT |
15:0 |
读/写 |
21 |
进入 LPI 模式前等待的空闲时间,每一步表示 2us |
LPI_WT |
23:16 |
读/写 |
21 |
退出 LPI 模式前的等待时间,每一步表示 2us |
RX_IN_LPI |
24 |
只读 |
0 |
|
TX_IN_LPI |
25 |
只读 |
0 |
|
保留 |
30:26 |
/ |
0 |
保留 |
LPI_EN |
31 |
读/写 |
0 |
|
RX_HASH_TABLE1_REG
地址偏移: 0x1C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_HASH_TABLE_LO |
31:0 |
读/写 |
21 |
接收哈希表(低32位) |
RX_HASH_TABLE2_REG
地址偏移: 0x20
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_HASH_TABLE_HI |
31:0 |
读/写 |
21 |
接收哈希表(高32位) |
SRAM_CTRL_REG_1
地址偏移: 0x24
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RFD_HEAD_ADDR |
10:0 |
读/写 |
960 |
接收空闲描述符(RFD)环在内部 SRAM 中的头地址 |
保留 |
11 |
/ |
0 |
保留 |
RFD_TAIL_ADDR |
22:12 |
读/写 |
1023 |
接收空闲描述符(RFD)环在内部 SRAM 中的尾地址 |
保留 |
23 |
/ |
0 |
保留 |
XEC_RFD_LEN |
31:24 |
读/写 |
64 |
SRAM 中 RFD FIFO 的深度 |
SRAM_CTRL_REG_2
地址偏移: 0x28
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TRD_HEAD_ADDR |
10:0 |
读/写 |
1504 |
发送控制字(TPD)在内部 SRAM 中的头地址 |
保留 |
11 |
/ |
0 |
保留 |
TRD_TAIL_ADDR |
22:12 |
读/写 |
1535 |
发送控制字(TPD)在内部 SRAM 中的尾地址 |
保留 |
23 |
/ |
0 |
保留 |
XEC_TRD_LEN |
31:24 |
读/写 |
32 |
SRAM 中发送控制字 FIFO 的深度 |
SRAM_CTRL_REG_3
地址偏移: 0x2C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RXF_HEAD_ADDR |
10:0 |
读/写 |
0 |
SRAM 中接收数据(RXD)区域的起始地址 |
保留 |
11 |
/ |
0 |
保留 |
RXF_TAIL_ADDR |
22:12 |
读/写 |
959 |
内部 SRAM 中 RX FIFO 的尾地址 |
保留 |
31:23 |
/ |
0 |
保留 |
SRAM_CTRL_REG_4
地址偏移: 0x30
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TXF_HEAD_ADDR |
10:0 |
读/写 |
1024 |
内部 SRAM 中 TX FIFO 的头地址 |
保留 |
11 |
/ |
0 |
保留 |
TXF_TAIL_ADDR |
22:12 |
读/写 |
1503 |
内部 SRAM 中 TX FIFO 的尾地址 |
保留 |
31:23 |
/ |
0 |
保留 |
SRAM_CTRL_REG_5
地址偏移: 0x34
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
XEC_RXF_LEN |
10:0 |
读/写 |
960 |
SRAM 中 RXD FIFO 的深度 |
保留 |
11 |
/ |
0 |
保留 |
XEC_TXF_LEN |
22:12 |
读/写 |
480 |
SRAM 中 TXD FIFO 的深度 |
保留 |
31:23 |
/ |
0 |
保留 |
SRAM_CTRL_REG_6
地址偏移: 0x38
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
LOAD_PTR |
0 |
读/写 |
0 |
当 SRAM 配置改变时,软件设置此位以复位 SRAM 指针,它将在下一个周期自动清零 |
保留 |
31:1 |
/ |
0 |
保留 |
DESCRIPTOR_CTRL_REG_2
地址偏移: 0x40
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RFD_BASE_ADDR_LO_0TO2 |
2:0 |
只读 |
0 |
RFD 环的基地址,低32位,位[2:0] |
RFD_BASE_ADDR_LO_3TO31 |
31:3 |
读/写 |
0 |
RFD 环的基地址,低32位,位[31:3] |
DESCRIPTOR_CTRL_REG_3
地址偏移: 0x44
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RRD_BASE_ADDR_LO_0TO2 |
2:0 |
只读 |
0 |
RRD 环的基地址,低32位,位[2:0] |
RRD_BASE_ADDR_LO_3TO31 |
31:3 |
读/写 |
0 |
RRD 环的基地址,低32位,位[31:3] |
DESCRIPTOR_CTRL_REG_4
地址偏移: 0x48
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RFD_RRD_RING_SIZE |
11:0 |
读/写 |
0x800 |
RFD 和 RRD 环中的描述符数量 |
保留 |
15:12 |
/ |
0 |
保留 |
RX_BUFFER_SIZE_0TO2 |
18:16 |
只读 |
0 |
每个 RFD 的缓冲区大小,位[2:0] |
RX_BUFFER_SIZE_3TO11 |
27:19 |
读/写 |
0xC0 |
每个 RFD 的缓冲区大小,位[11:3] |
保留 |
31:28 |
/ |
0 |
保留 |
DESCRIPTOR_CTRL_REG_5
地址偏移: 0x4C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
保留 |
15:0 |
/ |
0 |
保留 |
TPD_RING_SIZE |
31:16 |
读/写 |
0x800 |
TPD 环中的描述符数量 |
DESCRIPTOR_CTRL_REG_7
地址偏移: 0x54
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TPD_BASE_ADDR_LO_0TO3 |
3:0 |
只读 |
0 |
TPD 环的基地址,低32位,位[3:0] |
TPD_BASE_ADDR_LO_4TO31 |
31:4 |
读/写 |
0 |
TPD 环的基地址,低32位,位[31:4] |
CMB_BASE_ADDR_LO
地址偏移: 0x5C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
CMB_BASE_ADDR_LO_0 |
0 |
只读 |
0 |
CMB 的基地址,低32位,位[0] |
CMB_BASE_ADDR_LO_1TO31 |
31:1 |
读/写 |
0 |
CMB 的基地址,低32位,位[31:1] |
DMA_BURST_CTRL_1
地址偏移: 0x60
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
NUM_TPD_BURST_PREF |
2:0 |
读/写 |
5 |
单个 DMA 请求中预取的 TPD 描述符数量。最大配置值为 5 |
保留 |
31:3 |
/ |
0 |
保留 |
DMA_BURST_CTRL_2
地址偏移: 0x64
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
NUM_RFD_BURST_PREF |
3:0 |
读/写 |
8 |
单个 DMA 请求中预取的 RFD 描述符数量,最大配置值为8 |
保留 |
6:4 |
/ |
0 |
保留 |
CUT_THRU_EN |
7 |
读/写 |
0 |
注意:如果支持巨型包(jumbo packet),此位必须设置为1。 |
保留 |
31:8 |
/ |
0 |
保留 |
FC_WATERMARK_REG
地址偏移: 0x68
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
FC_UOF_WATERMARK |
10:0 |
读/写 |
575 |
当 Rx SRAM 的已用空间超过此值且 TXFC 被设置时,MAC 发送 XON 帧,单位为8字节 |
保留 |
15:11 |
/ |
0 |
保留 |
CUT_THRFC_DOF_WATERMARKU_EN |
26:16 |
读/写 |
447 |
当 Rx SRAM 的已用空间低于此值且 TXFC 被设置时,MAC 发送 XOFF 帧,单位为8字节 |
保留 |
31:27 |
/ |
0 |
保留 |
CMB_CTR_REG
地址偏移: 0x6C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
CMB_THRESHOLD |
15:0 |
读/写 |
256 |
当已使用的 TPD 超过此阈值时,触发 CMB 请求 |
CMB_TIMER |
30:16 |
读/写 |
0x7fff |
触发 CMB 请求的倒计时定时器,0表示禁用此功能,单位为2us |
CMB_EN |
31 |
读/写 |
0 |
|
MAILBOX_REG_1
地址偏移: 0x70
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RFD_PROD_IDX |
11:0 |
读/写 |
0 |
RFD 生产者索引 |
保留 |
14:12 |
/ |
0 |
保留 |
RFD_CONS_IDX |
26:15 |
只读 |
0 |
RFD 消费者索引 |
保留 |
31:27 |
/ |
0 |
保留 |
MAILBOX_REG_2
地址偏移: 0x74
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TPD_PROD_IDX |
15:0 |
读/写 |
0 |
TPD 生产者索引 |
TPD_CONS_IDX |
31:16 |
只读 |
0 |
TPD 消费者索引 |
INT_STA_REG
地址偏移: 0x78
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RXP_OF_INT |
0 |
写1清0 |
0 |
RX FIFO 满中断,写1清除 |
RFD_UR_INT |
1 |
写1清0 |
0 |
RFD 环空(下溢)中断,写1清除 |
TXF_UR_INT |
2 |
写1清0 |
0 |
TXF 下溢中断,写1清除 |
DMAR_TO_INT |
3 |
写1清0 |
0 |
DMAR 操作超时中断,写1清除 |
DMAW_TO_INT |
4 |
写1清0 |
0 |
DMAW 操作超时中断,写1清除 |
TX_PKT_INT |
5 |
写1清0 |
0 |
一个报文已发送到 PHY,写1清除 |
RX_PKT_INT |
6 |
写1清0 |
0 |
一个报文已接收并上传到主机内存,写1清除 |
DMAW_BUS_ERR_INT |
7 |
写1清0 |
0 |
DMAW 总线错误中断,写1清除 |
DMAR_BUS_ERR_INT |
8 |
写1清0 |
0 |
DMAR 总线错误中断,写1清除 |
CMB_INT |
9 |
写1清0 |
0 |
CMB DMA 写操作完成,写1清除 |
MAGIC_FRAME_INT |
10 |
写1清0 |
0 |
检测到魔术包,写1清除 |
RX_PTP_EVENT_INT |
11 |
写1清0 |
0 |
接收到一个 PTP 事件包并上传到主机内存,写1清除 |
TX_PTP_EVENT_INT |
12 |
写1清0 |
0 |
发送出一个 PTP 事件包到 PHY,写1清除 |
保留 |
31:13 |
/ |
0x0 |
/ |
INT_MSK_REG
地址偏移: 0x7C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
INT_MASK |
12:0 |
读/写 |
0 |
设置为1以屏蔽相应的中断。位0屏蔽 int_status 位0,依此类推。1表示屏蔽中断,0表示中断有效 |
保留 |
30:13 |
/ |
0 |
保留 |
DIS_INT |
31 |
读/写 |
0 |
|
INTR_TIMER2_REG
地址偏移: 0x80
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
INTR_MOD_RX_TIMER |
15:0 |
读/写 |
0x8 |
用于 rx_pkt_int 的中断调节定时器,收到 rx_pkt_int 后,等待该定时器再断言 top_int 以合并 rx_pkt_int,步长为 2us,0 表示不合并 |
INTR_MOD_TX_TIMER |
31:16 |
读/写 |
0xff |
用于 tx_pkt_int 的中断调节定时器,收到 tx_pkt_int 后,等待该定时器再断言 top_int 以合并 tx_pkt_int,步长为 2us,0 表示不合并 |
MAC_RX_OK
地址偏移: 0x84
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_OK |
23:0 |
读后清0 |
0 |
接收的正确报文数量。正确意味着无 MAC 层错误。读出时清零 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_BCAST
地址偏移: 0x88
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_BCAST |
23:0 |
读后清0 |
0 |
接收的正确广播报文数量。正确意味着无 MAC 层错误。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_MCAST
地址偏移: 0x8C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_MCAST |
23:0 |
读后清0 |
0 |
接收的正确组播报文(不包括暂停帧)数量。正确意味着无 MAC 层错误。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_PAUSE
地址偏移: 0x90
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_PAUSE |
23:0 |
读后清0 |
0 |
接收的暂停报文数量 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_LLDP
地址偏移: 0x94
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_LLDP |
23:0 |
读后清0 |
0 |
接收的 LLDP 报文数量。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_FCS_ERR
地址偏移: 0x98
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_FCS_ERR |
23:0 |
读后清0 |
0 |
接收的 FCS 错误报文数量 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_LEN_ERR
地址偏移: 0x9C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_LEN_ERR |
23:0 |
读后清0 |
0 |
接收的长度字段(46~1500)与实际大小不匹配的报文数量。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_BYTE_CNT
地址偏移: 0xA0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_BYTE_CNT |
31:0 |
读后清0 |
0 |
接收的正确报文的字节总数。读出时清零。 |
MAC_RX_RUNT
地址偏移: 0xA4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_RUNT |
23:0 |
读后清0 |
0 |
接收的小于 64 字节且 FCS 正确的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_FRAGMENT
地址偏移: 0xA8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_FRAGMENT |
23:0 |
读后清0 |
0 |
接收的小于 64 字节且 FCS 错误的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_64
地址偏移: 0xAC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_64B |
23:0 |
读后清0 |
0 |
接收的64字节长的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_65TO127
地址偏移: 0xB0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_65TO127B |
23:0 |
读后清0 |
0 |
接收的长度在 65 到 127 字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_128TO255
地址偏移: 0xB4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_128TO255B |
23:0 |
读后清0 |
0 |
接收的长度在128到255字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_256TO511
地址偏移: 0xB8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_256TO511B |
23:0 |
读后清0 |
0 |
接收的长度在256到511字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_512TO1023
地址偏移: 0xBC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_512TO1023B |
23:0 |
读后清0 |
0 |
接收的长度在512到1023字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_1024TO1518
地址偏移: 0xC0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_1024TO1518B |
23:0 |
读后清0 |
0 |
接收的长度在1024到1518字节之间的报文数量(包括好包和坏包)。读出时清零 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_SIZE_1519TOMAX
地址偏移: 0xC4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE_1519TOMAX |
23:0 |
读后清0 |
0 |
接收的长度在1519字节到 MTU 之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_OVERSIZE
地址偏移: 0xC8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_OVERSIZE |
23:0 |
读后清0 |
0 |
接收的大于 MTU 大小的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_OVERFLOW
地址偏移: 0xCC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_OVERFLOW |
15:0 |
读后清0 |
0 |
因 RX FIFO 溢出而丢弃的帧数量。读出时清零。 |
保留 |
31:16 |
/ |
0 |
保留 |
MAC_RX_NIBBLE_ERR
地址偏移: 0xD0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_NIBBLE_ERR |
23:0 |
读后清0 |
0 |
接收的半字节错误报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_RX_BCAST_BYTE_CNT
地址偏移: 0xD4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_BCAST_BYTE_CNT |
31:0 |
读后清0 |
0 |
接收的广播报文字节总数。报文应无 MAC 层错误。读出时清零。 |
MAC_RX_MCAST_BYTE_CNT
地址偏移: 0xD8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_MCAST_BYTE_CNT |
31:0 |
读后清0 |
0 |
接收的组播报文(不包括暂停帧)字节总数。报文应无 MAC 层错误。读出时清零。 |
MAC_RX_ADDR_ERR
地址偏移: 0xDC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_ADDR_ERR |
23:0 |
读后清0 |
0 |
目的地址或源地址错误的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_OK
地址偏移: 0xE0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_OK |
23:0 |
读后清0 |
0 |
由软件驱动发送的正确报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_BCAST
地址偏移: 0xE4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_BCAST |
23:0 |
读后清0 |
0 |
发送的正确广播报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_MCAST
地址偏移: 0xE8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_MCAST |
23:0 |
读后清0 |
0 |
发送的正确组播报文(不包括暂停帧)数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_PAUSE
地址偏移: 0xEC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_PAUSE |
23:0 |
读后清0 |
0 |
发送的暂停报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_DEFFER
地址偏移: 0xF0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_DEFER |
23:0 |
读后清0 |
0 |
发送时因检测到载波而延迟的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_BYTE_CNT
地址偏移: 0xF4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_BYTE_CNT |
31:0 |
读后清0 |
0 |
发送的数据字节总数。读出时清零。 |
MAC_TX_SIZE_64B
地址偏移: 0xF8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_64B |
23:0 |
读后清0 |
0 |
发送的64字节长的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SIZE_65TO127
地址偏移: 0xFC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_65TO127B |
23:0 |
读后清0 |
0 |
发送的长度在65到127字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SIZE_128TO255
地址偏移: 0x100
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_128TO255B |
23:0 |
读后清0 |
0 |
发送的长度在128到255字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SIZE_256TO511
地址偏移: 0x104
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_256TO511B |
23:0 |
读后清0 |
0 |
发送的长度在256到511字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SIZE_512TO1023
地址偏移: 0x108
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_512TO1023B |
23:0 |
读后清0 |
0 |
发送的长度在512到1023字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SIZE_1024TO1518
地址偏移: 0x10C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_1024TO1518B |
23:0 |
读后清0 |
0 |
发送的长度在1024到1518字节之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SIZE_1519TOMAX
地址偏移: 0x110
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE_1519TOMAX |
23:0 |
读后清0 |
0 |
发送的长度在1519字节到 MTU 之间的报文数量(包括好包和坏包)。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_SINGLE_COL
地址偏移: 0x114
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SINGLE_COL |
23:0 |
读后清0 |
0 |
单次冲突后成功发送的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_MULT_COL
地址偏移: 0x118
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_MULT_COL |
23:0 |
读后清0 |
0 |
多次冲突后成功发送的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_LATE_COL
地址偏移: 0x11C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_LATE_COL |
23:0 |
读后清0 |
0 |
发送时遇到晚期冲突的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_ABORT_COL
地址偏移: 0x120
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_ABORT_COL |
23:0 |
读后清0 |
0 |
因过度冲突而中止发送的报文数量。读出时清零。 |
保留 |
31:24 |
/ |
0 |
保留 |
MAC_TX_UNDERRUN
地址偏移: 0x124
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_UNDERRUN |
15:0 |
读后清0 |
0 |
因发送 FIFO 下溢而中止发送的报文数量。读出时清零。 |
保留 |
31:16 |
/ |
0 |
保留 |
MAC_TX_LENGTH_ERR
地址偏移: 0x128
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_LENGTH_ERR |
15:0 |
读后清0 |
0 |
发送的报文中长度字段(46~1500)与实际帧大小不匹配的数量。读出时清零。 |
保留 |
31:16 |
/ |
0 |
保留 |
MAC_TX_TRUNC
地址偏移: 0x12C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_TRUNC |
15:0 |
读后清0 |
0 |
发送的大小超过 MTU 的报文数量。读出时清零。 |
保留 |
31:16 |
/ |
0 |
保留 |
MAC_TX_BCAST_BYTE_CNT
地址偏移: 0x130
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_BCAST_BYTE_CNT |
31:0 |
读后清0 |
0 |
发送的广播报文字节总数。读出时清零。 |
MAC_TX_MCAST_BYTE_CNT
地址偏移: 0x134
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_MCAST_BYTE_CNT |
31:0 |
读后清0 |
0 |
发送的组播报文(不包括暂停帧)字节总数。读出时清零。 |
MDIO_CTRL_REG_1
地址偏移: 0x138
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
MDIO_DATA |
15:0 |
读/写 |
0 |
在 MDIO 写操作时,要写入 PHY 寄存器的16位控制数据。 |
MDIO_REG_ADDR |
20:16 |
读/写 |
0 |
MDIO 寄存器地址 |
MDIO_RD_WR |
21 |
读/写 |
0 |
|
保留 |
22 |
/ |
0 |
保留 |
MDIO_START |
23 |
读/写 |
0 |
写1启动 MDIO 操作。此位在一个周期后自清零 |
MDIO_CLK_SEL |
26:24 |
读/写 |
0 |
|
保留 |
27 |
/ |
0 |
保留 |
MDIO_MODE |
28 |
读/写 |
0 |
|
MDIO_POST_RD_INC |
29 |
读/写 |
0x0 |
后读增量事务请求(用于 clause45) |
保留 |
31:30 |
读/写 |
0 |
保留 |
MDIO_CTRL_REG_2
地址偏移: 0x13C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
EX_REG_ADDR |
15:0 |
读/写 |
0 |
MDIO 扩展模式(clause45)地址 |
DEAD |
20:16 |
读/写 |
0 |
MDIO 设备地址(DEVAD) |
PRTAD |
25:21 |
读/写 |
0 |
MDIO 端口地址(PRTAD) |
PHY_ADDR |
30:26 |
读/写 |
0 |
PHY 地址(用于 clause22) |
保留 |
31 |
读/写 |
0 |
保留 |
MDIO_STATUS_REG
地址偏移: 0x140
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
MDIO_READOUT_DATA |
15:0 |
只读 |
0 |
MDIO 读出的数据 |
MDIO_BUSY |
16 |
只读 |
0 |
MDIO 事务正在进行中,MDIO 忙 |
保留 |
31:17 |
/ |
0 |
保留 |
DMA_BURST_REG
地址偏移: 0x144
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
DMAW_BURST |
3:0 |
读/写 |
15 |
DMA 写操作的最大突发长度 |
保留 |
15:4 |
/ |
0 |
保留 |
DMAR_BURST |
19:16 |
读/写 |
15 |
DMA 读操作的最大突发长度 |
保留 |
31:20 |
/ |
0 |
保留 |
WATCHDOG_REG
地址偏移: 0x148
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
WATCHDOG_TIMER |
31:0 |
读/写 |
8000 |
DMA 看门狗定时器值 |
LOW_POWER_CTRL
地址偏移: 0x14C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
SYSCLK_DYNAMIC_GATE_EN |
0 |
读/写 |
1 |
|
保留 |
31:1 |
/ |
0 |
保留 |
XEC_STATUS
地址偏移: 0x150
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
XEC_IDLE |
0 |
只读 |
1 |
|
保留 |
31:1 |
/ |
0 |
保留 |
DELAY_SEL
地址偏移: 0x154
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RXC_DELAY_SEL |
5:0 |
读/写 |
0 |
在 gmi_rxc_i 输入上增加的额外延迟。0 表示无延迟,1 表示 6 个多路器延迟 + 1 个缓冲器延迟;N 表示 6 个多路器延迟 + N 个缓冲器延迟 |
保留 |
15:6 |
/ |
0 |
保留 |
TXC_DELAY_SEL |
21:16 |
读/写 |
0 |
在 gmi_txc_o 输出上增加的额外延迟。0 表示无延迟,1 表示 6 个多路器延迟 + 1 个缓冲器延迟;N 表示 6 个多路器延迟 + N 个缓冲器延迟 |
保留 |
31:22 |
/ |
0 |
保留 |
SVLAN
地址偏移: 0x158
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
svlan_id |
15:0 |
读/写 |
0x88a8 |
支持的 SVLAN ID,可配置为 88a8, 9100, 9200, 9300 |
保留 |
31:16 |
/ |
0 |
保留 |
DBG_TEST_REG
地址偏移: 0x15C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TPAUSE |
0 |
读/写 |
0 |
|
RX_HUGEN |
1 |
读/写 |
0 |
|
TX_HUGEN |
2 |
读/写 |
0 |
|
BACKP_PAT |
3 |
读/写 |
0 |
|
保留 |
31:4 |
/ |
0 |
保留 |
IP_VERSION
地址偏移: 0x174
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
VERSION_NUM |
31:0 |
只读 |
0x00010200 |
XEC 的 IP 版本号 |
SOFT_RESET
地址偏移: 0x178
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
SOFT_RST |
0 |
读/写 |
0 |
软件写1复位 MAC 逻辑,此位将由硬件自动清零 |
保留 |
31:1 |
/ |
0 |
保留 |
SA_FILTER_CTRL_0
地址偏移: 0x17C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
SA_FILTER_EN |
31:0 |
读/写 |
0 |
使能相应的源地址(SA)过滤器,位 0 对应 SA_FILTER0,依此类推,1 表示使能 |
SA_FILTER_CTRL_1
地址偏移: 0x180
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
SA_FILTER_WHITE_BLACK_SEL |
0 |
读/写 |
1 |
选择过滤器作为白名单或黑名单,0 示白名单,1 表示黑名单 |
保留 |
31:1 |
/ |
0 |
保留 |
DA_FILTER_CTRL
地址偏移: 0x184
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
DA_FILTER_EN |
31:0 |
读/写 |
0 |
使能相应的目的地址(DA)过滤器,位 0 对应 DA_FILTER0,依此类推,1 表示使能 |
SA_FILTER0_LOW
地址偏移: 0x188
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
SA_LOW |
31:0 |
读/写 |
0 |
用于白名单或黑名单过滤的源地址(SA)的低 32 位 |
SA_FILTER0_HIGH_MASK
地址偏移: 0x18C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
SA_HIGH |
15:0 |
读/写 |
0 |
用于白名单或黑名单过滤的源地址(SA)的高 16 位 |
保留 |
23:16 |
/ |
0 |
保留 |
SA_MASK |
29:24 |
读/写 |
0 |
相应 SA 的掩码,每一位对应一个字节的掩码 |
保留 |
31:30 |
/ |
0 |
保留 |
注:SA_FILTER1_LOW 至 SA_FILTER31_HIGH_MASK 的寄存器格式与上述 SA_FILTER0_LOW 和 SA_FILTER0_HIGH_MASK 完全相同,只是地址偏移不同。为简洁起见,此处省略重复的表格条目。
DA_FILTER0_LOW
地址偏移: 0x288
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
DA_LOW |
31:0 |
读/写 |
0 |
目的地址过滤器0 的低 32 位 |
DA_FILTER0_HIGH_MASK
地址偏移: 0x28C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
DA_HIGH |
15:0 |
读/写 |
0 |
目的地址过滤器0 的高 16 位 |
保留 |
23:16 |
/ |
0 |
保留 |
DA_MASK |
29:24 |
读/写 |
0 |
相应 DA 的掩码,每一位对应一个字节的掩码。 |
保留 |
31:30 |
/ |
0 |
保留 |
注:DA_FILTER1_LOW 至 DA_FILTER31_HIGH_MASK 的寄存器格式与上述 DA_FILTER0_LOW 和 DA_FILTER0_HIGH_MASK 完全相同,只是地址偏移不同。为简洁起见,此处省略重复的表格条目。
1588_BLOCK 寄存器
1588_BLOCK 中寄存器及其对应的偏移地址如表 1588_BLOCK 中的寄存器偏移地址 所示
表 7.220: 1588_BLOCK 中的寄存器偏移地址 偏移地址
寄存器名称
功能描述
0x800
RX_PTP_TS_0_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x804
RX_PTP_TS_0_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x808
TX_PTP_TS_0_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x80C
TX_PTP_TS_0_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x810
RX_PTP_TS_1_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x814
RX_PTP_TS_1_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x818
TX_PTP_TS_1_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x81C
TX_PTP_TS_1_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x820
RX_PTP_TS_2_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x824
RX_PTP_TS_2_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x828
TX_PTP_TS_2_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x82C
TX_PTP_TS_2_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x830
RX_PTP_TS_3_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x834
RX_PTP_TS_3_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x838
TX_PTP_TS_3_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x83C
TX_PTP_TS_3_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x840
RX_PTP_TS_4_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x844
RX_PTP_TS_4_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x848
TX_PTP_TS_4_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x84C
TX_PTP_TS_4_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x850
RX_PTP_TS_5_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x854
RX_PTP_TS_5_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x858
TX_PTP_TS_5_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x85C
TX_PTP_TS_5_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x860
RX_PTP_TS_6_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x864
RX_PTP_TS_6_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x868
TX_PTP_TS_6_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x86C
TX_PTP_TS_6_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x860
RX_PTP_TS_6_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x870
RX_PTP_TS_7_S
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x874
RX_PTP_TS_7_NS
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x878
TX_PTP_TS_7_S
发送的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)
0x87C
TX_PTP_TS_7_NS
发送的1588事件包的时间戳(纳秒域)(1位表示1纳秒)
0x880
TX_PTP_TS_UPDT
TX_PTP_TS 更新状态握手寄存器
0x884
RTC_SH
RTC 秒域的高32位
0x888
RTC_SL
RTC 秒域的低32位
0x88C
RTC_NS
RTC 纳秒域
0x890
RTC_INC
RTC 累加步长值寄存器
0x894
RTC_OFFSET_SH
秒域调整偏移量(高16位和符号位)
0x898
RTC_OFFSET_SL
秒域调整偏移量低32位(1位=1秒)
0x89C
RTC_OFFSET_NS
纳秒域调整偏移量(1位=1纳秒)
0x8A0
RTC_CTRL
RTC 控制寄存器
0x8A4
PPS_RTC_OFFSET_OBS
用于检查 PPS 同步计算出的 RTC 偏移值和符号位的观测寄存器
0x8A8
PTP_EN
PTP 功能使能寄存器
0x8AC
PPS_OUT
PPS_OUT 控制寄存器
0x8B0
PPS_IN
PPS_IN 同步控制寄存器
RX_PTP_TS_0_S
地址偏移: 0x800
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_PTP_TS_SECOND |
31:0 |
只读 |
0 |
接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒) |
RX_PTP_TS_0_NS
地址偏移: 0x804
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RX_PTP_TS_NS |
31:0 |
只读 |
0 |
接收的1588事件包的时间戳(纳秒域)(1位表示1纳秒) |
注:RX_PTP_TS_1_S 至 TX_PTP_TS_7_NS 的寄存器格式与上述 RX_PTP_TS_0_S 和 RX_PTP_TS_0_NS 类似,只是对应不同的事件包ID。为简洁起见,此处省略重复的表格条目。
TX_PTP_TS_UPDT
地址偏移: 0x880
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
TX_PTP_TS_UPDT |
7:0 |
读/写 |
0 |
位0对应 tx_pkt_id 0,位1对应 tx_pkt_id 1,依此类推。硬件在生成相应的 TX_PTP_TS_N 时,会将对应的位 N 设置为1。软件在读出相应的 TX_PTP_TS_N 后,需要将对应的位 N 清零。 |
保留 |
31:8 |
/ |
0 |
保留 |
RTC_SH
地址偏移: 0x884
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_SEND_HI |
15:0 |
只读 |
0 |
RTC 秒域的高16位(总秒数的高16位) |
保留 |
31:16 |
/ |
0 |
保留 |
RTC_SL
地址偏移: 0x888
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_SEND_LO |
31:0 |
只读 |
0 |
RTC 秒域的低32位(总秒数的低32位) |
RTC_NS
地址偏移: 0x88C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_NS |
31:0 |
只读 |
0 |
RTC 纳秒域的值 |
RTC_INC
地址偏移: 0x890
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_INC_DELTA |
25:0 |
读/写 |
0 |
位 [25:20] 1位=1纳秒,位 [19:0] 1位 = 1/(2^20) 纳秒。用于每个 ptp_ref_clk 周期累加到 RTC 的步长。 |
保留 |
31:26 |
/ |
0 |
保留 |
RTC_OFFSET_SH
地址偏移: 0x894
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_OFFSET_SECOND_HI |
16:0 |
读/写 |
0 |
位[16]: 0表示正偏移,需要加偏移量;1表示负偏移,需要减偏移量。位[15:0]: 秒域高16位的调整偏移量。 |
保留 |
31:17 |
/ |
0 |
保留 |
RTC_OFFSET_SL
地址偏移: 0x898
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_OFFSET_SECOND_LOW |
31:0 |
读/写 |
0 |
秒域低32位的调整偏移量,1位=1秒 |
RTC_OFFSET_NS
地址偏移: 0x89C
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_OFFSET_NS |
31:0 |
读/写 |
0 |
纳秒域的调整偏移量,1位=1纳秒 |
RTC_CTRL
地址偏移: 0x8A0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
RTC_OFFSET_LOAD |
0 |
写1清0 |
0 |
写1加载偏移取消(执行加/减偏移操作),硬件将自动清零。 |
RTC_RESET |
1 |
写1清0 |
0 |
写1复位 RTC 到全0,硬件将自动清零 |
RTC_PRELOAD |
2 |
写1清0 |
0 |
写1在初始化时将 RTC_OFFSET 寄存器中的值预加载到 RTC。 |
保留 |
31:3 |
/ |
0 |
保留 |
PPS_RTC_OFFSET_OBS
地址偏移: 0x8A4
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
PPS_RTC_OFFSET |
29:0 |
只读 |
0 |
观测寄存器,用于检查 PPS 同步计算出的 RTC 偏移值。 |
保留 |
30 |
/ |
0 |
保留 |
PPS_RTC_OFFSET_SIGN |
31 |
只读 |
0 |
观测寄存器,用于检查 PPS 同步计算出的 RTC 偏移符号位。 |
PTP_EN
地址偏移: 0x8A8
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
PTP_EN |
0 |
读/写 |
0 |
|
保留 |
31:1 |
/ |
0 |
保留 |
PPS_OUT
地址偏移: 0x8AC
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
PPS_IN_OUT_PULSE_CTRL |
2:0 |
读/写 |
0 |
|
PPS_OUT_MODE |
4:3 |
读/写 |
0 |
|
保留 |
31:5 |
/ |
0 |
保留 |
PPS_IN
地址偏移: 0x8B0
字段 |
位 |
访问类型 |
复位值 |
描述 |
|---|---|---|---|---|
PPSIN_LATENCY |
27:0 |
读/写 |
0 |
从外部设备的 PPS_OUT 到 XEC PPS_IN 的路径延迟,包括外部设备的 PPS_OUT 引脚延迟、设备内部延迟、XEC 的 PPS_IN 引脚输入延迟。1位表示1纳秒,此值应由系统设计者计算。 |
KP_COEF |
30:28 |
读/写 |
0 |
|
PPSIN_SYNC_EN |
31 |
读/写 |
0 |
|