①仿真精度越高,仿真效率月底。

仿真时采用`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仿真速度的方法(原创)的更多相关文章

  1. 提高Modelsim仿真速度的方法(1) -- force

    假如主驱动时钟频率很高,因为要一个周期输出,仿真时间过长,仿真速度慢是自然. 但是仿真中,并不是每个驱动周期都是必要的,这时可以使用force命令把想要的信号提前制造出来. 事实上,对于使用到PLL的 ...

  2. 关于Modelsim仿真速度的优化

    如果在不需要波形,只需要快速知道结果的情况下,可以用优化选项.这适用于做大量case的仿真阶段.因为这一阶段多数case都是通过的,只需要快速确认即可,然后把没通过的case拿出来做全波形的仿真调试. ...

  3. 【黑金原创教程】【Modelsim】【第一章】Modelsim仿真的扫盲文

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  4. 用Modelsim仿真QuartusII综合后网表时库的添加方法(转)

    这两天做综合后仿真,发现FPGA器件库又不会加了,无奈上网找方法.说起来不好意思,很早就接触Modelsim这个仿真软件了,可是没有好好琢磨.把这两天找的方法贴出来,再加上自己的理解,以后忘了可以上博 ...

  5. ModelSim仿真入门

    ModelSim仿真入门之一:软件介绍 编写这个教程之前,为了让不同水平阶段的人都能阅读,我尽量做到了零基础入门这个目标,所有的操作步骤都经过缜密的思考,做到了详细再详细的程度. 如果您是FPGA开发 ...

  6. 记——加快gradle 构建速度的经验

    Gradle作为一个新的构建系统,无疑在灵活,扩展,跨平台等各方面都表现得非常优秀,然而,它也有一点备受吐槽,就是速度慢.以下为本人使用gradle过程中,几次加快gradle构建速度的经验之谈. 本 ...

  7. modelsim仿真基本流程

    好久没再用过modelsim,都忘的一干二净了.刚换了份工作,又要重新拾起来,不过现在感觉modelsim的仿真其实是比较快的,很有用处.再者这么长时间老是学了忘,忘了再学,觉得真浪费时间,平时确实应 ...

  8. cordic算法的verilog实现及modelsim仿真

    1. 算法介绍 CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲 ...

  9. sql处理百万级以上的数据提高查询速度的方法

    原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...

随机推荐

  1. BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp ...

  2. BZOJ_1821_[JSOI2010]_部落划分_(贪心,并查集)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1821 给出n个点的坐标,将n个点划分成k个部分,使得每个部分之间最小的距离最大. 分析 每两个 ...

  3. 【原】 Spark中Task的提交源码解读

    版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Stage的提交 http://www.cnblogs.com/yourarebest/p/5356769.html Spark中 ...

  4. oracle 创建索引思考(转)

    在Oracle数据库中,创建索引虽然比较简单.但是要合理的创建索引则比较困难了. 笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索 ...

  5. 动态加载JS脚本的4种方法

    实现OPOA(One Page One Application)时,必须使用动态加载js. 也就是在用户选择某个菜单项后,再动态加载对应的全部js到客户端. 动态加载js的情况很多啊,比如解决ajax ...

  6. HDOJ-ACM1019(JAVA) 多个数的最小公倍数

    题意:求多个数的最小公倍数 很简单,但是我一开始的做法,估计会让结果越界(超过int的最大值) import java.util.*; import java.io.*; public class M ...

  7. Apple LLVM 6.0 Warning: profile data may be out of date

    I have no clue what this meant, so I googled the problem. I only ended up with some search results s ...

  8. redis在.NET下的使用

    windows SEVER包:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload windows仅用来测试,性能不如在lin ...

  9. hdu5593--ZYB's Tree(树形dp)

    问题描述 ZYB有一颗N个节点的树,现在他希望你对于每一个点,求出离每个点距离不超过KK的点的个数. 两个点(x,y)在树上的距离定义为两个点树上最短路径经过的边数, 为了节约读入和输出的时间,我们采 ...

  10. input输入框默认文字,点击消失

    <input type="text" value="请输入用户名" onfocus="if(value=='请输入用户名') {value='' ...