當你需要將FPGA/CPLD內部的信號通過管腳輸出給外部相關器件的時候,如果不影響功能最好是將這些信號通過用時鐘鎖存后輸出。因為通常情況下一個板子是工作于一種或兩種時鐘模式下,與FPGA/CPLD相連接的芯片的工作時鐘大多數情形下與FPGA的時鐘同源,如果輸出的信號經過時鐘鎖存可以起到如下的作用:
容易滿足芯片間信號連接的時序要求;
容易滿足信號的建立保持時間;
如上圖所示,比如FPGA/CPLD在CLK的時鐘沿1鎖存一個信號得到SIG所示的波形,SIG信號需要給另外的一個與其接口的芯片,那么該芯片將一定會在CLK的時鐘沿2正確采樣到SIG信號。但是如果該信號在FPGA/CPLD中輸出的時候不是用時鐘沿鎖存的,那將有可能出現SIG1/SIG2所示的時序關系,則與其接口的芯片在時鐘沿2處采樣該信號的時候有可能出現建立保持時間不滿足要求而出現采樣不可靠、沿打沿等情況。另外通過組合邏輯輸出還有可能出現毛刺的情況。所有這些不規范的設計都會引起系統工作時的不可靠、不穩定的情形。
2.5 寄存異步輸入信號
我們在日常的設計工作中,FPGA/CPLD總是要與別的芯片相連接的,FPGA/CPLD會給別的芯片輸出信號,同時也要處理別的芯片送來的信號,這些信號往往對FPGA/CPLD內部的時鐘系統而言是異步的,為了可靠的采樣到這些輸入信號,建議將這些輸入信號使用相應的時鐘鎖存后在處理,這樣做:
將原來的異步信號轉化成同步來處理;
去除輸入信號中的毛刺(特別是對于數據總線);
FPGA/CPLD中信號的輸入、輸出鎖存
2.6 FPGA/CPLD中的時鐘設計
無淪是用離散邏輯、可編程邏輯,還是用全定制硅器件實現的任何數字設計,為了成功地操作,可靠的時鐘是非常關鍵的。設計不良的時鐘在極限的溫度、電壓或制造工藝的偏差情況下將導致錯誤的行為,并且調試困難、花銷很大。在設計FPGA/CPLD時通常采用幾種時鐘類型。時鐘可分為如下四種類型:全局時鐘、門控時鐘、多級邏輯時鐘和波動式時鐘。多時鐘系統能夠包括上述四種時鐘類型的任意組合。
無論采用何種方式,電路中真實的時鐘樹也無法達到假定的理想時鐘,因此我們必須依據理想時鐘,建立一個實際工作時鐘模型來分析電路,這樣才可以使得電路的實際工作效果和預期的一樣。在實際的時鐘模型中,我們要考慮時鐘樹傳播中的偏斜、跳變和絕對垂直的偏差以及其它一些不確定因素。
對于寄存器而言,當時鐘工作沿到來時它的數據端應該已經穩定,這樣才能保證時鐘工作沿采樣到數據的正確性,這段數據的預備時間我們稱之為建立時間(setup time)。數據同樣應該在時鐘工作沿過去后保持一段時間,這段時間稱為保持時間(hold time)。因此具體的時鐘如圖5所示。其中網絡延遲是指時鐘的傳播延時以及因為跳變不垂直等效的偏差,在此基礎上考慮一些不確定因素實際的工作時鐘沿如圖中所示。保持時間(hold)和建立時間(setup)都是相對于實際時鐘跳變而言的。因此在確定電路時序時,必須要考慮到這些因素,使得建立時間和保持時間符合要求。
?
?
圖5 工作時鐘模型
為了使電路正常工作,建立時間和保持時間應該分別滿足:
其中tclock_Q_max是時鐘沿變化到數據輸出端變化的最慢變化情況,tlogic_max是寄存器間組合邏輯的最大可能延遲,tclock_Q_min和tlogic_min表示最快情況。在考慮建立保持時間時,應該考慮時鐘樹向后偏斜的情況,在考慮建立時間時應該考慮時鐘樹向前偏斜的情況。在進行后仿真時,最大延遲用來檢查建立時間,最小延時用來檢查保持時間。
2.6.1 全局時鐘
對于一個設計項目來說,全局時鐘(或同步時鐘)是最簡單和最可預測的時鐘。在PLD/FPGA設計中最好的時鐘方案是:由專用的全局時鐘輸入引腳驅動的單個主時鐘去鐘控設計項目中的每一個觸發器。只要可能就應盡量在設計項目中采用全局時鐘。PLD/FPGA都具有專門的全局時鐘引腳,它直接連到器件中的每一個寄存器。這種全局時鐘提供器件中最短的時鐘到輸出的延時。
圖1示出全局時鐘的實例。圖1定時波形示出觸發器的數據輸入D[1..3]應遵守建立時間和保持時間的約束條件。建立和保持時間的數值在PLD數據手冊中給出,也可用軟件的定時分析器計算出來。如果在應用中不能滿足建立和保持時間的要求,則必須用時鐘同步輸入信號(參看下一章“異步輸入”)。
?
圖1 全局時鐘
(最好的方法是用全局時鐘引腳去鐘控PLD內的每一個寄存器,于是數據只要遵守相對時鐘的建立時間tsu和保持時間th)
2.6.2 門控時鐘
在許多應用中,整個設計項目都采用外部的全局時鐘是不可能或不實際的。PLD具有乘積項邏輯陣列時鐘(即時鐘是由邏輯產生的),允許任意函數單獨地鐘控各個觸發器。然而,當你用陣列時鐘時,應仔細地分析時鐘函數,以避免毛刺。
通常用陣列時鐘構成門控時鐘。門控時鐘常常同微處理器接口有關,用地址線去控制寫脈沖。然而,每當用組合函數鐘控觸發器時,通常都存在著門控時鐘。如果符合下述條件,門控時鐘可以象全局時鐘一樣可靠地工作:
驅動時鐘的邏輯必須只包含一個“與”門或一個“或”門。如果采用任何附加邏在某些工作狀態下,會出現競爭產生的毛刺。
邏輯門的一個輸入作為實際的時鐘,而該邏輯門的所有其它輸入必須當成地址或控制線,它們遵守相對于時鐘的建立和保持時間的約束。
圖2和圖3是可靠的門控時鐘的實例。在 圖2 中,用一個“與”門產生門控時鐘,在 圖3 中,用一個“或”門產生門控時鐘。在這兩個實例中,引腳nWR和nWE考慮為時鐘引腳,引腳ADD[o..3]是地址引腳,兩個觸發器的數據是信號D[1..n]經隨機邏輯產生的。
?
?
圖2 “與”門門控時鐘
?
圖3 “或”門門控時鐘
圖2和圖3的波形圖顯示出有關的建立時間和保持時間的要求。這兩個設計項目的地址線必須在時鐘保持有效的整個期間內保持穩定(nWR和nWE是低電平有效)。如果地址線在規定的時間內未保持穩定,則在時鐘上會出現毛刺,造成觸發器發生錯誤的狀態變化。另一方面,數據引腳D[1..n]只要求在nWR和nWE的有效邊沿處滿足標準的建立和保持時間的規定。
我們往往可以將門控時鐘轉換成全局時鐘以改善設計項目的可靠性。圖4示出如何用全局時鐘重新設計圖2的電路。地址線在控制D觸發器的使能輸入,許多PLD設計軟件,如MAX+PLUSII軟件都提供這種帶使能端的D觸發器。當ENA為高電平時,D輸入端的值被鐘控到觸發器中:當ENA為低電平時,維持現在的狀態。
圖4 “與”門門控時鐘轉化成全局時鐘
圖4中重新設計的電路的定時波形表明地址線不需要在nWR有效的整個期間內保持穩定;而只要求它們和數據引腳一樣符合同樣的建立和保持時間,這樣對地址線的要求就少很多。
圖5給出一個不可靠的門控時鐘的例子。3位同步加法計數器的RCO輸出用來鐘控觸發器。然而,計數器給出的多個輸入起到時鐘的作用,這違反了可靠門控時鐘所需的條件之一。在產生RCO信號的觸發器中,沒有一個能考慮為實際的時鐘線,這是因為所有觸發器在幾乎相同的時刻發生翻轉。而我們并不能保證在PLD/FPGA內部QA,QB,QC到D觸發器的布線長短一致,因此,如 圖5的時間波形所示,在器從3計到4時,RCO線上會出現毛刺(假設QC到D觸發器的路徑較短,即QC的輸出先翻轉)。
圖5 不可靠的門控時鐘
(定時波形示出在計數器從3到4改變時,RCO信號如何出現毛刺的)
圖6給出一種可靠的全局鐘控的電路,它是圖5不可靠計數器電路的改進,RCO控制D觸發器的使能輸入。這個改進不需要增加PLD的邏輯單元。
?
?
圖6 不可靠的門控時鐘轉換為全局時鐘
評論