邏輯設計中多時鐘設計【1】

簡介

在實際的邏輯設計中,單個的時鐘域內的設計是很容易滿足時序要求的。然而,在實際的工程中基本沒有實用的設計是隻依靠單時鐘就能實現的。所以需要考慮在多時鐘領域內如何處理信號,以保證可以得到穩定的設計。多時鐘域的信號處理,屬於邏輯開發中比較基礎的問題。


多時鐘域

一般對於如下兩種情況,我們都認爲屬於跨時鐘域:

  • 時鐘頻率不同
  • 時鐘頻率相同,相位不同
在多時鐘域設計中,經常會帶來如下常見的兩個問題:

  • 違背建立時間和保持時間
  • 產生亞穩態(其本質是違背建立時間和保持時間)
(關於建立時間,保持時間,以及亞穩態的概念,請參考相關文檔或後續介紹)


跨時鐘域的處理方法

分模塊設計

在處理跨時鐘域問題的時候,首先需要將按照工程中所用到的時鐘劃分模塊,儘量只做到一個模塊只使用一個時鐘。但是這不是絕對的,比如信號可以以clk1寫入到buffer,然後以clk2從buffer中讀取數據。最常用的的跨時鐘域的方法是使用同步器,爲了使靜態時序分析(STA)變得簡單,一般不推薦大於三級的同步器設計。一般的經驗值爲二級同步器即可滿足時序要求。


需要同步的信號

我們可以把所有需要同步的信號分成兩大類:

  • 控制信號(單bit)
  • 數據信號(多bit)

單bit控制信號的傳輸

一個處於clk1時鐘域的異步信號,不能直接送給時鐘域爲clk2的觸發器,這樣會造成時鐘域clk2亞穩態的概率。爲了避免這樣的情況發生,常常採用多級同步器的輸出信號來取代異步信號。多級同步器,即將多個觸發器串聯起來組成的同步電路,見下圖所示:



上圖爲兩級同步器,以及時序電路圖

需要說明的是,同步器並不能確實地降低出現亞穩態的可能性,但更多的同步器確實能進一步降低出現亞穩態的可能性。如果在特別高速的電路中,所使用的同步器就比較多。但即使是這樣,我們仍推薦在簡單的設計中使用多級同步器來做控制信號的同步。多級同步器的缺點也很明顯,即同步器使電路不可避免地產生硬件資源的開銷,並且增加了電路的整體延時。


那麼,需要多少級同步器才能解決同步的問題呢?在有些情況下,第一級同步器的輸出信號從亞穩態進入穩定狀態,僅僅需要一個時鐘週期是不夠的(主要體現在高時鐘頻率條件下,或一些特殊情況下),也就意味着第二級同步器的輸出依然是不穩定的狀態,那麼在設計的過程中,必須使用三級同步器電路。多級同步器,在電路上的體現只是串聯了一個觸發器。以下的時序圖說明了使用三級同步器的必要性。


數據信號的傳輸

上面簡單的介紹了單bit控制信號的同步,那麼對於多bit的數據信號,經常所使用的方法爲如下三種:

  • 使用RAM
  • 使用異步FIFO
  • 使用握手信號
應當注意的是,在使用FIFO的時候,FIFO的full/empty信號同步在Read的時鐘域下,如果在write數據到FIFO需要full/empty信號的時候,也需要考慮使用同步器。同樣的,在使用握手信號的時候,也需要考慮握手信號的同步。


關於同步器

在上面的設計中,會發現一個情況,即控制信號至少大於一個時鐘週期,也就是說src_clk的時鐘頻率要比dest_clk的時鐘頻率慢,這樣使用上面所介紹的同步器是沒有任何問題的。但是當dest_clk比src_clk慢,即控制信號小於一個dest_clk的時鐘週期,該如何處理呢?
如下圖的設計方法,將第一級觸發器的輸入D與VCC項鍊,同時第一級觸發器的時鐘信號使用小於時鐘週期的異步信號輸入。另外兩個觸發器直接由系統時鐘控制。經過第一級觸發器後,得到了一個時鐘週期的脈衝信號,這個脈衝信號經過兩級同步器同步輸出。

總結

控制信號的處理其實還有其他的設計方法,如:將控制信號與數據一起當作數據信號,送入FIFO中,然後從FIFO中恢復出控制信號。另外一種,是根據控制信號與數據的關係,最後根據數據恢復出控制信號。例如在處理並行RGB信號的時候,根據VESA的顯示器時序標準,無需將控制信號HSYNC,VSYNC,ACTIVE做跨時鐘域的同步,而直接可以根據圖像中的第一個像素,在輸出端恢復出這三個控制信號。
所以,一定要根據實際工作中控制信號的特性來分析,怎樣的設計方法纔是最佳的設計。
發佈了26 篇原創文章 · 獲贊 106 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章