您可以通过应用管道寄存器来优化过滤器代码使用的时钟速率。尽管寄存器增加了整体过滤器的延迟和所使用的空间,但它们为时钟速率提供了重大改进。这些寄存器默认情况下是禁用的。当您启用它们时,编码器会在过滤器中的计算阶段之间添加寄存器。
为了... | 添加管道寄存器 |
---|---|
FIR,反对称FIR和对称FIR过滤器 | 在最终求和树的级别之间 |
转置FIR滤波器 | 在系数乘数和加法器之间 |
IIR过滤器 | 在各节之间 |
CIC | 在梳子部分之间 |
例如,对于第六阶IIR过滤器,编码器添加了两个管道寄存器。编码器在第一部分和第二部分之间以及第二部分和第三部分之间插入管道寄存器。
对于FIR过滤器,使用管道寄存器的使用优化了过滤器最终求和。有关详细信息,请参阅优化FIR过滤器的最终总和。
笔记
FIR,反对称FIR和对称FIR滤波器中的管道寄存器可以产生与原始滤波器对象产生的结果不同的数字结果,因为它们强迫最终求和的树模式。
要使用管道寄存器,
选择添加管道寄存器选项过滤器架构生成HDL对话框的窗格。
对于FIR,反对称FIR和对称FIR滤波器,请考虑为生成的测试台设置错误余量以考虑数字差异。误差边距是比较结果时忽略测试台的最小显着位数。设置错误保证金:
选择试验台窗格在生成HDL对话框中。然后单击配置标签。
设置错误利润率(位)字段到整数指示数字结果中最大可接受的差异数。
继续设置其他选项或单击产生启动代码生成。
命令行替代:使用GenerateHDL
属性功能AddPipielineGisters
用管道寄存器优化过滤器。
如果您保留FIR过滤器的乘数操作,则可以通过在乘数输入或输出处添加管道阶段来实现更高的时钟率。
下图显示了乘数管道选项的UI选项。为了启用这些选项,系数乘数至乘数
。
乘数输入管道:要在每个乘数之前添加管道阶段,请输入所需数量的阶段,以大于或等于0
。
乘数输出管道:要在每个乘数之后添加管道阶段,请输入所需数量的阶段,以大于或等于0
。
命令行替代:使用GenerateHDL
功能乘数流台管
和乘数输入Pipeline
为FIR过滤器指定乘数管道的属性。
如果要为FIR过滤器生成HDL代码,请考虑优化要应用于过滤器的最终求和技术。默认情况下,编码器应用线性加法求和,这是大多数DSP教科书中讨论的最终求和技术。另外,您可以指示编码器应用树或管道最终求和。设置为树模式时,编码器会创建一个最终加法器,该加法器对并行执行而不是顺序执行的连续产品进行成对添加。下载188bet金宝搏管道模式在处理树的每个级别后,通过添加管道寄存器的阶段产生与树模式相似的结果。
相比下,
线性和树模式的加法操作数量相同。由于并行添加,树模式的时机可以更好。
管道模式优化了时钟速率,但增加了过滤器延迟。潜伏期增加日志2(产品数)下载188bet金宝搏
,四舍五入到最近的整数。
与原始过滤对象相比,线性模式有助于获得数字精度。树和管道模式可以产生与过滤器对象产生的结果不同的数字结果。
要更改要应用于FIR滤波器的最终求和:
在过滤器架构生成HDL对话框的窗格。
为了... | 选择... |
---|---|
线性模式(默认模式) | 线性 来自FIR加法器风格菜单 |
树模式 | 树 来自FIR加法器风格菜单 |
管道模式 | 这添加管道寄存器复选框 |
如果指定树或管道模式,请考虑为生成的测试工作台设置错误余量以解释数字差异。误差边距是比较结果时忽略测试台的最小显着位数。要设置错误余量,
选择试验台窗格在生成HDL对话框中。然后单击配置标签。
设置错误利润率(位)字段到整数指示数字结果中最大可接受的差异数。
继续设置其他选项或单击产生启动代码生成。
命令行替代:使用GenerateHDL
属性功能Firadderstyle
或者AddPipielineGisters
优化FIR过滤器的最终总和。
编码器添加了额外的输入寄存器(input_register
)和额外的输出寄存器(output_register
)在HDL代码生成期间。这些额外的寄存器对于定时目的可能很有用,但它们增加了整体延迟。
以下过程块写入额外的输入寄存器input_register
发生时钟事件时clk
高(1)活跃:
input_register_process:process(clk,reset)如果reset ='1'开始,则input_register <=(asthers =>'0');elsif clk'event and clk ='1',如果clk_enable ='1',则input_register <= input_typeconvert;万一;万一;结束进程input_register_process;
以下过程块写入额外的输出寄存器output_register
发生时钟事件时clk
高(1)活跃:
output_register_process:process(clk,reset)如果reset ='1'开始,则output_register <=(asthers =>'0');elsif clk'event and clk ='1',如果clk_enable ='1',则output_register <= output_typeconvert;万一;万一;结束进程output_register_process;
如果总体延迟是您的应用程序关注的,并且您没有时间要求,则可以抑制以下额外寄存器的生成:
选择全局设置在生成HDL对话框上的标签。
选择端口在其他设置窗格。
清除添加输入寄存器和添加输出寄存器按要求。下图显示了抑制额外输入寄存器的生成的设置。
命令行替代:使用GenerateHDL
并与属性一起功能addInputRegister
和addoutputregister
添加额外的输入或输出寄存器。