南京观海微电子----Verilog流水线设计——Pipeline

1. 前言

在工程师实际开发过程中,可能会经常遇到这样的需求:数据从数据源端不断地持续输入FPGA,FPGA需要对数据进行处理,最后将处理好的数据输出至客户端。

在数据处理过程中,可能需要一系列的处理步骤。比如常规的信号进行处理步骤有(这里的处理步骤只是举个例子):信号解调、滤波、傅里叶变换。

假如数据源每10ns输入一个数据,一个采用数据经过信号解调需要10ns,完成滤波需20ns,傅里叶变换需要30ns。我们该如何用verilog语言设计硬件电路使得数据处理效率高效?

2. 面临问题

FPGA一个较大的优势是其并行处理机制,即利用并行架构实现信号/数据处理的功能。

大家首先想到的方法就是复制多份数据处理电路,如下图所示:

图片

图片

将数据处理电路复制6份,这样即便每路数据处理需要60ns,也能保证整个由6路处理链路组成的数据模块能处理每10ns输出一个数据的数据源。

这种解决方案的确利用了FPGA独特的优势,但面临的问题是显而易见的,它需要消耗大量的硬件资源。比如当处理算法较复杂时,一条处理链路可能就用掉了FPGA相应60%的资源,这样除非换更大容量的FPGA,否则在当前FPGA上即使复制两遍处理链路的电路都是不支持的。

此外,我们深入分析会发现,电路虽然被复制了6份,但在同一时刻电路被使用率是很低的。假设输入一个数据时刻为0ns,则在第50ns时,真正处于工作状态的电路如下图所示(黄色标的区域):

图片

可见同一时刻,工作的电路比例很低,其它白色的电路模块都是闲置的未工作的电路。

3. Pipeline解决方案

所谓流水线(pipeline)处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行。

这使得操作执行速度只与流水线输入的速度有关,而与处理所需的时间无关。这样,在理想的流水操作状态下,其运行效率很高。

比如仍然以上面信号处理例子为例,我们不需要去复制6份同样的电路,而是去优化我们单条信号处理电路。利用pipeline的设计理念,我们需要把处理时间大于10ns的电路模块拆分成多个小于等于10ns的子电路(操作信号处理工作量分成若干个时间上均衡的处理段),并且每个子电路的输入是前一级子电路的输出,每一级子电路都能锁存当前时钟周期的输出结果。改造后的电路如下图所示:

图片

对于一个输入数据的样本来说,数据是串行被处理的,但对于多个输入数据来说,各个处理阶段是并行执行的,所以数据处理从整体上看是并行执行的,由于是并行执行,所以能够充分利用FPGA资源。

需要注意的是,在工作时钟频率一定的情况下,pipeline的设计思路并不会提高对单个数据的处理速度,但该设计方式可以极大提高数据的吞吐率。同时由于pipeline的设计方式降低了FPGA寄存器间的传播延时,反而又使得设计出来的电路能以更高的系统时钟进行工作,某种程度上又会提高FPGA系统的工作速度获取更快的计算处理速率。

由于网上pipeline示例代码资源很多,本文就不提供pipeline的示例代码了。

4. 小结

利用pipeline的设计方法,可以提高FPGA系统的工作速度。这种方法可广泛运用于各种设计,特别是大型的、对速度要求较高的系统设计。虽然有时候采用流水线反而会增大对资源的使用,但是它可降低寄存器间的传播延时,保证系统维持高的系统时钟速度。

在实际应用中,考虑到资源的使用和速度的要求,可以根据实际情况来选择流水线的级数以满足设计需要。

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

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

相关文章

2023 China DevOpsDays(DOD) DXCon 国际数字化转型与创新管理企业峰会:核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展,数字化转型已成为企业持续发展的必经之路。2023年的China DevOpsDays & DXCon国际数字化转型与创新管理企业峰会,汇集了业界顶尖的专家、学者和企业领袖,共同探讨数字化转型的最新趋势和实践。本文将深入剖析大会的核…

记一次DateTimeFormat注解的坑

记一次DateTimeFormat注解的坑 背景:在用Echarts做图表时,前端传两个日期参数,获取日期区间的图表数据。想遵循RESTful风格,所以使用get请求获取date参数。前端读取当前日期,将七天前日期和当前日期作为参数传给后端&…

springmvc上传与下载

文件上传 结构图 导入依赖 <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId…

git提交文本或者word到git教程,git创建仓库时候自带

简易的命令行入门教程: Git 全局设置: git config --global user.name “XX” git config --global user.email “XXXqq.com” 创建 git 仓库: mkdir test cd test git init touch README.md git add README.md git commit -m “first commit” git remote add origin https:…

C++系统笔记教程----vscode远程连接ssh

C系统笔记教程 文章目录 C系统笔记教程前言开发环境配置总结 前言 开发环境配置 Ubuntu20.24VScode 如果没有linux系统&#xff0c;但是想用其编译&#xff0c;可以使用ssh远程连接。 首先进入vscode,打开远程连接窗口&#xff08;蓝色的小箭头这&#xff09; 选择连接到主机…

红队打靶练习:NULLBYTE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、dirsearch 2、gobuster WEB web信息收集 图片信息收集 hydra爆破 sql注入 闭合 爆库 爆表 爆列 爆字段 hashcat SSH登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan…

ChatGPT 未来学习手册

原文&#xff1a;Learn ChatGPT: The Future of Learning 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 “学习 ChatGPT”是任何对人工智能在教育中的作用感兴趣的人必读的书。这本开创性的书探讨了 ChatGPT 的潜力&#xff0c;这是一个强大的人工智能平台&#xff0…

LeetCode、2336. 无限集中的最小数字(中等,小顶堆)

文章目录 前言LeetCode、2336. 无限集中的最小数字题目链接及类型思路代码题解 前言 博主所有博客文件目录索引&#xff1a;博客目录索引(持续更新) LeetCode、2336. 无限集中的最小数字 题目链接及类型 题目链接&#xff1a;2336. 无限集中的最小数字 类型&#xff1a;数据…

uni-app中代理的两种配置方式

方式一: 在项目的 manifest.json 文件中点击 源码视图 在最底部的vue版本下编写代理代码 方式二: 在项目中创建 vue.config.js 文件然后进行配置 在页面中发起请求 完整的url&#xff1a;http://c.m.163.com/recommend/getChanListNews?channelT1457068979049&size10 …

【GoLang入门教程】Go语言几种标准库介绍(五)

如何解决大模型的「幻觉」问题&#xff1f; 文章目录 如何解决大模型的「幻觉」问题&#xff1f;前言几种库image库 (常见图形格式的访问及生成)关键概念和类型&#xff1a;示例 IO库示例 math库(数学库)常用的函数和常量&#xff1a;示例 总结专栏集锦写在最后 前言 上一篇&a…

JVM垃圾回收机制及思维导图

一、Java垃圾回收机制 在java中&#xff0c;程序员是不需要显示的去释放一个对象的内存的&#xff0c;而是由虚拟机自行执行。在JVM中&#xff0c;有一个垃圾回收线程&#xff0c;它是低优先级的&#xff0c;在正常情况下是不会执行的&#xff0c;只有在虚拟机空闲或者当前堆内…

JavaScript 类型判断及类型转换规则

文章目录 JavaScript 类型及其判断使用 typeof 判断类型使用 instanceof 判断类型使用 constructor 和 Object.prototype.toString 判断类型JavaScript 类型及其转换JavaScript 函数参数传递cannot read property of undefined 问题解决方案分析一道网红题目JavaScript 类型判断…