0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是握手协议?握手机制的原理

倩倩 来源:CSDN 作者:CSDN 2022-08-12 14:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是握手协议

说起握手,首先查了一下百度百科。握手是一种礼仪,起源于中世纪的欧洲,顺序为长幼有序,女士优先。(PS:所以握手的时候,男士记得要绅士一点哦)。

在芯片中,握手是最古老的跨时钟域之间传输数据的方式。握手机制通过将脉冲信号展宽,待输出一侧检测到信号并将其解析为脉冲信号后,再向输入一侧发送应答信号,表明接收到信号并且传输完成。

96f7bf62-19f6-11ed-ba43-dac502259ad0.png

为什么要握手

在人类的进化史中,握手作为一种善意的表达方式,可以增进人与人之间的和谐。言归正传,那么数字电路中为什么也需要握手机制呢?这是因为在数字电路中,跨时钟域处理是个较为常见的问题。关于跨时钟域,我们公众号之前有介绍过,想复习一下的同学可以查看一下之前写的文章。

在从快时钟向慢时钟传递时,由于输入信号变化较快,输出一侧可能跟不上输入的变化,从而导致“漏采“现象。由于两个时钟之间的频率不同,来自快时钟域的脉冲信号,还没来得及被慢时钟的采到,便转瞬即逝,从而导致信号被漏采。此时,握手机制便可以大显神通。

握手机制的原理

97777d60-19f6-11ed-ba43-dac502259ad0.png

(1)发送端在t_clk时钟域下将需要发送的数据准备好后,将t_rdy信号置为有效,该信号必须在tclk下降沿输出。接收端在rclk时钟域下同步r_rdy信号,同步后的信号命名为t_rdy_rclk。

(2)接收端在t_rdy_rclk有效期间,对t_data进行采样,得到t_data_rclk。

(3)接收端将r_ack信号置为1,信号必须在rclk下降沿输出。发送端将r_ack同步为r_ack_tclk。

至此,已经完成“半握手”,发送端在输出下一数据前,不会等到r_ack_tclk被置为0。半握手机制工作速度快,但是使用不当有可能会导致操作错误。然而,如果要从高频时钟向低频时钟传输数据,则需要采用全握手机制。

(4)当r_ack_tclk为高电平时,发送端将t_rdy置为0。

(5)当t_rdy_rclk为低电平时,接收端将r_ack置为0。

(6)当r_ack_tclk为低电平时,发送端将t_rdy重新置为1发送端可以发送新的数据。

至此,全握手完成。显然,全握手过程耗时较长,数据传输较慢。但是全握手机制稳定可靠,可以在两个任意频率的时钟域中安全地进行数据传输。需要注意一点的是,数据应该在发送时钟域内稳定至少两个时钟上升沿,请求信号req的宽度应该超过两个时钟周期,否则从高速时钟向低速时钟传递可能无法捕捉到该信号,也就是信号“失联”了。

握手机制的代码实现

发送端状态机:

97c37e22-19f6-11ed-ba43-dac502259ad0.jpg


module transmit(tclk,reset_tclk,t_rdy,data_avail,transmit_data,t_data,r_ack);input tclk;input reset_tclk;input data_avail;input [31:0]transmit_data;input r_ack;output t_rdy;output t_data;
localparam IDLE_T = 2'd0,    ASSERT_T_RDY = 2'd1,    DEASSERT_T_RDY = 2'd2;
reg [1:0] t_hndshk_state,t_hndshk_state_nxt;reg t_rdy,t_rdy_nxt;reg [31:0] t_data,t_data_nxt;reg r_ack_tclk;
always@(*)begin
 t_hndshk_state_nxt = t_hndshk_state; t_rdy_nxt = 1'b0; t_data_nxt = t_data;
 case(t_hndshk_state)  IDLE_T:begin   if(data_avail) begin    t_rdy_nxt = 1'b1;    t_hndshk_state_nxt = ASSERT_T_RDY;    t_data_nxt = transmit_data;   end  end
  ASSERT_T_RDY:begin   if(r_ack_tclk)begin    t_rdy_nxt = 1'b0;    t_hndshk_state_nxt = DEASSERT_T_RDY;    t_data_nxt = 'd0;   end   else begin    t_rdy_nxt = 1'b1;    t_data_nxt = transmit_data;   end  end
  DEASSERT_T_RDY:begin   if(!r_ack_tclk)begin    if(data_avail)begin     t_rdy_nxt = 1'b1;     t_hndshk_state_nxt = ASSERT_T_RDY;     t_data_nxt = transmit_data;    end    else begin     t_hndshk_state_nxt = IDLE_T;    end   end  end
 endcaseendalways@(posedge tclk or negedge reset_tclk)begin if(!reset_tclk)begin  t_rdy <= 1'b0;  t_hndshk_state <= IDLE_T;  t_data <= 32'h00000000;  r_ack_tclk <= 1'b0; end
 else begin  t_rdy <= t_rdy_nxt;  t_hndshk_state <= t_hndshk_state_nxt;  t_data <= t_data_nxt;  r_ack_tclk <= r_ack; end
endendmodule

接收端状态机:

97e481b2-19f6-11ed-ba43-dac502259ad0.jpg


module receiver(rclk,reset_rclk,t_rdy,t_data,r_ack);input rclk,reset_rclk;input t_rdy;input[31:0] t_data;output r_ack;
reg r_hndshk_state,r_hndshk_state_nxt;reg t_rdy_rclk;reg[31:0] t_data_rclk,t_data_rclk_nxt;reg r_ack,r_ack_nxt;
localparam IDLE_R = 1'b0,    ASSERT_ACK = 1'b1;
always@(*)begin r_hndshk_state_nxt = r_hndshk_state; r_ack_nxt = 1'b0; t_data_rclk_nxt = t_data_rclk; case(r_hndshk_state)  IDLE_R:begin   if(t_rdy_rclk)begin    r_hndshk_state_nxt = ASSERT_ACK;    t_data_rclk_nxt = t_data;    r_ack_nxt = 1'b1;   end  end
  ASSERT_ACK:begin   if(!t_rdy_rclk)begin    r_hndshk_state_nxt = IDLE_R;    r_ack_nxt = 1'b0;   end   else begin    r_ack_nxt = 1'b1;   end  end
 endcaseend
always@(posedge rclk or negedge reset_rclk)begin if(!reset_rclk)begin  r_hndshk_state <= IDLE_R;  t_data_rclk <= 1'b0;  t_rdy_rclk <= 1'b0;  r_ack <= 1'b0; end
 else begin  r_hndshk_state <= r_hndshk_state_nxt;  t_data_rclk <= t_data_rclk_nxt;  t_rdy_rclk <= t_rdy;  r_ack <= r_ack_nxt; endend
endmodule

握手机制的缺点

一个字:慢。

好了,希望本文对大家有所帮助。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数字电路
    +关注

    关注

    193

    文章

    1666

    浏览量

    83528
  • 代码
    +关注

    关注

    30

    文章

    4975

    浏览量

    74349
  • 脉冲信号
    +关注

    关注

    6

    文章

    409

    浏览量

    38674

原文标题:谈谈数字芯片中的握手协议

文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    当EtherCAT遇上Modbus RTU:一台网关让倍福PLC与伺服“握手

    当EtherCAT遇上Modbus:一台网关让倍福PLC与伺服“握手” 在板式家具生产线上,封边机的精度直接影响产品品质。最近接手一台老旧封边机的改造项目,倍福CX5140作为主控,走
    的头像 发表于 04-20 14:51 14次阅读
    当EtherCAT遇上Modbus RTU:一台网关让倍福PLC与伺服“<b class='flag-5'>握手</b>”

    别让协议成为渣抓取的绊脚石EtherNet/IP转Modbus RTU网关,一次握手,两种语言

    别让协议成为渣抓取的绊脚石EtherNet/IP转Modbus RTU网关,一次握手,两种语言 在高炉出渣现场,渣抓取设备的稳定运行直接关系到生产节拍。某钢铁厂的高炉渣处理线曾长期被一个问题困扰
    的头像 发表于 04-15 15:31 51次阅读
    别让<b class='flag-5'>协议</b>成为渣抓取的绊脚石EtherNet/IP转Modbus RTU网关,一次<b class='flag-5'>握手</b>,两种语言

    晶圆厂里的“异言同译”:一座网关让EtherNet/IP与CANopen握手

    晶圆厂里的“异言同译”:一座网关让EtherNet/IP与CANopen握手 背景与痛点 半导体晶圆制造对洁净度、精度与节拍要求近乎苛刻。产线上,压力变送器与汇川伺服电机既要执行实时动作,又需向上
    的头像 发表于 04-10 15:08 137次阅读
    晶圆厂里的“异言同译”:一座网关让EtherNet/IP与CANopen<b class='flag-5'>握手</b>

    疆鸿智能EtherNet/IP转DeviceNet“桥”接发那科手臂,智控无缝握手

    疆鸿智能EtherNet/IP转DeviceNet“桥”接发那科手臂,智控无缝握手 新能源电池盒搬运上下料自动化产线中,罗克韦尔PLC通过EtherNet/IP协议作为控制核心,而发那科机械手臂则需
    的头像 发表于 03-30 15:53 118次阅读
    疆鸿智能EtherNet/IP转DeviceNet“桥”接发那科手臂,智控无缝<b class='flag-5'>握手</b>

    TCP/IP(Socket)协议深度剖析

    TCP/IP协议作为互联网通信的基础架构,其核心机制Socket编程承载着全球数据交换的使命。本文将深入剖析这一协议的七层架构、三次握手与四次挥手的精妙设计、流量控制与拥塞控制的动态平
    的头像 发表于 03-03 17:06 764次阅读

    异种总线破壁记:疆鸿智能EtherCAT转DeviceNet的“握手”之道

    异种总线破壁记:疆鸿智能EtherCAT转DeviceNet的“握手”之道 在食品饮料厂工作过的同行都清楚,灌装线对控制系统的实时性要求有多苛刻——灌装头起停、阀门开闭、封口同步,稍有延迟就是次品
    的头像 发表于 02-26 14:50 243次阅读
    异种总线破壁记:疆鸿智能EtherCAT转DeviceNet的“<b class='flag-5'>握手</b>”之道

    TCP三次握手与四次挥手的详细过程

    TCP 三次握手和四次挥手,大概是网络领域被问烂了的面试题。但真正能把状态变迁、序列号变化、抓包细节讲清楚的人并不多。很多人背了八股文,一到生产环境看 Wireshark 抓包就懵了
    的头像 发表于 02-25 10:38 414次阅读

    TCP的三次握手

    (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手
    发表于 12-02 07:16

    无线充项目求助:PD 协议芯片握手后反复重启断电,求解决方案!

    Type-C 接口与 iPad、联想 Pad、三星 Pad 握手充电。 已做尝试及现象: 先后采用劲芯微、易充、美芯晟 20W 以上无线充方案,搭配智融 SW3522 PD 协议芯片给 Pad 供电
    发表于 11-13 14:48

    握手信号的详解

    在dtcm和itcm等模块中经常用到以valid,read结尾的信号量,他们就是握手信号。 握手信号是一种用于协调和同步不同系统之间操作的信号。当两个或多个系统要进行数据传输或交互时,需要确保
    发表于 10-24 08:04

    Vivado浮点数IP核的握手信号

    和给出握手信号。在RISC v架构中每个模块(包括FPU)的握手信号都有一个i_valid、i_ready,FPU内部需要三个输入数据的握手信号、一个输出结果的握手信号。 根据AXI
    发表于 10-24 07:01

    Sink PD快充协议芯片XSP25支持PD+QC+FCP+SCP+AFC协议

    基于改变快充协议,使电源输出电压和电流满足需求者的要求。 PD诱骗协议工作原理 与供电端进行PD协议握手通信:取电芯片需要与供电端进行PD协议
    的头像 发表于 10-17 15:21 941次阅读
    Sink PD快充<b class='flag-5'>协议</b>芯片XSP25支持PD+QC+FCP+SCP+AFC<b class='flag-5'>协议</b>

    当PLC遇上伺服电机:CCLink IE与DeviceNet的跨协议握手」指南

    在汽车制造的自动化产线中,不同通信协议的设备协同作业是常见挑战。例如,当采用CCLink IE总线的PLC系统需要控制基于DeviceNet网关协议的伺服电机时,协议差异可能导致数据交互不畅,影响产
    发表于 06-10 14:43

    芯片设计之握手协议

    本文主要介绍握手的基本概念,读者可通过该篇文章对握手有个基本概念。
    的头像 发表于 05-14 09:16 1358次阅读
    芯片设计之<b class='flag-5'>握手</b><b class='flag-5'>协议</b>

    TCP三次握手和四次挥手,这样解释太通俗易懂了!

    TCP连接的建立和释放分别通过“三次握手”和“四次挥手”来完成。三次握手过程TCP三次握手是建立可靠网络连接的关键过程,它用于确保通信双方能够正常发送和接收数据,并提供可靠的数据传输机制
    的头像 发表于 04-24 19:33 1668次阅读
    TCP三次<b class='flag-5'>握手</b>和四次挥手,这样解释太通俗易懂了!