1.同步電路設計
2.全異步電路設計
3.異步信號與同步電路交互的問題及其解決方法
4.SoC設計中的時鐘規劃策略
1.同步電路設計
同步電路,即電路中的所有受時鐘控制的單元,如觸發器(Flip Flop)或寄存器(Register),全部由一個統一的全局時鐘控制。
同步電路的時序收斂
觸發器的建立時間和保持時間
同步電路設計的優點
在同步設計中,EDA工具可以保證電路系統的時序收斂,有效避免了電路設計中競爭冒險現象
由于觸發器只有在時鐘邊緣才改變取值,很大限度地減少了整個電路受毛刺和噪聲影響的可能
同步電路設計的缺點
時鐘偏斜(Clock Skew)
時鐘樹綜合,需要加入大量的延遲單元,使得電路的面積和功耗大大增加
時鐘抖動(Clock Jitter)
時鐘偏斜
2.全異步電路設計
全異步設計跟同步設計最大的不同就是它的電路中的數據傳輸可以在任何時候發生,電路中沒有一個全局的或局部的控制時鐘。
異步電路設計的基本原理
自定時的流水線數據通路
握手協議
握手協議原理
異步電路設計的優點
模塊化特性突出
對信號的延遲不敏感
沒有時鐘偏斜問題
有潛在的高性能特性
好的電磁兼容性
具有低功耗的特性異步電路設計的缺點
設計復雜
缺少相應的EDA工具的支持
在大規模集成電路設計中應避免采用異步電路設計
3.異步信號與同步電路交互的問題及其解決方法
3.1亞穩態現象
亞穩態示意圖 亞穩態信號的傳播
亞穩態問題的解決及其RTL實現
亞穩態現象的解決方法
modulesynchronizer( bclk,//目的時鐘,與aclk異步的時鐘 reset_b,//全局異步復位信號 adat,//異步輸入信號,工作在aclk bdat,//同步器輸出 ); inputbclk; inputreset_b; inputadapt; outputbdat; wirebdat; regbdat1; regbdat2; always@(posedgebclkornegedgereset_b) if(reset_b) {bdat2,bdat1}<=?2?'?b0; else ????{bdat2,bdat1}?<=?{bdat1,adat}; assign?bdat?=?bdat2; endmodule
3.2快時鐘同步慢時鐘域下的異步控制信號
快時鐘同步慢時鐘信號示意圖
modulesynchronizer( clk_fst, reset_b, rd_en, rd_en_s2f ); inputclk_fst,reset_b,rd_en outputrd_en_s2f; wirerd_en_s2f; regrd_en_s2f1,rd_en_s2f2,rd_en_s2f3 always@(posedgeclk_fstornegedgereset_b) if(!reset_b) {rd_en_s2f3,rd_en_s2f2,rd_en_s2f1}<=?3'b111; ????else ??? {rd_en_s2f3,rd_en_s2f2,rd_en_s2f1}<={rd_en_s2f2,rd_en_s2f1,rd_en}; always?@?(rd_en_s2f3??or??rd_en_s2f2) ????case?({rd_en_s2f3,rd_en_s2f2}) ????????????2'b01: ????????????????rd_en_s2f?<=?1'b1;???????? ????????????default: ????????????????rd_en_s2f?<=?1'b0; ?????endcase
3.3慢時鐘同步快時鐘域下的異步控制信號
慢時鐘同步快時鐘信號示意圖
解決辦法 : 握手機制實現方法一
moduleadapt_gen( aclk,//快時鐘 reset_b,//系統復位信號 adat,//原始控制信號 abdat2, //從慢時鐘域反饋回來的同步控制信號 adat1 //經過保持后的信號輸出 ); inputaclk,reset_b,adat,abdat2; outputadat1; regadat1; always@(posedgeaclkornegedgereset_b) if(!reset_b) adat1<=?1'b0;???? ????else?if?(abdat2) ??????????adat1?<=?1'b0; ????else if?(adat) ??????????adat1?<=?1'b1; endmoudule?
解決辦法 : 握手機制實現方法二
modulestall_logic( rd_en, rd_en_ ack_s2f, stall_b ); inputrd_en; inputrd_en_ack_s2f; outputstall_b; wirestall_b; always@(rd_enorrd_en_ack_s2f) if(rd_en_ack_s2f) stall_b<=?1'b1; else if?(rd_en) ????stall_b?<=?1'b0; else ????stall_b?<=?1'b1; endmodule
3.4異步時鐘域的數據同步
握手機制
握手同步異步數據
先入先出隊列(FIFO)
FIFO結構圖 FIFO空滿示意圖
同步異步時鐘FIFO的電路行為
待同步的數據時鐘域會在其寫信號的控制之下,將數據寫入到FIFO中
目的時鐘域在發現空標志位無效后,執行FIFO讀動作,讀出被異步時鐘域寫入FIFO的數據
如果只要同步一個數據,空標志位再次有效
如果需要同步多個數據,因為FIFO的讀/寫之間可以不受影響的進行,所以待同步
FIFO設計中的亞穩態問題
通常,通過比較讀/寫指針是否相等來判斷FIFO是否為空。而因為讀/寫指針屬于不同的時鐘域,兩者顯然不能直接連到比較器的兩端來產生空信號,否則會造成讀FIFO的目的時鐘域的電路碰到亞穩態現象.
解決辦法
以格雷碼編碼表示讀/寫指針,用格雷碼加法器來實現讀/寫地址的加一動作
用同步器將讀指針同步到FIFO滿標志的產生邏輯,同樣用同步器將寫指針同步到FIFO空標志的產生邏輯中
新的異步FIFO的結構框圖
4.SoC設計中的時鐘規劃策略
首先盡可能使用同步設計:
對于同步電路,邏輯綜合和時鐘樹綜合等EDA工具能發揮更大的作用,可以用靜態時序分析工具分析單時鐘同步設計的時序收斂問題
可測性設計(DFT)的插入工作得到最大的簡化
其次,注意同步電路設計的缺陷
噪聲問題
時鐘樹上的功耗很大
如果必須采用不同的時鐘,則要注意
后端設計的復雜化,如約束條件中要考慮多周期路徑(Multi Cycle Path)
可測性設計更加復雜,因為此時系統中需要有多條獨立的掃描鏈
越多的時鐘域,發生亞穩態的概率就會越大
最后,設計規劃中應注意以下幾點:
盡可能將不同時鐘域的數量減到越少越好
盡可能將異步交互電路歸入同一或多個獨立的模塊,這樣不但方便后端設計腳本的書寫,也方便代碼的閱讀
盡可能避免使用電平觸發器(Latch),因為靜態時序分析會變得復雜,不能得到EDA工具很好的支持
盡可能減小時鐘樹的延時,因為這個延時可能會造成系統功能失效和多余的功耗;
任何異步時鐘域交互的環節都要盡可能避免亞穩態現象.
審核編輯:湯梓紅
-
電路設計
+關注
關注
6678文章
2456瀏覽量
204649 -
同步電路
+關注
關注
1文章
60瀏覽量
13317 -
異步電路
+關注
關注
2文章
48瀏覽量
11116
原文標題:同步與異步電路信號交互的問題
文章出處:【微信號:數字ICer,微信公眾號:數字ICer】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論