主要内容

为浮点运算分配足够的延迟

问题

有时候,在Simulink中用浮点算法生成代码时金宝app®, HDL Coder™生成一个错误,它无法分配足够数量的延迟。

导致

此错误消息通常发生在您让Simulink®块在反馈循环中执行浮点操作时。金宝app这些块有延迟。HDL Coder™无法分配延迟来补偿延迟,因为代码生成器需要添加延迟并平衡它们以保持数值精度。

如果您打开这个示例模型RunningSum.slx,您将看到一个使用单一数金宝app据类型的Simulink模型。

生成的HDL代码CumSum_Sl子系统,右键单击子系统并选择HDL代码>为子系统生成HDL.在代码生成期间,HDL Coder生成一个错误:

通过使用错误消息中提到的块的路径,导航到模型中的Add块。这个块在一个反馈回路中。

Add块的延迟时间为11。在生成代码时,HDL Coder不能为该块分配11个延迟,因为它不能将匹配的延迟添加到其他路径。

以该模型为例说明了解决这一问题的各种策略。

解决方案

策略1:全局过采样

此建模范例使用时钟速率管道优化来对设计进行过采样,使时钟速率比DUT采样速率快得多。要启用此优化,请为您的Simulink模型指定一个全局过采样因子。金宝app然后,浮点延迟以更快的时钟速率运行,并可以成功分配。有关更多信息,请参见时钟频率流水线

  1. 指定一个过采样因子,该因子等于或大于无法分配延迟的浮点运算符的延迟。为RunningSum模型,指定过采样因子至少等于12.要了解浮点运算符的延迟值,请参见金宝app使用本机浮点数支持的S金宝appimulink块

    指定过采样因子:

    1. 应用程序选项卡上,选择高密度脂蛋白编码器.的HDL代码选项卡出现了。

    2. 点击设置.在HDL代码生成>全局设置选项卡,设置过采样因子12

  2. 在DUT上启用层次结构扁平化,并确保DUT中的子系统继承此设置。为RunningSum模型,选择CumSum_sl子系统,点击HDL块属性HDL代码Tab,然后setFlattenHierarchy

策略2:局部过采样

要以数据速率对设计建模,并有选择地增加HDL Coder™无法分配延迟的块的采样率,请使用局部过采样。然后,这些块以更快的时钟速率运行,并可以适应所需的延迟数量。

如果你打开RunningSum_OSmanual模型并导航到Add块,它展示了如何增加Add块的采样率和分配延迟。

  • 在重复和零阶保持块边界内的块以比模型的采样速率快12倍的时钟速率运行。

  • 子系统在Add块的输出处有一个长度为12的Delay块。在生成代码时,Add块吸收这个Delay块,它补偿了运算符的延迟。为了平衡延迟,子系统在其他路径上包含长度为12的延迟块。

的HDL代码CumSum_sl子系统。生成的HDL代码CumSum_Sl子系统,右键单击子系统并选择HDL代码>为子系统生成HDL

策略3:延迟

使用此建模范例以Simulink数据速率对整个设计建模。金宝app对于无法容纳所需延迟数量的块,添加一个延迟用一个充分的延迟的长度在块的输出。指定一个延迟的长度这等于浮点运算符的延迟时间。确保您在其他路径中添加了匹配的延迟。

RunningSum模型,你可以添加一个延迟类的输出处的长度为12的块添加块。生成代码时,添加Block吸收了这个延迟,因为Block的延迟为12。

有关更多信息,请参见原生浮点的延迟考虑

策略4:使用自定义延迟

您可以使用延迟策略为各个块指定一个自定义延迟值并吸收额外的延迟。使用这种策略可以优化你的设计,在以下方面进行权衡:

  • 时钟频率和功耗。

  • 过采样因子和采样频率。

要了解更多关于可以指定自定义延迟的权衡和块的信息,请参见LatencyStrategy

注意:当您使用自定义延迟策略时,请确保包含本机浮点无法分配延迟的块的子系统不是条件子系统。即子系统不能包含触发、复位或启用端口。

要了解如何使用自定义延迟来解决延迟分配问题,请打开模型RunningSum_Custom.slx

模型与原模型相似RunningSum模型,但没有启用块。使用Enable块可以防止自定义延迟策略吸收延迟。为Add块指定一个自定义延迟。然后,添加块可以吸收与添加块相邻的单位延迟。

现在可以为CumSum_sl子系统生成HDL代码。

策略5:零延迟

对于本地浮点数无法分配延迟的设计中的块,可以使用零延迟策略设置。默认情况下,设计中的块继承在“配置参数”对话框中指定的本机浮点设置。要为块指定零延迟策略设置,请在该块的“HDL块属性”对话框中本机浮点数选项卡,设置LatencyStrategy

RunningSum示例,设置LatencyStrategy添加.要选择本机浮点库并指定零延迟策略,在命令行输入:

fc = hdlcode . createfloatingpointtargetconfig (“NativeFloatingPoint”);hdlset_param (“RunningSum / CumSum_sl /子系统/添加”...“LatencyStrategy”“零”);

请注意

为了在目标FPGA设备上获得良好的性能,不建议设置延迟策略从“配置参数”对话框。

另请参阅

相关的例子

更多关于