【異步電路碎碎念1】 —— 到底什麼是異步電路

異步電路是我們在進行IC設計時候必須要跨越的一道坎,必須要掌握的基礎知識。個人認爲對異步電路的理解以及處理經驗是衡量一個IC前端水平的重要指示。不過最可怕的是哪怕你想的再明白理解的再清楚,也還是可能會翻車,簡單說異步電路堪稱IC芯片出錯重災區。當然正因爲如此,一般的IC設計中會把異步處理做單獨的模塊設計,需要進行異步處理時調用對應功能的module即可。

下文綜合了我自己對異步電路的理解和實操,書中所學技巧與經驗以及網上其他大牛的總結講解,我嘗試用最易於理解掌握的方式進行表達也算是對自己所學的記錄,如有侵權請告知立即刪除。

無論我們是去面試、和前端後端交流還是聽大佬們聊天,總會聽到“跨異步”“異步處理”“異步FIFO”“跨異步打拍”“異步電路”這些詞沒事就蹦出來,所以第一篇文章我們就來探討下到底什麼是異步電路。

 

有異步就肯定有同步,基本含義上來說異步和同步都是針對時鐘而言的。同步時鐘sync是指時鐘之間相位相對確定,異步時鐘async是指時鐘之間相位不確定。看到一些地方認爲同步時鐘sync是指時鐘之間頻率和相位都相對確定,異步時鐘async是指時鐘之間頻率或相位不確定,也不能說沒有道理吧。不過我堅持認爲根源是在相位確不確定上,例如33M和100M時鐘就一定不可能是同步時鐘,因爲無論如何做不到相位保持一致;而50M和100M時鐘就有可能是同步時鐘,因爲相位可以保持一致。

下面就是典型的異步電路結構。

因此我們可以得出結論:頻率不同不一定同步異步,同源時鐘不一定同步異步,歸根到底看有沒有固定的相位。順便多說一句,後端的大佬對於異步的理解跟前端偶爾有所出入,尤其是在進行時序收斂時候,典型的場景就是芯片子系統之間即使在同步時鐘域,也會按照異步時鐘域來進行時序收斂。

還有一種特殊場景,即使一組寄存器都由同一時鐘驅動,也可能存在異步問題,那就是異步復位的情景。我們我們知道復位可以區分爲同步復位和異步復位(當然一般使用同步復位異步撤離或者同步復位同步撤離,這個就先不討論了)。

always @(posedge clk or negedge rst_n)

always @(posedge clk)

而對於同步復位,復位信號是不會放在敏感列表中的,因此在綜合時會被綜合成如圖2的形式作爲數據輸入觸發器,那麼此時如果復位信號由異步時鐘驅動,那麼這個電路結構實際也構成了異步場景。

有時鐘就可以劃分出一塊時鐘域,一個時鐘域是指使用某一同步時鐘驅動的邏輯單元(當然一般是指時序邏輯單元,非時鐘驅動的器件先往後站啊)集合,這個集合中一般有什麼東西呢?最常見的肯定就是我們總寫的D觸發器啦,當然還有處於同步時鐘下的FIFO啊、SDRAM啊、引腳啊都能算進來,總之在某一同步時鐘驅動的所有時序單元都算進來就好了。

一個芯片多模塊之間可能是同一時鐘域(單時鐘域)下的,也有可能是在異步時鐘域(多時鐘域)下的,我盲猜應該是多時鐘域佔大頭吧,畢竟現在的芯片越做越大越做越複雜了。

正是因爲多時鐘域的存在,才引出了信號的跨時鐘域處理問題也就是我們要探究的異步電路種種,這個慢慢寫吧。話說那天某孩子忽然問我,“既然跨異步有這麼多問題,那爲啥不用同一個時鐘呢,省了多少事啊”,這個問題當時我是懵了一下。很多場景下跨異步是不可避免的或者說多時鐘域是不可避免的,例如例如前後兩個模塊的吞吐能力不同,串並轉換模塊,本來信號就屬於不同系統但是必須進行交互(例如cpu通過cpu接口讀寫芯片內部信號),爲了功耗考慮儘量降低部時鐘域分模塊的時鐘頻率等。

對於多時鐘域的信號處理,必然是由發送時鐘域(源時鐘域)經過同步電路(同步器)到達接收時鐘域(目的時鐘域),這個過程可以稱之爲信號跨異步,電路結構稱之爲異步電路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章