news 2026/4/15 5:37:26

FPGA教程系列-流水线思想初识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA教程系列-流水线思想初识

FPGA教程系列-流水线思想初识

流水线设计是一种典型的面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗。流水线设计是完美的时间并行。因为流水线上每一级的处理都是一个时钟周期的延时,并且一动则全动,每一级的延时可以完美的掩盖起来,最高实现与流水级数相同数量的请求并行度。

简单来说,流水线思想就是:将一个耗时长的复杂任务,切分成若干个耗时短的小任务,并让它们重叠执行。

先列一个简单的例子,一个加法器如下:

`timescale 1ns / 1ps // module add1(clk,din1, din2, din3, dout, cout); input clk; input [7:0] din1; input [7:0] din2; input din3; output [7:0]dout; output cout; reg [7:0] dout; reg cout; always @(posedge clk) begin {cout,dout} <= din1 + din2 + din3; end endmodule

testbench如下:

`timescale 1ns / 1ps module test_add1; reg clk; reg [7:0] din1; reg [7:0] din2; reg din3; wire [7:0]dout; wire cout; add1 add1u( .clk (clk), .din1 (din1), .din2 (din2), .din3 (din3), .dout (dout), .cout (cout) ); initial begin clk=1; end always #5 clk=~clk; initial begin din1=8'd0; din2=8'd0; din3=1'd0; #10 din1=8'd2; din2=8'd3; din3=1'd0; #10 din1=8'd4; din2=8'd5; din3=1'd0; #10 din1=8'd8; din2=8'd11; din3=1'd1; #10 din1=8'd18; din2=8'd21; din3=1'd1; #10 din1=8'd22; din2=8'd31; din3=1'd1; #10 din1=8'd0; din2=8'd0; din3=1'd0; end endmodule

仿真结果如下:

RTL结构图:​

采用流水线思想

`timescale 1ns / 1ps module add1_pipeline( input wire clk, input wire [7:0] din1, input wire [7:0] din2, input wire din3, output reg [7:0] dout, output reg cout ); // --- 第一级流水线寄存器 --- reg cout_low_reg; // 存储低4位的进位 reg [3:0] sum_low_reg; // 存储低4位的和 reg [3:0] din1_high_reg; // 【关键】存储高4位输入,用于数据对齐 reg [3:0] din2_high_reg; // 【关键】存储高4位输入,用于数据对齐 // --- 第一级流水线逻辑 --- always @(posedge clk) begin // 1. 计算低4位,产生进位和结果 {cout_low_reg, sum_low_reg} <= din1[3:0] + din2[3:0] + din3; // 2. 【关键】同步缓存高4位数据,让它们晚一拍再参与运算 din1_high_reg <= din1[7:4]; din2_high_reg <= din2[7:4]; end // --- 第二级流水线逻辑 --- always @(posedge clk) begin // 使用【缓存过的高位数据】和【上一级产生的进位】进行运算 // 结果的高4位(含进位) 拼接 上一级的低4位结果 {cout, dout[7:4]} <= din1_high_reg + din2_high_reg + cout_low_reg; // 低4位结果直接透传到输出(已经在流水线里待了一拍了) dout[3:0] <= sum_low_reg; end endmodule

流水线的RTL:

空间切分:把“大象”切成块

不要试图一口气做完所有事情。

非流水线

  • 逻辑din1 + din2 + din3(8位加法)。
  • 这是一个“全能工匠”模式。在一个时钟周期内,电信号必须从最低位跑到最高位(进位链)。如果这个加法需要 10ns,时钟周期就必须大于 10ns(频率 < 100MHz)。这决定了系统的速度上限。

流水线

  • 逻辑:把 8位加法 切成 两个 4位加法。
  • 这是“工厂流水线”模式。工位 1:只负责算低 4 位。工位 2:只负责算高 4 位。现在每个工位只需要算 4位加法,假设耗时变成 5ns。那么时钟周期可以缩短到 5ns(频率提升到 200MHz)。系统变快了!

时间同步

这是流水线最容易出错的地方。所有参与同一级运算的数据,必须来自同一个“时代”(同一个时钟周期)。

  • 为了配合cout_temp​(它是上一拍数据的产物),原本的高位输入din1[7:4]必须等待
  • 我们需要给din1[7:4]安排一个“候车室”(寄存器),让它等一拍。
  • 到了下一拍,cout_temp​ 出来了,候车室里的din1_old也出来了,它们才是“原配”,才能在一起运算。

核心格言:流水线不仅是切分逻辑,更是管理数据的“旅行时间”,确保它们在正确的时间点相遇。


效率权衡:吞吐率 vs 潜伏期

流水线不是免费的午餐,它用“等待”换来了“速度”。

潜伏期(Latency)变长了

  • 原代码:输入数据,1个周期后出结果。
  • 流水线代码:输入数据,2个周期后才出结果。
  • 代价:对于单个数据来说,处理时间变长了。

吞吐率(Throughput)变高了

  • 虽然第一个结果要等 2 个周期,但是从第 2 个周期开始,每个时钟周期都会蹦出一个新结果
  • 而且,因为主频翻倍了(100M -> 200M),每秒钟能处理的数据总量翻倍了!

假设输入两组数据:

  • T1 时刻输入10 + 20(Data A)
  • T2 时刻输入30 + 40(Data B)

流水线中,发生了什么?

时钟周期阶段 1 (低4位处理)阶段 1 附属动作 (高位缓存)阶段 2 (高4位处理)输出结果
T1计算10+20的低4位暂存10+20的高4位(无效数据)无效
T2计算30+40的低4位暂存30+40的高4位取出10+20的高4位 + 低位进位输出 10+20 的结果
T3(处理 Data C…)(暂存 Data C…)取出30+40的高4位 + 低位进位输出 30+40 的结

T2时刻:电路的前半部分正在处理Data B(新来的)。电路的后半部分正在处理Data A(刚才剩下的)。

这就是流水线:不同的任务在同一时刻重叠执行。

总结:

  1. 心中有路(Path):看代码时,脑子里要能画出信号流动的路径。哪里是组合逻辑(跑得快但不能存),哪里是寄存器(跑得慢但能存)。
  2. 对齐意识(Alignment):永远盯着数据看,问自己:“这个数据是哪一拍的?那个数据是哪一拍的?它们能相加吗?”如果辈分不同,就必须加寄存器打拍对齐。
  3. 切分艺术(Retiming):如果时序报告告诉你“路径太长、频率上不去”,就在那条长路径中间切一刀,插入一组寄存器。这就是流水线优化的本质。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 22:15:01

护眼灯品牌排行第一名是谁?权威第一护眼灯品牌曝光,护眼超安心

儿童青少年近视率居高不下&#xff0c;劣质台灯更是雪上加霜&#xff01;权威数据显示&#xff0c;孩子每天被劣质光线照射1小时&#xff0c;半年内近视度数就可能明显上涨。可护眼台灯市场鱼龙混杂&#xff0c;虚假宣传、参数造假层出不穷&#xff0c;家长想给孩子选到靠谱的灯…

作者头像 李华
网站建设 2026/4/10 12:37:40

架构演进过程

一、单体架构优点&#xff1a; 简单&#xff1a;开发部署都很方便&#xff0c;小型项目首选 缺点&#xff1a; 项目启动慢可靠性差可伸缩性差扩展性和可维护性差性能低 二、垂直架构垂直架构是指将单体架构中的多个模块拆分为多个独立的项目。形成多个独立的单体架构。 垂直架构…

作者头像 李华
网站建设 2026/4/12 19:03:22

USACO历年青铜组真题解析 | 2024年2月Milk Exchange

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…

作者头像 李华
网站建设 2026/3/31 8:53:35

【力扣hot100题】缺失的第一个正数(12)

给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,2] 中的数字都在数组…

作者头像 李华
网站建设 2026/4/11 12:04:11

每日 AI 评测速递来啦(1.8)

司南Daily Benchmark 专区今日上新&#xff01; RFC Bench 一个用于在真实新闻语境下评估大语言模型金融虚假信息识别能力的评测基准&#xff0c;以段落级别为评测粒度&#xff0c;刻画金融新闻中语义由分散线索共同构成的上下文复杂性。 https://hub.opencompass.org.cn/da…

作者头像 李华
网站建设 2026/4/10 22:04:11

AI+教育创新:Z-Image-Turbo在教学场景中的快速部署

AI教育创新&#xff1a;Z-Image-Turbo在教学场景中的快速部署 作为一名教育科技创业者&#xff0c;你是否想过将AI图像生成技术融入在线课程&#xff1f;无论是自动生成教学插图、创建个性化学习素材&#xff0c;还是让学生通过文字描述快速可视化知识点&#xff0c;Z-Image-Tu…

作者头像 李华