PHY_MDIO 接口設計

在以太網通訊中,設備之間的物理局鏈路均由 PHY 芯片創建。PHY 芯片內部含有一些列寄存器,用戶可經過這些寄存器來配置 PHY 芯片的工做模式以及獲取 PHY 芯片的若干狀態信息,如鏈接速率、雙工模式、自協商狀態等。PHY 內部寄存器的讀寫經過 MDIO 接口進行。
web

8.5.2.1 MDIO 接口微信

MDIO 接口由數據傳輸時鐘 MDC 和雙向數據信號 MDIO 組成,以下圖所示app

833 MDIO接口ide

MDIO 爲雙向接口,在 PHY 芯片外部須要鏈接上拉電阻, 1 個 MDIO 接口能夠同時鏈接多個 PHY 芯片。因爲 MDIO 協議中 PHY 芯片地址的位寬爲 5bit,所以, 1 個 MDIO 接口最多能夠同時鏈接 32 個PHY 芯片。字體

89 MDIO接口通訊協議flex

Preambleui

Starturl

Opcodespa

PHY address.net

Register address

Turn-around

Register data

Idle

32bit 1

01

Read:10

Write:01

5bit

5bit

Read:z0

Write:10

16 bit

z

MDIO的寄存器讀時序波形以下圖所示。

834 MDIO的寄存器讀時序波形

MDIO的寄存器寫時序波形以下圖所示。

835 MDIO的寄存器寫時序波形

8.5.2.2 PHY關鍵參數

通常的PHY芯片最高可支持15Mhz的MDC時鐘,本例程中使用了10Mhz的頻率。

(1)PHY芯片地址

通常的PHY地址都是能夠經過硬件進行設置,查看相關原理圖就能夠肯定。

(2)控制寄存器

通常的PHY中地址爲0x00的寄存器可用於芯片的復位以及其餘功能的控制。本例程中用到了其中的bit9,用於使芯片從新進行自協商。寄存器描述以下圖所示。

836 0x00的寄存器

(3)狀態寄存器

通常PHY中地址爲0x19的寄存器反映了芯片當前的狀態。本例程中用到了bit15,bit10~8,bit2,用於判斷芯片自協商、鏈接速率、雙工狀態等信息。寄存器描述以下圖所示。

837 0x19的寄存器

8.5.2.1 模塊設計

(一)模塊結構

MDIO接口模塊結構以下圖所示,由模塊mdio_top及其子模塊mdio_control組成。

838 MDIO接口模塊結構

(二)模塊接口

(1)mdio_top模塊

mdio_top模塊各接口定義以下表所示。

810 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模塊各接口定義以下表所示。

811 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芯片的寄存器的寫入和讀取。本模塊的工做狀態機以下圖所示。

839 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接口的方向。

本模塊的工做狀態機以下圖所示。

840 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視頻教程



點擊上方字體便可跳轉閱讀喲



本文分享自微信公衆號 - OpenFPGA(OpenFPGA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索