当前位置:   article > 正文

RTL8211 时序分析 (基于FPGA的千兆网应用)

rtl8211

RTL8211配置

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的延时,为中心对齐状态,满足时序的要求。

  1. genvar i;
  2. generate
  3. for(i=0;i<4;i=i+1)
  4. begin: rgmii_txd_o
  5. ODDR #(
  6. .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
  7. .INIT (1'b0 ), // Initial value of Q: 1'b0 or 1'b1
  8. .SRTYPE("SYNC" ) // Set/Reset type: "SYNC" or "ASYNC"
  9. ) ODDR_rgmii_txd (
  10. .Q (rgmii_txd[i] ), // 1-bit DDR output
  11. .C (gmii_tx_clk ), // 1-bit clock input
  12. .CE (1'b1 ), // 1-bit clock enable input
  13. .D1 (gmii_txd[i] ), // 1-bit data input (positive edge)
  14. .D2 (gmii_txd[i+4] ), // 1-bit data input (negative edge)
  15. .R (~reset_n ), // 1-bit reset
  16. .S (1'b0 ) // 1-bit set
  17. );
  18. end
  19. endgenerate
  20. ODDR #(
  21. .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
  22. .INIT (1'b0 ), // Initial value of Q: 1'b0 or 1'b1
  23. .SRTYPE("SYNC" ) // Set/Reset type: "SYNC" or "ASYNC"
  24. ) ODDR_rgmii_txd (
  25. .Q (rgmii_txen ), // 1-bit DDR output
  26. .C (gmii_tx_clk ), // 1-bit clock input
  27. .CE (1'b1 ), // 1-bit clock enable input
  28. .D1 (gmii_txen ), // 1-bit data input (positive edge)
  29. .D2 (gmii_txen^gmii_txer ), // 1-bit data input (negative edge)
  30. .R (~reset_n ), // 1-bit reset
  31. .S (1'b0 ) // 1-bit set
  32. );
  33. ODDR #(
  34. .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
  35. .INIT (1'b0 ), // Initial value of Q: 1'b0 or 1'b1
  36. .SRTYPE("SYNC" ) // Set/Reset type: "SYNC" or "ASYNC"
  37. ) ODDR_rgmii_clk (
  38. .Q (rgmii_tx_clk ), // 1-bit DDR output
  39. .C (gmii_tx_clk ), // 1-bit clock input
  40. .CE (1'b1 ), // 1-bit clock enable input
  41. .D1 (1'b1 ), // 1-bit data input (positive edge)
  42. .D2 (1'b0 ), // 1-bit data input (negative edge)
  43. .R (~reset_n ), // 1-bit reset
  44. .S (1'b0 ) // 1-bit set
  45. );

接收接口

由于使用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中将输出时钟调整到合适的相位(多试几个相位,保证不丢包不丢数)后,再用输出时钟来捕获数据信号。

=========================================================================

小趴菜一枚,有不对的地方请留言多多指教,谢谢~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/441784
推荐阅读
相关标签
  

闽ICP备14008679号