加快modelsim仿真速度的方法(原创)
①仿真精度越高,仿真效率月底。
仿真时采用`timescale 1ns/1ns比采用1ns/100ps的仿真效率高

simulation was two billion ns.
②clock generation coding tips



(from<A BFM Simulation Strategy for Verilog>)
②减少层次结构
在设计中层次结构越少,仿真速度越快,这是因为参数在module中通过端口传递会消耗仿真器的时间
③进程越少,仿真效率越高
代码中出现的进程越少,仿真越快。因为仿真器在多个进程之间切换也需要时间。
④减少门级原语的使用,尽量采用行为描述
建模的抽象层次越高,仿真效率越高。描述同样的功能尽量采用行为描述,少使用门级原语
⑤尽量使用case语句,而不是if ...else语句
如果使用case语句和if..else语句能够实现相同的电路,则尽量使用case语句,以提高仿真效率。
⑥减少begin...end语句块的使用
在语义不发生歧义的情况下,尽量减少使用begin...end语句块,以提高仿真效率
⑦减少仿真器的输出显示
过多使用仿真器的输出显示任务,如$display,$fdisplay等,会降低仿真器执行的速度。
注意:以上几点只是用来提高仿真效率的建议,并不是说设计代码一定要这样做,而是建议在保证代码功能,可读性,可维护性和安全性的前提下,
尽量采用提高仿真效率的方法,节约仿真和调试的时间。毕竟代码功能,可读性,可维护性和安全性才是最重要的。
①使用增量编译,当整个仿真系统有大量文件组成时,每修改某个module中的部分信号后,想查看时序波形的时候,如果所有文件都编译一遍,会浪费大量时间。这时,增量编译可以有效的节约仿真时间
vlog -incr
vcom -incr
②不启用GUI界面,不启用modelsim的GUI界面一样可以完成仿真的所有工作,而且速度会比较快;记录下仿真波形(仿真完后再看波形:do wave.do;或将观察的信号打印到文件,直接比对)
vsim -c -do run_sim.do -l vsim.log -wlf vsim.wlf
xxx ③启用nodebug模式(默认是debug模式),速度会有所提高,但某些调试功能将被禁止,比如trace x功能就不能用了
vlog -nodebug
④避免显示不必要的信号
使用 log -r /* (记录所有的信号,运行这个命令后即使在仿真前没有把信号加入wave窗口,仿真完成后直接加入wave窗口就可以查看波形,比较方便,但是缺点是当工程较大和仿真时间很长时仿真速度较慢,占用内存也较大。)
好处是:可以记录所有信号的波形,方便后续查看到所有想查看的波形
缺点是:会降低仿真速度
⑤如果调用了IPCORE,研究官方的UG,加速仿真速度(ex:SRIO加速开关)
⑥修改设计,在不影响仿真结果的情况下,修改设计文件,加速仿真速度(ex:将counter从1024改为128)
⑧Use the vopt command to increase simulation speed.(modelsim.ini文件中:“VoptFlow = 1”默认打开优化)
vsim -vopt
-vopt Run vopt optimization before elaborating the simulator
-voptargs="<arglist>" Pass the specified arguments to vopt
-novopt
(optional) Forces vlog to produce code if the VoptFlow variable is set to 1 (optimizations
turned on) in the modelsim.ini. (VoptFlow = 1 is the default behavior.) Use this argument
together with the vsim -novopt command to run the simulator without any optimizations.
For example, you may want to use this argument when you are coding an RTL block with a
small testcase.
-voptargs="+acc" :
The +acc switch is more
related to those, and is used to preserve visibility to certain categories of objects that might
otherwise be optimized away. Objects that get optimized away can make your debug and
analysis efforts more difficult
⑨为了提高仿真性能,应该使采样最小化。
减少仿真输出的总数,可以加快仿真仿真过程。使用计算机的输出设备会减慢程序的运行,因此,记录仿真输出的过程会使仿真变慢。
$monitor $write $display $strobe等系统函数的运用有助于debug,但会减慢仿真速度,根据实际做好平衡。
一个有效的减少数据采样的办法是:当进入testcase中感兴趣的地方时,令激励器打开采样过程。可以通过下面两个系统任务启动和关闭监控:
$monitoron(启动最近关闭的监控任务) ,$monitoroff(关闭激活的监控任务)
加快modelsim仿真速度的方法(原创)的更多相关文章
- 提高Modelsim仿真速度的方法(1) -- force
假如主驱动时钟频率很高,因为要一个周期输出,仿真时间过长,仿真速度慢是自然. 但是仿真中,并不是每个驱动周期都是必要的,这时可以使用force命令把想要的信号提前制造出来. 事实上,对于使用到PLL的 ...
- 关于Modelsim仿真速度的优化
如果在不需要波形,只需要快速知道结果的情况下,可以用优化选项.这适用于做大量case的仿真阶段.因为这一阶段多数case都是通过的,只需要快速确认即可,然后把没通过的case拿出来做全波形的仿真调试. ...
- 【黑金原创教程】【Modelsim】【第一章】Modelsim仿真的扫盲文
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- 用Modelsim仿真QuartusII综合后网表时库的添加方法(转)
这两天做综合后仿真,发现FPGA器件库又不会加了,无奈上网找方法.说起来不好意思,很早就接触Modelsim这个仿真软件了,可是没有好好琢磨.把这两天找的方法贴出来,再加上自己的理解,以后忘了可以上博 ...
- ModelSim仿真入门
ModelSim仿真入门之一:软件介绍 编写这个教程之前,为了让不同水平阶段的人都能阅读,我尽量做到了零基础入门这个目标,所有的操作步骤都经过缜密的思考,做到了详细再详细的程度. 如果您是FPGA开发 ...
- 记——加快gradle 构建速度的经验
Gradle作为一个新的构建系统,无疑在灵活,扩展,跨平台等各方面都表现得非常优秀,然而,它也有一点备受吐槽,就是速度慢.以下为本人使用gradle过程中,几次加快gradle构建速度的经验之谈. 本 ...
- modelsim仿真基本流程
好久没再用过modelsim,都忘的一干二净了.刚换了份工作,又要重新拾起来,不过现在感觉modelsim的仿真其实是比较快的,很有用处.再者这么长时间老是学了忘,忘了再学,觉得真浪费时间,平时确实应 ...
- cordic算法的verilog实现及modelsim仿真
1. 算法介绍 CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲 ...
- sql处理百万级以上的数据提高查询速度的方法
原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...
随机推荐
- sougou输入法小技巧
- 【 D3.js 选择集与数据详解 — 4 】 enter和exit的处理方法以及处理模板
绑定数据之后,选择集分为三部分:update.enter.exit.这三部分的处理办法是什么呢?本文将讲解其处理方法,以及一个常用的处理模板. 1. enter的处理方法 如果没有足够的元素,那么处理 ...
- android之handler obtainmessge与New message区别
obtainmessage()是从消息池中拿来一个msg 不需要另开辟空间new new需要重新申请,效率低,obtianmessage可以循环利用: //use Handler.obtainMess ...
- 如何解决CHM打开乱码的问题
1. 问题 经常碰到一些 CHM 格式的帮助文档出现乱码无法阅读的情况,而且 CHM 文档不像浏览器一样,右键可以选择字符编码,非常不便.究其原因,主要就是 CHM 文档在页面中没有指定合适的字符编码 ...
- 【原】Spark中Stage的提交源码解读
版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Job如何划分为Stage http://www.cnblogs.com/yourarebest/p/5342424.html 1 ...
- 【待修改】nyoj 38 最小生成树
package nyoj; import java.util.Scanner; public class Main { public static void main(String args[]) { ...
- HDU FatMouse's Speed 基本DP
题意:要求找到的体重递增,速度递减的老鼠,并且输出最长的长度数,而且输出各自的序列数.Special Judge 思路:先按体重由小到大排序,再找最长速度递减序列. 转移方程:mou[i].w> ...
- 2014年Tizen开发者峰会上海征稿启事!
本次征稿面向大中华用户: “Tizen开发者,应用程序开发人员.isv平台设计师.运营商.厂商.硬件厂商.软件厂商,开源爱好者,和从事Tizen的工作人员” 2014年Tizen开发者峰会 这一次,亚 ...
- Java 下 SSL 通信原理及实例
有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ...
- VPN两点注意事项
今天折腾了半天vpn,特记录以下两点注意事项: 1.客户端VPN连接,点右键属性=>网络选项卡=>双击Internet 协议版本 4 IPV4=>高级=>远程网络上使用默认网关 ...