mirror of
https://github.com/alexforencich/verilog-ethernet.git
synced 2025-01-14 06:43:18 +08:00
100 lines
6.7 KiB
Tcl
100 lines
6.7 KiB
Tcl
|
|
|
|
derive_pll_clocks
|
|
derive_clock_uncertainty
|
|
|
|
create_clock -period 20.000 -name {clk_sys_50m} [ get_ports {clk_sys_50m_p} ]
|
|
create_clock -period 10.000 -name {clk_sys_100m} [ get_ports {clk_sys_100m_p} ]
|
|
create_clock -period 10.000 -name {clk_core_bak} [ get_ports {clk_core_bak_p} ]
|
|
create_clock -period 10.000 -name {clk_uib0} [ get_ports {clk_uib0_p} ]
|
|
create_clock -period 10.000 -name {clk_uib1} [ get_ports {clk_uib1_p} ]
|
|
create_clock -period 10.000 -name {clk_esram0} [ get_ports {clk_esram0_p} ]
|
|
create_clock -period 10.000 -name {clk_esram1} [ get_ports {clk_esram1_p} ]
|
|
create_clock -period 7.500 -name {clk_ddr4_comp} [ get_ports {clk_ddr4_comp_p} ]
|
|
create_clock -period 7.500 -name {clk_ddr4_dimm} [ get_ports {clk_ddr4_dimm_p} ]
|
|
|
|
create_clock -period 10.000 -name {refclk_pcie_ep} [ get_ports {refclk_pcie_ep_p} ]
|
|
create_clock -period 10.000 -name {refclk_pcie_ep_edge} [ get_ports {refclk_pcie_ep_edge_p} ]
|
|
create_clock -period 10.000 -name {refclk_pcie_ep1} [ get_ports {refclk_pcie_ep1_p} ]
|
|
create_clock -period 10.000 -name {refclk_pcie_rp} [ get_ports {refclk_pcie_rp_p} ]
|
|
|
|
create_clock -period 1.551 -name {refclk_qsfp0} [ get_ports {refclk_qsfp0_p} ]
|
|
create_clock -period 1.551 -name {refclk_qsfp1} [ get_ports {refclk_qsfp1_p} ]
|
|
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_sys_50m} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_sys_100m} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_core_bak} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_uib0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_uib1} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_esram0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_esram1} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_ddr4_comp} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {clk_ddr4_dimm} ]
|
|
|
|
set_clock_groups -asynchronous -group [ get_clocks {refclk_pcie_ep} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {refclk_pcie_ep_edge} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {refclk_pcie_ep1} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {refclk_pcie_rp} ]
|
|
|
|
set_clock_groups -asynchronous -group [ get_clocks {refclk_qsfp0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {refclk_qsfp1} ]
|
|
|
|
# JTAG Signal Constraints
|
|
create_clock -name {altera_reserved_tck} -period 40.800 -waveform { 0.000 20.400 } [get_ports { altera_reserved_tck }]
|
|
set_input_delay -clock altera_reserved_tck 8 [get_ports altera_reserved_tdi]
|
|
set_input_delay -clock altera_reserved_tck 8 [get_ports altera_reserved_tms]
|
|
set_output_delay -clock altera_reserved_tck -clock_fall -max 5 [get_ports altera_reserved_tdo]
|
|
set_false_path -from [get_keepers {altera_reserved_ntrst}]
|
|
set_clock_groups -asynchronous -group [get_clocks {altera_reserved_tck}]
|
|
|
|
set_false_path -from [get_ports cpu_resetn] -to *
|
|
set_false_path -from * -to [get_ports {user_led[*]}]
|
|
|
|
source ../lib/eth/syn/quartus_pro/eth_mac_fifo.sdc
|
|
source ../lib/eth/lib/axis/syn/quartus_pro/sync_reset.sdc
|
|
source ../lib/eth/lib/axis/syn/quartus_pro/axis_async_fifo.sdc
|
|
|
|
# clocking infrastructure
|
|
constrain_sync_reset_inst "sync_reset_100mhz_inst"
|
|
|
|
# PHY clocks
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_1|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_1|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_2|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_2|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_3|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_3|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_4|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_4|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_1|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_1|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_2|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_2|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_3|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_3|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_4|eth_xcvr_inst|tx_clkout|ch0} ]
|
|
set_clock_groups -asynchronous -group [ get_clocks {qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_4|eth_xcvr_inst|rx_clkout|ch0} ]
|
|
|
|
# PHY resets
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_1|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_1|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_2|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_2|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_3|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_3|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_4|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp0_eth_xcvr_phy_quad|eth_xcvr_phy_4|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_1|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_1|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_2|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_2|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_3|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_3|phy_rx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_4|phy_tx_rst_reset_sync_inst"
|
|
constrain_sync_reset_inst "qsfp1_eth_xcvr_phy_quad|eth_xcvr_phy_4|phy_rx_rst_reset_sync_inst"
|
|
|
|
# 10G MAC
|
|
constrain_eth_mac_fifo_inst "core_inst|eth_mac_10g_fifo_inst"
|
|
constrain_axis_async_fifo_inst "core_inst|eth_mac_10g_fifo_inst|rx_fifo|fifo_inst"
|
|
constrain_axis_async_fifo_inst "core_inst|eth_mac_10g_fifo_inst|tx_fifo|fifo_inst"
|