modelsim仿真学习笔记
- 格式:docx
- 大小:37.32 KB
- 文档页数:4
MODELSIM学习笔记(二)Dsp Builder设计初步的小结杨森Sept 2015现在使用的软件版本分别是 quartusii 11.0 ,modelsim 10.0c, matlab 2010b ,关于软件的安装以及相互之间的关联,做一个简要的说明。
主要需要注意的是,1.必须在安装dsp builder之前安装matlab;2.dsp破解后(若不破解,simulink中的dsp的库文件不能使用),设置环境变量;3.dsp builder破解过程会生成一个license,这个和之后安装的modelsim生成的license需要共用一个环境变量,所以,可以把两个license合并(把其中一个拷到另外一个最后面);软件相互之间能够关联非常重要,否则后面会出现很多意想不到的问题。
我一开始是按照“EDA技术与VHDL(第三版潘松著)”一书中第九章dsp builder设计初步来做的,课本里说使用tcl脚本文件,不知道是不是由于软件版本的原因,根本无法产生想要的结果,故花了一周左右的时间研究modelsim的使用方法。
在这过程中,出现了各种各样的bug,在崩溃的边缘,最后还是依靠各种网络上的资源片段,一个一个warning和error的调试,最终把所有的仿真给做出来了。
我之所以这么执着于仿真,是因为我后期需要做一个FIR的滤波,在simulink中来做,非常的方便,但是,若不进行rtl级仿真和时序仿真,根本不知道转换过来的vhdl代码能不能使用,这是闲话哈,好了,开始我们的操作过程中遇到的问题的详述吧。
本文主要是关于modelsim的RTL级仿真,后面还会陆续有关于时序仿真的教程,如果有童鞋遇到的难题,可以相互讨论一下,我的联系方式:邮箱:senyangah@主要的过程1.完成一个例程其实很多软件都一个共性,那就是,看再多的例程都不如亲手完成一个设计.网上关于各种初级教程有很多,但是,大多数情况是,你跟着教程一步一笔的去做,根本出现不了你想要的结果,我选择了2个稍微比较好一点的教程,并且里面出现的一些小的bug都已经通过注释给讲明了怎么改.本来我也是打算自己写一个教程,一步一步的把操作步骤写下来,但是我发现,首先就是完全没必要啊,网上给的教程的大致过程都是对的,其次就是这个太耗时间了,所以原谅我的偷懒哈,附件中的教程2和教程3,都是可以仿真成功的,大家跟着做就行啦~其中教程2是使用的自动编译,从quartus中直接启动modelsim,教程3是手动编译,第一个例子是使用vism的命令进行操作的,虽然很繁琐,但是对于初学者来说,了解各个参数的设置是很好的,后面的例程通过编写testbench来进行仿真,这种方式是我们以后进行仿真的主要模式.2.Testbench的编写因为本文主要是围绕着simulink生成的vhdl的modelsim仿真来编写的,所以,我们主要介绍的是怎样使用vhdl来编写testbench,附件中教程4,就是用vhdl来编写testbench,以后我们每次需要编写testbench的时候,就先通过quartus来生成一个testbench模板,然后按照教程4中的模板进行各个参数的设置.关于怎么生成testbench的模板,教程2中有说明.3.关于library的添加如果代码是我们编出来的,那么在用modelsim进行仿真的时候,无需添加任何的library,但是若使用到IP核(比方说product模块吧),则需要添加library,原因可以问度娘哈.关于怎么添加library,教程5非常的好用,这里面有几个主要的关键点需要注意:1.教程5的前几个库添加的时候,一定要注意每个VHD文件添加的顺序,比方说:先添加altera_mf_components.vhd后ALTERA_MF.vhd,一个一个的添加,如果一下子全部的话,会有报错。
Modelsim仿真新⼿⼊门最详细教程2021年11⽉15⽇00 安装包/版本我是提前在⽹上下好的(但这⼀点也给我的实验造成了“⿇烦”),⽤的是Modelsim SE-64 2020.4版本的,学校实验室的似乎不同。
但最终没有太⼤影响。
01 配置环境步骤学校有⼀个⽂档,在机房电脑照做就⾏。
我因为是⾃⼰下载的,配置与机房软件有所不同,所以⼜平添了很多⿇烦。
01-0 verilog⽂件这个代码可以在很多地⽅编写:Visual Studio Code⾥有Verilog的插件;还可以有更强⼤的语⾔编辑器:Nodepad++。
这⾥我使⽤的是Nodepad++,因为看上去专业⼀点。
Nodepad++的页⾯效果如图:其实第⼀次上机,⽼师会给⼤家⽰例⽂件(包括设计代码与测试代码),跑出来⽰例波形就⾏。
01-1 具体步骤1. 新建⼀个⽤于安放project的⽂档,放在哪⾥都⾏。
把前⾯做出的.v⽂件添加到这个⽂档。
留意⼀下路径。
2. 打开modelsim,在jumpstart中create a new project。
3. 在弹出的提⽰框⾥browse,找到刚才的⽂件夹。
选中。
填写project 名,注意要与.v⽂件⾥的module名保持⼀致。
点击ok。
4. 进⼊页⾯后会是这样⼦:注意此处两个⽂件后⾯应当都有问号,代表没有编译。
先逐个右击⽂件add to this project确保加⼊。
5. 在上⽅提⽰栏中complie->compile all。
稍等些许会看到⽂件后问号全部变为对勾,表⽰代码编译通过,没有问题。
如果此步出错则代表代码有bug。
在下⾯的Transcript中上翻查找错误。
6. 点击上⽅Simulate->start simulation。
由于注意与实验室不同的,选中下⾯的Enable optimization,再在右侧Optimization Options中的Visibility中选中Apply full visibility....7. 接着在work⾥找到测试代码的⽂件,选中。
基于脚本的modelsim⾃动化仿真笔记 这⾥记录⼀下基于脚本的modelsim⾃动化仿真的⼀些知识和模板,以后忘记了可以到这⾥查找。
转载请标明出处:。
⼀、基本介绍 这⾥介绍⼀下如何利⽤脚本调⽤modelsim进⾏⾃动化仿真,随笔前⾯先介绍⼀下前仿真,随笔结尾处介绍后仿真。
前仿真的基本介绍如下所⽰,由于我的笔记是写在.do⽂件中,因此我这⾥也给代码的格式,如下所⽰:# #表⽰注释,modelsim不⽀持中⽂,因此可能不能识别注释#①退出当前仿真功能,退出当前的⼯程,跟在modelsim界⾯的命令⾏敲⼊命令的效果⼀样,之后就可以创建其他的⼯程quit -sim#②清除命令⾏显⽰信息;在命令⾏‘敲⼊这个命令,回车’的效果⼀样.main clear#③创建库:vlib:创建库到⼀个物理⽬录中,也就是创建⽂件夹⽬录了。
#可以理解库为某⼀个路径的⽂件夹,⽤来存储modelsim的⼀些数据⽂件;#创建库的格式vlib <library name>,默认库的名字为work#下⾯的代码意思是:1-在当前路径(.do⽂件的路径)下,创建lib⽂件夹;相当于在命令⾏敲‘vlib lib 回车’#2-在当前路径的lib⽂件夹下,创建work⽂件夹库;相当于在命令⾏敲‘vlib ./lib/work’vlib ./libvlib ./lib/work#④映射逻辑库到物理⽬录;也就是说,在modelsimGUI界⾯的Library选项卡⾥⾯创建⼦选项,这个⼦选项就叫做逻辑库,#编译⼯程之后,得到⼀堆编译⽂件,这些⽂件名就放在这个逻辑库选项卡⾥⾯。
但是编译得到的是实体⽂件,这些⽂件必须#有⼀个⽬录存储,因此就需要把逻辑库映射到物理(⽂件夹)⽬录,也就是把那些得到的实体⽂件放在某⼀个⽂件夹⽬录(路径当中)#这样,就可以在实际⽂件夹⾥⾯查看编译得到的⽂件内容,⽽不是单单从选项卡⾥⾯看到名字⽽已#注意,在映射之前,⼀定要先创建好对应的物理路径#语法为 vmap work(逻辑库名称) <library name>(库的路径)#下⾯的代码意思是:在modelsim界⾯的library选项卡创建⼀个叫work的选项卡(逻辑库),编译之后得到的⽂件名称就在,#相应的⽂件就放在./lib/work这个⽂件夹⾥⾯。
modelsim常⽤操作之波形仿真modelsim波形仿真的新⼿问题1、实验⽬的在刚接触modelsim时,被其繁复的操作流程所困,⼀度只能依靠在quartus中修改代码编译后再重启modelsim,⾃动导⼊才能得到波形。
这样的操作最⼤的问题就是修改代码的成本巨⼤。
每次更新波形的时间在5分钟左右。
为此,通过不断地学习,终于将波形仿真的各个事项了解清楚。
这⾥做⼀下记录,⽅便以后回顾。
2、实验操作①纯modelsim的verilog仿真⼀般来说,前仿真是不需要器件的。
如果使⽤了IP核就另论。
这⾥先通过纯modelsim仿真了解modelsim的⼯作⽬录的结构,为后⾯的联合仿真的刷新提供基础。
这⾥直接使⽤图⽚集描述:这个操作感觉意义不⼤,在新建⼯程中也也可以创建library。
这个可以添加project和library,构建设计平台。
然后进⼊project窗⼝,这个窗⼝就是⽤于编辑⼯程的,具体操作在前⾯的⼀篇关于modelsim的操作中有,这⾥不具体说明。
添加本地⽂件和编译都在右击中。
接下来转到library界⾯,就在上图的左下⾓的library中。
进⼊仿真阶段。
这是后会⾃动出现sim界⾯。
(还是在左下⾓可以看到)这⾥是没有波形的,需要⼿动添加观测信号。
这⾥的wave是暗的,为什么?可以看到sim的亮线指在sim_capacity上,⽽⾮mux2_tb上,导致没有可以选择的观察信号。
同理,如果指向其他的地⽅,被选择的观察信号可能是别的模块,⽐如被测模块。
如果两个模块有同名变量且没有连接,那就可能出现多个同名不同值的波形。
(这⾥值得注意,但凡是右击,都要确定光标所在,否则容易出错)正确地添加信号后会出现wave(有些是浮动的,有些是嵌⼊的)有信号名,但是没有波形。
这⾥出现的问题是没有运⾏。
光开显⽰器不开主机,有啥⼦⽤。
运⾏的快捷键在运⾏时间的右侧,三种⽅式。
第⼀个是正常运⾏,第⼆种是继续(⼀般有stop系统函数的时候使⽤较多,第三个⼀直运⾏。
Modelsim功能仿真新手教程By wangjun850725@操作系统:win7软件版本:modelsim6.5se本文只针对初学者,让他们少走点弯路,modelsim软件本身感觉还是比较难以使用的。
本人才疏学浅,但有颗助人的心。
大神请跳过,不要鄙视我。
如有错误,请不吝指点。
QQ群:41143927建立工程省略N字,这没有什么好说的。
几乎所有的软件都是以工程为基础的。
添加设计文件因为我已经编辑好了文件,所以直接添加已经存在的。
没有人会用modelsim自带的编辑器来写程序(要是没有选择,我宁愿用记事本,如果你用了,我佩服你)。
编译文件没有什么好说的,添加进去的文件全部编译就好了。
如果你看编译后的文件后面还有一个问号,你不爽,鼠标右键更新下就好了开始仿真Modelsim se版本是可以手动描绘激励波形的,但这种方法太笨,太烦,修改起来很不方便,所以直接放弃。
Simulate里有个start simulate,点开这里有几点要说明下1.要点开work库,找到你testbench对应的那个模块2.Resolution选不选关系不大,如果你设计文件指定了仿真时间的话3.Optimization,要把这个勾去掉,不然会优化掉很多信号,这里也坑了我很久。
功能仿真只要这么多,如果做后仿,library里要添加已经编译好的器件库,SDF里要添加.vo,.sdo文件观察波形添加信号到波形窗口的方法有很多,刚学手动添加,后来肯定是要在脚本里指定的,下面会有首先要把设计中的信号添加到wave窗口里。
鼠标左键按住不放,将对应的模块拖到wave窗口里,这是最简单的办法。
如果设计的模块多了,每个模块的信号不能很好的被区分,就可以在每个模块的中间插入一个Divider,信号旁边右键就可以看到,最好给起个名字如果你的模块层次非常的多,信号的路径名字就会占据本来就不大的屏幕时很不爽的。
菜单Wave‐>Wave preference‐>Display signal path里面改成1就可以了运行仿真在Transcript窗口里输入Run 1ms搞定,波形神马的就出现了。
Modelsim新手入门仿真教程1.打开modelsim软件,新建一个library。
2.library命名3.新建一个工程。
3.出现下面界面,点击close。
4.新建一个verilog文件键入主程序。
下面以二分之一分频器为例。
文件代码:module half_clk(reset,clk_in,clk_out); input clk_in,reset;output clk_out;reg clk_out;always@(negedge clk_in)beginif(!reset)clk_out=0;elseclk_out=~clk_out;endendmodule编辑完成后,点击保存。
文件名要与module后面的名称相同。
5.再新建一个测试文件,步骤同上面新建的主程序文件,文件名后缀改为.vt程序代码如下:`timescale 1ns/100ps`define clk_cycle 50module top;reg clk,reset;wire clk_out;always #`clk_cycle clk=~clk;initialbeginclk=0;reset=1;#10 reset=0;#110 reset=1;#100000 $stop;endhalf_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out));Endmodule6.添加文件,编译文件先右键点击左边空白处,选择add to project→existing File选择刚刚新建的两个文件。
按ctrl键可以同时选择两个,选择打开,下一步点击ok7选中其中一个,右键,选择complie→complie all出现两个勾,说明编译通过。
出现×,说明文件编译出错,双击×,可以查看错误。
8.终于可以仿真了选择simulate→start simulate。
选择刚刚新建的库里面的top,或者测试文件名称,左下角的enable optimization一定要去掉勾,有勾的画不会出来波形,一定要去掉勾!一定要去掉勾!一定要去掉勾!(本人也不清楚原因,都是初学者,嘻嘻)跳出界面,右键测试文件,选择如下图接下来,选择仿真,run→run all点击缩小键,如图,就可以看到波形啦到此结束!初学者,如有错误,欢迎指出。
Modelsim的仿真理解(包含仿真举例)硕1099班郝立娟3111190033常用的Verilog仿真器有Modelsim、Verilog-XL、NC-Verilog和VCS。
我们所用的ModelSim仿真软件是由MentorGraphic公司的子公司Model技术公司开发的工业界上最为通用的仿真器之一,它能提供友好的仿真环境,可以很好的用于Verilog仿真,VHDL仿真或者两者的混合仿真。
ModelSim仿真软件产品的类型很多,我们学的是ModelSim/SE,它是ModleSim主要的版本,功能最为强大,ModelSim有三种实现方法,我们所用的是用户界面的方式,能接受菜单输入和命令行输入。
Modelsim采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
它的主要特点有:⑴、RTL和门级优化,编译仿真速度快,跨平台跨版本仿真;⑵、单内核VHDL和Verilog混合仿真;⑶、源代码模版和助手,项目管理;⑷、对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL等。
Modelsim的仿真步骤:建库——建立新工程——编译源代码——启动仿真器——加入波形——执行仿真。
1、建立ModelSim 库(物理库)从主菜单里面:File->New->Library点Library得到Create a New Library 对话框。
选则a new library and a logical mapping to it,在 Library Name 中输入 work,相应的在 LibraryPhysical Name 中也会出现物理名 work。
然后点击 OK 确定。
此时在工作空间 workspace 的 Library 栏内会出现一个名为work 的库。
ModelSim学习笔记(一)初学ModelSimSE时被迷糊了几天的若干概念黄俊April 2007以前用的是LATTICE的,ispLEVER有自带了一个OEM版的ModelSim。
要仿真时,不需要添加库,用起来比较方便,自己有点懒,所以就一直凑合着用。
现在转向用ALTERA 了,ALTERA也有OEM版的ModelSim,也不用添加库。
后来听说ModelSim SE的功能更强大,速度更快,所以就决定把ModelSim SE好好摸索一下,再多学习一点关于TestBench 技巧方面的知识。
我的学习资料主要是ModelSim SE自带的教程、ALTERA提供的资料以及edacn上面ModelSim专栏由网友们上传的资料。
因为是初学,加上看到英文资料一大堆,烦都烦死,而有些中文文档可能是有些步骤没有讲清楚,我实际按照文档上面说的一步一步做下来也老是完成不了,花了不少时间。
我于是就想自己摸清楚后,把步骤截图下来,整理清楚,做成笔记。
一方面加深自己的认识,另一方面对初学者也许会有些许用处。
我近期计划陆续整理出以下几个方面的学习笔记:初学ModelSimSE时被迷糊了几天的若干概念在ModelSimSE中添加ALTERA仿真库的详细步骤用ModelSimSE进行功能仿真和时序仿真的方法(ALTERA篇)ModelSimSE中常用到的几个命令及DO文件的学习笔记近来学到的几招TestBench的技巧MSN: paulhuang_sz@E-mail: huangjun5927@Blog: /index.php/2599初学ModelSimSE时被迷糊了几天的若干概念1、什么是库?2、什么是设计单元?3、如何添加ALTERA仿真库?4、ModelSim的流程有哪些,实际开发中哪种流程最适用?5、操作ModelSim要学习哪些操控方式?1、什么是库(Library)?(1)我理解的库就是用来存放已编译好的设计单元(Design Units)的文件夹。
1、仿真的目的:
在软件环境下,验证电路的行为和设想中的是否一致。
2、仿真的分类:
a) 功能仿真:在RTL层进行的仿真,其特点是不考虑构成电路的逻辑和门的时间延迟,着重考虑电路在理想环境下的行为和设计构想的一致性;
b) 时序仿真:又称为后仿真,是在电路已经映射到特定的工艺环境后,将电路的路径延迟和门延迟考虑进对电路行为的影响后,来比较电路的行为是否还能够在一定条件下满足设计构想。
3、功能仿真的目的:
a) 设计出能工作的电路:因此功能仿真不是一个孤立的过程,其和综合、时序分析等形成一个反馈工作过程,只有这个过程收敛,各个环节才有意义。
而孤立的功能仿真通过是没有意义的,如果在时序分析过程中发现时序不满足需要更改代码,则功能仿真必须从新进行。
因此正确的工作流程是:
b)代码排错:功能仿真是代码排错的最重要的手段之一。
4、 modelsim的高级功能:Code Coverage
a) 代码覆盖率是验证激励是否完备,检验代码质量的一个重要手段。
测试激励的代码覆盖率至少要达到95%以上,才能基本认为代码在逻辑上是通过质量控制的,才能进入综合步骤;
b) 代码覆盖率是保证高质量代码的必要条件,但却不是充分条件。
即便代码行覆盖和分支覆盖都能够达到100%,也不能肯定的说代码已经得到100%的验证。
除非所有的分支覆盖都能够进行组合遍历。
c) 在大的设计中,如果想通过一个激励就验证完一个设计或者模块是不现实的。
一方面是从逻辑功能上很难做到;另外一方面是因为如果在一个激励中包括了各种情况,整个仿真过程的速度会随着计算机内存的消耗而成线性下降,效率低下。
d) 通常的做法是每一个激励只验证电路功能的某个方面。
整个电路的功能验证由数个激励共同完成。
在这种验证方法中代码覆盖率更显重要,因为可以通过代码覆盖率来控制激励对功能的覆盖程度。
e) modelsim的Code coverage不但能记录各个激励对代码的“行覆盖”和“分支覆盖”,而且能够将各个激励的覆盖记录进行合并,做到对覆盖率的全面监测。
f) 演示。
5、 Debussy:仿真辅助调试工具:
a) 看仿真波形无疑是代码排错的主要手段,在Modelsim中的波形窗口在大的仿真中有如下缺陷:a、只能显示出在仿真前设置好的信号波形,如果在仿真完成后想观察其他的信号,唯一的办法就是添加需要观察的信号从新开始仿真。
b、波形只是简单显示,和代码没有对应和关联关系,不能借助波形直观的调试代码;c、如果观察的信号太多,由于其是实时全信号显示,在仿真时间较长后,仿真速度明显减慢,屏幕的刷新速度也明显减慢。
b) 这些缺点不单Modelsim有,其他的优秀仿真工具也有,而且历史由来以久,因此很早人们就提出了“先转储后观察调试”方法,在verilog语言中以$dumpXXX开头的系统函数就是做波形转储用的。
就是先将波形先存在文件中,等仿真结束后在调出来显示观察和调试。
c) 这种观察功能很多EDA工具都有,并不足为奇;但Debussy的独特之处在于,它不但能显示波形,而且还能非常智能化的将波形中的任何一个变化和引起这个变化的RTL代码联系起来,使代码排错的效率大幅度提高。
在原来IC所的一个大型项目中,由于引进了Debussy,使调试效率至少提高了3倍。
d) 先介绍verilog语言中的转储系统函数。
其实转储函数就是一种典型的文件操作函数,最为常用的为一下几种:
i. $dumpfile(“filename.vcd”):打开一个文件准备转储波形数据;
ii. $dumpall:转储所有信号的波形数据;
iii. $dumpvars:转储层次信号;
iv. $dumpon:开始转储;
v. $dumooff:停止转储;
e) 演示Modelsim转储功能
f) 演示Debussy工具中的辅助调试功能;
6、 SDF反标注
a) SDF是一种标准延时格式文件,用于记录综合布线后电路的线延迟和门延迟信息。
如果在仿真输出的波形上叠加上这些信息,将使波形更接近实际。
b) 演示。
c) 但是由于电路已经被综合布线过,原来的RTL代码的逻辑层次和代码命名都已经发生变化,即便看到波形也很难直接对应到RTL代码上,因此后仿真来确定电路是否符合要求的方法已经逐渐被新的方法所代替。
另外还有后仿真速度缓慢也是一个主要原因。
新的方法是:时序分析、静态时序分析、形式验证。
7、一个重要的观念:电路的性能取决于电路构思和Coding Style:
a) 经常有人说“不要用写软件的方法去写硬件”,或者说“要用朴实无华的语言风格来写代码”,这些说法只是描述了事务的表明现象,并没有真正指出问题的真正症结所在;
b) RTL描述语言,虽然是一种语言,但它是描述RTL的语言,所以其着眼点是电路实现而非逻辑推理;RTL就是电路在寄存器层的一种表现,虽然已经不像门级那样具体,但也没有抽象到逻辑层。
c) 因此写代码的真正正确的方法是:在大脑中构思出电路的结构,然后用代码把它点滴不
漏的表现出来,而不是先写一些只是逻辑上行得通的代码等待工具帮你综合成能实现的电路。
工具永远只能做繁重而低级的工作,至少要比人的工作低级,这是未来几百年内不会改变的公理。
因此如果你的电路性能不好,说明你对如何实现电路还没有清晰的思路。
d) 不要只使像通过提高器件的速度等级来使你的电路达到要求,恰恰相反,正确的方法是:如果你的电路在第一次综合后已经有80%的路径满足时间要求了,那么就不要想着用更快的器件,而应该考虑改变你的电路拓扑结构和设计构架,来使另外的20%逐渐达到要求。