前面提到了簡單的雙電平鎖存器,下面是一些單bit同步電路。
一、慢時鐘域向快時鐘域
邊沿檢測同步器
將慢時鐘域的脈衝搬移並縮小爲快時鐘域的脈衝。
既可以檢測上升沿,也可以檢測下降沿。
如上圖,慢時鐘下一個有效脈衝的最短週期爲慢時鐘的一個週期,站在快時鐘的角度下,這個慢時鐘域的信號會在快時鐘域下持續很多個週期。實際上,這個脈衝在慢時鐘域只發生了一次,所以如果用快時鐘去檢查有效脈衝的翻轉邊沿是最準確的。邊沿上升與下降也只有一次。
適用條件:data_width>clk_fast+T_hold,最安全的就是兩個同步週期長度。這樣才能保證慢時鐘域的脈衝足夠保持到被快時鐘的同步器採樣到。
其verilog代碼如下:
二、快時鐘域向慢時鐘域
脈衝同步器
從快時鐘域的取出一個單時鐘寬度脈衝,在慢時鐘域建立新的單時鐘寬度脈衝。
圖中陰影部分爲快時鐘域下的翻轉電路。
由於在慢時鐘域下直接採樣快時鐘域的信號,很大概率會採樣失敗。因此,我們採用翻轉電路對有效脈衝進行標定。
適用條件:輸入脈衝間隔>=2*clk_slow。輸入脈衝相隔過近,則慢時鐘域的新脈衝也緊密相鄰,結果是輸出脈衝比一個時鐘週期寬;如果太近,則無法檢測到每一個脈衝。
其verilog代碼如下: