主要内容

将浮点模型转换为定点模型

在这个例子中,学习如何:

  • 将浮点系统转换为等效的定点表示。

    定点工具自动化指定系统中的定点数据类型的任务。在本例中,该工具为模型对象收集范围数据,这些数据来自您为信号和参数显式指定的设计最小值和最大值,或者来自模拟过程中发生的日志最小值和最大值。基于这些值,该工具提出了最大化精度和覆盖范围的定点数据类型。该工具允许您检查数据类型建议,然后有选择地将它们应用于模型中的对象。

  • 用查找表近似替换不支持转换的块。

    在转换的准备阶段,定点工具将不支持定点转换的任何块隔离开来,方法是将这些块放在子系统中数据类型转换块。可以使用查找表优化器用近似查找表替换不支持的块。

建立模型

打开模型并将其配置为定点转换。

open_system (“ex_fixed_point_workflow”

该模型由一个源、一个希望转换为不动点的控制器子系统和一个用于可视化子系统输出的作用域组成。以这种方式配置模型可以帮助您确定定点数据类型对系统的影响。使用这种方法,您只转换子系统,因为这是感兴趣的系统。不需要将源或作用域转换为不动点。

此配置允许您修改输入并为多个刺激收集模拟数据。然后,您可以检查具有不同输入范围的子系统的行为,并扩展定点数据类型,以提供最大的精度,同时容纳完整的模拟范围。

为了比较转换前后的行为,在设计系统的输出处启用信号记录。

ph = get_param (“ex_fixed_point_workflow /控制器子系统”“PortHandles”);set_param (ph.Outport (1),“数据采集”“上”) set_param (ph.Outport (2),“数据采集”“上”

准备转换系统

要将模型转换为定点,请使用定点工具。

  1. 应用程序画廊的ex_fixed_point_workflow模型中,选择定点的工具

  2. 在定点工具中,在工作流,选择迭代定点转换

  3. 设计中的系统(SUD),选择要转换为不动点的子系统。在本例中,选择控制器子系统

  4. 范围收集模式中,选择模拟范围作为范围收集方法。

  5. 模拟输入,您可以指定仿真软件。SimulationInput对象在其全部操作范围内执行您的设计。在本例中,设置模拟输入使用默认的模型输入

  6. 要指定系统的公差,请在下表中信号公差,在启用信号记录的情况下,指定模型中任何信号的公差。有关更多信息,请参见指定信号公差

    设置相对公差(Rel托尔)记录到15%的信号。

  7. 在工具条中,单击准备.定点工具检查设计中的系统与转换过程的兼容性,并报告在模型中发现的任何问题。如果可能,定点工具会自动更改不兼容的设置。有关更多信息,请参见使用定点工具准备转换系统

    定点工具成功完成准备阶段后的截图。

    所设计的子系统包含一个经验值块,它不支持定点数据类型。定点工具将此块围绕在数据类型转换阻塞并将其放在子系统中。在将子系统的其余部分转换为不动点时,可以用的查找表近似替换子系统经验值函数。

    控制器子系统的截图,其中Exp子系统的内容突出显示,以显示围绕着Exp块的数据类型转换块。

收集范围

默认情况下,定点工具使用模型上的当前数据类型覆盖集。对于本例,覆盖模型中的数据类型,以双倍精度运行范围收集。

  1. 扩大收集范围按钮箭头和选择双精度

  2. 点击收集范围模拟模型。

定点工具用双精度值覆盖模型中的数据类型,并收集模拟过程中模型中每个对象的最小值和最大值。定点工具将此范围信息存储在一个名为“运行”的运行中BaselineRun.可以在SimMin而且SimMax的列中,或结果细节窗格。

仿真数据可视化窗格提供了模拟结果的另一个视图。选择探索选项卡,用于对电子表格和可视化中的数据进行排序和筛选的其他工具。

仿真数据可视化窗格的截图,显示了所设计系统的范围直方图。

转换数据类型

根据运行中存储的双精度模拟结果,使用定点工具为适当配置的块提出定点数据类型BaselineRun

  1. 转换部分,单击提出数据类型按钮。

    定点工具分析所有定点块的缩放锁定输出数据类型设置,防止定点工具更改参数未选中。

    定点工具使用默认建议设置提出16位字长和最佳精度分数长度的数据类型,并更新电子表格中的结果。

    的方法可以编辑建议设置设置按钮转换部分,在提出类型之前。

  2. 中显示建议的数据类型ProposedDT列。

    默认情况下,它选择接受为建议的数据类型与对象的当前数据类型不同的每个结果选中复选框。如果应用数据类型,该工具将这些建议的数据类型应用到设计中的系统。

  3. 检查结果以解决任何问题,并确保您希望为每个结果接受建议的数据类型。的仿真数据可视化窗格指示将分别包含红色或黄色三角形的溢出或下溢出的结果。下流量可能是数字问题的来源,但有时可以安全地忽略。

    定点工具用红色图标指示建议数据类型与另一类型冲突的结果.在本例中,没有结果包含冲突。有关更多信息,请参见检查结果以解决冲突

  4. 在检查结果并确保没有问题之后,就可以将建议的数据类型应用到模型中了。点击应用数据类型将建议的数据类型写入模型。

    定点工具将数据类型建议应用于所设计系统中的块。

验证新设置

接下来,再次使用新的定点设置模拟模型。然后使用仿真数据检查器绘图功能来比较来自浮点数的结果BaselineRun运行定点结果。

  1. 点击使用嵌入式类型进行模拟.定点工具使用新的定点数据类型来模拟模型,并将运行信息存储在名为“运行”的新运行中EmbeddedRun

    之后,定点工具显示记录定点数据的块的信息。的CompiledDT列显示Controller子系统块使用了新的定点数据类型。

  2. 的直方图仿真数据可视化窗格以验证没有溢出或饱和。溢流和饱和用红色三角形标记

  3. 工作流浏览器指示您指定公差的所有信号都已通过。

  4. 点击比较结果打开模拟数据检查器。在仿真数据检查器中,选择一个记录信号来查看定点仿真行为。

    模拟数据检查器,显示选定的记录信号和公差带。

用查找表近似替换不支持的块

准备转换系统步骤的工作流程,定点工具放置经验值块,它在子系统中不支持转换数据类型转换块。在这一步中,您将用查找表近似替换子系统。

  1. 要获得定点工具解耦的所有子系统的列表,在命令行输入:

    解耦= DataTypeWorkflow.findDecoupledSubsystems (“ex_fixed_point_workflow”
    解耦BlockPath = 1×2表ID  __ ____________________________________________________ 1 {' ex_fixed_point_workflow /控制器子系统/ Exp '}

    DataTypeWorkflow.findDecoupledSubsystems函数返回一个表,其中包含由定点工具创建的用于隔离不支持的块的任何子系统的块路径。

  2. 打开查找表优化器.在应用程序画廊,选择查找表优化器

  3. 客观的页的“查找表优化器”,选择Simulink块或子系统.点击下一个

  4. 块的信息,从命令行复制并粘贴路径到由定点工具创建的子系统。

  5. 单击从模型中收集当前值按钮以更新模型图,并允许Lookup Table Optimizer自动收集优化过程所需的信息。点击下一个

    查找表优化器设置窗格。

  6. 指定要在优化中使用的约束。对于本例,使用默认值。单击,创建查找表优化.点击下一个

  7. 点击取代原始的函数.查找表优化器将替换数学函数经验值块中包含查找表近似的新变体子系统。

    子系统的截图,其中原始的Exp块已被LUT块替换。

用查阅表近似法验证系统的行为

现在,设计中的系统已经完全转换,验证系统仍然满足转换前指定的公差。

  1. 在定点工具中,在验证部分,单击使用嵌入式类型进行模拟

    定点工具模拟模型,该模型现在包含查找表近似,并将结果保存为EmbeddedRun_2

  2. 工作流的浏览器显示具有指定公差的信号通过使用查找表近似模型。

    工作流浏览器的截图,在EmbeddedRun_2旁边显示一个绿色的复选标记。

相关的话题

Baidu
map