EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天和大侠简单聊一聊FPGA 控制 RGMII 接口 PHY芯片基础,话不多说,上货。 6 I+ Z/ M3 O+ z' \) R9 \8 P
一、前言 网络通信中的PHY芯片接口种类有很多,之前接触过GMII接口的PHY芯片RTL8211EG。但GMII接口数量较多,本文使用RGMII接口的88E1512搭建网络通信系统。这类接口总线位宽小,可以降低电路成本,在实际项目中应用更广泛。
. n3 }( @# H- {/ w9 n7 Z
二、从GMII过度到RGMII
' [- c3 E& z9 q& B* j; a$ p8 s
先看看GMII和RGMII主要的接口。 GMII: 发送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er 接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er 2 Z# k- y- G, g) a' V |- U
RGMII: 发送 tx_clk tx_d[3:0] tx_ctrl , G4 k. x! v: q4 m! o# \- ]& |& ?
接收 rx_clk rx_d[3:0] rx_ctrl
: S8 z% w: K `' O
. p5 J; ~2 K! Q2 v4 V- i) i
/ j8 \; k6 i$ ^) g, g& l/ L9 p
为什么接口变少了?首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1512 Datasheet中时序图可以直观看出这一点。 0 y1 \3 }0 ~+ R# n3 l$ ?
# k, N9 a1 S, w0 u+ {6 K
+ \/ v9 {+ B+ G" z& Z
RGMII中上升沿发送一字节数据的低四位,下降沿发送剩余的高四位数据。接收端时钟双边沿采样,因此125MHZ*8bit = 125MHZ*4bit*2 = 1000Mbit/s。至于GMII中的数据有效和数据错误指示信号被ctrl信号复用:tx_ctrl在时钟tx_clk上升沿发送是tx_en,在下降沿发送是tx_en ^ tx_er。rx_ctrl在时钟rx_clk上升沿接收是rx_dv,在下降沿接收是rx_en ^ rx_er。综上,RGMII接口引脚数从25个降低到14个。 , o5 O! J' Y; O
三、add clock skew
}" w9 R7 j, @5 V! y1 @. e4 ?$ r, g$ {8 g- l
# S0 P5 L6 P3 w3 S+ [
从上边的时序图分析,数据在时钟的边沿变化。因此如果不做额外处理,接收端无法稳定采样。为了解决这一问题,常见的做法是为时钟信号添加延时,使其边沿对准数据总线的稳定区间。可以在控制器端、PCB走线以及PHY芯片内部添加时钟偏移,本文使用最后一种方式实现。
& Z$ f2 O2 u$ A. {' x
5 _/ K6 A: r3 G" A7 e" `- m- P- R
在第三阶段中添加延迟。数据发送方向,FPGA侧的TX_CLK信号不需要额外处理,也就是说FPGA发送与数据边沿对齐的时钟信号。TXD和TX_CLK信号波形如图。
U9 c. }$ L! z b N% m0 M, @- a
' o/ v! F% S; W+ B: ]. W$ `% z2 r
: g/ F' D! I- k3 S. tPHY内部会调整TX_CLK,使之能够稳定采样TXD。数据接收方向,由于RX_CLK由PHY提供,PHY芯片直接产生与数据中心对齐的时钟信号。RXD和RX_CLK信号波形如图。
5 U9 H3 `# b7 ~$ d; T4 @
1 `0 p0 y4 `9 C* D0 \: @! V# w
; S. A, Y( I( S' S' R% b
6 G5 J5 i0 a* o可见,使PHY芯片工作在延迟模式下时,FPGA不需要添加额外的逻辑来保证稳定采样。发送方向直接将数据驱动时钟作为TX_CLK信号发送,接收方向直接利用RX_CLK对RXD信号采样。 4 d! P) ~: r& q% _ `( y+ \+ B- ^8 R0 P
, m0 j" h5 M8 @+ T" C) a7 o
7 S- |9 I' b+ S2 v/ H1 M* y, n' u1 Z* A+ @5 M
" Z8 }" t) i0 v% H* \2 ^" ]' X( f9 k: v4 u+ o
* C' |0 q2 Y7 G [4 D四、系统设计方案 ( N% u8 n- q2 u% l: j
?" i; Q. t. x) q2 Q* [6 l
本文使用ZYNQ内部的MAC控制器实现数据链路层功能。但由于其接口为GMII,需要用到GMII_to_RGMII IP Core转换接口逻辑。上层网络协议则通过LWIP开源协议栈完成。首先配置ZYNQ IP,使能ENET1并以EMIO方式引出。
' ^/ `% |1 A; F2 S& G, B* B! j5 I
/ E* g$ w+ @0 @' K6 r4 w) T
4 P( O: e- y5 G& F, v# r! y: }# d% Q
0 ~; o% g0 U7 L4 w6 h4 j
系统硬件结构如图:
5 X5 _" E+ I6 p. F& {6 j6 q' I1 f0 D3 G- X+ U$ M! g
4 e3 j# e2 M+ @5 |: `6 H
" E3 Q4 |9 q; m% U, V2 B) q
/ [, r. e6 t) j2 b. p/ L五、I/O 时序约束 : k6 [8 C$ M* a- U1 @) S4 L
在较高速设计场合下,输入输出接口部分很容易出现数据采样不稳定的现象。这时候就要通过Input delay,output delay约束以及STA来分析设计是否满足稳定采样需求。input/output delay是指数据相对于时钟的延迟,只有设置好上述两个数值,综合工具才会往正确的方向优化并给出合理的时序报告。
% T1 S* _" @. T; P
! o, g1 v3 a, o6 eFPGA与RGMII接口的PHY芯片之间的时序关系按照数据接口同步和数据采样方式属于源同步DDR采样。input delay约束对应接收方向,时序关系是中心对齐。output delay约束对应发送方向,时序关系是边沿对齐。前者由于很多时候不知道上游器件Tcko信息,会使用示波器测量有效数据窗口来计算。而后者因为是边沿对齐,通过示波器测量抖动窗口并使用skew based method计算。这部分笔者还没有亲身实践过,若有误欢迎指出。
; T4 v8 _. ?6 A$ z- y1 |
$ e* I+ X7 p$ z6 [; ?: J0 a |