第二章 Modelsim基础操作:启动界面、工作区介绍、库的概念与管理、创建工程
好,咱们正式开始动手了。这一章我带你熟悉Modelsim的“家当”——界面、工作区、库,还有怎么建工程。别小看这些基础操作,我见过不少老手因为库没管好,仿真跑着跑着就崩了。咱们一步步来。
2.1 启动界面:第一眼看到什么
双击Modelsim图标,等几秒钟,你会看到一个大窗口。嗯,第一次看可能有点懵,别慌。
顶部是菜单栏和工具栏,左边是工作区(Workspace),右边是命令控制台(Transcript)。我个人习惯先把布局调一下——把工作区拉宽点,因为后面看文件结构方便。
2.2 工作区(Workspace)介绍
工作区是咱们的“主战场”。它分几个标签页:
- Project:显示当前工程的文件列表
- Library:显示所有可用的库
- Sim:仿真运行时,显示信号和结构
- Files:文件系统视图
说白了,你大部分时间就在Project和Library之间来回切。我刚开始用的时候,老在Sim标签里找文件,找了半天才发现切错页了——你想想看,是不是有点傻?
2.3 库(Library)的概念与管理
库是什么?你可以把它理解成一个“零件仓库”。每个编译好的设计单元(模块、实体、包)都存在库里。Modelsim默认有个work库,你编译的东西默认都往里面塞。
但实际项目中,我建议你按功能分库:
work:放当前设计的代码tb_lib:放测试平台代码ip_lib:放IP核sim_lib:放仿真模型
为什么要分?我曾经在一个大项目里,所有代码都堆在work库,结果编译报错时根本分不清是哪个模块的问题。后来花了半天时间拆库,再也没出过这种乱子。
2.3.1 创建新库
在Transcript窗口输入:
vlib tb_lib
vmap tb_lib tb_lib
第一行创建物理目录,第二行建立逻辑映射。你也可以在菜单里点 File > New > Library 来操作。我个人习惯用命令行,因为快。
2.3.2 编译到指定库
编译时指定库名:
vlog -work tb_lib testbench.sv
vcom -work ip_lib ip_core.vhd
注意:Verilog用vlog,VHDL用vcom。混编时别搞混了。
2.4 创建工程
建工程其实就三步:
- 新建工程:
File > New > Project,输入工程名和路径 - 添加文件:把设计文件、测试文件加进去
- 编译:右键工程,选Compile All
我一般用命令行建工程,因为可以写脚本复用:
project new . my_project
project addfile design.v
project addfile testbench.sv
project compileall
这样下次换电脑,跑一下脚本就全搞定了。你想想看,要是每次手动点,多累啊。
2.4.1 工程文件结构
一个典型的Modelsim工程目录长这样:
my_project/
├── work/ # 默认库目录
├── tb_lib/ # 自定义库目录
├── my_project.mpf # 工程文件
├── design.v # 设计代码
└── testbench.sv # 测试代码
.mpf文件是工程配置文件,记录了所有设置。我建议你把它加入版本控制,这样团队里大家打开工程都一样。
2.5 知识体系图
下面这张图帮你理清本章的核心逻辑:
2.6 实战小练习
光看不练假把式。我建议你现在就动手:
- 打开Modelsim,创建一个叫
demo_lib的库 - 新建工程
demo_prj,放在桌面 - 写一个最简单的Verilog模块(比如一个与门),编译到
demo_lib里
做完这三步,你就掌握了本章80%的内容。剩下的20%,是在实际项目中慢慢积累的。
- 工作区四个标签页各有用途,别搞混
- 库是组织代码的核心,按功能分库是良好习惯
- 创建工程用命令行更高效,方便复用
- 编译时指定库名,避免所有代码挤在work里
好了,这一章就到这儿。记住,基础操作越熟练,后面调试越顺手。我当年就是吃了基础不牢的亏,现在回头补课,发现其实没那么难。
公众号:蓝海资料掘金营,微信deep3321