当前位置: 首页 > news >正文

集成电路流片随笔19:full_handshake

全双工握手接收模块 (full_handshake_rx),它的功能是接收来自发送端 (tx) 的数据,并对发送端进行应答(ACK)。模块实现了基于握手的通信机制,以确保数据的可靠传输。模块的输入输出分别连接于发送端和接收端,并通过状态机来控制数据的接收和确认。

代码解析

1. 模块参数与输入输出信号
module full_handshake_rx #(parameter DW = 32)(             // RX要接收数据的位宽input wire clk,                 // RX端时钟信号input wire rst_n,               // RX端复位信号// from txinput wire req_i,               // TX端请求信号input wire[DW-1:0] req_data_i,  // TX端输入数据// to txoutput wire ack_o,              // RX端应答TX端信号// to rxoutput wire[DW-1:0] recv_data_o,// RX端接收到的数据output wire recv_rdy_o          // RX端是否接收到数据信号
);
  • DW:接收数据的位宽,默认为 32 位。
  • clk:时钟信号,用于同步操作。
  • rst_n:复位信号,低电平有效,复位模块。
  • req_i:发送端的请求信号,表示发送端准备好发送数据。
  • req_data_i:发送端要发送的数据。
  • ack_o:接收端的应答信号,向发送端确认数据已经收到。
  • recv_data_o:接收的数据输出。
  • recv_rdy_o:接收数据准备好信号,表示接收端已经准备好接收数据。
2. 状态机的定义
localparam STATE_IDLE     = 2'b01;
localparam STATE_DEASSERT = 2'b10;
  • STATE_IDLE:表示接收端空闲状态,等待接收数据。
  • STATE_DEASSERT:表示接收端准备好状态,等待请求信号撤销。
3. 状态机转换
always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginstate <= STATE_IDLE;end else beginstate <= state_next;end
endalways @ (*) begincase (state)STATE_IDLE: beginif (req == 1'b1) beginstate_next = STATE_DEASSERT;end else beginstate_next = STATE_IDLE;endendSTATE_DEASSERT: beginif (req) beginstate_next = STATE_DEASSERT;end else beginstate_next = STATE_IDLE;endenddefault: beginstate_next = STATE_IDLE;endendcase
end
  • 状态机逻辑
    • STATE_IDLE 状态,接收端等待 req 信号的到来。当 req == 1 时,表示发送端已经准备好数据,接收端将转到 STATE_DEASSERT 状态,准备接收数据。
    • STATE_DEASSERT 状态,接收端等待 req 信号撤销。当 req == 0 时,表示接收结束,回到 STATE_IDLE 状态。
4. 同步请求信号
reg req_d;
reg req;always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginreq_d <= 1'b0;req <= 1'b0;end else beginreq_d <= req_i;req <= req_d;end
end
  • req 信号是对 req_i 信号的同步处理,确保 req 信号稳定,消除时钟不同时的亚稳态问题。
5. 接收数据处理
reg[DW-1:0] recv_data;
reg recv_rdy;
reg ack;always @ (posedge clk or negedge rst_n) beginif (!rst_n) beginack <= 1'b0;recv_rdy <= 1'b0;recv_data <= {(DW){1'b0}};end else begincase (state)STATE_IDLE: beginif (req == 1'b1) beginack <= 1'b1;recv_rdy <= 1'b1;           // 这个信号只会持续一个时钟recv_data <= req_data_i;    // 这个信号只会持续一个时钟endendSTATE_DEASSERT: beginrecv_rdy <= 1'b0;recv_data <= {(DW){1'b0}};if (req == 1'b0) beginack <= 1'b0;endendendcaseend
end
  • STATE_IDLE 状态,接收端在收到 req == 1 时:

    • ack 信号设为 1,表示接收端已准备好接收数据。
    • recv_rdy 设为 1,表示接收端准备好接收数据,且仅在该时钟周期有效。
    • recv_data 设置为 req_data_i,即接收的数据。
  • STATE_DEASSERT 状态,接收端等待 req == 0,表示接收完成,此时 recv_rdy 被清零,recv_data 被重置。

6. 输出信号赋值
assign ack_o = ack;
assign recv_rdy_o = recv_rdy;
assign recv_data_o = recv_data;
  • ack_o:表示接收端的应答信号,确认数据接收。
  • recv_rdy_o:表示接收端是否准备好接收数据。
  • recv_data_o:接收到的数据。

总结:

  • 该模块实现了通过 JTAG 协议进行数据的接收,并通过握手信号确保接收端和发送端的数据交互可靠。
  • 它基于 状态机,根据接收到的请求信号来控制接收过程:
    • STATE_IDLE 状态时,接收端等待接收请求;
    • STATE_DEASSERT 状态时,接收端确认接收到数据并准备接收下一批数据。
  • 同时通过应答信号(ack)向发送端确认数据接收状态,并通过 recv_rdyrecv_data 输出接收到的数据。

相关文章:

集成电路流片随笔19:full_handshake

全双工握手接收模块 (full_handshake_rx)&#xff0c;它的功能是接收来自发送端 (tx) 的数据&#xff0c;并对发送端进行应答&#xff08;ACK&#xff09;。模块实现了基于握手的通信机制&#xff0c;以确保数据的可靠传输。模块的输入输出分别连接于发送端和接收端&#xff0c…...

Android Framework 探秘

以下文字来源AI&#xff0c;准确性不敢保证&#xff01; 安卓Framework层概述 安卓的 Framework&#xff08;框架层&#xff09; 是安卓系统的核心组成部分&#xff0c;位于应用层和系统底层&#xff08;如Linux内核&#xff09;之间&#xff0c;负责为应用提供统一的接口和功…...

亚马逊云科技2025战略解析:AI驱动下的全球生态重塑

一、战略转向&#xff1a;从“云优先”到“AI优先”的核心逻辑 1. 千亿美元资本投入AI基建 芯片自研突破&#xff1a;2025年资本支出70%投向AI芯片与液冷数据中心。自研芯片矩阵全面升级&#xff0c;包括3纳米工艺的Trainium3&#xff08;算力提升4倍&#xff09;、单核性能…...

NGINX ngx_http_addition_module 模块响应体前后注入内容

一、模块概述 模块名称&#xff1a;ngx_http_addition_module引入版本&#xff1a;自 0.7.9 起支持 addition_types&#xff0c;0.8.29 起支持“*”通配&#xff1b;功能&#xff1a;对符合 MIME 类型的响应&#xff0c;在响应体前后分别插入指定子请求 URI 返回的内容&#x…...

SpringMVC 使用thymeleaf 进行数据展示

thymeleaf 是前端的视图解析器&#xff0c;可以用于html页面上变量的渲染&#xff0c;如何来使用thymeleaf&#xff0c;下面我们来说一下&#xff1a; 首先引入相关的依赖&#xff1a; <dependency><groupId>org.thymeleaf</groupId><artifactId>thym…...

Github两种鉴权模式PAT与SSH

Github两种鉴权模式PAT与SSH 文章目录 Github两种鉴权模式PAT与SSH1. PAT鉴权2. SSH鉴权3.两种鉴权的切换 1. PAT鉴权 通过 HTTPS 协议克隆和推送代码&#xff0c;使用用户名/密码或个人访问令牌&#xff08;PAT&#xff09;鉴权&#xff0c;所以PAT是与HTTPS协议相关的。该鉴…...

XrayR启动失败

公司要用服务器之间进行数据加密&#xff0c;这里用的XrayR 我使用的Centos 7。 我这里使用一键脚本安装后&#xff0c;/etc/XrayR目录下没有配置文件。 解决方案 XrayR安装时&#xff0c;系统没有unzip工具&#xff0c;也是会安装失败的&#xff0c;因为Centos7已经停止维…...

FPGA-数字时钟

FPGA-数字时钟 总体设计 ​ 用FPGA驱动数码管按照HH-MM-SS的格式显示时间&#xff0c;每秒用串口向上位机发送当前时间&#xff0c;当串口收到HH:MM:SS&#xff0c;对时间进行校准。由于年月要考虑到大小月&#xff0c;闰年等。为了简单起见&#xff0c;只考虑时分秒。 数码管…...

数据结构 RBT 插入操作的 Python 代码实现

目录 一、红黑树的性质二、红黑树的插入1. 插入根节点或根节点变红2. 双亲节点 P 为黑色3. 双亲结点 P 和叔伯结点 U 均为红色4. 双亲结点 P 为红色&#xff0c;叔伯结点 U 为黑色或缺失1&#xff09;情形一2&#xff09;情形二 三、插入的 Python 代码实现 红黑树动画演示网站…...

颖儿生活提案:用海信璀璨505U6真空冰箱重建都市鲜食自由

热播剧《六姊妹》中&#xff0c;演员颖儿饰演的何家艺以泼辣坚韧的形象深入人心&#xff0c;一双手撑起家庭的"烟火气"&#xff1b;戏外&#xff0c;她平衡事业与家庭&#xff0c;以自律姿态书写鲜活人生。 近日&#xff0c;颖儿向公众展示家中厨房&#xff0c;意外…...

JQuery 使用技巧

文章目录 隐藏/显示淡入淡出滑动追加新元素删除元素/内容设置 CSS 样式尺寸遍历Ajax根据 input 控件中的值 实时改变另一个值 $()是jQuery()的简写getElementByTagName();如&#xff1a; $(“div”)getElementByTagName(“div”); $()的作用是用于查找出 HTML 的标签、属性、样…...

光流法:从传统方法到深度学习方法

1 光流法简介 光流&#xff08;Optical Flow&#xff09;是指图像中像素灰度值随时间的变化而产生的运动场。 简单来说&#xff0c;它描述了图像中每个像素点的运动速度和方向。 光流法是一种通过分析图像序列中像素灰度值来计算光流的方法。对于图像数据计算出来的光流是一个二…...

如何选择合适的RFID手持终端设备?

一、明确核心需求&#xff0c;锁定关键参数 选购RFID手持终端的首要任务是明确应用场景的核心需求。若用于仓储物流或零售盘点&#xff0c;推荐选择上海岳冉超高频RFID手持终端设备&#xff0c;支持1-20米远距离批量读取&#xff1b;若用于医疗耗材或图书管理&#xff0c;岳冉高…...

Axios 传参与 Spring Boot 接收参数完全指南

Axios 传参与 Spring Boot 接收参数完全指南 本文详细说明前端 Axios 传参与后端 Spring Boot 接收参数的各类场景&#xff0c;包括 GET/POST/PUT/DELETE 请求、路径参数/查询参数/请求体参数 的传递方式&#xff0c;以及如何接收 List、Map 等复杂类型。通过代码示例和对比表…...

NdrpPointerUnmarshallInternal函数分析之pStubMsg--pAllocAllNodesContext的由来

第一部分&#xff1a; // // Check if this is an allocate all nodes pointer AND that were // not already in an allocate all nodes context. // if ( ALLOCATE_ALL_NODES(pFormat[1]) && ! pStubMsg->pAllocAllNodesContext …...

人脑、深思考大模型与其他大模型的区别科普

文章目录 大模型的基本概念与特点深思考大模型的独特之处深思考大模型与其他大模型的对比架构与技术训练数据应用场景提示词编写 大模型给出答案的方式&#xff1a;基于概率还是真的会分析问题&#xff1f;人脑的思考过程基本单位与网络大脑结构与功能分区信息处理流程思维模式…...

Unity-粒子系统:萤火虫粒子特效效果及参数

萤火虫特效由两部分组成。萤火虫粒子底色粒子面片。萤火虫的旋转飞动主要由 Noise参数和Color over Lifetime模块控制。 贴图&#xff1a;中间实周边虚的圆&#xff0c;可随意自行制作 Shader&#xff1a;Universal Render Pipeline/2D/Sprite-Lit-Default 以下是粒子详细参…...

Java垃圾收集器与内存分配策略深度解析

在 Java 与 C 的世界里&#xff0c;内存动态分配与垃圾收集技术仿佛筑起了一道高墙。墙外的人渴望进入&#xff0c;享受自动内存管理的便利&#xff1b;而墙内的人却试图突破&#xff0c;追求更高的性能与控制力。今天&#xff0c;就让我们深入探讨 Java 的垃圾收集器与内存分配…...

优化MySQL性能:主从复制与读写分离实践指南

目录 一、知识介绍 1.MySQL主从复制原理 2.MySQL读写分离原理 二、资源清单 三、案例实施 1.修改主机名 2.搭建MySQL主从复制 3.搭建MySQL读写分离 一、知识介绍 1.MySQL主从复制原理 MySQL支持的复制类型 基于语句的复制基于行的复制混合模型复制 工作过程 主&#…...

Foupk3systemX5OS系统产品设备

Foupk3systemX5OS TXW8&#xff08;基于Foupk3systemX5OS系统19.62正式版开发的智能移动设备由Foupk3systemX5OS系统与FOUPK3云服务平台共同自主研发&#xff09; Foupk3systemX5OS TX6&#xff08;Foupk3systemX5OS TX6基于Foupk3systemX5OS系统19.60正式版开发的智能平板设备…...

【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin

一、跨域&#xff08;CORS&#xff09;是什么&#xff1f; 跨域&#xff0c;指的是浏览器出于安全限制&#xff0c;前端页面在访问不同源&#xff08;协议、域名、端口任一不同&#xff09;的后端接口时&#xff0c;会被浏览器拦截。 比如&#xff1a; 前端地址后端接口地址是…...

关于 【Spring Boot Configuration Annotation Processor 未配置问题】 的详细分析、解决方案及代码示例

以下是关于 Spring Boot Configuration Annotation Processor 未配置问题 的详细分析、解决方案及代码示例&#xff1a; 1. 问题描述 当使用 Spring Boot 的配置注解&#xff08;如 ConfigurationProperties、Value、ConditionalOnProperty 等&#xff09;时&#xff0c;若未…...

MySQL 的ANALYZE与 OPTIMIZE命令

MySQL 的ANALYZE与 OPTIMIZE命令 一、ANALYZE TABLE - 更新统计信息 1. 基本语法与功能 ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...作用&#xff1a;收集表统计信息用于优化器生成更优的执行计划&#xff0c;主要更新&#xff1a; 索引基数&am…...

【机器学习】人工智能在电力电子领域的应用

摘要&#xff1a; 本文概述了电力电子系统的人工智能 (AI) 应用。设计、控制和维护这三个独特的生命周期阶段与人工智能要解决的一项或多项任务相关&#xff0c;包括优化、分类、回归和数据结构探索。讨论了专家系统、模糊逻辑、元启发法和机器学习四类人工智能的应用。我们对…...

InferType和_checked_type的区别?

在 TVM 的 Relay IR 中&#xff0c;relay.frontend.common.infer_shape(node) 和 node.checked_type.shape 都与**形状&#xff08;Shape&#xff09;**信息相关&#xff0c;但它们的用途、实现机制和性能特点有显著区别。以下是详细对比&#xff1a; 1. 功能区别 特性node.ch…...

Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理

Flutter 学习之旅 之 flutter 作为 module &#xff0c;在 Android 端主动唤起 Flutter 开发的界面 简单的整理 目录 Flutter 学习之旅 之 flutter 作为 module &#xff0c;在 Android 端主动唤起 Flutter 开发的界面 简单的整理 一、简单介绍 二、Android 端唤起 Flutter …...

vue3 css模拟语音通话不同语音、正在加载等的效果

实现效果如下&#xff1a; 在不同的时间&#xff0c;显示不一样的效果&#xff08;大小是一样的&#xff0c;截图时尺寸发生了变化&#xff09; 具体实现代码如下&#xff1a; <script setup> import {ref} from "vue";const max_hight ref(40px) const min…...

【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征

Machine Learning Q and AI 中文译名 大模型技术30讲&#xff0c;主要总结了大模型相关的技术要点&#xff0c;结合学术和工程化&#xff0c;对LLM从业者来说&#xff0c;是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第1篇&#xff0c;对应原…...

[Agent]AI Agent入门02——ReAct 基本理论与实战

ReAct介绍 ReAct&#xff08;Reasoning and Acting&#xff09;是一种通过协同推理&#xff08;Reasoning&#xff09;与行动&#xff08;Acting&#xff09;提升大语言模型&#xff08;LLM&#xff09;任务解决能力的技术。其核心思想是在解决复杂问题时交替生成推理和动作&a…...

uniapp自定义头部(兼容微信小程序(胶囊和状态栏),兼容h5)

很早之前就写过自定义头部&#xff0c;但是那时偷懒写死了&#xff0c;现在用插槽重新写了个 有两种形式&#xff1a; type1是完全自定义的&#xff0c;可以自己去组件改也可以用插槽改 type2是正常的返回标题和右边按钮&#xff0c;使用就是 title"标题" rightClic…...

mybatis的xml ${item}总是更新失败

场景 代码如下 void updateStatus(Param("deviceSerialIdCollection") Collection<String> deviceSerialIdCollection, Param("status") Integer status);<update id"updateStatus">UPDATE gb_monitor SET online#{status} WHERE d…...

数据库- JDBC

标题目录 JDBC基本概念JDBC 接口JDBC 工作原理 JDBC APIJDBC工作过程Driver 接口及驱动加载Connection 接口Statemen 接口ResultSet 接口PreparedStatement 接口 JDBC 基本概念 Java Database Connectivity&#xff1a;java访问数据库的解决方案希望用相同的方式访问不同的数…...

[26] cuda 应用之 nppi 实现图像格式转换

[26] cuda 应用之 nppi 实现图像格式转换 讲述 nppi 接口定义通过nppi实现 bayer 格式转rgb格式官网参考信息:http://gwmodel.whu.edu.cn/docs/CUDA/npp/group__image__color__debayer.html#details1. 接口定义 官网关于转换的原理是这么写的: Grayscale Color Filter Array …...

MYSQL-OCP官方课程学习截图

第一节 介绍...

医院信息管理系统全解析

目录 一、医院信息管理系统是什么 1. 概念阐释 2. 核心功能概述 二、医院信息管理系统的种类 1. 医院信息系统&#xff08;HIS&#xff09; 2. 电子病历系统&#xff08;EMR&#xff09; 3. 实验室信息管理系统&#xff08;LIS&#xff09; 三、医院信息管理系统的实际…...

模型上下文协议(MCP):技术解析与生态发展

一、概念与目标 模型上下文协议&#xff08;Model Context Protocol&#xff0c;MCP&#xff09;是由Anthropic于2024年11月推出的开源协议&#xff0c;旨在为大语言模型&#xff08;LLM&#xff09;与外部工具、数据源提供标准化的双向通信框架。其核心目标是打破数据孤岛&am…...

laravel中layui的table翻页不起作用问题的解决

本地测试是好的&#xff0c;部署的时候就发现&#xff0c;翻页不起作用了。但lay_num序号是可以变化的&#xff0c;查看api接口传递的数据&#xff0c;发现数据没有变化&#xff0c;加上page2等翻页&#xff0c;也是不起作用&#xff0c;看来是url参数返回给后台&#xff0c;后…...

python上测试neo4j库

安装完了neo4j库后&#xff0c;如何使用。用python来小试牛刀 1.从其他博客上找来demo #coding:utf-8 from py2neo import Graph,Node,Relationship##连接neo4j数据库&#xff0c;输入地址、用户名、密码 graph Graph(bolt://xx.xx.xx.xx:7687,userneo4j,passwordneo4j1234)…...

云原生周刊:Kubernetes v1.33 正式发布

开源项目推荐 Robusta Robusta 是一个开源的 K8s 可观测性与自动化平台&#xff0c;旨在增强 Prometheus 告警的智能化处理能力。它通过规则和 AI 技术对告警进行丰富化处理&#xff0c;自动附加相关的 Pod 日志、图表和可能的修复建议&#xff0c;支持智能分组、自动修复和高…...

网络安全入门综述

引言 在数字化时代&#xff0c;网络安全&#xff08;Cybersecurity&#xff09;已成为保护个人、企业和政府机构免受数字威胁的关键领域。随着互联网的普及、云计算的兴起以及物联网&#xff08;IoT&#xff09;设备的激增&#xff0c;网络攻击的频率和复杂性不断增加。从数据…...

LLaMA-Factory部署以及大模型的训练(细节+新手向)

LLaMA-Factory 经过一段时间的探索&#xff0c;从手动编写训练代码到寻求框架辅助训练&#xff0c;遇到了各种各样的问题。前面我介绍了dify的部署&#xff0c;但是并没有详细介绍使用方式&#xff0c;是因为我在尝试利用dify的时候碰到了很多困难&#xff0c;总结下来首先就是…...

ASP.NET MVC​ 入门指南四

21. 高级路由配置 21.1 自定义路由约束 除了使用默认的路由约束&#xff0c;你还可以创建自定义路由约束。自定义路由约束允许你根据特定的业务逻辑来决定一个路由是否匹配。例如&#xff0c;创建一个只允许特定年份的路由约束&#xff1a; csharp public class YearRouteCo…...

rabbitmq-集群部署

场景&#xff1a;单个pod&#xff0c;部署在主节点&#xff0c;基础版没有插件&#xff0c;进阶版多了一个插件 基础版本&#xff1a; --- apiVersion: v1 kind: PersistentVolume metadata:name: rabbitmq-pv spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorage…...

明远智睿SSD2351开发板:开启工业控制新征程

在工业控制领域&#xff0c;对开发板的性能、稳定性和扩展性有着极高的要求。明远智睿的SSD2351开发板凭借其卓越的特性&#xff0c;为工业控制带来了全新的解决方案。 SSD2351开发板搭载四核1.4GHz处理器&#xff0c;强大的运算能力使其在处理工业控制中的复杂任务时游刃有余。…...

RISCV学习(5)GD32VF103 MCU架构了解

RISCV学习&#xff08;5&#xff09;GD32VF103 MCU架构了解 1、芯片内核功能简介 GD32VF103 MCU架构&#xff0c;采用Bumblebee内核&#xff0c;芯来科技&#xff08;Nuclei System Technology&#xff09;与台湾晶心科技&#xff08;Andes Technology&#xff09;联合开发&am…...

IDEA2022.3开启热部署

1、开启IDEA的自动编译 1.1 具体步骤&#xff1a;打开顶部工具栏 File -> Settings -> Build,Execution,Deployment -> Compiler 然后勾选 Build project automatically 。 1.2 打开顶部工具栏 File -> Settings -> Advanced Settings -> Compiler -> 然…...

《算法吞噬幻想乡:GPT-4o引发的艺术平权运动与版权核爆》

一、引言&#xff1a;现象级AI艺术事件的社会回响 GPT - 4o吉卜力风格刷屏现象 在当今数字化浪潮中&#xff0c;GPT - 4o吉卜力风格的作品在网络上掀起了一阵刷屏热潮。吉卜力工作室以其独特的水彩质感、奇幻氛围和孤独美学&#xff0c;在全球范围内拥有大量粉丝。而GPT - 4o强…...

yolov5 源码 +jupyter notebook 笔记 kaggle

YOLOv5 | Kaggle 直接用的githuab的源码&#xff0c;git clone 后output才有文件 直接gitclone他的源码用Vscode看 好久没见过16g了 怎么这么便宜 https://gadgetversus.com/graphics-card/nvidia-tesla-p100-pcie-16gb-vs-nvidia-geforce-rtx-4060/#google_vignette 好的&am…...

聊天室系统:多任务版TCP服务端程序开发详细代码解释

1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端&#xff0c;如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢? 完成多任务&#xff0c;可以使用线程&#xff0c;比进程更加节省内存资源。 2. 具体实现步骤 编写一个TCP服务端程序&#xff0c;循环等…...

Python(15)迭代器和生成器

在 Python 编程领域中&#xff0c;迭代器和生成器是两个强大且独特的概念&#xff0c;它们为处理数据序列提供了高效且灵活的方式。这篇博客将结合菜鸟教程内容&#xff0c;通过丰富的代码示例&#xff0c;深入学习 Python3 中的迭代器与生成器知识&#xff0c;方便日后复习回顾…...