modelsim仿真必会教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
搞定,波形神马的就出现了。你要做的工作就是看波形是否是你想要的。
●可以使用想要的快捷键来查看波形。f,全屏显示波形;c,以波形图上的黄线为轴放大
波形等,具体请baidu。
自动化仿真
一个简单的分频器要你仿真10次,每次都重复上面这些步骤,你也会受不了的,更何况稍
微大一点的设计。
●你需要新建一个文本文档,modelsim的默认后缀名是.do。但随便什么后缀名都是可以
的。因为种种其他原因,我把后缀名改成了.tcl。
●一个简单完整的脚本如下
第1行:当你在仿真的时候,可以直接退出去,然后再次开始仿真
第3行:加载你的设计文件,并指定最小时间为ns
第5行:为每个模块都增加一个分隔符,看起来舒服点,上面的图有提到过
第6.7.8:testbench里的信号
……
第14行:指定信号的显示方式是无符号数
第15行:再指定信号显示的颜色
第16行:再指定信号显示的别名,主要用于参数化状态机的时候用
第18行:运行仿真的时间,最大单位是ms,但最大时间不太清楚
设计代码
我为什么不直接贴代码,而是要上图呢?如果你是初学者,抄一遍代码是必要的;如果你不
是,这代码对你也没有意义。
Testbench
先上图,然后再说其他的。
第1行:指定仿真的时间精度
第2行:这样主要是为了在功能仿真时稍微带点延迟,方便观察,有点后仿真的影子
第4行:格式就是那么写的,我不知道为什么
第5.6.7行:你设计文件里的input端口在testbench里要声明为reg;你设计文件里的output 端口在testbench里要定义为wire
第9‐13行:对testbench里reg的初始化时必不可少的
第15行:生成时钟,必不可少
第17行:传递给设计文件的一个参数
第19‐29行:产生复位信号的一个小任务。写成任务时为了方便的在以后的设计中使用
第31‐40行:对设计文件的例化
●Testbench的语法还是有必要学一学的,特别是那些不可综合的语句。不然设计写好了,
如何写testbench会让你头疼的。$random,$readmem还是比较常用的
●多看看别人写的testbench,自然就会看到一些技巧
其他
●乱糟糟的代码是我绝对不能接受的,对齐是最基本的要求
●不要去怀疑modelsim,出现了意想不到的情况首先就要想到是自己的问题。当然工具
也会有错,但一般人也发现不了(包括你)
●复位,不论在testbench和设计文件里都非常重要。最关键的是没有初始化modelsim是
不工作的。红线,蓝线就是你看到的。红线:为初始化的信号,例如reg;蓝线:为初
始化的信号,例如wire;还有很少见的白色虚线:modelsim模仿外部上拉的情况
●当你不知道一个modelsim操作的命令是什么时,注意看你操作时transcript窗口对应的
命令。如果没有,去看modelsim手册
●我将脚本的后缀改为tcl的原因是因为vim可以很方便的注释
●Vim有个插件可以很方便的生成例化片段
●推荐你使用vim或emacs编辑器。补全,snipmate,ctags,and so on,都会让你欲罢不
能。去看看vim华丽的snipmate吧/v_show/id_XMjQ5MjE3NTA4.html
●https://上有很多语言的各种代码,当然包括verilog。没事可以去上面看看有
没有你想要的东西
●请原谅我对vim的崇拜