PHY_MDIO 接口设计
在以太网通信中,设备之间的物理局链路均由 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:10 Write:01 |
5bit |
5bit |
Read:z0 Write: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协议的电口通信所有需要的原理就结束了,实例就演示就不演示了,后面工程完善一下后,会开源出来,请大家持续关注。
推荐阅读
Xilinx原语的用法
例说七层OSI参考模型
TCP/IP模型
TCP和UDP
以太网遵循的IEEE 802.3 标准
媒体访问控制(MAC,Media Access Control)
媒体独立接口(MII,Meida Independent Interface)
GMII、SGMII和SerDes的区别和联系
PHY(Physical Layer,PHY)通俗理解
FPGA实现网口通信的几种方式
千兆网UDP通信
FPGA千兆网TCP通信分析
基于FPGA的网口通信实例设计
基于UDP/IP协议的电口通信(一)
基于UDP/IP协议的电口通信(二)
基于UDP/IP协议的电口通信(三)
一大波HLS设计资料来了
2020版深入浅出玩转FPGA视频教程
点击上方字体即可跳转阅读哟
PHY_MDIO 接口设计相关推荐
- Django博客系统注册(图形验证码接口设计和定义)
1. 准备captcha包(该包用于生成图形验证码) 1.将生成图片验证码的库复制到新建的libs包中. 2.安装Python处理图片的库 这儿可能会变红显示错误: 解决方案:在虚拟环境中安装Pill ...
- 微服务之API网关接口设计
微服务之API网关接口设计 API网关,顾名思义,就是外部到内部的一道门,其主要功能: 服务路由:将前段应用的调用请求路由定位并负载均衡到具体的后端微服务实例,对于前端应用看起来就是1个应用提供的服务 ...
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...
- CPLD/FPGA的UART接口设计之系统时钟(晶振)和波特率关系
UART(UniversalAsynchronous ReceiverTransmitter,通用异步收发器)是一种广泛使用的异步串行数据通信协议.目前大多数MCU.串口通信IC等芯片或模块均支持UA ...
- PHP/TP5 接口设计中异常处理
PHP提供 Exception 类来处理异常 new Exception('错误信息(默认为空)','错误代码(默认0)','异常链中前一个异常') 然后可以通过 e -> getMessage ...
- 【C 语言】文件操作 ( 配置文件读写 | 业务逻辑 | 接口设计 )
文章目录 一.配置文件读写 业务逻辑 二.接口设计 1.写文件接口 2.读文件接口 3.修改文件接口 4.接口合并 一.配置文件读写 业务逻辑 开发一个系统 , 在命令行中实现如下功能 , 通过命令操 ...
- Java后端返回通用接口设计
我印象中,通用返回接口设计是有两种方式,第一种是自定义返回数据的通用类,另一种是springboot中实现ResponseBodyAdvice接口,实现返回数据格式的统一,如我说的有错,请大佬指出.本 ...
- 优秀的API接口设计原则及方法
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
- mysql标准化存储结构_Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结 mysql...
Atitit.自定义存储引擎的接口设计api标准化attilax总结mysql 1.图16.1:MySQL体系结构 存储引擎负责管理数据存储,以及MySQL的索引管理.通过定义的API,MySQL服务 ...
最新文章
- 命令行创建React项目
- react 监听组合键_投资组合中需要的5个React项目
- php 公共的 受保护的,php-不使用$this-gt;调用受保护的属性
- Xcode中的Info.plist字段列表详解
- Jetty和Tomcat的比较
- Position(Static, Absolute, Relative, Fixed)
- java队列等待唤醒_Java深入学习29:线程等待和唤醒的两个方案
- AUTOSAR从入门到精通100讲(四十七)-车载以太网 SOME/IP-SOME/IP的概念
- js 中null,undefined区别
- SQLServer无法使用特殊主体'sa'的解决
- mysql滴的一声就关了_关于mysql数据库在输入密码后,滴的一声直接退出界面的解决办法(详细办法)...
- python获取网页标题_Python2获取网页标题
- Spark的那些外部框架
- 携程中转机票竟然相差23小时
- nfc卡模式与标准模式_干货丨NFC最全解析
- 移动硬盘插入提示需要格式化RAW_内存卡无法格式化解决办法
- C++multimap 003:冷血格斗场
- 为什么大学老师只教c语言,开挂的相声演员:做大学老师,主讲计算机C语言,课堂爆笑不断!...
- 我的第一款(ban)产(cheng)品(pin)——铛铛打卡
- ubuntu16.04安装firefox的flash播放插件