原创
使用Makefile执行Modelsim的各项功能
Makefile文件,在以前看来一直是软件开发人员需要具备的基本功,每当我鼓起勇气想学习嵌入式驱动时,看到那大量的驱动文件夹里面的各种各样的文件,以及嵌入式开发的同事打开Makefile讲解每个文件的功能以及*.o,*.a等各种文件后缀名的用途,那大量的“$”让我眼晕,所以我反复放弃了很多次,至今没有去学习。
使用Emacs的过程中,发现了“VHDL/Compile/Make”菜单,隐约觉得Emacs可以和Modelsim结合起来,使Emacs从单纯的编辑环境进阶为集编辑和仿真一体,方便自己的工作。当然,Makefile会自动检测文件的更新情况,把相关的输出进行更新(这个功能太好了),也便于集中管理源代码,所以无论你是否会Emacs,Makefile都是值得了解的。
Makefile的基本语法本文不会涉猎,具体可以查阅“Makefile中文教程.pdf”文档。
以下通过讲解一个Makefile文件,说明如何结合Modelsim工具编译:
说明:当前工程有两个VHDL代码,分别是~/src/ipt_include.vhd,~/sel_clk.vhd,Makefile内容及注释如下:
# 定义用户变量
# Define compilation command and options
COMPILE = vcom
OPTIONS = -93 -work work
# Define library paths
LIBRARY-work = work
SRC = F:/sel_clk/src
# 创建并映射work库
$(LIBRARY-work) :
vlib $(LIBRARY-work); vmap work $(LIBRARY-work)
# Define library unit files
# 定义生成库文件的路径变量
UNIT-work-sel_clk = \
$(LIBRARY-work)/sel_clk/_primary.dat
UNIT-work-sel_clk-synlogic = \
$(LIBRARY-work)/sel_clk/synlogic.dat
UNIT-work-ipt_include = \
$(LIBRARY-work)/ipt_include/_primary.dat
# Define list of all library unit files
# 定义所有生成的一个列表
ALL_UNITS = \
$(UNIT-work-ipt_include) \
$(UNIT-work-sel_clk) \
$(UNIT-work-sel_clk-synlogic)
# Rule for compiling entire design
# 此处all为一个标签,即“伪目标”,不生成all相关的文件,执行相依赖的命令
all : \
$(LIBRARY-work) \
$(ALL_UNITS)
# 与上一处的all不同,此处要生成相关的_primary.dat,则目标$(UNIT-work-ipt_include)代表文件
$(UNIT-work-ipt_include) : $(SRC)/ipt_include.vhd
$(COMPILE) $(OPTIONS) $(SRC)/ipt_include.vhd
$(UNIT-work-sel_clk) \
$(UNIT-work-sel_clk-synlogic) : sel_clk.vhd \
$(UNIT-work-ipt_include)
$(COMPILE) $(OPTIONS) sel_clk.vhd
# Rule for cleaning entire design
clean :
-rm -f $(ALL_UNITS)
### Makefile ends here
如何执行上述Makefile?
Make –f Makefile all # 执行库新建和映射命令,并编译所有的*.vhd文件;
Make –f Makefile clean # 删除所有新生成的库文件。
用户1122702 2010-2-8 09:44
ash_riple_768180695 2010-2-5 11:39
用户1122702 2010-2-5 11:35
ash_riple_768180695 2010-2-5 09:49