孩子都能学会的FPGA:第十九课——FPGA实现流水线操作

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

前面几节课讲解的乘法和除法运算都需要一定的系统时钟来处理,以十七课的无符号位的乘法器为例,从数据输入乘法器到结果输出需要9个时钟周期,如果系统时钟是100MHz,那这个乘法器的处理速度也就是11MHz。那如果实际工程要求这个乘法器的处理速度和系统时钟100MHz一样,能不能实现呢?

要回答上面的问题,我们就要先熟悉一下流水线。流水线,又称装配线,工业上的一种生产方式,指每一个生产单位只专注处理某一个片段的工作,以提高工作效率及产量。笔者曾经在工厂里指导过工人的装配,对流水线操作还是深有感悟的。比如有1个产品的装配需要10个串行的步骤,每个步骤需要5分钟,那组装一个产品需要50分钟,如果只有1个流水线,那1天下来也就只能装配10几个产品。有时候产品的需求量增大,1天只装配10几个产品赶不上供货,那工厂就会增加人手多几个流水线,其实就是对第1个流水线的完整复制。那2个流水线1天就能装配20多个产品,3个流水线1天就能装配30多个产品......如果一天需要装配100个产品,那就需要10条流水线即可。

如果用1条流水线上的10个人生产100个产品,大约需要10天的时间;如果改成10条流水线的100人生产100个产品,那用1天的时间就可以完成!所以增加流水线可以节省大量的时间,但是同时要消耗大量的人力资源!把流水线用到FPGA开发上,比如上面说到的乘法器,增加乘法器的流水线操作,可以加快乘法器的处理速度,但是以前用一个乘法器,现在要用多个乘法器,很明显会成倍的消耗FPGA的逻辑资源!

如下所示,假如系统时钟是100MHz,一条流水线的操作流程需要5个时钟周期,在第5个时钟周期输出结果。如果系统采用1个流水线就像操作,那系统的处理速度就是20MHz。如果采用5个流水线进行同步操作,那系统的处理速度就可以达到100MHz!看看图中最后的输出,除了前4个时钟周期无数据输出,后面是每个时钟周期有一个数据输出。

下面我们来设计十七课无符号位乘法器的流水线操作,让乘法器的处理速度到达系统时钟100MHz。由于一个乘法器处理需要9个系统时钟,那就需要使用9个乘法器组成9个流水线,控制输入的数据分别进入这9个流水线,最后控制9个流水线的输出统一进行输出。

新建pipeline文件,定义流水线的参数PIPELINE_CNT=9,同时使用计数器cnt控制数据的输出和输出。

实现了计数器cnt,同时根据cnt的值控制输入的数据进入第1级流水线,后面的8级流水线类似。

例化了8个乘法器,形成8级流水线。

最后根据流水线的输出完成系统数据的数据即可。

在仿真tb文件中产生随机的数据,双击sim文件夹下的top_tb.bat文件,完成自动化的仿真。

moselsim的仿真结果如下所示,刚开始的12个时钟无数据输出(包括产生标志信号进行的延迟),后面是每个系统时钟都要一个乘法器的输出,验证一下128*42=5376;232*92=21344;72*77=5544......,仿真功能正常!

从流水线的操作,这里说明一下FPGA设计中的一个重要原则,就是面积和时间互换原则。面积反应的是FPGA内部的资源,时间反应的是FPGA处理的速度。我们要根据时间的情况来选择到底是面积优先还是速度有效,如果FPGA的资源足够,那就可以用更大的面积来换取更快的处理速度,如果FPGA的资源比较紧张,那就只好牺牲一定的处理速度了,也就是降低性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rust国内sparse镜像源配置

文章目录 1. 遇到问题1.1 问题现象1.2 解决办法 2. 重新设置最新 sparse源3. 更多参考资料3.1 字节源3.2 ustc 源3.3 清华源3.4 其他人的总结 1. 遇到问题 有好一阵子没有更新源和安装软件了, 使用ustc的源, 更新了好一阵子, 最后安装居然还出…

养身馆推拿会员管理系统,佳易王推拿会员管理软件短信设置教程

养身馆推拿会员管理系统,佳易王推拿会员管理软件短信设置教程 一、佳易王会员管理软件大众版 部分功能简介: 1、会员信息登记 :可以直接使用手机号登记,也可以使用实体卡片,推荐用手机号即可。 2、会员卡类型 &…

压缩docker在主机的虚拟磁盘容量

我们在windows里使用docker时会发现,即使我们已经删除了无用的镜像和容器,主机里挂在docker虚拟磁盘的那个盘,可用空间也没有增加,这是因为虚拟磁盘不会自动缩小,这里我分享一个可用的解决方案。 1.先通过docker回收空…

大小堆的实现(C语言)

目录 前言 一种完全二叉树:堆 堆的概念 堆的性质 建堆的时间复杂度 建堆的空间复杂度: 小堆的实现 必要补充 堆的初始化 堆的销毁 向上调整算法 堆的插入 向下调整算法 堆的删除 获取堆顶元素 获取堆中元素个数 堆的判空 最终代码 He…

保育员个人简历精选7篇

想要在保育员职位的求职过程中脱颖而出吗,参考这7篇精选的保育员简历案例!无论您的经验如何,都能找到适合自己的简历样式及参考内容。 保育员个人简历模板下载(可在线编辑制作):来幻主简历,做好…

免费HTTPS证书

什么是HTTPS呢?HTTPS全称为Hyper Text Transfer Protocol Secure,即超文本传输安全协议。它是在HTTP的基础上加入了SSL/TLS协议,可以对传输的数据进行加密,有效防止数据被第三方截取或篡改,从而保障了用户的信息安全。…

Docker Compose简单入门

Docker Compose 简介 Docker Compose 是一个编排多容器发布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。 Docker Compose 真正的作用是在一个文件(docker-compose.yml)中定义并运…

Fiddler抓包工具之fiddler设置抓HTTPS的请求证书安装

设置抓HTTPS的请求包 基础配置: 路径:启动Fiddler 》Tools》Options》HTTPS 注意:Option更改完配置需重启Fiddler才能生效 选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求,如果是第一次会弹出证书安装提…

JS构造函数

构造函数是一种特殊的函数,主要用来初始化对象 使用场景:比如我对象与其他对象都相似,此时可以通过构造函数来快速创建多个类似的对象。 举个例子: // 大头儿子const Son {name:"大头儿子",age:6,gender:"男"…

C++基础 -33- 单目运算符重载

单目运算符重载格式 a和a通过形参确定 data1 operator() {this->a;return *this; }data1 operator(int) {data1 temp*this;this->a;return temp; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int…

maven篇---第一篇

系列文章目录 文章目录 系列文章目录前言一、什么是maven?二、Maven能为我们解决什么问题?三、说说maven有什么优缺点?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

react native 环境准备

一、必备安装 1、安装node 注意 Node 的版本应大于等于 16,安装完 Node 后建议设置 npm 镜像(淘宝源)以加速后面的过程(或使用科学上网工具)。 node下载地址:Download | Node.js设置淘宝源 npm config s…

qnx修改tcp和udp缓冲区默认大小

拷贝/home/test/qnx/qos223/target/qnx7/aarch64le/sbin/sysctl进系统中 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/s/sysctl.html kern.sbmax 默认262144,这个限制住了发送、接收缓冲器大小 ./sysctl -w kern.sbmax10000…

免费AI洗稿软件【2023最新】

很多时候我们需要通过文字来表达观点、推广产品或服务。然而,长时间的文稿创作不仅费时费力,还容易陷入表达瓶颈。许多写手和从业者纷纷寻找一款方便、高效的AI洗稿工具。 文心一言洗稿软件。这款软件以其独特的文风生成和洗稿功能而备受瞩目。用户只需…

【Qt开发流程】之事件系统3:键盘事件

序章 以下链接是拖放事件介绍和使用示例: 【Qt开发流程】之拖放操作1:介绍链接: https://blog.csdn.net/MrHHHHHH/article/details/134626484 【Qt开发流程】之拖放操作2:使用链接: https://blog.csdn.net/MrHHHHHH/article/details/134632006 以下链接是事件系统…

页面表格高度自适应

前言 现在后端管理系统主页面基本都是由三部分组成 查询条件,高度不固定,可能有的页面查询条件多,有的少表格,高度不固定,占据页面剩余高度分页,高度固定 这三部分加起来肯定是占满全屏的,那么我…

JavaWeb 分页查询

由于html不能直接从域当中直接拿数据 所以我们引入了jsp文件 数据存在了requets域当中 如果数据量很大,不可能把所有数据全部在页面展示: 数据全部在页面展示缺点: SQL执行时间过长 用户查看数据,滚动滚动条,用户体验不高 在实际开发中,分页查询, 实现: sql语句…

idea新建spring boot starter

什么是spring boot starter Spring Boot Starter 是一种 Maven 或 Gradle 依赖,它能够轻松地将相关库和框架集成到 Spring Boot 应用程序中。Starter 是一种对常见依赖项和设置的易于复用的封装,它们通常被开发人员用于创建可插拔的 Spring Boot 应用程序…

卫星影像数据查询网址(WORLDVIEW1/2/3/4、PLEIADES、SPOT系列、高景、高分1-7、资源系列、吉林一号等)

商业卫星影像数据查询网址(WORLDVIEW1/2/3/4、PLEIADES、SPOT系列、高景、高分1-7、资源系列、吉林一号等) 1、资源卫星应用中心 网址:http://www.cresda.com/CN/ 可查询国产高分1、2、3、4、5、6、7号卫星,资源三号、资源三号…

kafka3.6.0部署

部署zk https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1.tar.gz tar -xf apache-zookeeper-3.9.1.tar.gz -C /apps cd /apps/ && ln -s apache-zookeeper-3.9.1 zookeeper 修改配置bash grep -vE ^$|^# conf/zo…
最新文章