主要内容

自动定点转换

自动定点转换功能

你可以用MATLAB转换浮点数®代码转换为定点代码使用定点转换器应用程序或在命令行中使用fiaccel函数-float2fixed选择。您可以根据模拟范围数据、派生(也称为静态)范围数据或两者选择建议数据类型。

您可以手动输入静态范围。这些手动输入的范围优先于模拟范围,应用程序在建议数据类型时使用它们。此外,您可以修改和锁定建议的类型,以便应用程序不能更改它。有关更多信息,请参见锁定建议的数据类型

有关支持的MATLAB特性和万博1manbetx函数的列表,请参见支持自动定点转换的MATLAB语言特性万博1manbetx

在定点转换过程中,您可以:

  • 使用代码覆盖率结果验证您的测试文件覆盖了算法的全部预期操作范围。

  • 根据默认的单词长度提出分数长度。

  • 根据默认分数长度提出单词长度。

  • 优化整数。

  • 指定模拟最小/最大数据的安全裕度。

  • 验证是否可以使用建议的数据类型构建项目。

  • 测试数值测试文件使用应用的定点类型。

  • 查看每个变量使用的比特的直方图。

  • 检测溢出。

代码覆盖率

默认情况下,应用程序显示代码覆盖结果。您的测试文件必须在整个操作范围内练习算法,以便模拟范围是准确的。所提出的定点数据类型的质量取决于测试文件覆盖算法操作范围的程度和您想要的精度。

检查代码覆盖率结果可以帮助您验证测试文件是否充分地执行了算法。如果代码覆盖率不够,修改测试文件或添加更多的测试文件来增加覆盖率。如果您在一次运行中模拟多个测试文件,应用程序将显示累积覆盖率。但是,如果您指定了多个测试文件,但一次只运行一个,应用程序将显示最后运行的文件的覆盖范围。

应用程序在代码的左侧显示一个颜色编码的覆盖栏。

该表描述了颜色编码。

覆盖条颜色 表明
绿色

下列情形之一:

  • 入口点函数执行多次,代码执行多次。

  • 入口点函数执行一次,代码执行一次。

不同深浅的绿色表示行执行计数的不同范围。最深的绿色表示最高的范围。

橙色 入口点函数执行多次,但代码只执行一次。
红色的 代码不执行。

当您将光标放在覆盖栏上时,颜色高亮显示将扩展到代码上。对于每段代码,应用程序都会显示该代码段执行的次数。

要验证测试文件是否在预期的操作范围内测试算法,请检查代码覆盖率结果。

覆盖条颜色 行动
绿色 如果您希望代码部分的执行频率高于覆盖率所显示的频率,请修改MATLAB代码或测试文件。
橙色 这种行为是初始化代码所期望的,例如,持久化变量的初始化。如果您希望代码执行多次,请修改MATLAB代码或测试文件。
红色的 如果不执行的代码是错误条件,则此行为是可接受的。如果您希望代码执行,可以修改MATLAB代码或测试文件。如果代码是保守地编写的,并且具有上下边界限制,并且您不能修改测试文件以达到此代码,则添加静态最小值和最大值。看到计算衍生范围

默认情况下,代码覆盖是开启的。只有在您验证了您有足够的测试文件覆盖率之后才关闭它。关闭代码覆盖可以加速模拟。要关闭代码覆盖,请在转换为定点页面:

  1. 单击分析箭头

  2. 清除显示代码覆盖率复选框。

建议数据类型

该应用程序基于计算范围和字长或分数长度设置提出了定点数据类型。计算的距离基于模拟距离数据、衍生距离数据(也称为静态距离)或两者兼有。如果您运行模拟并计算派生范围,应用程序将合并模拟和派生范围。

请注意

不能基于MATLAB类的派生范围提出数据类型。

对于非标量变量不支持派生范围分析。万博1manbetx

您可以手动输入静态范围。这些手动输入的范围优先于模拟范围,应用程序在建议数据类型时使用它们。您可以修改并锁定建议的类型,以便工具不能更改它。有关更多信息,请参见锁定建议的数据类型

运行模拟

在定点转换期间,该应用程序为您生成一个仪表MEX函数MATLAB入口文件.如果构建没有错误,应用程序将显示代码中函数和变量的编译信息(类型、大小、复杂性)。要导航到本地功能,请单击功能选项卡。如果发生构建错误,应用程序会提供错误消息,链接到导致构建问题的代码行。在运行模拟之前,必须解决这些错误。使用该链接在MATLAB编辑器中导航到有问题的代码行,并修改代码以解决问题。如果您的代码使用的函数不支持定点转换,应用程序将它们显示在万博1manbetx函数替换选项卡。看到函数替换

在运行模拟之前,指定测试文件或多个文件你想参选。运行模拟时,应用程序将运行测试文件,调用仪表化的MEX函数。如果你修改MATLAB设计代码,应用程序在运行前自动生成更新的MEX函数一个测试文件

如果测试文件成功运行时,模拟最小值和最大值以及建议的类型将显示在变量选项卡。如果手动为变量输入静态范围,则手动输入的范围优先于模拟范围。如果你通过输入或使用直方图手动修改建议的类型,数据类型将被锁定,因此应用程序无法修改它们。

如果测试文件失败时,将显示错误输出选项卡。

测试文件必须在整个运算范围内练习你的算法。所提出的定点数据类型的质量取决于测试文件以您想要的精度覆盖算法的操作范围。您可以添加测试文件,并选择在模拟期间运行多个测试文件。如果您运行多个测试文件,应用程序将合并模拟结果。

您还可以选择为直方图记录数据。运行模拟后,您可以查看每个变量的直方图。有关更多信息,请参见直方图日志数据

计算衍生范围

基于派生范围提出数据类型的优点是,您不必提供在整个操作范围内测试算法的测试文件。运行这样的测试文件通常需要很长时间。该应用程序只能计算标量变量的派生范围。

若要计算派生范围并基于这些范围提出数据类型,请为所有输入变量提供静态最小值和最大值或建议的数据类型。为了改进分析,请为其他变量输入尽可能多的静态范围信息。您可以手动输入范围或提升模拟范围以用作静态范围。手动输入的静态范围总是优先于模拟范围。

如果您知道硬件目标使用的数据类型,请将建议的数据类型设置为与此类型匹配。手动输入的数据类型被锁定,因此应用程序无法修改它们。该应用程序使用这些数据类型来计算输入的最小值和最大值,并导出其他变量的范围。有关更多信息,请参见锁定建议的数据类型

当你选择计算派生范围,该应用程序运行一个衍生的范围分析来计算MATLAB算法中变量的静态范围。分析完成后,静态范围显示在变量选项卡。如果运行产生+ /负派生范围,考虑为所有持久变量定义范围。

您可以选择快速衍生极差分析.有了这个选项,应用程序执行更快的静态分析。计算的范围可能大于所需的范围。如果静态分析花费的时间超过了您的承受能力,请选择此选项。

如果项目的派生范围分析花费了很长时间,您可以选择设置超时。当超时到达时,应用程序中止分析。

锁定建议的数据类型

你可以使用以下方法之一锁定建议的数据类型来阻止应用程序的更改:

  • 在应用程序中手动设置建议的数据类型。

  • 右键单击工具提出的类型并进行选择锁定计算值

该应用程序以粗体显示锁定的数据类型,以便易于识别。可以通过以下方式解锁类型:

  • 手动覆盖。

  • 右键单击并选择撤消修改.此操作仅解锁所选类型。

  • 右键单击并选择撤消所有变量的更改.此操作将解锁所有锁定的建议类型。

查看功能

转换为定点在定点转换过程的步骤中,您可以在左侧窗格中查看项目中的函数列表。这个列表还包括函数特殊化和类方法。从列表中选择函数时,该函数或类方法的MATLAB代码将显示在代码窗口中,它们使用的变量将显示在变量选项卡。

转换后,左窗格还显示一个输出文件列表,其中包括原始算法的定点版本。如果你的函数没有专门化,应用程序会在定点文件名中保留原来的函数名,并追加定点后缀。例如,这里的定点版本ex_2ndOrder_filter.mex_2ndOrder_filter_fixpt.m

应用程序显示类及其每个方法的信息。例如,考虑一个类,计数器,它有一个静态方法,MAX_VALUE,和方法,下一个

如果选择了类,应用程序将在变量选项卡。

如果您选择了一个方法,应用程序只显示该方法使用的变量。

专门化

如果一个函数是专门化的,应用程序列出每个专门化并按顺序编号。例如,考虑一个函数,dut,调用子函数,喷火而且酒吧,多次输入不同的输入类型。

函数Y = dut(u, v) tt1 = foo(u);Tt2 = foo([u v]);Tt3 = foo(复数(u,v));Ss1 = bar(u);Ss2 = bar([u v]);Ss3 = bar(复数(u,v));Y = (tt1 + ss1) + sum(tt2 + ss2) + real(tt3) + real(ss3);结束函数Y = foo(u) Y = u * 2;结束函数Y = bar(u) Y = u * 4;结束

如果选择顶层函数,应用程序将显示所有变量变量选项卡。

如果选择树视图,应用程序还会显示对每个专门化调用的行号。

如果选择专门化,应用程序只显示该专门化使用的变量。

在生成的定点代码中,每个定点专门化的编号与源代码列表,这使得在代码的浮点和定点版本之间进行跟踪变得很容易。例如,生成的定点函数为Foo > 1被命名为foo_s1

查看变量

变量选项卡为中所选函数中的每个变量提供以下信息导航面板:

  • 类型- MATLAB算法中变量的原始数据类型。

  • Sim卡敏而且Sim马克斯-模拟过程中分配给变量的最小值和最大值。

    您可以编辑模拟的最小值和最大值。编辑后的字段以粗体显示。编辑这些字段并不会触发静态范围分析,但该工具会在后续分析中使用编辑后的值。你可以恢复到应用程序建议的类型。

  • 静态分而且静态马克斯—静态最小值和最大值。

    若要计算派生范围并基于这些范围提出数据类型,请为所有输入变量提供静态最小值和最大值。为了改进分析,请为其他变量输入尽可能多的静态范围信息。

    当你计算派生范围时,应用程序会运行静态分析来计算代码中变量的静态范围。分析完成后,显示静态范围。您可以编辑计算结果。编辑后的字段以粗体显示。编辑这些字段并不会触发静态范围分析,但该工具会在后续分析中使用编辑后的值。你可以恢复到应用程序建议的类型。

  • 整数—模拟过程中分配给变量的值是否全部为整数。

    该应用程序确定一个变量是否总是一个整数。您可以修改该字段。编辑后的字段以粗体显示。编辑这些字段并不会触发静态范围分析,但应用程序会在后续分析中使用编辑后的值。你可以恢复到应用程序建议的类型。

  • 指定字(或分数)长度的建议定点数据类型。建议的数据类型使用numerictype符号。例如,numerictype(12) 1, 16日表示单词长度为16,分数长度为12的有符号定点类型。numerictype(0, 16日12)表示无符号定点类型,其字长为16,分数长为12。

    因为应用程序没有将数据类型应用到表达式,所以它不会为表达式显示建议的类型。相反,它显示它们的原始数据类型。

您还可以将光标放在变量名上,从而在代码窗格中查看和编辑变量信息。

你可以使用Ctrl + F来搜索变量的MATLAB代码和上变量选项卡。应用程序高亮显示代码中出现的事件,并只显示具有指定名称的变量变量选项卡。

查看MATLAB类的信息

应用程序显示:

  • MATLAB类的代码和代码窗口中类方法的代码覆盖。使用源代码名单载于转换为定点页以选择要查看的类或类方法。如果您选择了一个类方法,应用程序将在代码窗口中突出显示该方法。

  • 关于MATLAB类的信息变量选项卡。

直方图日志数据

记录直方图数据:

  • 转换为定点页,单击分析箭头

  • 选择直方图的日志数据

  • 点击分析范围

模拟后,查看某变量的直方图,对变量选项卡,单击建议类型字段。

直方图提供了提议的数据类型的范围和提议的数据类型所涵盖的模拟值的百分比。位权值沿x轴显示,沿y轴显示出现的百分比。直方图中的每个bin对应于二进制字中的一个位。例如,这个直方图显示类型变量的范围numerictype(14) 1日16日

您可以通过以下方法查看更改建议数据类型的效果:

  • 在直方图窗口中拖动边界框的边缘以更改建议的数据类型。

  • 选择或清除签署

若要还原为自动转换建议的类型,请在直方图窗口中单击

函数替换

如果MATLAB代码使用了不支持定点的函数,应用程序将这些函数列在万博1manbetx函数替换选项卡。您可以选择使用自定义函数替换或查找表替换不受支持的函数。万博1manbetx

您可以在此列表中添加和删除函数替换。如果为函数输入函数替换,则在构建项目时使用替换函数。如果您没有输入替换,应用程序将使用原始MATLAB代码中指定的函数类型。

请注意

使用此表,您可以替换函数的名称,但不能替换参数模式。

如果禁用了代码生成准备检查,则控件上不支持的函数列表万博1manbetx函数替换TAB可能不完整或不正确。在这种情况下,手动添加函数。看到的。

验证类型

将代码转换为定点数据类型可以使用建议的定点数据类型验证构建。如果验证成功,就可以测试定点MATLAB算法的数值行为了。

如果在验证期间发生错误或警告,则它们将显示在输出选项卡。如果出现错误或警告:

  • 变量选项卡,检查建议的类型和手动修改的类型,以验证它们是否有效。

  • 函数替换选项卡,验证您为不支持的函数提供了函数替换。万博1manbetx

测试数字

在将代码转换为定点并验证建议的定点数据类型之后,单击测试验证定点MATLAB算法的行为。默认情况下,如果您添加了测试文件为了定义输入或运行模拟,应用程序使用这个测试文件测试数字。可选地,您可以添加测试文件并选择运行多个测试文件。该应用程序将生成的定点MATLAB代码的数值行为与原始浮点MATLAB代码进行比较。如果您选择记录比较图的输入和输出,应用程序将为每个标量输出生成一个额外的图。此图显示了浮点和定点结果以及它们之间的差异。对于非标量输出,只显示错误信息。

在定点模拟后,如果数值结果不满足所需的精度,则修改定点数据类型设置并重复类型验证和数值测试步骤。您可能必须多次迭代这些步骤才能获得您想要的结果。

检测溢出

当测试数字时,选择使用缩放双精度值来检测溢出启用溢出检测。当选择此选项时,转换应用程序将使用建议的定点类型的缩放双版本运行模拟。由于缩放双精度浮点数将数据存储在双精度浮点数中,因此它们在全范围内执行算术。它们还保留它们的定点设置,因此当计算超出定点类型的范围时,它们能够报告。有关更多信息,请参见按比例缩小的双打

如果应用程序检测到溢出,在其溢出选项卡,它提供:

  • 溢出的变量和表达式列表

  • 关于每个变量溢出多少的信息

  • 到代码窗口中的变量或表达式的链接

如果您的原始算法使用缩放双精度,应用程序还为这些表达式提供溢出信息。

另请参阅

检测溢出