3.1 介紹
單時鐘設計更易于實作,也更少出現亞穩態、建立和保持時間違例方面的問題,但在實踐中,很少有設計只在一個時鐘下運行,
3.2 多時鐘域
多個始終可以有以下一種或多種時鐘關系:
1、時鐘頻率不同,
2、時鐘頻率相同,但相位不同,

3.3 多時鐘域設計的難題
1、建立時間和保持時間的違背,
2、亞穩態,
事實上1就會導致2
3.3.1 違背建立時間和保持時間

多時鐘域情況下,很容易出現一個時鐘域的輸出在另一個時鐘域的時鐘上升沿到來時發生改變的現象,

圖中xclk_output1不滿足建立時間和保持時間,所以會造成亞穩態,而xclk_output2則沒有該問題,
3.3.2 亞穩態
詳見第一章,
3.4 多時鐘設計的處理技術
通用準則:1、時鐘命名
2、分模塊設計
3.4.1 時鐘命名法
為了方便腳本使用通配符對所有時鐘進行操作,對時鐘應有一個確定的命名,如sys_clk、tx_clk和rx_clk,同屬一個時鐘域的信號也應在命名時使用同樣的前綴,這樣可以方便分辨出信號所屬時鐘域,并決定時直接使用該信號,還是同步后使用,
3.4.2 分塊化設計
1、每個模塊只因當在單個時鐘下作業
2、在信號跨時鐘域傳輸時,使用同步器模塊,
3、同步器規模盡可能小,
優點:使靜態時序分析變得很簡單,單個模塊可以看作是完全同步的,另外,同步模塊不需要做靜態時序分析,但是要保證滿足保持時間要求,

如圖所有跨時鐘域傳輸的信號都要經過一個額外的同步器模塊,
3.4.3 跨時鐘域
兩類:控制信號的傳輸、資料信號的傳輸,
3.4.3.1 控制信號的傳輸(同步化)
最常用的方式:多級同步器,(只能降低亞穩態可能性,增加更多級觸發器,可以進一步降低亞穩態出現的可能性)
缺點(不可避免地開銷):增加了電路的整體延時,

可以看到,亞穩態如果在一個周期內穩定下來,第二級暫存器就能輸出一個穩定的值,
有時第一級同步器信號從亞穩態進入穩態需要不止一個周期,第二級觸發器輸出依然亞穩態,這是為了安全起見,應加入三級同步器,

大多數設計中兩級同步電路就足以避免亞穩態出現了,只有在時鐘頻率非常高的設計中才要求使用三級同步器電路,
3.4.3.2 資料信號的傳輸
兩種方法:
1、握手信號
2、異步FIFO
3.5 跨時鐘域
3.5.1 同頻零相位差時鐘
其實就是單時鐘設計,
3.5.2 同頻恒定相位差時鐘

從這幅圖看感覺對建立時間要求更高了,對保持時間要求變低了,對組合邏輯的延時約束會變得更緊,這種情況不需要同步器,只需要使設計STA通過即可,
3.5.3 非同頻、可變相位差時鐘
3.5.3.1 整數倍頻率的時鐘

clk2捕獲資料的時間可能是T、2T、3T,取決于資料在clk1哪個邊沿發出,任意路徑的最差延遲都應在時鐘邊沿相位差T時滿足建立時間要求,最差保持時間應在時鐘邊沿相位差為零時進行,
可以使源資料每三個源時鐘改變一次,防止丟失資料,
3.5.3.2 非整數倍頻率的時鐘
情況一:源時鐘有效沿和目的時鐘有效沿之間有足夠大的相位差,不會有亞穩態產生,

clk1和clk2分別是對同一個時鐘的3分頻和2分頻,如圖,兩個時鐘最小相位差為2.5ns,滿足建立時間和保持時間,但應避免在跨時鐘位置使用任何組合邏輯,
慢到快不會有資料丟失;快到慢可能出現資料丟失,為了解決這個問題,必須將元資料保持至少一個目標時鐘周期,
情況2:兩個有效沿很近,但當再出出現挨著的情況前,接下來的幾個周期兩個時鐘沿會保留足夠的裕量,

圖中期望的波形使B1,實際的波形使B2,這里資料不會丟失(因為是從慢到快),但是可能不連貫,
從快倒滿可能出現資料丟失,為了阻止這種情況,源資料應保持至少一個目標時鐘周期不變,
情況三:相位差異小,能連續存在幾個周期,

圖中前兩個周期可能違背建立時間,后兩個周期可能違背保持時間,
這種情況下,即使資料從慢到快時鐘域也可能丟失,
為了不丟資料,資料應保持至少兩個目的時鐘周期,這同時適用于快到慢和慢到快,但是資料不連續的問題依然存在,
這是,使用握手和FIFO傳輸資料就更有效,因為它們解決了資料不連續的問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/537704.html
標籤:其他
下一篇:實用工具(銳捷睿易篇)
