0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

什么是握手協(xié)議?握手機制的原理

倩倩 ? 來源:CSDN ? 作者:CSDN ? 2022-08-12 14:51 ? 次閱讀

。

什么是握手協(xié)議

說起握手,首先查了一下百度百科。握手是一種禮儀,起源于中世紀的歐洲,順序為長幼有序,女士優(yōu)先。(PS:所以握手的時候,男士記得要紳士一點哦)。

芯片中,握手是最古老的跨時鐘域之間傳輸數(shù)據(jù)的方式。握手機制通過將脈沖信號展寬,待輸出一側(cè)檢測到信號并將其解析為脈沖信號后,再向輸入一側(cè)發(fā)送應答信號,表明接收到信號并且傳輸完成。

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

為什么要握手

在人類的進化史中,握手作為一種善意的表達方式,可以增進人與人之間的和諧。言歸正傳,那么數(shù)字電路中為什么也需要握手機制呢?這是因為在數(shù)字電路中,跨時鐘域處理是個較為常見的問題。關于跨時鐘域,我們公眾號之前有介紹過,想復習一下的同學可以查看一下之前寫的文章。

在從快時鐘向慢時鐘傳遞時,由于輸入信號變化較快,輸出一側(cè)可能跟不上輸入的變化,從而導致“漏采“現(xiàn)象。由于兩個時鐘之間的頻率不同,來自快時鐘域的脈沖信號,還沒來得及被慢時鐘的采到,便轉(zhuǎn)瞬即逝,從而導致信號被漏采。此時,握手機制便可以大顯神通。

握手機制的原理

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

(1)發(fā)送端在t_clk時鐘域下將需要發(fā)送的數(shù)據(jù)準備好后,將t_rdy信號置為有效,該信號必須在tclk下降沿輸出。接收端在rclk時鐘域下同步r_rdy信號,同步后的信號命名為t_rdy_rclk。

(2)接收端在t_rdy_rclk有效期間,對t_data進行采樣,得到t_data_rclk。

(3)接收端將r_ack信號置為1,信號必須在rclk下降沿輸出。發(fā)送端將r_ack同步為r_ack_tclk。

至此,已經(jīng)完成“半握手”,發(fā)送端在輸出下一數(shù)據(jù)前,不會等到r_ack_tclk被置為0。半握手機制工作速度快,但是使用不當有可能會導致操作錯誤。然而,如果要從高頻時鐘向低頻時鐘傳輸數(shù)據(jù),則需要采用全握手機制。

(4)當r_ack_tclk為高電平時,發(fā)送端將t_rdy置為0。

(5)當t_rdy_rclk為低電平時,接收端將r_ack置為0。

(6)當r_ack_tclk為低電平時,發(fā)送端將t_rdy重新置為1發(fā)送端可以發(fā)送新的數(shù)據(jù)。

至此,全握手完成。顯然,全握手過程耗時較長,數(shù)據(jù)傳輸較慢。但是全握手機制穩(wěn)定可靠,可以在兩個任意頻率的時鐘域中安全地進行數(shù)據(jù)傳輸。需要注意一點的是,數(shù)據(jù)應該在發(fā)送時鐘域內(nèi)穩(wěn)定至少兩個時鐘上升沿,請求信號req的寬度應該超過兩個時鐘周期,否則從高速時鐘向低速時鐘傳遞可能無法捕捉到該信號,也就是信號“失聯(lián)”了。

握手機制的代碼實現(xiàn)

發(fā)送端狀態(tài)機:

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

接收端狀態(tài)機:

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

握手機制的缺點

一個字:慢。

好了,希望本文對大家有所幫助。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)字電路

    關注

    193

    文章

    1579

    瀏覽量

    80183
  • 代碼
    +關注

    關注

    30

    文章

    4672

    瀏覽量

    67778
  • 脈沖信號
    +關注

    關注

    6

    文章

    377

    瀏覽量

    36780

原文標題:談談數(shù)字芯片中的握手協(xié)議

文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    簡述TCP協(xié)議的三次握手機制

    TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它主要用于在IP網(wǎng)絡中進行數(shù)據(jù)傳輸。TCP協(xié)議的三次握手
    的頭像 發(fā)表于 08-16 10:57 ?251次閱讀

    Esp8266與SSL REST的連接失敗,并顯示“客戶端握手失敗”,為什么?

    Esp8266 與 SSL REST 的連接失敗,并顯示“客戶端握手失敗”
    發(fā)表于 07-12 07:43

    編寫了一個簡單的SSL應用程序,用于向服務器發(fā)送HTTPS請求,SSL握手失敗的原因?

    我編寫了一個簡單的SSL應用程序,用于向服務器發(fā)送HTTPS請求。在數(shù)千個請求之后,應用程序在握手期間崩潰: 客戶端握手開始。 型號:M 1032 致命異常 29
    發(fā)表于 07-10 08:05

    說說TCP三次握手的過程?為什么是三次而不是兩次、四次?

    三次而不是兩次或四次。 首先,我們需要了解TCP是一種面向連接的協(xié)議。在進行數(shù)據(jù)傳輸之前,發(fā)送端和接收端需要建立一個可靠的連接。TCP三次握手就是用來建立這個連接的過程。 三次握手的過程如下: 第一步:發(fā)送端向接收端發(fā)送一個SY
    的頭像 發(fā)表于 02-04 11:03 ?447次閱讀

    TCP協(xié)議連接的三次握手

    通過三次握手,客戶端與服務端能夠確保彼此的網(wǎng)絡連接是可用的。客戶端發(fā)起的SYN報文和服務端返回的SYN+ACK報文都包含了對方的初始序列號和通信能力信息,通過互相確認這些信息,雙方確認彼此的能力和正確性。
    的頭像 發(fā)表于 02-03 16:44 ?1202次閱讀
    TCP<b class='flag-5'>協(xié)議</b>連接的三次<b class='flag-5'>握手</b>

    TCP和UDP協(xié)議有什么區(qū)別?如何通過網(wǎng)關實現(xiàn)TCP協(xié)議通信?

    TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,能夠保證數(shù)據(jù)從發(fā)送方到達接收方,是物聯(lián)網(wǎng)領域常見的通信協(xié)議之一。 TCP是面向連接的,所以在開始傳輸數(shù)據(jù)前要先經(jīng)歷三次握手
    的頭像 發(fā)表于 01-24 11:07 ?464次閱讀
    TCP和UDP<b class='flag-5'>協(xié)議</b>有什么區(qū)別?如何通過網(wǎng)關實現(xiàn)TCP<b class='flag-5'>協(xié)議</b>通信?

    【芯片設計】握手協(xié)議的介紹與時序說明

    最早接觸到握手協(xié)議是在校期間學習PCIe的AXI總線時,至今日雖然PCIe的結(jié)構(gòu)已經(jīng)忘得一干二凈,但握手協(xié)議經(jīng)過不斷的使用還算掌握的不錯。
    的頭像 發(fā)表于 12-11 14:11 ?2097次閱讀
    【芯片設計】<b class='flag-5'>握手</b><b class='flag-5'>協(xié)議</b>的介紹與時序說明

    握手型接口的同步FIFO實現(xiàn)

    按照正常的思路,在前文完成前向時序優(yōu)化和后向時序優(yōu)化后,后面緊跟的應該是雙向時序優(yōu)化策略了,不過不急,需要先實現(xiàn)一下握手型同步FIFO。
    的頭像 發(fā)表于 12-04 14:03 ?539次閱讀
    <b class='flag-5'>握手</b>型接口的同步FIFO實現(xiàn)

    Valid-Ready握手協(xié)議的介紹與時序說明

    "Valid-Ready" 握手協(xié)議是一種常用于數(shù)字電路中的接口協(xié)議,用于控制數(shù)據(jù)的傳輸和處理。
    的頭像 發(fā)表于 12-04 10:37 ?1139次閱讀
    Valid-Ready<b class='flag-5'>握手</b><b class='flag-5'>協(xié)議</b>的介紹與時序說明

    valid-ready握手協(xié)議和enable-xoff協(xié)議對比

    這一篇主要對比下valid-ready握手協(xié)議和enable-xoff協(xié)議,當然這個對比僅限于同時鐘域下的信號傳輸。
    的頭像 發(fā)表于 12-04 10:32 ?563次閱讀
    valid-ready<b class='flag-5'>握手</b><b class='flag-5'>協(xié)議</b>和enable-xoff<b class='flag-5'>協(xié)議</b>對比

    [ElfBoard] USB接口及握手協(xié)議介紹

    與USB2.0控制器握手完畢,進行后續(xù)的480Mbps 高速信號通信,這就是咱們常說的USB握手協(xié)議,怎么樣,是不是很有趣呢
    發(fā)表于 11-22 13:36

    TCP三次握手的理論知識

    關于TCP三次握手的理論知識,往上一搜一大片,本文就跳過理論,直接上手。Let’s go。 準備知識 抓一個TCP三次握手的包 開啟三個窗口,窗口1執(zhí)行命令: sudo tcpdump -i lo
    的頭像 發(fā)表于 11-09 11:27 ?612次閱讀
    TCP三次<b class='flag-5'>握手</b>的理論知識

    單片機重新再燒錄新程序時,總顯示握手失敗的原因?

    請教一下,STC90c516RD+燒錄程序成功后,為什么重新再燒錄新程序時,總顯示握手失敗???
    發(fā)表于 10-17 08:41

    射頻識別技術漫談(19)——Desfire的3次握手認證和段密碼生成

    射頻識別技術漫談(19)——Desfire的3次握手認證和段密碼生成
    的頭像 發(fā)表于 10-16 17:00 ?985次閱讀
    射頻識別技術漫談(19)——Desfire的3次<b class='flag-5'>握手</b>認證和段密碼生成

    NFC模塊在通信的過程中是如何進行握手的?

    這個握手通信是用的什么機制
    發(fā)表于 10-12 07:34