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

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

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

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

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

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值