wind330

使用Makefile执行Modelsim的各项功能

0
阅读(4001)

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 # 删除所有新生成的库文件。