EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天和大侠简单聊一聊FPGA 控制 RGMII 接口 PHY芯片基础,话不多说,上货。 ! u& b4 ~2 E8 H$ @& V
一、前言 网络通信中的PHY芯片接口种类有很多,之前接触过GMII接口的PHY芯片RTL8211EG。但GMII接口数量较多,本文使用RGMII接口的88E1512搭建网络通信系统。这类接口总线位宽小,可以降低电路成本,在实际项目中应用更广泛。 0 [/ ]. A5 E9 Z4 o9 Y
二、从GMII过度到RGMII
- n$ c7 d. R/ {4 D
先看看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
) b7 N( v5 F) O8 J4 ^1 X6 z
RGMII: 发送 tx_clk tx_d[3:0] tx_ctrl
' W. ^6 m4 m9 h: ]* |4 J接收 rx_clk rx_d[3:0] rx_ctrl + m/ A- k; r1 S3 ?& a
1 c; s" q) r8 A$ s o: e4 ]. b9 D7 a# ?" y' `) e
为什么接口变少了?首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1512 Datasheet中时序图可以直观看出这一点。
S1 h6 F; L4 B0 @
* Q/ w' A% X% D( W9 I
6 k* }" I1 q% z7 f6 J, ?+ b$ O
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个。
7 Y5 w% l& g4 T- A; m
三、add clock skew ; A4 F" U' E1 ]6 m/ s5 x
6 d/ }+ M2 D6 f5 R8 Q
7 J+ @2 O% c) P! j% ~从上边的时序图分析,数据在时钟的边沿变化。因此如果不做额外处理,接收端无法稳定采样。为了解决这一问题,常见的做法是为时钟信号添加延时,使其边沿对准数据总线的稳定区间。可以在控制器端、PCB走线以及PHY芯片内部添加时钟偏移,本文使用最后一种方式实现。
( ~* J9 o5 p ~$ a% C5 d
5 L0 y/ B+ ]% l, {6 h, P
- g, F+ a, }) D% ~) Y在第三阶段中添加延迟。数据发送方向,FPGA侧的TX_CLK信号不需要额外处理,也就是说FPGA发送与数据边沿对齐的时钟信号。TXD和TX_CLK信号波形如图。
/ n, {/ U% B( j/ w$ }$ t8 z# S
1 n! p4 z* c: ]; y' i" I" h' W
" t. g/ r3 A- R# l
PHY内部会调整TX_CLK,使之能够稳定采样TXD。数据接收方向,由于RX_CLK由PHY提供,PHY芯片直接产生与数据中心对齐的时钟信号。RXD和RX_CLK信号波形如图。 ) B; a: i) c( _
6 W0 S3 P6 j6 }1 O7 Z- O, O
3 `7 V' |( E+ H6 J. |& h" P" b
5 n% i- Q( H8 F/ A9 B/ ?1 d可见,使PHY芯片工作在延迟模式下时,FPGA不需要添加额外的逻辑来保证稳定采样。发送方向直接将数据驱动时钟作为TX_CLK信号发送,接收方向直接利用RX_CLK对RXD信号采样。
: Q2 B! i P) D
9 j) c* M" j4 N' Y6 e: R$ ]) ?( x4 Y5 S s. ~* K8 p
6 S0 m- m8 }9 y8 w+ x1 Q1 z# n
& A4 e) \! S5 G; C7 a. V/ s" x% ^
1 t; ]5 n2 E n5 |6 O4 e) D3 i& I/ w2 W) S
四、系统设计方案
5 ]$ l2 Z4 I0 Y) Q- ]# t( h
6 g0 h+ V& j* }) E本文使用ZYNQ内部的MAC控制器实现数据链路层功能。但由于其接口为GMII,需要用到GMII_to_RGMII IP Core转换接口逻辑。上层网络协议则通过LWIP开源协议栈完成。首先配置ZYNQ IP,使能ENET1并以EMIO方式引出。 5 S* Q) {5 D% F
/ x; I2 J& C U% C$ P
3 @# s& _$ l; I) }& N0 o3 N
2 \0 H, \: W; w9 ^" a( `" j+ ?2 W0 o; }$ Q
系统硬件结构如图:
% Y; c+ ? h' L, n: Q
' c$ X; ^0 y, y8 y$ }0 E7 W/ d' C
" ~/ {: G! N0 I- @
{, X$ q# X. ^
% `/ I) g3 R. T$ ]5 a9 J五、I/O 时序约束
8 B' p* J5 i( H+ R8 N7 C* {在较高速设计场合下,输入输出接口部分很容易出现数据采样不稳定的现象。这时候就要通过Input delay,output delay约束以及STA来分析设计是否满足稳定采样需求。input/output delay是指数据相对于时钟的延迟,只有设置好上述两个数值,综合工具才会往正确的方向优化并给出合理的时序报告。
0 K1 d: s d" T# F7 w/ M0 m5 i+ z+ O2 ?* ?
FPGA与RGMII接口的PHY芯片之间的时序关系按照数据接口同步和数据采样方式属于源同步DDR采样。input delay约束对应接收方向,时序关系是中心对齐。output delay约束对应发送方向,时序关系是边沿对齐。前者由于很多时候不知道上游器件Tcko信息,会使用示波器测量有效数据窗口来计算。而后者因为是边沿对齐,通过示波器测量抖动窗口并使用skew based method计算。这部分笔者还没有亲身实践过,若有误欢迎指出。
, n0 K( m9 q1 q7 H/ E
/ X. `. `6 E" z1 ]; E5 _ |