175 lines
8.0 KiB
Tcl
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ******************** 设置综合环境 ******************** ##
source /home/project/ASIC/FFT_IFFT_IP/user/script/setup.tcl
set DO_SCAN 0
## ******************** common setting ******************** ##
#dc common setting
set_host_options -max_cores 8
set compile_enable_register_merging false
set svf_file_records_change_names_changes true
set enable_recovery_removal_arcs true
set case_analysis_with_logic_constants true
set timing_enable_multiple_clocks_per_reg "true"
set compile_instance_name_prefix "U"
set verilogout_no_tri true
set verilogout_show_unconnected_pins true
set bind_unused_hierarchical_pins false
#CLOCK gating setting
set compile_clock_gating_through_hierarchy false
#->set power_cg_auto_identify true
#->positive_edge_logic integrated
set_clock_gating_style \
-sequential_cell latch \
-control_point before \
-control_signal scan_enable \
-observation_point false \
-max_fanout 16 \
-minimum_bitwidth 4
#--append --------------------------------------------
set pwr_hdlc_split_cg_cells true
set timing_scgc_override_library_setup_hold true
set power_keep_license_after_power_commands true
set verilogout_equation false
set compile_seqmap_propagate_constants false
set compile_seqmap_propagate_high_effort false
set set_ultra_optimization "true"
set compile_seqmap_identify_shift_registers false
set compile_seqmap_no_scan_cell true
set compile_seqmap_propagate_constants false
set compile_delete_unloaded_seqential_cells false
set timing_report_unconstrained_paths true
set hdlin_enable_vpp true
set power_keep_license_after_power_command true
set single_group_per_sheet true
set auto_wire_load_selection false
set timing_disable_recovery_removal_checks false
set enable_recovery_removal_arcs true
# 开始记录DC综合的变动
set_svf $RES_OUT/$CURR_DESIGN.svf
set_app_var dc_allow_rtl_pg true
## ******************** 读取设计源文件 ******************** ##
#读入设计
analyze -format verilog { \
/home/project/ASIC/FFT_IFFT_IP/user/src/top.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/FFT_FLOW.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/send.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/sum.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/utils/ram.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/utils/SPI_M2S.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/utils/math/cmult.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/utils/RAM/2048FP/RAM2048.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/top/FFT_IFFT.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/top/fft.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/stage/BF_stage.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/stage/fft_stage.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/utils/BF_op.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/utils/ftrans_I.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/utils/ftrans_II.v \
/home/project/ASIC/FFT_IFFT_IP/user/src/Flow_FFT_IFFT/utils/ftwiddle.v \
}
elaborate $CURR_DESIGN -architecture verilog
current_design $CURR_DESIGN
set_fix_multiple_port_nets -all -buffer_constants
set hdlout_internal_busses true
set bus_inference_style "%s\[%d\]"
# define_name rules verilog -check_bus_indexing -allowed {a-XA-Z0-9_}
link > $RPT_OUT/00_link_design.log
set uniquify_naming_style ${CURR_DESIGN}_%s_%d
uniquify -force
check_design > $RPT_OUT/01_check_design.log
report_attributes -design
set_dont_touch u_FFT_FLOW/u_FFT_IFFT/FFT_INST.fft_ins/stagX[*].u_fft_stage/LARGER_THAN_2.BF_inst_I/u_ram/RAM_GEN.RAM*_IP.u_RAM*
set_dont_touch *_PAD*
set_dont_touch [get_ports CLK -filter {@port_direction == in} -quiet]
set_dont_touch u_FFT_FLOW/u_sum/u*_RAM2048/u*_FRAM512
set_dont_use scc018ug_hd_rvt_ff_v1p98_-40c_basic/PULLHD0
set_dont_use scc018ug_hd_rvt_ff_v1p98_-40c_basic/PULLHD1
## ******************** 进行设计约束 ******************** ##
# sdc
read_sdc /home/project/ASIC/FFT_IFFT_IP/user/data/constraint/timing.sdc
set_operating_conditions -max ff_v1p98_${F_TEMP}c -library $lib_fast
set_app_var auto_wire_load_selection false
# set_wire_load_model -name ForQA
# set_wire_load_mode enclosed
# 设置输入transtion需要将输入时钟信号去除
set_input_transition 0.89 [remove_from_collection [all_inputs] [get_clocks clk]]
echo "INFO : Defining Reset : RSTN"
set_drive 0 [get_ports RSTN -filter {@port_direction == in} -quiet]
set_false_path -from [get_ports RSTN -filter {@port_direction == in} -quiet]
set_ideal_network -no_propagate [get_nets -of_object [get_ports RSTN -filter {@port_direction == in} -quiet] -quiet]
set_ideal_network -no_propagate [get_nets -of_object [get_ports CLK -filter {@port_direction == in} -quiet] -quiet]
# set_ideal_network -no_propagate [get_nets -of_object [get_ports rstn -filter {@port_direction == in} -quiet] -quiet]
# set_ideal_network -no_propagate [get_nets -of_object [get_ports iclk -filter {@port_direction == in} -quiet] -quiet]
# 对时序进行分组
# set ports_clock_root [filter_collection [get_attribute [get_clocks] sources] object_class==port]
# group_path -name reg2out -from [all_registers -clock_pins] -to [all_outputs]
# group_path -name in2reg -from [remove_from_collection [all_inputs] $ports_clock_root] -to [all_registers -data_pins]
# group_path -name in2out -from [remove_from_collection [all_inputs] $ports_clock_root] -to [all_outputs]
set clock_ports [get_ports -quiet [all_fanout -clock_tree -flat]]
set all_inputs [all_inputs]
set all_outputs [all_outputs]
set all_nonclk_inputs [remove_from_collection $all_inputs $clock_ports]
set all_nonclk_outputs [remove_from_collection $all_outputs $clock_ports]
set all_icgs [get_cells -hier -filter "is_integrated_clock_gating_cell == true"]
set all_reg [all_registers]
set all_reg [remove_from_collection $all_reg $all_icgs]
group_path -from $all_reg -to $all_reg -name reg2reg
group_path -from $all_reg -to $all_nonclk_outputs -name reg2out
group_path -from $all_nonclk_inputs -to $all_reg -name in2reg
group_path -from $all_nonclk_inputs -to $all_nonclk_outputs -name in2out
#group_path -from $all_reg -to $all_icgs -name reg2gate
report_path_group
set_critical_range 3 [current_design]
#设置在RTL代码中用上升沿沿触发的寄存器采用使用集成门控时钟单元。
#设置该门控单元在DFT时的控制点放在门逻辑中的锁存器之前。
#设置一个门控单元所驱动的最大负载数目定义CG单元最大扇出的一个目的是减少CG后面的时钟延迟
#门控时钟单元的扇出越大,它到达寄存器的延迟越长
#此外,还有用来约束重新平衡
#设置进行时钟门控的寄存器阵列的最小宽度一个门控时钟至少要触发4个寄存器
#基于锁存器的离散门控单元
# set_clock_gating_style \
# -positive_edge_logic {integrated:saed90nm_max_hth_cg_lvt/CGLPPRX8_LVT} \
# -control_point before \
# -max_fanout 32 \
# -no_sharing \
# -minimum_bitwidth 4 \
# -sequential_cell latch
## ******************** 映射门级单元及优化 ******************** ##
#综合并插入门控时钟单元
compile_ultra -incremental -scan -gate_clock
## ******************** 检查综合结果并输出报告 ******************** ##
#报出所有违规包括setup, hold check, drv, clock gating check等
report_constraint -all_violators > $RPT_OUT/all_vios.rpt
check_design > $RPT_OUT/05_check_design.log
check_timing > $RPT_OUT/06_check_timing.rpt
#为formality进行停止记录数据形式验证
set_svf -off
#因为DC和其它的XX命名规则不同为了避免出现问题在产生网表之前先要定义一些命名规则。
change_names -rules verilog -hierarchy
uniquify -force
#保存综合后的设计
write -format ddc -hierarchy -output $RES_OUT/${CURR_DESIGN}.ddc
#输出网表,自动布局布线需要
write -f verilog -hierarchy -output $RES_OUT/${CURR_DESIGN}.v
## ******************** 进行scan chain的插入 ******************** ##
source /home/project/ASIC/FFT_IFFT_IP/user/script/scan.tcl
exit