timing check
描述設(shè)計(jì)時(shí)序時(shí),所有的時(shí)序檢查都有一個(gè)參考事件(reference event)和一個(gè)數(shù)據(jù)事件(data event),數(shù)據(jù)事件常常是數(shù)據(jù)信號(hào),而參考事件常常是時(shí)鐘信號(hào),它們通過一個(gè)布爾表達(dá)式相聯(lián)接,還包括一個(gè)可選的notifier寄存器選項(xiàng),這個(gè)寄存器用來打印錯(cuò)誤信息或者傳播X態(tài)。
檢查時(shí)序窗口的穩(wěn)定性,包括:setup、hold、setuphold、recovery、removal和recrem。
$setuphold
$setuphold(reference_event, data_event, setup_limit,hold_limit, notifier, [timestamp_cond, timecheck_cond,delayed_reference_signal, delayed_data_signal]);
其中setup limit 和hold limit 的數(shù)值是從SDF 文件取出反標(biāo)到網(wǎng)表上的。
$setup (data_event, reference_event, limit, notifier);
當(dāng)reference_event time - limit < data_event time < reference_event time時(shí),就會(huì)報(bào)告setup time violations。
$hold (reference_event, data_event, limit, notifier);
當(dāng)reference_event time < data_event time < reference_event time + limit時(shí),就會(huì)報(bào)告hold time violations。
$setuphold (reference_event, data_event, setup_limit, hold_limit, notifier);
setup和$hold 兩者的聯(lián)合。
例如:
setup (negedge d, posedge clk, 2, notifier); 和 $hold (posedge clk, negedge d, 1, notifier);
setup和hold都為正值:
如下面例子 setup limit 和 hold limit 都為正值:
$setuphold (posedge clock, data, 10, 11, notifyreg);
其中,data要在時(shí)鐘上升沿10ns保持穩(wěn)定(假設(shè)時(shí)間單位是ns),在clk上升沿之后11ns內(nèi)保持穩(wěn)定;如果在時(shí)鐘clk上升沿到來之前,data小于10ns或時(shí)鐘clk上升沿到來之之后小于11ns,則為時(shí)序違例;
Positive Setup and Hold Limits
上圖中,可見,
對(duì)于setup檢查Data Event 要早于 Clock Event;
對(duì)于hold 檢查Data Event 要晚于 Clock Event;
符合這種情況的時(shí)序,setup limit 和 hold limit 用正值來表示。
setup為負(fù)值,hold都為正值:
在討論這個(gè)問題之前需要弄明白,我們現(xiàn)在所說的setup hold timing check是針對(duì)std cell的,在實(shí)際的std cell中不僅僅有DFF還有一些buffer之類的cell。
一個(gè)典型的std cell的簡化結(jié)構(gòu)如上圖所示,D1和D2表示兩個(gè)delay cell。而實(shí)際上我們要保證的是DFF的setup 和hold timing check是正值,由于D1和D2兩個(gè)cell的delay不同就導(dǎo)致了在對(duì)std cell做timing check時(shí)出現(xiàn)了負(fù)值的timing check。再次強(qiáng)調(diào),這里的負(fù)值的timing check是針對(duì)std cell的并不是針對(duì)DFF的。
當(dāng)標(biāo)準(zhǔn)單元內(nèi)部clk上有較長的延遲時(shí),對(duì)于setup檢查Data Event就可以晚一些來,如果晚于Clock Event(時(shí)刻為 0),用負(fù)值來表示。
$setuphold (posedge clock, data, -10, 31, notifyreg);
Negative Setup Limit
setup為正值,hold都為負(fù)值:
當(dāng)標(biāo)準(zhǔn)單元內(nèi)部data上有較長的延遲時(shí),對(duì)于hold檢查Data Event就需要早一些來,如果早于Clock Event(時(shí)刻為 0),用負(fù)值來表示。$setuphold (posedge clock, data, 31, -10, notifyreg);
Negative Hold Limit
需要注意的是不論setup 或者h(yuǎn)old出現(xiàn)負(fù)值,但setup和hold的和必須是正值。這是因?yàn)閟etup必然要發(fā)生在hold的前面。
$recrem
復(fù)位信號(hào)的恢復(fù)時(shí)間檢查:
$recovery (reference_event, data_event, limit, notifier);
當(dāng)data_event time - limit < reference_event time < data_event time時(shí),就會(huì)報(bào)告recovery time violations。
復(fù)位信號(hào)的移除時(shí)間檢查
$removal (reference_event, data_event, limit, notifier);
當(dāng)data_event time < reference_event time < data_event time + limit時(shí),就會(huì)報(bào)告removal time violations。
復(fù)位信號(hào)的恢復(fù)/移除時(shí)間檢查:
$recrem (reference_event, data_event, recovery_limit, removal_limit, notifier);
$recrem是$recovery和$removal兩者的聯(lián)合。
recovery (posedge clr, posedge clk, 2, notifier); 和 $removal (posedge clr, posedge clk, 3, notifier);
數(shù)據(jù)事件常常是時(shí)鐘信號(hào),而參考事件常常是控制信號(hào),比如清除信號(hào)或者置位信號(hào),如下圖:
啟用負(fù)時(shí)序檢查
當(dāng)時(shí)序存在負(fù)值時(shí),必須要用 recrem 來表示;而不能用單獨(dú)的 hold,removal;
同時(shí)使用負(fù)時(shí)序檢查,必須在編譯設(shè)計(jì)時(shí)包含+neg_tchk和-negdelay選項(xiàng)。如果省略此選項(xiàng),VCS將將所有負(fù)限制更改為0。
如果在+neg_tchk選項(xiàng)中包含 +no_notifier選項(xiàng),則表示notifer寄存器不進(jìn)行翻轉(zhuǎn),X態(tài)不會(huì)傳播,但是vcs還是會(huì)報(bào)告timing violation;
相反,如果在+neg_tchk選項(xiàng)中包含+no_tchk_msg選項(xiàng),則vcs不報(bào)告timing violation。但VCS仍然會(huì)創(chuàng)建時(shí)鐘和數(shù)據(jù)信號(hào)的延遲,并在存在時(shí)序違例時(shí)翻轉(zhuǎn)notifer寄存器。
+notimingcheck 表示在vcs編譯過程中不進(jìn)行 setuphold,recrem 等函數(shù)的編譯,vcs產(chǎn)生delayed_reference_signal 和delayed_reference_data但是不會(huì)去標(biāo)記這些delay的值,從而不進(jìn)行任何的timing檢查。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121193 -
VCS
+關(guān)注
關(guān)注
0文章
80瀏覽量
9647 -
時(shí)鐘信號(hào)
+關(guān)注
關(guān)注
4文章
453瀏覽量
28666 -
dff
+關(guān)注
關(guān)注
0文章
26瀏覽量
3451
原文標(biāo)題:負(fù)時(shí)序檢查 Negative Timing Checks
文章出處:【微信號(hào):數(shù)字ICer,微信公眾號(hào):數(shù)字ICer】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
靜態(tài)時(shí)序的分析原理及詳細(xì)過程
![靜態(tài)<b class='flag-5'>時(shí)序</b>的分析原理及詳細(xì)過程](https://file.elecfans.com/web1/M00/C8/53/pIYBAF9t-8OAecibAAD91SqF_y0957.png)
UltraFast設(shè)計(jì)方法時(shí)序收斂快捷參考指南
![UltraFast設(shè)計(jì)方法<b class='flag-5'>時(shí)序</b>收斂快捷參考指南](https://file.elecfans.com/web2/M00/1B/84/pYYBAGGE2wiAcruZAAANWGykQVk985.png)
什么是時(shí)序分析?教你掌握FPGA時(shí)序約束
![什么是<b class='flag-5'>時(shí)序</b>分析?教你掌握FPGA<b class='flag-5'>時(shí)序</b>約束](https://file1.elecfans.com/web2/M00/8C/B7/wKgZomSwtsmAETtoAAFDNShHTOA608.jpg)
無法檢查啟用中斷
時(shí)序約束的步驟分析
![<b class='flag-5'>時(shí)序</b>約束的<b class='flag-5'>步驟</b>分析](https://file.elecfans.com/web1/M00/93/B7/o4YBAFztHoaAfGSoAAAh7xWdeuw843.jpg)
正點(diǎn)原子FPGA靜態(tài)時(shí)序分析與時(shí)序約束教程
![正點(diǎn)原子FPGA靜態(tài)<b class='flag-5'>時(shí)序</b>分析與<b class='flag-5'>時(shí)序</b>約束教程](https://file.elecfans.com/web1/M00/CE/CD/o4YBAF-rS5iABAFXAADn1A_7I2g634.png)
VIVADO中時(shí)序報(bào)告中WNS、WHS、TNS、THS有什么含義
![VIVADO中<b class='flag-5'>時(shí)序</b>報(bào)告中WNS、WHS、TNS、THS有什么含義](https://file.elecfans.com/web2/M00/18/CD/pYYBAGFxCe-AbCahAAAGD6M14zs019.png)
FPGA設(shè)計(jì)之時(shí)序約束四大步驟
![FPGA設(shè)計(jì)之<b class='flag-5'>時(shí)序</b>約束四大<b class='flag-5'>步驟</b>](https://file.elecfans.com//web2/M00/36/25/poYBAGIxOp-AQ-BOAAEi5lvVtsI678.png)
FPGA設(shè)計(jì)之時(shí)序約束
![FPGA設(shè)計(jì)之<b class='flag-5'>時(shí)序</b>約束](https://file.elecfans.com/web2/M00/36/85/poYBAGIz7-yAStU8AACt9jp9dvk929.png)
淺談FPGA的時(shí)序約束四大步驟
![淺談FPGA的<b class='flag-5'>時(shí)序</b>約束四大<b class='flag-5'>步驟</b>](https://file.elecfans.com//web2/M00/4F/47/pYYBAGK_qNaAEnS0AAAq8TGjqQQ013.png)
評(píng)論