數(shù)字系統(tǒng)設(shè)計(jì)1課件_第1頁
數(shù)字系統(tǒng)設(shè)計(jì)1課件_第2頁
數(shù)字系統(tǒng)設(shè)計(jì)1課件_第3頁
數(shù)字系統(tǒng)設(shè)計(jì)1課件_第4頁
數(shù)字系統(tǒng)設(shè)計(jì)1課件_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PATHPULSE$Specparam可以在specifyblock中使用控制脈沖傳播。脈沖在模塊的輸出上有兩個(gè)比通過模塊輸出延遲短的預(yù)定跳變。缺省情況下,脈沖會(huì)被模擬器濾掉;這意味著只有長(zhǎng)于延遲的跳變才會(huì)通過模塊傳輸。這種效果叫做慣性延遲。PATHPULSE$可以改變?nèi)笔〉男袨榉绞?。還可以用于指定促使輸出出現(xiàn)x的脈沖寬度范圍。PATHPULSE$Specparam可以在specify1路徑脈沖控制使用PATHPULSE$控制模塊路徑脈沖保持。Syntax:PATHPULSE$=(reject_limit[,error_limit]);PATHPULSE$Input$Output=(reject_limit[,error_limit]);Limit=ConstantMinTypMaxExpression路徑脈沖控制使用PATHPULSE$控制模塊路徑脈沖保持。2如果errorlimit沒給出,則它與rejectlimit相同。短于rejectlimit的脈沖將不被傳輸?shù)捷敵?。比rejectlimit長(zhǎng)但是比errorlimit短的脈沖會(huì)被當(dāng)做1‘bX傳輸。比errorlimit長(zhǎng)的脈沖則正常傳輸。PATHPULSE$input$outputspecparam優(yōu)先于普通的同一模塊中的PATHPULSE$specparam起作用。如果errorlimit沒給出,則它與rejectli3specify(en=>q)=12;(data=>q)=10;(clr,pre*>q)=4;specparamPATHPULSE$=3,PATHPULSE$en$q=(2,9),PATHPULSE$clr$q=1;endspecify

數(shù)字系統(tǒng)設(shè)計(jì)1課件4定時(shí)校驗(yàn)任務(wù)定時(shí)檢查用于校驗(yàn)設(shè)計(jì)的定時(shí)。定時(shí)檢查完成以下功能:測(cè)定兩個(gè)事件之間的共用時(shí)間。比較共用時(shí)間和指定的時(shí)間限制。如果共用時(shí)間超指定的時(shí)間限制報(bào)告時(shí)間沖突。(沖突被當(dāng)作warning報(bào)告并不影響模塊輸出。)定時(shí)校驗(yàn)任務(wù)定時(shí)檢查用于校驗(yàn)設(shè)計(jì)的定時(shí)。5Verilog執(zhí)行的時(shí)間檢查有:建立保持脈沖寬度時(shí)鐘周期傾斜恢復(fù)Verilog執(zhí)行的時(shí)間檢查有:6定時(shí)校驗(yàn)任務(wù)$hold$nochange$period$recovery$setup$setuphold$skew$width定時(shí)校驗(yàn)任務(wù)$hold7$setup$setup(DataEvent,ReferenceEvent,Limit,[Notifier]);如果(time_of_reference_event-time_of_data_event)<limit則報(bào)告時(shí)序沖突(timingviolation);系統(tǒng)調(diào)用實(shí)例如下:$setup(data,posedgeclk,4);$setup$setup(DataEvent,Refer8$hold$hold(ReferenceEvent,DataEvent,Limit[,Notifier]);如果(time_of_data_event-time_of_reference_event)<limit,則報(bào)數(shù)據(jù)保持時(shí)間時(shí)序沖突。例如:$hold(posedgeclk,data,3);$hold$hold(ReferenceEvent,Da9$setuphold系統(tǒng)任務(wù)$setuphold是$setup和$hold任務(wù)的結(jié)合:$setuphold(ReferenceEvent,DataEvent,SetupLimit,HoldLimit[,Notifier]);實(shí)例:$setuphold(posedgeclk,data,4,3);$setuphold系統(tǒng)任務(wù)$setuphold是$setu10$width$width(ReferenceEvent,Limit[,Threshold[,Notifier]]);則檢查信號(hào)的脈沖寬度限制,如果threshold<(time_of_data_event-time_of_reference_event)<limit則報(bào)告信號(hào)上出現(xiàn)脈沖寬度不夠?qū)挼臅r(shí)序錯(cuò)誤。數(shù)據(jù)事件來源于基準(zhǔn)事件:它是帶有相反邊沿的基準(zhǔn)事件,例如:$width(negedgeCk,10,0.3);$width$width(ReferenceEvent,11$period$period(ReferenceEvent,Limit[,Notifier]);檢查信號(hào)的周期,若(time_of_data_event-time_of_reference_event)<limit則報(bào)告時(shí)序錯(cuò)誤?;鶞?zhǔn)事件必須是邊沿觸發(fā)事件。數(shù)據(jù)事件來源于基準(zhǔn)事件:它是帶有相同邊沿的基準(zhǔn)事$period$period(ReferenceEvent12$skew$skew(ReferenceEvent,DataEvent,Limit[,Notifier]);檢查信號(hào)之間(尤其是成組的時(shí)鐘控制信號(hào)之間)的偏斜(skew)是否滿足要求,若time_of_data_event-time_of_reference_event>limit則報(bào)告信號(hào)之間出現(xiàn)時(shí)序偏斜太大的錯(cuò)誤。如果data_event的時(shí)間等于reference_event的時(shí)間,則不報(bào)出錯(cuò)。$skew$skew(ReferenceEvent,Da13$recovery$recovery(ReferenceEvent,DataEvent,Limit[,Notifier]);主要檢查時(shí)序狀態(tài)元件(觸發(fā)器、鎖存器、RAM和ROM等)的時(shí)鐘信號(hào)與相應(yīng)的置/復(fù)位信號(hào)之間的時(shí)序約束關(guān)系,若(time_of_data_event-time_of_reference_event)<limit則報(bào)告時(shí)序沖突。該系統(tǒng)任務(wù)的基準(zhǔn)事件必須是邊沿觸發(fā)事件。該系統(tǒng)任務(wù)在執(zhí)行定時(shí)校檢前記錄新基準(zhǔn)事件時(shí)間;因此,如果數(shù)據(jù)事件和基準(zhǔn)事件在相同的模擬時(shí)間同時(shí)發(fā)生,就報(bào)告時(shí)序沖突錯(cuò)誤。$recovery$recovery(ReferenceE14$nochange$nochange(ReferenceEvent,DataEvent,StartEdgeOffset,EndEdgeOffset[,Notifier]);如果在指定的基準(zhǔn)事件區(qū)間發(fā)生數(shù)據(jù)變化,就報(bào)告時(shí)序沖突錯(cuò)誤?;鶞?zhǔn)事件必須是邊沿觸發(fā)事件。例如:$nochange(negedgeClear,Perset,0,0);如果在Clear為低時(shí)Preset發(fā)生變化,將報(bào)告時(shí)序沖突錯(cuò)誤。$nochange$nochange(ReferenceE15當(dāng)發(fā)生時(shí)序沖突時(shí),系統(tǒng)任務(wù)根據(jù)下列case語句改變自身的值來更新參數(shù)notifier。case(notifier)'bx:notifier='b0;'b0:notifier='b1;'b1:notifier='b0;'bz:notifier='bz;end當(dāng)發(fā)生時(shí)序沖突時(shí),系統(tǒng)任務(wù)根據(jù)下列case語句改變自身的值來16notifier參數(shù)可提供關(guān)于時(shí)序沖突或傳播x到輸出的時(shí)序沖突。使用參數(shù)notifier的例子如下:regNotifyDin;...$setuphold(negedgeClock,Din,tSETUP,tHOLD,NotifyDin);在這一實(shí)例中,NotifyDin是參數(shù)notifier。如果時(shí)序沖突發(fā)生,寄存參數(shù)NotifyDin根據(jù)前面對(duì)參數(shù)notifier描述的case語句改變其值。notifier參數(shù)可提供關(guān)于時(shí)序沖突或傳播x到輸出的時(shí)序沖17基準(zhǔn)事件的跳變建立為定時(shí)校驗(yàn)建立基準(zhǔn)時(shí)間?;鶞?zhǔn)事件必須是與模塊input或inout相關(guān)的。數(shù)據(jù)事件的跳變發(fā)起時(shí)間校驗(yàn)。數(shù)據(jù)事件必須是與模塊input或inout相關(guān)的。當(dāng)基準(zhǔn)事件和數(shù)據(jù)事件同時(shí)發(fā)生無建立沖突報(bào)告。而保持沖突會(huì)被報(bào)告。對(duì)于$width脈沖短于threshold(如果給出)將不產(chǎn)生違規(guī)。基準(zhǔn)事件的跳變建立為定時(shí)校驗(yàn)建立基準(zhǔn)時(shí)間?;鶞?zhǔn)事件必須是與模18以下時(shí)間校驗(yàn)基準(zhǔn)事件必須是邊沿觸發(fā)狀態(tài):$width,$period,$recovery,$nochange?;鶞?zhǔn)事件可以使用關(guān)鍵詞edge,$recovery和$nochange除外,只能使用posedge和negedge。有條件定時(shí)校驗(yàn)(使用&&&符號(hào))僅當(dāng)條件為真(1、x、z)時(shí)發(fā)生作用。如果存在Notifier參量則必須是寄存器。當(dāng)沖突發(fā)生時(shí)寄存器值發(fā)生變化。如果它的值是X則變?yōu)?,如果是0則變?yōu)?,如果是1則變?yōu)?。如果是Z則不變。以下時(shí)間校驗(yàn)基準(zhǔn)事件必須是邊沿觸發(fā)狀態(tài):$width,$p19定時(shí)校驗(yàn)系統(tǒng)任務(wù)只能在specifyblock中調(diào)用。對(duì)于復(fù)雜條件,在specifyblock外描述條件,并且驅(qū)動(dòng)一個(gè)用在specifyblock內(nèi)的,條件信號(hào)。定時(shí)校驗(yàn)系統(tǒng)任務(wù)只能在specifyblock中調(diào)用。20regErr,FastClock;//NotifierregistersspecifyspecparamTsetup=3.5,Thold=1.5,Trecover=2.0,Tskew=2.0,Tpulse=10.5,Tspike=0.5;$hold(posedgeClk,Data,Thold);$nochange(posedgeClock,Data,0,0);$period(posedgeClk,20,FastClock);$recovery(posedgeClk,Rst,Trecover);$setup(Data,posedgeClk,Tsetup);$setuphold(posedgeClk&&&!Reset,Data,Tsetup,Thold,Err);$skew(posedgeClk1,posedgeClk2,Tskew);$width(negedgeClk,Tpulse,Tspike);endspecifyregErr,FastClock;//Notifie21模擬時(shí)間函數(shù)下列系統(tǒng)函數(shù)返回模擬時(shí)間。$time:返回64位的整型模擬時(shí)間給調(diào)用它的模塊,返回值被四舍五入。$stime:返回32位的整型模擬時(shí)間。$realtime:向調(diào)用它的模塊返回實(shí)型模擬時(shí)間。模擬時(shí)間函數(shù)下列系統(tǒng)函數(shù)返回模擬時(shí)間。22變換函數(shù)下列系統(tǒng)函數(shù)是數(shù)字類型變換的功能函數(shù):$rtoi(real_value):通過截?cái)嘈?shù)值將實(shí)數(shù)變換為整數(shù)。$itor(integer_value):將整數(shù)變換為實(shí)數(shù)。$realtobits(real_value):將實(shí)數(shù)變換為64位的實(shí)數(shù)向量表示法(實(shí)數(shù)的IEEE745表示法)$bitstoreal(bit_value):將位模式變換為實(shí)數(shù)(與$realtobits相反)變換函數(shù)下列系統(tǒng)函數(shù)是數(shù)字類型變換的功能函數(shù):23概率分布函數(shù)函數(shù):$random[(seed)]根據(jù)種子變量(seed)的取值按32位的有符號(hào)整數(shù)形式返回一個(gè)隨機(jī)數(shù)。種子變量(必須是寄存器、整數(shù)或時(shí)間寄存器類型)控制函數(shù)的返回值,即不同的種子將產(chǎn)生不同的隨機(jī)數(shù)。如果沒有指定種子,每次$random函數(shù)被調(diào)用時(shí)根據(jù)缺省種子產(chǎn)生隨機(jī)數(shù)。概率分布函數(shù)函數(shù):24integerSeed,Rnum;wireClk;initialSeed=12;always@(Clk)Rnum=$random(Seed);在Clk的每個(gè)邊沿,$random被調(diào)用并返回一個(gè)32位有符號(hào)整型隨機(jī)數(shù)。integerSeed,Rnum;25如果數(shù)字在取值范圍內(nèi),下述模運(yùn)算符可產(chǎn)生-10~+10之間的數(shù)字。Rnum

=$random(Seed)%11;下面是沒有顯式指定種子的例子。Rnum=$random;//種子變量是可選的。數(shù)字產(chǎn)生的順序是偽隨機(jī)排序的,即對(duì)于一個(gè)初始種子值產(chǎn)生相同的數(shù)字序列。如果數(shù)字在取值范圍內(nèi),下述模運(yùn)算符可產(chǎn)生-10~+10之間的26表達(dá)式:{random}%11產(chǎn)生0~10之間的一個(gè)隨機(jī)數(shù)。并置操作符({})將$random函數(shù)返回的有符號(hào)整數(shù)變換為無符號(hào)數(shù)。表達(dá)式:27$dist_chi_square(Seed,DegreeOfFreedom);$dist_erlang(Seed,K_stage,Mean);愛爾蘭$dist_exponential(Seed,Mean);指數(shù)$dist_normal(Seed,Mean,StandardDeviation);$dist_poisson(Seed,Mean);泊松$dist_t(Seed,DegreeOfFreedom);$dist_uniform(Seed,Start,End);統(tǒng)一所有參數(shù)都必須是整數(shù)$dist_chi_square(Seed,Degree28禁止語句禁止語句是過程性語句(因此它只能出現(xiàn)在always或initial語句塊內(nèi))。禁止語句能夠在任務(wù)或程序塊沒有執(zhí)行完它的所有語句前終止其執(zhí)行。它能夠用于對(duì)硬件中斷和全局復(fù)位的建模。其形式如下:disabletask_id;disableblock_id;禁止語句禁止語句是過程性語句(因此它只能出現(xiàn)在always或29終止命名的block(begin-end或fork-join)或任務(wù)。命名的blocktask可以用內(nèi)部的disable語句終止自身。當(dāng)任務(wù)被終止時(shí),以下的內(nèi)容不確定:任何outputs或inouts的值尚未生效的非阻塞性賦值事件持續(xù)賦值和force語句函數(shù)不能被終止。終止命名的block(begin-end或fork-joi30任務(wù)終止其自身不同于任務(wù)返回,輸出不定。disable只有在終止自身的時(shí)候才可綜合。任務(wù)終止其自身不同于任務(wù)返回,輸出不定。31建議最好在任務(wù)定義中不要使用disable禁止語句,尤其是當(dāng)任務(wù)具有一定的返回值時(shí)更是如此。這是因?yàn)楫?dāng)任務(wù)被禁止時(shí),Verilog語言給出的輸出和輸入?yún)?shù)值是不確定的。如果必須在任務(wù)中這樣做,一種比較穩(wěn)妥的方法是:如果有,就在任務(wù)中禁止順序程序塊。建議最好在任務(wù)定義中不要使用disable禁止語句,尤其是當(dāng)32taskExample;output[0:3]Count;begin:LOCAL_BLK//語句10。Count=10;disableExample;

//Count的值不確定。endendtasktaskExample;33taskExample;output[0:3]Count;begin:LOCAL_BLK//語句10。Count=10;disableLOCAL_BLK;//Count的值為10endendtasktaskExample;34命名事件Events可以用于描述通訊和行為建模中同步。SyntaxeventName,...;{Declaretheevent}->EventName;{Triggertheevent}命名事件Events可以用于描述通訊和行為建模中同步。35Event聲明可以出現(xiàn)在以下位置:module-<HERE>-endmodulebegin:Label-<HERE>-endfork:Label-<HERE>-jointask-<HERE>-endtaskfunction-<HERE>-endfunctionEvent聲明可以出現(xiàn)在以下位置:36命名事件moduleadd_mult(out,a,b);input[2:0]a,b;output[3:0]out;reg[3:0]out;eventadd,mult;//defineeventsalways@(aorb)if(a>b)->add;//triggereventelse->mult;//triggerevent命名事件moduleadd_mult(out,a,b);37always@(add)//respondtoaneventtriggerout=a+b;always@(mult)//respondtoaneventtriggerout=a*b;endmodulealways@(add)//respondtoan38Events沒有值或者延遲,是簡(jiǎn)單的事件觸發(fā)語句觸發(fā)的事件,并且有邊沿敏感定時(shí)控制檢測(cè)。命名事件在測(cè)試和系統(tǒng)級(jí)建模時(shí),同一module中兩個(gè)always塊之間或者層次化中不同module之間通訊是很有用的。不可綜合。Events沒有值或者延遲,是簡(jiǎn)單的事件觸發(fā)語句觸發(fā)的事件,39層次路徑名VerilogHDl中的標(biāo)識(shí)符具有一個(gè)唯一的層次路徑名。層次路徑名通過由句點(diǎn)(.)隔開的名字組成。新層次由以下定義:1)模塊實(shí)例化2)任務(wù)定義3)函數(shù)定義4)命名程序塊層次路徑名VerilogHDl中的標(biāo)識(shí)符具有一個(gè)唯一的層次40所有的nets,registers,events,parameters,tasks和functions都可以通過層次名從block外訪問。數(shù)據(jù)不僅可讀,而且可以通過路徑名更新任何層次中的數(shù)據(jù)項(xiàng)的值。較低層模塊能夠通過使用模塊實(shí)例名限定變量引用高層(稱為向上引用)或低層(稱為向下引用)模塊。所有的nets,registers,events,pa41PATHPULSE$Specparam可以在specifyblock中使用控制脈沖傳播。脈沖在模塊的輸出上有兩個(gè)比通過模塊輸出延遲短的預(yù)定跳變。缺省情況下,脈沖會(huì)被模擬器濾掉;這意味著只有長(zhǎng)于延遲的跳變才會(huì)通過模塊傳輸。這種效果叫做慣性延遲。PATHPULSE$可以改變?nèi)笔〉男袨榉绞?。還可以用于指定促使輸出出現(xiàn)x的脈沖寬度范圍。PATHPULSE$Specparam可以在specify42路徑脈沖控制使用PATHPULSE$控制模塊路徑脈沖保持。Syntax:PATHPULSE$=(reject_limit[,error_limit]);PATHPULSE$Input$Output=(reject_limit[,error_limit]);Limit=ConstantMinTypMaxExpression路徑脈沖控制使用PATHPULSE$控制模塊路徑脈沖保持。43如果errorlimit沒給出,則它與rejectlimit相同。短于rejectlimit的脈沖將不被傳輸?shù)捷敵?。比rejectlimit長(zhǎng)但是比errorlimit短的脈沖會(huì)被當(dāng)做1‘bX傳輸。比errorlimit長(zhǎng)的脈沖則正常傳輸。PATHPULSE$input$outputspecparam優(yōu)先于普通的同一模塊中的PATHPULSE$specparam起作用。如果errorlimit沒給出,則它與rejectli44specify(en=>q)=12;(data=>q)=10;(clr,pre*>q)=4;specparamPATHPULSE$=3,PATHPULSE$en$q=(2,9),PATHPULSE$clr$q=1;endspecify

數(shù)字系統(tǒng)設(shè)計(jì)1課件45定時(shí)校驗(yàn)任務(wù)定時(shí)檢查用于校驗(yàn)設(shè)計(jì)的定時(shí)。定時(shí)檢查完成以下功能:測(cè)定兩個(gè)事件之間的共用時(shí)間。比較共用時(shí)間和指定的時(shí)間限制。如果共用時(shí)間超指定的時(shí)間限制報(bào)告時(shí)間沖突。(沖突被當(dāng)作warning報(bào)告并不影響模塊輸出。)定時(shí)校驗(yàn)任務(wù)定時(shí)檢查用于校驗(yàn)設(shè)計(jì)的定時(shí)。46Verilog執(zhí)行的時(shí)間檢查有:建立保持脈沖寬度時(shí)鐘周期傾斜恢復(fù)Verilog執(zhí)行的時(shí)間檢查有:47定時(shí)校驗(yàn)任務(wù)$hold$nochange$period$recovery$setup$setuphold$skew$width定時(shí)校驗(yàn)任務(wù)$hold48$setup$setup(DataEvent,ReferenceEvent,Limit,[Notifier]);如果(time_of_reference_event-time_of_data_event)<limit則報(bào)告時(shí)序沖突(timingviolation);系統(tǒng)調(diào)用實(shí)例如下:$setup(data,posedgeclk,4);$setup$setup(DataEvent,Refer49$hold$hold(ReferenceEvent,DataEvent,Limit[,Notifier]);如果(time_of_data_event-time_of_reference_event)<limit,則報(bào)數(shù)據(jù)保持時(shí)間時(shí)序沖突。例如:$hold(posedgeclk,data,3);$hold$hold(ReferenceEvent,Da50$setuphold系統(tǒng)任務(wù)$setuphold是$setup和$hold任務(wù)的結(jié)合:$setuphold(ReferenceEvent,DataEvent,SetupLimit,HoldLimit[,Notifier]);實(shí)例:$setuphold(posedgeclk,data,4,3);$setuphold系統(tǒng)任務(wù)$setuphold是$setu51$width$width(ReferenceEvent,Limit[,Threshold[,Notifier]]);則檢查信號(hào)的脈沖寬度限制,如果threshold<(time_of_data_event-time_of_reference_event)<limit則報(bào)告信號(hào)上出現(xiàn)脈沖寬度不夠?qū)挼臅r(shí)序錯(cuò)誤。數(shù)據(jù)事件來源于基準(zhǔn)事件:它是帶有相反邊沿的基準(zhǔn)事件,例如:$width(negedgeCk,10,0.3);$width$width(ReferenceEvent,52$period$period(ReferenceEvent,Limit[,Notifier]);檢查信號(hào)的周期,若(time_of_data_event-time_of_reference_event)<limit則報(bào)告時(shí)序錯(cuò)誤?;鶞?zhǔn)事件必須是邊沿觸發(fā)事件。數(shù)據(jù)事件來源于基準(zhǔn)事件:它是帶有相同邊沿的基準(zhǔn)事$period$period(ReferenceEvent53$skew$skew(ReferenceEvent,DataEvent,Limit[,Notifier]);檢查信號(hào)之間(尤其是成組的時(shí)鐘控制信號(hào)之間)的偏斜(skew)是否滿足要求,若time_of_data_event-time_of_reference_event>limit則報(bào)告信號(hào)之間出現(xiàn)時(shí)序偏斜太大的錯(cuò)誤。如果data_event的時(shí)間等于reference_event的時(shí)間,則不報(bào)出錯(cuò)。$skew$skew(ReferenceEvent,Da54$recovery$recovery(ReferenceEvent,DataEvent,Limit[,Notifier]);主要檢查時(shí)序狀態(tài)元件(觸發(fā)器、鎖存器、RAM和ROM等)的時(shí)鐘信號(hào)與相應(yīng)的置/復(fù)位信號(hào)之間的時(shí)序約束關(guān)系,若(time_of_data_event-time_of_reference_event)<limit則報(bào)告時(shí)序沖突。該系統(tǒng)任務(wù)的基準(zhǔn)事件必須是邊沿觸發(fā)事件。該系統(tǒng)任務(wù)在執(zhí)行定時(shí)校檢前記錄新基準(zhǔn)事件時(shí)間;因此,如果數(shù)據(jù)事件和基準(zhǔn)事件在相同的模擬時(shí)間同時(shí)發(fā)生,就報(bào)告時(shí)序沖突錯(cuò)誤。$recovery$recovery(ReferenceE55$nochange$nochange(ReferenceEvent,DataEvent,StartEdgeOffset,EndEdgeOffset[,Notifier]);如果在指定的基準(zhǔn)事件區(qū)間發(fā)生數(shù)據(jù)變化,就報(bào)告時(shí)序沖突錯(cuò)誤?;鶞?zhǔn)事件必須是邊沿觸發(fā)事件。例如:$nochange(negedgeClear,Perset,0,0);如果在Clear為低時(shí)Preset發(fā)生變化,將報(bào)告時(shí)序沖突錯(cuò)誤。$nochange$nochange(ReferenceE56當(dāng)發(fā)生時(shí)序沖突時(shí),系統(tǒng)任務(wù)根據(jù)下列case語句改變自身的值來更新參數(shù)notifier。case(notifier)'bx:notifier='b0;'b0:notifier='b1;'b1:notifier='b0;'bz:notifier='bz;end當(dāng)發(fā)生時(shí)序沖突時(shí),系統(tǒng)任務(wù)根據(jù)下列case語句改變自身的值來57notifier參數(shù)可提供關(guān)于時(shí)序沖突或傳播x到輸出的時(shí)序沖突。使用參數(shù)notifier的例子如下:regNotifyDin;...$setuphold(negedgeClock,Din,tSETUP,tHOLD,NotifyDin);在這一實(shí)例中,NotifyDin是參數(shù)notifier。如果時(shí)序沖突發(fā)生,寄存參數(shù)NotifyDin根據(jù)前面對(duì)參數(shù)notifier描述的case語句改變其值。notifier參數(shù)可提供關(guān)于時(shí)序沖突或傳播x到輸出的時(shí)序沖58基準(zhǔn)事件的跳變建立為定時(shí)校驗(yàn)建立基準(zhǔn)時(shí)間?;鶞?zhǔn)事件必須是與模塊input或inout相關(guān)的。數(shù)據(jù)事件的跳變發(fā)起時(shí)間校驗(yàn)。數(shù)據(jù)事件必須是與模塊input或inout相關(guān)的。當(dāng)基準(zhǔn)事件和數(shù)據(jù)事件同時(shí)發(fā)生無建立沖突報(bào)告。而保持沖突會(huì)被報(bào)告。對(duì)于$width脈沖短于threshold(如果給出)將不產(chǎn)生違規(guī)?;鶞?zhǔn)事件的跳變建立為定時(shí)校驗(yàn)建立基準(zhǔn)時(shí)間?;鶞?zhǔn)事件必須是與模59以下時(shí)間校驗(yàn)基準(zhǔn)事件必須是邊沿觸發(fā)狀態(tài):$width,$period,$recovery,$nochange?;鶞?zhǔn)事件可以使用關(guān)鍵詞edge,$recovery和$nochange除外,只能使用posedge和negedge。有條件定時(shí)校驗(yàn)(使用&&&符號(hào))僅當(dāng)條件為真(1、x、z)時(shí)發(fā)生作用。如果存在Notifier參量則必須是寄存器。當(dāng)沖突發(fā)生時(shí)寄存器值發(fā)生變化。如果它的值是X則變?yōu)?,如果是0則變?yōu)?,如果是1則變?yōu)?。如果是Z則不變。以下時(shí)間校驗(yàn)基準(zhǔn)事件必須是邊沿觸發(fā)狀態(tài):$width,$p60定時(shí)校驗(yàn)系統(tǒng)任務(wù)只能在specifyblock中調(diào)用。對(duì)于復(fù)雜條件,在specifyblock外描述條件,并且驅(qū)動(dòng)一個(gè)用在specifyblock內(nèi)的,條件信號(hào)。定時(shí)校驗(yàn)系統(tǒng)任務(wù)只能在specifyblock中調(diào)用。61regErr,FastClock;//NotifierregistersspecifyspecparamTsetup=3.5,Thold=1.5,Trecover=2.0,Tskew=2.0,Tpulse=10.5,Tspike=0.5;$hold(posedgeClk,Data,Thold);$nochange(posedgeClock,Data,0,0);$period(posedgeClk,20,FastClock);$recovery(posedgeClk,Rst,Trecover);$setup(Data,posedgeClk,Tsetup);$setuphold(posedgeClk&&&!Reset,Data,Tsetup,Thold,Err);$skew(posedgeClk1,posedgeClk2,Tskew);$width(negedgeClk,Tpulse,Tspike);endspecifyregErr,FastClock;//Notifie62模擬時(shí)間函數(shù)下列系統(tǒng)函數(shù)返回模擬時(shí)間。$time:返回64位的整型模擬時(shí)間給調(diào)用它的模塊,返回值被四舍五入。$stime:返回32位的整型模擬時(shí)間。$realtime:向調(diào)用它的模塊返回實(shí)型模擬時(shí)間。模擬時(shí)間函數(shù)下列系統(tǒng)函數(shù)返回模擬時(shí)間。63變換函數(shù)下列系統(tǒng)函數(shù)是數(shù)字類型變換的功能函數(shù):$rtoi(real_value):通過截?cái)嘈?shù)值將實(shí)數(shù)變換為整數(shù)。$itor(integer_value):將整數(shù)變換為實(shí)數(shù)。$realtobits(real_value):將實(shí)數(shù)變換為64位的實(shí)數(shù)向量表示法(實(shí)數(shù)的IEEE745表示法)$bitstoreal(bit_value):將位模式變換為實(shí)數(shù)(與$realtobits相反)變換函數(shù)下列系統(tǒng)函數(shù)是數(shù)字類型變換的功能函數(shù):64概率分布函數(shù)函數(shù):$random[(seed)]根據(jù)種子變量(seed)的取值按32位的有符號(hào)整數(shù)形式返回一個(gè)隨機(jī)數(shù)。種子變量(必須是寄存器、整數(shù)或時(shí)間寄存器類型)控制函數(shù)的返回值,即不同的種子將產(chǎn)生不同的隨機(jī)數(shù)。如果沒有指定種子,每次$random函數(shù)被調(diào)用時(shí)根據(jù)缺省種子產(chǎn)生隨機(jī)數(shù)。概率分布函數(shù)函數(shù):65integerSeed,Rnum;wireClk;initialSeed=12;always@(Clk)Rnum=$random(Seed);在Clk的每個(gè)邊沿,$random被調(diào)用并返回一個(gè)32位有符號(hào)整型隨機(jī)數(shù)。integerSeed,Rnum;66如果數(shù)字在取值范圍內(nèi),下述模運(yùn)算符可產(chǎn)生-10~+10之間的數(shù)字。Rnum

=$random(Seed)%11;下面是沒有顯式指定種子的例子。Rnum=$random;//種子變量是可選的。數(shù)字產(chǎn)生的順序是偽隨機(jī)排序的,即對(duì)于一個(gè)初始種子值產(chǎn)生相同的數(shù)字序列。如果數(shù)字在取值范圍內(nèi),下述模運(yùn)算符可產(chǎn)生-10~+10之間的67表達(dá)式:{random}%11產(chǎn)生0~10之間的一個(gè)隨機(jī)數(shù)。并置操作符({})將$random函數(shù)返回的有符號(hào)整數(shù)變換為無符號(hào)數(shù)。表達(dá)式:68$dist_chi_square(Seed,DegreeOfFreedom);$dist_erlang(Seed,K_stage,Mean);愛爾蘭$dist_exponential(Seed,Mean);指數(shù)$dist_normal(Seed,Mean,StandardDeviation);$dist_poisson(Seed,Mean);泊松$dist_t(Seed,DegreeOfFreedom);$dist_uniform(Seed,Start,End);統(tǒng)一所有參數(shù)都必須是整數(shù)$dist_chi_square(Seed,Degree69禁止語句禁止語句是過程性語句(因此它只能出現(xiàn)在always或initial語句塊內(nèi))。禁止語句能夠在任務(wù)或程序塊沒有執(zhí)行完它的所有語句前終止其執(zhí)行。它能夠用于對(duì)硬件中斷和全局復(fù)位的建模。其形式如下:disabletask_id;disableblock_id;禁止語句禁止語句是過程性語句(因此它只能出現(xiàn)在always或70終止命名的block(begin-end或fork-join)或任務(wù)。命名的blocktask可以用內(nèi)部的disable語句終止自身。當(dāng)任務(wù)被終止時(shí),以下的內(nèi)容不確定:任何outputs或inouts的值尚未生效的非阻塞性賦值事件持續(xù)賦值和force語句函數(shù)不能被終止。終止命名的block(begin-end或fork-joi71任務(wù)終止其自身不同于任務(wù)返回,輸出不定。disable只有在終止自身的時(shí)候才可綜合。任務(wù)終止其自身不同于任務(wù)返回,輸出不定。72建議最好在任務(wù)定義中不要使用disable禁止語句,尤其是當(dāng)任務(wù)具有一定的返回值時(shí)更是如此。這是因?yàn)楫?dāng)任

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論