前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Modelsim的仿真之路(基础仿真流程)

Modelsim的仿真之路(基础仿真流程)

作者头像
狂人V
发布2021-11-04 10:27:23
1.6K0
发布2021-11-04 10:27:23
举报
文章被收录于专栏:电子狂人电子狂人
前言

缓了一段时间,该接着开始系列记录了,这一次将开始ModelSim的仿真之路,对于学FPGA或者从业于该行业的人来说,仿真是必不可免的一件事,而仿真的工具也不少,不过感觉ModelSim推荐的指数要高很多,或许和它优化的能力有关吧~

~Show Time~

仿真前夕

在ModelSim中对一个设计进行仿真有几种模式,基本的仿真、工程形式的仿真,还有使用多个库进行仿真,逐个进行介绍下使用步骤;

一:基础仿真步骤:

1、创建工作库

在ModelSim中,所有设计都被编译到一个库中。通常通过创建名为“work”的工作库来启动一个新的仿真,这是编译器使用的默认库名,作为已编译设计单元的目标库;

2、编译设计文件

创建工作库之后,就要将设计模块编译到其中,编译后的库格式支持在多个平台上使用,比如在Linux上编译了,然后可以不需要重新编译,就直接移到Windows上用,

3、载入且运行仿真

编译完成后,选择顶层的激励文件来加载仿真器,载入完成后,仿真界面将处于初始状态,再Run一下就可以开始仿真了~

4、对仿真结果进行Debug

Debug就是在仿真的时候,如果发现结果不是你想要的,就一步步调试了,当然,是可以借用工具滴!

二:工程形式的仿真步骤:

1、创建工程

2、添加设计文件到工程

3、编译设计文件

4、载入且运行仿真

5、对仿真结果进行Debug

可以看出来,工程形式的仿真和基础仿真很相似,多了个工程来对设计文件进行管理,其中,工作库在工程创建好后就自动生成了,如果没有使用close来关闭工程,下次启动ModelSim时,工程还会处于打开状态,都不需要再去麻烦的找了。

三:多个库的使用

除了工作库,ModelSim还有一种资源库的用法,和工作库有个明显的不同,就是工作库是处于设计文件的编译目录下,而资源库则可以处于其他位置,然后链接后就可以使用,这个资源库可以是第三方的(比如Vivado编译的库,然后在ModelSim里使用)

多个库的使用步骤再简单总结下

1、创建工程

2、添加激励文件到工程

3、编译设计文件

4、链接资源库

5、载入且运行仿真

6、对仿真结果进行Debug

如果没有使用工程的形式,就直接创建工作库替换步骤1和2就好了。

基础仿真

根据上一部分的基础仿真步骤来正式踏入仿真之路~

先准备好要仿真的文件,将文件放到自己想要的路径下(不要出现中文字符,不然要出问题),准备好之后,打开ModelSim,软件安装的版本可以根据自己情况来装,我这装的是:ModelSim DE 16.C(也还装了另外的版本),至于为什么装这个版本,就看下一篇

《Vivado与ModelSim的联合仿真》

1、软件打开后,界面如下(有弹窗的话,直接Close掉就好了)

2、将工作路径改变到要准备好的文件路径下(File > Change Directory)

直接使用TCL命令也可以,按以上操作后,也会有相应的命令出现在Transcript的窗口中。

举例:cd E:/Soft_File/Sim_File/basicSimulation

3、创建工作库(File > New > Library)

会出现一个弹窗,然后在这个窗口可以创建一个新的库,也可以映射已存在的库,库名的栏中会有个默认的值”work“,没有的话就自己输入一下。

然后OK一下,工作库就创建好了,在软件的库界面会出现一个work的选项,不过此时还处于empty的状态

观察一下work库对应的路径,会发现多了个work的文件夹(内含一个“_info”的文件)以及一个modelsim.ini的文件;“_info”是运行的一些信息,和work是一起的,不要随意改动它;ini那个文件则是初始文件,里头是复制的安装路径下的ini文件,然后将work库加入了库的映射中。

在 Transcript 窗口也有这两个操作的相应Tcl命令

代码语言:javascript
复制
vlib work 
vmap work work

4、编译文件(Compile > Compile)

注:如果开着工程的话,该选项是灰色的,需要使用File > Close先关闭

点击后,在弹窗的文件窗口选中两个.v文件,注意左上角的Library选中的是否为work,然后点Compile进行编译

编译完后,Transcript窗口会出现编译结果,然后就可以点Done完成且关闭编译界面

这时再看work,会发现,已经是非空状态了,多了个 “+” ,点击后,出现了两个模块的名字,即刚刚编译的文件,类型为Module

5、如上图一样,选中test_counter,然后直接双击它,载入仿真界面

启动仿真还可以选中test文件,点右键,再选择 Simulate ;或者选中菜单栏上的Simulate > Start Simulation ,然后弹出以下的窗口,选择好文件,点OK也一样进入仿真界面;

仿真界面如下,这时候的界面主要由三个部分组成

1:文件层次;2:根据1中选中的模块,对模块内的变量信息(Objects)以及当前仿真状态(Processes)进行显示;3:波形窗口

如果缺了需要的,在菜单栏 View下开启对应的即可

若Wave窗口中无信号,则在1窗口中,选中模块,然后右键,点击Add Wave ,Wave中就添加对应的信号变量了

6、找到控制仿真运行的菜单,然后点 Run,或者直接在脚本窗口输入:run 100ns,也可运行仿真,时长根据自己需要设定,要注意的是,当以后变量多了,运行则会相对变慢;点 Run -All 的图标,则会一直运行,直到运行到停止的信号或者点了 Stop 那个图标

可以看到 Wave 中的信号变量运行了一段时间,接着 Restart,将状态全部复位,准备后续的演示

7、准备简单的Debug一下,先在菜单栏 View > Files ,打开文件窗口,双击counter.v

打开counter.v后,在always处点下侧边栏,会出现一个红色的点,即断点,再次单击就会变灰色,如果要移除就右键然后Remove Breakpoint

断点设好后,直接点 Run -All 的图标,会发现运行的蓝箭头停在了设置的断点处

这时候看Objects窗口的变量值,为当前停下时,各变量的值

把鼠标移到变量上,也会出现此时相应的变量与其值,和Objects的一样

或者选中某个信号,然后右键,选中 Examine

这时也会弹出对应变量的值

接着找到调试窗口,图标的含义和玩C的Debug是一样的,单步调试那些啥的

点两下Step Into,箭头就一步步的到了count的赋值处

基础仿真就讲到这了,不熟悉的话,可以自己多试几遍,对应产生的一些简单的脚本命令也可以记一下,之后直接跑命令有时候会方便些,最后菜单栏 Simulate > End Simulation 结束并退出仿真,出现提示框的话,点是就可以了(quit -sim)。

本篇对最基本的一个仿真操作流程直接过了一遍,下一篇就开始工程的形式来操作仿真了,还没上手的赶快学起来吧~

专门去整理了好几个版本来用,如果你没合适的modelsim版本,就自行后台回复下方关键字获取

【Modelsim】

本篇涉及到的代码就直接回复下方关键字获取,之后的Modelsim使用到的源码打算都用这个关键字回复。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 仿真前夕
    • 一:基础仿真步骤:
      • 二:工程形式的仿真步骤:
        • 三:多个库的使用
        • 基础仿真
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档