跳转至

网络接口

ETH

概述

以太网模块提供了1个Ethernet MAC,实现网络接口数据的接收和发送,可以工作在10Mbit/s或100Mbit/s模式下,支持全双工或者半双工工作模式,提供MII,提供可配置的8组DMAC地址过滤表,可以对网口的输入帧进行选择性过滤接收,同时实现了对CPU端口流量限制功能,保护CPU不被大流量攻击。

功能描述

Ethernet模块有如下功能特点:

  • 提供1个Ethernet MAC。
  • 支持10Mbit/s或100Mbit/s速率。
  • 可工作在全双工或半双工模式。
  • 对内置PHY提供MII接口。
  • 支持半双工模式下的碰撞回退重传和late collision。
  • 支持全双工模式下的流控帧的发送。
  • 支持帧长有效性检测,丢弃超长帧和超短帧。
  • 支持对输入帧进行CRC校验,可丢弃校验错的帧。
  • 支持对输出帧添加CRC校验。
  • 支持短帧填充功能。
  • 提供自适应功能。
  • 提供MDIO接口,MDIO接口时钟频率可调整。
  • 提供64个接收和发送共用的帧管理队列。
  • 提供流量限制功能,防止针对CPU的流量攻击。
  • 支持对接收和发送帧进行统计计数。
  • 支持8个可配置的DMAC地址过滤表。
  • 对广播帧、组播帧和单播帧支持可配置是否转发或者丢弃。
  • 支持SG(Scatter Gather) 分散聚合功能。
  • 接收、发送方向都支持COE(Checksum Offload Engine)校验和卸载引擎功能。
  • 支持TSO(TCP Segmentation Offload)TCP分段卸载功能。
  • 支持UFO(UDP Fragmentation Offload)UDP分段卸载功能。

Ethernet模块逻辑框图如图1所示。

图 1 Ethernet模块逻辑框图

工作方式

收帧过程

初始化时软件需要完成以下操作:

  • 软件需要申请与配置的输入队列深度个数相同的缓冲区,每个缓冲区的大小为2KB,然后将缓冲区首地址依次写入到帧输入队列中,写入的次数应刚好等于配置的输入队列的深度。
  • 软件需要保证配置的缓冲区在收帧时不能释放。如果配置的首地址为非word对齐地址时,需确保该地址对应的字节地址为可写地址。

当CPU获知有1帧数据需要接收时,执行以下步骤:

  1. 读取寄存器UD_GLB_IQFRM_DES中的帧描述子(包含输入帧的起始地址和帧长度信息)。
  2. 处理数据,并将GLB_IRQ_RAW[iraw_rx_up]写1清0(表示CPU收帧结束)。

软件收完1帧数据后需要重新申请一个2KB的缓冲区,并将首地址重新写入到当前输入队列帧描述子中。否则,实际可以使用的输入队列的深度不等于CPU配置的数值,而等于CPU实际分配的缓冲区个数。

CPU接收帧描述子数据结构如表1所示。

表 1 CPU接收帧描述子数据结构

位

名称

描述

[63:32]

rxfrm_saddr

接收帧的起始地址。

[31:18]

reserved

保留

[17:12]

fd_in_addr

输入队列(iq)待接收帧的相对地址,作为帧存放绝对地址的索引值(0~iq_len–1)。

[11:0]

fd_in_len

输入队列待接收帧帧长度。

说明:

查询UD_GLB_ADDRQ_STAT可获得接收队列使用长度。

CPU收帧可以采用中断方式或查询方式。

  1. 中断方式收帧

    CPU使能帧接收中断时,根据是否有帧需要接收,硬件会产生帧接收中断(单包中断和多包中断)int_rx_up(每接收1个报文上报1个中断)和int_rxd_up(每接收到指定报文数目时上报1个中断)通知CPU收帧。中断方式收帧流程如图1所示。

    图 1 中断方式收帧流程图

  2. 查询方式收帧

    CPU不使能帧接收中断GLB_IRQ_ENA[ien_rx_up],CPU自动查询GLB_IRQ_RAW[iraw_rx_up],为1表示有帧需要CPU接收。查询方式收帧流程如图2所示。

    图 2 查询方式收帧流程图

发帧过程

CPU有帧待发送时,判断当前队列是否有空间发送。如果有空间发送,则分别写该帧Buffer的首地址和帧长到输出队列帧描述子中。CPU先写入首地址,然后写入发送帧的帧长。写发送帧的帧长触发硬件将该输出帧的首地址和帧长信息写入到输出队列中等待发送。因此,软件应该控制不能任意写帧长寄存器,每写该寄存器一次会导致发送一个数据包。

帧格式如下:

目的MAC

源MAC

Type

Data

FCS

CPU发帧流程如图1所示。

图 1 CPU发帧流程图

CPU发出的帧在SDRAM中缓存时,不包括帧描述子。写帧描述子到UD_GLB_EQ_ADDR及UD_GLB_EQFRM_LEN,通知Ethernet将该帧(描述子)入队。CPU发送帧描述子数据结构如表1所示。

表 1 CPU发送帧描述子数据结构

位

名称

描述

[63:32]

start_addr_eq

发送一个帧的首地址。

[31]

tso_flag

是否执行TSO操作

0:不执行TSO操作

1:执行TSO操作

[30]

vlan_flag

当前报文是否有VLAN标识

0:当前报文无VLAN标识

1:当前报文有VLAN标识

[29]

ip_version

当前报文IP协议版本

0:IPv4

1:IPv6

[28]

protocol_type

当前报文传输层协议类型

0:TCP

1:UDP

[27]

tx_coe_flag

是否执行TxCOE

0:不执行TxCOE操作

1:执行TxCOE操作

[26]

sg_flag

是否执行SG操作

0:不执行SG操作

1:执行SG操作

[25:24]

reserve

保留

[23:20]

ip_hdr_len

当前报文IP首部长度,以word(4字节)为单位。

  • 若当前报文为IPv4报文,其长度为5~15word
  • 若当前报文为IPv6报文,其长度为10word

[19:16]

protocol_hdr_len

  • 若当前报文为TCP报文,表示其TCP首部长度,以word(4字节)为单位,取值为5~15word
  • 若当前报文为UDP报文,表示其UDP首部长度,以word(4字节)为单位,且取值为2word

[15:11]

nfrags_num

当前描述子指示的SKB中含有的nfrags的个数,最大为16个

[10:0]

Length

当为TSO报文时,Length代表切片报文的MSS

若为SG或BYPASS报文,Length代表整个帧长

注:length小于20byte以及大于1900byte的帧将被丢弃,即可发送范围在20~1900之间。

说明:

查询UD_GLB_ADDRQ_STAT可获得当前CPU发送队列使用情况。

CPU发帧可以采用中断方式或查询方式。

  1. 中断方式发帧

    CPU使能Ethernet发包队列由不空到空中断(int_freeeq_up),同时设置允许该中断通知CPU。此时如果Ethernet输出队列由不空到空,说明Ethernet可以发送帧,硬件产生中断通知CPU,表示CPU可以发帧。

    如果软件需要发送帧,但是当前输出队列已满,则软件可以使能该中断。当输出队列为空后,产生中断,通知软件发送等待的帧。软件可以使用该中断一次发送一组帧,同时在该中断有效时释放上次发送的一组帧的缓冲区。

  2. 查询方式发帧

    软件查询自己内部的发帧计数,如果计数小于配置的输出队列长度,则可以直接将待发送的帧通知Ethernet,同时建立对应的发帧索引表,索引表项内容为写入到Ethernet输出队列的输出帧首地址。当Ethernet发送完1帧后,通过输出队列的地址通知CPU释放对应的发送缓冲区,CPU通过该输出队列的地址查找到对应的发送缓冲区并释放。

中断管理

中断状态寄存器

指示产生的中断类型,具体内容请参见“全局控制寄存器”中的“GLB_IRQ_STAT”。

中断使能寄存器

控制是否产生相应的中断,具体内容请参见“全局控制寄存器”中的“GLB_IRQ_ENA”。如果使能某中断,其中断状态会写入到相应的中断状态寄存器中。

原始中断状态寄存器

可以读取某种类型的原始中断传送给CPU,具体内容请参见“全局控制寄存器”中的“GLB_IRQ_RAW”。在需要清除中断状态时,必须先清除该中断的原始中断,原始中断清除后,中断状态会自动清除。

流量控制

对于软件接收的帧,当单位时间间隔内接收到的帧超过软件配置上限时,则将后续接收的帧按配置进行选择性丢弃。软件可配置超过流量限制后丢弃广播帧、组播帧或者单播帧(通过UD_GLB_FC_DROPCTRL配置)。流量限制阈值通过UD_GLB_FC_RXLIMIT设置。

软件可配置寄存器UD_GLB_FC_TIMECTRL来设置流量限制的时间间隔。使用1个10bit时间间隔寄存器,最大可以是1023个时间粒度。时间间隔粒度采用17bit计数器,对主时钟进行计数,默认值是100000,对于100MHz主时钟时间粒度为1ms。软件可配置(20bit寄存器)流量限制上限值的大小,若配置为0表示不进行流量限制全部接收。

寄存器概览

说明:

寄存器基地址为0x1029_0000。

MDIO控制寄存器

MDIO控制寄存器概览如表1所示。

表 1 MDIO控制寄存器概览

偏移地址

名称

描述

0x1100

MDIO_RWCTRL

MDIO命令字寄存器

0x1104

MDIO_RO_DATA

读数据寄存器

0x0108

UD_MDIO_PHYADDR

PHY物理地址寄存器

0x010C

UD_MDIO_RO_STAT

PHY芯片状态寄存器

0x0114

UD_MDIO_IRQENA

端口状态变化扫描屏蔽寄存器

MAC控制寄存器

MAC控制寄存器概览如表1所示。

表 1 MAC控制寄存器概览

偏移地址

名称

描述

0x0200

UD_MAC_PORTSEL

端口工作状态控制寄存器

0x0204

UD_MAC_RO_STAT

端口状态寄存器

0x0208

UD_MAC_PORTSET

端口设定工作状态寄存器

0x020C

UD_MAC_STAT_CHANGE

端口状态改变指示寄存器

0x0210

UD_MAC_SET

MAC功能设置寄存器

全局控制寄存器

Ethernet全局控制寄存器概览如表1所示。

表 1 全局控制寄存器概览

偏移地址

名称

描述

0x1300

GLB_HOSTMAC_L32

本机MAC地址低32bit寄存器

0x1304

GLB_HOSTMAC_H16

本机MAC地址高16bit寄存器

0x1308

GLB_SOFT_RESET

内部软复位寄存器

0x1310

GLB_FWCTRL

转发控制寄存器

0x1314

GLB_MACTCTRL

MAC过滤表控制寄存器

0x1318

GLB_ENDIAN_MOD

大小端控制寄存器

0x1330

GLB_IRQ_STAT

中断状态寄存器

0x1334

GLB_IRQ_ENA

中断使能寄存器

0x1338

GLB_IRQ_RAW

原始中断寄存器

0x1400

GLB_MAC0_L32

过滤表MAC0的低32bit寄存器

0x1404

GLB_MAC0_H16

过滤表MAC0的高16bit寄存器

0x1408

GLB_MAC1_L32

过滤表MAC1的低32bit寄存器

0x140C

GLB_MAC1_H16

过滤表MAC1的高16bit寄存器

0x1410

GLB_MAC2_L32

过滤表MAC2的低32bit寄存器

0x1414

GLB_MAC2_H16

过滤表MAC2的高16bit寄存器

0x1418

GLB_MAC3_L32

过滤表MAC3的低32bit寄存器

0x141C

GLB_MAC3_H16

过滤表MAC3的高16bit寄存器

0x1420

GLB_MAC4_L32

过滤表MAC4的低32bit寄存器

0x1424

GLB_MAC4_H16

过滤表MAC4的高16bit寄存器

0x1428

GLB_MAC5_L32

过滤表MAC5的低32bit寄存器

0x142C

GLB_MAC5_H16

过滤表MAC5的高16bit寄存器

0x1430

GLB_MAC6_L32

过滤表MAC6的低32bit寄存器

0x1434

GLB_MAC6_H16

过滤表MAC6的高16bit寄存器

0x1438

GLB_MAC7_L32

过滤表MAC7的低32bit寄存器

0x143C

GLB_MAC7_H16

过滤表MAC7的高16bit寄存器

0x0340

UD_GLB_IRQN_SET

多包中断配置寄存器

0x0344

UD_GLB_QLEN_SET

队列长度配置寄存器

0x0348

UD_GLB_FC_LEVEL

流控控制寄存器

0x034C

UD_GLB_CAUSE

报文上送CPU的Cause寄存器

0x0350

UD_GLB_RXFRM_SADDR

输入帧起始地址寄存器

0x0354

UD_GLB_IQFRM_DES

输入帧描述子寄存器

0x0358

UD_GLB_IQ_ADDR

输入帧首地址寄存器

0x035C

UD_GLB_BFC_STAT

转发缓存流控状态和多包中断老化时间计数器

0x0360

UD_GLB_EQ_ADDR

输出队列首地址寄存器

0x0364

UD_GLB_EQFRM_LEN

输出队列帧长配置寄存器

0x0368

UD_GLB_QSTAT

队列状态寄存器

0x036C

UD_GLB_ADDRQ_STAT

地址队列状态寄存器

0x0370

UD_GLB_FC_TIMECTRL

流量限制时间配置寄存器

0x0374

UD_GLB_FC_RXLIMIT

流量限制水线配置寄存器

0x0378

UD_GLB_FC_DROPCTRL

流量限制丢包控制寄存器

0x0380

UD_GLB_RX_COE_EN

接收方向coe使能开关寄存器

统计计数控制寄存器

统计计数控制寄存器概览如表1所示。

表 1 统计计数控制寄存器概览

偏移地址

名称

描述

0x0584

UD_STS_PORTCNT

端口部分状态计数器

0x05A0

UD_PORT2CPU_PKTS

CPU接收上行或下行端口总包数寄存器

0x05A4

UD_CPU2IQ_ADDRCNT

CPU配置收包地址队列次数寄存器

0x05A8

UD_RX_IRQCNT

上行或下行端口上报单包中断次数寄存器

0x05AC

UD_CPU2EQ_PKTS

CPU发往上行或下行发送端口总包数寄存器

统计结果寄存器

统计结果寄存器概览如表1所示。

表 1 统计结果寄存器概览

偏移地址

名称

描述

0x0600

UD_RX_DVCNT

RXDV上升沿次数寄存器

0x0604

UD_RX_OCTS

接收的总字节数寄存器

0x0608

UD_RX_RIGHTOCTS

接收正确包总字节数寄存器

0x060C

UD_HOSTMAC_PKTS

匹配本机MAC的包数寄存器

0x0610

UD_RX_RIGHTPKTS

端口接收的总包数寄存器

0x0614

UD_RX_BROADPKTS

正确的广播包数寄存器

0x0618

UD_RX_MULTPKTS

正确的组播包数寄存器

0x061C

UD_RX_UNIPKTS

正确的单播包数寄存器

0x0620

UD_RX_ERRPKTS

错包总包数寄存器

0x0624

UD_RX_CRCERR_PKTS

CRC错误次数寄存器

0x0628

UD_RX_LENERR_PKTS

包长无效的包数寄存器

0x062C

UD_RX_OCRCERR_PKTS

奇数Nibble的CRC错的包数寄存器

0x0630

UD_RX_PAUSE_PKTS

接收的流控包数寄存器

0x0634

UD_RF_OVERCNT

RXFIFO溢出次数寄存器

0x0638

UD_FLUX_TOL_IPKTS

流量限制入口的总包数寄存器

0x063C

UD_FLUX_TOL_DPKTS

流量限制丢弃的总包数寄存器

0x064C

UD_MN2CPU_PKTS

MAC限制不转发给CPU端口的包数寄存器

0x0780

UD_TX_PKTS

发送成功的总包数寄存器

0x0784

UD_TX_BROADPKTS

发送成功的广播包数寄存器

0x0788

UD_TX_MULTPKTS

发送成功的组播包数寄存器

0x078C

UD_TX_UNIPKTS

发送成功的单播包数寄存器

0x0790

UD_TX_OCTS

发送的总字节数寄存器

0x0794

UD_TX_PAUSE_PKTS

发送的流控帧数目寄存器

0x0798

UD_TX_RETRYCNT

发送过程中总重传次数寄存器

0x079C

UD_TX_COLCNT

发生冲突的总次数寄存器

0x07A0

UD_TX_LC_PKTS

发生LateCollision的包数寄存器

0x07A4

UD_TX_COLOK_PKTS

有冲突但发送成功的包数寄存器

0x07A8

UD_TX_RETRY15_PKTS

重传超15次丢弃的包数寄存器

0x07AC

UD_TX_RETRYN_PKTS

冲突次数等于阈值的包数寄存器

寄存器描述

MDIO控制寄存器

MDIO_RWCTRL

MDIO_RWCTRL为MDIO命令字寄存器。该寄存器不支持软复位。

Offset Address: 0x1100 Total Reset Value: 0x0000_8000

Bits

Access

Name

Description

Reset

[31:16]

RW

cpu_data_in

MDIO模块对PHY进行写操作的数据。

进行写操作时,CPU将要对MDIO写入的16bit数据先写入到该寄存器中。

0x0000

[15]

RW

finish

PHY的读/写操作完成。

0:未完成;

1:完成。

当要进行第2次读/写操作时,CPU要先对该位进行清零。

0x1

[14]

RO

reserved

保留。

0x0

[13]

RW

rw

控制对PHY的访问为读操作还是写操作。

0:读操作;

1:写操作。

0x0

[12:8]

RW

phy_exaddr

对外部操作的PHY的对应外部物理地址。

1个MDIO可以对外面的多个PHY进行读写访问。每个PHY有1个相应的地址。当外部只连接1个PHY芯片时,其等价于UD_MDIO_PHYADDR[phy0_addr]或者UD_MDIO_PHYADDR[phy1_addr]。

0x00

[7:5]

RW

frq_dv

对外部PHY进行读写操作时,对MDC(MDIO接口时钟)的分频系数。

以主时钟频率100MHz为例,frq_dv与MDC频率对应关系如下:

000:对工作主时钟50分频,分频后的频率为2MHz;

001:对工作主时钟100分频,分频后的频率为1MHz;

010:对工作主时钟200分频,分频后的频率为500kHz;

011:对工作主时钟400分频,分频后的频率为250kHz;

100:对工作主时钟800分频,分频后的频率为125kHz;

101:对工作主时钟1600分频,分频后的频率为62.5kHz;

110:对工作主时钟3200分频,分频后的频率为31.25kHz;

111:对工作主时钟6400分频,分频后的频率为15.625kHz。

0x0

[4:0]

RW

phy_inaddr

对外部操作的PHY芯片的内部寄存器地址,用5bit二进制数表示。

0x00

MDIO_RO_DATA

MDIO_RO_DATA为读数据寄存器。该寄存器不支持软复位。

Offset Address: 0x1104 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

reserved

保留。

0x0000

[15:0]

RO

cpu_data_out

用于MDIO模块对PHY进行读操作的数据寄存器,将从PHY读取的16bit数据先写入到该寄存器中。

0x0000

UD_MDIO_PHYADDR

UD_MDIO_PHYADDR为PHY物理地址寄存器。该寄存器不支持软复位。

Offset Address: 0x0108 Total Reset Value: 0x0000_0001

Bits

Access

Name

Description

Reset

[31:5]

RO

reserved

保留。

0x0000000

[4:0]

RW

phy_addr

外部连接的物理层PHY芯片的外部物理地址。

0x01

UD_MDIO_RO_STAT

UD_MDIO_RO_STAT为PHY芯片状态寄存器。该寄存器不支持软复位。

Offset Address: 0x010C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:3]

RO

reserved

保留。

0x00000000

[2]

RO

speed_mdio2mac

从MDIO接口得到的端口速度工作状态,处于10Mbit/s或100Mbit/s工作方式。

0:10Mbit/s工作方式;

1:100Mbit/s工作方式。

0x0

[1]

RO

link_mdio2mac

从MDIO接口得到的端口链接状态。

0:无链接;

1:有链接。

0x0

[0]

RO

duplex_mdio2mac

从MDIO接口得到的端口双工工作状态。

0:半双工;

1:全双工。

0x0

UD_MDIO_IRQENA

UD_MDIO_IRQENA为端口状态变化扫描屏蔽寄存器。该寄存器不支持软复位。

说明:

link_partner状态变化是指PHY状态的link、speed、duplex任意一位发生变化。

Offset Address: 0x0114 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:4]

RO

reserved

保留。

0x0000000

[3]

RW

link_partner_ch_mask

端口link partner状态扫描变化中断屏蔽。

0:屏蔽;

1:不屏蔽。

0x0

[2]

RW

speed_ch_mask

端口速度模式扫描变化中断屏蔽。

0:屏蔽;

1:不屏蔽。

0x0

[1]

RW

link_ch_mask

端口连接模式扫描变化中断屏蔽。

0:屏蔽;

1:不屏蔽。

0x0

[0]

RW

duplex_ch_mask

端口双工模式扫描变化中断屏蔽。

0:屏蔽;

1:不屏蔽。

0x0

MAC控制寄存器

MAC控制寄存器为端口控制类寄存器。当端口状态有效时,对MAC控制寄存器进行配置后,需要进行一次软件复位。

UD_MAC_PORTSEL

UD_MAC_PORTSEL为端口工作状态控制寄存器。该寄存器不支持软复位。

Offset Address: 0x0200 Total Reset Value: 0x0000_0001

Bits

Access

Name

Description

Reset

[31:2]

RO

reserved

保留。

0x00000000

[1]

RW

mii

端口接口模式选择。

0:MII接口;

1:保留。

0x0

[0]

RW

stat_ctrl

端口工作状态信息选择控制寄存器。

0:使用从MDIO接口获得的状态信息;

1:使用CPU设定的状态信息。

0x1

UD_MAC_RO_STAT

UD_MAC_RO_STAT为端口状态寄存器。该寄存器不支持软复位。

Offset Address: 0x0204 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:3]

RO

reserved

保留。

0x00000000

[2]

RO

speed_stat

端口当前速度模式。

0:10Mbit/s模式;

1:100Mbit/s模式。

0x0

[1]

RO

link_stat

端口当前链接状态。

0:无链接;

1:有链接。

0x0

[0]

RO

duplex_stat

端口当前双工模式。

0:半双工;

1:全双工。

0x0

UD_MAC_PORTSET

UD_MAC_PORTSET为端口设定工作状态寄存器。该寄存器不支持软复位。

Offset Address: 0x0208 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:3]

RO

reserved

保留。

0x00000000

[2]

RW

speed_stat_dio

CPU设定端口速度模式。

0:10Mbit/s模式;

1:100Mbit/s模式。

0x0

[1]

RW

link_stat_dio

CPU设定端口链接状态。

0:无链接;

1:有链接。

0x0

[0]

RW

duplex_stat_dio

CPU设定端口双工模式。

0:半双工;

1:全双工。

0x0

UD_MAC_STAT_CHANGE

UD_MAC_STAT_CHANGE为端口状态改变指示寄存器。该寄存器不支持软复位。

Offset Address: 0x020C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:3]

RO

reserved

保留。

0x00000000

[2]

WC

speed_stat_ch

端口速度模式改变指示。

0:无改变;

1:改变。

该寄存器写1清0。

0x0

[1]

WC

link_stat_ch

端口链接状态改变指示。

0:无改变;

1:改变。

该寄存器写1清0。

0x0

[0]

WC

duplex_stat_ch

端口双工模式改变指示。

0:无改变;

1:改变。

该寄存器写1清0。

0x0

UD_MAC_SET

UD_MAC_SET为MAC功能设置寄存器。该寄存器不支持软复位。

Offset Address: 0x0210 Total Reset Value: 0x2027_55EE

Bits

Access

Name

Description

Reset

[31:30]

-

reserved

保留。

0x0

[29]

RW

add_pad_en

端口发送时自动添加PAD使能。

0:禁止;

1:使能。

0x1

[28]

RW

crcgen_dis

端口CRC生成禁止控制。

0:输出帧重新计算CRC;

1:输出帧不重新计算CRC。

0x0

[27]

RW

cntr_rdclr_en

端口统计计数器读清空使能。

0:禁止;

1:使能。

0x0

[26]

RW

cntr_clr_all

端口统计计数器清空控制。

0:不清空;

1:清空。

若cntr_clr_all为1,则在下次全清时需要置0后再置为1才会执行全清操作。

0x0

[25]

RW

cntr_roll_dis

端口统计非循环计数使能。

0:禁止;

1:使能。

0x0

[24:21]

RW

colthreshold

端口冲突次数统计阈值。

缺省为0x1,表示出现一次冲突的帧的个数。

0x1

[20]

-

reserved

保留。

0x0

[19]

-

reserved

保留。

0x0

[18]

RW

pause_en

端口流控帧发送使能。

0:禁止;

1:使能。

0x1

[17]

RW

rx_shframe_en

端口短帧接收使能。

0:禁止;

1:使能。

rx_shframe_en配置为1时,端口允许接收的最小帧长为rx_min_thr配置帧长;rx_shframe_en配置为0时,端口允许接收的最小帧长缺省为64byte(含CRC)。

0x1

[16:11]

RW

rx_min_thr

端口允许接收的最小帧长。

取值范围为42byte~63byte,缺省为42byte。

若rx_min_thr配置值小于42,将取值为42。

0x2A

[10:0]

RW

len_max

端口允许接收的最大帧长,缺省为1518byte。

取值范围为1518byte~1535byte。

若len_max配置大于2000,将取值2000;若len_max配置小于256,将取值256。

0x5EE

全局控制寄存器

GLB_HOSTMAC_L32

GLB_HOSTMAC_L32为本机MAC地址低32bit寄存器。该寄存器不支持软复位。

Offset Address: 0x1300 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

local_mac

本机MAC的低32bit。

0x00000000

GLB_HOSTMAC_H16

GLB_HOSTMAC_H16为本机MAC地址高16bit寄存器。该寄存器不支持软复位。

Offset Address: 0x1304 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

reserved

保留。

0x0000

[15:0]

RW

local_mac[47:32]

本机MAC的高16bit。

0x0000

GLB_SOFT_RESET

GLB_SOFT_RESET为内部软复位寄存器。

说明:

所有软复位时间须保持2ms以上。

Offset Address: 0x1308 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:1]

RO

reserved

保留。

0x00000000

[0]

RW

soft_reset

内部软复位。

0:不复位;

1:复位。

进入软复位状态后,若要撤消软复位,需将该位置0。

0x0

GLB_FWCTRL

GLB_FWCTRL为转发控制寄存器。该寄存器不支持软复位。

Offset Address: 0x1310 Total Reset Value: 0x0000_0020

Bits

Access

Name

Description

Reset

[31:8]

RO

reserved

保留。

0x000000

[7]

RW

fwall2cpu_up

端口所有输入的有效帧是否都强制转发给CPU端口。

0:否;

1:是。

0x0

[6]

RO

reserved

保留。

0x0

[5]

RW

fw2cpu_ena_up

端口输入帧转发给CPU端口使能。

0:禁止;

1:使能。

0x1

[4:0]

RO

reserved

保留。

0x00

GLB_MACTCTRL

GLB_MACTCTRL为MAC过滤表控制寄存器。该寄存器不支持软复位。

说明:

  • 目的MAC地址最高字节为偶数是单播帧。
  • 目的MAC地址最高字节为奇数是组播帧。
  • 目的MAC地址所有字节为全0xFF的是广播帧。

Offset Address: 0x1314 Total Reset Value: 0x0000_0020

Bits

Access

Name

Description

Reset

[31:8]

RO

reserved

保留。

0x000000

[7]

RW

mact_ena_up

端口所有MAC过滤器总使能位。

0:不使用任何MAC过滤器;

1:使用MAC过滤器。

0x0

[6]

RO

reserved

保留。

0x0

[5]

RW

broad2cpu_up

端口输入的广播帧是否转发给CPU端口。

0:不转发给CPU端口;

1:转发给CPU端口。

0x1

[4]

RO

reserved

保留。

0x0

[3]

RW

multi2cpu_up

端口输入的非过滤表中的组播帧是否转发给CPU端口。

0:不转发给CPU端口;

1:转发给CPU端口。

0x0

[2]

RO

reserved

保留。

0x0

[1]

RW

uni2cpu_up

端口输入的非过滤表中的单播帧是否转发给CPU端口。

0:不转发给CPU端口;

1:转发给CPU端口。

0x0

[0]

RO

reserved

保留。

0x0

GLB_ENDIAN_MOD

GLB_ENDIAN_MOD为大小端控制寄存器。该寄存器不支持软复位。

Offset Address: 0x1318 Total Reset Value: 0x0000_0003

Bits

Access

Name

Description

Reset

[31:2]

RO

reserved

保留。

0x00000000

[1]

RW

in_endian

收包写SDRAM大小端配置。

0:big-endian模式;

1:little-endian模式。

数据按字节翻转。

0x1

[0]

RW

out_endian

发包读SDRAM大小端配置。

0:big-endian模式;

1:little-endian模式。

0x1

GLB_IRQ_STAT

GLB_IRQ_STAT为中断状态寄存器。该寄存器不支持软复位。

Offset Address: 0x1330 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:13]

RO

reserved

保留。

0x00000

[12]

RO

int_mdio_finish

MDIO完成CPU操作指示。

0:MDIO未完成CPU操作;

1:MDIO已完成CPU操作,产生中断。

进入该中断程序后,查询MDIO_RWCTRL[finish],判断MDIO操作是否完成。

0x0

[11:8]

RO

reserved

保留。

0x0

[7]

RO

int_rxd_up

端口有(多个)帧等待CPU接收中断指示(多包中断)。

0:中断无效;

1:中断有效,输入队列中有帧等待CPU接收。

当发生该中断后,需要查询GLB_IRQ_RAW[iraw_rxd_up]信号是否有效来判断是否有帧等待接收。

0x0

[6]

RO

int_freeeq_up

端口输出队列由不空到空中断,表示输出队列缓冲区由不空到空,指示CPU可以写入新的待发送的一组帧。

0:没有产生中断;

1:输出队列由不空到空中断。

进入该中断程序后,软件通过查询UD_GLB_ADDRQ_STAT[eq_cnt]判断当前输出队列是否为空,如果不为空,说明该中断为无效中断。

0x0

[5]

RO

int_stat_up

端口状态改变中断信号,表示MDIO自适应到PHY芯片的速度变化、双工模式变化和连接状态变化时产生中断。

0:没有产生中断;

1:端口状态改变中断。

进入该中断程序后,软件根据UD_MDIO_IRQENA的配置值决定是什么状态发生变化。

0x0

[4]

RO

int_duplex_up

端口双工模式变化中断指示。

0:双工模式没有变化;

1:双工模式发生变化,产生中断。

进入该中断程序后,查询UD_MAC_STAT_CHANGE[duplex_stat_ch],判断是否发生双工状态改变。

0x0

[3]

RO

int_speed_up

端口速度模式变化中断指示。

0:速度模式没有变化;

1:速度模式发生变化,产生中断。

进入该中断程序后,查询UD_MAC_STAT_CHANGE[speed_stat_ch],判断是否发生速度状态改变。

0x0

[2]

RO

int_link_up

端口连接状态变化中断指示。

0:连接状态没有变化;

1:连接状态发生变化,产生中断。

进入该中断程序后,查询UD_MAC_STAT_CHANGE[link_stat_ch],判断是否发生连接状态改变。

0x0

[1]

RO

int_tx_up

端口发送完来自CPU的1帧数据指示。

0:未发送完;

1:已发送完,产生中断。

当发生该中断后,需要查询UD_GLB_QSTAT中的输出队列当前的出队地址eq_out_index,判断是否释放输出帧的缓存空间。

0x0

[0]

RO

int_rx_up

端口有帧等待CPU接收中断指示。

0:中断无效;

1:中断有效,输入队列中有帧等待CPU接收。

当发生该中断后,需要查询GLB_IRQ_RAW[iraw_rxd_up]信号是否有效来判断是否有帧等待接收。

0x0

GLB_IRQ_ENA

GLB_IRQ_ENA为中断使能寄存器。该寄存器不支持软复位。

Offset Address: 0x1334 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:20]

RO

reserved

保留。

0x000

[19]

RW

ien_all

所有中断使能。

0:禁止(所有中断都不能上报);

1:使能(所有中断按配置对应上报)。

0x0

[18]

RW

ien_up

所有上行端口中断使能。

0:禁止(所有上行端口中断都不能上报);

1:使能(所有上行端口中断按配置对应上报)。

0x0

[17:13]

RO

reserved

保留。

0x00

[12]

RW

ien_mdio_finish

MDIO完成CPU操作指示使能。

0:禁止;

1:使能。

0x0

[11:8]

RO

reserved

保留。

0x0

[7]

RW

ien_rxd_up

上行端口有(多个)帧等待CPU接收使能(多包中断)。

0:禁止;

1:使能。

0x0

[6]

RW

ien_freeeq_up

上行端口输出队列由不空到空中断信号使能。

0:禁止;

1:使能。

0x0

[5]

RW

ien_stat_up

上行端口状态改变中断信号使能。

0:禁止;

1:使能。

0x0

[4]

RW

ien_duplex_up

上行端口双工模式变化中断使能。

0:禁止;

1:使能。

0x0

[3]

RW

ien_speed_up

上行端口速度模式变化中断使能。

0:禁止;

1:使能。

0x0

[2]

RW

ien_link_up

上行端口连接状态变化中断使能。

0:禁止;

1:使能。

0x0

[1]

RW

ien_tx_up

上行端口发送完来自CPU的1帧数据指示使能。

0:禁止;

1:使能。

0x0

[0]

RW

ien_rx_up

上行端口有帧等待CPU接收使能。

0:禁止;

1:使能。

0x0

GLB_IRQ_RAW

GLB_IRQ_RAW为原始中断寄存器。该寄存器不支持软复位,是写1清0寄存器。

Offset Address: 0x1338 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:13]

RO

reserved

保留。

0x00000

[12]

WC

iraw_mdio_finish

MDIO完成CPU操作的原始中断状态。

0:无中断;

1:有中断。

0x0

[11:8]

RO

reserved

保留。

0x0

[7]

WC

iraw_rxd_up

上行端口有(多个)帧等待CPU接收的原始中断状态(多包中断)。

0:无中断;

1:有中断。

0x0

[6]

WC

iraw_freeeq_up

上行端口输出队列由不空到空的原始中断状态,表示输出队列缓冲区由不空到空,指示CPU可以写入新的待发送的一组帧。

0:无中断;

1:有中断。

0x0

[5]

WC

iraw_stat_up

上行端口状态改变的原始中断状态,表示MDIO自适应到PHY芯片的速度变化、双工模式变化和连接状态变化时产生中断。

0:无中断;

1:有中断。

0x0

[4]

WC

iraw_duplex_up

上行端口双工模式变化的原始中断状态。

0:无中断;

1:有中断。

0x0

[3]

WC

iraw_speed_up

上行端口速度模式变化的原始中断状态。

0:中断无效;

1:速度模式发生变化,产生中断。

该寄存器写1清0。

0x0

[2]

WC

iraw_link_up

上行端口连接状态变化的原始中断状态。

0:无中断;

1:有中断。

0x0

[1]

WC

iraw_tx_up

上行端口发送完来自CPU的原始中断状态。

0:无中断;

1:有中断。

0x0

[0]

WC

iraw_rx_up

上行端口有帧等待CPU接收的原始中断状态。

0:无中断;

1:有中断。

0x0

GLB_MAC0_L32

GLB_MAC0_L32为过滤表MAC0的低32bit寄存器。

Offset Address: 0x1400 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac0

过滤表MAC0的低32bit。

0x00000000

GLB_MAC0_H16

GLB_MAC0_H16为过滤表MAC0的高16bit寄存器。

Offset Address: 0x1404 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac0_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac0

过滤表MAC0的高16bit。

0x0000

GLB_MAC1_L32

GLB_MAC1_L32为过滤表MAC1的低32bit寄存器。

Offset Address: 0x1408 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac1

过滤表MAC1的低32bit。

0x00000000

GLB_MAC1_H16

GLB_MAC1_H16为过滤表MAC1的高16bit寄存器。

Offset Address: 0x140C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac1_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac1

过滤表MAC1的高16bit。

0x0000

GLB_MAC2_L32

GLB_MAC2_L32为过滤表MAC2的低32bit寄存器。

Offset Address: 0x1410 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac2

过滤表MAC2的低32bit。

0x00000000

GLB_MAC2_H16

GLB_MAC2_H16为过滤表MAC2的高16bit寄存器。

Offset Address: 0x1414 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac2_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac2

过滤表MAC2的高16bit。

0x0000

GLB_MAC3_L32

GLB_MAC3_L32为过滤表MAC3的低32bit寄存器。

Offset Address: 0x1418 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac3

过滤表MAC3的低32bit。

0x00000000

GLB_MAC3_H16

GLB_MAC3_H16为过滤表MAC3的高16bit寄存器。

Offset Address: 0x141C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac3_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac3

过滤表MAC3的高16bit。

0x0000

GLB_MAC4_L32

GLB_MAC4_L32为过滤表MAC4的低32bit寄存器。

Offset Address: 0x1420 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac4

过滤表MAC4的低32bit。

0x00000000

GLB_MAC4_H16

GLB_MAC4_H16为过滤表MAC4的高16bit寄存器。

Offset Address: 0x1424 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac4_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac4

过滤表MAC4的高16bit。

0x0000

GLB_MAC5_L32

GLB_MAC5_L32为过滤表MAC5的低32bit寄存器。

Offset Address: 0x1428 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac5

过滤表MAC5的低32bit。

0x00000000

GLB_MAC5_H16

GLB_MAC5_H16为过滤表MAC5的高16bit寄存器。

Offset Address: 0x142C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac5_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac5

过滤表MAC5的高16bit。

0x0000

GLB_MAC6_L32

GLB_MAC6_L32为过滤表MAC6的低32bit寄存器。

Offset Address: 0x1430 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac6

过滤表MAC6的低32bit。

0x00000000

GLB_MAC6_H16

GLB_MAC6_H16为过滤表MAC6的高16bit寄存器。

Offset Address: 0x1434 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac6_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac6

过滤表MAC6的高16bit。

0x0000

GLB_MAC7_L32

GLB_MAC7_L32为过滤表MAC7的低32bit寄存器。

Offset Address: 0x1438 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

flt_mac7

过滤表MAC7的低32bit。

0x00000000

GLB_MAC7_H16

GLB_MAC7_H16为过滤表MAC7的高16bit寄存器。

Offset Address: 0x143C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:22]

RO

reserved

保留。

0x000

[21]

RW

fw2cpu_up

上行端口使能本过滤器时,上行端口输入帧命中本过滤器是否转发给CPU端口。

0:否;

1:是。

0x0

[20:18]

RO

reserved

保留。

0x0

[17]

RW

mac7_up

本过滤器配置为上行端口使用控制。

0:上行端口不使用该过滤器;

1:上行端口使用该过滤器。

0x0

[16]

RO

reserved

保留。

0x0

[15:0]

RW

flt_mac7

过滤表MAC7的高16bit。

0x0000

UD_GLB_IRQN_SET

UD_GLB_IRQN_SET为多包中断配置寄存器。该寄存器不支持软复位。

Offset Address: 0x0340 Total Reset Value: 0x0800_003A

Bits

Access

Name

Description

Reset

[31:29]

RO

reserved

保留。

0x0

[28:24]

RW

int_frm_cnt

该设置用于多包中断功能,定义为每收到多少个包上报一次多包中断。

int_frm_cnt最小值可配置为1,此时多包中断等同于单包中断。

0x08

[23:16]

RO

reserved

保留。

0x00

[15:0]

RW

age_timer

打开多包中断功能后,每经过一定的时间收包数量还未达到上报多包中断所要求的包数,该时间段定义为多包中断产生的老化时间。

age_timer以主时钟256分频周期为计数单位。

0x003A

UD_GLB_QLEN_SET

UD_GLB_QLEN_SET为队列长度配置寄存器。该寄存器不支持软复位。

Offset Address: 0x0344 Total Reset Value: 0x0000_2020

Bits

Access

Name

Description

Reset

[31:14]

RO

reserved

保留。

0x00000

[13:8]

RW

iq_len

输入(收包)队列长度配置。

iq_len不得配置为0,否则将会强行置1;配置的iq_len和eq_len之和不得大于64,否则优先满足iq_len的值(非0),eq_len取64–iq_len。

0x20

[7:6]

RO

reserved

保留。

0x0

[5:0]

RW

eq_len

输出(发包)队列长度配置。

eq_len不得配置为0,否则将会强行置1。

0x20

UD_GLB_FC_LEVEL

UD_GLB_FC_LEVEL为流控控制寄存器。该寄存器不支持软复位。

Offset Address: 0x0348 Total Reset Value: 0x3018_0508

Bits

Access

Name

Description

Reset

[31:15]

RO

reserved

保留。

0x06030

[14]

RW

qlimit_ena

接收队列流控使能。

0:禁止(不根据接收队列状态来发送流控信息);

1:使能(可根据接收队列状态来发送流控信息)。

0x0

[13:8]

RW

qlimit_up

接收队列流控上限。当输入队列剩余可用队列空间数小于该上限值时,若接收队列流控使能,则发送流控信息给对端。

若上限值qlimit_up配置为0,将无法进入流控状态;

上限值qlimit_up必须比下限值qlimit_down小。

0x05

[7:6]

RO

reserved

保留。

0x0

[5:0]

RW

qlimit_down

接收队列解除流控下限。当输入队列剩余可用队列空间数大于或者等于该下限值同时正处于接收流控状态时,解除当前流控状态。

0x08

UD_GLB_CAUSE

UD_GLB_CAUSE为报文上送CPU的Cause寄存器。该寄存器不支持软复位。

Offset Address: 0x034C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:3]

RO

reserved

保留。

0x00000000

[2:0]

RO

mact_cause

报文查MAC表的匹配结果类型。

000:强制转发;

001:目的MAC是本机MAC的报文;

010:广播报文;

011:匹配MAC表的报文;

100:不匹配MAC表的组播报文;

101:不匹配MAC表的单播报文;

其他:保留。

0x0

UD_GLB_RXFRM_SADDR

UD_GLB_RXFRM_SADDR为输入帧起始地址寄存器。该寄存器不支持软复位。

Offset Address: 0x0350 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

rxfrm_saddr

接收帧的起始地址。

0x00000000

UD_GLB_IQFRM_DES

UD_GLB_IQFRM_DES为输入帧描述子寄存器。该寄存器不支持软复位。

Offset Address: 0x0354 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:18]

RO

reserved

保留。

0x0000

[17:12]

RO

fd_in_addr

输入队列(iq)中等待接收的第一个帧的相对地址,作为帧存放绝对地址的索引值(0~iq_len–1)。

0x00

[11:0]

RO

fd_in_len

输入队列待接收帧的帧长度。

0x000

UD_GLB_IQ_ADDR

UD_GLB_IQ_ADDR为输入帧首地址寄存器。该寄存器不支持软复位。

说明:

如果软件分配的地址非word对齐时,逻辑会按照word地址写入数据,只是前面写入的数据为无效数据。例如,配置的帧首地址为0xF000_8002(非word对齐地址),逻辑会在0xF000_8000和0xF000_8001地址都写入0x00(也可能是其他数据),在0xF000_8002写入接收帧的第1个字节(有效数据),在0xF000_8003写入接收帧的第2个字节(有效数据),后续数据依次写入缓冲区。如果是其他非word对齐地址,操作方式类似。

Offset Address: 0x0358 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

startaddr_iq

CPU配置的输入帧对应的存储空间的首地址。接收帧根据此地址来申请总线。

0x00000000

UD_GLB_BFC_STAT

UD_GLB_BFC_STAT为转发缓存流控状态和多包中断老化时间计数器。该寄存器不支持软复位。

Offset Address: 0x035C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

timerover_cnt

多包中断老化时间计数器溢出(计数到配置值)次数计数器。

单位时间内如果timerover_cnt值过大,说明UD_GLB_IRQN_SET[int_frm_cnt]设置不合理,多包中断主要由老化时间触发,需要减少配置值。

0x0000

[15:0]

RO

flowctrl_cnt

上行端口(或者下行端口)的转发缓存进入流控状态次数计数器。

单位时间内如果flowctrl_cnt值过大,说明UD_GLB_FC_LEVEL[blimit_up]或者UD_GLB_FC_LEVEL[blimit_down]设置过小,或者外部网络状态恶化,可能需要减少配置值。

0x0000

UD_GLB_EQ_ADDR

UD_GLB_EQ_ADDR为输出队列首地址寄存器。该寄存器不支持软复位。

说明:

如果输出帧的首地址为非word对齐时,逻辑会按照word地址读入数据,只是前面读取的数据为无效数据而丢弃。例如,配置的发送帧首地址为0xF000_8102(非word对齐地址),逻辑会把从地址0xF000_8100和0xF000_8101读入的字节数据直接丢弃,在0xF000_8102读入的数据当作发送帧的第1个字节(有效数据),在0xF000_8103读入的数据为发送帧的第2个字节(有效数据),后续数据都为有效数据(直到读取指定帧长的数据)。如果是其他非word对齐地址,操作方式类似。

Offset Address: 0x0360 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RW

add_fd_addr_out

CPU添加到输出队列的发送帧的首地址。

0x00000000

UD_GLB_EQFRM_LEN

UD_GLB_EQFRM_LEN为输出队列帧长配置寄存器。该寄存器不支持软复位。

Offset Address: 0x0364 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:11]

RO

reserved

保留。

0x000000

[10:0]

RW

add_fd_len_out

CPU添加到输出队列的发送帧的帧长。

配置该寄存器触发硬件将发送帧的首地址和帧长写入到输出队列中等待发送,软件发送帧时必须先写入帧的首地址,然后再写入该帧的帧长。

注意:add_fd_len_out小于20byte以及大于1600byte的帧将被丢弃,即可发送范围在20byte~1600byte之间。

0x000

UD_GLB_QSTAT

UD_GLB_QSTAT为队列状态寄存器。该寄存器不支持软复位。

Offset Address: 0x0368 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:30]

RO

reserved

保留。

0x0

[29:24]

RO

iq_in_index

输入(收包)队列入队index。

0x00

[23:22]

RO

reserved

保留。

0x0

[21:16]

RO

cpuw_index

输入(收包)队列帧首地址入队index。

0x00

[15:14]

RO

reserved

保留。

0x0

[13:8]

RO

eq_in_index

输出(发包)队列描述子入队index。

0x00

[7:6]

RO

reserved

保留。

0x0

[5:0]

RO

eq_out_index

输出(发包)队列描述子出队index。

0x00

UD_GLB_ADDRQ_STAT

UD_GLB_ADDRQ_STAT为地址队列状态寄存器。该寄存器不支持软复位。

Offset Address: 0x036C Total Reset Value: 0x0300_0000

Bits

Access

Name

Description

Reset

[31:26]

RO

reserved

保留。

0x00

[25]

RO

cpuaddr_in_rdy

CPU是否可配置输入队列帧首地址。

0:否;

1:是。

cpuaddr_in_rdy、eq_in_rdy复位时为0,但复位后将立即被电路置为1。即复位后iq地址队列和eq描述子队列可配。

0x1

[24]

RO

eq_in_rdy

CPU是否可配置输出队列帧描述子(帧首地址及帧长)

0:否;

1:是。

0x1

[23:22]

RO

reserved

保留。

0x0

[21:16]

RO

cpu_cnt

输入队列对CPU分配的可用帧首地址计数。

0x00

[15:14]

RO

reserved

保留。

0x0

[13:8]

RO

iq_cnt

输入队列已经使用长度(0~iq_len)。

0x00

[7:6]

RO

reserved

保留。

0x0

[5:0]

RO

eq_cnt

输出队列已经使用长度(0~eq_len)。

0x00

UD_GLB_FC_TIMECTRL

UD_GLB_FC_TIMECTRL为流量限制时间配置寄存器。该寄存器不支持软复位。

Offset Address: 0x0370 Total Reset Value: 0x07FF_86A0

Bits

Access

Name

Description

Reset

[31:27]

RO

reserved

保留。

0x00

[26:17]

RW

flux_timer_cfg

流量限制时间间隔计数器,对flux_timer_inter产生的分频时钟进行计数。配置为0不进行流量限制。

0x3FF

[16:0]

RW

flux_timer_inter

流量限制时间粒度计数器,对ETH工作时钟(请参见PERI_CRG3571寄存器)进行计数,默认值为100000。

例如,当ETH工作时钟为54MHz时,如需配置粒度为1ms,则寄存器设置为54000,即1ms/(1/54MHz)=[1 x 10^(-3)]/[(1/54) x 10^(-6)]=54 x 10^3=54000。

0x186A0

UD_GLB_FC_RXLIMIT

UD_GLB_FC_RXLIMIT为流量限制水线配置寄存器。该寄存器不支持软复位。

Offset Address: 0x0374 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:20]

RO

reserved

保留。

0x000

[19:0]

RW

flux_cfg

流量限制上限阈值寄存器,该组对流量限制时间间隔内的软件接收帧数进行限制,超过该配置值的帧根据配置选择性进行丢弃或者接收。当配置为全0时,表示不进行流量限制。

0x00000

UD_GLB_FC_DROPCTRL

UD_GLB_FC_DROPCTRL为流量限制丢包控制寄存器。该寄存器不支持软复位。

Offset Address: 0x0378 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:3]

RO

reserved

保留。

0x00000000

[2]

RW

flux_uni

流量限制超过上限值时是否丢弃单播包。

0:否;

1:是。

0x0

[1]

RW

flux_multi

流量限制超过上限值时是否丢弃组播包。

0:否;

1:是。

0x0

[0]

RW

flux_broad

流量限制超过上限值时是否丢弃广播包。

0:否;

1:是。

0x0

UD_GLB_RX_COE_EN

UD_GLB_RX_COE_EN为接收方向coe使能开关寄存器。该寄存器不支持软复位。

Offset Address: 0x0380 Total Reset Value: 0x8000_E000

Bits

Access

Name

Description

Reset

[31]

RW

rx_coe_en

接收方向coe使能开关。

0x1

[30:16]

RO

reserved

保留。

0x0000

[15]

RW

iphdr_drop

ipv4 ip头checksum错报文丢弃使能开关。

0:透传

1:丢包

0x1

[14]

RW

pro_drop

tcp/udp checksum错报文丢弃使能开关。

0:透传

1:丢包

0x1

[13]

RW

i6udp_drop

ipv6 udp checksum域为0非法报文丢弃使能开关。

0:透传

1:丢包

0x1

[12:0]

RO

reserved

保留。

0x0000

统计计数控制寄存器

UD_STS_PORTCNT

UD_STS_PORTCNT为端口部分状态计数器。该寄存器不支持软复位。

Offset Address: 0x0584 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:28]

RO

rxsof_cnt

端口接收到帧头计数。

0x0

[27:24]

RO

rxeof_cnt

端口接收到帧尾计数。

0x0

[23:20]

RO

rxcrcok_cnt

端口接收到CRC校验正确计数。

0x0

[19:16]

RO

rxcrcbad_cnt

端口接收到CRC校验错误计数。

0x0

[15:12]

RO

txsof_cnt

端口发送帧头计数。

0x0

[11:8]

RO

txeof_cnt

端口发送帧尾计数。

0x0

[7:4]

RO

txcrcok_cnt

端口发送CRC校验正确计数。

0x0

[3:0]

RO

txcrcbad_cnt

端口发送CRC校验错误计数。

0x0

UD_PORT2CPU_PKTS

UD_PORT2CPU_PKTS为CPU接收上行或下行端口总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x05A0 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

reserved

保留。

0x0000

[15:0]

WC

pkts_cpu

CPU端口接收到的所有包数,该寄存器写0清0,写1无效。

0x0000

UD_CPU2IQ_ADDRCNT

UD_CPU2IQ_ADDRCNT为CPU配置收包地址队列次数寄存器。该寄存器不支持软复位。

Offset Address: 0x05A4 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

reserved

保留。

0x0000

[15:0]

WC

addr_cpu

CPU成功配置收包地址队列的次数,该寄存器写0清0,写1无效。

0x0000

UD_RX_IRQCNT

UD_RX_IRQCNT为上行或下行端口上报单包中断次数寄存器。该寄存器不支持软复位。

Offset Address: 0x05A8 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

reserved

保留。

0x0000

[15:0]

WC

pkts_port

上报的收帧中断计数,该寄存器写0清0,写1无效。

0x0000

UD_CPU2EQ_PKTS

UD_CPU2EQ_PKTS为CPU发往上行或下行发送端口总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x05AC Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:16]

RO

reserved

保留。

0x0000

[15:0]

WC

pkts_cpu2tx

CPU端口发往端口所有报文计数,该寄存器写0清0,写1无效。

0x0000

统计结果寄存器

统计结果可配置只读和读清0两种模式(UD_MAC_SET[cntr_rdclr_en]设置为1表示读清0模式,设置为0表示只读模式),以下对寄存器的介绍针对只读模式。

UD_RX_DVCNT

UD_RX_DVCNT为RXDV上升沿次数寄存器。该寄存器不支持软复位。

Offset Address: 0x0600 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

rxdvrise

所有的RXDV上升沿的计数。

0x00000000

UD_RX_OCTS

UD_RX_OCTS为接收的总字节数寄存器。该寄存器不支持软复位。

Offset Address: 0x0604 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

ifinoctets

所有接收字节的计数,包括正确帧、错误帧以及Preamble中的字节。未检测到有效SFD(Start of Frame Delimiter)的帧不进行统计。

0x00000000

UD_RX_RIGHTOCTS

UD_RX_RIGHTOCTS为接收正确包总字节数寄存器。该寄存器不支持软复位。

Offset Address: 0x0608 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

octets_rx

接收字节计数,包括正确帧和错误帧,但不包括Preamble字节。未检测到有效SFD的帧不进行统计。

0x00000000

UD_HOSTMAC_PKTS

UD_HOSTMAC_PKTS为匹配本机MAC的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x060C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

local_mac_match

接收帧中目的MAC和本机MAC地址相同的正确帧的计数,不包括超短帧、超长帧、CRC错帧、流控帧和传输错帧。

0x00000000

UD_RX_RIGHTPKTS

UD_RX_RIGHTPKTS为端口接收的总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0610 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

pkts

所有帧的计数。

0x00000000

UD_RX_BROADPKTS

UD_RX_BROADPKTS为正确的广播包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0614 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

broadcastpkts

帧长有效并且CRC正确的广播帧的计数,但不包括流控帧、传输错帧。

0x00000000

UD_RX_MULTPKTS

UD_RX_MULTPKTS为正确的组播包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0618 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

multicastpkts

帧长有效并且CRC正确的组播帧的计数,但不包括流控帧、传输错帧。

0x00000000

UD_RX_UNIPKTS

UD_RX_UNIPKTS为正确的单播包数寄存器。该寄存器不支持软复位。

Offset Address: 0x061C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

ifinucastpkts

帧长有效并且CRC正确的单播帧的计数,但不包括流控帧、传输错帧。

0x00000000

UD_RX_ERRPKTS

UD_RX_ERRPKTS为错包总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0620 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

ifinerrors

接收的所有错帧计数,包括CRC错帧、超短帧、超长帧和传输错帧。

0x00000000

UD_RX_CRCERR_PKTS

UD_RX_CRCERR_PKTS为CRC错误次数寄存器。该寄存器不支持软复位。

Offset Address: 0x0624 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

crcerr

接收帧的帧长有效(非超短、超长帧),但其CRC或Alignment检查出错的帧的个数。

0x00000000

UD_RX_LENERR_PKTS

UD_RX_LENERR_PKTS为包长无效的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0628 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

abnormalsizepkts

帧长无效(小于设定的最小有效帧长,或者帧长大于设定的最大有效帧长)的个数(超短帧、超长帧)。

0x00000000

UD_RX_OCRCERR_PKTS

UD_RX_OCRCERR_PKTS为奇数Nibble的CRC错的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x062C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3alignmenterr

接收到的奇数个Nibble的CRC错帧。

0x00000000

UD_RX_PAUSE_PKTS

UD_RX_PAUSE_PKTS为接收的流控包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0630 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3pause

接收的流控帧数。

0x00000000

UD_RF_OVERCNT

UD_RF_OVERCNT为RXFIFO溢出次数寄存器。该寄存器不支持软复位。

Offset Address: 0x0634 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dropevents

帧接收的过程中,RXFIFO溢出事件的累计次数。

0x00000000

UD_FLUX_TOL_IPKTS

UD_FLUX_TOL_IPKTS为流量限制入口的总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0638 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

flux_frame_cnt

流量限制输入正确帧的总数计数,不包括超短帧、超长帧、CRC错帧、流控帧和传输错帧。

0x00000000

UD_FLUX_TOL_DPKTS

UD_FLUX_TOL_DPKTS为流量限制丢弃的总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x063C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

flux_drop_cnt

流量限制丢弃正确帧的计数,不包括超短帧、超长帧、CRC错帧、流控帧和传输错帧。

0x00000000

UD_MN2CPU_PKTS

UD_MN2CPU_PKTS为MAC限制不转发给CPU端口的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x064C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

mac_not2cpu_pkts

由于MAC限制不转发CPU端口的包数。

0x00000000

UD_TX_PKTS

UD_TX_PKTS为发送成功的总包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0780 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

pkts_tx

所有配置发送帧的计数,不包含超时丢弃帧以及UD_GLB_EQFRM_LEN配置长度不在有效范围之内的发送帧。

0x00000000

UD_TX_BROADPKTS

UD_TX_BROADPKTS为发送成功的广播包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0784 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

broadcastpkts_tx

发送成功的广播帧的计数(不含重传)。

0x00000000

UD_TX_MULTPKTS

UD_TX_MULTPKTS为发送成功的组播包数寄存器。该寄存器不支持软复位。

Offset Address: 0x0788 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

multicastpkts_tx

发送成功的组播帧的计数(不含重传)。

0x00000000

UD_TX_UNIPKTS

UD_TX_UNIPKTS为发送成功的单播包数寄存器。该寄存器不支持软复位。

Offset Address: 0x078C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

ifoutucastpkts_tx

发送成功的单播帧的计数(不含重传)。

0x00000000

UD_TX_OCTS

UD_TX_OCTS为发送的总字节数寄存器。该寄存器不支持软复位。

Offset Address: 0x0790 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

octets_tx

发送的总字节数,包含重发帧、正确帧和错误帧,但Preamble字节不计在内。

0x00000000

UD_TX_PAUSE_PKTS

UD_TX_PAUSE_PKTS为发送的流控帧数目寄存器。该寄存器不支持软复位。

Offset Address: 0x0794 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3outpause

发送的流控帧数目。

0x00000000

UD_TX_RETRYCNT

UD_TX_RETRYCNT为发送过程中总重传次数寄存器。该寄存器不支持软复位。

Offset Address: 0x0798 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

retry_times_tx

配置发送帧的总的重传次数。

0x00000000

UD_TX_COLCNT

UD_TX_COLCNT为发生冲突的总次数寄存器。该寄存器不支持软复位。

Offset Address: 0x079C Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

collisions

冲突发生的次数。

0x00000000

UD_TX_LC_PKTS

UD_TX_LC_PKTS为发生LateCollision的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x07A0 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3latecol

发生LateCollision的包数目。

0x00000000

UD_TX_COLOK_PKTS

UD_TX_COLOK_PKTS为有冲突但发送成功的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x07A4 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3col_ok

发生冲突后发送成功的包数目。

0x00000000

UD_TX_RETRY15_PKTS

UD_TX_RETRY15_PKTS为重传超15次丢弃的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x07A8 Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3excessivecol

由于重传次数大于15而丢弃的包数目。

0x00000000

UD_TX_RETRYN_PKTS

UD_TX_RETRYN_PKTS为冲突次数等于阈值的包数寄存器。该寄存器不支持软复位。

Offset Address: 0x07AC Total Reset Value: 0x0000_0000

Bits

Access

Name

Description

Reset

[31:0]

RO

dot3colcnt

冲突次数等于冲突阈值的包数目,由UD_MAC_SET[colthreshold]设定。

0x00000000

FEPHY

概述

FEPHY(Fast Ethernet PHY)IP是一个支持单口10BASE-T/10BASE-Te/100BASE-TX以太网物理层的IP。

功能特点

FEPHY实现了10BASE-T/10BASE-Te/100BASE-TX以太网物理层,在电缆一端,该模块的MDI接口通过变压器以及RJ45接口直接与双绞线相连;在MAC端,通过该模块的MII接口与MAC层相接。

  • 兼容IEEE的10BASE-T/100BASE-TX;
  • 电缆状态的诊断功能;
  • 支持MDIO和MII接口;
  • 支持IEEE802.3u的自协商和并行检测功能;
  • 支持电缆线对自动交叉倒换和极性调整;
  • 支持802.3az (Energy Efficient Ethernet);
  • 支持10M/100Mbps下眼图测试序列直接发送,通过配置寄存器实现,测试眼图无需依赖tesgine;
  • 电压型输出,不需上下拉电阻,变压器抽头只需电容接地。

典型应用

典型的应用如图1所示。

  • 在电缆一端,MDI接口通过一个变压器以及RJ45接口直接与双绞线相连;
  • 在MAC端,FEPHY通过MII接口与MAC层相接。

图 1 FEPHY典型应用示意图

外部器件设计与供电方式建议请参见《Hi3516CVxxx 硬件设计用户指南》的FEPHY相关描述。

表 1 MDI管脚描述

名称

I/O

属性

功能描述

ETH_MDI_AN

IO

Analog

差分接收和发送信号。

可强制或自协商配置为10BASE-T、100BASE-TX提供MDI/MDI-X的对接方式,并可以纠正通道MDI_N和MDI_P的极性问题。

注:在10/100Mbps操作模式下,自动MDIX功能会检测对方的发送通道,配置适当的发送和接收通道。

ETH_MDI_AP

IO

Analog

ETH_MDI_BN

IO

Analog

ETH_MDI_BP

IO

Analog

使用配置

本章将介绍FEPHY核可以支持的配置模式,下面是涉及到的术语解释如下:

  • Manual Mode Configuration手动配置
  • Speed/Duplex Selection速度/双工模式选择
  • Auto-Negotiation自协商
  • Priority solution 优先级定义
  • Parallel Detection (非自协商方式的)并行检测
  • Restart Auto-Negotiation 重启自协商
  • Auto-MDIX Configuration 自动双绞线对交叉倒换
  • Auto Polarity Correction 自动极性修正
  • PHY Address(PHY地址)
  • Low Power Mode 省电模式
  • Expand register扩展寄存器

FEPHY核支持4种不同的以太网协议:

  • 10BASE-T Full Duplex
  • 10BASE-T Half Duplex
  • 100BASE-TX Full Duplex
  • 100BASE-TX Half Duplex

可通过配置寄存器来选择速度与双工模式:

手动配置

FEPHY核可以通过多种方式配置。所有的配置都可以通过MDIO接口,读写寄存器进行管理。要使用手动配置模式,必须先屏蔽自协商功能,通过以下方法实现:

  1. 配置0x0到寄存器BMCR(地址0x00)的bit 12。
  2. 配置寄存器BMCR(地址0x00)的SPEED[1:0]域用于确定速度。
  3. 配置寄存器BMCR(地址0x00)的Duplex[1:0]域用于确定双工模式。

自协商

10/100Mbps以太网PHY对自协商的支持是可选的,当对端的设备不支持自协商时可以通过并行检测(parallel detecting)的方式来确定连接的模式。

速度、双工模式选择与优先级定义

自协商功能提供了一种让对接的双方可以交换配置信息的机制。这个机制是通过交换Fast Link Pulse(FLP)来实现的。自协商的过程中,连接双方都支持的最高性能的协议会被优先选中。

自协商选择过程中各种模式的优先级如下:

  1. 100BASE-TX Full Duplex (最高优先级)
  2. 100BASE-TX Half Duplex
  3. 10BASE-T Full Duplex
  4. 10BASE-T Half Duplex (最低优先级)

并行检测

当对端的设备不支持自协商,则自协商功能模块利用这些收到的信息确定将使用的连接协议(10BASE-T和100BASE-X会发送不同的信号表示不同的链路状态)。如果FEPHY是以并行检测来完成自协商过程,可通过以下寄存器来确认当前状态:

  • 寄存器ANLPARD的bit5和bit7可以指示对端的连接模式。
  • 寄存器ANLPARD的bit[4:0]若为0x00001指示一个成功的并行检测和一个符合IEEE802.3的对接设备。
  • 寄存器ANER(地址0x06) bit0若为0表示协商是通过并行检测完成的。
  • 寄存器ANER(地址0x06) bit4若为1表示并行检测错误,未正常建立链接。

重启自协商

当自协商成功建立链接后又断链,则自协商会重启再次配置连接。

  • 若此时自协商使能,可以通过写0x1至寄存器BMCR(地址0x00)bit9来重新开始自协商。
  • 若此时自协商不使能,可以通过写0x1到寄存器BMCR(地址0x00)bit12来重新开启自协商功能。

AUTO—MDIX

FEPHY核可以检测到是通过“交叉线”还是“直连线”与对端PHY连接。它可以自动调整通道A和B用来初始化10/100的连接。自动MDIX接口调整是在自协商信息交互之前完成的。可通过以下寄存器来确认当前状态:

  • 寄存器LINK_AN(地址0x11)bit10表示MDIX状态。
  • 寄存器AUX_CTL(地址0x12)bit15表示AUTO-MDIX使能
  • 当AUTO-MDIX使能被关闭,此时需要通过配置AUX_CTL(地址0x12)bit14来决定MDI或者MDIX模式。

极性修正

FEPHY核可以自动检测和修正接收双绞线的极性(+/-)。

寄存器LINK_AN(地址0x11)bit[15:12]可表示当前接收双绞线的极性状态。

PHY地址

FEPHY核拥有唯一的5bits位宽PHY地址,PHY地址的修改支持两种模式:

  • 上电初始化修改

    PHY上电或者复位前通过配置寄存器PERI_FEPHY[4:0],使PHY在初始化时进行采样。

  • 在线修改

    上电后可以通过修改寄存器PHY ADDRESS(地址0x1f)bit[4:0]来重新定义PHY地址。

MII Isolate

在Isolate模式下,FEPHY核自协商功能将被关闭,但仍然可以通过MDIO接口控制。相关配置方法如下:

  • 配置0x1至寄存器BMCR(地址0x00)bit10可进入Isolate模式。
  • 寄存器BMCR(地址0x00)中的SPEED[1:0]控制当前的模式。

Power Down模式

当FEPHY进入Power Down模式后,内部电路除了管理接口(MDC/MDIO)将全部下电。这种模式下FEPHY核的功耗最小。配置方法如下:

配置0x1至寄存器BMCR(地址0x00)bit11可进入Power Down模式。

拓展寄存器访问

专用拓展寄存器访问模式

FEPHY核包含了除IEEE定义的32个基本寄存器外的拓展寄存器。这些拓展寄存器放在拓展寄存器空间,需要通过基本寄存器的“拓展寻址”方式访问。访问流程如下:

  1. 配置PHY进入Power Down模式,确保内部动作不会影响对寄存器的操作。
  2. 将需要访问的寄存器地址写入寄存器EXPMA(地址0x1e),若为写操作则跳至步骤 3,若为读操作则跳至步骤 4。
  3. 将需要写入的数据写入寄存器EXPMD(地址0x1d)。
  4. 读取寄存器EXPMD(地址0x1d)。
  5. 配置PHY脱离Power Down模式,访问结束。

Clause22拓展寄存器访问模式

Clause22标准又定义一种扩展模式,由寄存器MACR(地址0xD)和寄存器MAADR(地址0xE)来实现。

访问流程如下:

  1. 配置寄存器MACR Function域为0x00选择address,将期望操作的MMD地址写入DEVAD域。
  2. 将期望操作的MMD寄存器的地址写入寄存器MAADR。
  3. 配置寄存器MACR Function域为0x00选择Data, no post increment,将期望操作的MMD地址写入DEVAD域。若为写操作则跳至步骤 4,若为读操作则跳至步骤 5。
  4. 将期望的数据写入寄存器MAADR,操作结束。
  5. 读取寄存器MAADR获取数据,操作结束。

FEPHY_BASE寄存器概览

FEPHY_BASE寄存器概览如表1所示。

说明:

寄存器通过MDIO接口访问。

表 1 FEPHY_BASE寄存器概览

偏移地址

名称

描述

0x00

BMCR

基本模式控制寄存器

0x01

BMSR

IEEE基本MII状态寄存器

0x02

OUI_1

IEEE PHY标识1寄存器

0x03

OUI_2

IEEE PHY标识2寄存器

0x04

ANAR

IEEE自协商发送寄存器

0x05

ANLPAR

IEEE自协商接收寄存器

0x06

ANER

IEEE自协商扩展寄存器

0x0D

MACR

拓展控制寄存器

0x0E

MAADR

拓展地址数据寄存器

0x11

LINK_AN_SR

连接和自协商状态寄存器

0x12

AUX_CTL

辅助控制寄存器

0x1D

EXPMD

扩展访问数据寄存器

0x1E

EXPMA

扩展访问地址寄存器

0x1F

PHY_ADDRESS

广播地址寄存器

FEPHY_BASE寄存器描述

BMCR

BMCR为基本模式控制寄存器。

Offset Address: 0x00 Total Reset Value: 0x3100

Bits

Access

Name

Description

Reset

[15]

RWSC

mr_reset

复位。

0:正常工作模式;

1:初始化软复位/工作中复位。

注意:该比特用来设置PHY的状态和控制寄存器为其默认状态。该比特是自清零的,当复位进程未完成时,其返回值保持为1(复位持续时间约1.2ms)。一旦自协商进程已开始或者设备进入其强制模式,复位就完成了。

0x0

[14]

RW

mr_loopback

环回使能。

0:正常工作模式;

1:环回使能。

环回功能使MII/GMII发送的数据能够传送到MII/GMII的接收数据路径。数据在发送模块和接收模块之中的DAC/ADC子系统之间循环流动。环回模式能够检测发送机和接收机的PHY内部的大多数信号路径。

0x0

[13]

RW

mr_speed_0

速率选择。

当自协商不使能时,mr_speed_0将根据下面的表格对设备的速率进行强制设置。

mr_speed_0[1:0]

00:10 Mbps;

01:100 Mbps;

10:保留;

11:保留。

注意:当自协商被使能,该位不起作用。mr_speed_0[1:0]由HA_CONTROL[6]和LA_CONTROL[5]组成。

0x1

[12]

RW

mr_an_enable

自协商使能。

0:自协商不使能;

1:自协商使能。

0x1

[11]

RW

mr_power_down

省电模式使能。

0:正常工作模式;

1:省电模式(仅MDIO接口正常工作)。

0x0

[10]

RW

mr_isolate

隔离使能。

0:正常工作模式;

1:当该比特被置位时,GPHY核不响应MAC数据传输。隔离模式也将PHY置为省电模式,所有的媒介操作被中断。

0x0

[9]

RWSC

mr_restart_an

重启自协商使能。

0:正常工作模式;

1:重启自协商进程,初始化自协商。如果自协商不使能,该比特无效。自协商被启动后,该比特自清零,初始化中其返回值保持为1。将该比特清零不会影响自协商进程。

0x0

[8]

RW

mr_duplex

双工模式。

0:半双工操作;

1:全双工操作。

注意:当自协商使能时,该比特无效

0x1

[7]

RW

mr_col_test

冲突测试。

0:正常工作模式;

1:冲突测试使能。

0x0

[6]

RW

mr_speed_1

速率选择。

当自协商不使能时,mr_speed_1将根据下面的表格对设备的速率进行强制设置。

mr_speed_1[1:0]

00:10 Mbps;

01:100 Mbps;

10:保留;

11:保留。

注意:当自协商被使能,该位不起作用。mr_speed_1[1:0]由HA_CONTROL[6]和LA_CONTROL[5]组成。

0x0

[5:0]

RW

ieee_reserved

保留,写无效,读为零。

注意:所有保留位都为写无效,读为零,后面不再描述。

0x00

BMSR

BMSR为IEEE基本MII状态寄存器。

Offset Address: 0x01 Total Reset Value: 0x7849

Bits

Access

Name

Description

Reset

[15]

RO

base_t4_100

支持百兆BASE-T4模式。

0:不支持;

1:支持。

注意:复位值为1表明芯片支持此种工作模式,为0则不支持。

0x0

[14]

RO

base_xfd_100

支持全双工百兆BASE-TX模式。

0:不支持;

1:支持。

0x1

[13]

RO

base_xhd_100

支持半双工百兆BASE-TX模式。

0:不支持;

1:支持。

0x1

[12]

RO

base_fd_10

支持全双工十兆BASE-T模式。

0:不支持;

1:支持。

0x1

[11]

RO

base_hd_10

支持半双工十兆BASE-T模式。

0:不支持;

1:支持。

0x1

[10]

RO

base_t2fd_100

支持全双工十兆BASE-T2模式。

0:不支持;

1:支持。

0x0

[9]

RO

base_t2hd_100

支持半双工十兆BASE-T2模式。

0:不支持;

1:支持。

0x0

[8]

RO

extended_status

支持千兆BASE-T扩展状态寄存器。

0:不支持;

1:支持。

0x0

[7]

RO

reserved

保留。

0x0

[6]

RO

mr_preamble_suppress

前导限制使能。

1:PHY复位后,仅需要收到一次32bit的前导,就能够进行正常传输。

0x1

[5]

RO

mr_an_complete

自协商完成标志。

0:自协商未完成;

1:自协商完成。

0x0

[4]

RO

mr_rem_fault

远端错误检测标志。

0:未检测到远端错误;

1:检测到远端错误。

注意:读取或复位都会将此位清零。

0x0

[3]

RO

mr_an_capable

允许自协商使能标志。

0:不允许自协商使能;

1:允许自协商使能。

0x1

[2]

RO

mr_link_up

连接状态标志。

0:自上次读取此寄存器后连接错误;

1:自上次读取此寄存器后连接正常。

注意:连接丢失时会将此位清零。读取此寄存器时连接正常,将此位置设置为1。

0x0

[1]

RO

mr_jabber

jabber检测。

0:未检测到jabber冲突;

1:检测到jabber冲突。

注意:10BASE-T模式下检测到jabber将此位置设置为1。

0x0

[0]

RO

mr_extended_status

千兆BASE-T扩展状态寄存器使能。

0:不使能;

1:使能。

0x1

OUI_1

OUI_1为IEEE PHY标识1寄存器。

Offset Address: 0x02 Total Reset Value: 0x2066

Bits

Access

Name

Description

Reset

[15:0]

RO

oui_msb

唯一官方标识高16bit。

0x2066

OUI_2

OUI_2为IEEE PHY标识2寄存器。

Offset Address: 0x03 Total Reset Value: 0x9903

Bits

Access

Name

Description

Reset

[15:10]

RO

oui_lsb

唯一官方标识低6bit。

0x26

[9:4]

RO

mmn

制造商型号。

0x10

[3:0]

RO

revision

版本号。

0x3

ANAR

ANAR为IEEE自协商发送寄存器。

Offset Address: 0x04 Total Reset Value: 0x01E1

Bits

Access

Name

Description

Reset

[15]

RW

mr_an_adv_np

下页指示。

0:不支持下页传输;

1:支持下页传输。

0x0

[14]

-

reserved

保留。

0x0

[13]

RW

mr_an_adv_rf

远端错误标志。

0:未检测到Remote错误;

1:检测到Remote错误。

0x0

[12:11]

-

reserved

保留。

0x0

[10]

RW

mr_pause

停止控制。

0:不支持MAC/controller帧传输中断;

1:支持MAC/controller帧传输中断。

0x0

[9]

RW

mr_t4_ability

支持百兆BASE-T4模式。

0:不支持;

1:支持。

0x0

[8]

RW

mr_tech_ability_100_fd

支持全双工百兆BASE-TX模式。

0:不支持;

1:支持。

0x1

[7]

RW

mr_tech_ability_100_hd

支持半双工百兆BASE-TX模式。

0:不支持。

1:支持;

0x1

[6]

RW

mr_tech_ability_10_fd

支持全双工十兆BASE-T模式。

0:不支持;

1:支持。

0x1

[5]

RW

mr_tech_ability_10_hd

支持半双工十兆BASE-T模式。

0:不支持;

1:支持。

0x1

[4:0]

RW

mr_selector_field

IEEE 802.3定义的协议选择域,值为 0x01表明芯片支持IEEE802.3。

0x01

ANLPAR

ANLPAR为IEEE自协商接收寄存器。

Offset Address: 0x05 Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15]

RO

next_page

下页指示。

0:link partner不支持下页传输;

1:link partner支持下页传输。

0x0

[14]

RO

acknowledge

远端接收响应标志。

0:未响应;

1:Link Partner响应接收。

0x0

[13]

RO

remote_fault

Link partner远端错误标志。

0:未检测到Remote错误;

1:检测到Remote错误。

0x0

[12]

-

reserved

保留。

0x0

[11]

RO

asymmetricalpause

Link partner支持不对称暂停。

0:不支持;

1:支持。

0x0

[10]

RO

pause

Link partner支持帧暂停。

0:不支持;

1:支持。

0x0

[9]

RO

lp_base_t4_100

link partner支持百兆BASE-T4模式。

0:不支持;

1:支持。

0x0

[8]

RO

base_tx_fd_100

link partner支持全双工百兆BASE-TX模式。

0:不支持;

1:支持。

0x0

[7]

RO

base_tx_100

link partner支持半双工百兆BASE-TX模式。

0:不支持;

1:支持。

0x0

[6]

RO

base_tx_fd_10

link partner支持全双工十兆BASE-TX模式。

0:不支持;

1:支持。

0x0

[5]

RO

base_tx_10

link partner支持半双工十兆BASE-TX模式。

0:不支持;

1:支持。

0x0

[4:0]

RO

lp_selector_filed

link partner IEEE 802.3定义的选择域,值为0x01表明芯片支持IEEE802.3。

0x00

ANER

ANER为IEEE自协商扩展寄存器。

Offset Address: 0x06 Total Reset Value: 0x0004

Bits

Access

Name

Description

Reset

[15:5]

-

reserved

保留。

0x000

[4]

RO

mr_exp_pdf

并行错误检测。

0:未检测到错误;

1:检测到错误。

0x0

[3]

RO

mr_exp_lp_np_able

link partner支持下页协商。

0:不支持;

1:支持。

0x0

[2]

RO

mr_exp_np_able

支持下页协商。

0:不支持;

1:支持。

0x1

[1]

RO

mr_exp_page_rx

连接码字接收。

0:未接收到连接字;

1:接收到连接字。

0x0

[0]

RO

mr_exp_la_an_enable

link partner支持自协商。

0:不支持;

1:支持。

0x0

MACR

MACR为拓展控制寄存器。

Offset Address: 0x0D Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15:14]

RW

function

拓展寄存器Function域。

00:MAADR寄存器地址操作;

01:MAADR寄存器数据操作;

其他:保留。

0x0

[13:5]

-

reserved

保留。

0x000

[4:0]

RW

devad

Device地址。

0x00

MAADR

MAADR为拓展地址数据寄存器。

Offset Address: 0x0E Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15:0]

RW

address_data

DEVICE的地址寄存器或数据寄存器。

0x0000

LINK_AN_SR为连接和自协商状态寄存器。

Offset Address: 0x11 Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15:12]

RO

tp_polarity_3_0

bit7-bit4分别表明A到D线对的极性。

0:极性正常;

1:极性反转。

0x0

[11]

RO

power_down_status

端口当前上下电状态。

0:端口未处于下电状态;

1:端口处于下电状态。

0x0

[10]

RO

mdix_status

内部cross over状态。

0:无内部cross over;

1:内部cross over激活。

0x0

[9]

RO

fifo_error

发送FIFO是否发生溢出或underrun。

0:正常状态;

1:发送FIFO发生溢出或underrun。

0x0

[8]

RO

power_on_init_in_progress

上电过程是否完成标志。

0:上电过程完成;

1:上电过程未完成。

0x0

[7]

RO

shallow_loopback_status

shallow环回使能状态。

0:shallow环回不使能;

1:shallow环回使能。

0x0

[6]

RO

deep_loopback_status

deep环回使能状态。

0:deep环回不使能;

1:deep环回使能。

0x0

[5]

RO

non_compliant_mode_status

当前compliant模式状态。

0:工作在ieee-compliant模式;

1:工作在1000-BASE non-compliant模式。

0x0

[4:3]

RO

speed_status

实时速率显示。

Speed[1:0]

00:10 Mb/s

01:100 Mb/s

10:Reserved

11:Reserved

0x0

[2]

RO

link_status

实时连接显示。

0:未连接;

1:连接上。

0x0

[1]

RO

duplex_status

实时双工状态显示。

0:半双工;

1:全双工。

0x0

[0]

RO

config_status

主从状态。

0:从状态;

1:主状态。

0x0

AUX_CTL

AUX_CTL为辅助控制寄存器。

Offset Address: 0x12 Total Reset Value: 0x9000

Bits

Access

Name

Description

Reset

[15]

RW

auto_mdix_enable

MDIX模式选择。

0:手动MDIX模式;

1:自动MDIX模式。

0x1

[14]

RW

mdix_manual

直连或交叉线缆选择。

0:straight线缆;

1:cross-over线缆。

0x0

[13]

-

reserved

保留。

0x0

[12]

RW

loopback_10b_disable

10BASE半双工模式环回使能。

0:使能;

1:不使能。

0x1

[11]

RW

force100

强制100M连接模式。

0:正常模式;

1:强制100M连接模式。

0x0

[10]

RW

force10

强制10M连接模式。

0:正常模式;

1:强制10M连接模式。

0x0

[9]

-

reserved

保留。

0x0

[8]

RW

en_ext_loop_detect

外部环回检测使能。

0:不使能;

1:使能。

0x0

[7:0]

-

reserved

保留。

0x00

EXPMD

EXPMD为扩展访问数据寄存器。

Offset Address: 0x1D Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15:0]

RW

exp_data_msb

扩展访问的数据寄存器。

0x0000

EXPMA

EXPMA为扩展访问地址寄存器。

Offset Address: 0x1E Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15:0]

RW

exp_addr_msb

扩展访问的地址寄存器。

0x0000

PHY_ADDRESS

PHY_ADDRESS为广播地址寄存器。

Offset Address: 0x1F Total Reset Value: 0x0000

Bits

Access

Name

Description

Reset

[15:13]

-

reserved

保留。

0x0

[12:8]

RW

broadcast_address

广播使能时,广播访问的地址。

0x00

[7:5]

-

reserved

保留。

0x0

[4:0]

RW

phyaddress

确定SM访问的端口地址。

0x00