前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHY_MDIO 接口设计

PHY_MDIO 接口设计

作者头像
碎碎思
发布2020-06-30 10:35:50
2.8K0
发布2020-06-30 10:35:50
举报
文章被收录于专栏:OpenFPGAOpenFPGA

在以太网通信中,设备之间的物理局链路均由 PHY 芯片建立。PHY 芯片内部含有一些列寄存器,用户可通过这些寄存器来配置 PHY 芯片的工作模式以及获取 PHY 芯片的若干状态信息,如连接速率、双工模式、自协商状态等。PHY 内部寄存器的读写通过 MDIO 接口进行。

8.5.2.1 MDIO 接口

MDIO 接口由数据传输时钟 MDC 和双向数据信号 MDIO 组成,如下图所示

图8‑33 MDIO接口

MDIO 为双向接口,在 PHY 芯片外部需要连接上拉电阻, 1 个 MDIO 接口可以同时连接多个 PHY 芯片。由于 MDIO 协议中 PHY 芯片地址的位宽为 5bit,因此, 1 个 MDIO 接口最多可以同时连接 32 个PHY 芯片。

表8‑9 MDIO接口通信协议

Preamble

Start

Opcode

PHY address

Register address

Turn-around

Register data

Idle

32bit 1

01

Read:10Write:01

5bit

5bit

Read:z0Write:10

16 bit

z

MDIO的寄存器读时序波形如下图所示。

图8‑34 MDIO的寄存器读时序波形

MDIO的寄存器写时序波形如下图所示。

图8‑35 MDIO的寄存器写时序波形

8.5.2.2 PHY关键参数

一般的PHY芯片最高可支持15Mhz的MDC时钟,本例程中使用了10Mhz的频率。

(1)PHY芯片地址

一般的PHY地址都是可以通过硬件进行设置,查看相关原理图就可以确定。

(2)控制寄存器

一般的PHY中地址为0x00的寄存器可用于芯片的复位以及其他功能的控制。本例程中用到了其中的bit9,用于使芯片重新进行自协商。寄存器描述如下图所示。

图8‑36 0x00的寄存器

(3)状态寄存器

一般PHY中地址为0x19的寄存器反映了芯片当前的状态。本例程中用到了bit15,bit10~8,bit2,用于判断芯片自协商、连接速率、双工状态等信息。寄存器描述如下图所示。

图8‑37 0x19的寄存器

8.5.2.1 模块设计

(一)模块结构

MDIO接口模块结构如下图所示,由模块mdio_top及其子模块mdio_control组成。

图8‑38 MDIO接口模块结构

(二)模块接口

(1)mdio_top模块

mdio_top模块各接口定义如下表所示。

表8‑10 mdio_top模块接口定义

接口名称

信号方向

接口说明

clk

input

输入参考时钟

reset

input

模块全局复位信号,高电平有效

mdio_en

input

MDIO接口使能信号,高电平有效

link_ok[1:0]

output

2个PHY芯片链路状态正常指示信号,高电平有效

mdc

output

MDIO接口mdc时钟信号

mdio

inout

MDIO接口mdio双向数据信号

(2)mdio_control模块

mdio_control模块各接口定义如下表所示。

表8‑11 mdio_control模块接口定义

接口名称

信号方向

接口说明

mdc_clk

input

输入参考时钟

reset

input

模块全局复位信号,高电平有效

mdio_write_en

input

MDIO接口写寄存器使能信号,高电平有效

mdio_read_en

input

MDIO接口读寄存器使能信号,高电平有效

phy_address[4:0]

input

PHY芯片地址

register_address[4:0]

input

需要读或写的寄存器地址

mdio_write_done

output

写寄存器完成指示信号

mdio_read_done

output

读寄存器完成指示信号

write_register_data[15:0]

input

通过MDIO接口写入PHY芯片的寄存器值

read_register_data[15:0]

output

通过MDIO接口从PHY芯片读取的寄存器值

mdc

output

MDIO接口mdc时钟信号

mdio

inout

MDIO接口mdio双向数据信号

(三)模块原理

(1)mdio_top模块

本模块主要完成PHY芯片状态监控和配置,并控制子模块mdio_control完成2个PHY芯片的寄存器的写入和读取。本模块的工作状态机如下图所示。

图8‑39 mdio_top模块工作状态机

IDLE状态

本模块复位后随即进入本状态。在本状态,本模块等待外部模块输入MDIO启动信号mdio_en拉高,若接收到启动信号为1,则进入READ PHY STATUS状态,否则在本状态循环。

READ PHY STATUS状态

在本状态时,本模块向子模块mdio_control发送所要读取的PHY芯片地址phy_address和寄存器地址register_address,并将mdio_read_en使信号置1,使能mdio_control模块接收数据,随后进入WAIT AUTO NEG DONE状态。在本例程中,读取的为1.2.2节中所述地址为0x19的状态寄存器的bit15,bit10~8,bit2。该寄存器包含了当前以太网链路的连接速率、双工模式、连接状态等信息。

WAIT AUTO NEG DONE状态

在本状态时,本模块等待mdio_control模块返回寄存器读取完成信号mdio_read_done。当寄存器读取完成后,根据寄存器的值判断PHY芯片是否完成自协商,连接速率是否为1000Mbps,且传输模式是否为全双工。若满足上述条件,则将链路状态指示信号link_ok信号置1,并进入DELAY状态;若不满足条件,则将link_ok信号置0,并进入PHY RE AUTO NEG状态。若寄存器未读取完毕则在本状态循环。

PHY RE AUTO NEG状态

在本状态时,本模块向子模块mdio_control发送所需写入的PHY芯片地址phy_address和寄存器地址register_address,并将mdio_write_en使信号置1,使能mdio_control模块发送数据,随后进入DELAY状态。在本例程中,写入的为1.2.1节中所述的地址为0x00的控制寄存器的bit9,使PHY芯片重新进行自协商,重新建立以太网连接。

DELAY状态

在本状态时,本模块进行延时操作,等待以太网链路的重新建立。延时完成后进入READ PHY STATUS状态。该延时值可根据实际需求进行设置。

(2)mdio_control模块

本模块在mdio_top模块的控制下,完成MDIO接口协议的实现,以及PHY芯片相应寄存器的读写操作。

模块中,通过ODDR实现PHY芯片mdc时钟的输出。如下图。

通过IOBUF实现mdio双向端口,如下图。其中mdio_direction用于控制mdio接口的方向。

本模块的工作状态机如下图所示。

图8‑40 mdio_control模块工作状态机

IDLE状态

本模块复位后随即进入本状态。在本状态时,本模块等待mdio_top模块拉高读寄存器使能信号mdio_read_en或写寄存器使能信号mdio_write_en。若读或写使能信号拉高则进入SEND PREAMBLE状态,否则在本状态循环。

SEND PREAMBLE状态

在本状态时,本模块通过MDIO接口发送32bit的MDIO通信前缀“1”,若mdio_top拉高是的读寄存器使能信号,则进入READ REG状态,若为写寄存器使能信号则进入WRITE REG状态。

READ REG状态

在本状态时,本模块根据mdio_top模块输入的PHY芯片地址phy_address和寄存器地址register_address,按照MDIO通信协议从PHY芯片读出相应地址的寄存器值read_register_data,输出至mdio_top模块,同时将读寄存器完成信号mdio_read_done拉高一个时钟周期,随后进入IDLE状态。

WRITE REG状态

在本状态时,本模块根据mdio_top模块输入的PHY芯片地址phy_address、寄存器地址register_address和寄存器值write_register_data,按照MDIO通信协议将配置值写入PHY芯片相应地址的寄存器中,寄存器配置完成后将寄存器配置完成信号mdio_write_done拉高一个时钟周期,随后进入IDLE状态。

这样基于UDP/IP协议的电口通信所有需要的原理就结束了,实例就演示就不演示了,后面工程完善一下后,会开源出来,请大家持续关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档