在通信数字信号处理中,经常会遇到带有反馈环路的设计。例如数字时钟恢复或者自适应均衡滤波器。该类设计的基础都是对输入数据进行滤波或者均衡,调相,而进行上述计算所用到的系数来自于该滤波器或者均衡器的输出结果。换句话说,本次数据的输出依赖于之前输出数据。
在某些场合下,有可能需要对环路计算/系数计算出来的系数再重新进行变换才加载到滤波器或者均衡器中,这时候在环路计算/系数计算中间会多出一个系数变换的环节,此时在环路计算/系数计算的输出多了一个系数变换模块,该模块可以是一个FFT或者其他变换。假设此时的输入数据存在缺口(即不是每个时钟节拍都有效),那么此时存在反馈环路的设计应该特别注意,由于环路计算/系数计算和系数变换存在延时,当数据存在缺口时,传给滤波器用的系数应该如何处置?此时有一种常见的解决方案,即把系数通过一个buffer缓存起来,等到新的有效数据出来,再把数据从buffer中读出。注意,由于反馈环路的延时对系统性能的影响很大,此时的buffer不能简单的使用传统的FIFO,因为传统的FIFO的状态信号(empty, almost empty)至少存在一个周期的时延,我们需要的是一种能马上反映出状态的缓存,即缓存一被写入,非空状态马上就能出来而不用等到下一个周期才知道。
还有一个重点,在大规模设计中,假设图2系数变换模块的输入只有并行10个数,但是出来的却是并行的128个数,那么此时缓存放置的位置直接影响到了逻辑资源,因为放在系数变换输出端需要128个缓存,但是放在输入端却只需要10个缓存。因此这时候我们肯定会倾向于把缓存放置于系数变换模块的输入端.