【手撕代码】握手机制

文章目录

    • 为什么要握手
      • 握手信号无非3种可能
    • 怎样实现握手
      • 案例一:数据反压
    • 参考链接

为什么要握手

  • 跨时钟域处理:
    在这里插入图片描述

  • 握手信号法其实也用到了脉冲展宽的方法,只是展宽信号的变化条件不同。因为如果不对脉冲进行展宽,慢速时钟域的时钟很有可能无法采集到快速时钟域的信号,所以要在脉冲展宽的基础上加反馈信号,即握手机制。

握手信号无非3种可能

  • valid先变高:上游master提供的valid信号随数据一起拉高,但下游slave过一段时间才能准备好ready信号
    在这里插入图片描述
  • ready先变高:
    在这里插入图片描述
  • valid、ready一起变高:
    在这里插入图片描述

怎样实现握手

案例一:数据反压

  • 代码
`timescale 1ns/1nsmodule handshake(input   clk,input   rst_n,input           valid_i,input   [7:0]   data_i,output          ready_o,output  [7:0]   data_o,input           ready_i,output          valid_o
);reg [7:0]   data_o_r;
reg valid_o_r;assign ready_o = ready_i;always@(posedge clk or negedge rst_n)beginif(!rst_n)begindata_o_r <= 8'b0;end else if(valid_i && ready_i)begindata_o_r <= data_i * 2;end
endalways@(posedge clk or negedge rst_n)beginif(!rst_n)beginvalid_o_r <= 1'b0;end else if(ready_i)beginvalid_o_r <= valid_i;end
endassign data_o = data_o_r;
assign valid_o = valid_o_r;endmodule
  • testbench
`timescale 1ns/10psmodule handshake_tb();reg clk;
reg rst_n;reg         valid_i;
reg [7:0]   data_i;
wire        ready_o;wire    data_o;
reg     ready_i;
wire    valid_o;always #10 clk = ~clk;initial beginclk = 0;rst_n = 0;data_i = 8'd0;valid_i = 1'd0;ready_i = 1'd1;#15rst_n = 1'b1;#15rst_n   <= 1'b1;data_i  <= 8'b0000_1000;valid_i <= 1'd0;    //upstream data invalidready_i <= 1'd1;    //downstream ready#20data_i <= 8'b0111_1000;valid_i <= 1'd1;     //upstream data valid#20data_i  <= 8'b0100_0100;    //upstream data change#20valid_i <= 1'd0;     //upstream data invalid#20data_i  <= 8'b0010_0100;valid_i <= 1'd1;    //upstream data validready_i <= 1'd0;    //downstream not ready#20ready_i <= 1'b1;    //downstream ready#20valid_i <= 1'b0;    //upstream data invalid#500$stop();
endhandshake u_handshake(.clk            (clk    ),.rst_n          (rst_n  ),.valid_i        (valid_i),.data_i         (data_i ),.ready_o        (ready_o),.data_o         (data_o ),.ready_i        (ready_i),.valid_o        (valid_o)    );endmodule

结果
在这里插入图片描述

参考链接

  1. Verilog手撕代码(8)握手机制
  2. cdc跨时钟域处理-结绳握手法

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

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

相关文章

PromptCraft-Robotics部署步骤和问题记录

GitHub - microsoft/PromptCraft-Robotics: Community for applying LLMs to robotics and a robot simulator with ChatGPT integration 部署环境&#xff1a;UE4.27 Visual Studio 2022 Arisim1.8.1 可参考&#xff1a;git clone https://github.com/Microsoft/AirSim.gi…

用promise实现批量请求数据,同时支持控制请求的并发数

假设有个业务场景,要求:可以批量请求数据,所有的 URL 地址在 urls 参数中,同时可以通过 max 参数控制请求的并发度,当所有请求结束之后,需要执行 callback 回掉函数。 JavaScript代码实现 async function sendRequest(urls, max, callback) {// 用于存储所有请求的promi…

Java三方库-单元测试

文章目录 Junit注解常用类无参数单测带参数的单测 Junit 主要版本有4和5版本&#xff0c;注解不太一样&#xff0c; 4迁移5参考官方文档 主要记录下常用的一些操作 其他复杂操作见官网 https://junit.org/junit5/docs/current/user-guide/#overview-java-versions 引入5.9…

WSL Ubuntu 如何设置中文语言?

本章教程,主要介绍如何在WSL Ubuntu 如何设置中文语言。 操作系统:Windows 10 Pro 64 WSL子系统:Ubuntu 20.04 LTS 一、安装中文语言包 sudo apt install language-pack-zh-hans二、设置中文语言 sudo dpkg-reconfigure locales选择en_US.UTF-8 和 zh_CN.UTF-8 选择zh_CN.…

Java虚拟机(JVM)中符号引用(symbolic reference)和直接引用以及转化过程

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;符号引用&#xff08;symbolic reference&#xff09;和直接引用&#xff08;direct reference&#xff09;是两种不同的引用方式。了解这两种引用方式有助于更深入地理解Java的运行时机制&#xff0c;特别是类加载和方法…

jps命令解释以及用法

JPS命令是Linux系统中的一个常用命令&#xff0c;用于显示Java进程的相关信息。下面是JPS命令的详解&#xff1a; JPS命令是Java Development Kit&#xff08;JDK&#xff09;提供的一个工具&#xff0c;用于列出JVM进程&#xff08;Java虚拟机进程&#xff09;的信息。它通常…

39 - 安全技术与防火墙

39、安全技术和防火墙 一、安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督。不主动介入&#xff0c;默默看着你&#xff08;监控&#xff09;。 入侵防御系统&#xff1a;透明模式工作&#xff0c;数据包&#xff0c;网络监控…

TextArea是一个用于显示和编辑多行可滚动文本的控件,通常用于需要用户输入或展示大量文本的应用中

TextArea 是一个用于显示和编辑多行可滚动文本的控件&#xff0c;通常用于需要用户输入或展示大量文本的应用中。以下是 TextArea 中常用的属性、信号和方法的详解&#xff1a; 常用属性 text: 描述&#xff1a;用于设置或获取显示的文本内容。类型&#xff1a;string示例&…

python-(opencv)视频转glf

文章目录 前言python-(opencv)视频转glf1. 下载 opencv-python2. cv2&#xff08;OpenCV&#xff09;和imageio的区别3. demo源码 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说…

youlai-boot项目的学习(4) 前后端本地部署

环境 1、macOS, brew, IntelliJ IDEA, WebStrom 2、后端&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git , master, 9a753a2e94985ed4cbbf214156ca035082e02723 3、前端&#xff1a;https://gitee.com/youlaiorg/vue3-element-admin.git, master, 66b913ef01dc880ad…

mobaxterm x11 转发Ubuntu mac

目录 royal tsx —— 一款Mac平台MobaXterm平替工具 mobaxterm x11 转发Ubuntu 软件 royal tsx —— 一款Mac平台MobaXterm平替工具 Royal Apps Termius Mac mobaxterm x11 转发Ubuntu 软件 所以直接在 ssh 的时候加上 - X 就可以了 ssh -X -p xxx usernameIP 运行 xclock …

递归函数设计技巧

如何设计递归函数 要学会如何设计递归函数&#xff0c;首先要识别什么样的问题才适合递归函数求解&#xff0c;那么我们可以通过数学归纳法&#xff0c;分析问题&#xff0c;观察问题是否符合相关性质。 数学归纳法 数学归纳法&#xff0c;是一种基本的数学证明方法&#xff0c…

深度解析RocketMq源码-IndexFile

1.绪论 在工作中&#xff0c;我们经常需要根据msgKey查询到某条日志。但是&#xff0c;通过前面对commitLog分析&#xff0c;producer将消息推送到broker过后&#xff0c;其实broker是直接消息到达broker的先后顺序写入到commitLog中的。我们如果想根据msgKey检索一条消息无疑…

Zookeeper:基于Zookeeper的分布式锁

一、Zookeeper分布式锁原理 二、Zookeeper JavaAPI操作 1、Curator介绍 Curator是Apache Zookeeper的Java客户端。常见的Zookeeper Java API&#xff1a; 原生Java API。ZkClient。Curator。 Curator项目目标是简化Zookeeper客户端的使用。Curator最初是Netfix研发的&#xf…

LIMS系统选型时应该避免哪些误区呢

LIMS实验室管理系统在选型、实施及使用过程中&#xff0c;确实存在一些常见的误区。以下是对这些误区的详细解析和归纳&#xff1a; 一、误区 1、只关注功能而忽视用户需求 在LIMS系统的选型过程中&#xff0c;实验室可能过于关注系统的功能和技术特性&#xff0c;而忽视了实…

42.option方法给服务端和客户端配置参数

客户端是Bootstrap.option方法配置参数。 服务端有两个: 1.ServerBootstrap.option方法,给ServerSocketChannel配置参数的。 2.ServerBootstrap.childOption方法,给SocketChannel配置参数的。 package com.xkj.client;import com.xkj.message.*; import com.xkj.protoco…

K近邻回归原理详解及Python代码示例

K近邻回归原理详解 K近邻回归&#xff08;K-Nearest Neighbors Regression, KNN&#xff09;是一种基于实例的学习算法&#xff0c;用于解决回归问题。它通过找到输入数据点在特征空间中最相似的K个邻居&#xff08;即最近的K个数据点&#xff09;&#xff0c;并使用这些邻居的…

C++11的可变参数模板

可变参数模板 什么是可变参数模板的可变参数展开参数包emplace系列函数引例emplace系列函数 什么是可变参数 printf和scanf中就涉及可变参数 这里三个点就代表可变参数&#xff0c;意思就是不管你传多少个参数&#xff0c;都可以接收 printf("%d",x); printf("…

狼牙山短视频:成都柏煜文化传媒有限公司

狼牙山短视频&#xff1a;记录自然与历史的交融 随着短视频的兴起&#xff0c;我们得以在短短几分钟内&#xff0c;跨越千山万水&#xff0c;领略世界各地的风情。成都柏煜文化传媒有限公司 而今天&#xff0c;我想带大家走进一个独特的地方——狼牙山&#xff0c;通过一系列短…