当前位置:   article > 正文

RGMII时序约束

rgmii

RGMII是以太网MAC连接PHY的一种接口,可以实现10/100/1000M网络速度,在FPGA系统中比较常见。RGMII在1000M模式下是双沿采样,而且要求采样端是center-aligned,所以其时序约束是比较复杂的。

下面分TX和RX来描述其时序约束应该怎么写。

TX:

通常的做法是使用ODDR实现双沿采样时序,如下图示。时序约束的重点是搞清楚有效的时序分析关系。对setup来说,分析上升沿到上升沿(RR),以及下降沿到下降沿(FF);对hold来说,分析上升沿到下降沿(RF),以及下降沿到上升沿(FR)。

TX的时序约束脚本:

  1. ##---------------------- TX ----------------------##
  2. ## clk_0 and clk_90 are derived clocks from PLL, so no need to re-define them.
  3. ## create a forward captrue clock
  4. create_generated_clock -name rgmii_txc -source [get_pins ${rgmii_oddr_hier}u_ODDRE1_rgmii_txc/C] -multiply_by 1 [get_ports $src_rgmii_txc]
  5. ## TX: *_TXD and *_TX_CTL are synchronous to *_TXC, which is a dual-edge clock.
  6. ## Desired serup launch and capture relationship: RR and FF.
  7. ## Desired hold launch and capture relationship: RF and FR.
  8. set_output_delay -clock rgmii_txc -max 1.0 [get_ports PAD_RGMII_TX_CTL]
  9. set_output_delay -clock rgmii_txc -min -0.8 [get_ports PAD_RGMII_TX_CTL]
  10. set_output_delay -clock rgmii_txc -max 1.0 [get_ports PAD_RGMII_TX_CTL] -clock_fall -add_delay
  11. set_output_delay -clock rgmii_txc -min -0.8 [get_ports PAD_RGMII_TX_CTL] -clock_fall -add_delay
  12. set_output_delay -clock rgmii_txc -max 1.0 [get_ports PAD_RGMII_TXD*]
  13. set_output_delay -clock rgmii_txc -min -0.8 [get_ports PAD_RGMII_TXD*]
  14. set_output_delay -clock rgmii_txc -max 1.0 [get_ports PAD_RGMII_TXD*] -clock_fall -add_delay
  15. set_output_delay -clock rgmii_txc -min -0.8 [get_ports PAD_RGMII_TXD*] -clock_fall -add_delay

 

RX:

使用IDDR+一级FF做双沿采样,如下图示。对setup来说,分析上升沿到上升沿(RR),以及下降沿到下降沿(FF);对hold来说,分析上升沿到下降沿(RF),以及下降沿到上升沿(FR)。

 RX的时序约束脚本:

  1. ##---------------------- RX ----------------------##
  2. ## create a virtual launch clock outside of FPGA
  3. create_clock -name vir_rgmii_rxc -period [expr $GMAC_RX_PERIOD]
  4. ## create capture clock on RXC PAD, which is +90 degrees shifted relative to launch clock
  5. create_clock -name rgmii_rxc -period [expr $GMAC_RX_PERIOD] [get_ports $src_rgmii_rxc] -waveform {2 6}
  6. ## RX: *_RXD and *_RX_CTL are synchronous to *_RXC, which is a dual-edge clock.
  7. ## Desired setup launch and capture relationship: RR and FF.
  8. ## Desired hold launch and capture relationship: RF and FR.
  9. set_input_delay -clock vir_rgmii_rxc -max 0.5 [get_ports PAD_RGMII_RX_CTL]
  10. set_input_delay -clock vir_rgmii_rxc -min -0.5 [get_ports PAD_RGMII_RX_CTL]
  11. set_input_delay -clock vir_rgmii_rxc -max 0.5 [get_ports PAD_RGMII_RX_CTL] -clock_fall -add_delay
  12. set_input_delay -clock vir_rgmii_rxc -min -0.5 [get_ports PAD_RGMII_RX_CTL] -clock_fall -add_delay
  13. set_input_delay -clock vir_rgmii_rxc -max 0.5 [get_ports PAD_RGMII_RXD*]
  14. set_input_delay -clock vir_rgmii_rxc -min -0.5 [get_ports PAD_RGMII_RXD*]
  15. set_input_delay -clock vir_rgmii_rxc -max 0.5 [get_ports PAD_RGMII_RXD*] -clock_fall -add_delay
  16. set_input_delay -clock vir_rgmii_rxc -min -0.5 [get_ports PAD_RGMII_RXD*] -clock_fall -add_delay
  17. set_false_path -rise_from [get_clocks vir_rgmii_rxc] -fall_to [get_clocks rgmii_rxc] -setup
  18. set_false_path -fall_from [get_clocks vir_rgmii_rxc] -rise_to [get_clocks rgmii_rxc] -setup
  19. set_false_path -rise_from [get_clocks vir_rgmii_rxc] -rise_to [get_clocks rgmii_rxc] -hold
  20. set_false_path -fall_from [get_clocks vir_rgmii_rxc] -fall_to [get_clocks rgmii_rxc] -hold

 

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

闽ICP备14008679号