《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第4章_第1頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第4章_第2頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第4章_第3頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第4章_第4頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第4章_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章行為級(jí)建模方法4.1行為級(jí)建模程序結(jié)構(gòu)4.2過程結(jié)構(gòu)語句4.3語句塊4.4時(shí)序控制4.5賦值語句4.6分支語句4.7循環(huán)語句

4.1行為級(jí)建模程序結(jié)構(gòu)

行為級(jí)建模是指對(duì)信號(hào)采用行為級(jí)的描述(不是結(jié)構(gòu)級(jí)的描述)方法來建模。行為級(jí)的描述常用于復(fù)雜數(shù)字邏輯系統(tǒng)的設(shè)計(jì)中,也就是通過行為級(jí)建模把一個(gè)復(fù)雜的系統(tǒng)分解成可操作的若干個(gè)模塊,每個(gè)模塊之間的邏輯關(guān)系通過行為模塊的仿真加以驗(yàn)證。這樣就把一個(gè)大的系統(tǒng)合理地分解為若干個(gè)較小的子系統(tǒng),然后將每個(gè)子系統(tǒng)用可綜合風(fēng)格的VerilogHDL模塊(門級(jí)結(jié)構(gòu)或RTL級(jí)、算法級(jí)、系統(tǒng)級(jí)的模塊)加以描述。同時(shí),行為級(jí)建模也可以用來生成仿真測試信號(hào),對(duì)已設(shè)計(jì)模塊進(jìn)行檢測。通過下面的例子,讀者可對(duì)行為級(jí)建模方式有個(gè)初步的概念。

例如:一位全加器的行為級(jí)建模。通過該例,應(yīng)建立以下概念:

(1)只有寄存器類型的信號(hào)才可以在always和initial語句中進(jìn)行賦值,類型定義通過reg語句實(shí)現(xiàn);

(2)采用行為級(jí)描述方式,即直接采用“+”來描述加法,{Count,Sum}表示對(duì)位數(shù)的擴(kuò)展,因?yàn)閮蓚€(gè)1?bit相加,產(chǎn)生的和有兩位,低位放在Sum變量中,進(jìn)位放在Count中;

(3)?always語句一直重復(fù)執(zhí)行,由敏感列表(always語句括號(hào)內(nèi)的變量)中的變量觸發(fā);

(4)?always語句從0時(shí)刻開始;

(5)在begin和end之間的語句是順序執(zhí)行的,屬于串行語句。

4.2過程結(jié)構(gòu)語句

每個(gè)過程塊是由過程語句(initial或always)和語句塊組成的,過程塊中有下列部件:過程賦值語句——賦值語句和過程連續(xù)賦值語句;時(shí)序控制——控制塊的執(zhí)行及塊中的語句時(shí)序;高級(jí)結(jié)構(gòu)(循環(huán),條件語句等)——描述塊的功能。

VerilogHDL中的多數(shù)過程模塊都從屬于以下兩種過程語句:

initial說明語句;

always說明語句;一個(gè)程序模塊可以有多個(gè)initial和always過程塊。每個(gè)initial和always說明語句在仿真的一開始即執(zhí)行。initial語句常用于仿真中的初始化,initial語句只執(zhí)行一次,而always語句則是不斷地重復(fù)執(zhí)行,直到仿真過程結(jié)束。always過程語句是可綜合的,在可綜合的電路設(shè)計(jì)中廣泛采用。4.2.1initial語句

initial語句的語法格式如下:

initial

語句塊

其中,語句塊的格式為

<塊定義語句1>

時(shí)間控制1行為語句1;

時(shí)間控制n行為語句n;

<塊定義語句2>

initial語句不帶觸發(fā)條件,initial過程中的塊語句沿時(shí)間軸只執(zhí)行一次,參見圖4.1。initial語句通常用于仿真模塊中對(duì)激勵(lì)信號(hào)的描述,或用于給寄存器變量賦初值,它是面向模擬仿真的過程語句,通常不能被邏輯綜合工具所支持。圖4.1initial語句執(zhí)行順序

【例4.1】用initial語句在仿真開始時(shí)對(duì)各變量進(jìn)行初始化。

【例4.2】用initial語句對(duì)存儲(chǔ)器進(jìn)行初始化。4.2.2always語句

always過程塊是由always過程語句和語句塊組成的,其語法格式如下:

always@<敏感信號(hào)表達(dá)式>

語句塊

其中,語句塊的格式為

<塊定義語句1>

時(shí)間控制1行為語句1;

時(shí)間控制n行為語句n;

<塊定義語句2>以上的格式中:

(1)關(guān)鍵詞always表明了該過程塊是一個(gè)“always過程塊”。

(2)?@<敏感信號(hào)表達(dá)式>是可選項(xiàng),有敏感事件列表的語句塊被稱為“由事件控制的語句塊”,它的執(zhí)行要受敏感事件的控制。

(3)“時(shí)間控制”用來對(duì)過程塊內(nèi)各條語句的執(zhí)行時(shí)間進(jìn)行控制,它可以是任何一種時(shí)間控制方式。

(4)語句塊中的行為語句可以是如下語句中的一種:過程賦值語句(阻塞型或非阻塞型)、過程連續(xù)賦值語句、if條件分支語句、case條件分支語句、循環(huán)控制語句(forever、repeat、while、for循環(huán)控制語句)、wait等待語句、disable中斷語句、事件觸發(fā)語句、任務(wù)調(diào)用語句(用戶定義的任務(wù)或系統(tǒng)任務(wù))。圖4.2always語句執(zhí)行順序

【例4.3】always語句示例(1)。

always#half_periodareg=~areg;

這個(gè)例子生成了一個(gè)周期為period(=2*half_period)的無限延續(xù)的信號(hào)波形,常用這種方法來描述時(shí)鐘信號(hào),作為激勵(lì)信號(hào)來測試所設(shè)計(jì)的電路。

【例4.4】always語句示例(2)。

4.3語句塊

語句塊是由塊標(biāo)志符begin-end或fork-join界定的一組語句,當(dāng)塊語句只包含一條語句時(shí),塊標(biāo)志符可以省略。下面分別介紹順序語句塊和并行語句塊。4.3.1順序語句塊

順序語句塊(begin-end)的語句按給定次序順序執(zhí)行。每條語句中的時(shí)延值與其前面語句執(zhí)行的模擬時(shí)間相關(guān)。一旦順序語句塊執(zhí)行結(jié)束,跟隨順序語句塊過程的下一條語句繼續(xù)執(zhí)行。順序語句塊的語法格式如下:圖4.3激勵(lì)波形4.3.2并行語句塊

并行語句塊(fork-join)內(nèi)的語句是同時(shí)執(zhí)行的,即程序流程控制一進(jìn)入到該并行塊,塊內(nèi)語句就開始同時(shí)執(zhí)行;塊內(nèi)每條語句的延遲時(shí)間是相對(duì)于程序流程控制進(jìn)入到塊內(nèi)的仿真時(shí)刻而言的;延遲時(shí)間是用來給賦值語句提供執(zhí)行時(shí)序的;當(dāng)按時(shí)間順序排序在最后的語句執(zhí)行完后,或一個(gè)disable語句執(zhí)行時(shí),程序流程控制跳出該程序塊。

【例4.5】

并行語句塊舉例。4.3.3順序語句塊和并行語句塊的混合使用

順序語句塊和并行語句塊的混合使用有以下兩種情況:

(1)當(dāng)順序語句塊和并行語句塊屬于不同的過程塊(initial或always過程塊)時(shí),順序語句塊和并行語句塊是并行執(zhí)行的。

【例4.6】順序語句塊和并行語句塊的混合使用示例(1)。圖4.4例4.6的激勵(lì)波形

(2)當(dāng)順序語句塊和并行語句塊嵌套在同一條過程塊內(nèi)時(shí),內(nèi)層語句塊可以看做外層語句塊中的一條普通語句,內(nèi)層語句塊在什么時(shí)候得到執(zhí)行是由外層語句塊的規(guī)則所決定的;內(nèi)層語句塊開始執(zhí)行后,其內(nèi)部各條語句的執(zhí)行要遵守內(nèi)層語句塊的規(guī)則。

【例4.7】順序語句塊和并行語句塊的混合使用示例(2)。

4.4時(shí)序控制

時(shí)序控制可以用來對(duì)過程塊中各條語句的執(zhí)行時(shí)間(時(shí)序)進(jìn)行控制。VerilogHDL提供了兩種類型的時(shí)序控制。

(1)延時(shí)控制:為行為語句的執(zhí)行指定一個(gè)延遲時(shí)間。

(2)事件控制:為行為語句的執(zhí)行指定觸發(fā)事件時(shí)間。事件控制分為兩種,即電平敏感事件觸發(fā)和邊沿敏感事件觸發(fā)。4.4.1延時(shí)控制

延時(shí)控制的語法格式如下:

#<延遲時(shí)間>行為語句;

#<延遲時(shí)間>;

其中,符號(hào)“#”是延時(shí)控制的標(biāo)識(shí)符,<延遲時(shí)間>是指定的延遲時(shí)間量,它是以多個(gè)仿真時(shí)間單位的形式給出的。

【例4.8】延時(shí)控制方式一。

【例4.9】延時(shí)控制方式二。4.4.2電平敏感事件觸發(fā)

電平敏感事件控制方式下啟動(dòng)語句執(zhí)行的觸發(fā)條件是指定的條件表達(dá)式為真(1)。電平敏感事件控制用關(guān)鍵詞“wait”來表示,有以下3種所示:

wait(條件表達(dá)式)語句塊;

wait(條件表達(dá)式)行為語句;

wait(條件表達(dá)式);

【例4.10】電平敏感事件控制舉例。第三種形式中的wait后沒有包含語句塊或行為語句,在這種形式下,當(dāng)仿真進(jìn)程執(zhí)行到該wait控制語句條件表達(dá)式的值為“真”時(shí),立即結(jié)束該wait控制語句的執(zhí)行,仿真進(jìn)程繼續(xù)向下進(jìn)行。這種形式的電平敏感事件控制常常對(duì)順序語句中各條語句的執(zhí)行時(shí)序進(jìn)行控制。

程序執(zhí)行到以下語句時(shí)將暫停,直到reset變?yōu)檎?值為1)時(shí),立即結(jié)束該wait控制語句,繼續(xù)執(zhí)行后面的語句。

wait(reset);4.4.3邊沿敏感事件觸發(fā)

在邊沿敏感事件觸發(fā)的事件控制方式下,行為語句的執(zhí)行需要由指定事件的發(fā)生來觸發(fā),也就是在指定信號(hào)的跳變邊沿才觸發(fā)語句的執(zhí)行,而當(dāng)信號(hào)處于穩(wěn)定狀態(tài)時(shí)則不會(huì)觸發(fā)語句的執(zhí)行。

邊沿敏感事件控制的語法格式有以下4種:例如:

【例4.11】邊沿敏感事件計(jì)數(shù)器。

【例4.12】二選一多路選擇器。

4.5賦值語句

賦值語句可以分為連續(xù)賦值語句和過程賦值語句。連續(xù)賦值語句是數(shù)據(jù)流描述方式的賦值語句,而過程賦值語句則是行為描述方式的賦值語句。

過程賦值語句是最常見的賦值形式,等號(hào)左側(cè)是賦值目標(biāo),右側(cè)是表達(dá)式。它有以下幾個(gè)特點(diǎn):

(1)過程賦值語句只出現(xiàn)在initial和always語句塊內(nèi)。

(2)過程賦值語句只能給寄存器變量賦值。

(3)賦值表達(dá)式的右端可以是任何表達(dá)式。

【例4.13】過程賦值語句賦值操作的一般形式。4.5.1連續(xù)賦值語句

連續(xù)賦值語句用來驅(qū)動(dòng)線網(wǎng)型變量,這一線網(wǎng)型變量必須已經(jīng)事先定義過。只要輸入端操作數(shù)的值發(fā)生變化,該語句就重新計(jì)算并刷新賦值結(jié)果,我們可以使用連續(xù)賦值語句來描述組合邏輯,而不需要用門電路和互連線。連續(xù)賦值語句的語法格式如下:

assignnet_value=expression(表達(dá)式);其中:net_value為線網(wǎng)型(wire)變量,expression為賦值操作表達(dá)式,可以是常量、由運(yùn)算符(如邏輯運(yùn)算符、算術(shù)運(yùn)算符)參與的表達(dá)式。例如:

wire[3:0]Z,a,b; //線網(wǎng)說明

assignZ=a&b; //連續(xù)賦值語句,給Z賦值

連續(xù)賦值語句執(zhí)行時(shí),只要等號(hào)右端的操作數(shù)上有事件發(fā)生(操作數(shù)值的變化),右端表達(dá)式即被計(jì)算,如果結(jié)果值有變化,新結(jié)果就賦給等號(hào)左端的線網(wǎng)型變量。4.5.2阻塞賦值語句

阻塞賦值的操作符是等號(hào)(=),例如:

b=a;

阻塞賦值語句在執(zhí)行時(shí),先計(jì)算右側(cè)表達(dá)式的值,然后賦值給等號(hào)左端目標(biāo),在完成整個(gè)賦值之前不能被其他語句打斷。也就是說,前面的賦值語句沒有完成之前,后面的語句不能被執(zhí)行,仿佛被阻塞了一樣,因此稱為阻塞賦值方式。

【例4.14】阻塞賦值語句示例。圖4.5阻塞賦值仿真波形4.5.3非阻塞賦值語句

非阻塞賦值的操作符是符號(hào)“<=”,例如:

b<=a;

非阻塞過程賦值只能用于寄存器賦值。非阻塞賦值在所在塊結(jié)束之后才能真正完成賦值操作,如例4.15中,b的值并不是立刻改變的。

【例4.15】非阻塞賦值語句示例。圖4.6非阻塞賦值仿真波形

4.6分支語句

4.6.1if-else語句

if語句用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。VerilogHDL語言提供了三種形式的if語句。

1.第一種形式

if(條件表達(dá)式)塊語句

說明:

(1)當(dāng)條件表達(dá)式為邏輯真和邏輯1時(shí)執(zhí)行塊語句,其他情況下(如為0、x、z)均為條件不成立;

(2)一條沒有else語句的if語句映射到硬件上,會(huì)形成一個(gè)鎖存器。例如:

always@(enableordada)

if(enbale)

out=data;

data與out的關(guān)系參見表4.1。表4.1if條件表達(dá)式的真值表

【例4.16】if-else語句示例。

3.第三種形式

【例4.17】模為60的BCD碼計(jì)數(shù)器。4.6.2case語句

case分支語句是另一種用來實(shí)現(xiàn)多路分支選擇控制的語句。case分支語句通常用于微處理器指令譯碼功能的描述和有限狀態(tài)機(jī)的描述。它有case、casez和casex三種形式。其語法格式如下:

【例4.18】一個(gè)名為

encod8_3的8-3普通編碼器。這個(gè)例子描述了一個(gè)名為encod8_3

的8-3普通編碼器,實(shí)現(xiàn)了8位輸入、3位輸出,在某一時(shí)刻只有一個(gè)輸入被轉(zhuǎn)換為二進(jìn)制碼。

VerilogHDL針對(duì)電路的特性還提供了case語句的另外兩種形式:casez和casex。其中casez語句忽略比較表達(dá)式兩邊的z部分,casex語句忽略比較表達(dá)式兩邊的x部分和z部分,即在表達(dá)式進(jìn)行比較時(shí),不將該位的狀態(tài)考慮在內(nèi)。這樣,在case語句表達(dá)式進(jìn)行比較時(shí),就可以靈活地設(shè)置對(duì)信號(hào)的某些位進(jìn)行比較。例如:

4.7循環(huán)語句

4.7.1forev

溫馨提示

  • 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)論