管理接口状态机分析(二)
该模块的具体执行步骤:
1. (STARTUP)启动状态机,配置MIDO时钟,对核操作
输入的复位信号“s_axi_resetn”是低电平复位,在本模块首先做了取反操作。
在复位结束后延时21个时钟周期启动状态机,并对配置MDIO寄存器(0x500)写入0x58对核支持的MIDO进行配置。配置为2M。
2. (UPDATE_SPEED)配置以太网速率,对核操作
对寄存器地址“17'h410”写入“{speed, 30'h0}”,
3. (MDIO_RD)读MDIO,对PHY操作
读寄存器地址1的内容,具体内容可见88E111数据手册的131页介绍。
4. (MDIO_POLL_CHECK)对读PHY数据进行检查
a) 如果均是1,则认为没有管理接口,直接开始对MAC进行复位操作
b) 否则认为有MIDO管理接口,进行对相应配置
我们这里认为是有管理接口的
5. (MDIO_1G)写MIDO寄存器,对PHY的管理接口操作
写MDIO地址9的地址空间,具体内容可见88E111数据手册的155页介绍,是对1000M全半双工的配置。
其中,bit9 = 1表示1000M全双工
6. (MDIO_10_100)写MIDO寄存器,对PHY的管理接口操作
由于PHY芯片的MIDO管理接口的寄存器堆网口速率的配置是在不同地址,对于FPGA用一个2bit的speed即可配置三种速率(00=10Mb/s,01=100Mb/s,10 =1Gb/s)。但对于MIDO则需要写两个地址的寄存器。
又由于事先并不知“speed”的值,或者说不对该值进行判断。故还需要对配置10M或100M的寄存器写值,当然写入的值是与写入1000M的内容是互斥的,并不会混淆。
写MDIO的PAGE0的地址4的地址空间,具体内容可见88E111数据手册的137页介绍,是对10M、100M全半双工的配置。
7. (MDIO_PAGE2)换页,写MIDO寄存器,对PHY的管理接口操作
8. (MDIO_DELAY_RD)换页,读MIDO寄存器,对PHY的管理接口操作
写MDIO地址15的地址空间,具体内容可见88E111数据手册的158页介绍,
9. (MDIO_DELAY_RD)换页,读MIDO寄存器,对PHY的管理接口操作
10. (MDIO_DELAY_RD_POLL)
锁存读出的数据,为下一周期的写做准备。
11. (MDIO_DELAY)
没看懂
12. (MDIO_RESTART)写MIDO寄存器,对PHY的管理接口操作
这个模块可以选择回环模式,通过“phy_loopback”来设置,目前先不考虑
对MIDO的地址0写数据,数据内容跳过
13. (MDIO_STATS)读MIDO寄存器,对PHY的管理接口操作
读寄存器地址1的内容,用来得到自动协商完成的信号
14. (MDIO_STATS_POLL_CHECK)读MIDO寄存器,对PHY的管理接口操作
如果自动协商操作完成则进入下一个状态,否则等待
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我