以太网 (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 架构

GMAC arch

图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。

表 5.1: LPI 的传输操作码

XMII

gmii_txen pad

gmii_txer pad

gmii_txd pad

GMII 1000M

1'b0

1'b1

8'h01

RGMII 1000M

R(0) F(1)

NC

R(4’h1) F(4’h0)

MII

1'b0

1'b1

4'h1

RGMII 100/10M

R(0) F(1)

NC

R(4’h1) F(4’h1)

RMII

1'b0

NC

2'b0, 2'b0, 2'b0, 2'b01

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 个环。每个环的结构如下:

GMAC dma arch

图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 元素如下所示:

表 5.2: RFD 元素描述

word 位序

位

描述

0

31:0

主机内存中接收缓冲区低 32 位地址

1

63:32

主机内存中接收缓冲区高 32 位地址

如果是 32 位系统,驱动程序只需将RFD中的高32位地址配置为全零即可

接收返回描述环

接收返回描述环 (RRD) 表示接收到的数据包的摘要信息。它由 GMAC 生成并 由驱动程序使用。该环必须占用连续的内存空间,且不跨越 32 位字节地址边界。 驱动程序可以先检查 RRD,然后再检查接收到的数据包。每个 RRD 元素为 8 字节,因此 RRD 环的基地址应为 8 字节对齐(最低 3 位应为 0)。

RRD 元素如下所示:

表 5.3: 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

  • 1'b0: 以太网 II 数据包;

  • 1'b1: 802.3数据包

22

BROAD

接收到了广播地址数据包

23

MULTI

接收到了组播地址数据包

25:24

MAC_LAYER_ERR_FLAG

  • 00: 无错误

  • 2'b01: 检测XMII接口中的接收错误

  • 2'b10: 10/100M, 接收数据未按字节对齐错误

  • 2'b11: CRC 错误

26

IP_CHKSUM_ERR

IP 校验和错误, 1 表示有该错误

27

L4_CHKSUM_ERR

TCP or UDP or ICMP 校验和错误, 1 表示有该错误

31:28

PKT TYPE

  • 4'b0001: 仅 IPV4

  • 4'b0010: IPV4 和 TCP

  • 4'b0011: IPV4 和 UDP

  • 4'b0100: 仅 IPV6

  • 4'b0101: IPV6 和 TCP

  • 4'b0110: IPV6 和 UDP

  • 4'b0111: LLDP

  • 4'b1000: 1588 事件消息

  • 4'b1001: 1588 通用消息

  • 4'b1010: IPV4 和 ICMP

  • 4'b1011: IPV6 和 ICMP

  • 4'b0000: 不属于以上任何类型

1

15:0

VLAN_TAG

CVLAN 的 802.1Q VLAN 标签

29:16

PKT_SIZE

接收数据包的大小(单位:字节)

30

SVLAN_DET

检测到 TPID 88a8 SVLAN

31

UPDT

  • 当设置为 1 时,表示该描述符由 XEC 硬件更新

  • 当清零时,表示该描述符无效

  • 驱动程序在读取 RRD 时可将此位设为0,硬件在写入RRD时将此位设为 1。通过这种方式,可确保驱动程序的读取操作永远不会领先于硬件的写入操作

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 定义。

表 5.4: TPD 元素描述

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 示意图所示。

../../_images/eth_tpd.png

图 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。

PPS 输入/输出示意图

图 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。

表 5.5: PAD 映射到 XMII

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_gtxc PAD 向 PHY 输出 txclk。

  • 对于 MII 接口,当工作在 100M/10M 时,PHY应通过 xmii_txc PAD 向 MAC 输出 txclk。

  • 对于 RGMII 接口,当工作在 1000M/100M/10M 时,MAC始终通过``xmii_gtxc``PAD向 PHY 输出 txclk。

  • 对于 RMII 模式,如果 MAC 工作在 RMII 主模式,MAC应通过 xmii_gtxc PAD向 PHY 输出 REF_CLK;如果 MAC 工作在 RMII 从模式,PHY 应通过 gmii_rxc PAD 向 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

表 7.2 MAC_CTRL_REG 寄存器格式

字段

位

访问类型

复位值

描述

TXEN

0

读/写

0

MAC 发送使能
  • 1’b0: 禁用

  • 1’b1: 使能

RXEN

1

读/写

0

MAC 接收使能
  • 1’b0: 禁用

  • 1’b1: 使能

TXFC

2

读/写

1

发送流控制使能
  • 1’b0: 禁用

  • 1’b1: 使能

RXFC

3

读/写

1

接收流控制使能
  • 1’b0: 禁用

  • 1’b1: 使能

MAC_LP_EN

4

读/写

0

MAC 内部环回
  • 1’b0: 禁用

  • 1’b1: 使能

FULL_DUPLEX

5

读/写

1

MAC 全双工/半双工工作模式
  • 1’b0: 半双工模式

  • 1’b1: 全双工模式

CRCE

6

读/写

1

发送 CRC 使能
  • 1’b0: MAC 不会为发送的数据包附加 CRC。

  • 1’b1: 指示 MAC 为发送的数据包附加 CRC。

注意:如果数据包小于 64 字节,MAC 将始终启用填充(pad)功能。

FLCHK

7

读/写

1

长度检查使能
  • 1’b0: MAC 不会检查接收数据包的长度字段是否与实际包长匹配。

  • 1’b1: MAC 会检查接收数据包的长度字段是否与实际包长匹配。

PRLEN

11:8

读/写

7

前导码长度,标准值为 0x07

保留

12

/

0x0

/

VLAN_STRIP

13

读/写

1

是否自动为接收的数据包移除VLAN标签
  • 1’b0: 否

  • 1’b1: 是

PROM_MODE

14

读/写

0

混杂模式使能
  • 1’b0: 禁用

  • 1’b1: 使能

TX_IP_SUM_EN

15

读/写

1

当TX_PARSER_EN使能时,由硬件卸载IP校验和
  • 1’b0: 禁用

  • 1’b1: 使能

TX_TCP_ICMP_SUM_EN

16

读/写

1

当TX_PARSER_EN使能时,由硬件卸载TCP和ICMP校验和
  • 1’b0: 禁用

  • 1’b1: 使能

TX_UDP_SUM_EN

17

读/写

1

当 TX_PARSER_EN 使能时,由硬件卸载 UDP 校验和
  • 1’b0: 禁用

  • 1’b1: 使能

SPEED

19:18

读/写

1

MAC 速度选择
  • 2’b10: 1000M

  • 2’b01: 100M

  • 2’b00: 10M

MII_MODE

21:20

读/写

0

MAC-PHY 接口模式
  • 2’b00: GMII

  • 2’b01: RGMII

  • 2’b10: MII

  • 2’b11: RMII

TX_PARSER_EN

22

读/写

0

是否进行发送数据包解析
  • 1’b0: 否

  • 1’b1: 是

RX_CHKSUM_EN

23

读/写

1

接收校验和使能
  • 1’b0: 禁用

  • 1’b1: 使能

MULTI_ALL

24

读/写

1

所有多播目的地址均为合法。
  • 1’b0: 否

  • 1’b1: 是

RX_HASH_EN

25

读/写

0

命中了哈希表的多播目的地址为合法
  • 1’b0: 否

  • 1’b1: 是

BROAD_EN

26

读/写

1

无错误地将所有广播帧上传至系统
  • 1’b0: 否

  • 1’b1: 是

DEBUG_MODE

27

读/写

0

将所有接收到的帧上传至系统
  • 1’b0: 否

  • 1’b1: 是

SYS_CLK_IS_125

28

读/写

0

指示系统时钟(sys_clk)是否为 125MHz
  • 1’b0: 否

  • 1’b1: 是

SYS_CLK_IS_25

29

读/写

1

指示系统时钟(sys_clk)是否为 25MHz
  • 1’b0: 否

  • 1’b1: 是

RMII_MODE

30

读/写

1

选择 RMII 工作模式
  • 1’b0: RMII 从模式:PHY 将通过 gmii_rxc 引脚向 MAC 提供 rmii_clk 参考时钟。

  • 1’b1: RMII 主模式:MAC 将通过 gmii_txc 引脚向 PHY 提供 rmii_clk 参考时钟。

注意:此位仅在 RMII 模式下有意义。

MAGIC_FRAME_EN

31

读/写

0

魔术帧检测功能
  • 1’b0: 禁用

  • 1’b1: 使能

MAC_IPG_REG

地址偏移: 0x4

表 7.3 MAC_IPG_REG 寄存器格式

字段

位

访问类型

复位值

描述

TX_IPG

6:0

读/写

96

最小背靠背发送包间隔

保留

7

/

0

保留

RX_IPG

15:8

读/写

8

对背靠背接收帧的最小间隔要求。间隔低于此值的帧将被视为非法。

保留

16

/

0

保留

RGMII_100M_RX_NEG_SEL

17

读/写

0

为 rgmii_100m 模式选择在正沿或负沿采样接收数据
  • 1’b0: 在 XMII 接口使用延迟的 rxclk 采样 rxdata

  • 1’b1: 在 XMII 接口使用 rxclk 的负沿采样 rxdata

RGMII_100M_TX_NEG_SEL

18

读/写

0

为 rgmii_100m 模式选择在正沿或负沿输出发送数据
  • 1’b0: 在 XMII 接口使用 txclk 的正沿输出 txdata

  • 1’b1: 在 XMII 接口使用 txclk 的负沿输出 txdata

RMII_RX_NEG_SEL

19

读/写

0

为 rmii 模式选择在正沿或负沿采样接收数据
  • 1’b0: 在 XMII 接口使用 rxclk 的正沿采样 rxdata

  • 1’b1: 在 XMII 接口使用 rxclk 的负沿采样 rxdata

RMII_TX_NEG_SEL

20

读/写

0x1

为 rmii 模式选择在正沿或负沿输出发送数据
  • 1’b0: 对于 RMII 主模式,在 txclk 的正沿输出 txdata;对于 RMII 从模式,在 txclk 的负沿输出 txdata;

  • 1’b1: 对于 RMII 主模式,在 txclk 的负沿输出 txdata;对于 RMII 从模式,在 txclk 的正沿输出 txdata;

MII_RX_NEG_SEL

21

读/写

0

为 mii/gmii 模式选择在正沿或负沿采样接收数据
  • 1’b0: 在 XMII 接口使用 rxclk 的正沿采样 rxdata

  • 1’b1: 在 XMII 接口使用 rxclk 的负沿采样 rxdata

MII_TX_NEG_SEL

22

读/写

0x1

为 mii/gmii 模式选择在正沿或负沿输出发送数据
  • 1’b0: 在 XMII 接口使用 txclk 的正沿输出 txdata

  • 1’b1: 在 XMII 接口使用 txclk 的负沿输出 txdata

保留

31:23

读/写

0

保留

MAC_HALF_CTRL_REG

地址偏移: 0x8

表 7.4 MAC_HALF_CTRL_REG 寄存器格式

字段

位

访问类型

复位值

描述

RETRY_NUM

3:0

读/写

10

发生冲突时的最大重试次数

BACKOFF_EN

4

读/写

1

退避使能
  • 1’b0: 冲突后不退避

  • 1’b1: 冲突后会有退避等待

保留

31:5

读/写

0

保留

MAC_MTU_REG

地址偏移: 0xC

表 7.5 MAC_MTU_REG 寄存器格式

字段

位

访问类型

复位值

描述

MTU

15:0

读/写

1536

最大帧大小

保留

31:16

/

0

保留

MAC_STAD_LO_REG

地址偏移: 0x10

表 7.6 MAC_STAD_LO_REG 寄存器格式

字段

位

访问类型

复位值

描述

STAD_LO

31:0

读/写

0

MAC 的单播站地址(低32位)

MAC_STAD_HI_REG

地址偏移: 0x14

表 7.7 MAC_STAD_HI_REG 寄存器格式

字段

位

访问类型

复位值

描述

STAD_HI

15:0

读/写

0

MAC 的单播站地址(高16位)

保留

31:16

/

0

保留

MAC_LPI_REG

地址偏移: 0x18

表 7.8 MAC_LPI_REG 寄存器格式

字段

位

访问类型

复位值

描述

LPI_ENTER_CNT

15:0

读/写

21

进入 LPI 模式前等待的空闲时间,每一步表示 2us

LPI_WT

23:16

读/写

21

退出 LPI 模式前的等待时间,每一步表示 2us

RX_IN_LPI

24

只读

0

RX 处于 LPI 状态
  • 1’b0: 否

  • 1’b1: 是

TX_IN_LPI

25

只读

0

TX 处于 LPI 状态
  • 1’b0: 否

  • 1’b1: 是

保留

30:26

/

0

保留

LPI_EN

31

读/写

0

使能 802.3AZ 功能
  • 1’b0: 禁用

  • 1’b1: 使能

RX_HASH_TABLE1_REG

地址偏移: 0x1C

表 7.9 RX_HASH_TABLE1_REG 寄存器格式

字段

位

访问类型

复位值

描述

RX_HASH_TABLE_LO

31:0

读/写

21

接收哈希表(低32位)

RX_HASH_TABLE2_REG

地址偏移: 0x20

表 7.10 RX_HASH_TABLE2_REG 寄存器格式

字段

位

访问类型

复位值

描述

RX_HASH_TABLE_HI

31:0

读/写

21

接收哈希表(高32位)

SRAM_CTRL_REG_1

地址偏移: 0x24

表 7.11 SRAM_CTRL_REG_1 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.12 SRAM_CTRL_REG_2 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.13 SRAM_CTRL_REG_3 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.14 SRAM_CTRL_REG_4 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.15 SRAM_CTRL_REG_5 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.16 SRAM_CTRL_REG_6 寄存器格式

字段

位

访问类型

复位值

描述

LOAD_PTR

0

读/写

0

当 SRAM 配置改变时,软件设置此位以复位 SRAM 指针,它将在下一个周期自动清零

保留

31:1

/

0

保留

DESCRIPTOR_CTRL_REG_2

地址偏移: 0x40

表 7.17 DESCRIPTOR_CTRL_REG_2 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.18 DESCRIPTOR_CTRL_REG_3 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.19 DESCRIPTOR_CTRL_REG_4 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.20 DESCRIPTOR_CTRL_REG_5 寄存器格式

字段

位

访问类型

复位值

描述

保留

15:0

/

0

保留

TPD_RING_SIZE

31:16

读/写

0x800

TPD 环中的描述符数量

DESCRIPTOR_CTRL_REG_7

地址偏移: 0x54

表 7.21 DESCRIPTOR_CTRL_REG_7 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.22 CMB_BASE_ADDR_LO 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.23 DMA_BURST_CTRL_1 寄存器格式

字段

位

访问类型

复位值

描述

NUM_TPD_BURST_PREF

2:0

读/写

5

单个 DMA 请求中预取的 TPD 描述符数量。最大配置值为 5

保留

31:3

/

0

保留

DMA_BURST_CTRL_2

地址偏移: 0x64

表 7.24 DMA_BURST_CTRL_2 寄存器格式

字段

位

访问类型

复位值

描述

NUM_RFD_BURST_PREF

3:0

读/写

8

单个 DMA 请求中预取的 RFD 描述符数量,最大配置值为8

保留

6:4

/

0

保留

CUT_THRU_EN

7

读/写

0

允许在包结束前将包数据更新到主机内存(直通模式)
  • 1’b0: 包将存储在 SRAM 中直到包结束(EOP)

  • 1’b1: 当包超过1536字节或超过 rx_buffer_size 时,允许在 EOP 之前更新包。

注意:如果支持巨型包(jumbo packet),此位必须设置为1。

保留

31:8

/

0

保留

FC_WATERMARK_REG

地址偏移: 0x68

表 7.25 FC_WATERMARK_REG 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.26 CMB_CTR_REG 寄存器格式

字段

位

访问类型

复位值

描述

CMB_THRESHOLD

15:0

读/写

256

当已使用的 TPD 超过此阈值时,触发 CMB 请求

CMB_TIMER

30:16

读/写

0x7fff

触发 CMB 请求的倒计时定时器,0表示禁用此功能,单位为2us

CMB_EN

31

读/写

0

使能或禁用 CMB 功能
  • 1’b0: 禁用

  • 1’b1: 使能

MAILBOX_REG_1

地址偏移: 0x70

表 7.27 MAILBOX_REG_1 寄存器格式

字段

位

访问类型

复位值

描述

RFD_PROD_IDX

11:0

读/写

0

RFD 生产者索引

保留

14:12

/

0

保留

RFD_CONS_IDX

26:15

只读

0

RFD 消费者索引

保留

31:27

/

0

保留

MAILBOX_REG_2

地址偏移: 0x74

表 7.28 MAILBOX_REG_2 寄存器格式

字段

位

访问类型

复位值

描述

TPD_PROD_IDX

15:0

读/写

0

TPD 生产者索引

TPD_CONS_IDX

31:16

只读

0

TPD 消费者索引

INT_STA_REG

地址偏移: 0x78

表 7.29 INT_STA_REG 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.30 INT_MSK_REG 寄存器格式

字段

位

访问类型

复位值

描述

INT_MASK

12:0

读/写

0

设置为1以屏蔽相应的中断。位0屏蔽 int_status 位0,依此类推。1表示屏蔽中断,0表示中断有效

保留

30:13

/

0

保留

DIS_INT

31

读/写

0

禁用所有中断
  • 1’b0: 允许中断

  • 1’b1: 禁用中断

INTR_TIMER2_REG

地址偏移: 0x80

表 7.31 INTR_TIMER2_REG 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.32 MAC_RX_OK 寄存器格式

字段

位

访问类型

复位值

描述

RX_OK

23:0

读后清0

0

接收的正确报文数量。正确意味着无 MAC 层错误。读出时清零

保留

31:24

/

0

保留

MAC_RX_BCAST

地址偏移: 0x88

表 7.33 MAC_RX_BCAST 寄存器格式

字段

位

访问类型

复位值

描述

RX_BCAST

23:0

读后清0

0

接收的正确广播报文数量。正确意味着无 MAC 层错误。读出时清零。

保留

31:24

/

0

保留

MAC_RX_MCAST

地址偏移: 0x8C

表 7.34 MAC_RX_MCAST 寄存器格式

字段

位

访问类型

复位值

描述

RX_MCAST

23:0

读后清0

0

接收的正确组播报文(不包括暂停帧)数量。正确意味着无 MAC 层错误。读出时清零。

保留

31:24

/

0

保留

MAC_RX_PAUSE

地址偏移: 0x90

表 7.35 MAC_RX_PAUSE 寄存器格式

字段

位

访问类型

复位值

描述

RX_PAUSE

23:0

读后清0

0

接收的暂停报文数量

保留

31:24

/

0

保留

MAC_RX_LLDP

地址偏移: 0x94

表 7.36 MAC_RX_LLDP 寄存器格式

字段

位

访问类型

复位值

描述

RX_LLDP

23:0

读后清0

0

接收的 LLDP 报文数量。

保留

31:24

/

0

保留

MAC_RX_FCS_ERR

地址偏移: 0x98

表 7.37 MAC_RX_FCS_ERR 寄存器格式

字段

位

访问类型

复位值

描述

RX_FCS_ERR

23:0

读后清0

0

接收的 FCS 错误报文数量

保留

31:24

/

0

保留

MAC_RX_LEN_ERR

地址偏移: 0x9C

表 7.38 MAC_RX_LEN_ERR 寄存器格式

字段

位

访问类型

复位值

描述

RX_LEN_ERR

23:0

读后清0

0

接收的长度字段(46~1500)与实际大小不匹配的报文数量。

保留

31:24

/

0

保留

MAC_RX_BYTE_CNT

地址偏移: 0xA0

表 7.39 MAC_RX_BYTE_CNT 寄存器格式

字段

位

访问类型

复位值

描述

RX_BYTE_CNT

31:0

读后清0

0

接收的正确报文的字节总数。读出时清零。

MAC_RX_RUNT

地址偏移: 0xA4

表 7.40 MAC_RX_RUNT 寄存器格式

字段

位

访问类型

复位值

描述

RX_RUNT

23:0

读后清0

0

接收的小于 64 字节且 FCS 正确的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_RX_FRAGMENT

地址偏移: 0xA8

表 7.41 MAC_RX_FRAGMENT 寄存器格式

字段

位

访问类型

复位值

描述

RX_FRAGMENT

23:0

读后清0

0

接收的小于 64 字节且 FCS 错误的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_RX_SIZE_64

地址偏移: 0xAC

表 7.42 MAC_RX_SIZE_64 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_64B

23:0

读后清0

0

接收的64字节长的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_SIZE_65TO127

地址偏移: 0xB0

表 7.43 MAC_RX_SIZE_65TO127 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_65TO127B

23:0

读后清0

0

接收的长度在 65 到 127 字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_SIZE_128TO255

地址偏移: 0xB4

表 7.44 MAC_RX_SIZE_128TO255 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_128TO255B

23:0

读后清0

0

接收的长度在128到255字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_SIZE_256TO511

地址偏移: 0xB8

表 7.45 MAC_RX_SIZE_256TO511 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_256TO511B

23:0

读后清0

0

接收的长度在256到511字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_SIZE_512TO1023

地址偏移: 0xBC

表 7.46 MAC_RX_SIZE_512TO1023 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_512TO1023B

23:0

读后清0

0

接收的长度在512到1023字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_SIZE_1024TO1518

地址偏移: 0xC0

表 7.47 MAC_RX_SIZE_1024TO1518 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_1024TO1518B

23:0

读后清0

0

接收的长度在1024到1518字节之间的报文数量(包括好包和坏包)。读出时清零

保留

31:24

/

0

保留

MAC_RX_SIZE_1519TOMAX

地址偏移: 0xC4

表 7.48 MAC_RX_SIZE_1519TOMAX 寄存器格式

字段

位

访问类型

复位值

描述

RX_SIZE_1519TOMAX

23:0

读后清0

0

接收的长度在1519字节到 MTU 之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_OVERSIZE

地址偏移: 0xC8

表 7.49 MAC_RX_OVERSIZE 寄存器格式

字段

位

访问类型

复位值

描述

RX_OVERSIZE

23:0

读后清0

0

接收的大于 MTU 大小的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_RX_OVERFLOW

地址偏移: 0xCC

表 7.50 MAC_RX_OVERFLOW 寄存器格式

字段

位

访问类型

复位值

描述

RX_OVERFLOW

15:0

读后清0

0

因 RX FIFO 溢出而丢弃的帧数量。读出时清零。

保留

31:16

/

0

保留

MAC_RX_NIBBLE_ERR

地址偏移: 0xD0

表 7.51 MAC_RX_NIBBLE_ERR 寄存器格式

字段

位

访问类型

复位值

描述

RX_NIBBLE_ERR

23:0

读后清0

0

接收的半字节错误报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_RX_BCAST_BYTE_CNT

地址偏移: 0xD4

表 7.52 MAC_RX_BCAST_BYTE_CNT 寄存器格式

字段

位

访问类型

复位值

描述

RX_BCAST_BYTE_CNT

31:0

读后清0

0

接收的广播报文字节总数。报文应无 MAC 层错误。读出时清零。

MAC_RX_MCAST_BYTE_CNT

地址偏移: 0xD8

表 7.53 MAC_RX_MCAST_BYTE_CNT 寄存器格式

字段

位

访问类型

复位值

描述

RX_MCAST_BYTE_CNT

31:0

读后清0

0

接收的组播报文(不包括暂停帧)字节总数。报文应无 MAC 层错误。读出时清零。

MAC_RX_ADDR_ERR

地址偏移: 0xDC

表 7.54 MAC_RX_ADDR_ERR 寄存器格式

字段

位

访问类型

复位值

描述

RX_ADDR_ERR

23:0

读后清0

0

目的地址或源地址错误的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_OK

地址偏移: 0xE0

表 7.55 MAC_TX_OK 寄存器格式

字段

位

访问类型

复位值

描述

TX_OK

23:0

读后清0

0

由软件驱动发送的正确报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_BCAST

地址偏移: 0xE4

表 7.56 MAC_TX_BCAST 寄存器格式

字段

位

访问类型

复位值

描述

TX_BCAST

23:0

读后清0

0

发送的正确广播报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_MCAST

地址偏移: 0xE8

表 7.57 MAC_TX_MCAST 寄存器格式

字段

位

访问类型

复位值

描述

TX_MCAST

23:0

读后清0

0

发送的正确组播报文(不包括暂停帧)数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_PAUSE

地址偏移: 0xEC

表 7.58 MAC_TX_PAUSE 寄存器格式

字段

位

访问类型

复位值

描述

TX_PAUSE

23:0

读后清0

0

发送的暂停报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_DEFFER

地址偏移: 0xF0

表 7.59 MAC_TX_DEFFER 寄存器格式

字段

位

访问类型

复位值

描述

TX_DEFER

23:0

读后清0

0

发送时因检测到载波而延迟的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_BYTE_CNT

地址偏移: 0xF4

表 7.60 MAC_TX_BYTE_CNT 寄存器格式

字段

位

访问类型

复位值

描述

TX_BYTE_CNT

31:0

读后清0

0

发送的数据字节总数。读出时清零。

MAC_TX_SIZE_64B

地址偏移: 0xF8

表 7.61 MAC_TX_SIZE_64B 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_64B

23:0

读后清0

0

发送的64字节长的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SIZE_65TO127

地址偏移: 0xFC

表 7.62 MAC_TX_SIZE_65TO127 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_65TO127B

23:0

读后清0

0

发送的长度在65到127字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SIZE_128TO255

地址偏移: 0x100

表 7.63 MAC_TX_SIZE_128TO255 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_128TO255B

23:0

读后清0

0

发送的长度在128到255字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SIZE_256TO511

地址偏移: 0x104

表 7.64 MAC_TX_SIZE_256TO511 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_256TO511B

23:0

读后清0

0

发送的长度在256到511字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SIZE_512TO1023

地址偏移: 0x108

表 7.65 MAC_TX_SIZE_512TO1023 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_512TO1023B

23:0

读后清0

0

发送的长度在512到1023字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SIZE_1024TO1518

地址偏移: 0x10C

表 7.66 MAC_TX_SIZE_1024TO1518 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_1024TO1518B

23:0

读后清0

0

发送的长度在1024到1518字节之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SIZE_1519TOMAX

地址偏移: 0x110

表 7.67 MAC_TX_SIZE_1519TOMAX 寄存器格式

字段

位

访问类型

复位值

描述

TX_SIZE_1519TOMAX

23:0

读后清0

0

发送的长度在1519字节到 MTU 之间的报文数量(包括好包和坏包)。读出时清零。

保留

31:24

/

0

保留

MAC_TX_SINGLE_COL

地址偏移: 0x114

表 7.68 MAC_TX_SINGLE_COL 寄存器格式

字段

位

访问类型

复位值

描述

TX_SINGLE_COL

23:0

读后清0

0

单次冲突后成功发送的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_MULT_COL

地址偏移: 0x118

表 7.69 MAC_TX_MULT_COL 寄存器格式

字段

位

访问类型

复位值

描述

TX_MULT_COL

23:0

读后清0

0

多次冲突后成功发送的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_LATE_COL

地址偏移: 0x11C

表 7.70 MAC_TX_LATE_COL 寄存器格式

字段

位

访问类型

复位值

描述

TX_LATE_COL

23:0

读后清0

0

发送时遇到晚期冲突的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_ABORT_COL

地址偏移: 0x120

表 7.71 MAC_TX_ABORT_COL 寄存器格式

字段

位

访问类型

复位值

描述

TX_ABORT_COL

23:0

读后清0

0

因过度冲突而中止发送的报文数量。读出时清零。

保留

31:24

/

0

保留

MAC_TX_UNDERRUN

地址偏移: 0x124

表 7.72 MAC_TX_UNDERRUN 寄存器格式

字段

位

访问类型

复位值

描述

TX_UNDERRUN

15:0

读后清0

0

因发送 FIFO 下溢而中止发送的报文数量。读出时清零。

保留

31:16

/

0

保留

MAC_TX_LENGTH_ERR

地址偏移: 0x128

表 7.73 MAC_TX_LENGTH_ERR 寄存器格式

字段

位

访问类型

复位值

描述

TX_LENGTH_ERR

15:0

读后清0

0

发送的报文中长度字段(46~1500)与实际帧大小不匹配的数量。读出时清零。

保留

31:16

/

0

保留

MAC_TX_TRUNC

地址偏移: 0x12C

表 7.74 MAC_TX_TRUNC 寄存器格式

字段

位

访问类型

复位值

描述

TX_TRUNC

15:0

读后清0

0

发送的大小超过 MTU 的报文数量。读出时清零。

保留

31:16

/

0

保留

MAC_TX_BCAST_BYTE_CNT

地址偏移: 0x130

表 7.75 MAC_TX_BCAST_BYTE_CNT 寄存器格式

字段

位

访问类型

复位值

描述

TX_BCAST_BYTE_CNT

31:0

读后清0

0

发送的广播报文字节总数。读出时清零。

MAC_TX_MCAST_BYTE_CNT

地址偏移: 0x134

表 7.76 MAC_TX_MCAST_BYTE_CNT 寄存器格式

字段

位

访问类型

复位值

描述

TX_MCAST_BYTE_CNT

31:0

读后清0

0

发送的组播报文(不包括暂停帧)字节总数。读出时清零。

MDIO_CTRL_REG_1

地址偏移: 0x138

表 7.77 MDIO_CTRL_REG_1 寄存器格式

字段

位

访问类型

复位值

描述

MDIO_DATA

15:0

读/写

0

在 MDIO 写操作时,要写入 PHY 寄存器的16位控制数据。

MDIO_REG_ADDR

20:16

读/写

0

MDIO 寄存器地址

MDIO_RD_WR

21

读/写

0

选择 MDIO 的写/读模式
  • 1’b0: MDIO 写

  • 1’b1: MDIO 读

保留

22

/

0

保留

MDIO_START

23

读/写

0

写1启动 MDIO 操作。此位在一个周期后自清零

MDIO_CLK_SEL

26:24

读/写

0

MDC 频率选择控制,MDC 频率不应超过 2.5MHz。需要配置分频值使 MDC 频率不超过 2.5MHz。
  • 3’d0: sysclk_div2: 频率 / 2

  • 3’d1: sysclk_div4: 频率 / 4

  • 3’d2: sysclk_div8: 频率 / 8

  • 3’d3: sysclk_div16: 频率 / 16

  • 3’d4: sysclk_div32: 频率 / 32

  • 3’d5: sysclk_div64: 频率 / 64

  • 3’d6: sysclk_div128: 频率 / 128

  • 3’d7: sysclk_div128: 频率 / 128

保留

27

/

0

保留

MDIO_MODE

28

读/写

0

MDIO 模式
  • 1’b0: clause22 模式

  • 1’b1: clause45 模式

MDIO_POST_RD_INC

29

读/写

0x0

后读增量事务请求(用于 clause45)

保留

31:30

读/写

0

保留

MDIO_CTRL_REG_2

地址偏移: 0x13C

表 7.78 MDIO_CTRL_REG_2 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.79 MDIO_STATUS_REG 寄存器格式

字段

位

访问类型

复位值

描述

MDIO_READOUT_DATA

15:0

只读

0

MDIO 读出的数据

MDIO_BUSY

16

只读

0

MDIO 事务正在进行中,MDIO 忙

保留

31:17

/

0

保留

DMA_BURST_REG

地址偏移: 0x144

表 7.80 DMA_BURST_REG 寄存器格式

字段

位

访问类型

复位值

描述

DMAW_BURST

3:0

读/写

15

DMA 写操作的最大突发长度

保留

15:4

/

0

保留

DMAR_BURST

19:16

读/写

15

DMA 读操作的最大突发长度

保留

31:20

/

0

保留

WATCHDOG_REG

地址偏移: 0x148

表 7.81 WATCHDOG_REG 寄存器格式

字段

位

访问类型

复位值

描述

WATCHDOG_TIMER

31:0

读/写

8000

DMA 看门狗定时器值

LOW_POWER_CTRL

地址偏移: 0x14C

表 7.82 LOW_POWER_CTRL 寄存器格式

字段

位

访问类型

复位值

描述

SYSCLK_DYNAMIC_GATE_EN

0

读/写

1

使能动态时钟门控功能
  • 1’b0: 禁用

  • 1’b1: 使能

保留

31:1

/

0

保留

XEC_STATUS

地址偏移: 0x150

表 7.83 XEC_STATUS 寄存器格式

字段

位

访问类型

复位值

描述

XEC_IDLE

0

只读

1

XEC 处于功能空闲状态
  • 1’b0: 否

  • 1’b1: 是

保留

31:1

/

0

保留

DELAY_SEL

地址偏移: 0x154

表 7.84 DELAY_SEL 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.85 SVLAN 寄存器格式

字段

位

访问类型

复位值

描述

svlan_id

15:0

读/写

0x88a8

支持的 SVLAN ID,可配置为 88a8, 9100, 9200, 9300

保留

31:16

/

0

保留

DBG_TEST_REG

地址偏移: 0x15C

表 7.86 DBG_TEST_REG 寄存器格式

字段

位

访问类型

复位值

描述

TPAUSE

0

读/写

0

发送测试暂停帧
  • 1’b0: 否

  • 1’b1: 是

RX_HUGEN

1

读/写

0

允许接收大于 MTU 大小的帧(用于测试)
  • 1’b0: 禁用

  • 1’b1: 使能

TX_HUGEN

2

读/写

0

允许发送大于 MTU 大小的帧(用于测试)
  • 1’b0: 禁用

  • 1’b1: 使能

BACKP_PAT

3

读/写

0

背压模式下的发送数据模式
  • 1’b0: 只发送 55 55

  • 1’b1: 发送 55 d5

保留

31:4

/

0

保留

IP_VERSION

地址偏移: 0x174

表 7.87 IP_VERSION 寄存器格式

字段

位

访问类型

复位值

描述

VERSION_NUM

31:0

只读

0x00010200

XEC 的 IP 版本号

SOFT_RESET

地址偏移: 0x178

表 7.88 SOFT_RESET 寄存器格式

字段

位

访问类型

复位值

描述

SOFT_RST

0

读/写

0

软件写1复位 MAC 逻辑,此位将由硬件自动清零

保留

31:1

/

0

保留

SA_FILTER_CTRL_0

地址偏移: 0x17C

表 7.89 SA_FILTER_CTRL_0 寄存器格式

字段

位

访问类型

复位值

描述

SA_FILTER_EN

31:0

读/写

0

使能相应的源地址(SA)过滤器,位 0 对应 SA_FILTER0,依此类推,1 表示使能

SA_FILTER_CTRL_1

地址偏移: 0x180

表 7.90 SA_FILTER_CTRL_1 寄存器格式

字段

位

访问类型

复位值

描述

SA_FILTER_WHITE_BLACK_SEL

0

读/写

1

选择过滤器作为白名单或黑名单,0 示白名单,1 表示黑名单

保留

31:1

/

0

保留

DA_FILTER_CTRL

地址偏移: 0x184

表 7.91 DA_FILTER_CTRL 寄存器格式

字段

位

访问类型

复位值

描述

DA_FILTER_EN

31:0

读/写

0

使能相应的目的地址(DA)过滤器,位 0 对应 DA_FILTER0,依此类推,1 表示使能

SA_FILTER0_LOW

地址偏移: 0x188

表 7.92 SA_FILTER0_LOW 寄存器格式

字段

位

访问类型

复位值

描述

SA_LOW

31:0

读/写

0

用于白名单或黑名单过滤的源地址(SA)的低 32 位

SA_FILTER0_HIGH_MASK

地址偏移: 0x18C

表 7.93 SA_FILTER0_HIGH_MASK 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.156 DA_FILTER0_LOW 寄存器格式

字段

位

访问类型

复位值

描述

DA_LOW

31:0

读/写

0

目的地址过滤器0 的低 32 位

DA_FILTER0_HIGH_MASK

地址偏移: 0x28C

表 7.157 DA_FILTER0_HIGH_MASK 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.221 RX_PTP_TS_0_S 寄存器格式

字段

位

访问类型

复位值

描述

RX_PTP_TS_SECOND

31:0

只读

0

接收的1588事件包的时间戳(秒域),秒的低32位(1位表示1秒)

RX_PTP_TS_0_NS

地址偏移: 0x804

表 7.222 RX_PTP_TS_0_NS 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.253 TX_PTP_TS_UPDT 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.254 RTC_SH 寄存器格式

字段

位

访问类型

复位值

描述

RTC_SEND_HI

15:0

只读

0

RTC 秒域的高16位(总秒数的高16位)

保留

31:16

/

0

保留

RTC_SL

地址偏移: 0x888

表 7.255 RTC_SL 寄存器格式

字段

位

访问类型

复位值

描述

RTC_SEND_LO

31:0

只读

0

RTC 秒域的低32位(总秒数的低32位)

RTC_NS

地址偏移: 0x88C

表 7.256 RTC_NS 寄存器格式

字段

位

访问类型

复位值

描述

RTC_NS

31:0

只读

0

RTC 纳秒域的值

RTC_INC

地址偏移: 0x890

表 7.257 RTC_INC 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.258 RTC_OFFSET_SH 寄存器格式

字段

位

访问类型

复位值

描述

RTC_OFFSET_SECOND_HI

16:0

读/写

0

位[16]: 0表示正偏移,需要加偏移量;1表示负偏移,需要减偏移量。位[15:0]: 秒域高16位的调整偏移量。

保留

31:17

/

0

保留

RTC_OFFSET_SL

地址偏移: 0x898

表 7.259 RTC_OFFSET_SL 寄存器格式

字段

位

访问类型

复位值

描述

RTC_OFFSET_SECOND_LOW

31:0

读/写

0

秒域低32位的调整偏移量,1位=1秒

RTC_OFFSET_NS

地址偏移: 0x89C

表 7.260 RTC_OFFSET_NS 寄存器格式

字段

位

访问类型

复位值

描述

RTC_OFFSET_NS

31:0

读/写

0

纳秒域的调整偏移量,1位=1纳秒

RTC_CTRL

地址偏移: 0x8A0

表 7.261 RTC_CTRL 寄存器格式

字段

位

访问类型

复位值

描述

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

表 7.262 PPS_RTC_OFFSET_OBS 寄存器格式

字段

位

访问类型

复位值

描述

PPS_RTC_OFFSET

29:0

只读

0

观测寄存器,用于检查 PPS 同步计算出的 RTC 偏移值。

保留

30

/

0

保留

PPS_RTC_OFFSET_SIGN

31

只读

0

观测寄存器,用于检查 PPS 同步计算出的 RTC 偏移符号位。

PTP_EN

地址偏移: 0x8A8

表 7.263 PTP_EN 寄存器格式

字段

位

访问类型

复位值

描述

PTP_EN

0

读/写

0

使能 PTP 功能
  • 1’b0: 禁用

  • 1’b1: 使能

保留

31:1

/

0

保留

PPS_OUT

地址偏移: 0x8AC

表 7.264 PPS_OUT 寄存器格式

字段

位

访问类型

复位值

描述

PPS_IN_OUT_PULSE_CTRL

2:0

读/写

0

方波输出频率
  • 3’d0: 输出1Hz方波,高脉冲0.5秒,低脉冲0.5秒

  • 3’d1: 输出方波,高脉冲1秒,低脉冲1秒

  • 3’d2: 输出方波,高脉冲2秒,低脉冲2秒

  • 3’d3: 输出方波,高脉冲4秒,低脉冲4秒

  • 3’d4: 输出方波,高脉冲8秒,低脉冲8秒

  • 3’d5: 输出方波,高脉冲16秒,低脉冲16秒

PPS_OUT_MODE

4:3

读/写

0

PPS 输出模式
  • 2’b00: 在 pps_out 引脚输出静态0

  • 2’b01: 在 pps_out 引脚输出静态1

  • 2’b10: 输出由 PPS_OUT_PULSE_CTRL 寄存器定义的方波

保留

31:5

/

0

保留

PPS_IN

地址偏移: 0x8B0

表 7.265 PPS_IN 寄存器格式

字段

位

访问类型

复位值

描述

PPSIN_LATENCY

27:0

读/写

0

从外部设备的 PPS_OUT 到 XEC PPS_IN 的路径延迟,包括外部设备的 PPS_OUT 引脚延迟、设备内部延迟、XEC 的 PPS_IN 引脚输入延迟。1位表示1纳秒,此值应由系统设计者计算。

KP_COEF

30:28

读/写

0

计算误差反馈值时的比例系数
  • 1: 0.875

  • 2: 0.75

  • 3: 0.625

  • 4: 0.5

  • 5: 0.375

  • 6: 0.25

  • 7: 0.125

PPSIN_SYNC_EN

31

读/写

0

使能本地 RTC 与 pps_in 同步
  • 1’b0: 否

  • 1’b1: 是