1. 程式人生 > >FPGA之同步復位與非同步復位(1)

FPGA之同步復位與非同步復位(1)

正常情況下,clk的上升沿c更新為b,b更新為a。一旦進入復位,b,c都清零;但是我們不能確定復位訊號rst_n會在什麼時候結束。如果結束於b_reg0和c_reg0的{launch edge –stup,launch edge+hold}時間只外,那麼一切都會正常。但如果恰恰相反,會出現什麼情況呢? rst_n的上升變化出現在了clk上升的建立保持時間上,此時clk檢測到的rst_n的狀態就會是一個亞穩態(是0是1不確定)。從程式碼裡我們看到如果此時b_reg0和c_reg0認為rst_n為0,那麼依然保持復位清零,而如果認為rst_n為1,那麼就跳出復位。因為此時的rst_n的不確定性,就可能出現4種情況,即b_reg0和c_reg0都復位或者都跳出復位,再或者一個復位一個跳出復位。那麼後者就會造成了系統工作不同步的問題,在這個簡單的兩級非同步復位例項中這種危害表現的並不明顯,但是我們試想一個大的工程專案裡眾多的暫存器出現如此情況又會是如何一番景象呢?

       上面的分析似乎都讓人意識到同步復位和非同步復位都不可靠,那麼如何將兩者結合,取長補短呢。

                    非同步復位、同步釋放