1. 从FIR滤波器到脉动阵列:为什么我们需要“规则化”?
如果你做过数字信号处理(DSP)相关的项目,比如音频降噪、图像锐化,那你肯定对FIR(有限长单位冲激响应)滤波器不陌生。它结构简单、稳定性好,是数字IC设计里绕不开的经典模块。但当你真的要把算法变成芯片里的电路时,头疼的事儿就来了:怎么让它在保证精度的前提下,跑得又快、面积又小、功耗又低?
传统的FIR实现,比如直接型或者转置型,在软件仿真里看着挺好,一上硬件就容易遇到瓶颈。数据路径复杂,布线拥塞,时钟频率上不去,更别提要处理高速数据流了。这时候,就该“脉动阵列”登场了。我第一次接触这个概念时,觉得它特别像工厂里的流水线:每个工位(处理单元PE)只干一件固定的事,原料(数据)有节奏地从上一个工位传到下一个,成品(结果)源源不断地在流水线末端产出。这种“模块化”和“规则化”的特性,简直就是为VLSI(超大规模集成电路)设计量身定做的。
为什么规则化对芯片设计这么重要?你想啊,芯片设计动辄上亿个晶体管,如果电路结构乱七八糟,像一团乱麻,那后续的布局布线、时序验证、物理实现会是一场噩梦。而脉动阵列要求所有PE基本一致,只跟邻居通信,这就让整个电路变得极其规整。这种规整性带来的好处是实实在在的:设计周期大大缩短,因为你可以像搭乐高一样复用PE模块;芯片的利用率高,没有闲置的硬件资源;更重要的是,数据流和计算节奏被严格同步,非常容易达到很高的吞吐率。所以,用脉动阵列的思路来重构FIR滤波器,不是一个炫技的选择,而是一个在性能、面积和功耗之间寻求最优解的工程实践。
2. 脉动阵列设计方法学:把算法“画”成电路图
光说脉动阵列好还不行,我们得有一套可操作的方法,把数学算法变成具体的电路结构。这就是“脉动阵列设计方法学”的核心。别被这个学术名词吓到,其实它的思想很直观:先画图,再映射。
2.1 第一步:画出算法的“依赖图”
任何计算都可以用一张图来表示,我们称之为依赖图。对于那个经典的3抽头FIR滤波器(y[n] = a*x[n] + b*x[n-1] + c*x[n-2]),我们可以把它在时空中的计算点画出来。想象一个二维网格,横轴(i)代表不同的抽头(系数a, b, c),纵轴(j)代表不同的时间点或数据索引。网格上的每个点(i, j)就代表一次乘加运算:用系数 w_i 乘以数据 x[j-i]。
那么,点与点之间怎么连呢?这就体现了“依赖”。比如,计算 y[n] 需要用到 x[n], x[n-1], x[n-2],这反映在图上,就是数据 x 沿着纵轴(j方向)向上传播。系数 w 是固定的,它沿着横轴(i方向)分布。而部分和(也就是累加中的中间结果)则需要沿着对角线方向传递,逐步累加形成最终的输出 y。这样一来,我们就得到了一张规则的网格,上面布满了代表数据流、系数流和部分和流的箭头。这张图就是算法的“骨骼”,它清晰地展示了所有计算之间的先后关系和数据流向。
2.2 第二步:选择你的“映射策略”
有了依赖图这张“蓝图”,接下来就要决定怎么把它“压扁”到一维的硬件阵列上(对于FIR,通常映射成一维线


919

被折叠的 条评论
为什么被折叠?



