一种 FFT 倒序操作存储器数据调度方法及电路 技术领域 本发明属于超大规模集成电路 (VLSI, Very Large Scale Integrated Circuit) 领域, 具体涉及到一种快速傅立叶变换 (FFT, Fast Fourier Transform) 倒序操作的存储器 数据调度方法和电路结构。
背景技术 随着雷达、 卫星和消费电子等应用需求的不断增长, FFT 处理器设计的点数和精度 需求不断增加, 流水线结构具有灵活可配置的特点, 并且作为提升计算速度的重要手段, 因 而被广泛采用。在大点数的浮点数据格式的 FFT 计算中, 倒序模块的面积和性能对于整个 FFT 处理器的性能具有至关重要的影响, 因而有必要研究出能够高效完成倒序操作并具有 较低面积开销的倒序模块存储器调度方法和结构。
FFT 的 VLSI 结构分为存储器迭代结构和单路径 / 多路径流水线结构两类, 存储器 迭代结构在处理单元较少的设计中, 可以有效减少面积开销, 但同时计算速度非常慢, 严重 影响系统处理的实时性要求 ; 而采用多路并行处理的方式, 提高速度和增加面积开销同时, 对于外部带宽的要求非常大。单路径延迟反馈 (SDF, Single-path Delay Feedback) 或多 路径延迟切换 (MDC, Multiple-path Delay Commutator) 等流水线结构具有较高的处理单 路或多路数据的效率, 具有较高的计算单元利用率和速度, 并具有较少的存储器面积开销。
无论是单路径或多路径流水线结构, 并基于此采用高基数或混合基算法, 其 数 据 输 入 和 输 出 均 具 有 与 Cooley-Tukey 算 法 (Radix-2DIT, Decimation-In-Time) 或 Sande-Tuey 算法 (Radix-2DIF, Decimation-In-Frequency) 相同的自然序或倒位序输入和 输出特点。
而对于 FFT 处理器的主控器件数字信号处理器 (DSP, Digital Signal Processor) 或其它微控制器 (MCU, Micro Control Unit) 而言, 对数据的调度往往是通过直接存储 器访问 (DMA, Direct Memory Access) 控制器以连续地址的方式完成写入或读取, 并且 外部的 SDR/DDR/DDRIISDRAM(Single Data Rate/Double Data Rate/Double Data Rate IISynchronous Dynamic Random Access Memory) 等动态存储器件也要求数据以连续地址 方式读写, 才能获得较高的读写效率, 因而设计高效的 FFT 倒序电路对于整体系统处理性 能的提高非常重要。
自然序输入、 倒位序输出的 FFT 计算核心得到一组序列, 长度为 N = 2m, 每个数据 的输出的索引序号可以表示为 m 位的二进制 :
index = (bob1… bm-1)B (i = 0, 1,…, m-1) (1)
其中 bi 为 1 或 0, bm-1 为最高位, b0 为最低位。倒序操作就是将该 index 索引号的 数据重新调整到 no_index 索引号的位置, 之后可以按照该顺序依次输出, 得到 FFT 计算的 顺序结果, 其中 no_index 满足以下关系 :
no_index = (bm-1bm-2… b0)B (i = 0, 1,…, m-1) (2)
倒位序输出的相邻两个连续数据成一组, X(index2k) 和 X(index2k+1) 表示在一组 N
= 2m 个数据中第 2k 和 2k+1 个数据, 其中 k = 0 ~ 2m-1-1, 那么 m-1
index2k+1-index2k = 2 (3)
而对于相邻的 X(index2k) 和 X(index2k+1) 的索引号分别有如下表达式 :
index2k = (0b1… bm-1)B (4)
index2k+1 = (1b1… bm-1)B (5)
因而在 X(index2k) 和 X(index2k+1) 两组序列中其索引号具有 m-1bits 倒位序的特 点。对于自然序结果转换为倒位序的结果具有上述类似的特点, 本发明倒序操作存储器数 据调度方法和结构正是基于这样的倒位序特点。
非连续数据倒序操作很简单, 仅需要一块 N 深度的单口存储器。但实际应用中几 乎均为连续处理的情况, 以满足数字图像等领域的二维、 甚至多维处理和相关计算, 并且对 于实时性要求很高。对于 VLSI 设计中的连续倒序操作, 传统设计方法包括两种 : 使用两块 N 深度的单口存储器和使用一块 N 深度的双口存储器。
Wen-Zen Shen 于 1994 年在 “On The Reduction of Reorder Buffer Size for Discrete Fourier Transform Processor Design” (IEEE International Symposium on Circuits and Systems, 1994, 171-174) 一文中采用一块双口存储器实现基于 504 = 7×8×9 点素因子算法 (PFA, Prime Factor Algorithm) 的数据重整序, 但其算法和数据 调度非常复杂, 并且不易于扩展应用于各种可配置 FFT 点数的数据重整序中。Fredrik Kristensen 于 2004 年 在 “Reduced Transceiver-Delay for OFDM Systems” (IEEE Vehicular Technology Conference, 2004, 1242-1245) 一 文 中 采 用 了 两 块 N 深 度 的 单 口存储器来实现 FFT 的数据重新整序, 其中一块存储器用于数据缓存, 另一块存储器用 于读出, 之后两块存储器做乒乓切换, 从而避免了数据读写访问的冲突。Tuhin Subhra Chakraborty 于 2008 年 在 “On Output Reorder Buffer Design of Bit Reversed Pipelined Continuous Data FFT Architecture” (IEEE Asia Pacific Conference on Circuits and Systems, 2008, 1132-1135) 一文中采用一块 N 深度的双口存储器, 并寻求最 快的数据输出时间, 事实上这增加了 FIFO 存储器的开销并为可配置模式带来困难, 并且数 据提前输出的时间并不明显, 不妨将此延迟定为 N 个时钟, 这样更便于实现相关读写控制 和不同点数模式配置逻辑, 也可避免大量的 FIFO 资源开销。
无论是使用两块 N 深度的单口存储器, 还是使用一块 N 深度的双口存储器的倒序 操作, 在大点数和高精度 FFT 计算中面积都是巨大的, 因此如何在保证 N 个时钟延迟和数据 吞吐率为 1 时钟 / 数据条件下, 有效降低倒序操作的面积开销和实现存储器数据无冲突读 写成为 VLSI 结构设计的重点。 发明内容 本发明针对 FFT 处理器计算结果顺序与 DMA 和 SDR/DDR/DDRIISDRAM 等器件数据 读写特点的矛盾, 以及现有方法存储器面积开销过大和不同点数配置不够灵活的特点, 提 出了一种倒序操作存储器数据调度电路, 该电路基于两块 N/2 深度的单口存储器, 充分发 挥单口存储器的面积和功耗优势, 具有 1 时钟 / 数据的吞吐率和 N 个时钟的数据延迟特性, 显著降低了芯片面积和成本。
一种 FFT 倒序操作存储器数据调度方法, 涉及第一和第二单端口存储器, 具体为 :
定义待写入数据序列的数据个数为 N = 2m, 第一单端口存储器的读地址和写地址 分别为 raddr1 和 waddr1, 第二单端口存储器的读地址和写地址分别为 raddr2 和 waddr2, inv_M() 为 m-1 位比特地址信号倒置操作, cnt1() 和 cnt2() 为两个 m bits 的计数器, 记当 前数据序号为 c_num, 第一组待写入数据序列直接进入初始只写模式,
初始只写模式 : 将第一组待写入数据序列分两路并行写入第一和第二单端口存储 器, 两单端口存储器的写地址 waddr1 = waddr2 = inv_M(cnt1[m-1:1]), 写至当前点数长度 模式下存储器地址最高限值时, 若还有待写入的数据序列, 则转至第一种交替读写模式, 否 则, 转至清空只读模式 ;
第一种交替读写模式 : 读取第一和第二单端口存储器的数据, 第一和第二单端口 存储器的读地址分别为
k = 0, 1, 2,…, m-1
将待写入数据序列分两路并行写入第一和第二单端口存储器, 第一和第二单端口 存储器的写地址分别为 waddr1 = raddr1_pre, waddr2 = raddr2_pre, raddr1_pre 为第一 单端口存储器前一时钟的读地址, raddr2_pre 为第二单端口存储器前一时钟的读地址 ; 写 至当前点数长度模式下存储器地址最高限值时, 若还有待写入数据序列, 则转移第二种交 替读写模式, 否则, 转至清空只读模式 ;
第二种交替读写模式 : 读取第一和第二单端口存储器的数据, 第一和第二单端口 存储器的读地址 raddr1 = raddr2 = inv_M(cnt1[M:1]), 将待写入数据序列分两路并行 写入第一和第二单端口存储器, 第一和第二单端口存储器的写地址 waddr1 = waddr2 = raddr1_pre = raddr2_pre ; 写至当前点数长度模式下存储器地址最高限值时, 若还有待写 入数据序列, 则转移第一种交替读写模式, 否则, 转至清空只读模式 ;
清空只读模式 : 若是从初始只写模式转移到清空只读模式, 则按照第一种交替读 写模式产生读地址进行只读操作 ; 若是从第一种交替读写模式转移到清空只读模式, 则按 照第二种交替读写模式产生读地址进行只读操作 ; 若是从第二种交替读写模式转移到清空 只读模式, 则按照第一种交替读写模式产生读地址进行只读操作。
一种 FFT 倒序操作存储器数据调度电路, 包括
中心控制器 1, 接收外部的数据有效指示信号、 点数配置模式和序列组数信号, 将 序列组数信号作为剩余序列组数指示寄存器的初值, 接收来自读写地址产生器 2 的读和写 地址, 其中包括单端口存储器 a4 的读地址、 单端口存储器 a4 的写地址、 单端口存储器 b5 的 读地址、 单端口存储器 b5 的写地址, 接收来自可配置读写状态控制器 3 的读使能信号 ; 在连 续接收到数据有效指示信号两次后向输入接口单元 6 发送串并转换控制信号以及向读写 地址产生器 2 发送启动信号 ; 若单端口存储器 a4 的写地址与地址最高限值相等, 则向读写 地址产生器 2 和输入接口单元 6 发送写满最高地址指示信号, 并将剩余序列组数指示寄存
器减 1 ; 若单端口存储器 a4 的写地址与单端口存储器 b5 的写地址相同且均与当前点数长 度模式下地址最高限值一半相等, 或单端口存储器 a5 的写地址大于单端口存储器 a4 的写 地址且单端口存储器 a5 的写地址与当前点数长度模式下地址最高限值相等, 则向读写地 址产生器 2 和输入接口单元 6 发送写满最高地址一半指示信号, 所述当前点数长度模式下 地址最高限值为当前点数配置模式对应的点数长度减 1, 所述当前点数长度模式下地址最 高限值一半为当前点数配置模式对应的点数长度的一半减 1 ; 若单端口存储器 a4 的读地址 与当前点数长度模式下地址最高限值相等, 则向读写地址产生器 2 和输出缓冲单元 7 发送 读空最高地址指示信号 ; 若单端口存储器 a4 的读地址与单端口存储器 b5 的读地址相同且 均与当前点数长度模式下地址最高限值一半相等, 或单端口存储器 a5 的读地址大于单端 口存储器 a4 的读地址且单端口存储器 a5 的读地址与当前点数长度模式下地址最高限值相 等, 则向读写地址产生器 2 和输出缓冲单元 7 发送读空最高地址一半指示信号 ; 在数据有效 指示信号的触发下产生数据准备好信号并传送至可配置读写状态控制器 3 ; 若接收到读使 能信号, 则向输出缓冲单元 7 发送并串转换控制信号 ; 还将当前剩余序列组数指示寄存器 值发送给读写地址产生器 2 ;
读写地址产生器 2, 接收来自中心控制器 1 的启动信号、 剩余序列组数指示寄存 器值、 写满最高地址指示信号、 写满最高地址一半指示信号、 读空最高地址指示信号、 读空 最高地址一半指示信号, 来自可配置读写状态控制器 3 的读使能或写使能信号, 接收外部 的点数配置模式, 以及外部的数据有效指示信号 ; 读写地址产生器 2 将读写地址产生模式 信息发送至可配置读写状态控制器 3 ; 在读使能或写使能信号触发下选择生成的读或写地 址, 并分别传送给单端口存储器 a4 和单端口存储器 b5 ; 读写地址产生器 2 根据剩余序列组 数指示寄存器值, 写满最高地址指示信号或写满最高地址一半指示信号, 读空最高地址指 示信号或读空最高地址一半指示信号来控制不同的读写地址产生模式切换生成两存储器 的读、 写地址, 读写地址产生器 2 将生成的单端口存储器 a4 的读地址、 单端口存储器 a4 的 写地址、 单端口存储器 b5 的读地址、 单端口存储器 b5 的写地址信息发送至中心控制器 1 ; 读写地址产生器 2 在工作中根据外部的数据有效指示信号, 在数据暂停时保持读写地址产 生模式信息不变 ;
可配置读写状态控制器 3, 接受来自中心控制器 1 的数据准备好信号和读写地址 产生器 2 的读写地址产生模式 ; 根据数据准备好信号和读写地址产生模式产生对于单端口 存储器 a4 和单端口存储器 b5 的当前读使能或写使能信号 ; 可配置读写状态控制器 3 将读 使能信号发送至中心控制器 1, 将读使能或写使能信号发送至读写地址产生器 2 ;
单端口存储器 a4 和单端口存储器 b5, 作为数据的暂存单元, 接受来自读写地址产 生器 2 的读或写地址信息, 接受来自可配置读写状态控制器 3 的读使能或写使能信号, 在写 使能的控制下接受来自于输入接口单元 6 的数据, 在读使能的驱动下读出数据发送至输出 缓冲单元 7 ;
输入接口单元 6, 接受来自外部的输入数据和来自中心控制器 1 的串并转换控制 信号、 写满最高地址指示信号和写满最高地址一半指示信号, 收到串并转换控制信号后将 先后连续的两个有效输入数据转换为上下两路并行数据, 首先接收到的数据作为上路数 据, 其次接收到的数据作为下路数据 ; 若收到写满最高地址指示信号, 则将上下两路并行数 据分别写入至单端口存储器 a4 和单端口存储器 b5 ; 若收到写满最高地址一半指示信号,则将上下两路并行数据分别写入至单端口存储器 b5 和单端口存储器 a4 ; 在输入接口单元 6 首次向存储器写入数据时, 默认将上下两路并行数据分别写入至单端口存储器 a4 和单端 口存储器 b5 ;
输出缓冲单元 7 接受来自单端口存储器 a4 和单端口存储器 b5 的两路并行数据, 来自中心控制器 1 的并串转换控制信号、 读空最高地址指示信号、 读空最高地址一半指示 信号 ; 若收到读空最高地址指示信号, 则分别从单端口存储器 a4 和单端口存储器 b5 同时读 出上下两路并行数据 ; 若收到读空最高地址一半指示信号, 则分别从单端口存储器 b5 和单 端口存储器 a4 同时读出上下两路并行数据 ; 对上下两路并行数据作并串转换, 实现先输出 上路数据再输出下路数据 ; 首次接收到并串转换控制信号后, 默认分别从单端口存储器 a4 和单端口存储器 b5 同时读出上下两路并行数据。
输入接口单元 6 和输出缓冲单元 7 包括相接的两级缓冲寄存器和数据切换开关。
读写地址产生器 2 包括计数器 a21、 计数器 b22、 位倒置和移位单元 23、 延迟单 元 24、 地址交换选择逻辑 25、 读写地址产生模式状态机 26、 多路选址器 a27 和多路选址器 b28 ;
计数器 a21 和计数器 b22 为具有最大的 m bits 位宽, 能够处理最大可配置 2m 长 度的数据序列 ; 计数器 a21 和计数器 b22 若接收到来自中心控制器 1 的启动信号, 并且接受 到来自可配置读写状态控制器 3 的读使能或写使能信号, 则计数器 a21 和计数器 b22 开始 计数产生地址, 否则按照数据暂停情况处理, 保持原有值不变 ; 计数器 a21 将产生的 m bits 位宽的地址信号发送至位倒置和移位单元 23 ; 计数器 b22 将产生的 m bits 位宽的地址信 号发送至延迟单元 24, 并作为地址 A21 发送至交换判决逻辑 25 ; 位倒置和移位单元 23 接受来自外部的可配置点数模式信息和来自计数器 a21 的 m bits 的地址 ; 位倒置和移位单元 23 首先将 m bits 的地址按比特颠倒位置, 得到新的 m bits 地址 ; 位倒置和移位单元 23 根据可配置点数模式信息确定新的 m bits 地址的移位次 数从而得到输出地址 A1, 将其发送至地址交换选择逻辑 25 ;
延迟单元 24 接受来自计数器 b22 的 m bits 地址, 并将该地址用寄存器延迟一个 时钟发送得到地址 A22, 并将地址 A22 发送至交换判决逻辑 25 ;
地址交换选择逻辑 25 接受来自位倒置和移位单元 23 的地址 A1, 来自计数器 b22 的地址 A21, 来自延迟单元 24 的地址 A22, 来自读写地址产生模式状态机 26 的读写模式状 态信息, 以及来自中心控制器 1 的写满最高地址一半指示信号、 读空最高地址一半指示信 号; 若读写模式状态信息表示正处于初始只写模式, 则选择地址 A1 作为单端口存储器 a4 的 写地址 waddr1 和单端口存储器 b5 的写地址 waddr2 ; 若读写模式状态信息表示正处于第一 种交替读写模式, 则首先选择地址 A21 和 A22 分别作为单端口存储器 a4 的读地址 raddr1 和单端口存储器 b5 的读地址 raddr2, 并且地址 A21 和 A22 延迟一个时钟分别作为单端口存 储器 a4 的写地址 waddr1 和单端口存储器 b5 的读地址 waddr2 ; 若接受到写满最高地址一 半指示信号, 则选择地址 A22 和 A21 分别作为单端口存储器 a4 的读地址 raddr1 和单端口 存储器 b5 的读地址 raddr2, 并且地址 A22 和 A21 延迟一个时钟分别作为单端口存储器 a4 的写地址 waddr1 和单端口存储器 b5 的读地址 waddr2, 直至读写模式状态信息变为第二种 交替读写模式或清空只读模式 ; 若读写模式状态信息表示正处于第二种交替读写模式, 则 选择地址 A1 作为单端口存储器 a4 的读地址 raddr1 和单端口存储器 b5 的读地址 raddr2,
并将地址 A1 延迟一个时钟作为单端口存储器 a4 的写地址 waddr1 和单端口存储器 b5 的写 地址 waddr2 ; 若读写模式状态信息表示正处于清空只读模式, 若该清空只读模式是由初始 只读模式转来, 则按照第一种读写交替模式产生读地址, 即将地址 A1 作为单端口存储器 a4 读地址信号 raddr1 和单端口存储器 b5 的读地址信号 raddr2, 若该清空只读模式是由第一 种读写交替模式转来, 则按照第二种读写交替模式产生读地址, 即首先将地址 A21 和 A22 分 别作为单端口存储器 a4 的读地址 raddr1 和单端口存储器 b5 的读地址 raddr2, 当接收到 读空最高地址一半指示信号, 则转为将地址 A22 和 A21 分别作为单端口存储器 a4 的读地址 raddr1 和单端口存储器 b5 的读地址 raddr2, 若该清空只读模式是由第二种读写交替模式 转来, 则按照第一种读写交替模式产生读地址, 即将地址 A1 作为单端口存储器 a4 读地址信 号 raddr1 和单端口存储器 b5 的读地址信号 raddr2 ; 地址交换选择逻辑 25 将产生的单端 口存储器 a4 的读地址 raddr1 和写地址 waddr1 发送至多路选择器 a27, 将产生的单端口存 储器 b5 的读地址 raddr2 和写地址 waddr2 发送至多路选择器 b28 ;
读写地址产生模式状态机 26 接受来自中心控制器 1 的启动信号、 剩余组数指示信 号、 写满最高地址指示信号、 读空最高地址指示信号和外部的数据有效指示信号, 以及外部 数据有效指示信号 ; 读写地址产生模式状态机 26 完成不同的读写地址产生模式的切换, 并 将当前读写地址产生模式信息发送至地址交换选择逻辑 25 和可配置读写状态控制器 3 ; 多路选择器 a27 接受来自地址交换选择逻辑 25 发送的单端口存储器 a4 的读地址 raddr1 和写地址 waddr1, 多路选择器 b28 接受来自地址交换选择逻辑 25 发送的单端口存 储器 b5 的读地址 raddr2 和写地址 waddr2, 多路选择器 a27 和多路选择器 b28 均接受来自 可配置读写状态器 3 的读使能或写使能信号 ; 在读使能信号下, 同时选择 raddr1 和 raddr2 分别作为 addr1 和 addr2 发送至单端口存储器 a4 和单端口存储器 b5 的地址线端口, 在写 使能信号下, 同时选择 waddr1 和 waddr2 分别作为 addr1 和 addr2 发送至单端口存储器 a4 和单端口存储器 b5 的地址线端口。
与现有的调度方法和结构相比, 本发明有效降低了片上存储器容量, 减少了硬件 资源的开销, 保证了较高的处理速度, 最大程度避免了不同点数对于存储器容量和控制逻 辑的依赖, 对于不同点数具有很高的可配置灵活性, 使得本发明倒序数据调度方法和电路 在存储器容量和寻址控制可配置逻辑方面有较大的优势。具体而言, 本发明具有以下技术 效果 :
(1) 通过采用两块 N/2 深度单口存储器减少了片上存储器面积随着需要的存储器 深度和位宽的不断增加, 一块 N 深度双口存储器或两块 N 深度单口存储器的面积都具有相 当大的 VLSI 设计成本, 而两块 N/2 深度单口存储器具有更低的存储器面积, 且单口存储器 在面积和功耗开销方面较双口存储器具有显著优势。根据式 (3), (4), (5) 所示, 数据序号 的排列规律连续性地整理为自然序的序号较为复杂, 引入两块存储器具有较好的数据切换 和分别产生存储器读出和写入地址的能力, 便于实现倒位序连续数据的自然序输出。
(2) 采用固定规则 N 个时钟数据延迟, 有效避免效果不明显但具有较大 FIFO 存储 器开销的最短时间输出检测逻辑
Tuhin Subhra Chakraborty 采用基于 FIFO 存储器的检测逻辑, 实现最短无冲突连 续读出的时间, 虽然稍微减短了数据流输出时间, 但对于不同点数模式的处理缺乏配置灵 活性, 在输出数据延迟时间上不规则且 FIFO 控制检测电路的可配置性差。对于 8192 点的
浮点处理器设计而言, 将增加约 8k*13bits 大小的额外 FIFO 存储器开销, 大大增加了设计 复杂度和成本。本发明对于不同可配置点采用统一的 N 个时钟数据延迟, 无需增加额外的 控制检测逻辑和 FIFO 存储器, 为可配置点数的 FFT 处理器设计减少了设计成本。
(3) 采用统一的流水线暂停策略, 读后便写的方式有效避免了数据丢失和冲突
当外部数据由于带宽需求或中断等情况出现暂时无效时, 应当将流水线暂停, 停 止数据的计算和读写, 并将有效的中间数据保存, 本发明采用与 FFT 处理器统一的流水线 暂停信号, 确保中间数据不丢失。 另外, 在两块存储器的同时读写条件下, 采用读一次, 紧跟 其后写一次的方式, 避免地址信号的时序错位和数据的丢失, 保证流水线暂停后的读写时 序不冲突。
本发明采用两块 N/2 深度的单口存储器同时读或写的方式, 完成带暂停的连续数 据流的倒位序顺序调整 ; 以 8k 点的浮点格式 FFT 设计为例, 本发明与一块 N 深度双口存储 器和两块 N 深度单口存储器的方案比较, 存储器面积分别减少了 67.8%和 46.1%, 显著降 低的存储器的面积开销, 降低了器件功耗和设计成本 ; 该设计方案采用固定规则的时钟数 据延迟, 降低了可配置倒序操作的设计复杂度, 避免了大量 FIFO 存储器的使用, 8192 点的 浮点设计大约节省约 8k*13bits 的 FIFO 存储器 ; 本发明还采用统一的流水线暂停策略, 保 存中间数据, 满足外部带宽和控制环境的可变性, 并且以读后便写的方式有效避免的暂停 后的数据丢失和读写时序冲突。 附图说明
图 1 为基于 N/2 深度单口存储器的倒序操作总体结构示意图。 图 2 为 16 点数据倒序操作初始化写操作示意图。 图 3 为 16 点数据倒序操作第一种同时读写操作示意图。 图 4 为 16 点数据倒序操作第二种同时读写操作示意图。 图 5 为存储器读写地址和使能信号的产生电路示意图。 图 6 为读写地址产生器的读写状态转移示意图。 图 7 为输入和输出数据的串 - 并转换示意图。具体实施方式
下面结合附图和实例对本发明作进一步详细的说明。
本发明提出的基于 N/2 深度单口存储器的倒序操作的 VLSI 结构是基于存储器数 据调度和有限状态机的控制方式。 如图 1 所示, 本发明的 VLSI 结构包括中心控制器 1, 读写 地址产生器 2, 可配置读写状态控制器 3, 单端口存储器 a4, 单端口存储器 b5, 输入接口单元 6, 输出缓冲单元 7。
中心控制器 1 负责系统中各个模块的状态控制和数据调度。中心控制器 1 接收外 部的数据有效指示信号、 点数配置模式和序列组数信号, 将序列组数信号作为剩余序列组 数指示寄存器的初值, 接收来自读写地址产生器 2 的读和写地址, 其中包括单端口存储器 a4 的读地址、 单端口存储器 a4 的写地址、 单端口存储器 b5 的读地址、 单端口存储器 b5 的写 地址, 接收来自可配置读写状态控制器 3 的读使能信号 ; 在连续接收到数据有效指示信号 两次后向输入接口单元 6 发送串并转换控制信号以及向读写地址产生器 2 发送启动信号 ;若单端口存储器 a4 的写地址与当前点数长度模式下地址最高限值相等, 则向读写地址产 生器 2 和输入接口单元 6 发送写满最高地址指示信号, 并将剩余序列组数指示寄存器减 1 ; 若单端口存储器 a4 的写地址与单端口存储器 b5 的写地址相同且均与当前点数长度模式下 地址最高限值一半相等, 或单端口存储器 a5 的写地址大于单端口存储器 a4 的写地址且单 端口存储器 a5 的写地址与当前点数长度模式下地址最高限值相等, 则向读写地址产生器 2 和输入接口单元 6 发送写满最高地址一半指示信号, 所述当前点数长度模式下地址最高限 值为当前点数配置模式对应的点数长度减 1, 所述当前点数长度模式下地址最高限值一半 为当前点数配置模式对应的点数长度的一半减 1 ; 若单端口存储器 a4 的读地址与当前点数 长度模式下地址最高限值相等, 则向读写地址产生器 2 和输出缓冲单元 7 发送读空最高地 址指示信号 ; 若单端口存储器 a4 的读地址与单端口存储器 b5 的读地址相同且均与当前点 数长度模式下地址最高限值一半相等, 或单端口存储器 a5 的读地址大于单端口存储器 a4 的读地址且单端口存储器 a5 的读地址与当前点数长度模式下地址最高限值相等, 则向读 写地址产生器 2 和输出缓冲单元 7 发送读空最高地址一半指示信号 ; 在数据有效指示信号 的触发下产生数据准备好信号并传送至可配置读写状态控制器 3 ; 若接收到读使能信号, 则向输出缓冲单元 7 发送并串转换控制信号 ; 将当前剩余序列组数指示寄存器值发送给读 写地址产生器 2。
读写地址产生器 2 接收来自中心控制器 1 的启动信号、 剩余序列组数指示寄存器 值、 写满最高地址指示信号或写满最高地址一半指示信号、 读空最高地址指示信号或读空 最高地址一半指示信号, 来自可配置读写状态控制器 3 的读使能或写使能信号, 接收外部 的点数配置模式, 以及外部的数据有效指示信号 ; 读写地址产生器 2 将读写地址产生模式 发送至可配置读写状态控制器 3 ; 在读使能或写使能信号触发下选择生成的读或写地址, 并分别传送给单端口存储器 a4 和单端口存储器 b5 ; 读写地址产生器 2 将生成的单端口存 储器 a4 的读地址、 单端口存储器 a4 的写地址、 单端口存储器 b5 的读地址、 单端口存储器 b5 的写地址信息发送至中心控制器 1 ; 读写地址产生器 2 在工作中根据外部的数据有效指示 信号, 在数据暂停时保持读写地址产生模式信息不变 ; 读写地址产生器 2 根据剩余序列组 数指示寄存器值, 写满最高地址指示信号或写满最高地址一半指示信号, 读空最高地址指 示信号或读空最高地址一半指示信号来控制不同的读写地址产生模式的切换。
可配置读写状态控制器 3 接受来自中心控制器 1 的数据准备好信号和读写地址产 生器 2 的读写地址产生模式信息 ; 可配置读写状态控制器 3 根据数据准备好信号和读写地 址产生模式信息产生对于单端口存储器 a4 和单端口存储器 b5 的读使能或写使能信号 ; 可 配置读写状态控制器 3 将读使能信号发送至中心控制器 1, 将读使能或写使能信号发送至 读写地址产生器 2 ;
单端口存储器 a4 和单端口存储器 b5 作为数据的暂存单元, 接受来自读写地址产 生器 2 的读或写地址信息, 接受来自可配置读写状态控制器 3 的读使能或写使能信号, 在地 址和读写使能的控制下, 接受来自于输入接口单元 6 的双路并行数据, 并读出双路数据发 送至输出缓冲单元 7 ;
输入接口单元 6 接受来自外部的输入数据和来自中心控制器 1 的串并转换控制信 号和写满最高地址指示信号、 写满最高地址一半指示信号, 根据串并转换控制信号将连续 的两个有效输入数据转换为上下两路并行数据, 首先接收到的数据作为上路数据, 其次接收到的数据作为下路数据 ;
若收到写满最高地址指示信号, 则将上下两路并行数据分别写入至单端口存储器 a4 和单端口存储器 b5 ; 若收到写满最高地址一半指示信号, 则将上下两路并行数据分别写 入至单端口存储器 a5 和单端口存储器 b4 ;
在输入接口单元 6 首次向存储器写入数据时, 默认将上下两路并行数据分别写入 至单端口存储器 a4 和单端口存储器 b5 ;
输出缓冲单元 7 接受来自单端口存储器 a4 和单端口存储器 b5 的两路并行数据, 来自中心控制器 1 的并串转换控制信号、 读空最高地址指示信号、 读空最高地址一半指示 信号 ; 若收到读空最高地址指示信号, 则分别从单端口存储器 a4 和单端口存储器 b5 同时读 出上下两路并行数据 ; 若收到读空最高地址一半指示信号, 则分别从单端口存储器 a5 和单 端口存储器 b4 同时读出上下两路并行数据 ; 对上下两路并行数据作并串转换, 实现先输出 上路数据再输出下路数据 ;
在输出缓冲单元 7 首次接收到并串转换控制信号后, 默认分别从单端口存储器 a4 和单端口存储器 b5 同时读出上下两路并行数据。
本发明基于两块 N/2 深度的单端口存储器实现 FFT 倒序操作, 存储器数据调度方 法是本发明的重点, 读写地址产生器 2 用以实现数据读写调度, 以不同的读写模式产生读 写地址, 具体的地址产生模式和控制流程如下 :
定义一组序列的长度为 N = 2m, N 为点数配置模式对应的点数长度 ;
初始化只写模式 : 将第一组序列全部两路并行写入单端口存储器 a4 和单端口存 储器 b5 中, 在输入接口单元 6 每接收到两个有效数据后, 读写地址产生器 2 对初始值为 0 的 m-1 位二进制数不断增 1 再做倒位序操作, 即按照下述规律产生写地址 :
单端口存储器 a4 和单端口存储器 b5 写地址相同, 由于数据以两两并行的方式写入存储器, 写操作仅在新输入的两个数据转备好之后进行一次。当写地址达到 后, 判断剩余序列组数指示寄存器值是否为 0, 若是, 则转移至清空只读模式, 否则, 执行第 一种交替读写模式 ;
如图 2 所示, 是以 16 点的倒序处理为例, 0 ~ T2 时间完成第一次数据初始化存储, 按照 3bits 的倒位序地址写入, 并在写入一半数据后, 将数据交换存储。
第一种交替读写模式 : 考虑数据暂停对于数据保持和读写时序的影响, 将写操作 紧跟在读操作的下一个时钟周期 ; 写地址信号是上一个时钟的读地址信号 ; 在完成前一半 的 N/2 数据的读写时, 单端口存储器 a4 和单端口存储器 b5 的读写地址产生方式分别具有 如下规律 :
当结束 N/2 数据的读写后, 会依次接受到来自中心控制器 1 的读空最高地址一半 指示信号和写满最高地址一半指示信号, 读写地址产生器 2 将转移读写模式处理后一半的 N/2 数据, 此时单端口存储器 a4 和单端口存储器 b5 的读写地址产生方式分别具有如下规 律:
当结束后一半的 N/2 数据的读写后, 会依次接受到来自中心控制器 1 的读空最高地址指示信号和写满最高地址指示信号, 判断剩余序列组数指示寄存器值是否为 0, 若是, 则转移至清空只读模式, 否则, 执行第二种交替读写模式 ;
如图 3 所示, 16 点长度的第一组数据已经全部写入, 可以进行交替读写, 在 T2 ~ T3 时间段, 完成前一组前一半数据的读出和下一组前一半数据的写入, 单端口存储器 a4 和 单端口存储器 b5 的读写地址分别依次为 000 和 001、 010 和 011、 100 和 101、 110 和 111 ; 一 个时钟读, 相邻下一个时钟写, 写按照上一个时钟的读地址来写 ; 同样在 T3 ~ T4 时间段, 完成下一半数据的读出和写入, 单端口存储器 a4 和单端口存储器 b5 的读写地址分别依次 为 001 和 000、 011 和 010、 101 和 100、 111 和 110 ; 这样读出的数据是按照 X(0)、 X(1)、… X(N-1) 自然序顺序读出, 写入数据按照倒位序顺序写入 ;
第二种交替读写模式 : 类似于第一种交替读写模式, 同样将写操作紧跟在读操作 的下一个时钟周期 ; 写地址信号是上一个时钟的读地址信号 ; 读写地址产生器 2 对初始值 为 0 的 m-1 位二进制数不断增 1 再做倒位序操作, 即按照下述规律产生读和写地址信号 :
单端口存储器 a4 和单端口存储器 b5 写地址信号相同, 当结束 N/2 数据的读写后, 会依次接受到来自中心控制器 1 的读空最高地址一半指示信号和写满最高地址一半指示 信号, 当读写完一组 N 个数据后, 会依次接受到来自中心控制器 1 的读空最高地址指示信号 和写满最高地址指示信号, 判断剩余序列组数指示寄存器值是否为 0, 若是, 则转移至清空 只读模式, 否则, 执行第一种交替读写模式 ;
根据倒位序特点, 按照图 3 中那样的读规律写, 造成的数据存储状态是 X(index2k) 和 X(index2k+1) 相邻数据序列, 按照 m-1bits 倒位序地址规律在两块单端口存储器中同地址 存储, 并且后一半数据的存储交换存储器位置, 在图 3 中, X(0) 和 X(1) 存在 000 地址, X(2) 和 X(3) 存在 100 地址, X(8) 和 X(9) 则交换位置存在 001 地址 ; 这样在下次读操作中, 只需 按照 m-1bits 倒位序地址读即可, 并且后一半的 N/2 数据需要交换读出 ;
如图 4 所示, 对于按照第一种交替读写模式处理完后的存储状态按照第二种交替 读写模式交替读写 ; 在 T4 ~ T5 时间段, 完成前一组前一半数据的读出和下一组前一半数 据的写入, 一个时钟读, 相邻下一个时钟写, 在 T5 ~ T6 时间段, 完成下一半数据的读出和写 入; 读出的数据同样是按照 X(0)、 X(1)、… X(N-1) 自然序顺序读出, 写入数据按照倒位序 顺序写入 ;
清空只读模式 : 若是从初始化只写模式转移到清空只读模式, 则其按照第一种交 替读写模式中读地址的产生方式产生只读操作的读地址信号 ; 若是从第一种交替读写模式 转移到清空只读模式, 则其按照第二种交替读写模式中读地址的产生方式产生只读操作的 读地址信号 ; 若是从第二种交替读写模式转移到清空只读模式, 则其按照第一种交替读写 模式中读地址的产生方式产生只读操作的读地址信号。
本发明提出的存储器数据调度策略具有很好的可扩展性, 可灵活实现 2 的幂次方
的可配置长度的数据倒位序处理 ;
定义一组数据个数为 N = 2m, 共有 GP_NUM 组序列, 该信号由外部作为序列组数信 号输入, 并将其赋初值于中心控制器 1 中待处理序列组数寄存器 Group, 有两个 m bits 的计 数器 cnt1[m-1:0] 和 cnt2[m-1:0] 与数据有效输入同步增 1, 其位宽相同且能够计数最高配 置点数, 两块存储器读和写地址分别定义为 raddr1 和 waddr1、 raddr2 和 waddr2, 定义有随 m 变化而不同的 m-1 位比特地址信号倒置操作 inv_M, 其中 M = m-1, 完成 M bits 地址信号 的倒置, 且记当前数据序号为 c_num, 在不同读写模式下的地址产生规律如下 :
(1) 初始只写模式 : 该模式将 N 个数据全部写入两块存储器中, 两个写地址相同且 为: waddr1 = waddr2 = inv_M(cnt1[M:1]) (6)
写至最高地址时, 在中心控制器 1 中将 Group 减 1 再赋值于 Group, 若结果不为 0, 则转移至下述第一种交替读写模式, 若结果为 0, 则转移至下述清空只读模式 ;
(2) 第一种交替读写模式 : 由于数据可能出现暂停的情况, 先启动读, 之后紧跟着 启动写, 读写地址计算公式为 ( 其中 raddr1_pre 和 raddr2_pre 分别前一个时钟的表示 raddr1 和 raddr2) :
waddr1 = raddr1_pre (9)
waddr2 = raddr2_pre (10)
c_num ∈ [1+kN, N/2+kN] 表示当前读出的数据为第 c_num 个读出的输出, 若有 m 组 数据序列, 即总共有 mN 个数据需要按照完成倒位序的整序处理, 则其中 k 的取值按照 0, 1, 2, ..., m-1 变化, 表示处理的数据序列的变化。
写至最高地址时, 在中心控制器 1 中将 Group 减 1 再赋值于 Group, 若结果不为 0, 则转移至下述第二种交替读写模式, 若结果为 0, 则转移至下述清空只读模式 ;
(3) 第二种交替读写模式 : 同样由于数据可能出现暂停的情况, 先启动读, 后紧跟 着启动写, 读写地址计算公式为 ( 其中 raddr1_pre 和 raddr2_pre 分别前一个时钟的表示 raddr1 和 raddr2) :
raddr1 = raddr2 = inv_M(cnt1[M:1]) (11)
waddr1 = waddr2 = raddr1_pre = raddr2_pre (12)
写至最高地址时, 在中心控制器 1 中将 Group 减 1 再赋值于 Group, 若结果不为 0, 则转移至第一种交替读写模式, 若结果为 0, 则转移至下述清空只读模式 ;
(4) 清空只读模式 : 若是从第一种交替读写模式转移到清空只读模式, 则按照第 二种交替读写模式产生读地址, 不用产生写地址 ; 若是从第二种交替读写模式转移到清空 只读模式, 则按照第一种交替读写模式产生读地址, 不用产生写地址 ;
第二种交替读写模式得到的数据存储结果可以按照第一种交替读写模式中读地 址方式读出, 若有多组连续数据, 则按照第一种交替读写模式和第二种交替读写模式不断
循环, 直至最后以第一种或第二种交替读写模式中只读操作结束 ; 以上操作在每写入 N/2 数据或每读出 N/2 数据后, 均需要将两块存储器数据接口切换, 该操作在输入接口单元和 输出缓冲单元分别做写入和读出数据的调整处理 ; 按照这种数据调度方法得到的结果数据 就是按照 X(0)、 X(1)、… X(N-1) 自然序的计算结果, 并且对于任意 N = 2m 大小的点数的倒 序处理都是通用可行的 ;
如图 5 所示, 是两块存储器的读写地址和读写使能信号的产生电路, 包含读写地 址产生器 2 和可配置读写状态控制器 3 的具体实现方式。读写地址产生器 2 包括计数器 a21、 计数器 b22、 位倒置和移位单元 23、 延迟单元 24、 地址交换选择逻辑 25、 读写地址产生 模式状态机 26、 MUXa27 和 MUXb28 的多路选址器 ;
计数器 a21 和计数器 b22 设计为具有最大的 m bits 位宽, 能够处理最大可配置 2m 长度的数据序列 ; 计数器 a21 和计数器 b22 若接收到来自中心控制器 1 的启动信号, 并且接 受到来自可配置读写状态控制器 3 的读使能或写使能信号, 则计数器 a21 和计数器 b22 开 始计数产生地址, 否则, 保持原有值不变 ; 计数器 a21 将产生的 m bits 位宽的地址信号发送 至位倒置和移位单元 23 ; 计数器 b22 将产生的 m bits 位宽的地址信号延迟单元 24, 并作为 地址 A21 发送至交换判决逻辑 25 ; 结合上述四种读写地址产生模式的描述, 计数器 a21 产 生的地址用以进一步产生初始化只写模式和第二种读写交替模式的地址, 计数器 b22 产生 的地址用以进一步产生第一种读写交替模式的地址 ;
位倒置和移位单元 23 接受来自外部的可配置点数模式信息和来自计数器 a21 的 m bits 的地址 ; 位倒置和移位单元 23 首先将 m bits 的地址按比特颠倒位置, 得到新的 m bits 地址 ; 位倒置和移位单元 23 根据可配置点数模式信息确定新的 m bits 地址的移位次 数, 如配置的点数长度为 N = 2n, 则保留新的 m bits 地址的最高 n bits 作为输出地址 A1 ; 位倒置和移位单元 23 将产生的地址 A1 发送至地址交换选择逻辑 25 ;
延迟单元 24 接受来自计数器 b22 的 m bits 地址 ; 并将该地址用寄存器延迟一个 时钟发送得到地址 A22, 并将地址 A22 发送至交换判决逻辑 25 ;
地址交换选择逻辑 25 接受来自位倒置和移位单元 23 发送来的地址 A1, 来自计数 器 b22 发送来的地址 A21, 来自延迟单元 24 发送来的地址 A22, 来自读写地址产生模式状态 机 26 的读写模式状态信息, 以及来自中心控制器 1 的写满最高地址一半指示信号、 读空最 高地址一半指示信号 ; 若读写模式状态信息表示正处于初始化只写模式, 则选择地址 A1 作 为单端口存储器 a4 写地址信号 waddr1 和单端口存储器 b5 的写地址信号 waddr2 ; 若读写 模式状态信息表示正处于第一种交替读写模式, 则首先选择地址 A21 和 A22 分别作为单端 口存储器 a4 读地址信号 raddr1 和单端口存储器 b5 的读地址信号 raddr2, 并且地址 A21 和 A22 延迟一个时钟分别作为单端口存储器 a4 写地址信号 waddr1 和单端口存储器 b5 的读地 址信号 waddr2, 若接受到写满最高地址一半指示信号, 则选择地址 A22 和 A21 分别作为单端 口存储器 a4 读地址信号 raddr1 和单端口存储器 b5 的读地址信号 raddr2, 并且地址 A22 和 A21 延迟一个时钟分别作为单端口存储器 a4 写地址信号 waddr1 和单端口存储器 b5 的读地 址信号 waddr2, 直至读写模式状态信息变为第二种交替读写模式或清空只读模式 ; 若读写 模式状态信息表示正处于第二种交替读写模式, 则选择地址 A1 作为单端口存储器 a4 读地 址信号 raddr1 和单端口存储器 b5 读地址信号 raddr2, 并将地址 A1 延迟一个时钟作为单 端口存储器 a4 写地址信号 waddr1 和单端口存储器 b5 的写地址信号 waddr2 ; 若读写模式状态信息表示正处于清空只读模式, 若该清空只读模式是由第一种读写交替模式转来, 则 按照第二种读写交替模式产生读地址, 即首先将地址 A21 和 A22 分别作为单端口存储器 a4 读地址信号 raddr1 和单端口存储器 b5 的读地址信号 raddr2, 若接收到读空最高地址一半 指示信号, 则转为将地址 A22 和 A21 分别作为单端口存储器 a4 读地址信号 raddr1 和单端 口存储器 b5 的读地址信号 raddr2, 若该清空只读模式是由第二种读写交替模式转来, 则按 照第一种读写交替模式产生读地址, 即将地址 A1 作为单端口存储器 a4 读地址信号 raddr1 和单端口存储器 b5 的读地址信号 raddr2 ; 地址交换选择逻辑 25 将产生的单端口存储器 a4 的读地址 raddr1 和写地址 waddr1 发送至多路选择器 MUXa27, 将产生的单端口存储器 b5 的 读地址 raddr2 和写地址 waddr2 发送至多路选择器 MUXb28 ;
读写地址产生模式状态机 26 接受来自中心控制器 1 的启动信号、 剩余组数指示信 号、 写满最高地址指示信号、 读空最高地址指示信号和外部的数据有效指示信号, 以及外部 数据有效指示信号 ; 读写地址产生模式状态机 26 主要完成不同的读写地址产生模式的切 换, 并将读写地址产生模式信息发送至地址交换选择逻辑 25 和可配置读写状态控制器 3, 其具体的产生控制模式状态转移如图 6 所示 :
按照初始化只写模式产生写地址的方式, 记为 wr_state ; 按照第一种交替读写模 式产生读写地址的方式, 记为 rd_wr_state_1 ; 按照第二种交替读写模式产生读写地址的 方式, 记为 rd_wr_state_2 ; 按照第一种交替读写模式产生清空只读模式中读地址的方式, 记为 rd_state_1 ; 按照第二种交替读写模式产生清空只读模式中读地址的方式, 记为 rd_ state_2 ; 定义中心控制器 1 发送的剩余组数指示信号, 即剩余组数寄存器值若为零, 则 gp_ none 为真, 否则为假 ;
首先在倒序操作开始前, 通过异步复位将相应的寄存器的清零, 进入等待状态 idle。当接收到中心控制器 1 的启动信号 start 后, 读写地址产生模式状态机 26 进入初 始化只写模式状态 wr_state, wr_state 定义为与上述初始化只写模式相同的地址产生模 式, 若外部输入的数据有效指示信号无效或未收到写满最高地址指示信号, 即! di_val| ! wr_ful 为真, 则保持原读写模式不变, 若收到写满最高地址指示信号, 即 wr_ful 为真时, 则 判断来自中心控制器 1 的剩余组数指示信号, 即中心控制器 1 中的剩余组数寄存器值, 是否 为零, 若为零, 则转至按照第一种交替读写模式 rd_wr_state_1 产生读地址的清空只读模 式 rd_state_1, 否则, 转至第一种交替读写模式 rd_wr_state_1 ;
当处于第一种交替读写模式 rd_wr_state_1 时, 若外部输入的数据有效指示信号 无效或未收到写满最高地址指示信号, 即! di_val| ! wr_ful 为真, 则保持原读写模式不 变, 若收到写满最高地址指示信号, 即 wr_ful 为真时, 则判断来自中心控制器 1 的剩余组数 指示信号, 若 gp_none 同时为真, 则转至按照第二种交替读写模式 rd_wr_state_2 产生读地 址的清空只读模式 rd_state_2, 否则, 转至第二种交替读写模式 rd_wr_state_2 ;
当处于第一种交替读写模式 rd_wr_state_2 时, 若外部输入的数据有效指示信号 无效或未收到写满最高地址指示信号, 即! di_val| ! wr_ful 为真, 则保持原读写模式不 变, 若收到写满最高地址指示信号, 即 wr_ful 为真时, 则判断来自中心控制器 1 的剩余组数 指示信号, 若 gp_none 同时为真, 则转至按照第一种交替读写模式 rd_wr_state_1 产生读地 址的清空只读模式 rd_state_1, 否则, 转至第一种交替读写模式 rd_wr_state_1 ;
当处于按照第一种交替读写模式产生读地址的清空只读模式 rd_state_1 或是按照第二种交替读写模式产生读地址的清空只读模式 rd_state_2, 若外部输入的数据有效指 示信号无效或未收到读空最高地址指示信号, 即! di_val| ! rd_ful 为真, 则保持原读写 模式不变, 若收到读空最高地址指示信号, 即 rd_ful 为真时, 则结束所有操作, 进入空闲等 待状态 idle ;
多路选择器 MUXa27 和 MUXb28 接受来自地址交换选择逻辑 25 发送的单端口存储 器 a4 读地址 raddr1 和写地址 waddr1, 单端口存储器 b5 读地址 raddr2 和写地址 waddr2, 接受来自可配置读写状态器 3 的读使能或写使能信号 ; 根据读使能或写使能信号的变换选 择与读写操作对应的单端口存储器 a4 和单端口存储器 b5 的同时写地址 waddr1 和 waddr2, 或同时读地址 raddr1 和 raddr2, 分别作为 addr1 和 addr2 发送至单端口存储器 a4 和单端 口存储器 b5 的地址线端口 ;
可配置读写状态器 3 接受来自中心控制器 1 的数据准备好信号, 来自读写地址产 生模式状态机 26 的读写地址产生模式信息 ; 在有效数据的产生数据准备好的条件下, 结合 读写地址产生模式信息产生为一组准备好数据产生写使能信号 ; 根据读写地址产生模式信 息, 配合写使能信号, 产生交替的读使能和写使能信号 ;
如图 7 所示, 是对应的输入接口单元 6 和输出缓冲单元 7 ; 对于输入接口单元 6 而 言, 采用一个输入切换开关 61 和两路输入缓冲寄存器组 62 的方式, 将先后两个时钟的数 据转为并行的两路, 经过输入数据切换单元 63 得到 din1 和 din2 同时分别送入单端口存 储器 a4 和单端口存储器 b5 中 ; 并且注意到在第一种交替读写模式或第二种交替读写模式 写状态下, 若写地址达到配置点数设置的最大 1/2 深度或为最大配置地址值, 即 wr_haf 或 wr_ful 信号有效时, 需要将写地址和写入的两个数据分别切换, 该功能由输入数据切换单 元 63 完成 ; 同样对于输出缓冲单元 7 而言, 单端口存储器 a4 和单端口存储器 b5 并行输出 的两路数据 dout1 和 dout2, 可以类似地采用输出缓冲寄存器组 72 和一个输出切换开关 73 的方式实现单路的数据输出。在读地址达到配置点数设置的最大 1/2 深度或为最大配置地 址值, 即 rd_haf 或 rd_ful 信号有效时, 由输出数据切换单元 71 切换两路读地址和读出的 两路数据。在每两个时钟进行两路数据的一次读和一次写操作的机制下, 配合数据路数的 变换, 特别是上述存储器数据调度方法, 就可以实现基于两块单端口存储器的倒序操作, 实 现连续数据的无冲突读写。
以上所示仅是以倒序操作实现倒位序输入的自然序输出为例, 应当指出的是, 由 于倒位序的倒位序即为自然序的特点, 上述针对 FFT 倒序操作设计的存储器数据调度方 法, 同样适用于自然序输入倒位序输出的情况, 并且本算法和结构具有对于任意 N = 2m 长 度数据的通用可行性, 具有良好的可配置性和可扩展性。 因此, 对于本技术领域的普通技术 人员来说, 在不脱离本发明原理的前提下, 还有可能做出若干改进和润饰, 这些改进和润饰 也应视为本发明的保护范围。