主要内容

定点工具

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

说明

定点工具使您能够自动转换浮点模型以使用定点数据类型,优化模型上的现有数据类型,并使用丰富的统计和可视化功能分析模型上的范围和数据类型。

定点工具提供了三种数据类型转换和分析工作流以满足您的需要:

  • 优化的定点转换 - 自动转换您的模型以使用优化的定点数据类型。

  • 迭代定点转换 - 自动建议定点数据类型,并手动选择要应用于模型的数据类型。

  • 范围收集 - 在数据类型转换之前或之后探索模型的数值行为。

下表总结了这三种工作流之间的差异。这些选项会在下面更详细地解释。

工作流更改模型数据类型易用性对应用于模型的数据类型的控制程度需要系统行为容差知识命令行工作流
优化的定点转换一步fxpopt
迭代定点转换多次迭代推荐DataTypeWorkflow.Converter
范围收集一步不适用推荐DataTypeWorkflow.Converter

优化的定点转换工作流

定点工具中的优化的定点转换工作流提供一种将 Simulink® 模型转换为定点模型的全自动方法。如果您了解系统的期望行为并能针对此行为指定可接受的容差,您可以使用此工作流找到系统的最佳数据类型。如果您另外指定任何已知范围或提供额外的仿真输入,可以获得更好的结果。

该工具允许您指定允许的字长,还会考虑您指定的目标硬件的限制。您也可以指定安全裕度,以按指定的量增大所收集范围的边界。优化后的数据类型保持在指定的行为容差内,并最小化设计成本。如果找到多个可行解,您可以对模型应用不同的解并对它们进行探索,以找到满足您需要的解。您可以使用丰富的可视化功能探索在基线模型中收集的范围和统计量,以快速发现溢出和其他数值问题的根源。您可以在仿真数据检查器中比较不同定点实现的结果。

定点工具中优化数据类型后,您可以将工作流导出到 MATLAB® 脚本。这允许您使用 fxpopt 在命令行中继续进行数据类型优化,这种方式提供了可用于进一步自定义优化过程的其他高级选项。

此工作流将在优化过程完成时自动更改模型上的数据类型。如果您在开始优化之前完成准备步骤,您可以自动将模型还原到其原始状态。

迭代定点转换工作流

定点工具中的迭代定点转换工作流是一种在 Simulink 模型中指定定点数据类型的交互式自动方法。该工具收集模型对象的范围,然后建议能够最大化精度和覆盖范围的定点数据类型。然后,您可以检查数据类型建议,并有选择地将它们应用于模型中的对象。

该工具允许您建议字长或小数长度,让您可以选择固定精度设计,还会考虑您指定的目标硬件的限制。您也可以指定安全裕度,以按指定的量增大所收集范围的边界。丰富的可视化功能使您能够探索模型中对象的范围,并快速发现溢出和其他数值问题的根源,无论是在将模型转换为定点模型之前还是之后。如果建议的数据类型不能满足您的需要,您可以继续迭代此过程。您可以在仿真数据检查器中比较不同定点实现的结果。

此工作流让您能够完全控制将哪些建议的数据类型应用于您的模型(如果有)。如果您完成转换的准备步骤,您可以自动将模型还原到其原始状态。

此工作流不要求您指定系统的期望行为,但建议您指定任何已知范围、仿真输入和信号容差,以便获得更准确的数据类型建议,并能够评估建议的数据类型是否满足指定的设计需求。

范围收集工作流

定点工具中的范围收集工作流是一种分析和故障排除工具,它不会更改您的模型。通过此工作流,可以独立访问在数据类型转换工作流中的范围收集步骤。

您可以选择为模型中记录的信号指定额外的仿真输入和容差。该工具将单独收集所有指定仿真输入的范围,还会合并结果以在组合视图中查看。如果您要探索系统的理想浮点行为,可以选择在启用数据类型覆盖的情况下收集范围。

丰富的可视化功能使您能够探索模型中对象的范围,并快速发现上溢、下溢和其他数值问题的根源,无论是在转换为定点类型之前还是之后。不满足指定容差的信号在结果中会突出显示。您可以使用仿真数据检查器比较各次仿真运行的结果。

Screen shot of Fixed-Point Tool.

打开 定点工具

  • Simulink 工具条:在 App 选项卡上,点击代码生成 下此 App 的图标。

  • MATLAB 命令提示符:输入 fxptdlg('system_name'),其中 'system_name' 是您要转换的模型或系统的名称(指定为字符串)。

示例

全部展开

此示例说明如何使用定点工具优化的定点转换工作流。此示例中使用的模型是使用浮点数据类型建模的一个简单 FIR 滤波器。在此示例中,您要为滤波器的输出指定已知行为约束,并优化 Embedded Efficient Filter 子系统中的定点数据类型。

打开 mSimpleFIR 模型。

open_system('mSimpleFIR');

检查 Embedded Efficient Filter 子系统。

open_system('mSimpleFIR/Embedded Efficient Filter');

已知设计最小值和最大值在模型中的模块上显式指定,包括在 Embedded Efficient Filter 子系统的输入和输出上。

打开定点工具。在 Simulink® 的 App 选项卡上,点击代码生成下的 App 图标。

要启动优化的定点转换工作流,请选择优化的定点转换

选择要分析的子系统。在在设系统(SUD) 下,选择 Embedded Efficient Filter 子系统。

选择要使用的范围收集方法。在范围收集模式下,选择使用推导范围的仿真。在优化的范围分析步骤中,该工具将合并各个范围,这些范围来自仿真最小值和最大值、模型中模块上显式指定的设计最小值和最大值,以及通过静态分析计算得出的推导最小值和最大值(该分析推导模型中对象的范围)。

指定仿真输入。对于此示例,使用默认模型输入进行仿真。

为记录的信号指定信号容差。将 output_signal:1绝对容差相对容差设置为 0.01

要为定点转换准备模型,请点击准备。定点工具创建模型的备份版本并检查模型与转换过程的兼容性。有关准备检查的更多信息,请参阅Use the Fixed-Point Tool to Prepare a System for Conversion

接下来,展开优化选项按钮箭头以配置用于数据类型优化的选项。对于此示例,使用默认值。

要优化模型中的数据类型,请点击优化数据类型

在优化过程中,软件分析您的在设系统中对象的范围。优化将考虑所有指定的行为约束,包括设计最小值和最大值以及信号容差,以将异构数据类型应用于您的系统,同时最小化目标函数。对于此示例,目标函数设置为默认 Bit Width Sum,即在优化过程中尽量减小在设系统中的字长总和。

在优化过程中,软件会更改若干设置和模型配置参数。这些更改的目的包括隐藏诊断、启用仿真数据检查器的记录功能、减少结果占用的内存、确保模型的有效性、加速优化过程以及关闭数据类型覆盖。有关详细信息,请参阅Model Configuration Changes Made During Data Type Optimization。您可以在优化完成后还原这些诊断。

有关优化过程的详细信息将输出到定点工具中的优化详细信息窗格。您可以在优化搜索完成之前通过点击停止来暂停或停止优化求解器。

当优化完成时,定点工具显示一个表,其中包含在优化过程中找到的所有解。表中的解 1 对应找到的最优解。

解在表中按成本排序,该成本由优化选项菜单中指定的目标函数定义。满足定义的行为约束的可行解在解表中标有通过状态。不满足行为约束的解标有失败状态。此示例使用滤波器子系统输出的容差来定义系统的期望行为。有关定义其他类型的行为约束的详细信息,请参阅指定行为约束

在优化过程中,该工具收集模型中对象的范围和统计量。要探索这些范围,请在工作流浏览器窗格中选择 BaselineRun

结果电子表格显示在优化的范围收集阶段收集的统计量摘要,包括仿真最小值和仿真最大值。您可以点击任一结果以在结果详细信息窗格中查看其他详细信息。仿真数据的可视化窗格显示模型中每个对象使用的位的直方图摘要。

您可以自定义在结果电子表格中显示的信息,或使用浏览选项卡根据其他准则对这些结果进行排序和过滤。有关详细信息,请参阅Control Views in the Fixed-Point Tool

优化过程中找到的最优解(解 1)会自动应用于模型。要将此优化的解与基线运行进行比较,请点击比较。在 Embedded Efficient Filter 子系统中,您可以看到应用的优化定点数据类型。当您为具有记录信号的模型点击比较时,该工具会打开仿真数据检查器。在仿真数据检查器中,选择 output_signal 作为要比较的信号。解 1 的被控对象输出信号图在指定的容差带内。

您可以通过从解表中选择解并点击应用并比较来继续探索其他解。

在定点工具中优化数据类型后,您可以选择将优化工作流步骤导出到 MATLAB® 脚本。这允许您保存当前优化工作流步骤,并使用 fxpopt 在命令行中继续执行数据类型优化。

点击导出脚本以将名为 fxpOptimizationOptions 的脚本导出到当前工作目录。

在转换过程后,如果您要将模型还原到在转换过程开始时的状态,请点击还原原始模型。在转换的准备阶段后对模型所做的任何更改都将被删除。

此示例说明如何在定点工具中使用迭代定点转换工作流。此示例中使用的模型是使用定点数据类型的初始估计值建模的一个简单 FIR 滤波器。在此示例中,您要为滤波器的输出指定已知行为约束,并改进 Embedded Efficient Filter 子系统中的定点数据类型。

打开 mSimpleFIR_fxp 模型。

open_system('mSimpleFIR_fxp');

检查 Embedded Efficient Filter 子系统。

open_system('mSimpleFIR_fxp/Embedded Efficient Filter');

已知设计最小值和最大值在模型中的模块上显式指定,包括在 Embedded Efficient Filter 子系统的输入和输出上。

打开定点工具。在 Simulink® 的 App 选项卡上,点击代码生成下的 App 图标。

要启动迭代定点转换工作流,请选择迭代定点转换

选择要分析的子系统。在在设系统(SUD) 下,选择 Embedded Efficient Filter 子系统。

选择要使用的范围收集方法。在范围收集模式下,选择使用推导范围的仿真。在优化的范围分析步骤中,该工具将合并各个范围,这些范围来自仿真最小值和最大值、模型中模块上显式指定的设计最小值和最大值,以及通过静态分析计算得出的推导最小值和最大值(该分析推导模型中对象的范围)。

指定仿真输入。对于此示例,使用默认模型输入进行仿真。

为记录的信号指定信号容差。将 output_signal:1绝对容差相对容差设置为 0.01

要为定点转换准备模型,请点击准备。定点工具创建模型的备份版本并检查模型与转换过程的兼容性。有关准备检查的更多信息,请参阅Use the Fixed-Point Tool to Prepare a System for Conversion

接下来,收集范围。展开收集范围按钮箭头并选择双精度。点击收集范围以开始范围收集运行。

当您选择双精度作为范围收集模式时,该工具会在启用数据类型覆盖的情况下仿真在设系统。数据类型覆盖对模型中的定点数据类型执行全局覆盖,从而避免量化效应。这使您能够为模型的行为建立理想的浮点基线。

范围收集的结果存储在 BaselineRun 中。结果电子表格显示在范围收集仿真期间收集的统计量摘要,包括模型上当前指定的数据类型 (SpecifiedDT)、仿真最小值和仿真最大值。编译的数据类型 (CompiledDT) 列对 Embedded Efficient Filter 子系统中的所有对象显示双精度,表明在范围收集仿真期间应用了数据类型覆盖。

您可以点击任一结果以在结果详细信息窗格中查看其他详细信息。仿真数据的可视化窗格显示模型中每个对象使用的位的直方图摘要。仿真数据显示模型中的几个对象具有潜在下溢。

您可以自定义在结果电子表格中显示的信息,或使用浏览选项卡根据其他准则对这些结果进行排序和过滤。有关详细信息,请参阅Control Views in the Fixed-Point Tool

接下来,展开设置按钮箭头以配置用于数据类型建议的设置。将建议设置为字长

要根据收集的范围和指定的数据类型建议设置建议数据类型,请点击建议数据类型。该工具使用所有可用的范围数据来计算数据类型建议,这些建议可以包括设计最小值或最大值、仿真最小值或最大值以及推导的最小值或最大值。数据类型建议用于在设系统中其锁定输出数据类型设置以防止被定点工具更改参数处于清除状态的所有对象。

要将建议的数据类型写入模型,请点击应用数据类型。该工具更新 SpecifiedDT 列以显示数据类型已应用于模型。

使用应用的定点数据类型对模型进行仿真。展开用嵌入类型进行仿真按钮箭头并选择指定的数据类型。然后点击用嵌入类型进行仿真

定点工具使用新定点数据类型对模型进行仿真,并记录在设系统中所有对象的最小值和最大值以及溢出数据。此信息存储在名为 EmbeddedRun 的新运行中。EmbeddedRun 旁边的图标显示通过状态,表明在设系统中的所有信号都满足指定的容差。仿真数据的可视化窗格会更新以显示新 EmbeddedRun 数据。

要将存储在 BaselineRun 中的理想结果与新应用的定点数据类型进行比较,请从运行以在 SDI 中进行比较下拉菜单中选择 EmbeddedRun。然后点击比较结果以打开仿真数据检查器

在仿真数据检查器中,选择 output_signal 作为要比较的信号。

EmbeddedRun 的滤波器输出信号图在指定的容差带内。

如果转换后的系统的行为不能满足您的需求,或您要探索选择其他数据类型的效果,您可以在应用新建议设置后建议新数据类型。继续迭代,直到找到系统的定点行为可接受的设置。

在转换过程后,如果您要将模型还原到在转换过程开始时的状态,请点击还原原始模型。在转换的准备阶段后对模型所做的任何更改都将被删除。

此示例说明如何使用定点工具中的范围收集工作流。此示例中使用的模型是使用定点数据类型建模的一个简单 FIR 滤波器。在此示例中,您分析模型的数值行为以确定 Embedded Efficient Filter 子系统中溢出的根源。

打开 mSimpleFIR_fxp_ovf 模型。

open_system('mSimpleFIR_fxp_ovf');

检查 Embedded Efficient Filter 子系统。

open_system('mSimpleFIR_fxp_ovf/Embedded Efficient Filter');

已知设计最小值和最大值在模型中的模块上显式指定,包括在 Embedded Efficient Filter 子系统的输入和输出上。

打开定点工具。在 Simulink® 的 App 选项卡上,点击代码生成下的 App 图标。

要启动范围收集工作流,请选择范围收集

选择要分析的子系统。在在设系统(SUD) 下,选择 Embedded Efficient Filter 子系统。

选择要使用的范围收集方法。在范围收集模式下,选择使用推导范围的仿真。在范围收集期间,该工具将合并各个范围,这些范围来自仿真最小值和最大值、模型中模块上显式指定的设计最小值和最大值,以及通过静态分析计算得出的推导最小值和最大值(该分析推导模型中对象的范围)。

指定仿真输入。对于此示例,使用默认模型输入进行仿真。

为记录的信号指定信号容差。将 output_signal:1绝对容差相对容差设置为 0.01

接下来,展开收集范围按钮箭头以配置用于范围收集的设置。选择双精度以在基线范围收集运行期间临时用双精度覆盖模型中的数据类型。点击收集范围

范围收集运行的结果存储在 BaselineRun 中。结果电子表格显示在范围收集期间收集的统计量摘要,包括模型上当前指定的数据类型 (SpecifiedDT)、仿真最小值和仿真最大值。编译的数据类型 (CompiledDT) 列对 Embedded Efficient Filter 子系统中的所有对象显示双精度,表明在范围收集仿真期间应用了数据类型覆盖。

您可以点击任一结果以在结果详细信息窗格中查看其他详细信息。仿真数据的可视化窗格显示模型中每个对象使用的位的直方图摘要。

您可以自定义在结果电子表格中显示的信息,或使用浏览选项卡根据其他准则对这些结果进行排序和过滤。有关详细信息,请参阅Control Views in the Fixed-Point Tool

接下来,使用模型上当前指定的定点数据类型对模型进行仿真。展开设置按钮箭头并选择指定的数据类型,然后点击用嵌入类型进行仿真

定点工具将仿真结果存储在 EmbeddedRun 中。

EmbeddedRun 旁边的图标显示失败状态,表明一个或多个信号不满足指定的容差。Product 模块的结果表明此结果存在问题。结果详细信息窗格显示该模块发生 1670 次溢出,表明字长选择不当。

要将存储在 BaselineRun 中的理想结果与定点结果进行比较,请从运行以在 SDI 中进行比较下拉菜单中选择 EmbeddedRun。然后点击比较结果以打开仿真数据检查器。在仿真数据检查器中,选择 output_signal 作为要比较的信号。

相关示例

参数

全部展开

要分析或进行定点转换的系统或子系统。您可以在模型中一次选择一个子系统,以通过隔离数值问题的根源来帮助调试,您也可以选择顶层模型。

有关转换包含特定建模结构的系统的详细信息,请参阅:

工具如何收集系统中对象的范围,指定为以下项之一:

  • 仿真范围 - 通过仿真收集范围。要收集和合并多个仿真运行的范围,请指定仿真输入。数据类型建议的质量取决于所提供的测试平台。

  • 推导范围 - 通过静态分析收集范围,该分析会推导范围,也称为范围分析推导范围分析。使用此选项收集的范围仅基于在模型上指定的设计范围。此选项通常提供更保守的数据类型建议。有关详细信息,请参阅How Range Analysis Works

  • 使用推导范围的仿真 - 通过仿真和推导范围分析收集范围并合并结果。建议的数据类型基于仿真和推导范围的并集。此选项提供最全面的范围信息。

有关详细信息,请参阅Choosing a Range Collection Method

仿真的输入,指定为 Simulink.SimulationInput 对象。

如果您为范围收集模式选择仿真范围使用推导范围的仿真,您可以选择指定额外的仿真输入,以提高收集范围和数据类型建议的准确度。在范围收集仿真期间,定点工具从每个指定的仿真场景中捕获最小值和最大值。如果您选择的 Simulink.SimulationInput 对象包含多个仿真场景,则定点工具基于从所有仿真场景中合并的范围建议数据类型。

一整套能够覆盖设计全部范围的输入信号,将使系统的数据类型建议更加准确。有关示例,请参阅Propose Data Types for Merged Simulation Ranges

要确定新定点实现的数值行为是否可接受,您可以为模型中已启用记录的各个信号定义容差。您可以指定以下任何类型的容差:

  • 绝对容差 - 原始信号和转换后设计中的信号之间可接受的最大差的绝对值。

  • 相对容差 - 原始输出与新设计输出之间的最大相对差,指定为百分比。例如,值 1e-2 表示原始值与转换后设计的信号值之间的最大差为百分之一。

  • 时间容差(秒) - 时间间隔,其中最大值和最小值定义要对照比较的上限值和下限值。

优化的定点转换工作流中,您必须指定至少一个行为约束才能优化数据类型。信号容差是您可以指定的一种行为约束类型。

迭代定点转换工作流中,建议数据类型不需要信号容差,但工具确定嵌入的运行是否在容差范围内需要信号容差。

范围收集工作流中,收集范围不需要信号容差,但工具确定收集的范围是否在容差范围内需要信号容差。

您可以使用任何返回有限非负值的有效 MATLAB 表达式输入信号容差。 (自 R2023a 起)

有关详细信息,请参阅指定行为约束容差计算

使用以下项收集模型中对象的范围:

  • 使用当前设置 - 使用模型上设置的当前数据类型覆盖。

  • 双精度 - 用双精度覆盖模型中的数据类型。

  • 单精度 - 用单精度覆盖模型中的数据类型。

  • 定标双精度 - 用定标双精度覆盖模型中的数据类型。

收集的范围取决于范围收集模式和任何指定的仿真输入

有关详细信息,请参阅定点插桩和数据类型覆盖Use Custom Data Type Override Settings for Range Collection

设置菜单中可用的数据定型选项取决于选定工作流。

优化的定点转换工作流选项

选项描述
允许的字长

[2:65535](默认值)

可用于优化的在设系统的字长。优化的最终结果使用的字长是允许的字长与在模型的硬件实现窗格中指定的硬件约束兼容字长的交集。

最大迭代数

50(默认值)

要执行的最大迭代数,指定为标量整数。优化过程会遍历不同解,直到找到理想解、达到最大迭代次数或满足其他停止条件。

最长时间(秒)

600(默认值)

优化要运行的最长时间(以秒为单位),指定为标量数。优化运行,直到达到指定时间、找到理想解或满足其他停止条件。

耐心值(迭代数)

10(默认值)

在未找到新最优解的情况下允许的最大迭代次数,指定为整数标量。只要算法继续找到新最优解,优化就会继续。

安全裕度(%)

0(默认值)

安全裕度,指定为正标量值,指示收集范围边界增加的百分比。安全裕度应用于所有收集范围的并集。

目标函数

在优化搜索期间使用的目标函数。优化算法寻求在满足指定行为约束的同时最小化目标函数。

  • 位宽总和(默认值)- 最小化位宽总和。

  • 运算符计数 - 最小化生成的 C 代码中运算符的估计计数。

    此选项可能会减少从 Simulink 模型生成的 C 代码的程序内存大小。'OperatorCount' 目标函数不适用于 FPGA 或 ASIC 目标。

注意

要在优化期间使用运算符计数作为目标函数,模型必须准备好进行代码生成。有关确定代码生成就绪的详细信息,请参阅Check Model and Configuration for Code Generation (Embedded Coder)

执行邻域搜索

on(默认值)

是否对优化的解执行邻域搜索。

禁用此选项可以提高优化过程的速度,但也会增大找到不太理想的解的可能性。

使用并行

off(默认值)

是否并行运行优化迭代。

并行运行迭代需要 Parallel Computing Toolbox™ 许可证。如果您没有 Parallel Computing Toolbox 许可证,或您未启用此选项,则迭代将串行运行。

迭代定点转换工作流选项

选项描述
建议

是否为在设系统中的对象建议小数长度或字长。

  • 小数长度(默认值)- 定点工具使用范围信息和指定的默认字长值为您模型中的对象建议最佳精度的小数长度。

  • 字长 - 定点工具使用范围信息和指定的默认小数长度值为您模型中的对象建议字长。

建议符号性

(默认值)

是否使用收集的范围信息建议符号性。

仿真最小值/最大值的安全裕度(%)

2(默认值)

指定要应用于收集的仿真范围的安全裕度。定点工具将指定的量添加到收集的范围,并基于这个更大的范围提出建议。

转换双精度/单精度/半精度类型

(默认值)

是否为当前指定双精度、单精度或半精度数据类型的对象生成数据类型建议。

转换继承的类型

(默认值)

是否为当前指定继承数据类型的结果生成数据类型建议。

默认字长

16(默认值)

用于数据类型建议的默认字长,指定为整数标量。仅当建议设置设为小数长度时,此设置才会启用。

默认小数长度

4(默认值)

用于数据类型建议的默认小数长度,指定为标量整数。仅当建议设置设为字长时,此设置才会启用。

范围收集工作流选项

选项描述
验证方式

用于嵌入的仿真的数据类型覆盖设置。

  • 指定的数据类型 - 使用模型上指定的数据类型

  • 定标双精度 - 用定标双精度覆盖数据类型。

限制

提示

版本历史记录

在 R2006a 之前推出