該時序電路實現了一個序列檢測器,當輸入序列‘datain’中出現‘101’時,標志位 F 將輸 出‘1’,其他時刻輸出‘0’。電路中‘clk’為時鐘信號,‘D1’,‘D2’,‘D3’為移位寄存器的輸出,’enable’ 為該電路的使能信號。其功能仿真波形如下圖所示:
當一個邏輯門的輸入有兩個或兩個以上的變量發生改變時,由于這些變量是經過不同路 徑產生的,使得它們狀態改變的時刻有先有后,這種時差引起的現象稱為競爭(Race)。競 爭的結果將很可能導致冒險(Hazard)發生(例如產生毛刺),造成錯誤的后果,并影響系 統的工作。
組合邏輯電路的冒險僅在信號狀態改變的時刻出現毛刺,這種冒險是過渡性的,它不會 使穩態值偏離正常值,但在時序電路中,冒險是本質的,可導致電路的輸出值永遠偏離正常 值或者發生振蕩。
避免冒險的最簡單的方法是同一時刻只允許單個輸入變量發生變化,或者使用寄存器采 樣的辦法。
信號在 FPGA 器件中通過邏輯單元連線時,一定存在延時。延時的大小不僅和連線的長 短和邏輯單元的數目有關,而且也和器件的制造工藝、工作環境等有關。因此,信號在器件 中傳輸的時候,所需要的時間是不能精確估計的,當多路信號同時發生跳變的瞬間,就產生 了“競爭冒險”。這時,往往會出現一些不正確的尖峰信號,這些尖峰信號就是“毛刺”。
可見,即使是在最簡單的邏輯運算中,如果出現多路信號同時跳變的情況,在通過內部 走線之后,就一定會產生毛刺。而現在數字電路設計中的信號往往是由時鐘控制的,如果將 帶有毛刺的輸出信號直接連接到時鐘輸入端、清零或置位端口的設計,可能會導致嚴重的后 果;此外對于多數據輸入的復雜運算系統,每個數據都由相當多的位數組成。這時,每一級 的毛刺都會對結果有嚴重的影響,如果是多級的設計,那么毛刺累加后甚至會影響整個設計 的可靠性和精確性。
判斷一個邏輯電路在某些輸入信號發生變化時是否會產生毛刺,首先要判斷信號是否會 同時變化,然后判斷在信號同時變化的時候,是否會產生毛刺,這可以通過邏輯函數的卡諾 圖或邏輯函數表達式來進行判斷。
毛刺是數字電路設計中的棘手問題,它的出現會影響電路工作的穩定性、可靠性,嚴重 時會導致整個數字系統的誤動作和邏輯紊亂。
這是一種比較傳統的去除毛刺的方法。原理就是用一個 D 觸發器去讀帶毛刺的信號, 利用 D 觸發器對輸入信號的毛刺不敏感的特點,去除信號中的毛刺。在實際中,對于簡單 的邏輯電路,尤其是對信號中發生在非時鐘跳變沿的毛刺信號,去除效果非常的明顯。
但是如果毛刺信號發生在時鐘信號的跳變沿,D 觸發器的效果就沒有那么明顯了(加 D 觸發器以后的輸出 q,仍含有毛刺)。另外,D 觸發器的使用還會給系統帶來一定的延時, 特別是在系統級數較多的情況下,延時也將變大,因此在使用 D 觸發器去除毛刺的時候, 一定要視情況而定,并不是所有的毛刺都可以用 D 觸發器來消除。
2、信號同步法 設計數字電路的時候采用同步電路可以大大減少毛刺。由于大多數毛刺都比較短(大
概幾個納秒),只要毛刺不出現在時鐘跳變沿,毛刺信號就不會對系統造成危害了。因此一 般認為,只要在整個系統中使用同一個時鐘就可以實現系統同步。但是,時鐘信號在 FPGA 器件中傳遞時是有延時的,我們無法預知時鐘跳變沿的精確位置。也就是說我們無法保證在 某個時鐘的跳變沿讀取的數據是一個穩定的數據,尤其是在多級設計中,這個問題就更加突 出。因此,做到真正的"同步"就是去除毛刺信號的關鍵問題。所以同步的關鍵就是保證在時 鐘的跳變沿讀取的數據是穩定的數據而不是毛刺數據。以下為兩種具體的信號同步方法。
(1)信號延時同步法 信號延時法,它的原理就是在兩級信號傳遞的過程中加一個延時環節,從而保證在下一
個模塊中讀取到的數據是穩定后的數據,即不包含毛刺信號。這里所指的信號延時可以是數 據信號的延時,也可以是時鐘信號的延時。
(2)狀態機控制 使用狀態機也可以實現信號的同步和消除毛刺的目的。在數據傳遞比較復雜的多模塊系
統中,由狀態機在特定的時刻分別發出控制特定模塊的時鐘信號或者模塊使能信號,狀態機 的循環控制就可以使得整個系統協調運作,同時減少毛刺信號。那么只要我們在狀態機的觸 發時間上加以處理,就可以避免競爭冒險,從而抑制毛刺的產生。
刺的出現,因為格雷碼計數器的輸出每次只有一位跳變。 其他關于毛刺的詳細討論,請見補充教程 2:關于毛刺問題的探討。
同步電路是指所有電路在同一個公共時鐘的上升沿或下降沿的觸發下同步地工作。但在 實際系統中,往往存在多時鐘域的情況,這時同步的概念有所延伸,不再專指整個設計同步 于同一時鐘沿,而是指設計應該做到局部同步,在每個時鐘域內的電路要同步于同一時鐘沿。
目前的工程設計中一般使用同步時序電路來完成整個系統的設計,由上一節可見,時鐘 在同步電路設計中起著至關重要的作用。那么,我們在設計時首先要完成的是對時鐘的設計。 如今在設計中常見的時鐘類型包括: 全局時鐘、內部邏輯時鐘和門控時鐘。
全局時鐘即同步時鐘,它通過 FPGA 芯片內的全局時鐘布線網絡或區域時鐘網絡來驅 動,全局時鐘具有高扇出、高精度、低 Jitter 和低Skew 的特點,它到芯片中的每一個寄存 器的延遲最短,且該延遲可被認為是固定值。所以我們推薦在所有的設計中的時鐘都使用全 局時鐘。全局時鐘的設計有以下幾種方法:
(2). 將 FPGA 芯片內部邏輯產生的時鐘分配至全局時鐘布線網絡。 (3). 將外部時鐘通過專用的全局時鐘輸入引腳引入 FPGA。 在我們的設計中,一般推薦電路中的所有的時鐘都由 PLL 鎖相環產生。一方面,PLL
PLL 鎖相環默認將其驅動的時鐘分配至全局時鐘網絡或區域時鐘網絡,Jitter 和 Skew 都很小。 下圖取自我們項目中的一個 PLL 鎖相環設計,該PLL 用于驅動 DDR 的接口模塊。因為
功能所需,DDR 接口需要三個 133MHz 的時鐘,相位分別是‘-90 o ’、‘0 o ’、‘-180 o ’,圖中所示 即為該時鐘的產生模塊。我們使用 QuartusⅡ的Megawizard 生成 PLL 鎖相環的 IP core。其 中‘inclk_66’為 PLL 鎖相環的輸入時鐘,由外部的 66MHz 晶振提供,經過 PLL 倍頻和移相
2. 內部邏輯時鐘 內部邏輯時鐘即指由芯片內部的組合邏輯或計數器分頻產生的時鐘。 對于組合邏輯時鐘,特別是由多級組合邏輯產生的時鐘,是要被嚴格禁止使用的,因
為一方面組合邏輯極容易產生毛刺,特別是對多級組合邏輯;另一方面組合邏輯電路的 Jitter 和 Skew 比較大,這將惡化時鐘的質量。所以,一般組合邏輯產生的內部時鐘僅僅適用于時 鐘頻率較低、時鐘精度要求不高的情況。
對于計數器分頻產生的時鐘,也應該盡量少地使用,因為這種時鐘會帶來比較大的延 遲,降低設計的可靠性,也使得靜態時序分析變得復雜。計數器分頻時鐘需完成的邏輯功能 完全可由 PLL 鎖相環或時鐘使能電路替代。
還有一種由觸發器產生的時鐘—行波時鐘,即一個觸發器的輸出用作另一個觸發器的 時鐘輸入。文中 1.1.2 節描述的時鐘分頻電路就是一種行波時鐘。因為各觸發器的時鐘之間 產生較大的時間偏移,很容易就會違反建立時間、保持時間的要求,導致亞穩態的發生。所 以,這種行波時鐘要被嚴格禁止使用。
3. 門控時鐘 一般情況下,應該避免使用門控時鐘。因為經組合邏輯產生的門控時鐘極可能產生毛
在同步電路或異步電路中,如果觸發器的 setup 時間或 hold 時間不能得到滿足,就可 能產生亞穩態,此時觸發器輸出端 Q 在有效時鐘沿之后比較長的一段時間處于不確定的狀 態,在這段時間里 Q 端將會產生毛刺并不斷振蕩、最終固定在某一電壓值上,此電壓值并 不一定等于原來數據輸入端 D
(resolution time)。經過決斷 時間之后,Q 端將穩定到 0 或
1 上,但是究竟是 0 還是 1, 這是隨機的,與輸入沒有必然 的關系。
亞穩態的危害主要體 現在破壞系統得穩定性上,由于輸出在穩定下來之前可能是毛刺、振蕩、固定的某一電壓值, 因此亞穩態除了導致邏輯誤判之外,嚴重情況下輸出 0~1 之間的中間電壓值還會使下一級 產生亞穩態(即導致亞穩態的傳播)。 邏輯誤判將導致功能性錯誤,而亞穩態的傳播則擴 大了故障面,嚴重時將導致系統崩潰。
在異步時序電路中更容易發生亞穩態,因為異步電路一般具有多個時鐘域,數據在兩個 時鐘域間傳遞時,非常容易導致 setup 時間或 hold 時間不滿足而發生亞穩態。在同步時序 電路中,當兩個觸發器間的組合邏輯延遲過大時,會導致 setup 時間不滿足而發生亞穩態。
對跨時鐘域數據的處理的核心就是要保證下級時鐘對上級數據采樣的 setup 時間或 hold 時間滿足要求,即盡量避免亞穩態的發生和傳播。但是,我們知道,只要系統中有異 步元件,亞穩態就是無法避免的,因此設計的電路首先要減少亞穩態導致錯誤的發生,其次 要使系統對產生的錯誤不敏感。我們推薦使用以下方法來解決異步時鐘域數據同步問題。
1. 用觸發器打兩拍 如下圖,左邊為異步輸入端,經過兩級觸發器同步,在右邊的輸出將是同步的,而且
該輸出基本不存在亞穩態。其原理是即使第一個觸發器的輸出端存在亞穩態,經過一個 CLK 周期后,第二個觸發器 D 端的電平仍未穩定的概率非常小,因此第二個觸發器 Q 端基本不 會產生亞穩態。然而,亞穩態是無法被根除的,一旦亞穩態發生,后果的嚴重程度依賴于你
細的靜態時序分析,然后將違反 setup 時間和 hold 時間的情況一一列出,在不影響其它設 計性能的前提下,綜合考慮調整兩級時鐘的相位關系,最終使其 setup 時間和 hold 時間滿 足要求。
如果所設計的是時序電路,需要觸發器,則 FPGA 開發軟件會自動將觸發器配置在查 找表的后面,實現組合邏輯時就將觸發器旁路掉。
FPGA入門教程.pdf
(672.08 KB, 下載次數: 478)

感謝樓主| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |