流水线的设计包括什么设计_一文详细了解流水线设计

一、什么是流水线?

流水线设计是系统划分组合逻辑,在各部分(级)之间插入寄存器,临时存储中间数据的方法。目的是将一个大操作分解成几个小操作,每个小操作的时间更短,所以可以提高频率,小操作可以并行执行,所以可以提高数据吞吐量(提高处理速度)。

二、什么时候用流水线设计?

流水线的使用一般是在时序比较紧,电路工作频率比较高的时候。典型情况如下:

1)功能模块间的流水线,使用乒乓缓冲交换数据。以增加内存数量为代价,相对于巨大的性能提升可以忽略不计。

2) I/O瓶颈,比如一个操作需要输入8个数据,memroy只能同时提供2个数据。如果操作步骤划分得当,使用流水线会减少面积。

3)片内sram的读操作,因为sram的读操作本身就是一个两极流水线,除非下一步操作依赖于读结果,否则自然要使用流水线。

4)组合逻辑过长,如(a b)*c,所以在加法和乘法之间插入一个寄存器是安全的。

第三,使用管道的优缺点。

1)优点:流水线缩短了给定信号在一个时钟周期内必须经过的路径长度,增加了数据吞吐量,从而提高了时钟频率,但也导致了数据延迟。例子如下:比如一个两级组合逻辑,假设每一级的延迟与Tpd相同,

1.无流水线总延迟为2Tpd,可以在一个时钟周期内完成,但时钟周期限制为2 tpd

2.装配线:

每级增加一个寄存器后(延时为Tco),单级延时为TPDTTCO,每级消耗一个时钟周期。流水线需要两个时钟周期才能得到第一个计算结果,称为第一个延迟,需要2 * (TPDTTCO)。但是,当执行重复操作时,只需要一个时钟周期就可以获得最终的计算结果,这称为吞吐量延迟(TPDTTCO)。可以看出,只要Tco小于Tpd,就可以提高流水线的速度。特别是流水线减少的不是单个操作的时间,而是整个数据的操作时间。请仔细理解。

2)缺点:功耗增加,面积增大,硬件复杂度增加。特别是对于cpu等复杂逻辑的流水线,流水线越深,需要hold流水线或reset流水线时,时间损耗越大。所以流水线的使用是不是有利无害,大家需要权衡一下。

第四,8-8位流水线加法器的小例子

非流水线:

模块添加8(

一,

b,

c);

输入[7:0]a;

输入[7:0]b;

输出[8:0]c;

赋值c[8:0]={1'd0,a} {1'd0,b };

末端模块

采用两级流水线:第一级低4位,第二级高4位,所以第一次输出有效需要2个时钟周期,后续数据为1个周期。

之后生效。

模块地址8_2(

clk,

cin,

西纳,

cinb,

总和,

cout);

输入clk

输入CIN;

输入[7:0]Cina;

输入[7:0]cinb;

输出[7:0]sum;

输出cout

注册cout

reg cout1//插入寄存器

reg[3:0]sum 1;//插入寄存器

reg[7:0]sum;

cina _ reg

reg[3:0]cinb _ reg;//插入寄存器

always @(posedgclk)//第一级管道

开始

{cout1,sum 1 }=Cina[3:0]cinb[3:0]CIN;

结束

始终@(posedge时钟)

开始

Cina _ reg=Cina[7:4];

cinb _ reg=cinb[7:4];

结束

always @(posedgclk)//第二级管道

开始

{cout,sum[7:0]}={{1'b0,cina_reg[3:0]} {1'b0,cinb_reg[3:0]} cout1,sum 1[3:0]};

结束

末端模块

这里说的流水线主要是硬件设计的一种算法。比如第一篇文章描述的流水线设计,就是一种系统划分组合逻辑,在各个部分(级)之间插入寄存器,临时存储中间数据的方法。

针对处理器中的流水线结构。例如,5-6个功能不同的电路单元组成一个指令处理流水线,然后将一条指令分成5-6个步骤,然后分别由这些电路单元执行,这样一条指令就可以在一个CPU时钟周期内完成,从而提高了CPU的运行速度。在通用CPU中,每个整数流水线分为四个阶段,即指令预取、解码、执行和回写结果。openrisc采用五级整数流水线。

当然,他们的核心思想是通过使用并行执行来提高效率。

总结一下,流水线就是插入寄存器,用面积换速度。

原标题:FPGA学习-流水线设计流水线设计

文章来源:【微信微信官方账号:FPGA设计论坛】欢迎添加关注!请注明文章出处。

审计唐子红