原创 使用Makefile执行Modelsim的各项功能

2009-10-19 14:54 5474 6 10 分类: FPGA/CPLD

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

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户1122702 2010-2-8 09:44

cygwin下运行的。

ash_riple_768180695 2010-2-5 11:39

你的Makefile是在什么环境下运行的呢?不是Linux?

用户1122702 2010-2-5 11:35

riple兄,我主要深入学习的是FPGA和硬件设计,对Linux一直很向往,但是不敢去学,呵呵。

ash_riple_768180695 2010-2-5 09:49

wind330是在Linux下搞开发的吧。我最近也在学习使用Linux,以后遇到问题,还望不吝指教!
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
EE直播间
更多
我要评论
4
6
关闭 站长推荐上一条 /3 下一条