首先需要指出本文題目所指的仿真指的是功能仿真,即不帶時(shí)序信息的仿真。
每個(gè)FPGA developer都會(huì)做功能仿真驗(yàn)證RTL代碼功能的正確性。我們知道在功能仿真中是沒有考慮延遲的,組合邏輯是零延遲,寄存器也是在時(shí)鐘跳變沿瞬時(shí)完成采樣。
對(duì)于同步電路來說,功能仿真完成后,再加上靜態(tài)時(shí)序分析,我們基本能確保設(shè)計(jì)的電路能正確工作(有一些情況例外,比如綜合的結(jié)果和仿真的結(jié)果不同)。但是對(duì)于異步電路,功能仿真的零延遲特性沒法很好模擬跨時(shí)鐘域時(shí)的情況,在靜態(tài)時(shí)序分析時(shí)我們一般也是false path,不做后仿真(時(shí)序仿真)則很難確??鐣r(shí)鐘域電路設(shè)計(jì)的正確性。
那么我們?cè)谧龇抡鏁r(shí)有沒有辦法更好得模擬跨時(shí)鐘域的情況?
先看看跨時(shí)鐘域有什么特性?一是亞穩(wěn)態(tài)導(dǎo)致采樣到的信號(hào)出現(xiàn)隨機(jī)值,二是跨時(shí)鐘域不是瞬時(shí)結(jié)束的,而是會(huì)持續(xù)一段時(shí)間。
依據(jù)此特性,我們?cè)诠δ芊抡鏁r(shí)可以手動(dòng)給跨時(shí)鐘域信號(hào)加延遲。延遲的大小可以是random的一個(gè)值來更好得模擬隨機(jī)采樣值,而且最好是能在真實(shí)延遲的大概范圍。
舉個(gè)例子。
假設(shè)我們是跨時(shí)鐘域采樣一個(gè)bit的信號(hào),輸入信號(hào)不停在0和1之間跳變。如下圖所示,data1_q是輸入單bit信號(hào)的寄存器輸出,data1_q_delay則是對(duì)data1_q添加延遲后的信號(hào)。data2_q是在目的時(shí)鐘域clk2對(duì)data1_q的采樣,data2_q_delay則是在目的時(shí)鐘域?qū)ata1_q_delay的采樣。
從圖中可以看到,data2_q在跨時(shí)鐘域時(shí)只有一個(gè)cycle采到錯(cuò)誤的值,data2_q_delay則較好的模擬出了采樣值的隨機(jī)性,而且會(huì)持續(xù)多個(gè)cycle出現(xiàn)“隨機(jī)”值。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119816 -
靜態(tài)時(shí)序分析
+關(guān)注
關(guān)注
0文章
28瀏覽量
9567 -
時(shí)鐘信號(hào)
+關(guān)注
關(guān)注
4文章
442瀏覽量
28490
原文標(biāo)題:跨時(shí)鐘域如何仿真?
文章出處:【微信號(hào):FPGA開發(fā)之路,微信公眾號(hào):FPGA開發(fā)之路】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論