######################################################################################## #set sdc version 2.1 ######################################################################################## set sdc_verion 2.1 ######################################################################################## #set p/v/t unit ######################################################################################## set_units -time ns -resistance kOhm -capacitance pF -voltage V -current mA ######################################################################################## #set current_design ######################################################################################## set topModuleName "da4008_chip_top" current_design $topModuleName reset_design set sdc_mode "flatten_sta"; # block_syn, block_sta, flatten_sta ############################################################################################### # clock, including: # clk : 800MHz , 0 phase # sclk : 80MHz , 0 phase ############################################################################################### #800MHz Clock set P_CLK [expr 1.250 * 1.00] set H_CLK [expr {$P_CLK / 2.00}] #82.5MHz Clock set P_SCLK [expr {$P_CLK * 10.00}] set H_SCLK [expr {$P_SCLK / 2.00}] ######################################################################################## #create_clock sclk & clk ######################################################################################## #create SPI clock sclk create_clock -name sclk -period $P_SCLK -waveform "0 $H_SCLK" [get_ports PI_sclk] #create System clock clk create_clock -name clk -period $P_CLK -waveform "0 $H_CLK" [get_ports clk] #lvds_clk create_clock -name lvds_clk -period $P_CLK -waveform "0 $H_CLK" [get_ports lvds_clk] #create virtual clock #create_clock -name clk_v -period $P_CLK -waveform "0 $H_CLK" #create_clock -name sclk_v -period $P_SCLK -waveform "0 $H_SCLK" set_clock_uncertainty [expr {$P_CLK * 0.25}] -setup [get_clocks clk ] set_clock_uncertainty 0.100 -hold [get_clocks clk ] set_clock_uncertainty [expr {$P_CLK * 0.25}] -setup [get_clocks lvds_clk ] set_clock_uncertainty 0.100 -hold [get_clocks lvds_clk ] set_clock_uncertainty [expr {$P_SCLK * 0.25}] -setup [get_clocks sclk] set_clock_uncertainty 0.100 -hold [get_clocks sclk] #set clock group #set_clock_groups -asynchronous -group {clk clk_v} -group {sclk sclk_v} -allow_paths ######################################################################################## #set IO group of sclk ######################################################################################## set iport_of_sclk {PI_mosi \ PI_csn \ Ccalst } set oport_of_sclk { CcalRstn \ EnAllP \ DccEn \ CasGateCkCtrl \ SpiEnPi \ SpiEnQec \ SpiEnDcc \ SpiQecCtrlIp \ SpiQecCtrlIn \ SpiQecCtrlQp \ SpiQecCtrlQn \ SpiDccCtrlIup \ SpiDccCtrlIdn \ SpiDccCtrlQup \ SpiDccCtrlQdn \ SpiSiqNOut \ SpiSiqPOut \ SpiSiPOut \ SpiSqPOut \ CrtlCrossOverN \ CrtlCrossOverP \ CcalRsv0 \ CcalRsv1 \ SelCk10GDig \ SelCk2p5GDig \ SelCk625MDig \ P2sDataEn \ P2sEnAllP \ EnPiP \ CkDivRstn \ p2srsv0 \ p2srsv1 \ CkRxSw \ RstnCk \ CtrlZin } ######################################################################################## #set IO group of clk ######################################################################################## set iport_of_clk {} set oport_of_clk { Rterm \ PrbsEn \ CasAddr \ CasDw \ IMainCtrl \ IBleedCtrl \ ICkCml \ CurRsv0 \ CurRsv1 \ phase_tap \ MSB_POS_OUT* \ LSB_POS_OUT* \ MSB_POS_DUM* \ DEM_VLD } set oport_of_clk_neg { MSB_NEG_OUT* \ LSB_NEG_OUT* \ MSB_NEG_DUM* } ######################################################################################## #set IO group of lvds_clk ######################################################################################## set iport_of_lvds_clk { lvds_data \ lvds_valid } set oport_of_lvds_clk {} ######################################################################################## #set input delay of clk ######################################################################################## #set_input_delay -max -clock [get_clocks clk] [expr {$P_CLK * 0.450}] [get_ports $iport_of_clk] #set_input_delay -min -clock [get_clocks clk] [expr {$P_CLK * 0.060}] [get_ports $iport_of_clk] -add_delay ######################################################################################## #set output delay of clk @ posegde ######################################################################################## set_output_delay -max -clock [get_clocks clk] [expr {$P_CLK * 0.450}] [get_ports $oport_of_clk] set_output_delay -min -clock [get_clocks clk] [expr {$P_CLK * 0.060}] [get_ports $oport_of_clk] -add_delay ######################################################################################## #set output delay of clk @ negedge ######################################################################################## set_output_delay -max -clock [get_clocks clk] [expr {$P_CLK * 0.450}] [get_ports $oport_of_clk_neg] -clock_fall set_output_delay -min -clock [get_clocks clk] [expr {$P_CLK * 0.100}] [get_ports $oport_of_clk_neg] -clock_fall -add_delay ######################################################################################## #set input delay of sclk ######################################################################################## set_input_delay -max -clock [get_clocks sclk] [expr {$P_SCLK * 0.600}] [get_ports $iport_of_sclk] set_input_delay -min -clock [get_clocks sclk] [expr {$P_SCLK * 0.100}] [get_ports $iport_of_sclk] -add_delay ######################################################################################## #set output delay of sclk ######################################################################################## set_output_delay -max -clock [get_clocks sclk] [expr {$P_SCLK * 0.600}] [get_ports $oport_of_sclk] set_output_delay -min -clock [get_clocks sclk] [expr {$P_SCLK * 0.100}] [get_ports $oport_of_sclk] -add_delay ######################################################################################## #set input delay of lvds_clk ######################################################################################## set_input_delay -max -clock [get_clocks lvds_clk] [expr {$P_CLK * 0.600}] [get_ports $iport_of_lvds_clk] set_input_delay -min -clock [get_clocks lvds_clk] [expr {$P_CLK * 0.100}] [get_ports $iport_of_lvds_clk] -add_delay ######################################################################################## # group_path ######################################################################################## group_path -name INPUTS -from [all_inputs] group_path -name OUTPUTS -to [all_outputs] group_path -name COMBO -from [all_inputs] -to [all_outputs] group_path -name clk -critical_range 0.15 -weight 5 group_path -name lvds_clk -critical_range 0.15 -weight 2 group_path -name sclk -critical_range 0.50 -weight 1 ######################################################################################################################################################### # Set Asynchronous Clock ######################################################################################################################################################### set_clock_groups -asynchronous -group {clk} -group {sclk} set_clock_groups -asynchronous -group {clk} -group {lvds_clk} set_clock_groups -asynchronous -group {lvds_clk} -group {sclk} set_max_delay 1.25 -from [get_clocks lvds_clk] -to [get_clocks clk] set_max_delay 10 -from [get_clocks sclk] -to [get_clocks clk] set_max_delay 10 -from [get_clocks sclk] -to [get_clocks lvds_clk] ######################################################################################## #set_case_analysis ######################################################################################## #spi set_max_delay 3 -from [get_ports PI_sclk] -to [get_cells U_digital_top/U_spi_slave/U_spi_sys/sclk_reg_dffrs/qout_r_reg[0]] set_max_delay 3 -from [get_ports PI_mosi ] -to [get_cells U_digital_top/U_spi_slave/U_spi_sys/mosi_reg_dffr/qout_r_reg[0]] set_max_delay 3 -from [get_ports PI_csn] -to [get_cells U_digital_top/U_spi_slave/U_spi_sys/csn_reg_dffrs/qout_r_reg[0]] set_max_delay 3 -from [get_cells U_digital_top/U_spi_slave/U_spi_sys/spi_dout_dffr/qout_r*] -to [get_ports PO_miso] #sync_in set_max_delay 2 -from [get_ports PI_sync_in] set_dont_touch_network -no_propagate [get_ports PI_*] set_dont_touch_network -no_propagate [get_ports PO_*] set_max_delay 3 -from [get_cells U_digital_top/pulse_inst_sync/pulse_reg] -to [get_ports PO_sync_out ] set_max_delay 3 -from [get_cells U_digital_top/U_systemregfile/irq_dffr/qout_r*] -to [get_ports PO_irq] ######################################################################################## # set_false_path & set_dont_touch_network & set_ideal_network ######################################################################################## set_false_path -from [get_ports PI_async_rstn] set_ideal_network [get_ports PI_async_rstn] set_ideal_network [get_ports clk] set_ideal_network [get_ports lvds_clk] set_ideal_network [get_ports PI_sclk] set_dont_touch [get_cells U_iopad] set_multicycle_path 2 -setup -to [get_cells U_digital_top/U_spi_slave/U_spi_sys/rddata_reg_dfflr/qout_r*] set_multicycle_path 1 -hold -to [get_cells U_digital_top/U_spi_slave/U_spi_sys/rddata_reg_dfflr/qout_r*] ####ramp set_multicycle_path 2 -setup -from [get_cells U_digital_top/U_systemregfile/ramp_ifs_dfflrs/qout_r*] set_multicycle_path 1 -hold -from [get_cells U_digital_top/U_systemregfile/ramp_ifs_dfflrs/qout_r*] set_multicycle_path 2 -setup -from [get_cells U_digital_top/U_systemregfile/rampctr_dfflrs/qout_r*] set_multicycle_path 1 -hold -from [get_cells U_digital_top/U_systemregfile/rampctr_dfflrs/qout_r*] ######################################################################################## #set max fanout ######################################################################################## set_max_fanout 32 [current_design] ######################################################################################## #set transition ######################################################################################## #set_max_transition 0.15 [current_design] set_max_transition -clock_path 0.25 [all_clocks] set_max_transition -data_path 0.6 [all_clocks] set_input_transition 0.1 [get_ports clk] set_input_transition 0.15 [remove_from_collection [all_inputs] [get_ports clk]] ######################################################################################## #set divre & load & capacitance ######################################################################################## #set_driving_cell -lib_cell CKBD20BWP7T35P140 -pin Z -from_pin I -input_transition_rise 0.075 -input_transition_fall 0.075 [get_ports clk] #set_driving_cell -lib_cell BUFFD4BWP7T35P140 -pin Z -from_pin I -input_transition_rise 0.1 -input_transition_fall 0.1 [remove_from_collection [all_inputs] [get_ports clk]] #set_driving 0.1 [remove_from_collection [all_inputs] [get_ports clk]] #set_load set_load -pin_load 0.05 [all_outputs] #set_max_capacitance set_max_capacitance 0.1 [current_design]