面向電路仿真的verilog結(jié)構(gòu)語句和任務(wù)和函數(shù)_第1頁
面向電路仿真的verilog結(jié)構(gòu)語句和任務(wù)和函數(shù)_第2頁
面向電路仿真的verilog結(jié)構(gòu)語句和任務(wù)和函數(shù)_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

面向電路仿真的verilog結(jié)構(gòu)語句和任務(wù)和函數(shù)

c定義相關(guān)動詞在本課程中,我們學(xué)習(xí)了通過inolog語法中的兩種結(jié)構(gòu)語法、定義和使用任務(wù)和函數(shù)以及系統(tǒng)任務(wù)的一般方法。除了函數(shù)之外,這些語句在C語言中從來都沒有定義過。特別需要注意的是,函數(shù)雖然在C語言中有過定義,但與Verilog的函數(shù)定義則完全不同。我們一定要注意這些語句所代表的物理意義。有意識地把結(jié)構(gòu)語句、任務(wù)、函數(shù)與虛擬測試信號的生成或硬件電路結(jié)構(gòu)聯(lián)系來。只有通過物理意義的深入理解,才能在設(shè)計(jì)中準(zhǔn)確地應(yīng)用。inica—結(jié)構(gòu)說明語句Verilog語言中的任何過程模塊都從屬于以下四種結(jié)構(gòu)的說明語句。1)initial說明語句2)always說明語句3)task說明語句4)function說明語句一個程序模塊可以有多個initial和always過程塊。每個initial和always說明語句在仿真的一開始同時立即開始執(zhí)行。initial語句只執(zhí)行一次。而always語句則是不斷地重復(fù)活動著,直到仿真過程結(jié)束。但always語句后跟著的過程塊是否運(yùn)行,則要看它的觸發(fā)條件是否滿足,如滿足則運(yùn)行過程塊一次,再次滿足則再運(yùn)行一次,直至仿真過程結(jié)束。在一個模塊中,使用initial和always語句的次數(shù)是不受限制的,它們都是同時開始運(yùn)行的。task和function語句可以在程序模塊中的一處或多處調(diào)用。其具體使用方法以后再詳細(xì)地加以介紹。在初級篇里,我們只對initial和always語句深入加以介紹。initial語句initial語句的格式如下:在這個例子中用initial語句在仿真開始時對各變量進(jìn)行初始化,注意這個初始化過程不需要任何時間。[例2]:從這個例子中,我們可以看到initial語句的另一用途,即用initial語句來生成激勵波形作為電路的測試仿真信號。注意:一個模塊中可以有多個initial塊,它們都是并行運(yùn)行的。initial塊常用于測試文件和虛擬模塊的編寫,用來產(chǎn)生仿真測試信號和設(shè)置信號記錄等仿真環(huán)境。al變遷的仿真always語句在仿真過程中是不斷活動著的。但always語句后跟著的過程塊是否執(zhí)行,則要看它的觸發(fā)條件是否滿足,如滿足則運(yùn)行過程塊一次,如不斷滿足則不斷地循環(huán)執(zhí)行。其聲明格式如下:always<時序控制><語句>always語句由于其不斷活動的特性,只有和一定的時序控制結(jié)合在一起才有用。如果一個always語句沒有時序控制,則這個always語句將會發(fā)成一個仿真死鎖。見下例:這個always語句將會生成一個0延遲的無限循環(huán)跳變過程,這時會發(fā)生仿真死鎖。但如果加上時序控制,則這個always語句將變?yōu)橐粭l非常有用的描述語句。見下例:[例3]:reg[7:0]counter;這個例子中,每當(dāng)areg信號的上升沿出現(xiàn)時把tick信號反相,并且把counter增加1。這種時間控制是always語句最常用的。always的時間控制可以是沿觸發(fā)也可以是電平觸發(fā)的,可以單個信號也可以多個信號,中間需要用關(guān)鍵字or連接,如:沿觸發(fā)的always塊常常描述時序行為,如有限狀態(tài)機(jī),如果符合可綜合風(fēng)格要求,則可通過綜合工具自動地將其轉(zhuǎn)換為表示寄存器組和門級組合邏輯的結(jié)構(gòu),而該結(jié)構(gòu)應(yīng)具有時序所要求的行為;而電平觸發(fā)的always塊常常用來描述組合邏輯的行為,如果符合可綜合風(fēng)格要求,可通過綜合工具自動將其轉(zhuǎn)換為表示組合邏輯的門級邏輯結(jié)構(gòu)或帶鎖存器的組合邏輯結(jié)構(gòu),而該結(jié)構(gòu)應(yīng)具有所要求的行為。一個模塊中可以有多個always塊,它們都是并行運(yùn)行著的。如果這些always塊是可以綜合的,則表示的是都某種結(jié)構(gòu);如果不可綜合,它們表示的則是電路結(jié)構(gòu)的行為,因此多個always塊并沒有前后之分。個任務(wù)和函數(shù)task和function說明語句分別用來定義任務(wù)和函數(shù)。利用任務(wù)和函數(shù)可以把一個很大的程序模塊分解成許多較小的任務(wù)和函數(shù)便于理解和調(diào)試。輸入、輸出和總線信號的值可以傳入、傳出任務(wù)和函數(shù)。任務(wù)和函數(shù)往往還是大的程序模塊中在不同地點(diǎn)多次用到的相同的程序段。學(xué)會使用task和function語句可以簡化程序的結(jié)構(gòu),使程序明白易懂,是編寫較大型模塊的基本功。task和function說明語句的不同任務(wù)和函數(shù)有些不同,主要的不同有以下四點(diǎn):1)函數(shù)只能與主模塊共用同一個仿真時間單位,而任務(wù)可以定義自己的仿真時間單位。2)函數(shù)不能啟動任務(wù),而任務(wù)能啟動其它任務(wù)和函數(shù)。3)函數(shù)至少要有一個輸入變量,而任務(wù)可以沒有或有多個任何類型的變量。4)函數(shù)返回一個值,而任務(wù)則不返回值。函數(shù)的目的是通過返回一個值來響應(yīng)輸入信號的值。任務(wù)卻能支持多種目的,能計(jì)算多個結(jié)果值,這些結(jié)果值只能通過被調(diào)用的任務(wù)的輸出或總線端口送出。VerilogHDL模塊使用函數(shù)時是把它當(dāng)作表達(dá)式中的操作符,這個操作的結(jié)果值就是這個函數(shù)的返回值。下面讓我們用例子來說明:例如,定義一任務(wù)或函數(shù)對一個16位的字進(jìn)行操作讓高字節(jié)與低字節(jié)互換,把它變?yōu)榱硪粋€字(假定這個任務(wù)或函數(shù)名為:switch_bytes)。任務(wù)返回的新字是通過輸出端口的變量,因此16位字字節(jié)互換任務(wù)的調(diào)用源碼是這樣的:switch_bytes(old_word,new_word);任務(wù)switch_bytes把輸入old_word的字的高、低字節(jié)互換放入new_word端口輸出。而函數(shù)返回的新字是通過函數(shù)本身的返回值,因此16位字字節(jié)互換函數(shù)的調(diào)用源碼為:new_word=switch_bytes(old_word);[例1]:alwaysareg=~ar

溫馨提示

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

評論

0/150

提交評論