一,概念
在數字電路設計時,無論是組合、時序,還是FPGA電路中,都需要考慮競爭冒險現象(Race and Competition)。
競爭:由於信號在傳輸和處理過程中經過不同的邏輯門、觸發器或邏輯單元時產生時差,造成信號的原變量和反變量狀態改變的時刻不一致,這種現象稱為競爭(Race)。
冒險:由於競爭而引起電路輸出信號中出現了非預期信號,產生瞬間錯誤的現象稱為冒險(Competition)。表現為輸出端出現了原設計中沒有的窄脈沖,常稱為毛刺(Burr)。
關系:有競爭不一定產生冒險,但有冒險就一定有競爭。
分類:競爭分為臨界競爭和非臨界競爭。冒險分為靜態冒險和動態冒險。
臨界競爭:產生暫時或永久性錯誤輸出。
非臨界競爭:沒有導致冒險發生,或雖有冒險發生但不會產生錯誤輸出,不影響系統的工作的競爭。
靜態冒險:輸入信號變化前后,輸出的穩態值一樣,但在輸入信號變化時,輸出信號產生了毛刺。在組合邏輯電路中,由於產生冒險的原因不同又分為功能冒險和邏輯冒險。
動態冒險:輸入信號變化前后,輸出的穩態值不同,並在邊沿處出現了毛刺,即輸入變化輸出應變化的情況下,輸出在變化的過程中產生了短暫的錯誤輸出的現象。
產生原因:
組合邏輯電路中,產生競爭冒險的主要原因是時延。
時序邏輯電路中,產生競爭冒險的原因主要有兩個方面:1,組合邏輯電路部分可能發生的競爭冒險現象。2,存儲電路工作過程中發生的競爭冒險。同步時序電路不存在競爭現象。異步時序電路中,當輸入信號和時鍾信號同時改變是,而且是通過不同路徑到達同意觸發器時,就有可能導致競爭冒險。
FPGA中:在FPGA中,延時主要是由連 線的長短和邏輯單元的數目決定的,同時還受器件的制造工藝、工作電壓、溫度等因素影響。信號的電平轉換也需要一定的過渡時間。由於FPGA以及其他的 CPLD器件內部的分布電容和電感不能過濾電路中的毛刺,從而使得毛刺逐級傳遞,對電路早晨的影響更加突出。即使是在最簡單的邏輯運算中,如果出現多路信 號同時跳變的情況,在通過內部走線以后,也一定會產生毛刺。
二,消除方法
1,組合邏輯電路中
(1)加選通脈沖信號
(2)修改邏輯設計(增加乘積項法)
(3)輸出端並聯電容器(電容濾出法)
(4)卡諾圖法
(5)加封鎖脈沖
2,時序邏輯電路中
(1)修改電路法(加D觸發器)
(2)信號同步法
(3)信號延時同步法
(4)靈活運用時鍾信號法
(5)狀態機控制法