本文主要介紹握手的基本概念,讀者可通過該篇文章對握手有個基本概念。
握手簡介
舉個簡單例子;
上圖中sender拉高vld發送有效的數據給receiver,receiver拉高ready代表準備好接收數據。
vld==1、ready==1:sender發送有效數據,receiver同時也準備好接收數據,完成一次有效數據傳輸;
vld==1、ready==0:sender發送有效數據,receiver未準備好接收數據。反壓sender,通常情況下sender需保持vld直到receiver拉高ready,完成一次傳輸;
vld==0、ready==1:send沒有數據需要發送,receiver已提前做好接收數據的準備;一旦send發起數據傳輸,即可完成一次握手;
vld==0、ready==0:send沒有數據需要傳輸,receiver也沒有做好接收數據準備;
其實拿流水線的下級和上級很好理解,握手就體現了上下級之間的配合關系,使得流水能夠正常運轉;
握手與反壓
握手的主要工作就是確保上下級之間的流量基本一致。關于反壓可以有如下理解:
流水線上若上級處理速度大于下級處理速度,則下級需反饋信息給上級,我接收不過來你的數據了;即拉低ready;
流水線上若下級處理速度大于上級處理速度,則上級需反饋信息給下級,我處理速度跟不上你處理速度,給你的數據沒那么快。即通過拉低一段時間的vld,使得上級得以喘息。
其實從這里我也突然悟出來了一個道理,握手是給了每級處理單元一個控制速度的權利。完美的流水線,應該來說是不需要通過握手來實現的(太理想了),因為還需要握手來控制數據的傳輸等等;
流水線中反壓(拉低ready)
反壓的目的都是為了屏蔽上級單元送數據來。但根據流水中的每級單元中是否有存儲單元,可分為帶存儲器的反壓和不帶存儲器的反壓;在帶存儲器的反壓根據對前級還是前前級的反壓可分為:跨級反壓、逐級反壓;
不帶存儲器的反壓
即流水線上的每一級都沒有存儲單元,后級與前級的耦合性高,當流水線中間某一級錯誤,導致整條流水線均停止工作;在上圖中可以理解成,若C出于某種原因不能接收B_OUT,由于B中沒有暫存空間,導致的結果就是B也不能接收A_OUT數據了。可以理解成工廠流水線里頭,每一級都沒有容器可以存放上一級的輸出物。
特點:
1.節省存儲器資源,每一級都沒有存儲器;2.流水控制復雜,后級的流水停止,需對前面的每一級都有控制;(牽一發而動全身)
帶存儲器的逐級反壓
如上圖,和不帶存儲器的流水比起來,各級流水中都加入了一定的緩存容量。這樣做的一個好處就是每一級與每一級之間的握手都變成了相對獨立的握手模塊。這里留個懸念,緩存的大小如何設定?
帶存儲器的跨級反壓
如上圖,C的反壓直接跳過B,反壓到A。目前我是沒接觸過這種設計,但是我認為這種設計也有一定的合理性以及局限性;這種結構需要求C可以無條件接收B_OUT數據,也就是單向握手,只要B給出B_OUT,C 100%可以接收;
握手與反壓設計注意點
sender發生數據的vld指示和receiver接收的ready指示應該為獨立的邏輯產生,不可將二者扯上聯系;
若存在流水,則是否為某一級流水添加存儲單元、該存儲單元多大都是需要考慮的點,出發點都是為了流水的效率;
流水除了考慮各級的存儲深度外,不要忽略流水路上處理中的數據;
-
存儲器
+關注
關注
38文章
7623瀏覽量
166189 -
存儲單元
+關注
關注
1文章
66瀏覽量
16350 -
流水線
+關注
關注
0文章
124瀏覽量
26463
原文標題:芯片設計方法學之--握手
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
智能識別蘋果安卓USB充電協議芯片
CH246D USB口與快充充電器協議握手失敗是什么原因?
bq25792握手協議
基于ECC帶緩存的快速SSL握手協議
什么是握手信號? 什么是握手協議?
tcp協議三次握手詳細過程

評論