| |
在高速通信系统设计中,如何提高系统的工作速度是系统设计成败的关键问题。在通常情况下,提高系统的工作速度有两种方法:其一是采用并行方案设计。传统上,设计方式常采用串行方式,而利用串行方式设计的电路系统的运行速度与每个模块之间的延时是直接相关的,为了减少模块间的延时,就采用并行方式设计电路。其二是采用流水线设计方式。
所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续的输入,流水线的各操作阶段以重叠方式执行。使得操作执行速度只与流水线输入的速度有关,而与处理所需的时间无关。这样,在理想的流水线操作状态下其运行效率很高。如果某个设计的处理流程分为若干个步骤,而且整个数据处理是单流向的,即没有反馈或迭代运算,前一个步骤的输出是下一个步骤的输入,则可以采用流水线设计方法来提高系统的工作频率。
从图中可以很容易直观的看到两种设计方法的区别之处
如果不采用流水线,输入数据需要等到前一个数据经过处理单元中所有运算后才能进入处理模块;而采用流水线模块后,输入数据只需要经过以及流水线处理后,就可以进入下一个流水线处理模块,数据处理时间减小了N倍。如果原来数据处理单元的吞吐量是T,采用N级流水线后总的吞吐量为NT。
流水线的基本结构是将适当划分的N个操作步骤串联起来,最大特点是数据流在各个步骤的处理从时间上看是连续的;其操作的关键在于时序设计的合理安排,以及前后级接口间的数据的匹配。如果前级操作的时间等于后级操作的时间,直接输入即可;如果前级操作的时间小于后级操作的时间,则需要对前级数据进行缓存,才能输入到后级;如果前级操作的时间大于后者,则需要穿并转换等方法进行数据分流,然后再输入到下一级。流水线处理方式之所以效率较高,是因为复制了处理模块,是面积换取速度思想的又一种具体体现。
以8位全加器予以说明,分别以非流水线方法、二级流水线方法实现。实现时,在每个全加器之间加了一个锁存器,整个系
统用同一个时钟。每一级的执行在时间上重叠起来,这个,整个系统的执行速度就加快了。
非流水线实现方式:
module adder8(cout,sum,clk,cina,cinb,cin);
input [7:0] cina,cinb;
input clk,cin;
output [7:0]sum;
output cout;
reg [7:0]sum;
reg cout;
always@(posedge clk)
begin
{cout,sum} = cina+cinb+cin;
end
endmodule
从图中可以看出只有一个8位加法器,没有额外的辅助电路,其运算延时是比较大的,只能用于低速设计
二级流水线实现方式
module adder8_2(cout,sum,clk,cina,cinb,cin);
input clk,cin;
input [7:0]cina,cinb;
output [7:0]sum;
output cout;
reg cout;
reg cout1;
reg [3:0]sum1;
reg [3:0]sum;
always@(posedge clk)
begin
{cout1,sum1} = cina[3:0]+cinb[3:0]+cin; //低4位相加
end
always@(posedge clk)
begin
{cout,sum} = {{cina[7],cina[7:4]}+{cinb[7],cinb[7:4]+cout1},sum1}; //高4位相加,并把8位拼接
end
endmodule
从图中可以看到,采用二级流水线之后,只用了3个4位加法器,添加了较少的辅助逻辑,使加法的运算时延降低到对4个比特的处理.