天天看点

RGMII的时序约束实例

RGMII接口:

https://blog.csdn.net/kemi450/article/details/91388581

RGMII接口的约束:

这里,已125MHz时钟为例,配置PHY使时钟和数据相移90°。

接收端:

  1. 创建输入时钟和虚拟时钟。其中,虚拟时钟用以描述输入延时。

    create_clock -name {rgmii_rxclk} -period 8.000 -waveform { 2 6 } [get_ports {rgmii_rxclk}]

    create_clock -name {rgmii_rxclk_virtual} -period 8.000

  2. 约束输入延迟。
    RGMII的时序约束实例

    。在这里,由于数据和时钟的走线一样,因此其延迟近乎一样。

    set_input_delay -clock  [get_clocks rgmii_rxclk_virtual] -max 0.5 [get_ports “rgmii_rxd* rgmii_rxctl”] -add_delay

    set_input_delay -clock  [get_clocks rgmii_rxclk_virtual] -min -0.5 [get_ports “rgmii_rxd* rgmii_rxctl”] -add_delay

  3. 设置非关联路径。

    set_false_path -fall_from [get_clocks rgmii_rxclk_virtual] -rise_to [get_clocks rgmii_rxclk] -setup

    set_false_path -rise_from [get_clocks rgmii_rxclk_virtual] -fall_to [get_clocks rgmii_rxclk] -setup

    set_false_path -fall_from [get_clocks rgmii_rxclk_virtual] -fall_to [get_clocks rgmii_rxclk] -hold

    set_false_path -rise_from [get_clocks rgmii_rxclk_virtual] -rise_to [get_clocksrgmii_rxclk] -hold

发送端

  1. 创建发送时钟。这里,由锁相环产生125MHz的时钟,由c0输出。

    create_generated_clock -name rgmii_txclk -source [get_clocks {fpga_pll_inst|altpll_component|pll|clk[0]}] \

    [get_ports {rgmii_txclk}] -phase 90

  2. 约束输出延迟。
    RGMII的时序约束实例
    RGMII的时序约束实例

    。同理,时钟延迟和数据延迟一致。

    set_output_delay -clock rgmii_txclk -max  1.0 [get_ports "rgmii_txd* rgmii_txctl"] -add_delay

    set_output_delay -clock rgmii_txclk -max  1.0 [get_ports "rgmii_txd* rgmii_txctl"] -clock_fall -add_delay

    set_output_delay -clock rgmii_txclk -min -0.8 [get_ports "rgmii_txd* rgmii_txctl"] -add_delay

    set_output_delay -clock rgmii_txclk -min -0.8 [get_ports "rgmii_txd* rgmii_txctl"] -clock_fall -add_delay

  3. 设置非关联路径。

    set_false_path -fall_from [get_clocks {fpga_pll_inst|altpll_component|pll|clk[0]}] -rise_to [get_clocks rgmii_txclk] -setup

    set_false_path -rise_from [get_clocks {fpga_pll_inst|altpll_component|pll|clk[0]}] -fall_to [get_clocks rgmii_txclk] -setup

    set_false_path -fall_from [get_clocks {fpga_pll_inst|altpll_component|pll|clk[0]}] -fall_to [get_clocks rgmii_txclk] -hold

    set_false_path -rise_from [get_clocks {fpga_pll_inst|altpll_component|pll|clk[0]}] -rise_to [get_clocks rgmii_txclk] -hold

  4. 时钟输出最好用DDIO或DDR输出。

继续阅读