• 加快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(关闭激活的监控任务)

  • 相关阅读:
    unitest 测试集 实例
    python3 设置滚动条
    python3 mail
    wordpress +window 走起~
    获取在线python 文档
    chrome 自动加载flash
    报错 hint: Updates were rejected because the remote contains work that you do 解决方法
    Bitcode
    Autorelease
    atomic
  • 原文地址:https://www.cnblogs.com/hfyfpga/p/4281579.html
Copyright © 2020-2023  润新知