Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
16 years ago

DDR Output Constraining - "too positive" slack

Hi,

I hope someone knows the solution to the problem that kept me really busy lately :(

I have to connect to an RGMII PHY that has the following parameters:

tCLK = 8 (ns)

TskewR (Data to Clock input Skew) (at the PHY) : min 1.0 max 2.6 (ns) (from the RGMII datasheet)

I am supposed to meet the PHY requirements without the use of PLLs.

The problem I have is that Quartus gets a "too positive" slack - of more than 1/2 of tCLK - and still reports this slack as correct. In practice this kill sme since data would be captured with the wrong edge. Is there a way to specify a maximum slack? Are my constraints incomplete?

Attached is a TimeQuest wave report.

I used the following constraints:

# ################ #

derive_pll_clocks # # derives the pll_out[0] that will be used as output clock

create_generated_clock -name mtx_clk_ddr -offset 0 -source {pll_out[0]} [get_ports {mtx_clk_pad_o}]

set outclk "pll_out[0]"

set outclk_ddr "mtx_clk_ddr"

set_false_path -rise_from $outclk -fall_to $outclk_ddr -setup

set_false_path -fall_from $outclk -rise_to $outclk_ddr -setup

set_false_path -rise_from $outclk -rise_to $outclk_ddr -hold

set_false_path -fall_from $outclk -fall_to $outclk_ddr -hold

set_output_delay -clock $outclk_ddr -max 2.6 [get_ports {mtxd_pad_o

[*] mtxen_pad_o}]

set_output_delay -clock $outclk_ddr -min -1.0 [get_ports {mtxd_pad_o

[*] mtxen_pad_o}]

set_output_delay -clock $outclk_ddr -clock_fall -max -add_delay 2.6 [get_ports {mtxd_pad_o

[*] mtxen_pad_o}]

set_output_delay -clock $outclk_ddr -clock_fall -min -add_delay -1.0 [get_ports {mtxd_pad_o

[*] mtxen_pad_o}]

Thanks!

11 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Did you consider adding 1 pipeline cycle and swapping the data for high and low clock edges?

    I don't recall all the (r)GMII details, but IIRC you can insert an extra cycle on the transmitter pipeline. The idea is to transmit on the opposite edge of the clock. This way you wouldn't need to delay the clock, because data would naturally be delayed with respect to the clock.

    --- Quote End ---

    And inverting the output clock... data is edge sensitive in RGMII. yes, that was taken into account. Decision involved some other factors as well.

    Thanks for the help!