一、开发板上的原理图
从原理图上看,只有一个RJ45插座和一个RTL8211FD芯片,以及一个125Mhz的时钟信号。芯片之间的连接,RJ45插座会有4对差分线连接到RTL8211FD,
还有两个led也连接到了RTL8211FD。RTL8211的时钟输入为125Mhz,接收和发送都有4根传输线,1根CTL,1根XC,其他的控制线:MDIO,MDC,RST,CLK。
工程项目中的引脚:
output wire phy_reset,
input [3:0] PHYA_rgmii_rxd,
input PHYA_rgmii_rx_ctl,
input PHYA_rgmii_rxc,
output wire[3:0] PHYA_rgmii_txd,
output wire PHYA_rgmii_tx_ctl,
output wire PHYA_rgmii_txc,
二、在VIVADO2017.4中配置IP核
Tri Mode Ethernet Mac设置
1、Data Rate:千兆网,速率设置成1Gbps
2、Interface:RGMII 1000Mbps AXI4-Lite 125Mhz
将 AXI-Lite 接口的时钟设为与 user_clk2 频率相同,即 125MHz,这样可以使用同一个时钟源。
在设计中不使用 MDIO,因此不使能 MDIO 接口。
3、之后两页直接默认即可
三、IP核内部的时钟网络
IP 核内部时钟网络结构如下图所示。其中, tx_mac_aclk 为 AXI-Stream 发送接口的同步时钟,rx_mac_aclk 为 AXI-Stream 接收接口的同步时钟。由于在设计中没有使用 MDIO 接口,所以不存在时钟信号 mdc。
gtx_clk 为 IP 核工作的全局时钟源,频率 125MHz。 s_axi_aclk 为 AXI-Lite 接口的同步时钟。其余时钟 refclk、 gtx_clk90 等均与 GMII、 RGMII 接口与外部 PHY 芯片连接有关,由于设计中 IP 核与 1G/2.5G Ethernet PCS/PMA or SGMII 连接。因此,不需要使用这些时钟。
四、使用AXI——STREAM接收和发送数据
aclk,tdata【7:0】,tvalid,tlast,tuser,在传输数据的时候,tvalid信号一直为高电平,当传输到最后一个数据,tlast信号拉高,然后置零,同时tvalid也置零。
发送相比接收就多了一根tready信号,只有当tready为1并且tvalid为1才发送数据。
四、使用AXI-Lite接口
除此之外, 还可以直接通过 MDIO 接口配置外部 PHY 芯片或者 1G/2.5G Ethernet PCS/PMA or SGMII IP 核的寄存器。由于 MDIO 没有使用。因此, AXI-Lite 接口主要用于 IP 核设置,可参考PG051.
五、复位接口
其中 glbl_rstn 为全局复位信号,用于复位整个 IP 核。 rx_axi_rstn 和 tx_axi_rstn 分别用于单独复位接收和发送部分的逻辑,一般无需使用。在例程中,将 rx_axi_rstn 和 tx_axi_rstn 都被恒置为 1。
tx_reset 和 rx_reset 分别用于表示 IP 核的发送和接收部分逻辑的复位状态,根据这两个信号可以判断 IP 核是否处于复位状态。这两个信号需要配合 AXI-Stream 接收和发送接口的同步时钟信号tx_mac_aclk 和 rx_mac_aclk 进行使用,这是因为可能当 tx_reset 和 rx_reset 由 1 变为 0 时, IP核才会输出 tx_mac_aclk 和 rx_mac_aclk。对于使用 tx_mac_aclk 和 rx_mac_aclk 作为同步时钟的逻辑,复位信号必须以 tx_reset 和 rx_reset 作为基准,避免出现复位无效的情况。对此,在例程中给出了参考设计。
六、工程分析
按键按下就变成低电平,在源码中,将输入的按键值取反作为全局的复位(高电平复位reset),然后通过一个计数器,将phy芯片的复位拉高,再就是使用一个CLK_WIZ,输入50mhz,输出15.625Mhz,200Mhz(作为Tri Mode的参考时钟),125Mhz(gtx_clk),25Mhz(用于phy复位计数时钟)。
Tri Mode将125Mhz,8bit的数据先转换成125Mhz,64bit(使用AXI4-Stream Data Width Converter)
然后再转换成15.625Mhz,64bit(使用AXi4-Stream Data FIFO,异步FIFO)
然后再使用AXi4-Stream Data FIFO,同步FIFO,输出15.624mhz,64bit信号
输入到udp_ip_protocol_stack(这个使用的是dcp,而一般的ip核使用的是xci)
最后就是udp_packed_fifo