当前位置:   article > 正文

基于FPGA的百兆以太网通信(一)——MDIO配置PHY芯片

基于FPGA的百兆以太网通信(一)——MDIO配置PHY芯片

 一、以太网简介

  之前提了个引子,接下来我会分享一下基于FPGA的百兆以太网通信学习过程。第一部分是对于以太网PHY芯片的配置和状态读取。

  一般来说,FPGA以太网通信是需要外接的PHY芯片的,目前的很多FPGA出厂的底板上已经焊好了PHY芯片,所以这一点是比较方便的。PHY芯片的内部有着很复杂的逻辑和构造,我不懂,这里也不说了,感兴趣的兄弟自己查。

  以太网通信需要网线,FPGA以太网通信实际上是FPGA和PHY芯片通信,符合一定的时序和协议,PHY芯片将数据传出和上位机通信。下面给出RTL8201FPHY芯片的管脚图

05f17e72f66545c7a187084bea69ff8a.png

 这里的引脚很多,我们目前只关注两个,MDIO和MDC,这两个是配置引脚,用于配置PHY芯片的寄存器,类似于前面说的摄像头,同时也可以读取其中寄存器的数据。

  将FPGA的网口和上位机(如PC)连接后,FPGA的PHY芯片会和上位机进行协商最后形成一个通信速率。假如PHY只支持最高100Mbps通信,而另一端是千兆网口,那么协商速率就是100Mbps。总之会以比较慢的那一段作为标准。当然也可以通过修改寄存器的数据来调整通信速率。比如协商结果是100Mbps,可以改为10Mbps。常用的速率就是100和1000Mbps。

二、实验目标

  PHY芯片内部有两个比较重要的数值,第一个是协商的结果,第二个是连接的状态,下面就展开实验读取PHY芯片内部这两个数据。

三、接口分析

  上面提到的MDC和MDIO,MDC是配置的时钟,可以看做IIC里的SCL,MDIO是双向端口,用于传输数据。结构上MDIO和IIC很像。下面是时序图f52ef88a284843339ba487cd602e6a4d.png

   时序上看和SPI很像,MDIO在每一个MDC的上升沿传输数据,下降沿发生数据转换。上图中可以看出协议的格式,如下图所示

31a419da33bf42aab399727dcb7bd11f.png

   先发32位的前导码preamble,全为1。接着是开始字段,2'b01。操作码,两位,根据是要写还是要读区分。PHY地址(这里需要解释一下,这个好像只是在连接多个PHY芯片的时候才有,用于区分不同的PHY芯片,如果只有一个,默认5'b0,以上是我个人分析,我也不太懂,我查看的教程都说在原理图上可以看出来,但是也没具体说怎么看)。接着是寄存器地址,在手册上查看。TA转换字段,这个我不太懂,就按照手册上写的,如果是读的话就是2'bz0,写的话就是2'b10,最后是十六位数据,最后又回到初始状态。

  协商结果在第一个寄存器里面

bc7020dc86f2467481f782b0bd1139a7.png

 第13位的speed就是协商结果。

  连接状态在第二个寄存器里面

642a8a09d668414189f48396b842be75.png

   第二位就是连接状态。

  最后一点就是MDIO跑不了太高的频率,这里我用的是50k的MDC。

四、代码

  1. module mdio_ctrl(
  2. input wire mdc ,
  3. input wire start ,
  4. input wire sys_rst_n ,
  5. input wire [31:0] preamble ,
  6. input wire [1:0] st ,
  7. input wire [1:0] op ,
  8. input wire [4:0] phy_add ,
  9. input wire [4:0] reg_add ,
  10. input wire [1:0] ta ,
  11. output reg speed ,
  12. output reg status ,
  13. output reg ready ,
  14. output wire mdio_en ,
  15. inout wire mdio ,
  16. output wire [7:0] satate
  17. );
  18. reg
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/950423
推荐阅读
相关标签
  

闽ICP备14008679号