三防平板設(shè)計(jì)-時(shí)鐘和控制信號(hào)的時(shí)序檢查
時(shí)間:2024-08-09 作者:樂凡信息 瀏覽:219

三防平板設(shè)計(jì)中的時(shí)鐘和控制信號(hào)的時(shí)序檢查接受一個(gè)或者兩個(gè)信號(hào),并且驗(yàn)證它們的跳變永遠(yuǎn)不會(huì)被多個(gè)限制分割。對(duì)于只指定一個(gè)信號(hào)的檢查,從該信號(hào)得到參考事件和數(shù)據(jù)事件。通常,這些檢查執(zhí)行下面的步驟:

(1)確定兩個(gè)事件之間經(jīng)過的時(shí)間;

(2)將經(jīng)過的時(shí)間和指定的限制進(jìn)行比較;

(3)如果經(jīng)過時(shí)間和指定的限制沖突,則報(bào)告時(shí)序沖突。

偏斜(skew)檢查有兩個(gè)不同的沖突檢測(cè)機(jī)制,即基于事件和基于定時(shí)器。

(1)基于事件的偏斜檢查,只有在信號(hào)跳變時(shí)執(zhí)行檢查。

(2)基于定時(shí)器的偏斜檢查,只要仿真時(shí)間等于經(jīng)過的偏斜限制值時(shí),就執(zhí)行檢查。

$nochange檢查包含三個(gè)事件,而不是兩個(gè)。1.$skew

語法格式為

其中,reference_event為時(shí)間戳事件;data_event為時(shí)間檢查事件;limit為非負(fù)常數(shù)表達(dá)式;notifier(可選)為Reg。

在下面情況下,$skew時(shí)序檢查報(bào)告一個(gè)沖突,即

三防平板設(shè)計(jì)中參考信號(hào)和數(shù)據(jù)信號(hào)的同時(shí)跳變不會(huì)引起$skew報(bào)告沖突,甚至抖動(dòng)限制值為0的時(shí)候。

$skew時(shí)序檢查是基于事件的,只有在一個(gè)數(shù)據(jù)事件后,才進(jìn)行評(píng)估。如果沒有一個(gè)數(shù)據(jù)事件(如數(shù)據(jù)事件無限延遲),將不會(huì)評(píng)估$skew時(shí)序檢查,且不會(huì)報(bào)告時(shí)序沖突。相反,$timeskew和$fullskew默認(rèn)基于定時(shí)器,如果絕對(duì)要求沖突報(bào)告且數(shù)據(jù)事件很晚出現(xiàn)或甚至于完全不出現(xiàn)時(shí),就會(huì)使用它們。

一旦檢測(cè)到參考事件,$skew將無限等待一個(gè)數(shù)據(jù)事件。在沒有發(fā)生數(shù)據(jù)事件以前,不會(huì)報(bào)告時(shí)序沖突。第二個(gè)連續(xù)的參考事件將取消前面所等待的數(shù)據(jù)事件,開始新的數(shù)據(jù)事件。

在一個(gè)參考事件后,$skew時(shí)序檢查不會(huì)停止對(duì)用于一個(gè)時(shí)序沖突的數(shù)據(jù)事件進(jìn)行檢查。當(dāng)一個(gè)發(fā)生在參考事件后的數(shù)據(jù)事件超過了限制,則$skew報(bào)告時(shí)序沖突。2.$timeskew

語法格式為

其中,data_event為時(shí)間檢查事件;reference_event為時(shí)間戳事件;limit為非負(fù)常數(shù)表達(dá)式;notifier(可選)為Reg;event_based_flag(可選)為常數(shù)表達(dá)式;remain_active_flag(可選)為常數(shù)表達(dá)式。

在出現(xiàn)下面情況時(shí),$timeskew時(shí)序檢查報(bào)告一個(gè)時(shí)序沖突:

三防平板設(shè)計(jì)中參考信號(hào)和數(shù)據(jù)信號(hào)的同時(shí)跳變不會(huì)引起$timeskew報(bào)告沖突,甚至抖動(dòng)限制值為0。如果一個(gè)新的時(shí)間戳事件準(zhǔn)確地發(fā)生在時(shí)間限制超時(shí)時(shí),$timeskew也不會(huì)報(bào)告一個(gè)沖突。

$timeskew的默認(rèn)行為是基于定時(shí)器的。在一個(gè)參考事件后經(jīng)過的時(shí)間等于限制值時(shí),立即報(bào)告一個(gè)沖突,且檢查將變成靜止的,不會(huì)報(bào)告更多的沖突(甚至是響應(yīng)數(shù)據(jù)事件),直到下一個(gè)參考事件為止。然而,如果在限制內(nèi)發(fā)生了一個(gè)數(shù)據(jù)事件,則不會(huì)報(bào)告一個(gè)沖突,檢查將立即變成靜止的。當(dāng)它的條件為假并且沒有設(shè)置remain_active_flag時(shí),如果檢測(cè)到一個(gè)有條件的參考事件時(shí),該檢查也將變成靜止的。

三防平板設(shè)計(jì)中使用event_based_flag可以將基于時(shí)間的行為改為基于事件的行為。當(dāng)同時(shí)設(shè)置event_based_flag和remain_active_flag時(shí),它的行為像$skew檢查。當(dāng)只設(shè)置event_based_flag時(shí),它的行為像$skew,下面情況例外:

(1)當(dāng)報(bào)告第一個(gè)沖突后,變成靜態(tài)的;

(2)當(dāng)它的條件為假時(shí),檢測(cè)到一個(gè)有條件的參考事件?!纠?.35】$timeskew檢查的Verilog HDL描述的例子。

圖1.16給出采樣$timeskew的波形。圖中:

(1)沒有設(shè)置event_based_flag和remain_active_flag。

CP上的第一個(gè)參考事件(A點(diǎn)標(biāo)記)后,在50個(gè)時(shí)間單位后,在B點(diǎn)報(bào)告一個(gè)沖突。將$timeskew檢查改為靜止的,并且不會(huì)報(bào)告更多的沖突。

(2)設(shè)置event_based_flag,但未設(shè)置remain_active_flag。

CP上第一個(gè)參考事件(A點(diǎn)標(biāo)記)后,在CPN有一個(gè)負(fù)跳變(C點(diǎn)標(biāo)記)時(shí)將產(chǎn)生一個(gè)時(shí)序沖突,將$timeskew檢查改為靜止的,且不會(huì)報(bào)告更多的沖突。當(dāng)MODE為假時(shí),在CP上產(chǎn)生第二個(gè)參考事件(F點(diǎn)標(biāo)記),因此$timeskew檢查保持靜止。

(3)設(shè)置event_based_flag和remain_active_flag。

CP上第一個(gè)參考事件(A點(diǎn)標(biāo)記)后,在CPN上若有3個(gè)負(fù)跳變(用C、D和E點(diǎn)標(biāo)記),則將產(chǎn)生時(shí)序沖突。當(dāng)MODE為假時(shí),在CP上產(chǎn)生第二個(gè)參考事件(F點(diǎn)標(biāo)記),但由于設(shè)置了remain_active_flag,$timeskew保持活動(dòng)。因此,在CPN上的G、H、I和J點(diǎn)報(bào)告額外的沖突。換句話說,CPN上的所有負(fù)跳變將產(chǎn)生沖突,與$skew行為相同。


(4)沒有設(shè)置event_based_flag,但設(shè)置remain_active_flag。

對(duì)于圖1.16給出的波形,$timeskew在情況(4)下,與情況(1)有相同的行為。兩個(gè)情況的不同之處如圖1所示?!〔蓸?timeskew



圖1 設(shè)置remain_active_flag時(shí)采樣$timeskew

三防平板設(shè)計(jì)中盡管MODE的條件為假,在CP產(chǎn)生參考事件(以F點(diǎn)標(biāo)記),但由于設(shè)置了remain_active_ flag,所以$timeskew檢查不會(huì)變?yōu)殪o止。因此,在B點(diǎn)報(bào)告沖突。然而對(duì)于情況(1),由于沒有設(shè)置remain_active_flag,在F點(diǎn),$timeskew檢查將變?yōu)殪o止,且不會(huì)報(bào)告沖突。3.$fullskew

語法格式為

其中,data_event為時(shí)間戳或時(shí)間檢查事件;reference_event為時(shí)間戳或時(shí)間檢查事件;limit 1為非負(fù)常數(shù)表達(dá)式;limit 2為非負(fù)常數(shù)表達(dá)式;notifier(可選)為Reg;event_based_flag(可選)為常數(shù)表達(dá)式;remain_active_flag(可選)為常數(shù)表達(dá)式。

三防平板設(shè)計(jì)中除參考事件和數(shù)據(jù)事件可以以任何順序跳變外,$fullskew類似于$timeskew。第一個(gè)限制是數(shù)據(jù)事件跟隨參考事件的最大時(shí)間;第二個(gè)限制是參考事件跟隨數(shù)據(jù)事件的最大時(shí)間。

當(dāng)參考事件在數(shù)據(jù)事件之前時(shí),參考事件是時(shí)間戳事件,數(shù)據(jù)事件是時(shí)間檢查事件;當(dāng)數(shù)據(jù)事件在參考事件之前時(shí),數(shù)據(jù)事件是時(shí)間戳事件,參考事件是時(shí)間檢查事件。

在下面情況下,$fullskew時(shí)序檢查報(bào)告一個(gè)沖突。此處,當(dāng)參考事件先出現(xiàn)跳變時(shí),將限制設(shè)置為limit 1;當(dāng)數(shù)據(jù)事件先出現(xiàn)跳變時(shí),將限制設(shè)置為limit 2。

在參考信號(hào)和數(shù)據(jù)信號(hào)出現(xiàn)同時(shí)跳變時(shí)不會(huì)引起$fullskew報(bào)告一個(gè)時(shí)序沖突,甚至于抖動(dòng)限制值為0時(shí)。三防平板設(shè)計(jì)中如果一個(gè)新的時(shí)間戳事件準(zhǔn)確發(fā)生在到達(dá)時(shí)間限制時(shí),$fullskew也不會(huì)報(bào)告一個(gè)沖突。

$fullskew默認(rèn)的行為是基于定時(shí)器(沒有設(shè)置event_based_flag)。在一個(gè)時(shí)間戳?xí)r間后,如果一個(gè)時(shí)間檢查事件沒有出現(xiàn)在到達(dá)時(shí)間限制時(shí),將立即報(bào)告一個(gè)沖突,且時(shí)序檢查將變成靜止的。然而,如果在時(shí)間限制內(nèi)發(fā)生了一個(gè)時(shí)間檢查事件,則不會(huì)報(bào)告沖突,且時(shí)序檢查立即變成靜止的。

三防平板設(shè)計(jì)中一個(gè)參考事件或數(shù)據(jù)事件是一個(gè)時(shí)間戳事件,并且啟動(dòng)一個(gè)新的時(shí)序窗口。如果在前面的一個(gè)時(shí)間戳?xí)r間后,在時(shí)間限制范圍內(nèi)發(fā)生了一個(gè)時(shí)間檢查事件,則時(shí)序檢查將變成靜止的,和上面描述的相同。

三防平板設(shè)計(jì)中在基于定時(shí)器的模式下,在一個(gè)時(shí)間限制范圍內(nèi)發(fā)生的第二個(gè)時(shí)間戳事件將啟動(dòng)一個(gè)新的時(shí)序窗口用于取代第一個(gè)窗口,除非第二個(gè)時(shí)間戳事件有一個(gè)關(guān)聯(lián)條件,該條件的值為假,在這種情況下,$fullskew的行為取決于remain_active_flag。如果設(shè)置該標(biāo)志,則將簡(jiǎn)單地忽略第二個(gè)時(shí)間戳事件。如果沒有設(shè)置該標(biāo)志,且時(shí)間檢查是活動(dòng)的,則時(shí)序檢查將轉(zhuǎn)為靜止的。

通過event_based_flag,可以將$fullskew檢查所默認(rèn)的行為從基于定時(shí)器改為基于事件。在這個(gè)模式下,$fullskew類似于$skew,這是因?yàn)樗皇窃跁r(shí)間戳事件后到達(dá)時(shí)間限制時(shí)報(bào)告沖突(基于定時(shí)器模式),而是在時(shí)間限制值后發(fā)生時(shí)間檢查事件才報(bào)告沖突。這樣一個(gè)事件將結(jié)束第一個(gè)時(shí)序窗口,并且立即啟動(dòng)一個(gè)新的時(shí)序窗口,它充當(dāng)新窗口的時(shí)間戳事件。在限制值范圍內(nèi)的一個(gè)時(shí)間檢查事件將結(jié)束時(shí)序窗口,時(shí)序檢查將變?yōu)殪o止的,且不報(bào)告時(shí)序沖突。

三防平板設(shè)計(jì)中在基于事件的模式下,發(fā)生在時(shí)間檢查事件之前的第二個(gè)時(shí)間戳事件將開啟一個(gè)新的時(shí)序窗口來取代第一個(gè)時(shí)序窗口,除非第二個(gè)時(shí)間戳?xí)r間所關(guān)聯(lián)的條件值為假。在這種情況下,$fullskew的行為取決于remain_active_flag。如果設(shè)置標(biāo)志,則簡(jiǎn)單忽略第二個(gè)時(shí)間戳事件;如果沒有設(shè)置標(biāo)志,且時(shí)間檢查是活動(dòng)的,則時(shí)序檢查變?yōu)殪o止的。

在基于定時(shí)器和基于事件的模式中,如果時(shí)間戳事件沒有條件或具有“真”條件,并且如果時(shí)序檢查處于休眠狀態(tài),則激活時(shí)序檢查。