Пример #1
0
    def gen_constraints(self):
    
        cons = []
        
        # Pin Constraints
        cons.append(PortConstraint('DAC_DATA_OUT', 'DAC_DATA_OUT', port_index=list(range(self.bits)), iogroup_index=list(range(self.bits))))
        cons.append(PortConstraint('DAC_IQWRT', 'DAC_IQWRT'))
        cons.append(PortConstraint('DAC_IQSEL', 'DAC_IQSEL'))
        cons.append(PortConstraint('DAC_IQCLK', 'DAC_IQCLK'))
        cons.append(PortConstraint('DAC_IQRESET', 'DAC_IQRESET'))


        #To do: add timing constraints

        #Clock Group Constraints
        cons.append(ClockGroupConstraint('-of_objects [get_pins red_pitaya_infr_inst/dsp_clk_mmcm_inst/CLKOUT0]', '-of_objects [get_pins red_pitaya_infr_inst/adc_clk_mmcm_inst/CLKOUT1]', 'asynchronous'))
        cons.append(ClockGroupConstraint('-of_objects [get_pins red_pitaya_infr_inst/adc_clk_mmcm_inst/CLKOUT1]', '-of_objects [get_pins red_pitaya_infr_inst/dsp_clk_mmcm_inst/CLKOUT0]', 'asynchronous'))
        
        #cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', 'aux_clk_diff_p', 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', 'sync_in_p', 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))

        #input constraints


        # Output Constraints (setting to false path, so initial value made large)
        #cons.append(OutputDelayConstraint('adc_clk_125_mmcm', consttype='min', constdelay_ns=0, add_delay_en=True, portname='DAC_DATA_OUT[*]'))
        #cons.append(OutputDelayConstraint('adc_clk_125_mmcm', consttype='max', constdelay_ns=100, add_delay_en=True, portname='DAC_DATA_OUT[*]'))
        #cons.append(OutputDelayConstraint('dac_clk_250_mmcm', consttype='min', constdelay_ns=0, add_delay_en=True, portname='DAC_IQWRT'))
        #cons.append(OutputDelayConstraint('dac_clk_250_mmcm', consttype='max', constdelay_ns=100, add_delay_en=True, portname='DAC_IQWRT'))
        #cons.append(OutputDelayConstraint('dac_clk_250_315_mmcm', consttype='min', constdelay_ns=0, add_delay_en=True, portname='DAC_IQCLK'))
        #cons.append(OutputDelayConstraint('dac_clk_250_315_mmcm', consttype='max', constdelay_ns=100, add_delay_en=True, portname='DAC_IQCLK'))
        #cons.append(OutputDelayConstraint('adc_clk_125_mmcm', consttype='min', constdelay_ns=0, add_delay_en=True, portname='DAC_IQRESET'))
        #cons.append(OutputDelayConstraint('adc_clk_125_mmcm', consttype='max', constdelay_ns=100, add_delay_en=True, portname='DAC_IQRESET'))
        #cons.append(OutputDelayConstraint('adc_clk_125_mmcm', consttype='min', constdelay_ns=0, add_delay_en=True, portname='DAC_IQSEL'))
        #cons.append(OutputDelayConstraint('adc_clk_125_mmcm', consttype='max', constdelay_ns=100, add_delay_en=True, portname='DAC_IQSEL'))

        #False Path Constraints
        cons.append(FalsePathConstraint(destpath='[get_ports {DAC_DATA_OUT[*]}]'))
        cons.append(FalsePathConstraint(destpath='[get_ports {DAC_IQWRT}]'))
        cons.append(FalsePathConstraint(destpath='[get_ports {DAC_IQCLK}]'))
        cons.append(FalsePathConstraint(destpath='[get_ports {DAC_IQRESET}]'))
        cons.append(FalsePathConstraint(destpath='[get_ports {DAC_IQSEL}]'))

        #Raw Constraints

        return cons
Пример #2
0
    def gen_constraints(self):
        cons = []
        cons.append(PortConstraint('clk_100_p', 'clk_100_p'))
        cons.append(
            ClockConstraint('clk_100_p',
                            'clk_100_p',
                            period=10.0,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=5.0))
        cons.append(
            ClockGroupConstraint('clk_pl_0', 'clk_100_p', 'asynchronous'))
        cons.append(
            ClockGroupConstraint('clk_100_p', 'clk_pl_0', 'asynchronous'))

        return cons
Пример #3
0
    def gen_constraints(self):
        cons = []
        # leaving the aux constraints here so that we can support them at a later stage.
        #cons.append(PortConstraint('AUX_CLK_N','AUX_CLK_N'))
        #cons.append(PortConstraint('AUX_CLK_P','AUX_CLK_P'))
        #cons.append(PortConstraint('AUX_SYNCO_P','AUX_SYNCO_P'))
        #cons.append(PortConstraint('AUX_SYNCI_P','AUX_SYNCI_P'))
        #cons.append(PortConstraint('AUX_SYNCO_N','AUX_SYNCO_N'))
        #cons.append(PortConstraint('AUX_SYNCI_N', 'AUX_SYNCI_N'))
        #Need to extract the period and half period for creating the clock

        #Port constraints
        cons.append(
            PortConstraint('MEZ3_' + self.mez3_phy + '_LANE_TX_P',
                           'MEZ3_' + self.mez3_phy + '_LANE_TX_P',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            ClockConstraint('MEZ3_REFCLK_%s_P' % self.port,
                            'MEZ3_REFCLK_%s_P' % self.port,
                            period=6.4,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=3.2))
        cons.append(
            RawConstraint('create_pblock MEZ3_' + self.mez3_phy + '_QSFP'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins skarab_infr/USER_CLK_MMCM_inst/CLKOUT0]',
                'MEZ3_REFCLK_%s_P' % self.port, 'asynchronous'))
        cons.append(
            InputDelayConstraint(clkname='MEZ3_REFCLK_%s_P' % self.port,
                                 consttype='max',
                                 constdelay_ns=2.0,
                                 add_delay_en=True,
                                 portname='FPGA_RESET_N'))
        cons.append(
            MultiCycleConstraint(multicycletype='hold',
                                 sourcepath='get_ports FPGA_RESET_N',
                                 destpath='get_clocks MEZ3_REFCLK_%s_P' %
                                 self.port,
                                 multicycledelay=4))
        return cons
Пример #4
0
    def gen_constraints(self):
        cons = []

        cons.append(PortConstraint('FIXED_IO_ddr_vrp', 'FIXED_IO_ddr_vrp'))
        cons.append(PortConstraint('FIXED_IO_ddr_vrn', 'FIXED_IO_ddr_vrn'))
        cons.append(PortConstraint('DDR_we_n', 'DDR_we_n'))
        cons.append(PortConstraint('DDR_RAS_n', 'DDR_RAS_n'))
        cons.append(PortConstraint('DDR_ODT', 'DDR_ODT'))
        cons.append(PortConstraint('DDR_reset_n', 'DDR_reset_n'))
        cons.append(
            PortConstraint('DDR_DQS_p',
                           'DDR_DQS_p',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('DDR_DQS_n',
                           'DDR_DQS_n',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('DDR_DQ',
                           'DDR_DQ',
                           port_index=list(range(32)),
                           iogroup_index=list(range(32))))
        cons.append(
            PortConstraint('DDR_DM',
                           'DDR_DM',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(PortConstraint('DDR_CS_n', 'DDR_CS_n'))
        cons.append(PortConstraint('DDR_CKE', 'DDR_CKE'))
        cons.append(PortConstraint('DDR_Ck_p', 'DDR_Ck_p'))
        cons.append(PortConstraint('DDR_Ck_n', 'DDR_Ck_n'))
        cons.append(PortConstraint('DDR_CAS_n', 'DDR_CAS_n'))
        cons.append(
            PortConstraint('DDR_ba',
                           'DDR_ba',
                           port_index=list(range(3)),
                           iogroup_index=list(range(3))))
        cons.append(
            PortConstraint('DDR_Addr',
                           'DDR_Addr',
                           port_index=list(range(15)),
                           iogroup_index=list(range(15))))

        cons.append(PortConstraint('FIXED_IO_ps_porb', 'FIXED_IO_ps_porb'))
        cons.append(PortConstraint('FIXED_IO_ps_srstb', 'FIXED_IO_ps_srstb'))
        cons.append(PortConstraint('FIXED_IO_ps_clk', 'FIXED_IO_ps_clk'))

        cons.append(PortConstraint('ADC_CLK_IN_P', 'ADC_CLK_IN_P'))
        cons.append(
            ClockConstraint('ADC_CLK_IN_P',
                            'ADC_CLK_IN_P',
                            period=8.0,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=4.0))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins red_pitaya_infr_inst/dsp_clk_mmcm_inst/CLKOUT0]',
                '-of_objects [get_pins red_pitaya_inst/processing_system7_0/inst/PS7_i/FCLKCLK[0]]',
                'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins red_pitaya_inst/processing_system7_0/inst/PS7_i/FCLKCLK[0]]',
                '-of_objects [get_pins red_pitaya_infr_inst/dsp_clk_mmcm_inst/CLKOUT0]',
                'asynchronous'))

        return cons
Пример #5
0
    def gen_constraints(self):

        cons = []

        # Pin Constraints
        cons.append(
            PortConstraint('MEZ%s_REFCLK_0_P' % self.mez,
                           'MEZ%s_REFCLK_0_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_0_N' % self.mez,
                           'MEZ%s_REFCLK_0_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_1_P' % self.mez,
                           'MEZ%s_REFCLK_1_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_1_N' % self.mez,
                           'MEZ%s_REFCLK_1_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_2_P' % self.mez,
                           'MEZ%s_REFCLK_2_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_2_N' % self.mez,
                           'MEZ%s_REFCLK_2_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_3_P' % self.mez,
                           'MEZ%s_REFCLK_3_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_3_N' % self.mez,
                           'MEZ%s_REFCLK_3_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_PHY11_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY11_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY11_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY11_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY12_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY12_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY12_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY12_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY21_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY21_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY21_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY21_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY22_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY22_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY22_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY22_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))

        cons.append(
            PortConstraint('MEZZANINE_%s_RESET' % self.mez,
                           'MEZZANINE_%s_RESET' % self.mez))
        cons.append(
            PortConstraint('MEZZANINE_%s_CLK_SEL' % self.mez,
                           'MEZZANINE_%s_CLK_SEL' % self.mez))

        cons.append(PortConstraint(
            'aux_clk_diff_p',
            'aux_clk_diff_p'))  #AUX_CLK_P : in std_logic;     AU20
        cons.append(PortConstraint(
            'aux_clk_diff_n',
            'aux_clk_diff_n'))  #AUX_CLK_N : in std_logic;     AV19
        cons.append(PortConstraint(
            'sync_in_p', 'sync_in_p'))  #AUX_SYNCI_P : in std_logic;   AT21
        cons.append(PortConstraint(
            'sync_in_n', 'sync_in_n'))  #AUX_SYNCI_N : in std_logic;   AU21
        cons.append(PortConstraint(
            'sync_out_p', 'sync_out_p'))  #AUX_SYNCO_P : out std_logic;  AW21
        cons.append(PortConstraint(
            'sync_out_n', 'sync_out_n'))  #AUX_SYNCO_N : out std_logic); AY21

        # Output Constraints
        #set_output_delay -clock [get_clocks FPGA_REFCLK_BUF0_P] -min -add_delay -3.000 [get_ports AUX_SYNCO_P]
        #set_output_delay -clock [get_clocks FPGA_REFCLK_BUF0_P] -max -add_delay -3.000 [get_ports AUX_SYNCO_P]

        cons.append(
            OutputDelayConstraint(
                clkname='-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                consttype='min',
                constdelay_ns=-3.0,
                add_delay_en=True,
                portname='sync_out_p'))
        cons.append(
            OutputDelayConstraint(
                clkname='-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                consttype='max',
                constdelay_ns=-3.0,
                add_delay_en=True,
                portname='sync_out_p'))
        cons.append(
            MultiCycleConstraint(
                multicycletype='setup',
                sourcepath=
                'get_clocks -of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                destpath='get_ports sync_out_p',
                multicycledelay=4))
        cons.append(
            MultiCycleConstraint(
                multicycletype='hold',
                sourcepath=
                'get_clocks -of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                destpath='get_ports sync_out_p',
                multicycledelay=3))

        #Clock Constraints
        #create_clock -period 100.000 -name AUX_CLK_P -waveform {0.000 50.000} [get_ports AUX_CLK_P]
        #create_clock -period 100.000 -name AUX_SYNCI_P -waveform {0.000 50.000} [get_ports AUX_SYNCI_P]
        #create_clock -period 3.57 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #create_clock -period 3.57 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #create_clock -period 3.57 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #create_clock -period 3.57 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #create_clock -period 5.714 -waveform {0.000 2.857} [get_ports ADC_MEZ_REFCLK_0_P]
        #create_clock -period 5.714 -waveform {0.000 2.857} [get_ports ADC_MEZ_REFCLK_1_P]
        #create_clock -period 5.714 -waveform {0.000 2.857} [get_ports ADC_MEZ_REFCLK_2_P]
        #create_clock -period 5.714 -waveform {0.000 2.857} [get_ports ADC_MEZ_REFCLK_3_P]

        cons.append(
            ClockConstraint('aux_clk_diff_p',
                            'aux_clk_diff_p',
                            period=100.0,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=50.0))
        cons.append(
            ClockConstraint('sync_in_p',
                            'sync_in_p',
                            period=100.0,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=50.0))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=3.57,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=1.785))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=3.57,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=1.785))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=3.57,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=1.785))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=3.57,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=1.785))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_0_P' % self.mez,
                            'MEZ%s_REFCLK_0_P' % self.mez,
                            period=5.714,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.857))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_1_P' % self.mez,
                            'MEZ%s_REFCLK_1_P' % self.mez,
                            period=5.714,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.857))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_2_P' % self.mez,
                            'MEZ%s_REFCLK_2_P' % self.mez,
                            period=5.714,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.857))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_3_P' % self.mez,
                            'MEZ%s_REFCLK_3_P' % self.mez,
                            period=5.714,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.857))

        #Clock Group Constraints
        #set_clock_groups -asynchronous -group [get_clocks AUX_CLK_P] -group [get_clocks FPGA_REFCLK_BUF0_P]
        #set_clock_groups -asynchronous -group [get_clocks AUX_SYNCI_P] -group [get_clocks FPGA_REFCLK_BUF0_P]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]

        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                'aux_clk_diff_p', 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                'sync_in_p', 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))

        #False Path Constraints
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_0/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_0/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_1/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_1/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_2/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_2/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_3/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_3/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -from [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]] -to [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_false_path -from [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]] -to [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_false_path -from [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]] -to [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_false_path -from [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]] -to [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]
        #set_false_path -from [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK] -to [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]
        #set_false_path -from [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK] -to [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]
        #set_false_path -from [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK] -to [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]
        #set_false_path -from [get_clocks test_skarab_adc_byp_skarab_adc4x3g14_byp/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK] -to [get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]

        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_0/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_0/reset_RX_SYNC_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_1/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_1/reset_RX_SYNC_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_2/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_2/reset_RX_SYNC_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_3/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_11G2_RX_3/reset_RX_SYNC_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]',
                destpath=
                '[get_clocks %s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]',
                destpath=
                '[get_clocks %s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]',
                destpath=
                '[get_clocks %s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]',
                destpath=
                '[get_clocks %s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks %s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname,
                destpath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]'
            ))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks %s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname,
                destpath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]'
            ))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks %s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname,
                destpath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]'
            ))
        cons.append(
            FalsePathConstraint(
                sourcepath=
                '[get_clocks %s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]'
                % self.fullname,
                destpath=
                '[get_clocks -of_objects [get_pins test_skarab_adc_byp_Subsystem_fgbe/SYS_CLK_MMCM_inst/CLKOUT0]]'
            ))

        #Raw Constraints
        #create_pblock ADC32RF45_11G2_RX_0
        #add_cells_to_pblock [get_pblocks ADC32RF45_11G2_RX_0] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]
        #resize_pblock [get_pblocks ADC32RF45_11G2_RX_0] -add {CLOCKREGION_X1Y3:CLOCKREGION_X1Y3}
        #create_pblock ADC32RF45_11G2_RX_1
        #add_cells_to_pblock [get_pblocks ADC32RF45_11G2_RX_1] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]
        #resize_pblock [get_pblocks ADC32RF45_11G2_RX_1] -add {CLOCKREGION_X1Y2:CLOCKREGION_X1Y2}
        #create_pblock ADC32RF45_11G2_RX_2
        #add_cells_to_pblock [get_pblocks ADC32RF45_11G2_RX_2] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]
        #resize_pblock [get_pblocks ADC32RF45_11G2_RX_2] -add {CLOCKREGION_X1Y1:CLOCKREGION_X1Y1}
        #create_pblock ADC32RF45_11G2_RX_3
        #add_cells_to_pblock [get_pblocks ADC32RF45_11G2_RX_3] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]
        #resize_pblock [get_pblocks ADC32RF45_11G2_RX_3] -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0}

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_0' %
                          self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X0Y4:CLOCKREGION_X0Y4}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X0Y0:CLOCKREGION_X0Y0}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X1Y3:CLOCKREGION_X1Y3}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X1Y7:CLOCKREGION_X1Y7}'))

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_1' %
                          self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X0Y5:CLOCKREGION_X0Y5}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X0Y1:CLOCKREGION_X0Y1}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X1Y2:CLOCKREGION_X1Y2}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X1Y6:CLOCKREGION_X1Y6}'))

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_2' %
                          self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X0Y6:CLOCKREGION_X0Y6}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X0Y2:CLOCKREGION_X0Y2}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X1Y1:CLOCKREGION_X1Y1}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X1Y5:CLOCKREGION_X1Y5}'))

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_3' %
                          self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X0Y7:CLOCKREGION_X0Y7}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X0Y3:CLOCKREGION_X0Y3}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X1Y4:CLOCKREGION_X1Y4}'))

        return cons
Пример #6
0
    def gen_constraints(self):
    
        cons = []
        
        # -------------------------------------
        # PATHS
        # -------------------------------------
        # RXOUTCLK: ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK
        # BUF: ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i
        
        # -------------------------------------
        # PIN CONSTRAINTS
        # -------------------------------------
        cons.append(PortConstraint('MEZ%s_REFCLK_0_P' % self.mez, 'MEZ%s_REFCLK_0_P' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_0_N' % self.mez, 'MEZ%s_REFCLK_0_N' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_1_P' % self.mez, 'MEZ%s_REFCLK_1_P' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_1_N' % self.mez, 'MEZ%s_REFCLK_1_N' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_2_P' % self.mez, 'MEZ%s_REFCLK_2_P' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_2_N' % self.mez, 'MEZ%s_REFCLK_2_N' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_3_P' % self.mez, 'MEZ%s_REFCLK_3_P' % self.mez))
        cons.append(PortConstraint('MEZ%s_REFCLK_3_N' % self.mez, 'MEZ%s_REFCLK_3_N' % self.mez))
        cons.append(PortConstraint('MEZ%s_PHY11_LANE_RX_P' % self.mez, 'MEZ%s_PHY11_LANE_RX_P' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY11_LANE_RX_N' % self.mez, 'MEZ%s_PHY11_LANE_RX_N' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY12_LANE_RX_P' % self.mez, 'MEZ%s_PHY12_LANE_RX_P' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY12_LANE_RX_N' % self.mez, 'MEZ%s_PHY12_LANE_RX_N' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY21_LANE_RX_P' % self.mez, 'MEZ%s_PHY21_LANE_RX_P' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY21_LANE_RX_N' % self.mez, 'MEZ%s_PHY21_LANE_RX_N' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY22_LANE_RX_P' % self.mez, 'MEZ%s_PHY22_LANE_RX_P' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZ%s_PHY22_LANE_RX_N' % self.mez, 'MEZ%s_PHY22_LANE_RX_N' % self.mez, port_index=list(range(4)), iogroup_index=list(range(4))))
        cons.append(PortConstraint('MEZZANINE_%s_RESET' % self.mez,   'MEZZANINE_%s_RESET' % self.mez))
        cons.append(PortConstraint('MEZZANINE_%s_CLK_SEL' % self.mez, 'MEZZANINE_%s_CLK_SEL' % self.mez))
        cons.append(PortConstraint('aux_clk_diff_p','aux_clk_diff_p')) #AUX_CLK_P : in std_logic;     AU20
        cons.append(PortConstraint('aux_clk_diff_n','aux_clk_diff_n')) #AUX_CLK_N : in std_logic;     AV19
        cons.append(PortConstraint('sync_in_p','sync_in_p'))       #AUX_SYNCI_P : in std_logic;   AT21
        cons.append(PortConstraint('sync_in_n','sync_in_n'))       #AUX_SYNCI_N : in std_logic;   AU21
        cons.append(PortConstraint('sync_out_p','sync_out_p'))     #AUX_SYNCO_P : out std_logic;  AW21
        cons.append(PortConstraint('sync_out_n','sync_out_n'))     #AUX_SYNCO_N : out std_logic); AY21

        # -------------------------------------
        # INPUT/OUTPUT DELAY CONSTRAINTS
        # -------------------------------------
        cons.append(InputDelayConstraint(clkname='-of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]', consttype='min',  constdelay_ns=1.0, add_delay_en=True, portname='sync_in_p'))
        cons.append(InputDelayConstraint(clkname='-of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]', consttype='max',  constdelay_ns=2.0, add_delay_en=True, portname='sync_in_p'))
        cons.append(InputDelayConstraint(clkname='-of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]', consttype='min',  constdelay_ns=1.0, add_delay_en=True, portname='aux_clk_diff_p'))
        cons.append(InputDelayConstraint(clkname='-of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]', consttype='max',  constdelay_ns=2.0, add_delay_en=True, portname='aux_clk_diff_p'))
        cons.append(OutputDelayConstraint(clkname='-of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]', consttype='min', constdelay_ns=-3.0, add_delay_en=True, portname='sync_out_p'))
        cons.append(OutputDelayConstraint(clkname='-of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]', consttype='max', constdelay_ns=-3.0, add_delay_en=True, portname='sync_out_p'))
        cons.append(OutputDelayConstraint(clkname='-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', consttype='min', constdelay_ns=0.1, add_delay_en=True, portname='MEZZANINE_%s_RESET' % self.mez))
        cons.append(OutputDelayConstraint(clkname='-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', consttype='max', constdelay_ns=0.2, add_delay_en=True, portname='MEZZANINE_%s_RESET' % self.mez))
        cons.append(MultiCycleConstraint(multicycletype='setup',sourcepath='get_clocks -of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', destpath='get_ports MEZZANINE_%s_RESET' % self.mez, multicycledelay=2))
        cons.append(MultiCycleConstraint(multicycletype='hold', sourcepath='get_clocks -of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', destpath='get_ports MEZZANINE_%s_RESET' % self.mez, multicycledelay=1))

        # -------------------------------------
        # CLOCKS
        # -------------------------------------
        cons.append(ClockConstraint('%s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname,'%s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK' % self.fullname, period=3.571, port_en=False, virtual_en=False,  waveform_min=0.0, waveform_max=1.785))
        cons.append(ClockConstraint('%s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname,'%s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK' % self.fullname, period=3.571, port_en=False, virtual_en=False,  waveform_min=0.0, waveform_max=1.785))
        cons.append(ClockConstraint('%s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname,'%s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK' % self.fullname, period=3.571, port_en=False, virtual_en=False,  waveform_min=0.0, waveform_max=1.785))
        cons.append(ClockConstraint('%s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname,'%s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK' % self.fullname, period=3.571, port_en=False, virtual_en=False,  waveform_min=0.0, waveform_max=1.785))
        cons.append(ClockConstraint('MEZ%s_REFCLK_0_P' % self.mez,'MEZ%s_REFCLK_0_P' % self.mez, period=5.714, port_en=True, virtual_en=False, waveform_min=0.0, waveform_max=2.857))
        cons.append(ClockConstraint('MEZ%s_REFCLK_1_P' % self.mez,'MEZ%s_REFCLK_1_P' % self.mez, period=5.714, port_en=True, virtual_en=False, waveform_min=0.0, waveform_max=2.857))
        cons.append(ClockConstraint('MEZ%s_REFCLK_2_P' % self.mez,'MEZ%s_REFCLK_2_P' % self.mez, period=5.714, port_en=True, virtual_en=False, waveform_min=0.0, waveform_max=2.857))
        cons.append(ClockConstraint('MEZ%s_REFCLK_3_P' % self.mez,'MEZ%s_REFCLK_3_P' % self.mez, period=5.714, port_en=True, virtual_en=False, waveform_min=0.0, waveform_max=2.857))

        # -------------------------------------
        # ASYNCHRONOUS CONSTRAINTS
        # -------------------------------------
        cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        cons.append(ClockGroupConstraint('-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]', '%s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK'% self.fullname, 'asynchronous'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]', destpath='[get_clocks %s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]', destpath='[get_clocks %s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]', destpath='[get_clocks %s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]', destpath='[get_clocks %s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT0]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT1]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT1]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT1]]'))
        cons.append(FalsePathConstraint(sourcepath='[get_clocks %s/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/jesd204b_11200_rx_init_i/U0/jesd204b_11200_rx_i/gt0_jesd204b_11200_rx_i/gthe2_i/RXOUTCLK]' % self.fullname, destpath='[get_clocks -of_objects [get_pins */SYS_CLK_MMCM_inst/CLKOUT1]]'))
        if self.sync_ms == "Master":
            cons.append(RawConstraint('set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins %s/adc_pll_i/U0/mmcm_adv_inst/CLKOUT0]]' % self.fullname))

        # -------------------------------------
        # CDC WAIVER
        # -------------------------------------
        cons.append(RawConstraint('create_waiver -type CDC -id CDC-11 -from [get_pins skarab_infr/user_fpga_rst_reg/C] -to [get_pins %s/ADC32RF45_11G2_RX_0/tff_adcplllocked/reg_z_reg/D] -user Peralex -description {Confirmed CDC-11 can be ignored in this case}' % self.fullname))
        cons.append(RawConstraint('create_waiver -type CDC -id CDC-11 -from [get_pins skarab_infr/user_fpga_rst_reg/C] -to [get_pins %s/ADC32RF45_11G2_RX_1/tff_adcplllocked/reg_z_reg/D] -user Peralex -description {Confirmed CDC-11 can be ignored in this case}' % self.fullname))
        cons.append(RawConstraint('create_waiver -type CDC -id CDC-11 -from [get_pins skarab_infr/user_fpga_rst_reg/C] -to [get_pins %s/ADC32RF45_11G2_RX_2/tff_adcplllocked/reg_z_reg/D] -user Peralex -description {Confirmed CDC-11 can be ignored in this case}' % self.fullname))
        cons.append(RawConstraint('create_waiver -type CDC -id CDC-11 -from [get_pins skarab_infr/user_fpga_rst_reg/C] -to [get_pins %s/ADC32RF45_11G2_RX_3/tff_adcplllocked/reg_z_reg/D] -user Peralex -description {Confirmed CDC-11 can be ignored in this case}' % self.fullname))

        # -------------------------------------
        # PBLOCKS
        # -------------------------------------
        cons.append(RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_0' % self.mez))
        cons.append(RawConstraint('add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' % self.mez + ' [get_cells -quiet [list '+self.fullname+'/ADC32RF45_11G2_RX_0/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'))
        if self.mez == 0:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' % self.mez + ' -add {CLOCKREGION_X0Y4:CLOCKREGION_X0Y4}'))
        elif self.mez == 1:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' % self.mez + ' -add {CLOCKREGION_X0Y0:CLOCKREGION_X0Y0}'))
        elif self.mez == 2:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' % self.mez + ' -add {CLOCKREGION_X1Y3:CLOCKREGION_X1Y3}'))
        elif self.mez == 3:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_0]' % self.mez + ' -add {CLOCKREGION_X1Y7:CLOCKREGION_X1Y7}'))

        cons.append(RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_1' % self.mez))
        cons.append(RawConstraint('add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' % self.mez + ' [get_cells -quiet [list '+self.fullname+'/ADC32RF45_11G2_RX_1/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'))
        if self.mez == 0:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' % self.mez + ' -add {CLOCKREGION_X0Y5:CLOCKREGION_X0Y5}'))
        elif self.mez == 1:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' % self.mez + ' -add {CLOCKREGION_X0Y1:CLOCKREGION_X0Y1}'))
        elif self.mez == 2:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' % self.mez + ' -add {CLOCKREGION_X1Y2:CLOCKREGION_X1Y2}'))
        elif self.mez == 3:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_1]' % self.mez + ' -add {CLOCKREGION_X1Y6:CLOCKREGION_X1Y6}'))

        cons.append(RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_2' % self.mez))
        cons.append(RawConstraint('add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' % self.mez + ' [get_cells -quiet [list '+self.fullname+'/ADC32RF45_11G2_RX_2/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'))
        if self.mez == 0:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' % self.mez + ' -add {CLOCKREGION_X0Y6:CLOCKREGION_X0Y6}'))
        elif self.mez == 1:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' % self.mez + ' -add {CLOCKREGION_X0Y2:CLOCKREGION_X0Y2}'))
        elif self.mez == 2:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' % self.mez + ' -add {CLOCKREGION_X1Y1:CLOCKREGION_X1Y1}'))
        elif self.mez == 3:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_2]' % self.mez + ' -add {CLOCKREGION_X1Y5:CLOCKREGION_X1Y5}'))

        cons.append(RawConstraint('create_pblock MEZ%s_ADC32RF45_11G2_RX_3' % self.mez))
        cons.append(RawConstraint('add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' % self.mez + ' [get_cells -quiet [list '+self.fullname+'/ADC32RF45_11G2_RX_3/ADC32RF45_11G2_RX_PHY_i/jesd204b_11200_rx_support_i/gt_usrclk_source/rxoutclk_bufg0_i]]'))
        if self.mez == 0:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' % self.mez + ' -add {CLOCKREGION_X0Y7:CLOCKREGION_X0Y7}'))
        elif self.mez == 1:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' % self.mez + ' -add {CLOCKREGION_X0Y3:CLOCKREGION_X0Y3}'))
        elif self.mez == 2:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' % self.mez + ' -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0}'))
        elif self.mez == 3:
            cons.append(RawConstraint('resize_pblock [get_pblocks MEZ%s_ADC32RF45_11G2_RX_3]' % self.mez + ' -add {CLOCKREGION_X1Y4:CLOCKREGION_X1Y4}'))
                                                        
        return cons
Пример #7
0
    def gen_constraints(self):
        cons = []
        # leaving the aux constraints here so that we can support them at a later stage.
        #cons.append(PortConstraint('AUX_CLK_N','AUX_CLK_N'))
        #cons.append(PortConstraint('AUX_CLK_P','AUX_CLK_P'))
        #cons.append(PortConstraint('AUX_SYNCO_P','AUX_SYNCO_P'))
        #cons.append(PortConstraint('AUX_SYNCI_P','AUX_SYNCI_P'))
        #cons.append(PortConstraint('AUX_SYNCO_N','AUX_SYNCO_N'))
        #cons.append(PortConstraint('AUX_SYNCI_N', 'AUX_SYNCI_N'))
        #Need to extract the period and half period for creating the clock

        #Port constraints
        cons.append(
            PortConstraint('MEZ3_' + self.mez3_phy + '_LANE_TX_P',
                           'MEZ3_' + self.mez3_phy + '_LANE_TX_P',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ3_' + self.mez3_phy + '_LANE_TX_N',
                           'MEZ3_' + self.mez3_phy + '_LANE_TX_N',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ3_' + self.mez3_phy + '_LANE_RX_P',
                           'MEZ3_' + self.mez3_phy + '_LANE_RX_P',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ3_' + self.mez3_phy + '_LANE_RX_N',
                           'MEZ3_' + self.mez3_phy + '_LANE_RX_N',
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))

        cons.append(
            PortConstraint('MEZ3_REFCLK_%s_P' % self.port,
                           'MEZ3_REFCLK_%s_P' % self.port))
        cons.append(
            PortConstraint('MEZ3_REFCLK_%s_N' % self.port,
                           'MEZ3_REFCLK_%s_N' % self.port))
        cons.append(
            ClockConstraint('MEZ3_REFCLK_%s_P' % self.port,
                            'MEZ3_REFCLK_%s_P' % self.port,
                            period=6.4,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=3.2))

        cons.append(
            RawConstraint('create_pblock MEZ3_' + self.mez3_phy + '_QSFP'))
        #cons.append(RawConstraint('add_cells_to_pblock [get_pblocks MEZ3_'+self.mez3_phy+'_QSFP] [get_cells -quiet [list '+self.fullname+'/IEEE802_3_XL_PHY_0/PHY_inst/RX_CLK_RCC]]'))
        #cons.append(RawConstraint('add_cells_to_pblock [get_pblocks MEZ3_'+self.mez3_phy+'_QSFP] [get_cells -quiet [list '+self.fullname+'/IEEE802_3_XL_PHY_0/PHY_inst/TX_CLK_RCC]]'))
        cons.append(
            RawConstraint('add_cells_to_pblock [get_pblocks MEZ3_' +
                          self.mez3_phy + '_QSFP] [get_cells -quiet [list ' +
                          self.fullname + '/IEEE802_3_XL_PHY_0/PHY_inst]]'))
        cons.append(
            RawConstraint('resize_pblock [get_pblocks MEZ3_' + self.mez3_phy +
                          '_QSFP] -add {' + self.clock_region + '}'))
        if (self.psize_extend):
            cons.append(
                RawConstraint('resize_pblock [get_pblocks MEZ3_' +
                              self.mez3_phy + '_QSFP] -add {' +
                              self.clock_region2 + '}'))
            cons.append(
                RawConstraint(
                    'set_property BEL MMCME2_ADV [get_cells [list ' +
                    self.fullname +
                    '/IEEE802_3_XL_lPHY_0/PHY_inst/RX_CLK_RCC/ref_clkB_MMCME2_BASE_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property LOC MMCME2_ADV_X1Y4 [get_cells [list ' +
                    self.fullname +
                    '/IEEE802_3_XL_PHY_0/PHY_inst/RX_CLK_RCC/ref_clkB_MMCME2_BASE_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property BEL PLLE2_ADV [get_cells [list ' +
                    self.fullname +
                    '/IEEE802_3_XL_PHY_0/PHY_inst/TX_CLK_RCC/PLLE2_BASE_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property LOC PLLE2_ADV_X1Y4 [get_cells [list ' +
                    self.fullname +
                    '/IEEE802_3_XL_PHY_0/PHY_inst/TX_CLK_RCC/PLLE2_BASE_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property BEL MMCME2_ADV [get_cells [list skarab_infr/SYS_CLK_MMCM_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property LOC MMCME2_ADV_X1Y3 [get_cells [list skarab_infr/SYS_CLK_MMCM_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property BEL MMCME2_ADV [get_cells [list skarab_infr/USER_CLK_MMCM_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property LOC MMCME2_ADV_X0Y4 [get_cells [list skarab_infr/USER_CLK_MMCM_inst]]'
                ))
            cons.append(
                RawConstraint(
                    'set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN [get_nets skarab_infr/refclk_0]'
                ))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, '-include_generated_clocks FPGA_REFCLK_BUF1_P', 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins skarab_infr/SYS_CLK_MMCM_inst/CLKOUT0]',
                'MEZ3_REFCLK_%s_P' % self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, '-of_objects [get_pins skarab_infr/gmii_to_sgmii_0/U0/core_clocking_i/mmcm_adv_inst/CLKOUT0]', 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins %s/gmii_to_sgmii_0/U0/core_clocking_i/mmcm_adv_inst/CLKOUT0]' %self.fullname, 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        cons.append(
            ClockGroupConstraint('MEZ3_REFCLK_%s_P' % self.port,
                                 'FPGA_EMCCLK2', 'asynchronous'))
        cons.append(
            ClockGroupConstraint('FPGA_EMCCLK2',
                                 'MEZ3_REFCLK_%s_P' % self.port,
                                 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                'MEZ3_REFCLK_%s_P' % self.port,
                '-of_objects [get_pins skarab_infr/SYS_CLK_MMCM_inst/CLKOUT0]',
                'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                'MEZ3_REFCLK_%s_P' % self.port,
                '-of_objects [get_pins skarab_infr/USER_CLK_MMCM_inst/CLKOUT0]',
                'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                'MEZ3_REFCLK_%s_P' % self.port,
                '-of_objects [get_pins skarab_infr/SYS_CLK_MMCM_inst/CLKOUT1]',
                'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins skarab_infr/SYS_CLK_MMCM_inst/CLKOUT1]',
                'MEZ3_REFCLK_%s_P' % self.port, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins skarab_infr/USER_CLK_MMCM_inst/CLKOUT0]',
                'MEZ3_REFCLK_%s_P' % self.port, 'asynchronous'))

        #cons.append(ClockGroupConstraint('-of_objects [get_pins %s/SYS_CLK_MMCM_inst/CLKOUT0]'  % self.fullname, 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, '-of_objects [get_pins %s/gmii_to_sgmii_0/U0/core_clocking_i/mmcm_adv_inst/CLKOUT0]' % self.fullname, 'asynchronous'))
        #cons.append(ClockGroupConstraint('VIRTUAL_clkout0', 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('virtual_clock', 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, 'FPGA_EMCCLK2', 'asynchronous'))
        #cons.append(ClockGroupConstraint('FPGA_EMCCLK2', 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, 'virtual_clock', 'asynchronous'))
        #cons.append(ClockGroupConstraint('VIRTUAL_I', 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, 'VIRTUAL_I','asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, '-of_objects [get_pins %s/SYS_CLK_MMCM_inst/CLKOUT1]' % self.fullname, 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins %s/SYS_CLK_MMCM_inst/CLKOUT1]' % self.fullname, 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))
        #cons.append(ClockGroupConstraint('MEZ3_REFCLK_%s_P'%self.port, '-of_objects [get_pins %s/USER_CLK_MMCM_inst/CLKOUT0]' % self.fullname, 'asynchronous'))
        #cons.append(ClockGroupConstraint('-of_objects [get_pins %s/USER_CLK_MMCM_inst/CLKOUT0]' % self.fullname, 'MEZ3_REFCLK_%s_P'%self.port, 'asynchronous'))

        #cons.append(InputDelayConstraint(clkname='MEZ3_REFCLK_%s_P'%self.port, consttype='min', constdelay_ns=1.0, add_delay_en=True, portname='FPGA_RESET_N'))
        #cons.append(InputDelayConstraint(clkname='MEZ3_REFCLK_%s_P'%self.port, consttype='max', constdelay_ns=2.0, add_delay_en=True, portname='FPGA_RESET_N'))
        #cons.append(MultiCycleConstraint(multicycletype='setup',sourcepath='get_ports FPGA_RESET_N', destpath='get_clocks MEZ3_REFCLK_%s_P'%self.port, multicycledelay=4))
        #cons.append(MultiCycleConstraint(multicycletype='hold',sourcepath='get_ports FPGA_RESET_N', destpath='get_clocks MEZ3_REFCLK_%s_P'%self.port, multicycledelay=4))
        return cons
Пример #8
0
    def gen_constraints(self):

        cons = []

        # Pin Constraints
        cons.append(
            PortConstraint('MEZ%s_REFCLK_0_P' % self.mez,
                           'MEZ%s_REFCLK_0_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_0_N' % self.mez,
                           'MEZ%s_REFCLK_0_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_1_P' % self.mez,
                           'MEZ%s_REFCLK_1_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_1_N' % self.mez,
                           'MEZ%s_REFCLK_1_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_2_P' % self.mez,
                           'MEZ%s_REFCLK_2_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_2_N' % self.mez,
                           'MEZ%s_REFCLK_2_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_3_P' % self.mez,
                           'MEZ%s_REFCLK_3_P' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_REFCLK_3_N' % self.mez,
                           'MEZ%s_REFCLK_3_N' % self.mez))
        cons.append(
            PortConstraint('MEZ%s_PHY11_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY11_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY11_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY11_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY12_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY12_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY12_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY12_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY21_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY21_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY21_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY21_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY22_LANE_RX_P' % self.mez,
                           'MEZ%s_PHY22_LANE_RX_P' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))
        cons.append(
            PortConstraint('MEZ%s_PHY22_LANE_RX_N' % self.mez,
                           'MEZ%s_PHY22_LANE_RX_N' % self.mez,
                           port_index=list(range(4)),
                           iogroup_index=list(range(4))))

        cons.append(
            PortConstraint('MEZZANINE_%s_RESET' % self.mez,
                           'MEZZANINE_%s_RESET' % self.mez))
        cons.append(
            PortConstraint('MEZZANINE_%s_CLK_SEL' % self.mez,
                           'MEZZANINE_%s_CLK_SEL' % self.mez))

        cons.append(PortConstraint(
            'aux_clk_diff_p',
            'aux_clk_diff_p'))  #AUX_CLK_P : in std_logic;     AU20
        cons.append(PortConstraint(
            'aux_clk_diff_n',
            'aux_clk_diff_n'))  #AUX_CLK_N : in std_logic;     AV19
        cons.append(PortConstraint(
            'sync_in_p', 'sync_in_p'))  #AUX_SYNCI_P : in std_logic;   AT21
        cons.append(PortConstraint(
            'sync_in_n', 'sync_in_n'))  #AUX_SYNCI_N : in std_logic;   AU21
        cons.append(PortConstraint(
            'sync_out_p', 'sync_out_p'))  #AUX_SYNCO_P : out std_logic;  AW21
        cons.append(PortConstraint(
            'sync_out_n', 'sync_out_n'))  #AUX_SYNCO_N : out std_logic); AY21

        # Output Constraints
        #set_output_delay -clock [get_clocks FPGA_REFCLK_BUF0_P] -min -add_delay -3.000 [get_ports AUX_SYNCO_P]
        #set_output_delay -clock [get_clocks FPGA_REFCLK_BUF0_P] -max -add_delay -3.000 [get_ports AUX_SYNCO_P]

        cons.append(
            OutputDelayConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                consttype='min',
                constdelay_ns=-3.0,
                add_delay_en=True,
                portname='sync_out_p'))
        cons.append(
            OutputDelayConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                consttype='max',
                constdelay_ns=-3.0,
                add_delay_en=True,
                portname='sync_out_p'))

        #Clock Constraints
        #create_clock -period 100.000 -name AUX_CLK_P -waveform {0.000 50.000} [get_ports AUX_CLK_P]
        #create_clock -period 100.000 -name AUX_SYNCI_P -waveform {0.000 50.000} [get_ports AUX_SYNCI_P]
        #create_clock -period 5.333 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #create_clock -period 5.333 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #create_clock -period 5.333 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #create_clock -period 5.333 [get_pins SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #create_clock -period 5.333 -waveform {0.000 2.666} [get_ports ADC_MEZ_REFCLK_0_P]
        #create_clock -period 5.333 -waveform {0.000 2.666} [get_ports ADC_MEZ_REFCLK_1_P]
        #create_clock -period 5.333 -waveform {0.000 2.666} [get_ports ADC_MEZ_REFCLK_2_P]
        #create_clock -period 5.333 -waveform {0.000 2.666} [get_ports ADC_MEZ_REFCLK_3_P]

        cons.append(
            ClockConstraint('aux_clk_diff_p',
                            'aux_clk_diff_p',
                            period=100.0,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=50.0))
        cons.append(
            ClockConstraint('sync_in_p',
                            'sync_in_p',
                            period=100.0,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=50.0))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=5.333,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=2.666))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=5.333,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=2.666))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=5.333,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=2.666))
        cons.append(
            ClockConstraint(
                '%s/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                '%s/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname,
                period=5.333,
                port_en=False,
                virtual_en=False,
                waveform_min=0.0,
                waveform_max=2.666))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_0_P' % self.mez,
                            'MEZ%s_REFCLK_0_P' % self.mez,
                            period=5.333,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.666))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_1_P' % self.mez,
                            'MEZ%s_REFCLK_1_P' % self.mez,
                            period=5.333,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.666))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_2_P' % self.mez,
                            'MEZ%s_REFCLK_2_P' % self.mez,
                            period=5.333,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.666))
        cons.append(
            ClockConstraint('MEZ%s_REFCLK_3_P' % self.mez,
                            'MEZ%s_REFCLK_3_P' % self.mez,
                            period=5.333,
                            port_en=True,
                            virtual_en=False,
                            waveform_min=0.0,
                            waveform_max=2.666))

        #Clock Group Constraints
        #set_clock_groups -asynchronous -group [get_clocks AUX_CLK_P] -group [get_clocks FPGA_REFCLK_BUF0_P]
        #set_clock_groups -asynchronous -group [get_clocks AUX_SYNCI_P] -group [get_clocks FPGA_REFCLK_BUF0_P]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]
        #set_clock_groups -asynchronous -group [get_clocks FPGA_REFCLK_BUF0_P] -group [get_clocks SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK]

        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                'aux_clk_diff_p', 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                'sync_in_p', 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))
        cons.append(
            ClockGroupConstraint(
                '-of_objects [get_pins */USER_CLK_MMCM_inst/CLKOUT0]',
                '%s/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/JESD204B_4LaneRX_7500MHz_init_i/U0/JESD204B_4LaneRX_7500MHz_i/gt0_JESD204B_4LaneRX_7500MHz_i/gthe2_i/RXOUTCLK'
                % self.fullname, 'asynchronous'))

        #False Path Constraints
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_0/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_0/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_1/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_1/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_2/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_2/reset_RX_SYNC_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_3/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]
        #set_false_path -to [get_pins {SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_3/reset_RX_SYNC_SR_reg[*]/PRE}]

        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_0/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_0/reset_RX_SYNC_SR_reg[*]/PRE}]' %
                self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_1/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_1/reset_RX_SYNC_SR_reg[*]/PRE}]' %
                self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_2/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_2/reset_RX_SYNC_SR_reg[*]/PRE}]' %
                self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_3/ADC_RX_PHY_soft_reset_SR_reg[*]/PRE}]'
                % self.fullname))
        cons.append(
            FalsePathConstraint(
                destpath=
                '[get_pins {%s/ADC32RF45_RX_3/reset_RX_SYNC_SR_reg[*]/PRE}]' %
                self.fullname))

        #Raw Constraints
        #create_pblock ADC32RF45_RX_0
        #add_cells_to_pblock [get_pblocks ADC32RF45_RX_0] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]
        #resize_pblock [get_pblocks ADC32RF45_RX_0] -add {CLOCKREGION_X1Y3:CLOCKREGION_X1Y3}
        #create_pblock ADC32RF45_RX_1
        #add_cells_to_pblock [get_pblocks ADC32RF45_RX_1] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]
        #resize_pblock [get_pblocks ADC32RF45_RX_1] -add {CLOCKREGION_X1Y2:CLOCKREGION_X1Y2}
        #create_pblock ADC32RF45_RX_2
        #add_cells_to_pblock [get_pblocks ADC32RF45_RX_2] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]
        #resize_pblock [get_pblocks ADC32RF45_RX_2] -add {CLOCKREGION_X1Y1:CLOCKREGION_X1Y1}
        #create_pblock ADC32RF45_RX_3
        #add_cells_to_pblock [get_pblocks ADC32RF45_RX_3] [get_cells -quiet [list SKARAB_ADC4x3G_14_inst/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]
        #resize_pblock [get_pblocks ADC32RF45_RX_3] -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0}

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_RX_0' % self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_RX_0]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_RX_0/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X0Y4:CLOCKREGION_X0Y4}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X0Y0:CLOCKREGION_X0Y0}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X1Y3:CLOCKREGION_X1Y3}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_0]' %
                    self.mez + ' -add {CLOCKREGION_X1Y7:CLOCKREGION_X1Y7}'))

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_RX_1' % self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_RX_1]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_RX_1/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X0Y5:CLOCKREGION_X0Y5}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X0Y1:CLOCKREGION_X0Y1}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X1Y2:CLOCKREGION_X1Y2}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_1]' %
                    self.mez + ' -add {CLOCKREGION_X1Y6:CLOCKREGION_X1Y6}'))

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_RX_2' % self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_RX_2]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_RX_2/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X0Y6:CLOCKREGION_X0Y6}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X0Y2:CLOCKREGION_X0Y2}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X1Y1:CLOCKREGION_X1Y1}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_2]' %
                    self.mez + ' -add {CLOCKREGION_X1Y5:CLOCKREGION_X1Y5}'))

        cons.append(
            RawConstraint('create_pblock MEZ%s_ADC32RF45_RX_3' % self.mez))
        cons.append(
            RawConstraint(
                'add_cells_to_pblock [get_pblocks MEZ%s_ADC32RF45_RX_3]' %
                self.mez + ' [get_cells -quiet [list ' + self.fullname +
                '/ADC32RF45_RX_3/ADC_PHY_inst/ADC_GT_SUPPPORT_inst/GT0_RXOUTCLK_BUFH]]'
            ))
        if self.mez == 0:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X0Y7:CLOCKREGION_X0Y7}'))
        elif self.mez == 1:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X0Y3:CLOCKREGION_X0Y3}'))
        elif self.mez == 2:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0}'))
        elif self.mez == 3:
            cons.append(
                RawConstraint(
                    'resize_pblock [get_pblocks MEZ%s_ADC32RF45_RX_3]' %
                    self.mez + ' -add {CLOCKREGION_X1Y4:CLOCKREGION_X1Y4}'))

        return cons