高速數字電路模塊通常以 同步 (synchronous)電路的形式實現,它們由一個或者多個時鐘驅動(觸發)。對于 單一時鐘(域) 的同步電路而言,只要輸入和時鐘的關系滿足 建立(setup)時間 、保持(hold)時間的時序關系,電路的輸出(布爾值)就是可預測的,這是數字邏輯電路設計的基礎。如果 不能滿足建立保持時間 ,我們認為輸入是 異步 (asynchronous) 信號 。一個時鐘域的同步信號輸出到另一個時鐘域通常被認為是異步信號。
本文從同步電路的時序模型出發,探討了兩種時鐘同步的總線電路方案:
共同時鐘 (common clock)總線
源同步 (source synchronous)總線
共同時鐘總線的收發端使用同一時鐘,結構簡單,由于物理限制和PVT效應,局限于時鐘速率比較低的應用;源同步總線增加 接口時鐘 ,并以 與數據相同的方式發送 ,大大提升了接口時鐘速率,由于引入了 不同的時鐘域 ,也增加了接口設計的復雜程度。
1. 時鐘同步電路的時序模型
<圖1>
寄存器A在時鐘(launch clock)的上升沿打出數據,經過兩段飛行時間(傳輸延時)和組合邏輯電路延時之后,在下一個時鐘沿(capture clock)被寄存器B抓取,這里假設A、B的時鐘完全相同 - 頻率相同相位相同。在兩個時鐘上升沿之間,按照時間順序,發生了下列事件:
寄存器A打出輸出(QA)。QA在上升沿之后一段時間才能有效(valid),這個時間是tco(clock to output);
傳輸延時tflight1,組合邏輯電路引起的延時tlogic,傳輸延時tflight2;
寄存器B抓取輸入。輸入在時鐘上升沿之前必須提前穩定(建立時間tsetup),在時鐘上升沿之后保持一段時間(保持時間thold)。假如不滿足建立、保持時間的要求,那么B的輸出可能會非0非1的亞穩態(Metastability)。
<圖2>
把這些事件銜接在一起,形成了時序預算(timing budget)分配圖。注意,‘X’表示不確定區間,通常是由PVT(制程電壓溫度)效應引起的偏差。
tsetup_margin = Period - tco(max)- tflight1 - tlogic(max) - tflight2 - tsetup
thold_margin = tco(min) + tflight1 + tlogic(min) + tflight2 - thold
tsetup_margin和thold_margin為 時序裕量 (margin),它>=0代表滿足建立保持時間要求。
2. 共同時鐘(common clock)系統總線
共同時鐘系統其實可以借用<圖1>,只需要把寄存器換成芯片(系統)。
共同時鐘系統只有一個時鐘(域),無論發送端還是接收端。
回到時序計算公式,要使tsetup_margin >=0,可以得到:
Period >= tco(max) + tflight1 + tlogic(max) + tflight2 + tsetup
右邊這些參數代表了真實的物理局限,它們決定了時鐘可以跑多快(時鐘周期最小是多少)。
tflight1、tflight2來自于PCB走線,連接器,芯片封裝等等。
tco、tsetup、tlogic代表芯片的 物理特性參數 。不同的芯片在不同的溫度/電壓下由于PVT效應表現會有變化,形成了時序圖上的 不確定區間 。我們必須計算最惡劣(worst case)的情況,這會吃掉時序裕量。
而且,我們也做不到理想的單一同步時鐘。出于信號質量的考量,時鐘信號通常是點對點(point to point)的連接。不同模塊的時鐘,通常是連接同一個時鐘buffer的不同扇出(fanout)。在工程實踐上,理想的同步很難做到,只能把相位偏差(skew)控制在一定范圍內。
所有這些,都限制了時鐘速度或者數據吞吐量的提升,而優化參數常常意味著成本的抬升。老戚看到的共同時鐘系統的時鐘沒有超過100MHz的。實現更高速總線的解決辦法是源同步時鐘方案。
3. 源同步(source synchronous)系統
源同步在芯片(系統)接口上 同時輸出數據和(接口)時鐘 ,數據和時鐘采用完全相同的IO結構,從而最大程度的抵消tco,tflight等等。通常認為,同一個芯片上的PVT效應也是一致的。
<圖3>
<圖3>是典型的中心對齊(center aligned)的源同步DDR輸出。內部PLL的輸出兩路相位相差90度的時鐘,經過同等的傳輸延時,到達接收端的時候,時鐘剛好處在數據的中心(假定接收端建立保持時間的要求也是對等的)。接收端使用接口時鐘clock_out抓取數據data_out,緊接著把數據同步到本地時鐘。 接口時鐘和本地時鐘并不一致 ,屬于 不同的時鐘域 。
現有的高速并行接口無一例外都是源同步,最典型的當然是內存接口。以DDR4為例,地址/命令/片選信號和主時鐘形成了一組源同步總線,內存數據DQ每8位就會有一個DQS信號作為接口時鐘,形成源同步的數據時鐘總線。在接收端,數據會先被抓取到相應DQS的時鐘域,然后同步到主時鐘。
源同步很好的解決了接口總線的速度問題,卻也引入了不同的時鐘域, 增加了收發接口設計的復雜度 。(系統攻城獅成功甩鍋給了芯片)
4.跨時鐘域(clock domain crossing)
實現跨時鐘域的信號傳遞要回到時鐘域C0的輸出到時鐘域C1的輸入的建立保持時間的基本問題。
假如時鐘C0/C1 同源 (不同頻,例如分頻/倍頻關系)而且相位差固定的 可以直接用本地時鐘抓取 ;同頻(源)但是不知道相位關系不確定的可以以FIFO的方式解決;有頻差的也可以用 FIFO解決 ,但要防止溢出(overrun,underrun)。
還是以DDR4內存接口為例,假設主時鐘是1600MHz,那么DQS則是倍頻 --- 3200MHz。由于時鐘(包括地址/命令/片選)信號的fly-by拓撲,時鐘到達不同內存顆粒存在先后順序。對于寫操作(write),控制器通過write leveling偵測到未經調整的DQS和主時鐘的相位關系,相應的調整輸出DQS的相位,保證內存顆粒接收的DQS和主時鐘保持 特定的相位關系 ,從而在顆粒內部能夠以最簡單的方式(同時延時latency最小)完成跨時鐘域。對于讀操作,似乎有read leveling來實現相似的功能(這方面資料不詳)。有趣的是,在DDR4內存接口,控制器(通常邏輯更為復雜)承擔了所有時序調整的責任,內存(存儲廠商的邏輯設計能力要差一些)接口則以最簡化的方式工作。
在以太網領域,處理跨時鐘域更常用的方法是FIFO(First In First Out)。FIFO不僅能夠處理同頻時鐘的跨時鐘域數據轉換,也能處理不同頻率(有限頻差)的跨時鐘域處理,從而獲得了廣泛的應用。PCIe協議和以太網協議都運用基于FIFO的 彈性緩沖 (elastic buffer)來處理系統時鐘的PPM偏差問題,這個話題咱們下回分解。
-
寄存器
+關注
關注
31文章
5317瀏覽量
120004 -
DDR
+關注
關注
11文章
711瀏覽量
65226 -
總線
+關注
關注
10文章
2866瀏覽量
87985 -
數字電路
+關注
關注
193文章
1600瀏覽量
80497 -
時鐘同步
+關注
關注
0文章
85瀏覽量
12752
發布評論請先 登錄
相關推薦
評論