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):如果时序报告告诉你“路径太长、频率上不去”,就在那条长路径中间切一刀,插入一组寄存器。这就是流水线优化的本质。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI原生应用语音合成:助力智能政务语音服务

AI原生应用语音合成:助力智能政务语音服务 关键词:AI原生应用、语音合成、智能政务、TTS技术、自然语言处理、人机交互、政务服务升级 摘要:本文从智能政务的实际需求出发,深度解析AI原生语音合成技术的核心原理与政务场景的适配逻辑。通过“技术原理-场景落地-实战案例”的…

LangChainV1.0[08]-LCEL:LangChain Expression Language

Chain翻译成中文就是“链”&#xff0c;我们将大模型、相关工具等作为组件&#xff0c;链就是负责将这些组件按照某一种逻辑&#xff0c;顺序组合成一个流水线的方式。比如我们要构建一个简单的问答链&#xff0c;就需要把大模型组件和标准输出组件用链串联起来。 1.简单链 fro…

托盘输送机程序那些事儿

托盘输送机程序 硬件配置&#xff1a;PLC&#xff1a;1500SP F-1PN HMI&#xff1a;KTP700 Basic PN 和上位WCS通讯是通过S7读写DB背景数据块的方式实现 程序提供两个版本&#xff0c;V1是源自北起院&#xff0c;看起来比较难懂&#xff0c;各种状态字&#xff1b;V2源自外企&a…

ImageMagick 高效图像处理与自动化指南

在处理海量数字图像时&#xff0c;依靠图形化界面进行逐一操作不仅低效&#xff0c;且极易产生人为失误。ImageMagick 并非一款为绘图设计的交互软件&#xff0c;而是一个专门通过命令行执行复杂图像处理任务的二进制工具集。它被广泛应用于后端开发、自动化运维以及高性能图像…

风速weibull分布随机风速生成Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

Amphenol LTW 防水线缆 IP67/IP68 结构解析

在工业自动化、户外设备、LED 照明以及传感器系统中&#xff0c;防水线缆组件是保障系统稳定运行的重要基础件。其中&#xff0c;Amphenol LTW 作为专注于防水连接技术的品牌&#xff0c;其防水线缆在 IP67、IP68 等等级应用中具有较高的工程参考价值。 本文从工程应用角度出发…

Linux 网络编程:epoll 实现聊天室

这是 epoll 进阶实战的经典案例 —— 基于epoll 边缘触发&#xff08;ET&#xff09; 非阻塞 IO实现高并发聊天室&#xff0c;同时解决 10000 并发连接时的系统限制问题&#xff0c;是理解 epoll 在实际项目中落地的核心实践&#xff01;一、核心需求与设计思路1. 功能目标支持…

Python 虚拟环境的配置与管理指南

虚拟环境的核心原理 虚拟环境并非重新安装了一套完整的 Python&#xff0c;而是在项目目录下创建了一个包含 Python 解释器副本和独立包管理工具的轻量级目录。激活环境后&#xff0c;系统会将该目录的路径推送到环境变量的最前端&#xff0c;使得终端在调用 Python 指令时优先…

TensorFlow学习系列01 | 实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、前置知识 1、知识总结 概念 作用 归一化 统一数据范围&#xff0c;加速训练 卷积层 提取图像局部特征 池化层 压缩数据&#xff0c;增强鲁棒性 全…

强烈安利8个AI论文网站,自考学生轻松搞定毕业论文!

强烈安利8个AI论文网站&#xff0c;自考学生轻松搞定毕业论文&#xff01; 自考论文的“救星”&#xff1a;AI 工具如何改变你的写作方式 对于自考学生来说&#xff0c;撰写毕业论文往往是一项既耗时又充满挑战的任务。从选题到结构搭建&#xff0c;再到内容撰写和查重降重&…

热电联产在综合能源系统中的选址定容研究Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

广汽与华为签署全面合作框架协议,深化鸿蒙生态与AI融合

华为ai 2026年1月5日&#xff0c;广汽集团与华为终端在广州签署全面合作框架协议&#xff0c;标志着双方战略合作进一步升级至生态融合新阶段。华为常务董事、终端BG董事长余承东一行到访广汽集团番禺总部&#xff0c;与广汽集团董事长冯兴亚等高层就智能汽车技术演进、产业协同…

别再说Redis是单线程了,这才是它真正的线程模型

“Redis是单线程的。” 这句话你可能听过无数遍。面试官问你Redis为什么快,你脱口而出:"因为它是单线程的,避免了线程切换开销。"面试官满意地点点头,你也觉得自己答对了。 但这个答案,只对了一半。 从Redis 6.0开始,Redis就不再是纯粹的单线程了。它引入了…

为什么WiFi已连接却有感叹号?4种方法修复

在使用电脑连接Wi-Fi时&#xff0c;你是否遇到过无线网络图标旁边出现黄色感叹号的情况&#xff1f;这通常表示网络连接存在问题&#xff0c;导致无法正常上网。下面就为大家分享几种解决方法&#xff0c;帮助你快速恢复网络连接。 方法1&#xff1a;检查路由器与宽带是否正常 …

【开题答辩全过程】以 基于SSM的固定资产管理系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

基于多能互补的热电联供型微网优化运行Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

【开题答辩全过程】以 高校失物招领信息管理系统的设计与开发为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【AlohaMini学习笔记】第二天:初见LeRobot

LeRobot&#xff1a;面向嵌入式AI的开源机器人控制框架 在嵌入式人工智能&#xff08;Embodied AI&#xff09;研究快速发展的当下&#xff0c;机器人控制框架的“易用性、兼容性、低成本”成为推动技术普惠化的关键。 由Hugging Face主导开发的LeRobot正是这样一款面向科研与教…

综合项目实战--电子商城项目

一、摘要本研究设计并实现了一款基于 Linux 平台的轻量级商品展示与查询 Web 系统。系统采用 C 语言开发&#xff0c;通过 Socket 网络编程构建 Web 服务器&#xff0c;集成 SQLite 嵌入式数据库实现数据存储与查询&#xff0c;核心功能涵盖用户登录验证、商品列表展示、关键字…

更高效更智能,华为MatePad 11.5 S解锁高效学习体验

华为鸿蒙系统官网入口 "华为MatePad11.5S搭载超清护眼柔光屏&#xff0c;书写如纸般流畅&#xff1b;HarmonyOS6带来15%流畅度提升与AI智慧功能&#xff0c;从解题到办公全场景重构生产力体验&#xff0c;轻薄机身更适配移动学习。" 临近年末&#xff0c;华为MatePad…