一种基于 FPGA 的高性能多路 FIR 数字抽取滤波器及其读写 方法 技术领域 本发明涉及数字滤波器, 尤其是采用可编程逻辑器件实现的数字滤波器, 具体地 说是一种基于 FPGA 的高性能多路 FIR 数字抽取滤波器及其读写方法。
背景技术 目前, 数字滤波在图像处理、 语音识别和模式识别等数字信号处理中占有重要地 位。 与模拟滤波器相比, 数字滤波器可以满足滤波器幅度和相位特性的严格要求, 可以克服 模拟滤波器所无法克服的电压漂移、 温度漂移和噪声等问题。数字滤波器包括有限冲激响 应 (FIR) 滤波器和无限冲激响应 (IIR) 滤波器两大类, 其中的 FIR 滤波器可以保证严格的 线性相位。同时由于其实现结构主要是非递归的, 因此 FIR 滤波器可以稳定工作。FIR 滤波 器被广泛用于各类数字信号处理系统中实现卷积、 相关、 自适应滤波、 正交插值等处理。
随着数字信号处理的发展, 信号的处理、 编码、 传输和存储等工作量越来越大。为 了节省工作量及存储空间, 在一个信号处理系统中常常需要不同的采样率处理, 以及这些 不同采样率信号之间的相互转换。 在这种情况下, 多速率数字信号处理产生并发展起来。 它 的应用给系统设计带来了许多好处, 例如, 降低系统实现的复杂度、 降低计算复杂度、 降低 传输速率、 减少存储量等。
抽取滤波器是基于软件无线电技术的数字通信系统中广泛运用的一种有效线性 滤波器。由于其输入和输出数据速率具有线性的倍数关系的特点, 这样具有了多数率信号 处理的特性, 是实现数字通信系统中接收机数字下变频 (DDC) 的重要技术。
对于非实时系统和低速采样系统, FIR 滤波器的运算可在 CPU 或 DSP 处理器上采 用软件实现。 但是对于无线通讯、 雷达以及工业控制, 甚至语音信号处理等一些实时性要求 较高的系统, 由于 FIR 运算计算量过大, 受到乘法器和加法器电路的限制, 采用 DSP 软件可 能无法实现, 因此采用可编程逻辑器件便是最好的方法。
目前 FIR 滤波器大致有以下几种实现方法 :
(1) 使用单片通用数字滤波器集成电路。 单片通用数字滤波器使用简单方便, 但由 于字长和阶数的规格较少, 不能完全满足实际需要。 虽可采用多片扩展来满足, 但会增加体 积和功耗, 因而在实际中受到一定限制。
(2) 采用 DSP 器件实现。由于有专门的函数可供调用, 因此使用 DSP 器件设计 FIR 滤波器相对较简单, 其应用也最为广泛。其唯一缺点是程序顺序执行, 尽管 DSP 器件性能不 断提高, 但在某些实时性要求极高的场合中受到限制。
(3) 采用可编程逻辑器件实现。 随着可编程逻辑器件的容量和速度的不断增加, 实 现单片系统集成已经成为可能。利用可编程逻辑器件实现 FIR 滤波器, 由于实现的是硬件 并行方法, 因此特别适用于某些实时性要求高的场合。
发明内容本发明的目的是针对 FIR 滤波器实现的问题, 提出一种采用可编程逻辑器件实现 的基于 FPGA 的高性能多路 FIR 数字抽取滤波器及其读写方法。
本发明的技术方案是 :
一种基于 FPGA 的高性能多路 FIR 数字抽取滤波器, 它包括时分复用模块、 时序控 制模块、 地址控制模块、 双口 RAM 存储模块、 运算系数配置模块、 滤波运算模块和解时分复 用模块, 该滤波器的倍抽取为 D, 具有 N 个通道、 M 个滤波系数和 L 位数据宽度, 该滤波器需 要使用所在的 FPGA 内的乘法器的个数 E = [[M/2]/D], 同时令 P = [M/D], Q = [P/2] :
时分复用模块 TDM : 通过 N 个通道采集 N 个 L 位的待滤波数据, 将各通道的并行数 据输入转化为 1 个通道的 L 位串行数据输出, 并产生同步信号 Sync_in ;
时序控制模块 TIME_CTRL : 根据同步信号 Sync_in 产生其它模块的控制信号和同 步后的串行数据 ;
地址控制模块 ADDR_CTRL : 根据时序控制模块的控制信号产生双口 RAM 存储模块 的 2E 个读地址信号、 1 个写地址信号和 1 个写使能信号 ;
双口 RAM 存储模块 DPRAM : 用于存储时序控制模块同步后的待滤波数据, 将串行数 据按照写地址写入以后, 再按照读地址读出, 转换为符合滤波运算方法结构的串行数据, 数 据读出后对无效数据进行过滤, 再通过 2E 个 L 位寄存器输出至滤波运算模块 ; 运算系数配置模块 COMP_COEF : 用于产生滤波运算的 M 个相关系数, 根据控制信 号, 配置滤波运算需要的 M 个系数 ;
滤波运算模块 COMP_OPE : 通过 2E 个 L 位寄存器从双口 RAM 存储模块中读取 2E 个 L 位串行数据, 配合运算系数配置模块的 M 个相关系数完成数据的滤波运算, 模块内包括了 FPGA 内的 E 个乘法器 ;
解时分复用模块 TDDM : 完成 N 个通道滤波输出数据的解复用。
本发明的双口 RAM 存储模块 DPRAM 为一个, 包括 FPGA 内的 2E 个双口 RAM 存储单 元, 由 BLOCK RAM 生成 ; 各双口 RAM 存储单元均设有一个端口写, 一个端口读, 读写地址独 立, 完成数据读写操作 ; 数据读出以后再对无效数据进行过滤。
本发明的双口 RAM 存储模块用于改变原始的待滤波数据的结构, 转换为符合滤波 运算方法结构的串行数据, 数据读出以后对无效数据进行过滤。
一种基于 FPGA 的高性能多路 FIR 数字抽取滤波器的读写方法, 基于 FPGA 的高性 能多路 FIR 数字抽取滤波器, 其特征是它包括分配 RAM 的大小步骤 ; 在双口 RAM 存储模块中 根据写使能信号和写地址信号对待滤波数据进行写数据的步骤, 根据读地址信号进行读数 据的步骤, 数据读出以后对无效数据进行过滤的步骤和在滤波运算模块中进行滤波运算步 骤。
本发明的分配 RAM 的大小步骤包括 :
所使用的 FPGA 内的每一个乘法器需要对应使用 FPGA 内的 2 个 L*MN bit 的双口 RAM 存储单元, E 个乘法器一共使用 FPGA 内的 2E 个 L*MN bit 的双口 RAM 存储单元, 均由 FPGA 内的 BLOCK RAM 实现 ;
N 个通道的地址分配规律 :
通道 0 对应的地址依次为 0、 N、 2N、 3N… (M-4)N、 (M-3)N、 (M-2)N、 (M-1)N ;
通道 1 对应的地址依次为 1、 N+1、 2N+1、 3N+1… (M-4)N+1、 (M-3)N+1、 (M-2)N+1、
(M-1)N+1 ;
。 。 。
通道 N-2 对应的地址依次为 N-2、 2N-2、 3N-2、 4N-2… (M-3)N-2、 (M-2)N-2、 (M-2) N-2、 MN-2 ;
通道 N-1 对应的地址依次为 N-1、 2N-1、 3N-1、 4N-1… (M-3)N-1、 (M-2)N-1、 (M-1) N-1、 MN-1 ;
每个通道对应位置的地址比前一个通道对应位置的地址增加 1, 从通道 0 开始增 加到通道 N-1, 一共 N 个通道, 依此类推。
本发明的根据写使能信号和写地址信号对待滤波数据进行写数据的步骤包括 :
①产生写使能信号 : 输入待滤波数据有效时均为高电平 ; 输入待滤波数据无效时 均为低电平。
②产生写地址信号 : 写使能信号高电平期间, 每隔 1 个时钟周期依次进行 0 ~ MN-1 的模 MN 计数, 计数值每次 +1 ; 写使能信号低电平期间, 写地址保持不变。
③进行写操作 : 写使能信号高电平期间, 输入的串行待滤波数据根据对应的写地 址信号写入 RAM 存储单元中相应的位置, 每隔 1 个时钟周期依次写入 1 个数据 ; 具体的顺序 为: N 个通道对应的第 1 个数据依次写入, 接着 N 个通道对应的第 2 个数据依次写入, 依此 类推, 直到 N 个通道对应的 M 个数据全部写入 ; 写使能信号低电平期间, 没有数据写入。 本发明的根据读地址信号进行读数据的步骤包括 :
①产生 [P/2] 个读地址的首地址的临时信号 :
读地址 1 的首地址的临时信号变化规律 : 第 1 个地址赋值为 (D-1)N ; 之后每隔 DN 个时钟周期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 +DN ;
读地址 3 的首地址的临时信号变化规律 : 第 1 个地址赋值为 (M-1)N ; 之后每隔 DN 个时钟周期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 +DN ;
。 。 。
读地址 P-1 的首地址的临时信号变化规律 : 第 1 个地址赋值为 [M-1-(Q-2)D)]N ; 之后每隔 DN 个时钟周期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 +DN ;
中间省略的信号变化规律依此类推 ;
②产生 P 个读地址的首地址信号 :
读地址 0 的首地址变化规律 : 第 1 个地址赋值为 (D-1)N ; 之后每隔 N 个时钟周期 进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 +N ;
读地址 1 的首地址变化规律 : 连续 D 个地址为 1 组 ; 连续 D 个地址的第 1 个地址 赋值为读地址 1 的首地址的临时地址 ; 之后的连续 D-1 个地址每隔 N 个时钟周期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 -N ;
读地址 2 的首地址变化规律 : 第 1 个地址赋值为 (2D-1)N ; 之后每隔 N 个时钟周期 进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 +N ;
读地址 3 的首地址变化规律 : 连续 D 个地址为 1 组 ; 连续 D 个地址的第 1 个地址 赋值为读地址 3 的首地址的临时地址 ; 之后的连续 D-1 个地址每隔 N 个时钟周期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 -N。
。 。 。
读地址 P-2 的首地址变化规律 : 第 1 个地址赋值为 (QD-1)N ; 之后每隔 N 个时钟周 期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 +N ;
读地址 P-1 的首地址变化规律 : 连续 D 个地址为 1 组 ; 连续 D 个地址的第 1 个地 址赋值为读地址 P-1 的首地址的临时地址 ; 之后的连续 D-1 个地址每隔 N 个时钟周期进行 1 次 0 ~ MN-1 的模 MN 计数, 计数值每次 -N ;
中间省略的信号变化规律依此类推 ;
③产生 P 个读地址信号 :
读地址 0 的变化规律 : 连续 N 个地址为 1 组 ; 首地址即连续 N 个地址中的第 1 个赋 值为读地址 0 的首地址, 之后的连续 N-1 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ;
读地址 1 的变化规律 : 连续 N 个地址为 1 组 ; 首地址即连续 N 个地址中的第 1 个赋 值为读地址 1 的首地址, 之后的连续 N-1 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ;
读地址 2 的变化规律 : 连续 N 个地址为 1 组 ; 首地址即连续 N 个地址中的第 1 个赋 值为读地址 2 的首地址, 之后的连续 N-1 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ; 读地址 3 的变化规律 : 连续 N 个地址为 1 组 ; 首地址即连续 N 个地址中的第 1 个赋 值为读地址 3 的首地址, 之后的连续 N-1 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ;
。 。 。
读地址 P-2 的变化规律 : 连续 N 个地址为 1 组 ; 首地址即连续 N 个地址中的第 1 个 赋值为读地址 P-2 的首地址, 之后的连续 N-1 个地址依次每隔 1 个时钟周期进行 1 次加法 运算, 每次 +1 ;
读地址 P-1 的变化规律 : 连续 N 个地址为 1 组 ; 首地址即连续 N 个地址中的第 1 个 赋值为读地址 P-1 的首地址, 之后的连续 N-1 个地址依次每隔 1 个时钟周期进行 1 次加法 运算, 每次 +1。
中间省略的信号变化规律依此类推 ;
④进行读操作 :
根据读地址信号从 RAM 存储单元中相应的位置读出数据, 每隔 1 个时钟周期依次 读出 1 个数据。
本发明的双口 RAM 存储模块对无效数据进行过滤, 将无效数据置为 0 后输出至滤 波运算模块进行运算 ; N 个通道 1 次滤波运算的无效数据为 [M/D]DN-MN = ([M/D]D-M)N 个。
本发明的有益效果 :
本发明有效地避免了读写冲突造成的误操作、 容易在 FPGA 内实现、 节省了 FPGA 内 数量很有限的高速硬核乘法器、 方便后续滤波运算的实现、 在 FPGA 内实现的数字电路具有 很高的时序性能 ; 同时采用本设计的读写策略方案使滤波方法在 FPGA 内的实现变得十分 容易, 数据流都是直接送给下级运算单元, 降低了方法实现的复杂度, 这点对在 FPGA 内实 现方法是至关重要的。
本发明消耗 FPGA 内的乘法器数量少, FPGA 内消耗的乘法器数量越少就可以在同
一片 FPGA 里实现更多其他的算法 ; 最高工作频率越高, 最高工作频率和设计的时钟频率之 间的频率差越大, 实现的数字电路时序裕量就越大, 时序性能就越好, 设计的稳定性和可靠 性越高。
下表列出了目前的几种方案在 FPGA 中实现 FIR 数字抽取滤波器时实现的情况, 在最关键的消耗乘法器数量和最高工作频率 2 项指标上, 本发明的滤波器都是最好的, 比 Xilinx 公司的 IP 核设计还要优秀。
附图说明
图 1 是本发明的原理框图。具体实施方式
下面结合附图和实施例对本发明作进一步的说明。
如图 1 所示, 一种基于 FPGA 的高性能多路 FIR 数字抽取滤波器及其读写方法, 其 中:
●基于 RAM 的读写策略
基于避免因为读写冲突造成的误操作、 实现起来简单和方便后续运算的原则, 采 用如下的读写策略 :
(1) 分配 RAM 的大小 :
本实例中的情况 :
本实例有 6 个通道, 要使用 FPGA 内的 2 个乘法器。每一个乘法器需要对应使用 FPGA 内的 2 个 17*102bit 的双口 RAM 存储单元, 地址分配见下表。 2 个乘法器一共使用 FPGA 内的 4 个 17*102bit 的双口 RAM 存储单元, 均由 FPGA 内的 BLOCK RAM 实现。
本实例中 RAM 的地址分配
表面上看, 这样的地址分配方式对应在每个通道上都是不连续的, 很不方便 ; 实际 上, 采用这种方式实现起来具有很多优点, 详见后续的分析。(2) 写策略 :
本实例中的情况 :
①产生写使能信号 : 输入待滤波数据有效时均为高电平 ; 输入待滤波数据无效时 均为低电平。
②产生写地址信号 : 写使能信号高电平期间, 每隔 1 个时钟周期依次进行 0 ~ 101 的模 102 计数, 计数值每次 +1 ; 写使能信号低电平期间, 写地址保持不变。
③进行写操作 : 写使能信号高电平期间, 输入的串行待滤波数据根据对应的写地 址信号写入 RAM 存储单元中相应的位置, 每隔 1 个时钟周期依次写入 1 个数据 ; 具体的顺序 为: 6 个通道对应的第 1 个数据依次写入, 接着 6 个通道对应的第 2 个数据依次写入, 依此 类推, 直到 6 个通道对应的 17 个数据全部写入 ; 写使能信号低电平期间, 没有数据写入。
写策略的时序表如下 :
(3) 读策略 : 本实例中的情况 :①产生 2 个读地址的首地址的临时信号 :
读地址 1 的首地址的临时信号变化规律 : 第 1 个地址赋值为 24 ; 之后每隔 30 个时 钟周期进行 1 次 0 ~ 101 的模 102 计数, 计数值每次 +30 ;
读地址 3 的首地址的临时信号变化规律 : 第 1 个地址赋值为 96 ; 之后每隔 30 个时 钟周期进行 1 次 0 ~ 101 的模 102 计数, 计数值每次 +30 ;
相应的时序表如下 :
②产生 4 个读地址的首地址信号 :
读地址 0 的首地址变化规律 : 第 1 个地址赋值为 24 ; 之后每隔 6 个时钟周期进行 1 次 0 ~ 101 的模 102 计数, 计数值每次 +6 ;
读地址 1 的首地址变化规律 : 连续 5 个地址为 1 组 ; 连续 5 个地址中的第 1 个地 址赋值为读地址 1 的首地址的临时信号 ; 之后的连续 4 个地址每隔 6 个时钟周期进行 1 次 0 ~ 101 的模 102 计数, 计数值每次 -6 ;
读地址 2 的首地址变化规律 : 第 1 个地址赋值为 54 ; 之后每隔 6 个时钟周期进行 1 次 0 ~ 101 的模 102 计数, 计数值每次 +6 ;
读地址 3 的首地址变化规律 : 连续 5 个地址为 1 组 ; 连续 5 个地址中的第 1 个地 址赋值为读地址 3 的首地址的临时信号 ; 之后的连续 4 个地址每隔 6 个时钟周期进行 1 次 0 ~ 101 的模 102 计数, 计数值每次 -6。
相应的时序表如下 :
③产生 4 个读地址信号 :
读地址 0 的变化规律 : 连续 5 个地址为 1 组 ; 连续 5 个地址中的第 1 个赋值为读地 址 0 的首地址, 之后的连续 4 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ;
读地址 1 的变化规律 : 连续 5 个地址为 1 组 ; 连续 5 个地址中的第 1 个赋值为读地 址 1 的首地址, 之后的连续 4 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ;
读地址 2 的变化规律 : 连续 5 个地址为 1 组 ; 连续 5 个地址中的第 1 个赋值为读地 址 2 的首地址, 之后的连续 4 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1 ;
读地址 3 的变化规律 : 连续 5 个地址为 1 组 ; 连续 5 个地址中的第 1 个赋值为读地 址 3 的首地址, 之后的连续 4 个地址依次每隔 1 个时钟周期进行 1 次加法运算, 每次 +1。
相应的时序表如下 :
(4) 对无效数据进行过滤 :
本实例中的情况 :
由于 1 个通道的 1 次滤波运算需要 17 个数据, 而 4 组读地址实际上读出了 20 个 数据, 因此有 3 个数据是无效数据, 需要对其进行过滤, 使对应的数据置为 0, 才能直接参加 运算 ; 依此类推, 6 个通道的 1 次滤波运算需要 102 个数据, 而 4 组读地址实际上读出了 120 个数据, 因此有 18 个数据是无效数据, 需要对其进行过滤, 使对应的数据置为 0, 才能直接 参加运算。
读数据 0 和读数据 1 没有无效数据, 原数据全部保留, 相应的时序表如下 :
读数据 2 和读数据 3 的有效数据全部保留, 无效数据被过滤为 0, 相应的时序表如下:
输出数据大部分是有效数据, 还有一部分数据为 0, 相应的时序表如下 :本实例中的情况 :
①有效地避免了读写冲突造成的误操作
根据 5 倍抽取滤波器的工作原理, 每当有 5 个输入数据进入滤波器后, 就产生 1 个 滤波器的输出。因此, 每 1 次的滤波运算只能在 5 个输入数据长度的时间内进行, 这就要求 读写操作是在同时进行的, 既要保证读出的数据符合滤波运算的结构, 又要尽可能地避免 读写冲突造成的误操作。读写冲突一般有 2 种情况 : 第 1 种是读操作进行早了, 想要读的数
据还没有被写入 ; 第 2 种是读操作进行晚了, 想要读的数据已经被覆盖了。 本设计的读写策 略高效、 合理地满足了这些要求 : 当写数据有效时, 一直进行写操作 ; 当 6 个通道都写入连 续 5 个数据后, 开始进行读操作。其中读地址 0 超前于对应的写地址部分 1 个时钟周期, 这 样能够保证读地址和写地址之间一直保持固定的时序关系, 可以有效地避免读写冲突。
②容易在 FPGA 内实现
从前面介绍的读写地址的产生过程可以看出 : 写地址信号本质上是一个计数器 ; 读地址的首地址的临时信号本质上是一个加法器 ; 读地址的首地址信号本质上是一个加、 减法器 ; 读地址信号本质上是一个加法器。所有这些信号的实现都比较简单, 这对在 FPGA 内的实现是至关重要的。
FPGA 中具有大量的 Slice 资源, 可以很方便地配置成各种触发器和多路开关, 实 现多位高速计数器 ; 内嵌的 BLOCK RAM 可以方便地配置成双端口 RAM 存储单元 ; 此外还具有 专门的快速加法进位链, 可以轻松实现高速加法器 ; 同时内嵌了高速硬核乘法器, 完全可以 实现高带宽乘法器。因此, 以本设计的读写策略为控制核心的 FIR 数字抽取滤波器在 FPGA 中是容易实现的。 实际的项目中, 基于本设计的滤波器最高可以工作在 391MHz, 对于工作在 368.64MHz 的设计要求能够很轻松地达到。 ③节省了 FPGA 内数量很有限的高速硬核乘法器
对于目前的主流 FPGA 来说, 为了实现多路高带宽信号处理, 往往要进行多级级联 滤波, 为了保证滤波效果, 各级滤波器的阶数都比较高, 消耗的硬核乘法器数量比较大 ; 加 上内嵌的高速硬核乘法器具有很高的性能, 其数量又是很有限的, 所以 FPGA 中内嵌的硬核 乘法器资源是很宝贵的, 往往成为设计中的瓶颈, 使用起来要充分利用, 尽可能地复用, 尽 量提高使用效率。按照本设计的读写策略实现的滤波器, 在节省高速硬核乘法器方面具有 巨大的优势, 可以使整个设计具有更强的竞争力。
下表列出了目前的几种方案在 FPGA 中实现 FIR 数字抽取滤波器时消耗硬核乘法 器的情况 :
可见, 由于采用了时分复用, 方案 2 消耗的硬核乘法器数量仅仅为方案 1 的 1/6,代 价 是 数 据 速 率 的 提 高, 对 于 目 前 的 主 流 FPGA, 以 Xilinx 公 司 的 V5LX50T 为 例, 内嵌 的 DSP48E 硬核乘法器理论上最高可以工作在 450MHz, 目前我们的项目最高可以工作在 391MHz, 因此工作在 368.64MHz 可以轻松实现。
根据滤波器系数特征对滤波方法进行优化, 通过本设计的读写策略进行控制, 可 以有效地提高硬核乘法器的使用效率, 方案 4 消耗的硬核乘法器数量仅仅是方案 3 的 1/2, 方案 2 的 1/5, 方案 1 的 1/27, 比方案 3 的 Xilinx 公司的 IP 核设计还要节省乘法器。随着 滤波器阶数的增加 ( 几十阶 ) 和抽取倍数的提高, 节省的硬核乘法器数量还将大大增加, 具 有很高的经济价值。
④方便后续滤波运算的实现
1) 由于读地址 0 为了避免读写冲突而超前对应的写地址部分 1 个时钟周期, 读地 址 1-3 要相应地配合读地址 0。这就要求读地址 1-3 读出的数据要和读地址 0 读出的数据 在滤波器系数对称的位置相对应。
2) 因为 1 个通道的 1 次滤波运算需要 17 个数据, 5 倍抽取滤波器是每输入 5 个输 入数据后产生 1 个输出数据, 前 3 次滤波运算的输入数据不足 17 个, 这部分对应的操作数 需要为 0, 在本设计中, 这部分地址读出的数据为 0, 即: 当对应的输入数据还没写入时, 读 出的数据是 0, 同样可以直接参加加法运算。 3)1 个通道的 1 次滤波运算需要 17 个数据, 而 4 组读地址读出的数据有 20 个, 因 此有 3 个数据是无效数据, 需要对其进行过滤, 使对应的数据置为 0, 才能直接参加运算。
按照以上思想设计的读策略读出的数据和滤波过程的数据流完全一致, 没写入的 数据和无效的数据, 对应的读数据是 0, 可以直接参加运算, 十分方便后续运算。 基于这种方 案, 设计出了下面所示的读地址顺序以及对应的读数据顺序 :
进行 1 个通道的 1 次滤波运算按照滤波顺序排列的操作数
第 1 次滤波运算按照操作数顺序对应的读地址
第 1 次滤波运算按照读地址顺序对应的读数据
对无效读数据进行过滤后第 1 次滤波运算按照顺序对应的操作数
第 2 次滤波运算按照操作数顺序对应的读地址
第 2 次滤波运算按照读地址顺序对应的读数据
对无效读数据进行过滤后第 2 次滤波运算按照顺序对应的操作数
第 3 次滤波运算按照操作数顺序对应的读地址
第 3 次滤波运算按照读地址顺序对应的读数据
对无效读数据进行过滤后第 3 次滤波运算按照顺序对应的操作数
第 4 次滤波运算按照操作数顺序对应的读地址
第 4 次滤波运算按照读地址顺序对应的读数据
对无效读数据进行过滤后第 4 次滤波运算按照顺序对应的操作数
第 4 次以后的滤波运算和第 4 次的滤波运算类似。
由此可见, 采用本设计的读写策略方案使滤波方法的实现变得十分容易, 数据流 都是直接送给下级运算单元, 降低了方法实现的复杂度, 这点对在 FPGA 内实现方法是至关 重要的。
⑤在 FPGA 内实现的数字电路具有很高的时序性能
FPGA 实现的数字电路的最高工作频率越高, 最高工作频率和设计要求的时钟频率 之间的频率差越大, 电路的时序裕量就越大, 设计的稳定性和可靠性就越高。
下表列出了目前的几种方案在 FPGA 中实现 FIR 数字抽取滤波器时工作频率的情
况, 方案 1 虽然时序裕量很大, 但是由于消耗的乘法器过多, 没有可比性 ; 比较方案 2-4, 在 最高工作频率上, 本发明的滤波器是最高的, 电路的时序裕量最大, 比方案 3 的 Xilinx 公司 的 IP 核设计的时序性能还要更好。
本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。