以太网PHY芯片MDIO寄存器读写-verilog

本文详细介绍了如何在Xilinx FPGA中利用VIO核实现MDIO(Management Data Input/Output)接口的读写操作。通过时序分析和状态机设计,阐述了MDIO接口的基本功能和读写流程。在实际应用中,可以监控网络连接状态,并通过串口进行读写控制。验证方法包括写PHY寄存器进行复位和读取连接状态来检查功能正确性。
摘要由CSDN通过智能技术生成

MDIO实现还是比较简单的,应用xilinx FPGA内的VIO核就可以直接读写查看,如果板子有串口,做个简单的处理就可以直接通过电脑读写。
时序如下图所示,将下面时序实现就可以实现读写,在实际应用时基本不需要配置,有特殊需求可以做一些应用,比如要监控网络是否掉线等
时序
对外接口:

	input							clk_i,	
	input							rst_n,	
	output							MDC_o,	
	input							MDIO_i,
	output reg 						MDIO_o,
	input		[ 4:0]				Phy_addr, //00111
	input		[ 4:0]				Reg_addr, //00000
	input   	[15:0]				Reg_data_i,
	output reg	[15:0]				Reg_data_o,
	input							Op_sw,			// 0 rd  1 wr
	input 							Op_enable,		// 1 enable
	output reg 						Op_sw_r

op_sw 通过VIO提前输入读或写
op_enable 外部触发,也是通过VIO active-high button 但是这个电平会持续一段时间,最好是内部做判断上升沿处理,用串口读写拉高一个电平就可以。
op_sw_r 使用在TA状态后如果是读就控制inout接口为in状态,也就是拉成高阻,读引脚电平
其他的接口就是变量名的意思

状态机跳转:

always @(*) begin
    case (cstate)
        idle: 	nstate<= (Op_enable) ? leading : idle;
		leading:nstate<= (State_turn)? WR_Addr : leading;
		WR_Addr:nstate<= (State_turn)? TA_wait : WR_Addr;
        TA_wait:nstate<= (Op_sw)	 ? WR_data : Rd_data; 
		WR_data:nstate<= (State_turn)? delay   : WR_data; 
		Rd_data:nstate<= (State_turn)? delay   : Rd_data; 
		delay:	nstate<= (State_turn)? idle    : delay;
        default: nstate <= idle;
    endcase
end	

MDIO只需要照着时序撸就可以,只需区分一下读和写,写比较简单,一直按时序写就行,读只需在TA状态将mido拉到高阻,然后读引脚电平就可以。
实验结果:
vio
验证写的话,找到寄存器里面控制PHY复位那bit写一下就行,读的话可以读读连接状态,看看是不是1000BASE-T

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值