復位電路概述
復位信號在數字電路里面的重要性僅次于時鐘信號。對電路的復位往往是指對觸發器的復位,也就是說電路的復位中的這個“電路”,往往是指觸發器,這是需要注意的。
有的電路需要復位信號,就像是有的電路需要時鐘信號那樣,而有的電路是不需要復位信號的。
復位又分為同步復位和異步復位,這兩種各有優缺點。
下面我們主要來說說復位信號的用途和不需要復位信號的情況。
(1)復位的目的
復位最基本的目的就是使電路(主要是觸發器)進入一個能穩定操作的確定狀態(主要是觸發器在在某個確定的狀態),主要表現為下面兩點:
①使電路在復位后從確定的初始狀態運行:
● 上電的時候,為了避免上電后進入隨機狀態而使電路紊亂,這個時候你就需要上電復位了。
● 有時候,電路在某個狀態下,你想或者別人要求你從電路的初始狀態開始進行延時你的電路功能,這個時候你就要對你的電路進行復位,讓它從最初的狀態開始運行。
②使電路從錯誤狀態回到可以控制的確定狀態:
有的時候,你的電路發生了異常,比如說狀態機跑飛了、系統供電炸了之類的,總之就是電路運行得不正常了,這個時候你就要對電路進行復位,讓它從錯誤的狀態回到一個正常的狀態。
上面說的都是和實際電路有關的,下面我們就從電路仿真的角度看一下復位信號的重要性。
● 仿真的要求
復位信號在仿真里面主要是使電路仿真時具有可知的初始值:
在仿真的時候,信號在初始狀態是未知狀態(也就是所謂的x,不過對信號初始化之后的這種情況除外,因為仿真的時候對信號初始化就使信號有了初始值,這就不是x了)。
對于數據通路 (數字系統一般分為數據通路和控制通路,數據通路一般是對輸入的數據進行處理,控制通路則是對運行的情況進行操作),在實際電路中,只要輸入是有效數據(開始的時候可能不是有效的),輸出后的狀態也是確定的;在仿真的時候,也是輸入數據有效了,輸出也就確定了。也就是說,初始不定態對數據通路的影響不明顯。
對于控制通路 ,在實際電路中,只要控制通路完備(比如說控制通路的狀態機是完備的),即使初始狀態即使是不定態,在經過一定的循環后,還是能回到正確的狀態上;然而在仿真的時候就不行了,仿真的時候由于初始狀態為未知態,控制電路一開始就陷入了未知態;仿真跟實際電路不同,仿真是“串行”的,仿真時控制信號的初始不定態會導致后續的控制信號結果都是不定態,也就是說,初始的不定態對控制通道是致命的。
(2)不需要復位信號的一些情況
復位信號很重要,但是并不是每一部分的電路都需要復位電路,一方面是復位電路也消耗邏輯資源、占用芯片面積,另一方面是復位信號會增加電路設計的復雜性(比如要考慮復位的策略、復位的布局布線等等)。
當某個電路的輸出在任何時刻都可以不受到復位信號的控制就有正確的值時,比如說數據通路中的對數據進行處理的部分。
在某些情況下,當流水線的寄存器(移位寄存觸發器)在高速應用中時,應該去掉某些寄存器的復位信號以使設計達到更高的性能,因為帶復位的觸發器比不帶復位的觸發器更復雜,反應也更慢。
對復位信號/電路有一定的概念后, 下面我們就來說說復位的方式,也就是同步電路和異步電路以及它們的優缺點 。
同步復位
(1)同步復位電路
同步復位是指復位信號在時鐘有效沿到來時才復位電路(主要是復位觸發器)。
因此同步復位的復位信號受到時鐘信號的控制。同步復位的觸發器RTL代碼和電路如下所示:
上面的電路在FPGA中容易綜合得到;也有可能綜合得到下面這樣的電路:
(2)同步復位的優點
①首先同步復位一般能確保電路是100%同步的,因為電路都是由同步時鐘觸發。
②同步復位會綜合為更小的觸發器(更小??感覺有點不太對,可能FPGA跟ASIC不一樣吧?)。從前面電路中我們也可以看到,復位電路僅僅是由一個普通的觸發器和一個與門構成。
③由于同步復位僅僅發生在時鐘的有效沿,當外部的復位信號有毛刺時,時鐘可以當做過濾毛刺的手段,也就是說同步復位受到復位信號的毛刺影響小。
④當復位信號是由內部電路產生時,此時復位信號就有可能有毛刺,時鐘就可以過濾毛刺。也就是說,可以在那些使用內部信號當做復位信號的設計中,使用同步復位。
(3)同步復位的缺點
①使用同步復位可能使綜合工具無法分辨分辨復位信號和其他控制信號,導致進行復位的控制邏輯遠離觸發器(也就是說,并不是所以的ASIC庫都有內置的同步復位邏輯,綜合工具可能把符合邏輯綜合到觸發器自身之外)。
例如對于帶同步復位和加載使能的觸發器,代碼如下所示:
綜合得到的電路圖如下所示,左邊是理想的電路,右邊是可能綜合出的電路:
這兩個電路的功能完全一樣,只不過右邊電路的復位控制邏輯(即復位與門)在多路復用器之外,也就是遠離了觸發器。
解決方法就是:一方面這個只是綜合工具的問題,一般綜合工具會自動識別在敏感列表里面又在條件表達式信號中的第一個信號為復位信號;另一方面,可以在RTL代碼編寫的時候,加入相關的綜合指令,讓綜合的時候把復位邏輯靠近觸發器。
②由于同步復位需要在時鐘沿的觸發下才能起作用,復位信號是以短脈沖的方式出現時,時鐘沿就有可能錯失這個復位信號,導致復位脈沖丟失,同步復位電路沒有起到作用,時序圖如下所示:
解決辦法 :一方面,可以采用脈沖捕捉電路,這個電路在我的跨時鐘域控制信號傳輸中有講到。
另一方面,可以將復位信號進行脈沖擴展,維持足夠長的時間,這個可以通過一個小的計數器實現,如下圖所示:
③同步復位可能有組合邏輯延時,當復位邏輯距離觸發器比較遠時,這個時候就不能把觸發器當做即時響應復位信號的觸發器,而是有一定延時的觸發器,這個時候就有了復位信號偏移的問題,關于復位信號偏移的描述,我們將在異步復位中進行描述。
解決方法 :使用內置的同步復位觸發器;綜合的時候加入相關的綜合指令,這個和①類似。
④我們前面說過,在由內部組合邏輯的產生復位信號的設計中,推薦使用同步復位。其實這也是有缺點的,這是因為這樣產生復位信號的組合邏輯一方面在仿真的時候容易出現x態,另一方面在實際電路中,這樣的復位信號容易被外部(多個)信號影響。
解決方法 :不建議使用內部產生的復位信號;使用異步復位。
⑤門控時鐘的同步復位可能無效:使用門控時鐘的時候,由于復位信號依賴于時鐘,在復位信號發出的時候,時鐘可能關閉了。
這個時候就會導致實際的電路沒有被復位,如下圖所示:
解決方法 :只能使用異步復位,并在時鐘恢復前移除異步復位。
⑥總線設計中的同步復位問題:
在總線控制中,系統上電復位的時候,我們要求不同芯片之間的總線工作在合理的狀態上(比如處于高阻態或者輸出);然而上電之后,由于系統時鐘可能仍未正常工作,上電(同步)復位就可能無效,這個時候各個模塊(芯片)就可能不會把總線接口設置為特定的狀態,(當多個模塊同時輸出數據到總線上時)就可能導致電平沖突,嚴重的話會燒壞接口。
解決辦法 :為了防止芯片上電時內部總線出現競爭,有兩種解決辦法,一種是采用異步上電復位,如下圖所示:
這個時候使用了異步復位,使能信號oe輸出0,也就是有了初始的狀態
另一種方法是使用復位信號能直接撤銷三態使能的電路,如下所示:
從電路圖中可以看到復位信號一方面控制了復位邏輯,另一方面控制了三態的使能端;這種技術簡化了復位-高阻這個條路徑的時序分析。
-
電路
+關注
關注
172文章
5938瀏覽量
172502 -
觸發器
+關注
關注
14文章
2000瀏覽量
61226 -
時鐘信號
+關注
關注
4文章
449瀏覽量
28596 -
復位信號
+關注
關注
0文章
54瀏覽量
6346
發布評論請先 登錄
相關推薦
評論