無淪是用離散邏輯,、可編程邏輯,,還是用全定制硅器件實現(xiàn)的任何數(shù)字設計,為了成功地操作,,可靠的時鐘是非常關鍵的,。設計不良的時鐘在極限的溫度、電壓或制
造工藝的偏差情況下將導致錯誤的行為,并且調(diào)試困難,、花銷很大,。
在設計PLD/FPGA時通常采用幾種時鐘類型。時鐘可分為如下四種類型:全局時鐘,、門控時鐘,、多級邏輯時鐘和波動式時鐘。多時鐘系統(tǒng)能夠包括上述四種時鐘類型的任意組合,。
1.全局時鐘
對于一個設計項目來說,全局時鐘(或同步時鐘)是最簡單和最可預測的時鐘,。在PLD/FPGA設計中最好的時鐘方案是:由專用的全局時鐘輸入引腳驅(qū)動的單
個主時鐘去鐘控設計項目中的每一個觸發(fā)器,。只要可能就應盡量在設計項目中采用全局時鐘。PLD/FPGA都具有專門的全局時鐘引腳,,它直接連到器件中的每
一個寄存器,。這種全局時鐘提供器件中最短的時鐘到輸出的延時。
圖1 示出全局時鐘的實例,。圖1 定時波形示出觸發(fā)器的數(shù)據(jù)輸入D[1..3]應遵守建立時間和保持時間的約束條件,。建立和保持時間的數(shù)值在PLD數(shù)據(jù)手冊中給出,也可用軟件的定時分析器計算出來,。如果在應用中不能滿足建立和保持時間的要求,,則必須用時鐘同步輸入信號(參看下一章“異步輸入”)。
圖1 全局時鐘
(最好的方法是用全局時鐘引腳去鐘控PLD內(nèi)的每一個寄存器,,于是數(shù)據(jù)只要遵守相對時鐘的建立時間tsu和保持時間th)
2.門控時鐘
在許多應用中,,整個設計項目都采用外部的全局時鐘是不可能或不實際的。PLD具有乘積項邏輯陣列時鐘(即時鐘是由邏輯產(chǎn)生的),,允許任意函數(shù)單獨地鐘控各個觸發(fā)器,。然而,當你用陣列時鐘時,,應仔細地分析時鐘函數(shù),,以避免毛刺。
通常用陣列時鐘構成門控時鐘,。門控時鐘常常同微處理器接口有關,,用地址線去控制寫脈沖。然而,,每當用組合函數(shù)鐘控觸發(fā)器時,,通常都存在著門控時鐘。如果符合下述條件,,門控時鐘可以象全局時鐘一樣可靠地工作:
1.驅(qū)動時鐘的邏輯必須只包含一個“與”門或一個“或”門,。如果采用任何附加邏在某些工作狀態(tài)下,會出現(xiàn)競爭產(chǎn)生的毛刺。 2.邏輯門的一個輸入作為實際的時鐘,,而該邏輯門的所有其它輸入必須當成地址或控制線,,它們遵守相對于時鐘的建立和保持時間的約束。
圖
2和圖3 是可靠的門控時鐘的實例,。在 圖2 中,,用一個“與”門產(chǎn)生門控時鐘,在 圖3
中,,用一個“或”門產(chǎn)生門控時鐘,。在這兩個實例中,引腳nWR和nWE考慮為時鐘引腳,,引腳ADD[o..3]是地址引腳,,兩個觸發(fā)器的數(shù)據(jù)是信號
D[1..n]經(jīng)隨機邏輯產(chǎn)生的。
圖2 “與”門門控時鐘
圖3 “或”門門控時鐘
圖2和圖3
的波形圖顯示出有關的建立時間和保持時間的要求,。這兩個設計項目的地址線必須在時鐘保持有效的整個期間內(nèi)保持穩(wěn)定(nWR和nWE是低電平有效),。如果地
址線在規(guī)定的時間內(nèi)未保持穩(wěn)定,則在時鐘上會出現(xiàn)毛刺,,造成觸發(fā)器發(fā)生錯誤的狀態(tài)變化,。另一方面,數(shù)據(jù)引腳D[1..n]只要求在nWR和nWE的有效邊
沿處滿足標準的建立和保持時間的規(guī)定,。
我們往往可以將門控時鐘轉(zhuǎn)換成全局時鐘以改善設計項目的可靠性,。圖4 示出如何用全局時鐘重新設計 圖2
的電路。地址線在控制D觸發(fā)器的使能輸入,,許多PLD設計軟件,,如MAX+PLUSII軟件都提供這種帶使能端的D觸發(fā)器。當ENA為高電平時,,D輸入端
的值被鐘控到觸發(fā)器中:當ENA為低電平時,,維持現(xiàn)在的狀態(tài)。
圖4 “與”門門控時鐘轉(zhuǎn)化成全局時鐘
圖4 中重新設計的電路的定時波形表明地址線不需要在nWR有效的整個期間內(nèi)保持穩(wěn)定,;而只要求它們和數(shù)據(jù)引腳一樣符合同樣的建立和保持時間,,這樣對地址線的要求就少很多。
圖
給出一個不可靠的門控時鐘的例子,。3位同步加法計數(shù)器的RCO輸出用來鐘控觸發(fā)器,。然而,計數(shù)器給出的多個輸入起到時鐘的作用,,這違反了可靠門控時鐘所需
的條件之一,。在產(chǎn)生RCO信號的觸發(fā)器中,沒有一個能考慮為實際的時鐘線,,這是因為所有觸發(fā)器在幾乎相同的時刻發(fā)生翻轉(zhuǎn),。而我們并不能保證在
PLD/FPGA內(nèi)部QA,QB,QC到D觸發(fā)器的布線長短一致,,因此,如 圖5
的時間波形所示,,在器從3計到4時,,RCO線上會出現(xiàn)毛刺(假設QC到D觸發(fā)器的路徑較短,即QC的輸出先翻轉(zhuǎn)),。
圖5 不可靠的門控時鐘
(定時波形示出在計數(shù)器從3到4改變時,,RCO信號如何出現(xiàn)毛刺的)
圖6 給出一種可靠的全局鐘控的電路,它是圖5不可靠計數(shù)器電路的改進,,RCO控制D觸發(fā)器的使能輸入,。這個改進不需要增加PLD的邏輯單元。
圖6 不可靠的門控時鐘轉(zhuǎn)換為全局時鐘
(這個電路等效于圖5電路,,但卻可靠的多)
3.多級邏輯時鐘
當產(chǎn)生門控時鐘的組合邏輯超過一級(即超過單個的“與”門或“或”門)時,,證設計項目的可靠性變得很困難。即使樣機或仿真結果沒有顯示出靜態(tài)險象,,但實際上仍然可能存在著危險。通常,,我們不應該用多級組合邏輯去鐘控PLD設計中的觸發(fā)器,。
圖
7
給出一個含有險象的多級時鐘的例子。時鐘是由SEL引腳控制的多路選擇器輸出的,。多路選擇器的輸入是時鐘(CLK)和該時鐘的2分頻(DIV2),。由圖7
的定時波形圖看出,在兩個時鐘均為邏輯1的情況下,,當SEL線的狀態(tài)改變時,,存在靜態(tài)險象。險象的程度取決于工作的條件,。
多級邏輯的險象是可以去除的,。例如,你可以插入“冗余邏輯”到設計項目中,。然而,,PLD/FPGA編譯器在邏輯綜合時會去掉這些冗余邏輯,使得驗證險象是
否真正被去除變得困難了,。為此,,必須應尋求其它方法來實現(xiàn)電路的功能。
圖7 有靜態(tài)險象的多級時鐘
圖8 給出 圖7
電路的一種單級時鐘的替代方案,。圖中SEL引腳和DIV2信號用于使能D觸發(fā)器的使能輸入端,,而不是用于該觸發(fā)器的時鐘引腳。采用這個電路并不需要附加
PLD的邏輯單元,,工作卻可靠多了,。 不同的系統(tǒng)需要采用不同的方法去除多級時鐘,,并沒有固定的模式。
圖7 無靜態(tài)險象的多級時鐘
(這個電路邏輯上等效于圖7,,但卻可靠的多)
4.行波時鐘
另一種流行的時鐘電路是采用行波時鐘,,即一個觸發(fā)器的輸出用作另一個觸發(fā)器的時鐘輸入。如果仔細地設計,,行波時鐘可以象全局時鐘一樣地可靠工作,。然而,行
波時鐘使得與電路有關的定時計算變得很復雜,。行波時鐘在行波鏈上各觸發(fā)器的時鐘之間產(chǎn)生較大的時間偏移,,并且會超出最壞情況下的建立時間、保持時間和電路
中時鐘到輸出的延時,,使系統(tǒng)的實際速度下降,。
用計數(shù)翻轉(zhuǎn)型觸發(fā)器構成異步計數(shù)器時常采用行波時鐘,一個觸發(fā)器的輸出鐘控下一個觸發(fā)器的輸入,,參看圖9
同步計數(shù)器通常是代替異步計數(shù)器的更好方案,,這是因為兩者需要同樣多的宏單元而同步計數(shù)器有較快的時鐘到輸出的時間。圖10
給出具有全局時鐘的同步計數(shù)器,,它和 圖9
功能相同,,用了同樣多的邏輯單元實現(xiàn),卻有較快的時鐘到輸出的時間,。幾乎所有PLD開發(fā)軟件都提供多種多樣的同步計數(shù)器,。
圖9 行波時鐘
圖10 行波時鐘轉(zhuǎn)換成全局時鐘 (這個3位計數(shù)器是圖9異步計數(shù)器的替代電路,它用了同樣的3個宏單元,,但有更短的時鐘到輸出的延時)
5. 多時鐘系統(tǒng)
許多系統(tǒng)要求在同一個PLD內(nèi)采用多時鐘,。最常見的例子是兩個異步微處理器器之間的接口,或微處理器和異步通信通道的接口,。由于兩個時鐘信號之間要求一定的建立和保持時間,,所以,上述應用引進了附加的定時約束條件,。它們也會要求將某些異步信號同步化,。
圖11
給出一個多時鐘系統(tǒng)的實例。CLK_A用以鐘控REG_A,,CLK_B用于鐘控REG_B,,由于REG_A驅(qū)動著進入REG_B的組合邏輯,故CLK_A
的上升沿相對于CLK_B的上升沿有建立時間和保持時間的要求,。由于REG_B不驅(qū)動饋到REG_A的邏輯,,CLK_B的上升沿相對于CLK_A沒有建立
時間的要求。此外,,由于時鐘的下降沿不影響觸發(fā)器的狀態(tài),,所以CLK_A和CLK_B的下降沿之間沒有時間上的要求,。,
如圖4,,2.II所示,,電路中有兩個獨立的時鐘,可是,,在它們之間的建立時間和保持時間的要求是不能保證的,。在這種情況下,必須將電路同步化,。圖12
給出REG_A的值(如何在使用前)同CLK_B同步化,。新的觸發(fā)器REG_C由GLK_B觸控,保證REG_G的輸出符合REG_B的建立時間,。然而,,
這個方法使輸出延時了一個時鐘周期。
圖ll 多時鐘系統(tǒng) (定時波形示出CLK_A的上升沿相對于CLK_B的上升沿有建立時間和保持時間的約束條件)
圖12 具有同步寄存器輸出的多時鐘系統(tǒng) (如果CLK_A和CLK_B是相互獨立的,,則REG—A的輸出必須在它饋送到1REG_B之前,,用REG_C同步化)
在許多應用中只將異步信號同步化還是不夠的,當系統(tǒng)中有兩個或兩個以上非同源時鐘的時候,,數(shù)據(jù)的建立和保持時間很難得到保證,,我們將面臨復雜的時間問題。
最好的方法是將所有非同源時鐘同步化,。使用PLD內(nèi)部的鎖項環(huán)(PLL或DLL)是一個效果很好的方法,但不是所有PLD都帶有PLL,、DLL,,而且?guī)в?
PLL功能的芯片大多價格昂貴,所以除非有特殊要求,,一般場合可以不使用帶PLL的PLD,。 這時我們需要使用帶使能端的D觸發(fā)器,并引入一個高頻時鐘,。
圖13 不同源時鐘
如圖13所示,,系統(tǒng)有兩個不同源時鐘,一個為3MHz,,一個為
5MHz,,不同的觸發(fā)器使用不同的時鐘。為了系統(tǒng)穩(wěn)定,,我們引入一個20MHz時鐘,,將3M和5M時鐘同步化,如圖15所示,。
20M的高頻時鐘將作為系統(tǒng)時鐘,,輸入到所有觸發(fā)器的的時鐘端,。3M_EN
和5M_EN將控制所有觸發(fā)器的使能端。即原來接3M時鐘的觸發(fā)器,,接20M時鐘,,同時3M_EN 將控制該觸發(fā)器使能
,原接5M時鐘的觸發(fā)器,,也接20M時鐘,,同時5M_EN 將控制該觸發(fā)器使能。 這樣我們就可以將任何非同源時鐘同步化,。
圖13 同步化任意非同源時鐘
(一個DFF和后面非門,,與門構成時鐘上升沿檢測電路)
另外,異步信號輸入總是無法滿足數(shù)據(jù)的建立保持時間,,容易使系統(tǒng)進入亞穩(wěn)態(tài),,所以也建議設計者把所有異步輸入都先經(jīng)過雙觸發(fā)器進行同步化,詳情可參閱這篇文章:Are Your PLD Metastable?,。
小結:穩(wěn)定可靠的時鐘是系統(tǒng)穩(wěn)定可靠的重要條件,,我們不能夠?qū)⑷魏慰赡芎忻痰妮敵鲎鳛闀r鐘信號,并且盡可能只使用一個全局時鐘,,對多時鐘系統(tǒng)要注意同步異步信號和非同源時鐘,。
|