Verilog流水线设计——Pipeline

这篇具有很好参考价值的文章主要介绍了Verilog流水线设计——Pipeline。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

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

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

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

2. 面临问题

FPGA一个较大的优势是其并行处理机制,即利用并行架构实现信号/数据处理的功能。
大家首先想到的方法就是复制多份数据处理电路,如下图所示:
Verilog流水线设计——Pipeline
Verilog流水线设计——Pipeline

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

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

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

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

3. Pipeline解决方案

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

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

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

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

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

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

4. 小结

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

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

参考文献

[1]《多线程优化-pipeline模式》, https://zhuanlan.zhihu.com/p/51152731
[2]《流水线技术原理和Verilog HDL实现》, https://www.cnblogs.com/shengansong/archive/2011/05/23/2054414.html


对我们发布文章感兴趣的小伙伴,请关注我们公众号 “FpgaHome” 吧。文章来源地址https://www.toymoban.com/news/detail-473805.html

到了这里,关于Verilog流水线设计——Pipeline的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Jenkins】pipeline流水线

    流水线既能作为任务的本身,也能作为jenkinsfile,使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同事参与进来,同时也可以编辑开发jenkinswebui不能完成的复杂的构建逻辑,作

    2024年02月09日
    浏览(52)
  • 使用Gitlab管理Jenkins Pipeline流水线

    1、首先需要将已经调试好的Jenkins pipeline文件上传到git库中,推荐以 Jenkinsfile 命名 放至git库根目录 上传完成后 在git库中可以查看到 如下图所示: 2、配置Jenkins任务 完成后pipeline脚本会存放在git库上面进行管理编辑了,当我们构建此任务时会从git库中获取pipeline流水线进行执

    2024年02月12日
    浏览(40)
  • 【计组实验】基于Verilog的多周期非流水线MIPS处理器设计

    设计多周期非流水线MIPS处理器,包括: 完成多周期MIPS处理器的Verilog代码; 在Vivado软件上进行仿真; 编写MIPS代码验证MIPS处理器; 相关代码及资源的下载地址如下: 本实验的Vivado工程文件和实验文档:Multi-Cycle MIPS Processor.zip(272KB) QtSpim 9.1.23和Vivado 2019.2的安装包:QtSpim Viv

    2024年02月11日
    浏览(34)
  • 华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

    华为云流水线服务 CodeArts Pipeline ,旨在提升编排体验,开放插件平台,并提供标准化的DevOps企业治理模型,将华为公司内的优秀研发实践赋能给伙伴和客户。 灵活编排、高效调度 开放流水线插件 内置企业DevOps研发治理模型 体验通道:https://devcloud.cn-north-4.huaweicloud.com/cicd/

    2024年02月15日
    浏览(33)
  • (十四)devops持续集成开发——jenkins流水线使用pipeline方式发布项目

    本节内容我们使用另外一种方式pipeline实现项目的流水线部署发布,Jenkins Pipeline是一种允许以代码方式定义持续集成和持续交付流水线的工具。通过Jenkins Pipeline,可以将整个项目的构建、测试和部署过程以脚本的形式写入Jenkinsfile中,实现对整个流程的可视化管理和控制。在

    2024年02月21日
    浏览(47)
  • 解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线

    本文来自: 杨洪丽 极狐GitLab 高级网站可靠性工程师(SRE) 只使用极狐GitLab 存放代码? 那你就 OUT 啦! 如果你也遇到了如图 A / B / C / D 各位同学的烦恼,不要错过这篇能够让你日常工作更高效的内容。 关于 A 和 B 同学的烦恼,可以使用  Webhook 触发 Pipeline ,打通工作消息通知

    2024年02月04日
    浏览(40)
  • 流水线乘法器的原理及verilog代码

    二进制数乘法的显著特点就是可以将乘法转换为移位,乘2就是左移一位,乘2^n就是左移n位。而一个二进制数又可以看成是由若干个2的i次方的和。 设被乘数和乘数分别为M、N,且都是32位的二进制数,乘积结果为64位 的向量CO则 。 所以乘法可以由移位电路和加法器完成。计算

    2024年02月10日
    浏览(30)
  • FPGA流水线除法器(Verilog)原理及实现

      除法器的计算过程如下图所示。 假设数值的位宽为N。 Step1:分别将被除数和除数扩展至原来2倍位宽(2N),被除数在其左边补N位0,除数在其右边补N位0; Step2:将被除数依次左移(每次左移1位),末位补数值(该数值为被除数高N位与除数高N位的商),高N位为被除数高

    2024年02月11日
    浏览(21)
  • 基于verilog的四级流水线实现并行fft16(可计算小数和负数)

    目录 夯实基础--FFT算法 定点运算--verilog实现小数运算 Verilog代码实现  FFT系数 W 的准备  输入数值的初始化 蝶形运算端点处的值 仿真结果展示 总结        FFT是DFT的一种快速算法而不是一种新的变换,他可以在数量级的意义上提高运算速度。它主要有两种实现方法:一种是

    2024年02月05日
    浏览(37)
  • 基于Verilog HDL的FFT算法硬件实现(8点,三级流水线,DIT-FFT)

    关于fft的相关知识,在之前的文章中,有过介绍,这里不再具体介绍,可以参考学习。 从傅里叶级数(FS)到傅里叶变换(FT)最后到离散傅里叶变换(DFT)_小张爱学习哦的博客-CSDN博客_fs傅里叶级数 FFT原理(基2DIT-FFT)及C语言编程思路及实现_小张爱学习哦的博客-CSDN博客_c语言

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包