aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/top/n3xx/mb_clocks.xdc
diff options
context:
space:
mode:
Diffstat (limited to 'fpga/usrp3/top/n3xx/mb_clocks.xdc')
-rw-r--r--fpga/usrp3/top/n3xx/mb_clocks.xdc86
1 files changed, 86 insertions, 0 deletions
diff --git a/fpga/usrp3/top/n3xx/mb_clocks.xdc b/fpga/usrp3/top/n3xx/mb_clocks.xdc
new file mode 100644
index 000000000..30736155f
--- /dev/null
+++ b/fpga/usrp3/top/n3xx/mb_clocks.xdc
@@ -0,0 +1,86 @@
+#
+# Copyright 2017 Ettus Research, A National Instruments Company
+# SPDX-License-Identifier: LGPL-3.0
+#
+# Timing analysis is performed in "/n3xx/doc/mb_timing.xlsx". See
+# the spreadsheet for more details and explanations.
+
+#*******************************************************************************
+## Motherboard Clocks
+
+# 10/20/25 MHz reference clock from rear panel connector. Constrain to the fastest
+# possible clock rate.
+set REF_CLK_PERIOD 40.00
+create_clock -name ref_clk -period $REF_CLK_PERIOD [get_ports FPGA_REFCLK_P]
+# 125 MHz RJ45 Ethernet clock
+create_clock -name ge_phy_clk -period 8.000 [get_ports ENET0_CLK125]
+# 156.25 MHz oscillator to MGT bank 110
+create_clock -name xge_clk -period 6.400 [get_ports MGT156MHZ_CLK1_P]
+# 125 MHz PLL for MG bank 109
+create_clock -name net_clk -period 8.000 [get_ports NETCLK_P]
+
+# Virtual clocks for constraining I/O (used below)
+create_clock -name async_in_clk -period 50.00
+create_clock -name async_out_clk -period 50.00
+
+
+
+#*******************************************************************************
+## Aliases for auto-generated clocks
+
+# Rename the PS clocks. These are originally declared in the PS7 IP block, but do not
+# have super descriptive names. We rename them here for additional clarity, and to match
+# the rest of the design.
+
+# First save off the input jitter setting for each, before we nuke the original clocks.
+set clk100_jitter [get_property INPUT_JITTER [get_clocks clk_fpga_0]]
+set clk40_jitter [get_property INPUT_JITTER [get_clocks clk_fpga_1]]
+set meas_clk_ref_jitter [get_property INPUT_JITTER [get_clocks clk_fpga_2]]
+set bus_clk_jitter [get_property INPUT_JITTER [get_clocks clk_fpga_3]]
+
+# Create the new clocks based on the old ones. This generates critical warnings that
+# we are completely rewriting the old clock definition... this is OK.
+create_clock -name clk100 \
+ -period [get_property PERIOD [get_clocks clk_fpga_0]] \
+ [get_pins [get_property SOURCE_PINS [get_clocks clk_fpga_0]]]
+create_clock -name clk40 \
+ -period [get_property PERIOD [get_clocks clk_fpga_1]] \
+ [get_pins [get_property SOURCE_PINS [get_clocks clk_fpga_1]]]
+create_clock -name meas_clk_ref \
+ -period [get_property PERIOD [get_clocks clk_fpga_2]] \
+ [get_pins [get_property SOURCE_PINS [get_clocks clk_fpga_2]]]
+create_clock -name bus_clk \
+ -period [get_property PERIOD [get_clocks clk_fpga_3]] \
+ [get_pins [get_property SOURCE_PINS [get_clocks clk_fpga_3]]]
+
+# Apply the jitter setting from the original clocks.
+set_input_jitter [get_clocks clk100] $clk100_jitter
+set_input_jitter [get_clocks clk40] $clk40_jitter
+set_input_jitter [get_clocks meas_clk_ref] $meas_clk_ref_jitter
+set_input_jitter [get_clocks bus_clk] $bus_clk_jitter
+
+
+# TDC Measurement Clock
+create_generated_clock -name meas_clk_fb [get_pins {n3xx_clocking_i/misc_clock_gen_i/inst/mmcm_adv_inst/CLKFBOUT}]
+create_generated_clock -name meas_clk [get_pins {n3xx_clocking_i/misc_clock_gen_i/inst/mmcm_adv_inst/CLKOUT0}]
+
+#*******************************************************************************
+## White Rabbit DAC
+# Constrain the DIN and NSYNC bits around the clock output. No readback.
+
+set WR_OUT_CLK [get_ports {WB_DAC_SCLK}]
+create_generated_clock -name wr_bus_clk \
+ -source [get_pins [all_fanin -flat -only_cells -startpoints_only $WR_OUT_CLK]/C] \
+ -divide_by 2 $WR_OUT_CLK
+
+#*******************************************************************************
+## Front Panel GPIO
+# These bits are driven from the DB-A radio clock. Although they are received async in
+# the outside world, they should be constrained in the FPGA to avoid any race
+# conditions. The best way to do this is a skew constraint across all the bits.
+
+set FP_GPIO_CLK [get_ports {FPGA_GPIO[0]}]
+create_generated_clock -name fp_gpio_bus_clk \
+ -source [get_pins [all_fanin -flat -only_cells -startpoints_only $FP_GPIO_CLK]/C] \
+ -divide_by 2 $FP_GPIO_CLK
+