三防平板設(shè)計(jì)-邊沿控制標(biāo)識(shí)符
三防平板設(shè)計(jì)在時(shí)序檢查中,基于在0、1和x之間的特定沿跳變,邊沿控制標(biāo)識(shí)符可用于控制事件。
邊沿控制標(biāo)識(shí)符包含關(guān)鍵字edge,后面跟著包含1對(duì)到6對(duì)邊沿跳變(0、1和x)的一個(gè)方括號(hào)列表,即
(1)01,表示從0跳變到1;
(2)0x,表示從0跳變到x;
(3)10,表示從1跳變到0;
(4)1x,表示從1跳變到x;
(5)x0,表示到從x跳變到0;
(6)x1,表示從x跳變到1。
在邊沿跳變中涉及z時(shí),與在邊沿跳變中涉及x時(shí)相同對(duì)待。
posedge和negedge關(guān)鍵字可以用于某個(gè)邊沿控制的描述符,如posedge clr等效于edge[01, 0x, x1] clr。
類似地,negedge clr等效于edge[10, x0, 1x] clr
提示符:用戶定義對(duì)時(shí)序沖突的響應(yīng)
時(shí)序檢查提示符檢可以用于打印描述沖突或者在器件輸出端出現(xiàn)x的錯(cuò)誤信息。
三防平板設(shè)計(jì)提示符是一個(gè)reg,在需要調(diào)用時(shí)序檢查任務(wù)的模塊中聲明,它作為系統(tǒng)時(shí)序檢查的最后一個(gè)參數(shù)。只要發(fā)生時(shí)序沖突,時(shí)序檢查就更新提示符的值。
對(duì)所有的系統(tǒng)時(shí)序檢查來(lái)說(shuō),提示符是一個(gè)可選的參數(shù),可以從時(shí)序檢查中去掉該參數(shù)而不會(huì)對(duì)時(shí)序檢查產(chǎn)生不利的影響。
表1給出了提示符值對(duì)時(shí)序沖突的響應(yīng)。
表1提示符值對(duì)時(shí)序沖突的響應(yīng)
1.三防平板設(shè)計(jì)精確仿真的要求
為了對(duì)負(fù)值時(shí)序檢查準(zhǔn)確建模,應(yīng)滿足下面的要求。
(1)如果信號(hào)在沖突窗口中(不包括結(jié)束點(diǎn))發(fā)生改變,將觸發(fā)時(shí)序沖突。小于兩個(gè)單位仿真精度的沖突窗口,將不產(chǎn)生時(shí)序沖突。
(2)在沖突窗口內(nèi)(除去結(jié)束點(diǎn)),鎖存數(shù)據(jù)應(yīng)該是一個(gè)穩(wěn)定的值。
為了便于這些建模要求,在時(shí)序檢查中,產(chǎn)生數(shù)據(jù)和參考信號(hào)的延遲復(fù)制版本。在運(yùn)行時(shí),用于內(nèi)部時(shí)序檢查評(píng)估。調(diào)整內(nèi)部所使用的建立和保持時(shí)間,以移動(dòng)沖突窗口,使它和參考信號(hào)重疊。
在時(shí)序檢查中,聲明延遲數(shù)據(jù)和參考信號(hào)。這樣,可以在模型的功能實(shí)現(xiàn)中使用它們,以保證精確的仿真。如果在時(shí)序檢查中,沒(méi)有延遲信號(hào),并且出現(xiàn)負(fù)的建立時(shí)間和保持時(shí)間,則創(chuàng)建隱含的延遲信號(hào)。由于在定義的模塊行為中不能使用隱含的延遲信號(hào),這樣的一個(gè)模型可能有不正確的行為。隱含延遲信號(hào)Verilog HDL描述的例子1。
為CLK和DATA創(chuàng)建隱含延遲信號(hào),但是不可能訪問(wèn)它們。$setuphold檢查將正確地評(píng)估。但是,功能行為不總是正確的。如果在CLK的上升沿和10個(gè)時(shí)間單位后,DATA跳變,則時(shí)鐘不正確地獲取前面的DATA數(shù)據(jù)。隱含延遲信號(hào)Verilog HDL描述的例子2。
為CLK、DATA1和DATA2創(chuàng)建隱含延遲信號(hào),即使在兩個(gè)不同的時(shí)序檢查中都引用CLK,仍然只創(chuàng)建一個(gè)隱含的延遲信號(hào),并且用于所有的時(shí)序檢查。隱含延遲信號(hào)Verilog HDL描述的例子3。
為CLK和DATA1創(chuàng)建明確的延遲信號(hào)del_CLK和del_DATA1,而為DATA2創(chuàng)建了隱含的延遲信號(hào)。換句話說(shuō),CLK只創(chuàng)建了一個(gè)延遲信號(hào)del_CLK,而不是為每個(gè)時(shí)序檢查都創(chuàng)建一個(gè)延遲信號(hào)。
信號(hào)的延遲版本,不管是隱含的還是明確的,可以用在$setup、$hold、$setuphold,、$recovery、$removal、$recrem、$、$period和$nochange時(shí)序檢查中。這些檢查將相應(yīng)地調(diào)整其限制。這將保證在正確的時(shí)刻切換提示符。如果調(diào)整后的限制小于或等于0,則將限制設(shè)置為0,仿真器將產(chǎn)生一個(gè)警告。
三防平板設(shè)計(jì)信號(hào)的延遲版本不可以用于$skew、$fullskew和$timeskew時(shí)序檢查。因?yàn)樗赡軐?dǎo)致信號(hào)跳變順序的逆轉(zhuǎn),導(dǎo)致模型剩余部分在錯(cuò)誤時(shí)間切換用于時(shí)序檢查的提示符,導(dǎo)致在取消一個(gè)時(shí)序檢查沖突時(shí)跳變到x。這個(gè)問(wèn)題可以通過(guò)為每個(gè)檢查使用單獨(dú)的提示符來(lái)解決。
對(duì)負(fù)的時(shí)序檢查值,可以會(huì)出現(xiàn)相互之間的不一致,并且對(duì)于延遲信號(hào)的延遲值沒(méi)有解決的方法。在這些情況下,仿真器將產(chǎn)生警告信息??梢詫⒆钚〉呢?fù)限制值改為0,并且重新計(jì)算延遲信號(hào)的延遲,并且通過(guò)反復(fù)計(jì)算直到找到一個(gè)解決方案為止。這樣,可以解決不一致的問(wèn)題。因?yàn)樵谧顗那闆r下,所有負(fù)的限制值都變?yōu)?,不需要延遲信號(hào)。所以,這個(gè)過(guò)程總是可以找到一個(gè)解決方案。
三防平板設(shè)計(jì)當(dāng)出現(xiàn)負(fù)限制值的時(shí)候,延遲時(shí)序檢查信號(hào)才真正地被延遲。如果一個(gè)時(shí)序檢查信號(hào)被多個(gè)該信號(hào)到輸出的傳播延遲所延遲,將花費(fèi)比它傳播延遲更長(zhǎng)的時(shí)間來(lái)改變輸出。三防平板設(shè)計(jì)中它將在相同的時(shí)間(被延遲的時(shí)序檢查信號(hào)發(fā)生變化的時(shí)間)取代跳變。這樣,輸出的行為就好像它的指定路徑延遲等于應(yīng)用到時(shí)序檢查信號(hào)的延遲。只有為數(shù)據(jù)信號(hào)的每個(gè)邊沿給出唯一的建立/保持或去除/恢復(fù)時(shí)間時(shí),才產(chǎn)生這種情況。隱含延遲信號(hào)Verilog HDL描述的例子4。
建立時(shí)間是?7(?3和?7中,較大的絕對(duì)值),為dCLK創(chuàng)建延遲7。因此,在CLK的上升沿之后的7個(gè)時(shí)間單位輸出Q才發(fā)生變化,而不是在指定路徑中給出的6個(gè)時(shí)間單位。
2.三防平板設(shè)計(jì)負(fù)時(shí)序檢查的條件
通過(guò)使用“&&&”操作符,可以使條件與參考信號(hào)和數(shù)據(jù)信號(hào)相關(guān)。但是,當(dāng)建立或保持時(shí)間為負(fù)時(shí),條件需要以更靈活的方式與參考信號(hào)和數(shù)據(jù)信號(hào)配對(duì)。
下面的$setup和$hold檢查將一起工作以提供和單個(gè)$setuphold相同的檢查:
在$setup檢查中,clk是時(shí)間檢查事件;而在$hold檢查中,data是時(shí)間檢查事件。不能用一個(gè)$setuphold表示。因此,提供額外的參數(shù),使得用一個(gè)$setuphold表示成為可能。這些參數(shù)是timestamp_cond和timecheck_cond。下面的$setuphold等效于分開(kāi)的$setup和$hold:
在該例子中,timestamp_cond參數(shù)為空,而timecheck_cond參數(shù)是cond1。
timestamp_cond和timecheck_cond參數(shù)與參考信號(hào)或數(shù)據(jù)信號(hào)關(guān)聯(lián),這基于這些信號(hào)的延遲版本發(fā)生的前后順序。timestamp_cond與最先跳變的延遲信號(hào)關(guān)聯(lián),而timecheck_cond與第二個(gè)跳變的延遲信號(hào)關(guān)聯(lián)。
三防平板設(shè)計(jì)延遲信號(hào)只創(chuàng)建用于參考信號(hào)和數(shù)據(jù)信號(hào),不能用于任何和它們相關(guān)的條件信號(hào)。因此,仿真器不能隱含延遲timestamp_cond和timecheck_cond。通過(guò)構(gòu)造延遲信號(hào)的函數(shù),實(shí)現(xiàn)用于timestamp_cond和timecheck_cond域延遲的條件信號(hào)。條件延遲控制Verilog HDL描述的例子, 條件延遲控制的Verilog HDL描述
分配語(yǔ)句創(chuàng)建條件信號(hào),它是延遲信號(hào)的函數(shù)。創(chuàng)建延遲的條件與參考信號(hào)和數(shù)據(jù)信號(hào)的延遲版本是同步的,用于執(zhí)行檢查。
第一個(gè)$setuphold有負(fù)的建立時(shí)間。因此,時(shí)間檢查條件TE_cond_D與數(shù)據(jù)信號(hào)D相關(guān);第二個(gè)$setuphold有負(fù)的保持時(shí)間。因此,時(shí)間檢查條件TE_cond_TI和參考信號(hào)CP相關(guān);第三個(gè)$setuphold有負(fù)的建立時(shí)間。因此,時(shí)間檢查條件DXTI_cond和數(shù)據(jù)信號(hào)TE相關(guān)。
一下是用于延遲信號(hào)所計(jì)算的延遲值:
用延遲的信號(hào)為timestamp_cond和timecheck_cond參數(shù)創(chuàng)建信號(hào)不是必要的,但通常更接近于真實(shí)的器件行為。
3.三防平板設(shè)計(jì)負(fù)時(shí)序檢查的提示符
由于在內(nèi)部對(duì)參考信號(hào)和數(shù)據(jù)信號(hào)延遲,因此將時(shí)序沖突的檢測(cè)延遲。在負(fù)時(shí)序檢查中,當(dāng)時(shí)序檢查檢測(cè)到一個(gè)時(shí)序沖突時(shí),將切換負(fù)時(shí)序檢查中的提示符reg。三防平板設(shè)計(jì)時(shí)序沖突發(fā)生在被調(diào)整的時(shí)序檢查值所測(cè)量的延遲信號(hào)出現(xiàn)沖突時(shí),而不是在未延遲信號(hào)在模型輸入被沖突內(nèi)的原始時(shí)序檢查值所測(cè)量時(shí)。
4.三防平板設(shè)計(jì)選項(xiàng)行為
如前所述,應(yīng)通過(guò)調(diào)用選項(xiàng),使能Verilog仿真器處理$setuphold和$recrem時(shí)序檢查中負(fù)值的能力。在不使能此調(diào)用選項(xiàng)的情況下,可能會(huì)運(yùn)行為接受具有延遲引用和/或延遲數(shù)據(jù)信號(hào)的負(fù)時(shí)序檢查值而編寫(xiě)的模型。在這種情況下,延遲的參考信號(hào)和數(shù)據(jù)信號(hào)成為原始參考信號(hào)和數(shù)字信號(hào)的副本。如果使用了關(guān)閉所有定時(shí)檢查的調(diào)用選項(xiàng),也會(huì)發(fā)生同樣的情況。