2 基于FPGA实现DSP流水线设计中应注意的其他问题
2.1 流水线设计方法的选择
流水线设计可分为原理图和VHDL两种基本方法。
如前所述,用原理图输入法设计时,为提高设计效率,应充分利用带有LPM_PIPELINE的LPM模块,并利用QuartusII(提供了40多种LPM函数)编译器给出的LPM PIPELINE最佳数值(即最佳流水线级数),设定最佳LPM_PIPEINE值。
在无合适的I PM模块可用时,需要用VHDL作为设计输入。
流水线技术的实质就是在适当的地方加入寄存器,将前面的运算结果或输入数据暂存,并在下一个时钟到来时,将寄存值作为后一级运算的输入。因此在用VHDL描述流水线时,只需对不含流水线的运算器描述代码作适当改写,施加必要的设计约束即可实现。一般通过在进程中加入WAIT语句或IF_THEN语句来测试敏感信号边沿,实现寄存器或锁存器。
如使用WAIT语句,常用的描述形式为:
PROCESS
BEGIN
wait until clk’event and clk=’1’; (上升沿触发)
reg<=x;
END PROCESS;
其中的x是指输入到所加流水线寄存器reg中的数据。
使用IF_THEN语句,常用描述方式为:
IF(clk’event and clk=’1’) THEN…
另外,用VHDL设计输入时也可以利用Altera所提供的LPM函数,但必须在设计实体前使LPM库可现,即加入以下语句:
LIBRARY lpm;
USE lpm.lpm_components.ALL;
2.2 流水线的首次延时和寄存器的触发时间
对图1所示系统进行延时分析,图中组合逻辑的延迟包括两级,合理设计的流水线结构中,其延迟时间应大致相等,设为2Tpd,插入每级寄存器组的触发时间为Tco。因此,从输入到输出总的等待时延为:TDl=2(Tpd+Tco),称为流水线设计的首次延时(First Latency)。对于连续的运算,由于加上寄存器组后,每级计算后的中间结果都能暂时保存,下一个时钟到来时,可以直接参与下一级逻辑运算,无需等待从系统的输入端传来数据。因此,第二个结果及以后的运算结果的获得只需要一个时钟周期,等待的时延为:TD2=Tpd+TCO。
可见,流水线设计的首次延时与流水线正常延时相比要长得多。所以在选择是否采用流水线技术时,要分析DSP运算的频率。当需要进行连续运算(即流水线一直是满负荷)时,采用流水线可以大大提高数据吞吐率;但如果只是偶尔需要加、乘运算,由于首次延时大于非流水线方式下的pin to pin延时,流水线应用效果变差,而且还牺牲了额外的芯片资源,所以不推荐使用流水线。在FPGA/CPLD中,器件的延时Tpd要比寄存器的触发时间TCO长得多,一般分析流水线吞吐延时可以忽略TCO。但是在高速运算场合或流水线技术较多时(如视频信号处理或无线通信中的数据处理),TCO与Tpd相比已不可忽略,必须仔细选择流水线的级数,防止TCO的影响造成流水线的瓶颈。
2.3 嵌入式存储器块资源的充分利用
在FPGA器件中,嵌入式存储器块(Embedded Memory)是为支持各种存储器应用和DSP应用提供的专门资源。如Altera公司FLEX10K系列器件提供了3个嵌入式阵列块EAB,每个EAB提供可灵活设置的2048位RAM,Cyclone系列提供了数十个M4K资源,每个M4K提供4608位RAM,可单独使用,也可组合使用。使用EAB或M4K构建运算器如乘法器,实质是构成乘法查找表,其运算速度比采用LPM的乘法器速度更快,只是由于资源有限,只能实现小型乘法器。如能把基于嵌入式阵列块的小型乘法器和流水线技术相结合,则能够实现运算量和速度的进一步提高。
2.4 控制流水线和数据流水线的划分
由于数字信号处理系统复杂性的不断提高,在利用流水线技术实现DSP运算设计时,还有一个需要考虑的问题就是控制流水线和数据流水线的划分问题。如在高速数据采集与处理系统中,采样数据的处理主要涉及DSP运算,可以归入数据流水线。各输入通道传感器与信号调理电路的选通控制、模数转换、数据缓冲与传送、数据运算控制则需要主控芯片完成,如图2所示。高速主控芯片可以选用FPGA器件,采用流水线技术,将数据采集与处理过程中的通道选择、模数转换、数据缓冲与发送、数据运算四部分的控制过程设计为四级流水线进程,以减少数据采集与处理的平均作业时间,实现高速率的数据采集。主控芯片的流水线技术可以归入控制流水线范畴。
3 结论
通过实验对比,验证了利用流水线技术可以实现基于FPGA器件的高速DSP运算。在具体运算器设计中要通过综合过程,比较和优选流水线级数以满足速度和资源优化的需要。DSP系统在进行流水线设计时要根据运算频率明确用否流水线,合理划分控制流水线和数据流水线,还要注意合理选用原理图和VHDL描述,充分利用带有LPM_PIPELINE的LPM和EAB(M4K)等资源,最大限度提高系统数据吞吐率和设计效率。