1、 組合電路、時序電路
(1) 組合邏輯電路:數字電路滿足任意時刻的輸出僅僅取決於該時刻的輸入;
(2) 時序邏輯電路:數字電路任意時刻的輸出不僅取決於當前時刻的輸入,而且還取決於數字電路原來的狀態;
2、 同步電路、異步電路
(1) 同步電路:各觸發器的時鍾端全部連接在一起,並接在系統時鍾端,只有當時鍾脈沖到來時,電路的狀態才能改變。所有觸發器的狀態的變化都與所加的時鍾脈沖信號同步。同步電路的時鍾之間有固定的因果關系;
(2) 異步電路:電路沒有統一的時鍾,有些觸發器的時鍾輸入端與時鍾脈沖源相連,這些觸發器的狀態變化與時鍾脈沖同步,而其他的觸發器的狀態變化不與時鍾脈沖同步,由外部輸入的變化直接引起。各時鍾之間沒有固定的因果關系;
3、 同步復位
判定:
always @(posedge clk)
優點:
- 1).有利於仿真器的仿真;
- 2).有利於靜態時序分析工具的分析;
- 3).由於只在時鍾有效電平到來時才有效,所以可以濾除高於時鍾頻率的復位毛刺。
缺點:
- 1).由於大多數的邏輯器件的目標庫內的 DFF 都只有異步復位端口,倘若采用同步復位的話,綜合器就會在寄存器的數據輸入端口插入組合邏輯,這樣就會一方面額外增加 FPGA 內部的邏輯資源,另一方面也增加了相應的組合邏輯門時延。
- 2).復位信號的有效時長必須大於時鍾周期,才能真正被系統識別並完成復位任務。同時還要考慮諸如時鍾偏移、組合邏輯路徑延時、復位延時等因素(所以復位信號有時需要脈沖展寬,用以保證時鍾有效期間有足夠的復位寬度)
- 3).同步復位依賴於時鍾,如果電路中的時鍾信號出現問題,無法完成復位。
4、異步復位
判定:
always @(posedge clk or negedge rst_n)
優點:
- 1). ASIC庫或FPGA器件的DFF都提供異步復位端口,無需多加的邏輯資源產生;
- 2).設計相對簡單
- 3).復位信號不依賴於時鍾,產生和響應都很方便。
缺點:
- 1) .屬於異步邏輯,復位釋放接近時鍾有效沿時容易使得觸發器的輸出進入亞穩態;
- 2) 可能因為噪聲或者毛刺造成虛假復位信號;
- 3) 靜態時序分析困難,靜態時序分析一般是針對同步設計,基於時鍾周期分析時序;
- 4) 對於 DFT設計,如果復位信號不是直接來自於 I/O 引腳,在 DFT 掃描和測試時,復位信號必須被禁止,因此需要額外的同步電路。
5、異步復位同步釋放
異步復位同步釋放就是在復位信號到來的時候不受時鍾信號的同步,而是在復位信號釋放的時候受到時鍾信號的同步。
6、恢復時間:Recovery time
撤銷復位時,恢復到非復位狀態的電平必須在時鍾有效沿來臨之前的一段時間到來,才能保證有效的恢復到非復位狀態,此段時間為Recovery time。類似於同步時鍾的setup time。
如圖所示,rst_n為0表示復位,clk上升沿觸發,rst_n從0到1上升沿與時鍾上升沿之間的時間差必須不小於Recovery time才能保證寄存器恢復到正常狀態。
7、去除時間:Removal time
復位時,在時鍾沿來臨之后復位信號還需要保持的時間是去除時間,類似於同步時鍾的 hold time。
如圖所示,rst_n為0表示復位,clk上升沿觸發,rst_n保持為0經過clk上升沿后仍需要保持一段時間,才能保證寄存器有效復位。
8、時序檢查中對異步復位電路的時序分析叫做
恢復時間檢查和去除時間檢查。
9、什么是亞穩態
觸發器無法在某一個規定時間段內產生一個確定的狀態。
原因:由於觸發器的建立時間和保持時間不滿足,當觸發器進入亞穩態,使得無法預測該單元的輸出,這種不穩定是會沿着信號通道的各個觸發器級聯傳播。
消除:兩級或多級寄存器同步。理論上亞穩態不能完全消除,只能降低,一般采用兩級觸發器同步就可以大大降低亞穩態發生的概率,再加多級觸發器改善不大。
10、如何消除亞穩態?
- (1)雙D觸發器打拍;
- (2)用反應更快的D觸發器;
- (3)引入同步機制;
- (4)改善時鍾質量,用邊沿變化快速的時鍾信號消除;
- (5)降低時鍾頻率
11、為什么兩級觸發器可以防止亞穩態傳播?
假設第一級觸發器的輸入不滿足其建立保持時間,它在第一個脈沖沿到來后輸出的數據就為亞穩態,那么在下一個脈沖沿到來之前,其輸出的亞穩態數據在一段恢復時間后必須穩定下來,而且穩定的數據必須滿足第二級觸發器的建立時間,如果都滿足了,在下一個脈沖沿到來時,第二級觸發器將不會出現亞穩態,因為其輸入端的數據滿足其建立保持時間。
12、如何處理跨時鍾域信號?
單bit:
- (1)雙D觸發器打拍同步;
- (2)脈沖展寬處理
多bit:
- (1)格雷碼+雙D觸發器打拍;
- (2)DMUX數據使能選通設計;
- (3)異步握手協議
- (4)異步FIFO或RAM
13、解釋一下多bit處理方法?
(1)格雷碼+雙D觸發器
多bit信號轉換為格雷碼,再用雙D觸發器打拍。為什么不直接打兩拍,而先轉換格雷碼:不同信號路徑延時不同,信號打兩拍之后可能出現不同狀態。例如00->11,直接打拍可能變成00->10->11。而格雷碼相鄰狀態只有1bit變換,即使路徑延時不同,狀態也不會出錯。例如00->11格雷碼是00->10,打拍可能變成00->00->10,只會出現某個狀態多延時一拍而已,不會出錯。注意:格雷碼作同步時必須是2^N個狀態。
(2)DMUX數據使能選通設計
即單bit數據指示信號用雙D觸發器打兩拍,穩定后再采樣多bit數據信號。
(3)異步握手協議
兩次請求的間隔約為:4clk_a + 3clk_b
- ① req_clk_a發出,在b時鍾域打兩拍同步;
- ② 將數據data_clk_a采樣到data_clk_b,即DMUX方法,同時拉高ack_clk_b信號;
- ③ ack_clk_b在a時鍾域打兩拍同步;
- ④ req_clk_a信號拉低;
(4)異步FIFO或RAM
略。
14、如何發現異步電路的問題?
(1)代碼檢視:專家來檢視;
(2)CDC異步檢查:CDC工具檢查,對CDC報告進行仔細分析;
(3)EDA仿真:通過大市政頻率配比進行EDA仿真;
(4)FPGA驗證:驗證可能會隨機發生一些錯誤,有可能是異步問題,花費時間多;
15、如何理解使用握手協議的方式處理跨時鍾域傳輸問題?
所謂握手,即通信雙方使用了專用控制信號進行狀態指示。雙方的握手信號分別使用脈沖檢測方法進行同步,發送域先把數據放入總線,隨后發送req信號給接收域;接收域在檢測到req信號后鎖存數據總線,然后送一個ack信號表示讀取完成應答;發送域在檢測到ack信號后撤銷當前req信號,接收域在檢測到req信號撤銷后也相應撤銷ack信號,此時完成一次正常握手信號。此后發送域可以繼續開始下一次握手通信,如此循環。該方式能夠接收到的數據穩定可靠,有效的避免了亞穩態的出現,但是控制信號握手協議檢測會消耗通信雙方較多的時間。
16、單bit信號慢時鍾域到快時鍾域同步方法?
打兩拍同步。
16、對於從快時鍾域到慢時鍾域的同步方法(和上面差不多)
(1)采用異步fifo,但是要注意讀寫端的時鍾頻率的差異避免一端溢出的情況。
(2)采用雙口ram。
(3)采用握手信號,任何一端向另一端傳輸的時候都要保證請求信號和應答信號有足夠長的時間讓對方采到並能夠完成同步處理,再根據這個信號去對數據線賦值或者從數據線上采數據。
(4)信號的展寬,如果我們知道這兩個時鍾之間的具體頻率差別,那么用一個計數器去將高頻信號做適當的展寬,使其寬度大於低頻時鍾的一個周期,就可以使用打兩拍的方式進行跨時鍾域了。
17、FPGA 設計中如何實現時序電路的延時?
異步電路的延時的一般方法是插入一個 buffer、兩級非門等。
同步時序電路的延時一般是通過時序控制完成的。對於比較大和特殊定時要求的延時,一般用高速時鍾產生一個計數器,根據計數器的計數控制延時;對於比較小的延時,這種做法不但可以使信號延時了一個時鍾周期,而且完成了信號與時鍾的初次同步。在輸入信號采樣和增加時序約束余量中使用。
另外 HDL 語言中的延時控制語法是行為級代碼描述,用於仿真測試激勵,但是在電路綜合時會被忽略。
18、異步復位信號因為和時鍾是異步的,因此不需要加時鍾約束?
錯。
19、時序檢查中對異步復位電路的時序分析叫做?
恢復時間檢查和去除時間檢查。
20、類似於 setup 和 hold。異步信號有 remove 和 recovery time check ?
錯,異步復位電路才有。
21、同步電路系統中可以有一個時鍾及其三分頻時鍾進行驅動?
對。
22、EDA仿真不容易發現異步問題的可能的原因是 (ABE)存疑
A、EDA仿真難以模擬兩個真實時鍾的相位抖
B、EDA仿真無法模擬真實時鍾的變化規律
C、EDA仿真不能模擬兩個時鍾的周期
D、EDA仿真時間不夠長
E、EDA無法識別亞穩態