这里我贴一个icc2使用的makefile文件。
方便我自己学习和使用。
##############################################################################
##generate by gen_Makefile.pl
##Tool: IC Compiler II (vesion:1603sp4)
##############################################################################
ICC2_EXEC = /hdd/edatools/eda_tools/icc2_vP-2019.03-SP5_cracked/bin/icc2_shell
LOGS_DIR = logs_icc2
OPTIONS = -64bit
DESIGN_LIB =
DATE = `date +"%m%d"`
DESIGN = ca53_cpu
VERSION = r0f6p2c5z3e17
SPEF_DIR = spef
NETLIST_DIR = verilog
UPF_DIR = upf
RELEASE_DIR = /hdd/prj/project/a53_t28/impl/release/backend/ca53_cpu/$(VERSION)
BACKUP = ca53_cpu_`date "+%m_%d_%H_%M"`
console:
$(ICC2_EXEC)
setup:
test -d $(LOGS_DIR) || mkdir $(LOGS_DIR)
date > setup
init_design: setup
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/init_design.tcl | tee -i $(LOGS_DIR)/init_design.log
place_opt: init_design
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/place_opt.tcl | tee -i $(LOGS_DIR)/place_opt.log
clock_opt_cts: place_opt
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/clock_opt_cts.tcl | tee -i $(LOGS_DIR)/clock_opt_cts.log
clock_opt_opto: clock_opt_cts
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/clock_opt_opto.tcl | tee -i $(LOGS_DIR)/clock_opt_opto.log
route_auto: clock_opt_opto
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/route_auto.tcl | tee -i $(LOGS_DIR)/route_auto.log
route_opt: route_auto
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/route_opt.tcl | tee -i $(LOGS_DIR)/route_opt.log
chip_finish:
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/chip_finish.tcl | tee -i $(LOGS_DIR)/chip_finish.log
pt_eco: route_opt
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/pt_eco.tcl | tee -i $(LOGS_DIR)/pt_eco.log-`date +"%Y.%m.%d_%H-%M"`
#write_data: route_opt
write_data: pt_eco
$(ICC2_EXEC) $(OPTIONS) -f ./rm_icc2_pnr_scripts/write_data.tcl | tee -i $(LOGS_DIR)/write_data.log
mkdir -p $(RELEASE_DIR)/$(SPEF_DIR) $(RELEASE_DIR)/$(NETLIST_DIR) $(RELEASE_DIR)/$(UPF_DIR) $(RELEASE_DIR)/def $(RELEASE_DIR)/lef
cp -rf ./outputs_icc2/$(DESIGN).pt.v.gz $(RELEASE_DIR)/$(NETLIST_DIR)/$(DESIGN).pt.v.gz
cp -rf ./outputs_icc2/$(DESIGN).fm.v.gz $(RELEASE_DIR)/$(NETLIST_DIR)/$(DESIGN).fm.v.gz
cp -rf ./outputs_icc2/$(DESIGN).lvs.v.gz $(RELEASE_DIR)/$(NETLIST_DIR)/$(DESIGN).lvs.v.gz
cp -rf ./outputs_icc2/$(DESIGN).lef $(RELEASE_DIR)/lef/$(DESIGN).lef
cp -rf ./outputs_icc2/$(DESIGN).def.gz $(RELEASE_DIR)/def/$(DESIGN).def.gz
cp -rf ./outputs_icc2/$(DESIGN).upf $(RELEASE_DIR)/upf/$(DESIGN).upf
#cp -rf /NX3610/project/euht2p0soc/impl/backend/junfeng.liu/ca53_cpu/STARRC/results/$(DESIGN)*spef.gz $(RELEASE_DIR)/$(SPEF_DIR)
date > $(RELEASE_DIR)/$(SPEF_DIR)/spef_ok
date > outputs
################################################################################################################
# RC Extraction
################################################################################################################
dummyfill: write_data
cd /hdd/prj/project/a53_t28/impl/backend/etuser22/ca53_cpu/CALIBRE/Dummy && go
date > dummyfill
#rc: dummyfill
rc: dummyfill
perl /hdd/prj/project/a53_t28/impl/backend/etuser22/ca53_cpu/STARRC/extract_rc_all.pl | tee /hdd/prj/project/a53_t28/impl/backend/etuser22/ca53_cpu/STARRC/run_star_all_corners.log
cp -rf /hdd/prj/project/a53_t28/impl/backend/etuser22/ca53_cpu/STARRC/results/$(DESIGN)*spef.gz $(RELEASE_DIR)/$(SPEF_DIR)
date > rc
rc1: rc
perl /NX3610/project/euht2p0soc/impl/backend/junfeng.liu/ca53_cpu/STARRC/extract_rc1.pl | tee /NX3610/project/euht2p0soc/impl/backend/junfeng.liu/ca53_cpu/STARRC/run_star_all_corners1.log
date > rc1
rc2: rc1
perl /NX3610/project/euht2p0soc/impl/backend/junfeng.liu/ca53_cpu/STARRC/extract_rc2.pl | tee /NX3610/project/euht2p0soc/impl/backend/junfeng.liu/ca53_cpu/STARRC/run_star_all_corners2.log
date > rc2
release_rc: rc2
mkdir -p $(RELEASE_DIR)/$(SPEF_DIR) $(RELEASE_DIR)/$(NETLIST_DIR) $(RELEASE_DIR)/$(UPF_DIR) $(RELEASE_DIR)/def $(RELEASE_DIR)/lef
cp -rf ./outputs_icc2/$(DESIGN).pt.v.gz $(RELEASE_DIR)/$(NETLIST_DIR)/$(DESIGN).pt.v.gz
cp -rf ./outputs_icc2/$(DESIGN).fm.v.gz $(RELEASE_DIR)/$(NETLIST_DIR)/$(DESIGN).fm.v.gz
#cp -rf ./outputs_icc2/$(DESIGN).lvs.v.gz $(RELEASE_DIR)/$(NETLIST_DIR)/$(DESIGN).lvs.v.gz
cp -rf ./outputs_icc2/$(DESIGN).lef $(RELEASE_DIR)/lef/$(DESIGN).lef
cp -rf ./outputs_icc2/$(DESIGN).def.gz $(RELEASE_DIR)/def/$(DESIGN).def.gz
cp -rf ./outputs_icc2/$(DESIGN).upf $(RELEASE_DIR)/upf/$(DESIGN).upf
cp -rf /NX3610/project/euht2p0soc/impl/backend/junfeng.liu/ca53_cpu/STARRC/results/$(DESIGN)*spef.gz $(RELEASE_DIR)/$(SPEF_DIR)
date > $(RELEASE_DIR)/$(SPEF_DIR)/spef_ok
date > release_rc
##############
##PV
##############
lvs:
cd /NX3610/project/cap01soc/impl/backend/weiwei.jin/euht1cap/CALIBRE/LVS && ./run_lvs.csh
drc:
cd /NX3610/project/cap01soc/impl/backend/weiwei.jin/euht1cap/CALIBRE/DRC && ./run_drc.csh
##############
##VOLTUS
##############
voltus:
cd /NX3610/project/cap01soc/impl/backend/weiwei.jin/euht1cap/VOLTUS && ./run_voltus
backup:
rm -rf $(BACKUP)
mkdir -p $(BACKUP)
cp -rf $(DESIGN_LIB) $(LOGS_DIR) $(BACKUP)
clean:
rm -f setup init_design place_opt clock_opt_cts clock_opt_opto route_auto route_opt signoff_drc chip_finish outputs all pt_eco
clean_all: clean
rm -rf $(LOGS_DIR) $(DESIGN_LIB)
简单说下,这是我目前在使用的icc2flow的makefile文件。
在使用的时侯,需要执行到哪一步直接make就行。比如如果我需要执行到cts,(即执行init_design place_opt clock_opt_cts三个步骤。)那么我输入
make clock_opt_cts
即可
在执行完成后会生成3个标志位,
init_design place_opt clock_opt_cts
当其中删除掉clock_opt_cts后,再次执行
make clock_opt_cts
这时只执行第三步clock_opt_cts,大致使用方法就是这样。
关于makefile的知识。
makefile的语法规则
目标(target):依赖文件1 依赖文件2 …
command
在makefile当中的#代表批注;
需要在命令行的第一个字符(例如上面gcc这个编译程序命令);
目标(target)与相关文件(就是目标文件)之间需要以“:”隔开。
程序会自动检查需要哪些依赖文件,自动执行需要生成依赖文件的步骤。