首页 > 编程知识 正文

呼吸流水灯verilog,fpga流水线设计思想

时间:2023-05-04 16:38:20 阅读:120182 作者:355

需求说明:Verilog设计基础

内容 :流水线设计

来自 :时间的诗

管线设计

前言:本文从四个部分分析管线设计,具体如下:

第一部分是什么是管线

第二部分什么时候用流水线设计?

第三部分管线使用的优缺点

第四部分流水线加法器实例

第一,什么是流水线

流水线设计是指系统地分割组合逻辑,在各部分(层次)之间插入寄存器,暂时保存中间数据的方法。

以将一个大操作分解为几个小操作为目的,由于每个步骤的小操作的时间小,所以能够提高频度,能够并行进行各小操作

因为要执行,所以数据吞吐量会提高。

第二,什么时候用流水线设计

一般在时序严格、电路工作频率高时使用流水线。 典型情况如下:

1 )功能模块之间的流水线通过乒乓缓冲进行数据交换。 代价增加了memory的数量,但与获得的巨大性能提高相辅相成

比,可以无视。

2 ) I/O瓶颈。 例如,一个运算需要输入八个数据,而memroy同时只能提供两个数据。 通过适当地划分运算步骤

输油管反而会减少面积。

3 )片上sram读取操作。 由于sram的读取操作本身是两极的流水线,所以只要下一个操作不依赖于读取结果,使用流水线是自由的

但是,事情。

4 )组合逻辑过长,例如(a-b ) c的情况下,在加法和乘法之间插入寄存器是安全的。

第三流水线使用的优缺点

1 )优点:流水线可以缩短在一个时钟周期内给定的该信号必须经过的路径长度,提高数据吞吐量,提高时钟

虽然是频率,但也会导致数据延迟。 以下是示例。

例如,在两个阶段的组合逻辑内,假设每个阶段的延迟都是相同的Tpd,则1 .没有流水线的总延迟可以在2个Tpd处,并且时钟周期被限制在2个Tpd;

2 .管线:

如果每级添加寄存器(延迟为Tco ),则每级的延迟为Tpd Tco,每级消耗1个时钟周期,流水线需要2个时钟周期

要获得第一个计算结果,称为第一次延迟,需要2*(tpdtco ),但如果要进行重复操作,则需要在一个时钟周期内完成最后一个

计算结果称为吞吐量延迟(Tpd Tco )。 只要Tco小于Tpd,管线就可以加快速度。 另外,管线

认真体验减少整个数据的操作时间,而不是减少一次操作的时间。

2 )缺点)功耗增加、面积增加、硬件复杂度增加,尤其是在cpu这样复杂逻辑的流水线中,流水越深发生

需要 hold 流水线或 reset 流水线的情况时,时间损失越大。 所以使用流水线并非有利无害,大家需权衡考虑。

第四 一个 8bit 流水线加法器的小例子

非流水线:
module add8( a, b, c); input [7:0] a; input [7:0] b; output [8:0] c; assign c[8:0] = {1'd0, a} + {1'd0, b};endmodule

采用两级流水线:第一级低 4bit,第二级高 4bit,所以第一个输出需要 2 个时钟周期有效,后面的数据都是 1 个周期
之后有效。

module adder8_2( clk, cin, cina, cinb, sum, cout); input clk; input cin; input [7:0] cina; input [7:0] cinb; output [7:0] sum; output cout; reg cout; reg cout1; //插入的寄存器 reg [3 :0 ] sum1 ; //插入的寄存器 reg [7 :0 ] sum; reg [3:0] cina_reg; reg [3:0] cinb_reg;//插入的寄存器 always @(posedge clk) //第一级流水 begin {cout1 , sum1} <= cina[3:0] + cinb [3:0] + cin ; end always @(posedge clk) begin cina_reg <= cina[7:4]; cinb_reg <= cinb[7:4]; end always @(posedge clk) //第二级流水 begin {cout ,sum[7:0]} <= {{1'b0,cina_reg[3:0]} + {1'b0,cinb_reg[3:0]} + cout1 ,sum1[3:0]} ; endendmodule

这里讲到的流水线,主要是一种硬件设计的算法,如第一条中表述的流水线设计就是将组合逻辑系统地分割,并在各
个部分(分级)之间插入寄存器,并暂存中间数据的方法。

针对处理器中的流水线结构。比如,比如 5—6 个不同功能的电路单元组成一条指令处理流水线,
然后将一条指令分成 5—6 步后再由这些电路单元分别执行,这样就能实现在一个 CPU 时钟周期完成一条指令,因此
提高 CPU 的运算速度。 一般的 CPU 中,每条整数流水线都分为四级流水, 即指令预取、 译码、 执行、 写回结果, 
openrisc采用的是 5 级整数流水线。
当然它们的核心思想都是利用并行执行提高效率。

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。