Zynq开发实践(FPGA之流水线和冻结)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        谈到fpga相比较cpu的优势,很多时候我们都会谈到数据并发、边接收边处理、流水线这三个方面。所以,第三个优势,也就是流水线的概念,对大家来说其实并不陌生。而且大家如果学的是计算机科学与技术专业,那么肯定会学过计算机组成原理或者是计算机体系结构这些课程,里面谈到cpu设计的时候,也会涉及到流水线的概念。

1、流水线基础

        cpu的流水线其实是比较直观的。如果是单周期cpu,那么就相当于一个状态机了,任何时候就只有一个指令在处理。但是如果cpu是多周期,那么意味着任何一个周期内可能有几条指令在处理。之所以会这样,是因为采用了流水线的概念。假设cpu的处理分成了三个阶段,分别是取值、译码和执行。那么最理想的情况,就是同一时刻有三条指令在处理,一条在取指阶段,一条在译码阶段,一条在执行阶段。

2、流水线的注意事项

        如前面所说,流水线分的越细,就意味着单位时间内的吞吐量就越多。还是以cpu为例,如果cpu只是单周期处理,那么一个周期内只能有一条指令在处理,而流水线的思路可以让我们同时处理多条指令。因此,在设计流水线的时候,一个很重要的原则,就是不同阶段之间的时间尽可能等同。这样才不会出现木桶效应。

        所谓木桶效应,就是如果一个阶段的处理时间过长,那么其他阶段都要逼迫等待这个阶段完成。鉴于这个原因,我们也看到cpu的流水线越来越长,从三级流水线、五级流水线,到七级流水线、九级流水线、十一级流水线。整体上流水线的长度越长,效率会越来越高,不过复杂度也是越来越复杂。

3、流水线冻结

        流水线冻结是经常发生的现象。还是以cpu为例,假设cpu某一个阶段的处理突然需要花很多花很多的时间,例如除法、浮点、访存等等,这个时候就会产生流水线冻结。冻结的时候,除了这个阶段的指令还在处理,其他阶段的指令处理都被冻结了,这就是流水线冻结。等到那个阶段的所有工作都处理好了,流水线重新开始流动。

4、举例说明

        为了说明流水线处理的基本原理,我们首先写一个简单的数据处理过程,流程很简单,

always@(posedge clk or negedge rst)if(!rst) begindata1 <= 4'h0;data2 <= 4'h0;data3 <= 4'h0;endelse if(!freeze) begindata1 <= in_data;data2 <= data1;data3 <= data2;end

        首先,data1、data2、data3初始化为0。只要流水线没有freeze,整个数据传输的过程就会这样一直走下去。那么流水线什么时候freeze呢?

always@(posedge clk or negedge rst)if(!rst)hang <= 1'b0;else if(hang)hang <= 1'b0; // freeze one clockelse if(data1[0] && !hang)hang <= 1'b1; // only freeze in first clockassign freeze = data1[0] & !hang;

        这里freeze是一个wire信号,它取决于两点,第一点当前data1是不是奇数,第二点是确认hang是不是0,即当前是不是已经处于hang状态。hang的时间可以很长,比如是2个clock、3个clock,或者是等待某个事件发生等等。

        这里需要注意下hang要比freeze晚处理,并且hang恢复为0的操作要放在前面,这样处理的优先级才比较高。当然这里的freeze不仅仅要在这里处理,还得把它送给数据输入端,这样才能从源头控制好输入,防止数据丢失。

always@(posedge clk or negedge rst)if(!rst)num <= 4'h0;else if(!freeze) beginif(num == 4'h9)num <= 4'h0;elsenum <= num + 1;end

        完成了freeze生成、hang的生成和恢复、freeze发送给数据输入端这几个动作,整个处理就算是基本告一段落。

5、验证和测试

        开发的时候,如果verilog代码过多,可以切分到不同的module里面,这样也比较简单一点,

module pipeline_top(input clk,input rst,output led);wire[3:0] num;	
wire freeze;trigger trigger(.clk(clk),.rst(rst),.freeze(freeze),.num(num));pipeline pipeline(.clk(clk),.rst(rst),.in_data(num),.freeze(freeze),.led(led));endmodule

        有了top文件之后,接下来就是写好testbench文件,准备开始生成波形,

`timescale 1ns/1ps
module test();reg rst;
reg clk;
wire out;initialbeginrst = 1;clk = 0;#12 rst = 0;#21 rst = 1;#1000 $finish;endinitial
beginwhile(1)clk = #5 !clk;
endpipeline_top pipeline_top(.rst(rst),.clk(clk),.led(out));initial
begin$dumpfile("hello.vcd");$dumpvars(0, test);
endendmodule

        不出意外的话,就可以看到对应的波形。验证的时候,没有必要导入所有的信号。一方面信号比较多,很多信号是重复的,比如clock、rst,还有wire信号;另外一方面信号多了,都放在一起也不容易分析。所以选取一个module为主,其他需要的信号拖过来即可。稍微调整下顺序,就可以一个、一个去分析了,

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

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

相关文章

接口保证幂等性你学废了吗?

接口幂等性定义&#xff1a;无论一次或多次调用某个接口&#xff0c;对资源产生的副作用都是一致的。 简单来说&#xff1a;用户由于各种原因&#xff08;网络超时、前端重复点击、消息重试等&#xff09;对同一个接口发了多次请求&#xff0c;系统只能处理一次&#xff0c;不能…

入行FPGA选择国企、私企还是外企?

不少人想要转行FPGA&#xff0c;但不知道该如何选择公司&#xff1f;下面就来为大家盘点一下FPGA大厂的薪资和工作情况&#xff0c;欢迎大家在评论区补充。一、老牌巨头在 FPGA设计 领域深耕许久&#xff0c;流程完善、技术扎实&#xff0c;公司各项制度都很完善&#xff0c;前…

考研总结,25考研京区上岸总结(踩坑和建议)

我的本科是一所普通的双非&#xff0c;其实&#xff0c;从我第一天入学时候&#xff0c;我就想走出去&#xff0c;开学给我带来的更多是失望&#xff08;感觉自己高考太差劲了&#xff09;&#xff0c;是不甘心&#xff08;自己一定可以去更好的地方&#xff09;。我在等一次机…

基于数据挖掘的当代不孕症医案证治规律研究

标题:基于数据挖掘的当代不孕症医案证治规律研究内容:1.摘要 背景&#xff1a;随着现代生活方式的改变&#xff0c;不孕症的发病率呈上升趋势&#xff0c;为探索有效的中医证治规律&#xff0c;数据挖掘技术为其提供了新的途径。目的&#xff1a;运用数据挖掘方法研究当代不孕症…

《sklearn机器学习》——调整估计器的超参数

GridSearchCV 详解&#xff1a;网格搜索与超参数优化 GridSearchCV 是 scikit-learn 中用于超参数调优的核心工具之一。它通过系统地遍历用户指定的参数组合&#xff0c;使用交叉验证评估每种组合的性能&#xff0c;最终选择并返回表现最优的参数配置。这种方法被称为网格搜索&…

一站式可视化运维:解锁时序数据库 TDengine 的正确打开方式

小T导读&#xff1a;运维数据库到底有多复杂&#xff1f;从系统部署到数据接入&#xff0c;从权限配置到监控告警&#xff0c;动辄涉及命令行、脚本和各种文档查找&#xff0c;一不留神就可能“翻车”。为了让 TDengine 用户轻松应对这些挑战&#xff0c;我们推出了《TDengine …

多线程同步安全机制

目录 以性能换安全 1.synchronized 同步 &#xff08;1&#xff09;不同的对象竞争同一个资源&#xff08;锁得住&#xff09; &#xff08;2&#xff09;不同的对象竞争不同的资源&#xff08;锁不住&#xff09; &#xff08;3&#xff09;单例模式加锁 synchronized …

多路复用 I/O 函数——`select`函数

好的&#xff0c;我们以 Linux 中经典的多路复用 I/O 函数——select 为例&#xff0c;进行一次完整、深入且包含全部代码的解析。 <摘要> select 是 Unix/Linux 系统中传统的多路复用 I/O 系统调用。它允许一个程序同时监视多个文件描述符&#xff08;通常是套接字&…

嵌入式碎片知识总结(二)

1.repo的一个问题&#xff1a;repo init -u ssh://shchengerrit.bouffalolab.com:29418/bouffalo/manifest/bouffalo_sdk -b master -m allchips-internal.xml /usr/bin/repo:681: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in…

java中二维数组笔记

课程链接:黑马程序员java零基础[上] 1.二维数组的内存分布 在 Java 中&#xff0c;二维数组并不是一整块连续的二维空间&#xff0c;而是数组的数组。具体而言,在声明一个二维数组&#xff1a;如int[][] arr new int[2][3];时&#xff0c;内存中会发生如下: 1.1 栈上的引用变…

系统架构设计师备考第13天——计算机语言-多媒体

一、多媒体基础概念媒体的分类 感觉媒体&#xff1a;人类感官直接接收的信息形式&#xff08;如声音、图像&#xff09;。表示媒体&#xff1a;信息的数字化表示&#xff08;如JPEG图像、MP3音频&#xff09;。显示媒体&#xff1a;输入/输出设备&#xff08;如键盘、显示器&am…

指针高级(1)

1.指针的运算2.指针运算有意义的操作和无意义的操作、#include <stdio.h> int main() {//前提条件&#xff1a;保证内存空间是连续的//数组int arr[] { 1,2,3,4,5,6,7,8,9,10 };//获取0索引的内存地址int* p1 &arr[0];//通过内存地址&#xff08;指针P&#xff09;…

【可信数据空间-Trusted Data Space综合设计方案】

可信数据空间-Trusted Data Space综合设计方案 一.简介与核心概念 1.什么是可信数据空间 2.核心特征 3.主要应用场景 二、 产品设计 1. 产品定位 2. 目标用户 3. 核心功能模块 a. 身份与访问管理 b. 数据目录与服务发现 c. 策略执行与合约管理 d. 数据连接与计算 e. 审计与溯源…

技术方案之Mysql部署架构

一、序言在后端系统中&#xff0c;MySQL 作为最常用的关系型数据库&#xff0c;其部署架构直接决定了业务的稳定性、可用性和扩展性。你是否遇到过这些问题&#xff1a;单机 MySQL 突然宕机导致业务中断几小时&#xff1f;高峰期数据库压力过大&#xff0c;查询延迟飙升影响用户…

js语言编写科技风格博客网站-详细源码

<!-- 科技风格博客网站完整源码 --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <ti…

AI如何理解PDF中的表格和图片?

AI的重要性已渗透到社会、经济、科技、生活等几乎所有领域&#xff0c;其核心价值在于突破人类能力的物理与认知边界&#xff0c;通过数据驱动的自动化、智能化与优化&#xff0c;解决复杂问题、提升效率并创造全新可能性。从宏观的产业变革到微观的个人生活&#xff0c;AI 正在…

Graphpad Prism 实战教程(一):小鼠体重变化曲线绘制全流程(含数据处理与图表美化)

在药理实验、动物模型构建等科研场景中,小鼠体重变化数据是评估实验干预效果(如药物安全性、疾病进展影响)的核心指标之一。将零散的体重数据转化为直观的折线图,不仅能清晰呈现体重随时间的波动趋势,更是后续结果解读与论文图表呈现的关键步骤。本文将从 Excel 数据整理开…

计算机视觉(六):腐蚀操作

腐蚀&#xff08;Erosion&#xff09;是计算机视觉和图像处理中一种基础且至关重要的形态学操作。它与膨胀&#xff08;Dilation&#xff09;互为对偶&#xff0c;共同构成了形态学处理的基石。腐蚀操作主要用于缩小前景物体的面积&#xff0c;去除图像中的噪声&#xff0c;以及…

AI随笔番外 · 猫猫狐狐的尾巴式技术分享

&#x1f380;【开场 咱才不是偷懒写博客】&#x1f43e;猫猫趴在键盘边&#xff0c;耳朵一抖一抖&#xff1a;“呜呜呜……明明说好要写技术总结&#xff0c;结果咱脑袋里全是尾巴……要不今天就水一篇随意的 AI 技术分享算啦&#xff1f;”&#x1f98a;狐狐把书卷轻轻放在桌…

数据分析与挖掘工程师学习规划

一、数学与统计学基础概率论与数理统计随机变量、概率分布&#xff08;正态分布、泊松分布等&#xff09;、大数定律、中心极限定理假设检验、置信区间、方差分析&#xff08;ANOVA&#xff09;、回归分析贝叶斯定理及其在分类问题中的应用&#xff08;如朴素贝叶斯算法&#x…