在進行乙個含多個時鐘的設計時,在**和綜合過程中需要遵循一定的準則,這樣會帶來很大的好處。通用的準則如下:
xilinx的開發工具vivado有「project mode」和「non-project mode」,在「non-project mode」中,我們經常使用指令碼進行開發。同樣在**的時候,也會編寫tcl指令碼。在寫指令碼的過程中,就會經常使用萬用字元,如果設計者在設計初期對訊號命名的時候考慮到這個因素,那麼就可以在寫指令碼的時候省去很多麻煩。所以引入了「時鐘命名法」。同時,使用時鐘命名法命名後的時鐘,後續開發者僅僅通過時鐘名稱就可以知道該訊號的含義。例如,系統時鐘可以命名為sys_clk,發生時鐘可以命名為tx_clk,接收時鐘可以命名為rx_clk等。同理,屬於同一時鐘域的訊號,也可以在命名時使用同樣的字首。例如:有系統時鐘驅動的訊號,可以用類似於sys_rom_addr、sys_rom_data這樣的方式作為起始。
這樣的命名過程能極大地較少對訊號的混淆,並在各模組之間提供交單的介面,因此提高了工作效率。
這是設計含多時鐘的模組時常用的一種有效技術,如下所述:
將整個工程按照時鐘域的不同分割成不同的模組的優點在於使得靜態時序分析變得很簡單,因為所有輸出或輸入某時鐘域的訊號都與該時鐘的模組保持同步。所以設計就成為完全同步的。另外,對於同步模組是不需要做靜態時序分析的。但是要保證滿足保持時間的要求。
跨時鐘域訊號的傳輸可以歸為兩類,分別是:
在設計中,如果將乙個非同步訊號直接送給若干個並行工作的觸發器,就會大大增加亞穩態事件發生的概率,因為有可能有多個觸發器進入亞穩態。為了避免形成這種情況下的亞穩態。我們常常使用同步觸發器的輸出訊號來取代非同步訊號。
為了減少亞穩態的影響,設計者最常用的方法是使用多級同步器,即將兩個或多個觸發器串聯起來組成的同步電路,如圖1所示:
圖 1 兩級同步電路
如果同步器的第一級觸發器產生亞穩態輸出,那麼這個亞穩態會在同步器的第二個觸發器取樣前進入穩態。這種方法無法保證第二級觸發器輸出的一定就不會出現亞穩態。但是它確實降低了出現亞穩態的可能性。同理,如果為同步器增加更多級觸發器,就會進一步降低出現亞穩態的可能性。
然而這種方法的乙個缺點是:同步器同樣會增加電路的開銷,同時也增加了電路的整體延時。
上述兩級同步器的時序圖如圖2所示:
圖 2 兩級同步器電路的時序
源時鐘域使用src_clk作為時鐘,其非同步輸出訊號src_data_out輸入第乙個同步觸發器中。dest_data_in訊號(即第乙個同步觸發器的輸出)進入亞穩態,但是在第二個同步電路取樣前會進入到穩定狀態。因此把dest_data2_in訊號(第二個同步觸發器的輸出)同步化到目的時鐘dest_clk時鐘。
有些情況下,第一級同步觸發器的輸出訊號從亞穩態進入穩定狀態所需要的時間可能需要不止乙個時鐘週期,這就意味著第二級同步觸發器的輸出仍然為亞穩態,此時就需要第**同步觸發器,如圖3所示:
圖 3 **同步觸發器
如果第二級同步觸發器的輸出為亞穩態,那麼時序電路圖如下圖4:
圖 4 **同步觸發器時序圖
源模組的非同步輸出訊號src_data_out0工作在src_clk時鐘下,並送給第乙個同步觸發器。訊號dest_data1_in(第乙個同步觸發器的輸出訊號)進入亞穩態,但可以在多個時鐘週期的時間裡恢復到穩定狀態。在這段時間內,第二個觸發器會對第乙個觸發器進行取樣,於是訊號dest_data2_out(第二個同步觸發器的輸出)也會進入亞穩態。如圖所示,在第三個觸發器取樣前,該訊號已經進入了穩定狀態,這樣在三個同步器輸出的時候,訊號也就是穩定的狀態。
在大多數跨時鐘域設計中,使用兩級同步電路就足以避免亞穩態的出現了。所以只有在訊號頻率非常高的設計中才要使用**同步電路。
在多時鐘域設計中,資料經常會從乙個時鐘域傳輸到另乙個時鐘域,如果在資料匯流排傳輸的過程中也使用多級同步器,這樣會帶來很大的問題,因為我們無法保證所有的資料經過同步器後都有同樣的延遲。所以針對資料輸出,應該考慮使用以下兩種方法:
以上兩種方式在後續詳細解釋。
關於跨時鐘域和非同步時鐘
我們在實際工作中,會遇到多個時鐘,那麼這多個時鐘是不是非同步時鐘呢?這個需要分辨清楚,不是所有的時鐘只要頻率不同相位不同就認為是非同步時鐘,這是乙個錯誤的概念。我們可以簡單地理解非同步時鐘就是從不同的外部晶振生成的時鐘(恢復的時鐘也可以認為是由不同的晶振的時鐘)。對於同一晶振經過pll或者dcm生成的不同頻率不同相位的時鐘,它們不屬於非同步時鐘。
[1] mohit arora.硬體架構的藝術.機械工業出版社. 50-56
邏輯設計方法學 5 控制時鐘偏移
整個晶元中時鐘訊號到達時間的差異成為時鐘偏移,即clock skew。在時序設計的時候,滿足暫存器的建立時間和保持時間的要求是最基本的設計原則。在相鄰的暫存器之間的資料傳輸延遲,與時鐘偏移應該滿足一定的關係,在本節中,我們來詳細地討論其關係。通過圖1來看相鄰暫存器之間傳輸的時候的資料延遲和時鐘偏移,...
邏輯設計方法學 7 跨時鐘域
如果多個時鐘都起源於同一時鐘,並且它們的香味和頻率關係是已知的,那麼這些時鐘可以看成是跨同步時鐘域的時鐘。按照相位和頻率的關係,可以將這些時鐘分成以下型別 假定兩個時鐘之間的相位和時鐘抖動相同,並假定他們之間的路徑已經按同樣的時鐘延遲和偏移引數進行了平衡。除此之外,還假設這兩個時鐘起始處的相位差為零...
邏輯設計方法學 3 門控時鐘
對於每乙個暫存器,都需要有時鐘輸入端,如果在一些對設計功耗要求比較高的地方,保持設計準確後的功耗控制便是頭等大事。為了分析如何減少功耗,首先要來分析功耗主要由哪些部分組成。在絕大多數的設計中,功耗主要由三部分組成 在每個時鐘沿變化的組合邏輯所產生的功耗 由於觸發器驅動這些組合邏輯 由觸發器產生的功耗...