Forum Discussion
Altera_Forum
Honored Contributor
17 years ago --- Quote Start --- Should I be taking the RGMII RX clock from the PHY through a pll/global routing, or just feed the signal directly into the rx_clk port on the TSE? I have tried skewing the RGMII TX (output) clock with a pll by 2ns as mentioned in other threads, but I still haven't had success transmitting packets. What are some basic constraints I should have on these RGMII signals that might solve my problems? How can I get the constraints from the TSE to not be ignored? --- Quote End --- I managed to make the gigabit ethernet working on the Cyclone III dev kit with the following: - connect the rx_clk to the TSE - use a pll to generate the 125MHz for the transmit clock: phase 0 degres for the TSE, and phase 90 degres for the phy gxt_clk. - fully constraining all the rgmii pins. Here are parts of my SDC file. I'm not a Timequest expert either, but I managed to get the interface fully constrained using this, and the design works. You may have to change a few names in the file.
#**************************************************************
# Create Clock
# **************************************************************
create_clock -name {clkin_125} -period 8
create_clock -name {enet_rx_clk} -period 8
# **************************************************************
# Create Generated Clock
# **************************************************************
derive_pll_clocks
set enet_tx_in_clk gbe_pll:inst12|altpll:altpll_component|gbe_pll_altpll:auto_generated|wire_pll1_clk
set enet_tx_out_clk gbe_pll:inst12|altpll:altpll_component|gbe_pll_altpll:auto_generated|wire_pll1_clk
# **************************************************************
# Set Input Delay
# **************************************************************
set_input_delay -clock enet_rx_clk -min 1.5 enet_rx_dv}] -add_delay
set_input_delay -clock enet_rx_clk -max 2.5 enet_rx_dv}] -add_delay
set_input_delay -clock enet_rx_clk -clock_fall -min 1.5 enet_rx_dv}] -add_delay
set_input_delay -clock enet_rx_clk -clock_fall -max 2.5 enet_rx_dv}] -add_delay
# **************************************************************
# Set Output Delay
# **************************************************************
set_output_delay -clock $enet_tx_out_clk -max 1 enet_tx_en}]
set_output_delay -clock $enet_tx_out_clk -min -1 enet_tx_en}] -add_delay
set_output_delay -clock $enet_tx_out_clk -clock_fall -max 1 enet_tx_en}] -add_delay
set_output_delay -clock $enet_tx_out_clk -clock_fall -min -1 enet_tx_en}] -add_delay
# **************************************************************
# Set Clock Groups
# **************************************************************
set_clock_groups -exclusive -group
set_clock_groups -exclusive -group
# **************************************************************
# Set False Path
# **************************************************************
set_false_path -from
set_false_path -to
set_false_path -setup -rise_from $enet_tx_in_clk -fall_to $enet_tx_out_clk
set_false_path -setup -fall_from $enet_tx_in_clk -rise_to $enet_tx_out_clk
set_false_path -hold -rise_from $enet_tx_in_clk -rise_to $enet_tx_out_clk
set_false_path -hold -fall_from $enet_tx_in_clk -fall_to $enet_tx_out_clk
# **************************************************************
# Set Multicycle Path
# **************************************************************
set_multicycle_path -from $enet_tx_in_clk -to $enet_tx_out_clk -setup -start 2
# **************************************************************
# Set Maximum Delay
# **************************************************************
set_max_delay -from $enet_tx_out_clk -to 20
# **************************************************************
# Set Minimum Delay
# **************************************************************
set_min_delay -from $enet_tx_out_clk -to 0
The hardest part is to constrain the ddr interface. I'm still not sure I'm doing it right here, but now that it works, I don't want to change it ;) I'm still amazed that Altera isn't providing a reference design for the Ethernet interface on this development kit... I lost a tremendous amount of time on this (but on the other hand I learned a lot about Timequest!)