組合邏輯生成的時鐘,在FPGA設(shè)計中應(yīng)該避免,尤其是該時鐘扇出很大或者時鐘頻率較高,即便是該時鐘通過BUFG進(jìn)入全局時鐘網(wǎng)絡(luò)。
組合邏輯生成時鐘的典型特征是在網(wǎng)表中我們能夠看到LUT(查找表)的輸出直接連接或通過BUFG連接到時序邏輯單元比如觸發(fā)器的時鐘端口。最直接的危害是組合邏輯可能會產(chǎn)生毛刺(Glitch),從而導(dǎo)致電路功能錯誤??磦€案例,如下圖所示。由于毛刺的存在,計數(shù)器多計數(shù)了一次,導(dǎo)致錯誤。
從時序角度而言,組合邏輯生成的時鐘會增加時鐘線上的延遲,從而導(dǎo)致過大的Clock Skew,最終造成建立時間和保持時間違例。此外,如果有毛刺,毛刺通常很窄,很可能無法滿足觸發(fā)器的Pulse Width要求。還有的工程中盡管沒有直接把LUT的輸出當(dāng)作時鐘,而是將其通過一個觸發(fā)器之后再用作時鐘,這可以過濾掉毛刺,但同樣會增加時鐘線上的延遲,導(dǎo)致Clock Skew過大。因此,在FPGA設(shè)計中,要避免此類時鐘。
拿到一個網(wǎng)表,如何判定設(shè)計中是否包含此類時鐘呢?從上面的描述可以看到,這類時鐘要么是LUT輸出,要么是觸發(fā)器輸出,這是第一個特征。第二個特殊,既然是時鐘,時鐘網(wǎng)線的類型就是LOCAL_CLOCK,根據(jù)這兩點(diǎn)就能找到時鐘管腳,相應(yīng)的Tcl腳本如下圖所示。
代碼第2行是找到所有的時鐘網(wǎng)線,第3行對該時鐘網(wǎng)線進(jìn)行過濾篩選,凡是與網(wǎng)線相連的pin是輸出端口且其REF_PIN_NAME是O(對應(yīng)LUT輸出)或Q(對應(yīng)觸發(fā)器輸出)的,即為目標(biāo)時鐘端口。代碼第4行則是將找到的對象以圖形界面方式顯示出來。
找到了這類時鐘,如何優(yōu)化呢?如果這類時鐘是在MMCM或PLL可生成頻率范圍內(nèi),那么建議用MMCM或PLL生成,尤其是該時鐘扇出比較大的時候。如果MMCM或PLL無法生成,且時鐘頻率很低,例如低于5MHz,而設(shè)計已經(jīng)到了后期,不太可能大范圍修改,那么嘗試是否可能將該時鐘驅(qū)動的邏輯都放在一個時鐘區(qū)域內(nèi),同時保證時鐘源也在該時鐘區(qū)域內(nèi),這可通過手工布局的方式(畫Pblock)實(shí)現(xiàn)。這樣做對于降低Clock Skew會有些幫助。
責(zé)任編輯人:CC
-
時鐘
+關(guān)注
關(guān)注
10文章
1733瀏覽量
131480 -
組合邏輯
+關(guān)注
關(guān)注
0文章
47瀏覽量
10041
原文標(biāo)題:如何快速找到組合邏輯生成的時鐘
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論