如何在保证仿真精度的情况下提高仿真速度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在保证仿真精度的情况下提高仿真速度相关的知识,希望对你有一定的参考价值。
有几种原因可能导致仿真运行速度很慢:
模型中有一个 MATLAB 函数块 :当存在 MATLAB Fcn 模块时,在每个采样时间都会调用 MATLAB 解释器。这会大大降低仿真速度。所以,应尽可能使用内置Simulink模块。
2. MATLAB S函数(S-Function):在每个时间步长都会计算 S-Function。把MATLAB代码转为MEX文件,这样性能可以得到显著提高。此外,如果可能,应尽量使用内置模块建模。
3. 较小的步长或采样时间(或者彼此间不是倍数关系的采样时间):为了在仿真期间捕获重要事件,有时必须设置最够小的步长;反过来,步长太小会导致产生不必要的输出点,从而减慢仿真速度。
4. 最大步长太小:如果您更改了最大步长,请尝试用默认值(设置为自动)来运行仿真。
5. 您要求的精度可能过高:默认相对容差(0.1% 精度)通常就足够了。对于状态趋于零的模型,如果绝对容差参数太小,则仿真可能在近零状态值附近采用过多步长。有关容错度的详细信息,请参阅《使用 Simulink 手册》第 5-13 页。请记住,所有要输入的容差值都是绝对值。所以,默认相对容差值设置为 1e-3 时,意味着相对容差是 0.001,或者 0.1%(采用百分比形式)。
6. 时间尺度可能太长:减少时间间隔。
7. 您的模型中包含一个 Memory 模块:使用 Memory 模块会导致在每个步长上变阶求解器(ode15s 和 ode113)被重置回阶数 1。
8. Extras 库中有包含以上三项之一(即Graph Scope、Autoscaling Scopes、Spectrum analyzer等)的Mask模块:Unmask模块来看看它们是否调用 S-Function。
9. 使用了Scope模块:尽管它们的影响很可能不明显。
10. 代数环:为了解代数环,会在每个步长上都执行迭代计算。因此,它大大降低了速度。有关代数环的详细信息,请参阅《使用 Simulink 手册》第 3-18 页。
11. 不要在积分函数中引入白噪声模块:对于连续系统,使用 Extras/Sources 库中的带限白噪声模块。
12. 这可能是个刚性(stiff)问题,而您使用的是非刚性(non-stiff)求解器:尝试使用 ode15s。
13. 您可能碰到了连续过零,导致仿真逐渐“停滞”,时间很长(并且可能是无限长时间):要解决此问题,可以禁用过零检测。这可以通过在“Simulation 参数”(Simulation Parameters) 对话框的“高级”(Advanced) 窗格中选择“禁用过零检测”(Disable zero crossing detection) 选项来实现。在 R11 中,可通过转到模型的“仿真”(Simulation) ->“参数”(Parameters) ->“诊断”(Diagnostics) 部分来实现此目的。
有关过零检测的详细信息,请参阅《使用 Simulink 手册》第 5-44 页。
14. 您也可能想要尝试设置“模型参数配置”(Model Parameter Configuration) 对话框以便您的 Simulink 模型使用“内联参数”(Inline Parameters) 选项:选择此选项可使 Simulink 能够将指定参数视为常量,从而加快仿真速度。请参阅《使用 Simulink 手册》第 5-30 页了解更多信息。
15. Simulink Accelerator 仿真模式快仿真时间。Profiler可以分析模型性能瓶颈来提高仿真速度。
16. 如果模型非常复杂(涉及大量模型引用和子系统)且包含大量数据记录,仿真速度也会受到影响:禁用数据记录功能也能提高仿真速度。
除此之外,仿真速度受系统(即处理器、RAM、正在发生的交换量等)的制约。
关于仿真速度有还有几点需要考虑:
- 图形引擎速度
- CPU 速度
- 内存量
为此,下面是几点提示:
- 如果在仿真过程中有打开的scope或其他可视化输出设备,这些都会降低性能
- 性能与 CPU 速度成正比
- 如果在仿真过程中存储的变量大于系统上的 RAM 量,则性能会很差。解决办法是运行较小的仿真或增加内存
参考技术A有几个因素可能会减慢仿真速度。请检查您的模型是否存在以下情况。
该模型包括 Interpreted MATLAB Function 模块。当模型中包含 Interpreted MATLAB Function 模块时,每个时间步都会调用 MATLAB® 执行引擎,从而导致仿真速度大大降低。尽可能使用 Math Function 模块。
模型中包含 MATLAB 文件 S-Function。MATLAB 文件 S-Function 也会在每个时间步调用 MATLAB 执行引擎。请考虑将 S-Function 转换为子系统或 C-MEX 文件 S-Function。
模型中包含 Memory 模块。使用 Memory 模块会导致变阶求解器(ode15s 和 ode113)在每个时间步都重置回 1 阶。
最大步长太小。如果您更改了最大步长,请尝试使用默认值 (auto) 再次运行仿真。
准确性要求太高。默认的相对容差(0.1% 精度)通常就已足够。对于状态会变为零的模型,如果绝对容差参数太小,仿真可能会围绕接近零的状态值执行太多步。请参阅Maximum order中有关此错误的讨论。
时间太长。缩短时间间隔。
您的模型表示刚性的系统,但您使用的是非刚性求解器。尝试使用 ode15s。有关详细信息,请参阅刚性系统。
您的模型使用的采样时间不是互为倍数。混合不是互为倍数的采样时间会导致求解器采用足够小的步长,以确保计算所有采样时间的采样时间命中点。
模型包含代数环。代数环的解在每个时间步迭代计算。因此,它们大大降低了性能。
提高仿真速度推荐试试赞奇超高清云工作站
这种情况不用更换本地电脑硬件也可以轻松高效进行仿真计算,推荐大家选择在赞奇超高清云工作站上进行高效仿真计算,让你的本地电脑秒变高配云工作站。
首先你只需要去赞奇云工作站官网使用手机号注册账号并下载赞奇云工作站客户端登陆账号选择你想要的高性能的GPU机型,然后去内置软件中心选择你需要的3d软件和插件一键安装即可,海量的软件插件,不用担心没有你用的软件版本。剩下的就是存储啦,云盘提供高性能的存储,上传下载速度更快,而且安全性高,不用担心因为电脑突然宕机造成的数据丢失问题。
如何使用modelsim独立仿真VIVADO2014.4生成的IP
在FPGA的设计中,仿真环节特别是功能仿真是极其重要的,可以提前发现bug,减少很多的调试时间。一般情况下,一个完整的仿真流程包括:1. RTL设计,最简单的情况就是使用HDL编写了一段代码。2.行为仿真:仅仅验证编写的代码在理论上可以实现我们的意图。3.综合,把HDL语言/原理图转换为网表netlist,然后执行综合后仿真。4.布局布线,即把我们的代码映射为到FPGA中的寄存器等环节然后连线等。然后执行布局布线后的仿真,这个步骤类似于硬件在回路仿真HLS的意思,但是还不是完全的HLS,因为这个“硬件”是在软件中模拟的,并没有生成bit流连接到真正的硬件中,但是因为它是基于门电路的仿真,考虑了器件和走线的延时等因素,所以比较真实,当然仿真速度也比步骤2慢了不少。5.调试;必要的话也可以执行HLS。在最新的Vivado套件中,我们可以使用的官方工具为Vivado Simulator,也可以使用第三方仿真器,包括Mentor Graphics QuestaSim/ModelSim、Cadence Incisive Enterprise Simulator (IES)、Synopsys VCS/VCS MX、Aldec Active-HDL/Rivera-PRO等。因为不同的第三方软件还需要额外的license,所以这里暂时使用自带的Vivado Simulator来体验它的强大功能。在Vivado开发环境中,新建或者打开以前建立的工程,然后点击菜单栏的File,选择Add Source,然后添加仿真源文件,如图1所示。 [[wysiwyg_imageupload:992:]]图1 添加仿真源文件因为我们还没有建立测试脚本,所以接下来要新建一个,在选择好文件名、保存位置之后点击finish,此时会出现测试文件的定义窗口,和新建一个hdl文件是类似的,在此定义了前面使用的PI调节器的输入、输出端口,如图2所示。 [[wysiwyg_imageupload:993:]]图2 配置输入输出完成之后就回到了Vivado开发环境。此时我们Vivado开发环境的高效之处之一,就是能够定义多个仿真集合,例如,有的用来做前面步骤2的仿真,有的来做步骤4的仿真,还有的配置了别的信号特征等;这些很容易更改,如图3所示。目前唯一不太方便的是菜单栏上没有导航窗口,需要记在快捷键Ctrl+S进行快捷保存。 [[wysiwyg_imageupload:994: 参考技术A 您好,我来为您解答:倒库,把Xilinx的库导到modelsim下面去,然后使用。
希望我的回答对你有帮助。本回答被提问者和网友采纳
以上是关于如何在保证仿真精度的情况下提高仿真速度的主要内容,如果未能解决你的问题,请参考以下文章