摘要
- 学习makefile的基本格式
- 了解在芯片设计中makefile的使用
- xrun+simvision与vcs+verdi的简单应用
在IC设计和验证中,脚本的使用会大大提高办公效率,Makefile主要用于实现“仿真验证自动化”。Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。
1.makefile的基本格式
目标:依赖
命令
目标是要生成的结果,依赖是生成结果需要的源文件和上一步骤的结果,命令是当目标不存在或者依赖更新时执行的命令。注意命令前必须使用Tab来缩进,不可以使用空格。
伪目标:Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。
1.1 基本语法
在书写时,一个较长行可以使用反斜线(\)分解为多行,这样做可以使Makefile清晰、容易 阅读。注意:反斜线之后不能有空格(这也是大家最容易犯的错误,而且错误比较隐蔽)。
1.2 makefile的工作原理
①在默认方式下,输入make命令后,make会在当前目录下找名字叫makefile或Makefile的文件;②若找到,则会找文件中的第一个目标,如果目标不存在,或者目标后面的依赖文件的修改时间比目标文件新,则会执行后面所定义的命令来生成目标文件;③如果目标后面的依赖文件也存在,则会在当前文件中一层又一层去找文件的依赖关系,直到最终编译出第一个目标。
2.makefile在数字IC中的应用
工程中的源文件数量较多时,makefile能极大的提高软件开发的效率,实现“自动化编译”,一旦写好,只需要一个make命令,整个工程就能自动编译。
关于程序的编译和链接的概念:编译就是将源文件编译成中间代码文件的动作(编译器关注语法、函数和变量的正确);链接就是将中间代码文件合成可执行文件的动作(链接器关注链接程序,在中间代码文件中找寻函数的实现)。
仿真脚本Makefile的目标一般为以下几种:
- 编译compile:编译设计、验证环境、验证用例
- 仿真run:执行仿真
- 调试debug:查看波形
- 回归regression:批量执行仿真用例
- 清空clean:清空工作目录、临时文件
//xrun+simvision仿真环境搭建的makefile示例
LIB_DIR=/home/name/personal/design
DFILES=${LAB_DIR}/*.v
help:
@echo “make help”
@echo “make compile to compile”
@echo “make run to run simulation”
@echo “make sv to observe the waveform”
@echo “make clean to delete temporary files”
#compile: clean
run:
@echo "======Sim XXX========="
@xrun -64bit -nowarn DLCPTH:ILLPDX:NONPRT -sv -nocopyright ${DFILES} -work work ./filelist.v \
-access +rwc -DELAY_MODE Distr -NOTIMINGCHECKS -nocopyright -nospecify -update -top tb \
-run -exit
run_gui:
@echo "======Sim_gui XXX========="
@xrun -64bit -nowarn DLCPTH:ILLPDX:NONPRT -sv -nocopyright ${DFILES} -work work ./filelist.v \
-access +rwc -DELAY_MODE Distr -NOTIMINGCHECKS -nocopyright -nospecify -update -top tb \
-gui -run -exit
sv:
simvision
clean:
rm -rf Xcelium.d *.shm xrun.*
//vcs+verdi仿真环境搭建的makefile示例
LIB_DIR=/home/name/personal/design
DFILES=${LAB_DIR}/*.v
help:
@echo “make help”
@echo “make compile to compile”
@echo “make run to run simulation”
@echo “make verdi to observe the waveform”
@echo “make clean to delete temporary files”
compile:
vcs -full64 -debug_all -l compile.log ${DFILES}
run:
./simv -l run.log
run_gui:
./simv -gui -l run.log
verdi:
verdi ${DFILES} -ssf ./*.fsdb &
clean:
rm -rf *.fsdb *.log csrc simv.*