302 lines
12 KiB
Tcl
302 lines
12 KiB
Tcl
########################################################################################
|
|
#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]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|