主要内容

使用流水线提高过滤器性能

使用管道寄存器优化时钟速率

您可以通过应用管道寄存器来优化过滤器代码使用的时钟速率。尽管寄存器增加了整体的过滤器延迟和使用的空间,但它们对时钟速率提供了显著的改进。默认情况下,这些寄存器是禁用的。当启用它们时,编码器在过滤器的计算阶段之间添加寄存器。

为… 添加管道寄存器
FIR,反对称FIR和对称FIR滤波器 在最终求和树的各层之间
变换FIR滤波器 在系数乘数和加法之间
IIR滤波器 之间的部分
中投公司 梳段之间

例如,对于六阶IIR滤波器,编码器添加两个管道寄存器。编码器在第一部分和第二部分之间以及第二部分和第三部分之间插入一个管道寄存器。

对于FIR滤波器,使用管道寄存器优化了滤波器的最终求和。详情请参见FIR滤波器的终和优化

请注意

FIR、反对称FIR和对称FIR过滤器中的管道寄存器可以产生与原始过滤器对象产生的结果不同的数值结果,因为它们强制使用最终求和的树模式。

要使用管道寄存器,

  1. 选择添加管道寄存器选项。过滤器体系结构面板中的“生成HDL”。

  2. 对于FIR、非对称FIR和对称FIR滤波器,考虑为生成的测试台架设置误差范围,以考虑数值差异。误差范围是测试台架在比较结果时忽略的最小有效位的数量。设置误差范围。

    1. 选择试验台面板中的“生成HDL”对话框。然后单击配置选项卡。

    2. 设置误差幅度(位)字段设置为一个整数,该整数表示数值结果中可接受的最大差异位数。

  3. 继续设置其他选项或单击生成启动代码生成。

选择命令行:使用generatehdl具有属性的函数AddPipelineRegisters用管道寄存器优化过滤器。

FIR滤波器的乘数输入输出流水线

如果为FIR滤波器保留乘法器操作,可以通过在乘法器输入或输出处添加管道级来实现更高的时钟率。

下图显示了乘数流水线选项的UI选项。要启用这些选项,乘数系数乘数

  • 倍增器输入管道:若要在每个倍增器之前添加管道级,请以大于或等于的整数形式输入所需的级数0

  • 倍增器输出管道:若要在每个倍增器后面添加管道级,请以大于或等于的整数形式输入所需的级数0

选择命令行:使用generatehdl函数MultiplierInputPipeline而且MultiplierOutputPipeline属性指定FIR滤波器的乘法器流水线。

FIR滤波器的终和优化

如果您正在为FIR过滤器生成HDL代码,请考虑优化应用于过滤器的最终求和技术。默认情况下,编码器应用线性加法器求和,这是大多数DSP教科书中讨论的最终求和技术。或者,您可以指示编码器应用树或管道的最终求和。当设置为树模式时,编码器将创建一个最终加法器,对并行执行的连续产品执行成对加法,而不是按顺序执行。2022世界杯八强谁会赢?管道模式产生的结果类似于树型模式,只是在处理树型的每一层之后增加了一个阶段的管道寄存器。

相比之下,

  • 线性模式和树模式的加法器操作的数量是相同的。由于并行添加,树模式的时间可以更好。

  • 流水线模式优化了时钟速率,但增加了过滤器延迟。延迟增加到日志2(产品数量)2022世界杯八强谁会赢?,四舍五入到最接近的整数。

  • 与原始过滤器对象相比,线性模式有助于获得数字精度。树和管道模式可以产生与过滤器对象产生的结果不同的数值结果。

更改应用于FIR滤波器的最终求和:

  1. 中选择这些选项之一过滤器体系结构面板中的“生成HDL”。

    为… 选择……
    线性模式(默认) 线性FIR加法器式菜单
    树模式 FIR加法器式菜单
    管道模式 添加管道寄存器复选框
  2. 如果您指定树或流水线模式,请考虑为生成的测试工作台设置误差范围,以考虑数值差异。误差范围是测试台架在比较结果时忽略的最小有效位的数量。要设置误差范围,

    1. 选择试验台面板中的“生成HDL”对话框。然后单击配置选项卡。

    2. 设置误差幅度(位)字段设置为一个整数,该整数表示数值结果中可接受的最大差异位数。

  3. 继续设置其他选项或单击生成启动代码生成。

选择命令行:使用generatehdl具有属性的函数FIRAdderStyleAddPipelineRegisters优化FIR滤波器的最终求和。

指定或抑制注册的输入和输出

编码器添加一个额外的输入寄存器(input_register)和一个额外的输出寄存器(output_register)在HDL代码生成过程中。这些额外的寄存器可以用于计时目的,但它们增加了总体延迟。

下面的进程块写入额外的输入寄存器input_register当时钟事件发生时clk有效高(1):

Input_Register_Process: PROCESS (clk, reset) BEGIN IF reset = '1' THEN input_register <= (OTHERS => '0');ELSIF clk'event AND clk = '1' THEN IF clk_enable = '1' THEN input_register <= input_typeconvert;如果;如果;Input_Register_Process;

下面的进程块写入额外的输出寄存器output_register当时钟事件发生时clk有效高(1):

Output_Register_Process: PROCESS (clk, reset) BEGIN IF reset = '1' THEN output_register <= (OTHERS => '0');ELSIF clk'event AND clk = '1' THEN IF clk_enable = '1' THEN output_register <= output_typeconvert;如果;如果;END PROCESS;

如果应用程序关心总体延迟,并且没有计时要求,可以按以下方法抑制额外寄存器的生成:

  1. 选择全局设置选项卡上的Generate HDL对话框。

  2. 选择港口选项卡中的附加的设置窗格。

  3. 清晰的添加输入寄存器而且添加输出寄存器是必需的。下图显示了抑制生成额外输入寄存器的设置。

选择命令行:使用generatehdl和性质函数AddInputRegister而且AddOutputRegister添加额外的输入或输出寄存器。

Baidu
map