close

reset 看似簡單無比: 當 reset 停止時, 暫存器開始啟動。

然而, 如果規劃不當, 只要有任何的機率發生 reset 不完全: 某些暫存器沒有在同一個週期内開始啟動, 那整個電路設計就會失敗。

 

大部分的人喜歡用非同步的 reset, 主要的好處有:

1. clock 不在時也可以 reset

2. 可以節省 gate count

 

但非同步的 reset 也有一個缺點, 合成器不會去分析 reset 的 delay, 所以有可能 reset 的 delay 會超過 clock edge。如果有些暫存器在 clock cycle N 開始啟動, 而有些暫存器卻在 clock cycle N+1 才開始啟動, 那就有發生錯誤的可能。

所以為了讓 reset 有足夠的時間可以及時啟動所有的暫存器, reset 停止的時間是很重要的, 如圖一所示, reset 停止後, 只剩下半個 clock cycle 不到時時間可以啟動所有的暫存器。

 

reset.jpeg  

 

為了確保所有的暫存器在同一個 cycle 內啟動, 我們最好將圖一的問號部分降到最小, 這樣 reset 就有最大的 budge (一個 clock cycle) 可以傳遞到所有的暫存器。

為達到上述目的, 一般採用的原則有:

A. 不同的 clock domain 各自採用不同的 reset, 例如 rst_tx_n, rst_rx_n...。

B. 每個 clock domain 的 reset 經過 synchronizer (圖二) 之後, 才送往暫存器。這樣 reset 就會有最大的 budget (一個 clock cycle) 去啟動所有的暫存器。

 

reset2.jpeg  

 

在高速的電路設計中, A 及 B 仍稍嫌不夠。reset 其實並不像想像中的微不足道...

 

關於 reset 的使用, 以下的論文是很好的參考:

Clifford E. Cummings, Don Mills, Steve Golson: Asynchronous & Synchronous reset design techniques

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

 

louis lin


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 louis99 的頭像
    louis99

    數位之牆

    louis99 發表在 痞客邦 留言(0) 人氣()