芯片设计方法学之--握手

1.面向对象

本文主要介绍握手的基本概念,读者可通过该篇文章对握手有个基本概念。也借此机会发表下自己对流水线中的握手反压的一些愚见。更深的理解可期待后续更新;

2. 握手简介

举个简单例子;

上图中sender拉高vld发送有效的数据给receiver,receiver拉高ready代表准备好接收数据。

  1. vld==1、ready==1:sender发送有效数据,receiver同时也准备好接收数据,完成一次有效数据传输;
  2. vld==1、ready==0:sender发送有效数据,receiver未准备好接收数据。反压sender,通常情况下sender需保持vld直到receiver拉高ready,完成一次传输;
  3. vld==0、ready==1:send没有数据需要发送,receiver已提前做好接收数据的准备;一旦send发起数据传输,即可完成一次握手;
  4. vld==0、ready==0:send没有数据需要传输,receiver也没有做好接收数据准备;

其实拿流水线的下级和上级很好理解,握手就体现了上下级之间的配合关系,使得流水能够正常运转;

握手与反压

握手的主要工作就是确保上下级之间的流量基本一致。关于反压可以有如下理解:

  1. 流水线上若上级处理速度大于下级处理速度,则下级需反馈信息给上级,我接收不过来你的数据了;即拉低ready;
  2. 流水线上若下级处理速度大于上级处理速度,则上级需反馈信息给下级,我处理速度跟不上你处理速度,给你的数据没那么快。即通过拉低一段时间的vld,使得上级得以喘息。

其实从这里我也突然悟出来了一个道理,握手是给了每级处理单元一个控制速度的权利。完美的流水线,应该来说是不需要通过握手来实现的(太理想了),因为还需要握手来控制数据的传输等等;

流水线中反压(拉低ready)

反压的目的都是为了屏蔽上级单元送数据来。但根据流水中的每级单元中是否有存储单元,可分为带存储器的反压和不带存储器的反压;在带存储器的反压根据对前级还是前前级的反压可分为:跨级反压、逐级反压;

不带存储器的反压

即流水线上的每一级都没有存储单元,后级与前级的耦合性高,当流水线中间某一级错误,导致整条流水线均停止工作;在上图中可以理解成,若C出于某种原因不能接收B_OUT,由于B中没有暂存空间,导致的结果就是B也不能接收A_OUT数据了。可以理解成工厂流水线里头,每一级都没有容器可以存放上一级的输出物。

特点:

1. 节省存储器资源,每一级都没有存储器;
2. 流水控制复杂,后级的流水停止,需对前面的每一级都有控制;(牵一发而动全身)

带存储器的逐级反压

如上图,和不带存储器的流水比起来,各级流水中都加入了一定的缓存容量。这样做的一个好处就是每一级与每一级之间的握手都变成了相对独立的握手模块。这里留个悬念,缓存的大小如何设定?

带存储器的跨级反压

如上图,C的反压直接跳过B,反压到A。目前我是没接触过这种设计,但是我认为这种设计也有一定的合理性以及局限性;这种结构需要求C可以无条件接收B_OUT数据,也就是单向握手,只要B给出B_OUT,C 100%可以接收;

握手与反压设计注意点

  1. sender发生数据的vld指示和receiver接收的ready指示应该为独立的逻辑产生,不可将二者扯上联系;
  2. 若存在流水,则是否为某一级流水添加存储单元、该存储单元多大都是需要考虑的点,出发点都是为了流水的效率;
  3. 流水除了考虑各级的存储深度外,不要忽略流水路上处理中的数据;

如有不当之处,欢迎交流讨论。

参考文章

数字芯片设计——握手与反压 - 知乎 (zhihu.com)

芯片设计-握手与反压(valid&ready) - 知乎 (zhihu.com)

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

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

相关文章

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】

文章目录 移位运算与乘法状态机简介SystemVerilog中的测试平台VCS 波形仿真 阻塞赋值和非阻塞赋值有限状态机(FSM)与无限状态机的区别 本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍,这里使用状态机…

【JS逆向八】逆向某企查网站的headers参数,并模拟生成 仅供学习

逆向日期:2024.02.07 使用工具:Node.js 加密方法:未知 / 标准库Hmac-SHA512 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):AES加…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法(续篇五) 1.1 种子词 ​ 种子词(seed word)通常指的是在对话中使用的初始提示或关键词,用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子,通常与对话的主题…

相机图像质量研究(9)常见问题总结:光学结构对成像的影响--工厂镜头组装

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

机器学习中常用的性能度量—— ROC 和 AUC

什么是泛化能力? 通常我们用泛化能力来评判一个模型的好坏,通俗的说,泛化能力是指一个机器学期算法对新样本(即模型没有见过的样本)的举一反三的能力,也就是学以致用的能力。 举个例子,高三的…

【EEG信号处理】时频图与时频图的观察

非常快速和松散的介绍频谱和时频分析 当我们看到一个时频图时,我们应该考虑什么,应该有什么样的问题 什么是time-frequency plots 我们知道,左边是在时间维度上,根据电极的变化来绘制的折线图,他在时间维度上的&#…

单片机——FLASH(2)

文章目录 flash (stm32f40x 41x的内存映射中区域详解)flash写数据时 flash (stm32f40x 41x的内存映射中区域详解) Main memory 主存储区 放置代码和常数 System memory 系统存储区 方式bootloader代码 OTP区 一次性可编程区 选项…

【Git版本控制 04】标签管理

目录 一、创建标签 二、查看标签 三、推送标签 四、删除标签 一、创建标签 标签tag,是对某次 commit 的⼀个标识,相当于起了⼀个别名。 相较于难以记住的 commit id , tag 很好的解决这个问题,因为 tag ⼀定要给⼀个让⼈容易…

NLP_“预训练+微调大模型”模式和Prompt/Instruct模式的异同

文章目录 “预训练微调大模型”的模式以提示/指令模式直接使用大模型“预训练微调大模型”模式和Prompt/Instruct模式的异同小结 “预训练微调大模型”的模式 经过预训练的大模型所习得的语义信息和所蕴含的语言知识,很容易向下游任务迁移。NLP应用人员可以根据自己…

JavaScript基础第四天

JavaScript 基础第四天 今天我们学习js的函数,包括普通函数、匿名函数、箭头函数以及函数作用域。 1. 函数的初体验 1.1. 什么是函数 函数是 JavaScript 中的基本组件之一。一个函数是 JavaScript 过程一组执行任务或计算值的语句。要使用一个函数,你…

qnx log写入文件 简单实现

qnx log写入文件 简单实现 #ifndef __COMMON_LOG__ #define __COMMON_LOG__#include "fcntl.h" #include "pthread.h" #include "stdarg.h" #include "unistd.h" #include <stdio.h> #include <string.h>//#define _LOG_…

Golang 基础 Go Modules包管理

Golang 基础 Go Modules包管理 在 Go 项目开发中&#xff0c;依赖包管理是一个非常重要的内容&#xff0c;依赖包处理不好&#xff0c;就会导致编译失败&#xff0c;本文将系统介绍下 Go 的依赖包管理工具。 我会首先介绍下 Go 依赖包管理工具的历史&#xff0c;并详细介绍下…