Verilog語(yǔ)言快速入門(mén)課件_第1頁(yè)
Verilog語(yǔ)言快速入門(mén)課件_第2頁(yè)
Verilog語(yǔ)言快速入門(mén)課件_第3頁(yè)
Verilog語(yǔ)言快速入門(mén)課件_第4頁(yè)
Verilog語(yǔ)言快速入門(mén)課件_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1Verilog設(shè)計(jì)快速入門(mén) 2內(nèi)部信號(hào)聲明assign語(yǔ)句底層模塊或門(mén)原語(yǔ)調(diào)用(包括生成塊)Initial或always語(yǔ)句塊任務(wù)和函數(shù)定義module 模塊名 (端口列表);端口信號(hào)聲明;參數(shù)聲明;endmodulespecify 塊(路徑延遲)Verilog模塊結(jié)構(gòu)說(shuō)明:淺色部分用得較少;常用語(yǔ)句只有三種:assign語(yǔ)句always語(yǔ)句底層模塊調(diào)用語(yǔ)句三種語(yǔ)句順序無(wú)關(guān)除開(kāi)始的module模塊名和結(jié)束的endmodule必須寫(xiě)外,其他都是可選的。功能描述部分模塊說(shuō)明部分3Verilog模塊結(jié)構(gòu)例1:二選一數(shù)據(jù)選擇器的描述二選一數(shù)據(jù)選擇器的結(jié)構(gòu)之一二選一數(shù)據(jù)選擇器的符號(hào)設(shè)a、b、s波形已知

2、,可得y波形:4Verilog模塊結(jié)構(gòu)2選1多路選擇器的Verilog描述內(nèi)部信號(hào)聲明assign語(yǔ)句底層模塊或門(mén)原語(yǔ)調(diào)用always語(yǔ)句塊module 模塊名 (端口列表); 端口信號(hào)聲明; 參數(shù)聲明;endmoduleabsyMUX21a5Verilog程序結(jié)構(gòu)例2:邊沿D觸發(fā)器的Verilog描述內(nèi)部信號(hào)聲明assign語(yǔ)句底層模塊或門(mén)原語(yǔ)調(diào)用always語(yǔ)句塊module 模塊名 (端口列表); 端口信號(hào)聲明; 參數(shù)聲明;endmodule6Verilog模塊結(jié)構(gòu)1模塊說(shuō)明部分 module 模塊名 (端口列表); 端口信號(hào)聲明; 參數(shù)聲明;模塊名是指電路的名字,由用戶指定,最好與文件

3、名一致(特別是在Quartus II軟件中調(diào)試時(shí));端口列表是指電路的輸入/輸出信號(hào)名稱列表,信號(hào)名由用戶指定,各名稱間用逗號(hào)隔開(kāi);端口信號(hào)聲明是要說(shuō)明端口信號(hào)的輸入輸出屬性、信號(hào)的數(shù)據(jù)類(lèi)型,以及信號(hào)的位寬;輸入輸出屬性有input,output,inout三種,信號(hào)的數(shù)據(jù)類(lèi)型常用的有wire和reg兩種;信號(hào)的位寬用n1:n2表示;同一類(lèi)信號(hào)之間用逗號(hào)隔開(kāi);參數(shù)聲明要說(shuō)明參數(shù)的名稱和初值輸入輸出屬性 數(shù)據(jù)類(lèi)型 位寬 名稱 parameter 數(shù)據(jù)類(lèi)型 參數(shù)名 = 初值7例:module full_adder (A,B,CIN,S,COUT); input 3:0 A,B; input CIN

4、; output reg 3:0 S; output COUT;位寬如果不做說(shuō)明的話,默認(rèn)是1位;數(shù)據(jù)類(lèi)型不做說(shuō)明的話,默認(rèn)是wire型的。S位寬為4位,對(duì)應(yīng)信號(hào)為S3、S2、S1、S0根據(jù)模塊說(shuō)明部分,我們可以得出電路符號(hào)ABCINSfull_adderCOUT82. assign語(yǔ)句內(nèi)部信號(hào)聲明assign語(yǔ)句底層模塊或門(mén)原語(yǔ)調(diào)用always語(yǔ)句塊module 模塊名 (端口列表); 端口信號(hào)聲明;endmoduleassign語(yǔ)句稱作連續(xù)賦值語(yǔ)句assign 賦值目標(biāo) = 表達(dá)式例:特點(diǎn):之所以稱為連續(xù)賦值語(yǔ)句是指其總是處于激活狀態(tài),只要表達(dá)式中的操作數(shù)有變化,立即進(jìn)行計(jì)算和賦值。(與連

5、續(xù)賦值語(yǔ)句對(duì)應(yīng)的另一種語(yǔ)句稱為過(guò)程賦值語(yǔ)句)賦值目標(biāo)必須是wire型的,wire表示電路間的連線。ayAbyassign y=a;assign y=a&b;基本格式:92. assign語(yǔ)句例:assign M=B|C; assign Y=A&M; MM和Y都必須是wire型的102. assign語(yǔ)句Verilog具有豐富的表達(dá)式運(yùn)算功能,可用于assign語(yǔ)句詳見(jiàn)夏宇聞教材第6章,自學(xué)。(1) 算術(shù)型*乘法/除法+加法-減法%求余*求冪例:Y=5%2;Y=2*3;求余,結(jié)果為1求冪,結(jié)果為8說(shuō)明加減乘除、求冪的操作數(shù)可以是實(shí)數(shù)也可以是整數(shù),求余運(yùn)算的操作數(shù)只能是整數(shù)。求余運(yùn)算結(jié)果取第一個(gè)操

6、作數(shù)的符號(hào);(2) 邏輯型!邏輯非&邏輯與|邏輯或例:Y=! (32) Y=(26);Y=(26);Y=(2大于=大于等于2) Y=(3=2);Y=(3=2);Y=(3右移算術(shù)右移 1;Y= 4sb1001 1; 結(jié)果為0100結(jié)果為1100說(shuō)明移位運(yùn)算的操作數(shù)是1位或多位二進(jìn)制數(shù);向左或向右移n位;只有對(duì)有符號(hào)數(shù)的算術(shù)右移自動(dòng)補(bǔ)符號(hào)位;其他移位均自動(dòng)補(bǔ)0。操作數(shù) 移位符 n;格式(8) 拼接復(fù)制運(yùn)算符拼接復(fù)制拼接例:Y= 4b1001, 2b11;Y= 42b01; Y= 42b01, 2b11; 結(jié)果為100111結(jié)果為01010101說(shuō)明將多個(gè)操作數(shù)拼接起來(lái);將操作數(shù)復(fù)制n遍并拼接起來(lái);

7、可以組合使用。操作數(shù)1, 操作數(shù)2, 格式n操作數(shù)1, 操作數(shù)2, 格式(9) 條件運(yùn)算符? :用于條件賦值例:Y= a ? b : c;Y= s1 ? (s0 ? d3 : d2) : (s0? d1 : d0);如果a=1,則y=b;如果a=0,則y=c。如果a=x,則y=x。說(shuō)明根據(jù)表達(dá)式1的值,決定運(yùn)算結(jié)果;如果表達(dá)式1值為1,則結(jié)果等于表達(dá)式2;如果表達(dá)式1值為0,則結(jié)果等于表達(dá)式3;如果表達(dá)式1值為x,則結(jié)果為x;可以嵌套。表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3格式一203. always語(yǔ)句塊內(nèi)部信號(hào)聲明assign語(yǔ)句底層模塊或門(mén)原語(yǔ)調(diào)用always語(yǔ)句塊module 模塊名 (

8、端口列表); 端口信號(hào)聲明;endmodulealways語(yǔ)句塊又稱過(guò)程塊基本格式:always (敏感信號(hào)條件表) 各類(lèi)順序語(yǔ)句; 特點(diǎn):always語(yǔ)句本身不是單一的有意義的一條語(yǔ)句,而是和下面的語(yǔ)句一起構(gòu)成一個(gè)語(yǔ)句塊,稱之為過(guò)程塊;過(guò)程塊中的賦值語(yǔ)句稱過(guò)程賦值語(yǔ)句;該語(yǔ)句塊不是總處于激活狀態(tài),當(dāng)滿足激活條件時(shí)才能被執(zhí)行,否則被掛起,掛起時(shí)即使操作數(shù)有變化,也不執(zhí)行賦值,賦值目標(biāo)值保持不變;賦值目標(biāo)必須是reg型的。例: always (posedge CLK) Q=D;3. always語(yǔ)句塊激活條件由敏感信號(hào)條件表決定,當(dāng)敏感條件滿足時(shí),過(guò)程塊被激活。敏感條件有兩種,一種是邊沿敏感,一

9、種是電平敏感。電平敏感:(posedge 信號(hào)名)邊沿敏感:(negedge 信號(hào)名)(信號(hào)名列表)信號(hào)上升沿到來(lái)信號(hào)下降沿到來(lái)例:(posedge clk)例:(negedge clk)信號(hào)列表中的任一個(gè)信號(hào)有變化例:(a,b,c)當(dāng)a,b,c中有一個(gè)發(fā)生變化說(shuō)明: 逗號(hào)可以換成or例:(a or b or c)3. always語(yǔ)句塊例:always (posedge CLK) Q=D;當(dāng)CLK上升沿到來(lái)時(shí),激活該語(yǔ)句塊,將D的值賦給Q;否則,該語(yǔ)句塊掛起,即使D有變化,Q的值也保持不變,直到下一次賦值。例:always (D) Q=D;當(dāng)D有變化時(shí)(不管是由1變0還是由0變1),激活該語(yǔ)

10、句塊,將D的值賦給Q;否則,該語(yǔ)句塊掛起,Q的值保持不變,直到下一次賦值。DQDCLKQDQ3. always語(yǔ)句塊說(shuō)明:過(guò)程塊中的賦值目標(biāo)必須是reg型的。由于always語(yǔ)句可以描述邊沿變化,在設(shè)計(jì)時(shí)序電路中得到廣泛應(yīng)用。always語(yǔ)句中還可以使用if、case、for循環(huán)等語(yǔ)句,其功能更加強(qiáng)大。例:always (posedge CLK) Q=D;例:always (D) Q=D;必須是reg型的3. always語(yǔ)句塊253. always語(yǔ)句塊assign語(yǔ)句和always語(yǔ)句的主要區(qū)別:連續(xù)賦值語(yǔ)句總是處于激活狀態(tài),只要操作數(shù)有變化馬上進(jìn)行計(jì)算和賦值;過(guò)程賦值語(yǔ)句只有當(dāng)激活該過(guò)程

11、時(shí),才會(huì)進(jìn)行計(jì)算和賦值,如果該過(guò)程不被激活,即使操作數(shù)發(fā)生變化也不會(huì)計(jì)算和賦值。verilog規(guī)定assign中的賦值目標(biāo)必須是wire型的,而always語(yǔ)句中的賦值目標(biāo)必須是reg型的。assign Q=Dalways (posedge clk) Q=D;例:只要D發(fā)生變化,馬上進(jìn)行計(jì)算和賦值; Q必須是wire型。只有當(dāng)clk上升沿到來(lái)時(shí),才能激活該塊語(yǔ)句,才能進(jìn)行計(jì)算和賦值;否則,即使D發(fā)生變化也不會(huì)計(jì)算和賦值。在未被激活時(shí),Q的值保持不變。Q必須是reg型。263. always語(yǔ)句塊always語(yǔ)句塊中除了可以使用表達(dá)式賦值以外,還可以使用if,case等行為描述語(yǔ)句,還能夠描述邊

12、沿變化,因此其功能比assign語(yǔ)句更強(qiáng)大(assign語(yǔ)句不能使用if等語(yǔ)句,也不能描述邊沿變化)。例:module DFF2 (CLK,D,Q,RST,EN)input CLK,D,RST,EN;output Q;reg Q;always (posedge CLK or negedge RST)begin if (!RST) Q=0; else if (EN) Q=DendendmoduleDENQDCLKQRST273. always語(yǔ)句塊always語(yǔ)句塊中如果有多條賦值語(yǔ)句必須將其用begin end包括起來(lái),assign語(yǔ)句中沒(méi)有begin end。例:module adder (

13、a,b,cin,s,cout) input a,b,cin; output s,cout; reg s,cout;always (a,b,cin)begin s=abcin; cout=(a&b)|(a&cin)|(b&cin);endendmodule思考問(wèn)題:在仿真時(shí),begin和end之間的語(yǔ)句執(zhí)行順序如何?請(qǐng)大家畫(huà)出該模塊的端口符號(hào)圖和電路圖3. always語(yǔ)句塊begin end之間的賦值語(yǔ)句有阻塞賦值和非阻塞賦值之分。阻塞賦值:語(yǔ)句順序執(zhí)行,前面的執(zhí)行完才能執(zhí)行后面;賦值符號(hào):=非阻塞賦值:所有語(yǔ)句并行執(zhí)行。賦值符號(hào):=賦值目標(biāo)1=表達(dá)式1;賦值目標(biāo)2=表達(dá)式2;賦值目標(biāo)1=表達(dá)

14、式1;賦值目標(biāo)2=表達(dá)式2;賦值語(yǔ)句1會(huì)阻塞賦值語(yǔ)句2 ,即只有當(dāng)賦值語(yǔ)句1執(zhí)行完才能執(zhí)行賦值語(yǔ)句2。賦值語(yǔ)句1不會(huì)阻塞賦值語(yǔ)句2 ,賦值語(yǔ)句1和賦值語(yǔ)句2并行執(zhí)行。3. always語(yǔ)句塊舉例比較:阻塞賦值begin m=a*b; y=m;end非阻塞賦值begin m=a*b; y=m;end當(dāng)m=a*b 執(zhí)行完才能執(zhí)行y=m 。當(dāng)m賦值完成后,才能執(zhí)行y的賦值,y得到的是m的新值。m和y的賦值并行執(zhí)行,y得到的是m的舊值。m=a*b 和y=m并行執(zhí)行 。阻塞賦值的實(shí)質(zhì):右邊表達(dá)式的計(jì)算和對(duì)左邊寄存器變量的賦值是一個(gè)統(tǒng)一的原子操作中的兩個(gè)動(dòng)作,這兩個(gè)動(dòng)作之間不能再插入其他任何動(dòng)作。非阻塞賦

15、值的實(shí)質(zhì):首先按順序計(jì)算右邊表達(dá)式的值,但是并不馬上賦值,而是要等到過(guò)程結(jié)束時(shí)再按順序賦值。賦值目標(biāo)1=表達(dá)式1;賦值目標(biāo)2=表達(dá)式2;賦值目標(biāo)1=表達(dá)式1;賦值目標(biāo)2=表達(dá)式2; 阻塞賦值【例8-6】always (A,B)beginM1=A;M2=B&M1;Q=M1|M2;end設(shè)A、B同時(shí)由0變1激活前:M1=0,M2=0,Q=0激活后:先計(jì)算A=1,馬上賦值給M1再計(jì)算B&M1=1,馬上賦值給M2再計(jì)算M1|M2=1,馬上賦值給Q 非阻塞賦值【例8-7】always (A,B)beginM1=A;M2=B&M1;Q=M1|M2;end先計(jì)算A=1,(等待,不賦值)再計(jì)算B&M1=0,(

16、等待,不賦值)再計(jì)算M1|M2=0,(等待,不賦值)過(guò)程結(jié)束先賦值給M1=1再賦值給M2=0再賦值給Q=0舉例比較:3.2多路選擇器的Verilog描述應(yīng)用:設(shè)計(jì)組合電路時(shí)常用阻塞賦值;設(shè)計(jì)時(shí)序電路時(shí)常用非阻塞賦值;但不是絕對(duì)的。不建議在一個(gè)always塊中混合使用阻塞賦值和非阻塞賦值例:阻塞賦值實(shí)現(xiàn)的組合電路module MY (A,B,C,Y) input A,B,C; output Y; reg Y; reg M;always (A,B,C)begin M=B|C; Y=A&M; endendmoduleM32例:非阻塞賦值實(shí)現(xiàn)的移位寄存器module DDF3(CLK,D,Q)outp

17、ut Q;input CLK,D;reg a,b,Q;always (posedge CLK)begina=D;b=a;Q=b;end333. always語(yǔ)句塊綜合舉例:4位二進(jìn)制加法計(jì)數(shù)器module CNT4 (CLK,Q); input CLK; output 3:0 Q; reg 3:0 Q1;always (posedge CLK)begin Q1=Q1+1;endassign Q=Q1;endmodule此程序中有always和assign兩條語(yǔ)句,他們之間是并行的;此程序中有一個(gè)內(nèi)部變量Q1,使用時(shí)要進(jìn)行聲明;內(nèi)部信號(hào)聲明格式:數(shù)據(jù)類(lèi)型 位寬 信號(hào)名稱 元素個(gè)數(shù)344. 底層模

18、塊和門(mén)原語(yǔ)調(diào)用例:圖示電路的描述daclkqCLKCLK內(nèi)部信號(hào)聲明assign語(yǔ)句底層模塊或門(mén)原語(yǔ)調(diào)用always語(yǔ)句塊module 模塊名 (端口列表); 端口信號(hào)聲明;endmodule該電路是由兩個(gè)D觸發(fā)器和一個(gè)或門(mén)構(gòu)成的,設(shè)計(jì)思路之一是先設(shè)計(jì)底層電路D觸發(fā)器,然后再設(shè)計(jì)頂層電路,在頂層電路中可調(diào)用底層模塊。一、底層模塊調(diào)用354. 底層模塊和門(mén)原語(yǔ)調(diào)用底層模塊描述module DFF(CLK,D,Q) output reg Q; input CLK,D;always (posedge CLK) Q=D;endmoduleQCLKCLKDDFF頂層模塊描述為了調(diào)用底層模塊,需要加兩個(gè)內(nèi)

19、部變量d1和q1;并給兩次調(diào)用的模塊進(jìn)行命名;調(diào)用時(shí)例化名不能省略。daclkqCLKCLKq1d1DFFDFFdff1dff2module examp (clk,d,a,q) output q; input clk,d,a; wire d1; wire q1;DFF dff1(.CLK(clk),.D(d1),.Q(q1);DFF dff2(q1,d,q);or (d1,a,q);endmodule底層模塊調(diào)用格式:底層模塊名 例化名 (端口映射);364. 底層模塊和門(mén)原語(yǔ)調(diào)用端口映射有兩種方法:端口名關(guān)聯(lián)法(命名法)位置關(guān)聯(lián)法(順序法)命名法格式:(.底層端口名1(外接信號(hào)名1),.底層

20、端口名2(外接信號(hào)名2),)順序法格式:(外接信號(hào)名1,外接信號(hào)名2,)必須嚴(yán)格按照底層模塊的端口信號(hào)列表順序書(shū)寫(xiě)因?yàn)橛忻謱?duì)應(yīng),不必按底層模塊的端口信號(hào)列表順序daclkqCLKCLKq1d1DFFDFFdff1dff2module DFF(CLK,D,Q)QCLKCLKDDFFDFF dff1(.CLK(clk),.D(d1),.Q(q1);DFF dff2(q1,d,q);4. 底層模塊和門(mén)原語(yǔ)調(diào)用二、門(mén)原語(yǔ)調(diào)用門(mén)原語(yǔ)名 實(shí)例名 (端口連接)門(mén)原語(yǔ)調(diào)用格式:例:and (out, in1, in2); 其中實(shí)例名可省略(和模塊調(diào)用不同),端口連接只能采用順序法,輸出在前,輸入在后。out

21、in1in1and (與)or(或)xor(異或)nand(與非)nor(或非)xnor(同或)端口連接中第一個(gè)是輸出,其余是輸入,輸入個(gè)數(shù)不限。Verilog語(yǔ)言提供已經(jīng)設(shè)計(jì)好的門(mén),稱為門(mén)原語(yǔ)(primitive,共12個(gè)),這些門(mén)可直接調(diào)用,不用再對(duì)其進(jìn)行功能描述。與門(mén)等6個(gè)384. 底層模塊調(diào)用端口列表中前面是輸出,最后一個(gè)是輸入,輸出個(gè)數(shù)不限。not (非門(mén))buf(緩沖器)not (OUT1, IN); INOUT1INOUT1OUT2buf b1_2out(OUT1, OUT2, IN);例:非門(mén)和緩沖器4. 底層模塊調(diào)用三態(tài)門(mén)bufif1(控制端1有效緩沖器)notif1(控制端

22、1有效非門(mén))bufif0 (控制端0有效緩沖器)notif0(控制端0有效非門(mén))例:bufif1 b1 (out, in, ctrl);bufif0 b0 (out, in, ctrl);notif1 n1 (out, in, ctrl);notif0 n0 (out, in, ctrl);端口列表中前面是輸出,中間是輸入,最后是使能端,輸出個(gè)數(shù)不限。outoutoutoutininininctrlctrlctrlctrlbufif1三態(tài)門(mén)bufif0三態(tài)門(mén)notif1三態(tài)門(mén)notif0三態(tài)門(mén)5. Verilog中的數(shù)據(jù)類(lèi)型Verilog中的數(shù)據(jù)類(lèi)型分為兩大類(lèi)線網(wǎng)類(lèi)(net類(lèi))變量類(lèi)(vari

23、able類(lèi))因連續(xù)賦值語(yǔ)句和過(guò)程賦值語(yǔ)句的激活特點(diǎn)不同,故賦值目標(biāo)特點(diǎn)也不同,前者不需要保存,后者需要保存,因此規(guī)定兩種數(shù)據(jù)類(lèi)型,net型用于連續(xù)賦值的賦值目標(biāo)或門(mén)原語(yǔ)的輸出,且仿真時(shí)不需要分配內(nèi)存空間,variable用于過(guò)程賦值的賦值目標(biāo),且仿真時(shí)需要分配內(nèi)存空間。net類(lèi)中的數(shù)據(jù)類(lèi)型wire(線型)tri(三態(tài))tri0(下拉電阻)supply0(地)wand(線與)triand(三態(tài)與)tri1(上拉電阻)supply1(電源)wor(線或)trior(三態(tài)或)trireg(電容性線網(wǎng))reg(寄存器型)integer(整型)time(時(shí)間型)real(實(shí)型)realtime(實(shí)時(shí)間型

24、)variable類(lèi)中的數(shù)據(jù)類(lèi)型最常用的是wire最常用的是reg將一個(gè)信號(hào)定義成net型還是varible型,由以下兩方面決定使用何種賦值語(yǔ)句對(duì)該信號(hào)進(jìn)行賦值,如果是連續(xù)賦值或門(mén)原語(yǔ)賦值或例化語(yǔ)句賦值,則定義成net型;如果是過(guò)程賦值則定義成variable型。對(duì)于端口信號(hào)來(lái)說(shuō),input信號(hào)和inout信號(hào)必須定義成net型的;output信號(hào)可以是net型的也可以是variable型的,決定于如何對(duì)其賦值(同a)。netnetvariable 或 net例:abcde該圖中d和e的賦值有三種方法(1) 使用連續(xù)賦值語(yǔ)句assign d=a&b;assign e=d|c;此時(shí),d和e必須定

25、義為net型的。(2) 使用門(mén)原語(yǔ)賦值and (d,a,b);or (e,d,c);此時(shí),d和e也必須定義為net型的。(3) 使用過(guò)程賦值語(yǔ)句always (a,b,d,c)begin d=a&b; e=d|c;end此時(shí),d和e必須定義為variable型的。四個(gè)端口信號(hào)中A、B必須是net型的;SO、CO可以是net型的也可以是variable型的,決定于如何對(duì)其賦值例:h_adder例:c決定于如何對(duì)其賦值;d如果是端口信號(hào),則必須是net型的;如果來(lái)自其它驅(qū)動(dòng)源則決定于如何對(duì)其賦值。e、f、g、h必須是net型的;abcdefghh_adderh_adderh_adder U1(a,

26、b,c,d);h_adder U2(c,d,e,f);46例:2b00 5d8 無(wú)符號(hào)數(shù)的表示方法:有符號(hào)數(shù)的表示方法:例:8sb10111011 8b10111011 注意有符號(hào)數(shù)是按照補(bǔ)碼表示的,即第一位是符號(hào)位。6. Verilog中數(shù)字的表示格式比較:(00)2(01000)2(-69)10(187)10477. 邏輯值1:邏輯1,高電平,數(shù)字10:邏輯0,低電平,數(shù)字0 x:不確定z:高阻態(tài)Verilog語(yǔ)言中的邏輯值有四種488. if語(yǔ)句4種類(lèi)型的if語(yǔ)句if () 語(yǔ)句 ;if () 真語(yǔ)句 ; else 假語(yǔ)句 ;if () 語(yǔ)句1 ;else if ()語(yǔ)句2 ;else

27、if ()語(yǔ)句3 ;計(jì)算條件表達(dá)式,如果結(jié)果為真(1或非0值),則執(zhí)行真語(yǔ)句,如果條件為假(0或x),則執(zhí)行假語(yǔ)句。if ()語(yǔ)句1 ;else if ()語(yǔ)句2 ;else if ()語(yǔ)句3 ;else 默認(rèn)語(yǔ)句 ;顯然、種可比、種描述更復(fù)雜的條件關(guān)系??梢允且粭l語(yǔ)句,也可以是一組語(yǔ)句498. if語(yǔ)句例:計(jì)數(shù)器always (posedge CLK) if (!RST) Q=0; else Q=Q+1; 8. if語(yǔ)句加elsealways (a,b)if (sel) Q=a;else Q=b;always (a,b)Q=a;if (sel) Q=b;使條件完整的兩種方法:2.設(shè)初值在用i

28、f語(yǔ)句設(shè)計(jì)“組合電路”時(shí)要注意,如果條件不完整,會(huì)綜合出寄存器。518. if語(yǔ)句計(jì)算表達(dá)式可以是任意形式的表達(dá)式;條件表達(dá)式的結(jié)果只有0和1兩種,如果計(jì)算表達(dá)式的值為0,則條件表達(dá)式的值為0,否則為1。例如:設(shè)a=1000, b=0110條件表達(dá)式計(jì)算表達(dá)式結(jié)果if (a=b)00if (ab)11if (a)10001if (a*b)11_0000(前兩位被截掉)0if (a|b)11101if (a&b)00000 (計(jì)算表達(dá)式)條件表達(dá)式格式:529. case語(yǔ)句case (表達(dá)式)取值1: 語(yǔ)句1;取值2: 語(yǔ)句2;取值3: 語(yǔ)句3;.default: 默認(rèn)語(yǔ)句;endcaseca

29、se (表達(dá)式)取值1: 語(yǔ)句1;取值2:語(yǔ)句2;取值3:語(yǔ)句3;.endcase如果表達(dá)式的值=取值1,則執(zhí)行語(yǔ)句1;如果表達(dá)式的值=取值2,則執(zhí)行語(yǔ)句2;如果表達(dá)式的值=取值3,則執(zhí)行語(yǔ)句3;如果表達(dá)式的值和上述取值都不相等,則執(zhí)行默認(rèn)語(yǔ)句。default語(yǔ)句可以不帶。功能:格式539 case語(yǔ)句例:module MUX41 (a,b,c,d,s1,s0,y);input a,b,c,d,s1,s0;output reg y;/reg y;always (a,b,c,d,s1,s0)begincase (s1,s0) 2b00 : y=a; 2b01 : y=b; 2b10 : y=c;

30、 2b11 : y=d; default : y=0;endcaseendendmodule如果條件描述不完整,則會(huì)綜合出寄存器;在設(shè)計(jì)組合電路時(shí)要注意使條件描述完整。加default語(yǔ)句可以使條件完整。如果條件描述完整也可以不加default語(yǔ)句。5410. Verilog語(yǔ)言的描述風(fēng)格結(jié)構(gòu)化描述(也稱門(mén)級(jí)描述)(全部用門(mén)原語(yǔ)和底層模塊調(diào)用) 數(shù)據(jù)流級(jí)描述(全部用assign語(yǔ)句)行為級(jí)描述(全部用always語(yǔ)句配合if、case語(yǔ)句等)三種描述方式RTL級(jí)描述(數(shù)據(jù)流級(jí)+行為級(jí),可綜合)有些資料中提到另外一種描述方式:RTL級(jí)描述方式實(shí)際描述是三種混合的舉例:用門(mén)級(jí)描述、數(shù)據(jù)流描述、行為描述分別設(shè)計(jì)數(shù)據(jù)選擇器55例 多路選擇器的Verilog 門(mén)級(jí)描述module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);output out;input i0, i1, i2, i3;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論