關於時鐘

關於時鐘

無淪是用離散邏輯、可編程邏輯,還是用全定製硅器件實現的任何數字設計,爲了成功地操作,可靠的時鐘是非常關鍵的。設計不良的時鐘在極限的溫度、電壓或製造工藝的偏差情況下將導致錯誤的行爲,並且調試困難、花銷很大。 在設計PLD/FPGA時通常採用幾種時鐘類型。時鐘可分爲如下四種類型:全局時鐘、門控時鐘、多級邏輯時鐘和波動式時鐘。多時鐘系統能夠包括上述四種時鐘類型的任意組合。

分類討論:

1. 全局時鐘

對於一個設計項目來說,全局時鐘(或同步時鐘)是最簡單和最可預測的時鐘。在PLD/FPGA設計中最好的時鐘方案是:由專用的全局時鐘輸入引腳驅動的單個主時鐘去鍾控設計項目中的每一個觸發器。只要可能就應儘量在設計項目中採用全局時鐘。PLD/FPGA都具有專門的全局時鐘引腳,它直接連到器件中的每一個寄存器。這種全局時鐘提供器件中最短的時鐘到輸出的延時。

全局時鐘的實例:

觸發器的數據輸入D[1..3]應遵守建立時間和保持時間的約束條件。建立和保持時間的數值在PLD數據手冊中給出,也可用軟件的定時分析器計算出來。如果在應用中不能滿足建立和保持時間的要求,則必須用時鐘同步輸入信號

2. 門控時鐘

在許多應用中,整個設計項目都採用外部的全局時鐘是不可能或不實際的。PLD具有乘積項邏輯陣列時鐘(即時鐘是由邏輯產生的),允許任意函數單獨地鍾控各個觸發器。然而,當你用陣列時鐘時,應仔細地分析時鐘函數,以避免毛刺。

通常用陣列時鐘構成門控時鐘。門控時鐘常常同微處理器接口有關,用地址線去控制寫脈衝。然而,每當用組合函數鍾控觸發器時,通常都存在着門控時鐘。如果符合下述條件,門控時鐘可以象全局時鐘一樣可靠地工作

  1. 驅動時鐘的邏輯必須只包含一個“與”門或一個“或”門。如果採用任何附加邏輯在某些工作狀態下,會出現競爭產生的毛刺。
  2. 邏輯門的一個輸入作爲實際的時鐘,而該邏輯門的所有其它輸入必須當成地址或控制線,它們遵守相對於時鐘的建立和保持時間的約束。

“與門”門控時鐘:



“或門”門控時鐘:



在這兩個實例中,引腳nWR和nWE考慮爲時鐘引腳,引腳ADD[o..3]是地址引腳,兩個觸發器的數據是信號D[1..n]經隨機邏輯產生的。上面的波形圖顯示出有關建立時間和保持時間的要求。這兩個設計項目的地址線必須在時鐘保持有效的整個期間內保持穩定(nWR和nWE是低電平有效)。如果地址線在規定的時間內未保持穩定,則在時鐘上會出現毛刺,造成觸發器發生錯誤的狀態變化。另一方面,數據引腳D[1..n]只要求在nWR和nWE的有效邊沿處滿足標準的建立和保持時間的規定。

我們往往可以將門控時鐘轉換成全局時鐘以改善設計項目的可靠性。

用全局時鐘重新設計門控時鐘的電路



地址線在控制D觸發器的使能輸入,許多PLD設計軟件,如MAX+PLUSII軟件都提供這種帶使能端的D觸發器。當ENA爲高電平時,D輸入端的值被鍾控到觸發器中:當ENA爲低電平時,維持現在的狀態。重新設計的電路的定時波形表明地址線不需要在nWR有效的整個期間內保持穩定;而只要求它們和數據引腳一樣符合同樣的建立和保持時間,這樣對地址線的要求就少很多。

不可靠的門控時鐘的例子:



3位同步加法計數器的RCO輸出用來鍾控觸發器。然而,計數器給出的多個輸入起到時鐘的作用,這違反了可靠門控時鐘所需的條件之一。在產生RCO信號的觸發器中,沒有一個能考慮爲實際的時鐘線,這是因爲所有觸發器在幾乎相同的時刻發生翻轉。而我們並不能保證在PLD/FPGA內部QA,QB,QC到D觸發器的佈線長短一致,因此,如上圖時間波形所示,在計數器器從3計到4時,RCO線上會出現毛刺(假設QC到D觸發器的路徑較短,即QC的輸出先翻轉)。

一種可靠的全局門控時鐘電路:


它是上例中不可靠計數器電路的改進,RCO控制D觸發器的使能輸入。這個改進不需要增加PLD的邏輯單元。這個電路等效於前一個電路,但卻可靠的多。

3. 多級邏輯時鐘

當產生門控時鐘的組合邏輯超過一級(即超過單個的“與”門或“或”門)時,證設計項目的可靠性變得很困難。即使樣機或仿真結果沒有顯示出靜態險象,但實際上仍然可能存在着危險。通常,我們不應該用多級組合邏輯去鍾控PLD設計中的觸發器。

含有險象的多級時鐘的例子:


時鐘是由SEL引腳控制的多路選擇器輸出的。多路選擇器的輸入是時鐘(CLK)和該時鐘的2分頻(DIV2)。由上圖的定時波形圖看出,在兩個時鐘均爲邏輯1的情況下,當SEL線的狀態改變時,存在靜態險象。險象的程度取決於工作的條件。 多級邏輯的險象是可以去除的。例如,你可以插入“冗餘邏輯”到設計項目中。然而,PLD/FPGA編譯器在邏輯綜合時會去掉這些冗餘邏輯,使得驗證險象是否真正被去除變得困難了。爲此,必須應尋求其它方法來實現電路的功能。

一種單級時鐘的替代方案:


圖中SEL引腳和DIV2信號用於使能D觸發器的使能輸入端,而不是用於該觸發器的時鐘引腳。採用這個電路並不需要附加PLD的邏輯單元,工作卻可靠多了。 不同的系統需要採用不同的方法去除多級時鐘,並沒有固定的模式。

4. 行波時鐘

另一種流行的時鐘電路是採用行波時鐘,即一個觸發器的輸出用作另一個觸發器的時鐘輸入。如果仔細地設計,行波時鐘可以象全局時鐘一樣地可靠工作。然而,行波時鐘使得與電路有關的定時計算變得很複雜。行波時鐘在行波鏈上各觸發器的時鐘之間產生較大的時間偏移,並且會超出最壞情況下的建立時間、保持時間和電路中時鐘到輸出的延時,使系統的實際速度下降。

用計數翻轉型觸發器構成異步計數器時常採用行波時鐘,一個觸發器的輸出鍾控下一個觸發器的輸入,同步計數器通常是代替異步計數器的更好方案,這是因爲兩者需要同樣多的宏單元而同步計數器有較快的時鐘到輸出的時間。

行波時鐘:


具有全局時鐘的同步計數器:


它和上例功能相同,用了同樣多的邏輯單元實現,卻有較快的時鐘到輸出的時間。幾乎所有PLD開發軟件都提供多種多樣的同步計數器。

5. 多時鐘系統

許多系統要求在同一個PLD內採用多時鐘。最常見的例子是兩個異步微處理器器之間的接口,或微處理器和異步通信通道的接口。由於兩個時鐘信號之間要求一定的建立和保持時間,所以,上述應用引進了附加的定時約束條件。它們也會要求將某些異步信號同步化。

一個多時鐘系統的實例:

CLK_A用以鍾控REG_A,CLK_B用於鍾控REG_B,由於REG_A驅動着進入REG_B的組合邏輯,故CLK_A的上升沿相對於CLK_B的上升沿有建立時間和保持時間的要求。由於REG_B不驅動饋到REG_A的邏輯,CLK_B的上升沿相對於CLK_A沒有建立時間的要求。此外,由於時鐘的下降沿不影響觸發器的狀態,所以CLK_A和CLK_B的下降沿之間沒有時間上的要求。

電路中有兩個獨立的時鐘,可是,在它們之間的建立時間和保持時間的要求是不能保證的。在這種情況下,必須將電路同步化。

具有同步寄存器輸出的多時鐘系統:


上圖給出了REG_A的值(如何在使用前)同CLK_B同步化。新的觸發器REG_C由GLK_B觸控,保證REG_G的輸出符合REG_B的建立時間。然而,這個方法使輸出延時了一個時鐘週期。(如果CLK_A和CLK_B是相互獨立的,則REG—A的輸出必須在它饋送到1REG_B之前,用REG_C同步化)

在許多應用中只將異步信號同步化還是不夠的,當系統中有兩個或兩個以上非同源時鐘的時候,數據的建立和保持時間很難得到保證,我們將面臨複雜的時間問題。最好的方法是將所有非同源時鐘同步化。使用PLD內部的鎖項環(PLL或DLL)是一個效果很好的方法,但不是所有PLD都帶有PLL、DLL,而且帶有PLL功能的芯片大多價格昂貴,所以除非有特殊要求,一般場合可以不使用帶PLL的PLD。 這時我們需要使用帶使能端的D觸發器,並引入一個高頻時鐘。

不同源時鐘:


如圖所示,系統有兩個不同源時鐘,一個爲3MHz,一個爲5MHz,不同的觸發器使用不同的時鐘。爲了系統穩定,我們引入一個20MHz時鐘,將3M和5M時鐘同步化

同步化任意非同源時鐘:


20M的高頻時鐘將作爲系統時鐘,輸入到所有觸發器的的時鐘端。3M_EN 和5M_EN將控制所有觸發器的使能端。即原來接3M時鐘的觸發器,接20M時鐘,同時3M_EN 將控制該觸發器使能 ,原接5M時鐘的觸發器,也接20M時鐘,同時5M_EN 將控制該觸發器使能。 這樣我們就可以將任何非同源時鐘同步化。(一個DFF和後面非門,與門構成時鐘上升沿檢測電路)

另外,異步信號輸入總是無法滿足數據的建立保持時間,容易使系統進入亞穩態,所以也建議設計者把所有異步輸入都先經過雙觸發器(寄存兩次)進行同步化。

小結:

穩定可靠的時鐘是系統穩定可靠的重要條件,我們不能夠將任何可能含有毛刺的輸出作爲時鐘信號,並且儘可能只使用一個全局時鐘,對多時鐘系統要注意同步異步信號和非同源時鐘。

參考資料

Qian的專欄


1. 關於時鐘問題的探討

2. FPGA時鐘問題的探討彙總

Qian的專欄


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章