第6章Verilog行為語句_第1頁
第6章Verilog行為語句_第2頁
第6章Verilog行為語句_第3頁
第6章Verilog行為語句_第4頁
第6章Verilog行為語句_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 主要內(nèi)容主要內(nèi)容類別類別語句語句可綜合性可綜合性過程語句過程語句initialalways塊語句塊語句串行塊串行塊begin-end并行塊并行塊fork-join賦值語句賦值語句持續(xù)賦值持續(xù)賦值assign過程賦過程賦值值=、=條件語句條件語句if-elsecase循環(huán)語句循環(huán)語句forrepeatwhileforever編譯向?qū)дZ句編譯向?qū)дZ句defineincludeifdef,else,endifo initialo alwayso 在一個模塊(在一個模塊(module)中,使用中,使用initial和和always語句的次數(shù)是不受限制的。語句的次數(shù)是不受限制的。initial語句常用

2、于仿真中的初始化,語句常用于仿真中的初始化,initial過程過程塊中的語句僅執(zhí)行一次;塊中的語句僅執(zhí)行一次;always塊內(nèi)的語塊內(nèi)的語句則是不斷重復執(zhí)行的。句則是不斷重復執(zhí)行的。o always()begin/過程賦值過程賦值/if-else,case,casex,casez選擇語句選擇語句/while,repeat,for循環(huán)循環(huán)/task,function調(diào)用調(diào)用endo “always”過程語句通常是帶有觸發(fā)條件的,觸發(fā)條件寫過程語句通常是帶有觸發(fā)條件的,觸發(fā)條件寫在敏感信號表達式中,只有當觸發(fā)條件滿足時,其后的在敏感信號表達式中,只有當觸發(fā)條件滿足時,其后的“begin-end”塊

3、語句才塊語句才能被執(zhí)行。能被執(zhí)行。o 敏感信號表達式又稱事件表達式或敏感信號列表,敏感信號表達式又稱事件表達式或敏感信號列表,即當該表達式中變量的值改變時,就會引發(fā)塊內(nèi)即當該表達式中變量的值改變時,就會引發(fā)塊內(nèi)語句的執(zhí)行。因此敏感信號表達式中應列出影響語句的執(zhí)行。因此敏感信號表達式中應列出影響塊內(nèi)取值的所有信號。若有兩個或兩個以上信號塊內(nèi)取值的所有信號。若有兩個或兩個以上信號時,它們之間用時,它們之間用“or”連接。連接。o 例如:例如: ( (a) a) / /當信號當信號a a的值發(fā)生改變的值發(fā)生改變 ( (a or b) a or b) / /當信號當信號a a或信號或信號b b的值發(fā)生

4、改變的值發(fā)生改變 ( (posedge clock) /posedge clock) /當當clock clock 的上升沿到來時的上升沿到來時 ( (negedge clock) /negedge clock) /當當clock clock 的下降沿到來時的下降沿到來時 ( (posedge clk or negedge reset) posedge clk or negedge reset) / /當當clkclk的上升沿到來或的上升沿到來或resetreset信號的下降沿到來信號的下降沿到來module mux4_1(out,in0,in1,in2,in3,sel);output out

5、;input in0,in1,in2,in3;input1:0 sel; reg out;always (in0 or in1 or in2 or in3 or sel) /敏感信號列表敏感信號列表case(sel) 2b00: out=in0; 2b01: out=in1; 2b10: out=in2; 2b11: out=in3; default: out=2bx;endcaseendmodule4選選1數(shù)據(jù)選擇器數(shù)據(jù)選擇器o 對于時序電路,事件通常是由時鐘邊沿觸發(fā)的,為表達邊對于時序電路,事件通常是由時鐘邊沿觸發(fā)的,為表達邊沿這個概念,沿這個概念,Verilog提供了提供了posedge

6、和和negedge關(guān)鍵字來描關(guān)鍵字來描述。比如:述。比如:o 【例】同步置數(shù)、同步清零的計數(shù)器【例】同步置數(shù)、同步清零的計數(shù)器module count(out,data,load,reset,clk);output7:0 out; input7:0 data;input load,clk,reset; reg7:0 out;always (posedge clk) /clk上升沿觸發(fā)上升沿觸發(fā) begin if(!reset) out=8h00; /同步清同步清0,低電平有效,低電平有效 else if(load) out=data; /同步預置同步預置 else out=out+1; /計數(shù)

7、計數(shù) endendmoduleo 塊語句是由塊標志符塊語句是由塊標志符begin-end或或fork-join界定的一組語句,界定的一組語句,當塊語句只包含一條語句時,塊標志符可以缺省。當塊語句只包含一條語句時,塊標志符可以缺省。o begin-end串行塊中的語句按串行方式順序執(zhí)行。比如:串行塊中的語句按串行方式順序執(zhí)行。比如:beginregb=rega;regc=regb;endo 由于由于begin-end塊內(nèi)的語句順序執(zhí)行,在最后,將塊內(nèi)的語句順序執(zhí)行,在最后,將regb、regc的值都更新為的值都更新為rega的值,該的值,該begin-end塊執(zhí)行完后,塊執(zhí)行完后,regb、re

8、gc的值是相同的。的值是相同的。assign為持續(xù)賦值語句,主要用于對為持續(xù)賦值語句,主要用于對wire型變量的賦值。型變量的賦值。比如:比如:assignc=a&b;在上面的賦值中,在上面的賦值中,a、b、c三個變量皆為三個變量皆為wire型變量,型變量,a和和b信號的任何變化,都將隨時反映到信號的任何變化,都將隨時反映到c上來。上來。o過程賦值語句多用于對過程賦值語句多用于對reg型變量進行賦值。型變量進行賦值。(1)非阻塞()非阻塞(non_blocking)賦值方式賦值方式賦值符號為賦值符號為“=”,如:如:b=a;非阻塞賦值在整個過程塊結(jié)束時才完成賦值操作,即非阻塞賦值在整個

9、過程塊結(jié)束時才完成賦值操作,即b的的值并不是立刻就改變的。值并不是立刻就改變的。(2)阻塞()阻塞(blocking)賦值方式賦值方式賦值符號為賦值符號為“=”,如:如:b=a;阻塞賦值在該語句結(jié)束時就立即完成賦值操作,即阻塞賦值在該語句結(jié)束時就立即完成賦值操作,即b的值的值在該條語句結(jié)束后立刻改變。如果在一個塊語句中,有多條在該條語句結(jié)束后立刻改變。如果在一個塊語句中,有多條阻塞賦值語句,那么在前面的賦值語句沒有完成之前,后面阻塞賦值語句,那么在前面的賦值語句沒有完成之前,后面的語句就不能被執(zhí)行,仿佛被阻塞了(的語句就不能被執(zhí)行,仿佛被阻塞了(blocking)一樣,因一樣,因此稱為阻塞賦值

10、方式。此稱為阻塞賦值方式。非阻塞賦值非阻塞賦值module non_block(c,b,a,clk);output c,b; input clk,a;reg c,b;always (posedge clk) begin b=a; c=b; endendmodule阻塞賦值阻塞賦值module block(c,b,a,clk);output c,b;input clk,a;reg c,b;always (posedge clk) begin b=a; c=b; endendmodule非阻塞賦值仿真波形圖非阻塞賦值仿真波形圖 阻塞賦值仿真波形圖阻塞賦值仿真波形圖 非阻塞賦值綜合結(jié)果非阻塞賦值綜合

11、結(jié)果阻塞賦值綜合結(jié)果阻塞賦值綜合結(jié)果o( if-else語句)語句)o if-else語句使用方法有以下語句使用方法有以下3種:種:(1)if(表達式)表達式) 語句語句1;(2)if(表達式)表達式) 語句語句1; else 語句語句2;(3)if(表達式表達式1) 語句語句1; else if(表達式表達式2) 語句語句2; else if(表達式表達式3) 語句語句3; else if(表達式表達式n) 語句語句n; else 語句語句n+1;o case語句的使用格式如下。語句的使用格式如下。 case (敏感表達式)敏感表達式) 值值1: 語句語句1;/case分支項分支項 值值2:

12、 語句語句2; 值值n: 語句語句n; default:語句語句n+1; endcasemodule decode4_7(decodeout,indec);output6:0 decodeout;input3:0 indec; reg6:0 decodeout;always (indec) begin case(indec) /用用case語句進行譯碼語句進行譯碼 4d0:decodeout=7b1111110; 4d1:decodeout=7b0110000; 4d2:decodeout=7b1101101; 4d3:decodeout=7b1111001; 4d4:decodeout=7b

13、0110011; 4d5:decodeout=7b1011011; 4d6:decodeout=7b1011111; 4d7:decodeout=7b1110000; 4d8:decodeout=7b1111111; 4d9:decodeout=7b1111011; default: decodeout=7bx; endcase endendmoduleo repeat loopinitialbeginfor(i=0;i4;i=i+1)out=out+1;endinitialbeginrepeat(5)out=out+1;endinitialbegini=0;while(i0)i=i+1;en

14、d for loop while loop在在Verilog中存在四種類型的循環(huán)語句,用來控制語句的執(zhí)行次數(shù)。這四中存在四種類型的循環(huán)語句,用來控制語句的執(zhí)行次數(shù)。這四種語句分別為種語句分別為:(1)forever:連續(xù)地執(zhí)行語句;多用在連續(xù)地執(zhí)行語句;多用在“initial”塊中,以生成時鐘等周塊中,以生成時鐘等周期性波形。期性波形。(2)repeat:連續(xù)執(zhí)行一條語句連續(xù)執(zhí)行一條語句n次。次。(3)while:執(zhí)行一條語句直到某個條件不滿足。執(zhí)行一條語句直到某個條件不滿足。(4)for:有條件的循環(huán)語句。有條件的循環(huán)語句。o for語句的使用格式如下(同語句的使用格式如下(同C語言):語言

15、):for(表達式表達式1;表達式;表達式2;表達式;表達式3)語句;)語句;即:即:for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值)執(zhí)行語句;環(huán)變量增值)執(zhí)行語句;module voter7(pass,vote);output pass;input6:0 vote;reg2:0 sum;integer i;reg pass;always (vote) begin sum=0;for(i=0;i=6;i=i+1)/for語句語句if(votei) sum=sum+1;if(sum2) pass=1; /超過超過4人贊成,則人贊成,則通過通過else pass

16、=0; endendmoduleo repeat語句的使用格式為:語句的使用格式為:repeat(循環(huán)次數(shù)表達式)循環(huán)次數(shù)表達式) 語句;語句;或或repeat(循環(huán)次數(shù)表達式)循環(huán)次數(shù)表達式) begin endmodule mult_repeat(outcome, a, b);parameter size=8; inputsize:1 a,b;output2*size:1 outcome;reg2*size:1 temp_a,outcome;regsize:1 temp_b;always (a or b)begin outcome=0; temp_a=a; temp_b=b;repeat(

17、size) /repeat語句,語句,size為循環(huán)次數(shù)為循環(huán)次數(shù)beginif(temp_b1) /如果如果temp_b的最低位為的最低位為1,就執(zhí)行下面的加法,就執(zhí)行下面的加法outcome=outcome +temp_a;temp_a=temp_a1; /操作數(shù)操作數(shù)b右移一位右移一位end endendmoduleo Verilog允許在程序中使用特殊的編譯向?qū)г试S在程序中使用特殊的編譯向?qū)В–ompilerDirectives)語句,在編譯時,通常先語句,在編譯時,通常先對這些向?qū)дZ句進行對這些向?qū)дZ句進行“預處理預處理”,然后再將預處,然后再將預處理的結(jié)果和源程序一起進行編譯。理的

18、結(jié)果和源程序一起進行編譯。o 向?qū)дZ句以符號向?qū)дZ句以符號“”開頭,以區(qū)別于其它語句。開頭,以區(qū)別于其它語句。Verilog提供了十幾條編譯向?qū)дZ句,如:提供了十幾條編譯向?qū)дZ句,如:define、ifdef、else、endif、restall等。比較常用的有等。比較常用的有define,include和和ifdef、else、endif等。等。 o define語句用于將一個簡單的名字或標志符(或稱語句用于將一個簡單的名字或標志符(或稱為宏名)來代替一個復雜的名字或字符串,其使為宏名)來代替一個復雜的名字或字符串,其使用格式為:用格式為:define宏名(標志符)宏名(標志符)字符串字符串

19、 如:如: define sum ina+inb+inc+inddefine sum ina+inb+inc+ind 在上面的語句中,用簡單的宏名在上面的語句中,用簡單的宏名sum來代替了一個來代替了一個復雜的表達式復雜的表達式ina+inb+inc+ind,采用了這樣的定采用了這樣的定義形式后,在后面的程序中,就可以直接用義形式后,在后面的程序中,就可以直接用sum來來代表表達式代表表達式ina+inb+inc+ind了。了。o include是文件包含語句,它可將一個文件全部包是文件包含語句,它可將一個文件全部包含到另一個文件中。其格式為:含到另一個文件中。其格式為:include“文件名

20、文件名”o 使用使用include語句時應注意以下幾點:語句時應注意以下幾點:(1)一個)一個include語句只能指定一個被包含的文件。語句只能指定一個被包含的文件。(2)include語句可以出現(xiàn)在源程序的任何地方。被語句可以出現(xiàn)在源程序的任何地方。被包含的文件若與包含文件不在同一個子目錄下,必包含的文件若與包含文件不在同一個子目錄下,必須指明其路徑名。須指明其路徑名。(3)文件包含允許多重包含,比如文件)文件包含允許多重包含,比如文件1包含文件包含文件2,文件文件2又包含文件又包含文件3等。等。o 任務(任務(task)o 任務定義格式:任務定義格式: task ; /注意無端口列表注意

21、無端口列表 端口及數(shù)據(jù)類型聲明語句;端口及數(shù)據(jù)類型聲明語句; 其它語句;其它語句; endtasko 任務調(diào)用的格式為:任務調(diào)用的格式為: (端口(端口1,端口,端口2,);o 需要注意的是:任務調(diào)用時和定義時的端口變量應是一需要注意的是:任務調(diào)用時和定義時的端口變量應是一一對應的。一對應的。o 任務的定義與調(diào)用須在一個任務的定義與調(diào)用須在一個module模塊內(nèi)。模塊內(nèi)。o 定義任務時,沒有端口名列表,但需要緊接著進行定義任務時,沒有端口名列表,但需要緊接著進行輸入輸出端口和數(shù)據(jù)類型的說明。輸入輸出端口和數(shù)據(jù)類型的說明。o 當任務被調(diào)用時,任務被激活。任務的調(diào)用與模塊當任務被調(diào)用時,任務被激活

22、。任務的調(diào)用與模塊調(diào)用一樣通過任務名調(diào)用實現(xiàn),調(diào)用時,需列出端調(diào)用一樣通過任務名調(diào)用實現(xiàn),調(diào)用時,需列出端口名列表,端口名的排序和類型必須與任務定義中口名列表,端口名的排序和類型必須與任務定義中的相一致。的相一致。o 一個任務可以調(diào)用別的任務和函數(shù),可以調(diào)用的任一個任務可以調(diào)用別的任務和函數(shù),可以調(diào)用的任務和函數(shù)個數(shù)不限。務和函數(shù)個數(shù)不限。 o 函數(shù)的目的是返回一個值,以用于表達式計算函數(shù)的目的是返回一個值,以用于表達式計算o 函數(shù)的定義格式:函數(shù)的定義格式: function 函數(shù)名;函數(shù)名; 端口聲明;端口聲明; 局部變量定義;局部變量定義; 其它語句;其它語句;endfunctiono

23、是一個可選項,如果是一個可選項,如果缺省,則返回值為缺省,則返回值為1位寄存器類型的數(shù)據(jù)。位寄存器類型的數(shù)據(jù)。function7:0 get0;input7:0 x; reg7:0 count;integer i; begin count=0; for (i=0;i=7;i=i+1) if(xi=1b0) count=count+1; get0=count; endendfunction 上面的上面的get0函數(shù)循環(huán)核對輸入數(shù)據(jù)函數(shù)循環(huán)核對輸入數(shù)據(jù)x的每一位,計算出的每一位,計算出x中中0的個數(shù),并返回一個適當?shù)闹?。的個數(shù),并返回一個適當?shù)闹?。o 函數(shù)的定義與調(diào)用須在一個函數(shù)的定義與調(diào)用須在一

24、個module模塊內(nèi)。模塊內(nèi)。o 函數(shù)只允許有輸入變量且必須至少有一個輸入變量,函數(shù)只允許有輸入變量且必須至少有一個輸入變量,輸出變量由函數(shù)名本身擔任,在定義函數(shù)時,需對函數(shù)輸出變量由函數(shù)名本身擔任,在定義函數(shù)時,需對函數(shù)名說明其類型和位寬。名說明其類型和位寬。o 定義函數(shù)時,沒有端口名列表,但調(diào)用函數(shù)時,需列定義函數(shù)時,沒有端口名列表,但調(diào)用函數(shù)時,需列出端口名列表,端口名的排序和類型必須與定義時的相出端口名列表,端口名的排序和類型必須與定義時的相一致。這一點與任務相同一致。這一點與任務相同o 函數(shù)可以出現(xiàn)在持續(xù)賦值函數(shù)可以出現(xiàn)在持續(xù)賦值assign的右端表達式中。的右端表達式中。o 函數(shù)不

25、能調(diào)用任務,而任務可以調(diào)用別的任務和函數(shù),函數(shù)不能調(diào)用任務,而任務可以調(diào)用別的任務和函數(shù),且調(diào)用任務和函數(shù)個數(shù)不受限制。且調(diào)用任務和函數(shù)個數(shù)不受限制。o 兩個或更多個兩個或更多個“always”過程塊、過程塊、“assign”持續(xù)賦值語句、實例元件調(diào)用持續(xù)賦值語句、實例元件調(diào)用等操作都是同時執(zhí)行的。等操作都是同時執(zhí)行的。o 在在“alwaysalways”模塊內(nèi)部,其語句如果是非模塊內(nèi)部,其語句如果是非阻塞賦值,也是并發(fā)執(zhí)行的;而如果是阻塞賦值,也是并發(fā)執(zhí)行的;而如果是阻塞賦值,則語句是按照指定的順序執(zhí)阻塞賦值,則語句是按照指定的順序執(zhí)行的,語句的書寫順序?qū)Τ绦虻膱?zhí)行結(jié)行的,語句的書寫順序?qū)Τ?/p>

26、序的執(zhí)行結(jié)果有著直接的影響。果有著直接的影響。順序執(zhí)行模塊順序執(zhí)行模塊1module serial1(q,a,clk);output q,a;input clk;reg q,a;always (posedge clk) begin q=q; a=q; endendmodule順序執(zhí)行模塊順序執(zhí)行模塊2module serial2(q,a,clk);output q,a;input clk;reg q,a;always(posedge clk) begin a=q; q=q; endendmodule順序執(zhí)行模塊順序執(zhí)行模塊1 1仿真波形圖仿真波形圖 順序執(zhí)行模塊順序執(zhí)行模塊2 2仿真波形圖仿真波形圖 順序執(zhí)行模塊順序執(zhí)行模塊1 1綜合結(jié)果綜合結(jié)果順序執(zhí)行模塊順序執(zhí)行模塊2 2綜合結(jié)果綜合結(jié)果6.1 阻塞賦值和非阻塞賦值有什么本質(zhì)的區(qū)別?阻塞賦值和非阻塞賦值有什么本質(zhì)的區(qū)別?6.2 用持續(xù)賦值語句描述一個用持續(xù)賦值語句描述一個4選選1數(shù)據(jù)選擇器。數(shù)據(jù)選擇器。6.3 用行為語句設計一個用行為語句設計一個8位計數(shù)器,每次在時鐘的位計數(shù)器,每次在時鐘的上升沿,計數(shù)器加上升沿,計數(shù)器加1,當計數(shù)器溢出時,自動從零,當計數(shù)器溢出時,自動從零開始重新計數(shù)。計數(shù)器有同步復位端。開始重新計數(shù)。計數(shù)器有同步復位端。6.4 設計一個設計一個4位移位寄存器。位移位寄存器。6.5 in

溫馨提示

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

評論

0/150

提交評論