[FPGA开发工具使用总结]功能仿真(1)-Modelsim的使用及脚本编写

一、简介

功能仿真(Functional Simulation),又称前仿真(Pre-layout Simulation),是数字电路设计流程中验证逻辑正确性的关键环节。其核心目标是在综合与布局布线之前,通过软件模拟验证设计是否符合预期功能,排除逻辑错误。与后仿真(考虑物理延迟的时序仿真)相比,功能仿真具有速度快、波形易分析等优势,是早期验证的首选手段。

Modelsim 作为业界主流的 HDL 仿真工具,支持 Verilog、VHDL 及混合语言仿真,提供了波形分析、信号调试、脚本自动化等高级功能。本文将结合基础操作与工程实践,深入探讨其高级用法,助力读者提升仿真效率。

二、仿真库编译

2.1 库

在 Modelsim 中,库是存储编译后设计单元的物理目录。 库可以简单的划分为 工作库资源库。工作库(work)用于存放当前工程文件,通常由用户提供的HDL文件编译得到;资源库用于存放第三方IP或工艺库,如Xilinx或Intel提供的IP核文件编译得到。

若用户的设计中不包含IP核或者器件特有的原语,则不需要映射资源库,将所有文件放入工作库即可。反之,不仅要将用户自己的HDL文件编译到工作库,还要引用对应的资源库。

2.2仿真库预编译

通常,FPG厂商提供的IP核或原语仿真库文件规模较大,若每次功能仿真之前先进行资源库的编译,耗时会非常久。因此,厂家提供了方法对自家的IP核或原语库进行预编译,每次仿真之前直接将编译好的资源库进行映射即可。

  • Xilinx仿真库编译
    打开vivado,单击Tools->Compile Simulations libraries打开仿真库编译界面。

在这里插入图片描述

  • Intel仿真库编译
    打开quartus,单击Tools->Launch Simulation library Compiler打开仿真库编译界面。
    在这里插入图片描述
    在这里插入图片描述

2.3 资源库调用

编译完成后的库文件路径下会生成一个modelsim.ini文件,将这个文件拷贝到仿真工程路径下即可调用这些资源库。

三、通过tcl脚本快速构建仿真平台

3.1 编写TCL脚本

Modelsim内集成了TCL编译器,可以通过Tcl脚本快速完成编译、仿真、运行等环节。
Modelsim中TCL脚本以do文件的形式保存,整个仿真环节可以用一个do文件编写,也可以拆分为多个(参考第四章vivado生成的do文件),为便于操作,通常将整个仿真环节写入一个do文件中。
编写do文件通常有以下几个环节:

  • 建立新的工作库
# 通过vlib命令创建工作库work
vlib work
# 通过vmap命令将work工作库保存到当前路径下
#一个名叫work的子目录下(第一个work 表示工作库,第二个表示路径)
vmap work work
  • 编译HDL文件(包含用户的文件和IP核仿真源文件)
# 通过vlog 命令编译verilog源文件
# 关于vlog命令详细用法,可以在modelsim中用“vlog --help”命令查看
# 这里的路径可以是相对路径也可以是绝对路径,相对路径的参照可以用命令[pwd]查看
vlog -work work ../test.v
# 可以通过+incdir+指定include头文件路径
vlog  -work work +incdir+../../ ./test.v
  • 载入仿真
# 通过vsim命令载入仿真
vsim -novopt work.test
# -novopt 表示不做任何优化,这会导致仿真很慢,推荐使用-voptargs="+acc"替换
vsim -voptargs="+acc" work.test
#在包含IP核文件或者原语时还要引用对应的资源库,通过-L参数实现
vsim \
-voptargs="+acc" \
-L secureip \
-L unisims_ver \
-L unimacro_ver \
-L unifast_ver \
-L simprims_ver \
-L xpm \
-L xilinx_vip \
work.test
  • 添加波形文件(可选)
#添加波形可通过add wave 命令实现,推荐通过GUI界面直接添加
#为了保证,添加后可以直接看到波形,可以添加下面的命令,但仿真速度可能会变慢
add log -r /*
  • 运行
#一直运行
run -all
#运行300us
run 300us

3.2 通过TCL运行仿真

在Modelsim的GUI界面中找到Transcript窗口,用do命令执行脚本(如脚本名为test.do)。

1、先用cd命令将路径指向test.do所在目录
2、再执行do  test.do命令即可运行仿真

下一期的博客中会用一个具体的例子演示TCL的编写到仿真平台的构建过程。

四、Vivado与Modelsim联合仿真

4.1 VIVADO中添加仿真文件

如下图所示。VIVADO中的源文件被分为了四种类型。
在这里插入图片描述
在添加源文件时,用于功能仿真的测试脚本可通过添加仿真源文件选项进行添加。
在这里插入图片描述
此外,也可以选中对应的源文件在文件属性窗口中找到"Used In"选型设置文件用途。
在这里插入图片描述

4.2 Vivado调用Modelsim仿真

  • 仿真前准备(可选)
    有时候我们会针对项目中某个具体的功能模块进行仿真,这时候就需要重新设置顶层模块。这里设置的定层和用于综合布线的定层模块是互不影响的。
    在这里插入图片描述
  • 调用第三方仿真工具的配置方法
    在Vivado中要调用第三方仿真工具(如Modelsim)需要做以下配置:
    • 配置第三方工具路径
    1. 选择Simmulation -> Simmulation Settings
      在这里插入图片描述
    2. 选择3rd Party Simulators,在对应的工具栏选择安装路径。
      在这里插入图片描述
    • 仿真设置
      同样是在Simmulation Settings窗口,选择Simulation,进行仿真配置。
      在这里插入图片描述
      为了方便观察波,最好增加以下操作。
      在这里插入图片描述
    • 运行仿真
      单击Run Simmulation -> Run Behavioral Simulation进行功能仿真。(功能仿真的信号层次清晰,方便问题定位,是前期验证功能完整性的最佳选择)
      在这里插入图片描述
      运行功能仿真的日志可以在TCL Console窗口中进行查看,当log打印Program launched之后会弹出Modesim窗口,到这一步Vivado调用Modelsim进行仿真的配置及操作就已经成功。后续有编译或者载入错误会打印在Modelsim底部的Transcript窗口中。
      在这里插入图片描述
  • 工程路径
    Vivado的仿真工程路径如下图
    在这里插入图片描述

五、常见问题分析

  • vivado调用modelsim进行功能仿真,长时间未计入Modelsim界面
    出现该问题大概率是由于在进行源文件编译时出错了,可以进入仿真工程路径查看compile.log文件,看看是否有error。如果有,解决后,取消仿真重新运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值