lin-win-share/DA4008_V1.3/syn/inputs/design.sdc

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]