赞
踩
RTL8211芯片内部可以通过TXDLY和RXDLY引脚上下拉分别配置TXC和TXD、RXC与RXD之间是否自动增加2ns延时。
简单来说,FPGA发送时,需要满足RTL8211的TXC和TXD间的建立时间和保持时间;FPGA接收时,需要RTL8211输出的RXC和RXD满足FPGA自身IDDR的建立时间和保持时间。
需要满足RTL8211的TXC和TXD间的建立时间和保持时间。如果FPGA发出的TXC和TXD完全对齐且没有配置TXDLY上拉(即PHY芯片自身没有增加2ns延时),结果是:进入RTL8211的TXC和TXD几乎完全对齐,不能满足RTL8211的时序要求。
在实际应用中,FPGA输出的TXC和TXD完全对齐,将PHY芯片的TXDLY引脚配置为上拉,实际效果是:TXC和TXD存在2ns的延时,为中心对齐状态,满足时序的要求。
- genvar i;
- generate
- for(i=0;i<4;i=i+1)
- begin: rgmii_txd_o
- ODDR #(
- .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
- .INIT (1'b0 ), // Initial value of Q: 1'b0 or 1'b1
- .SRTYPE("SYNC" ) // Set/Reset type: "SYNC" or "ASYNC"
- ) ODDR_rgmii_txd (
- .Q (rgmii_txd[i] ), // 1-bit DDR output
- .C (gmii_tx_clk ), // 1-bit clock input
- .CE (1'b1 ), // 1-bit clock enable input
- .D1 (gmii_txd[i] ), // 1-bit data input (positive edge)
- .D2 (gmii_txd[i+4] ), // 1-bit data input (negative edge)
- .R (~reset_n ), // 1-bit reset
- .S (1'b0 ) // 1-bit set
- );
- end
- endgenerate
-
- ODDR #(
- .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
- .INIT (1'b0 ), // Initial value of Q: 1'b0 or 1'b1
- .SRTYPE("SYNC" ) // Set/Reset type: "SYNC" or "ASYNC"
- ) ODDR_rgmii_txd (
- .Q (rgmii_txen ), // 1-bit DDR output
- .C (gmii_tx_clk ), // 1-bit clock input
- .CE (1'b1 ), // 1-bit clock enable input
- .D1 (gmii_txen ), // 1-bit data input (positive edge)
- .D2 (gmii_txen^gmii_txer ), // 1-bit data input (negative edge)
- .R (~reset_n ), // 1-bit reset
- .S (1'b0 ) // 1-bit set
- );
-
- ODDR #(
- .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
- .INIT (1'b0 ), // Initial value of Q: 1'b0 or 1'b1
- .SRTYPE("SYNC" ) // Set/Reset type: "SYNC" or "ASYNC"
- ) ODDR_rgmii_clk (
- .Q (rgmii_tx_clk ), // 1-bit DDR output
- .C (gmii_tx_clk ), // 1-bit clock input
- .CE (1'b1 ), // 1-bit clock enable input
- .D1 (1'b1 ), // 1-bit data input (positive edge)
- .D2 (1'b0 ), // 1-bit data input (negative edge)
- .R (~reset_n ), // 1-bit reset
- .S (1'b0 ) // 1-bit set
- );
由于使用IDDR,所以需要RTL8211输出的RXC和RXD满足FPGA自身IDDR的建立时间和保持时间。
RTL8211的RXC和RXD时序与发送类似。如果没有配置内部延时,则RXC和RXD几乎就是边沿对齐,如果配置了内部延时,则RXC和RXD为中心对齐。
实际使用中,将RXDLY引脚配置为上拉,即RTL8211芯片内部自动将RXC进行了2ns延时。此时RXC和RXD处于中心对齐。
但由于在FPGA以太网应用中,RXC的时钟还常用来做以太网数据的解包逻辑时钟,是一个典型的时钟信号,如果直接当普通的FPGA IO使用,会引起时钟质量下降。所以RXC接入FPGA后没有直接进入IDDR的时钟引脚,而是先进入了PLL,变为全局时钟。这样就导致了fpga内时钟和数据间的走线路径不同,延时又不确定了。所以对于这种情况要在PLL中将输出时钟调整到合适的相位(多试几个相位,保证不丢包不丢数)后,再用输出时钟来捕获数据信号。
=========================================================================
小趴菜一枚,有不对的地方请留言多多指教,谢谢~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。