第二章簡(jiǎn)單的Verilog模塊_第1頁(yè)
第二章簡(jiǎn)單的Verilog模塊_第2頁(yè)
第二章簡(jiǎn)單的Verilog模塊_第3頁(yè)
第二章簡(jiǎn)單的Verilog模塊_第4頁(yè)
第二章簡(jiǎn)單的Verilog模塊_第5頁(yè)
已閱讀5頁(yè),還剩50頁(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、主要內(nèi)容 Verilog 建模概述模塊的基本概念模塊的基本概念 簡(jiǎn)單示例簡(jiǎn)單示例 模塊特點(diǎn)模塊特點(diǎn) 模塊結(jié)構(gòu)模塊結(jié)構(gòu) 模塊語(yǔ)法模塊語(yǔ)法三種建模方式三種建模方式模塊的測(cè)試模塊的測(cè)試有關(guān)有關(guān)Verilog HDLVerilog HDL的幾個(gè)重要基本概念的幾個(gè)重要基本概念Verilog HDL是一種用于數(shù)字邏輯電路設(shè)計(jì)的語(yǔ)言:-用Verilog HDL描述的電路設(shè)計(jì)就是該電路的Verilog HDL模型。- Verilog HDL 既是一種行為描述的語(yǔ)言也是一種結(jié)構(gòu)描述的語(yǔ)言。這也就是說(shuō),既可以用電路的功能描述也可以用元器件和它們之間的連接來(lái)建立所設(shè)計(jì)電路的Verilog HDL模型。Verilog

2、模型可以是實(shí)際電路的不同級(jí)別的抽象。這些抽象的級(jí)別和它們對(duì)應(yīng)的模型類型共有以下五種:1 系統(tǒng)級(jí)(system): 用高級(jí)語(yǔ)言結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)模塊的外部性能的模型.2 算法級(jí)(algorithmic): 用高級(jí)語(yǔ)言結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)算法的模型,不包含時(shí)序信息。3 RTL級(jí)(Register Transfer Level): 描述數(shù)據(jù)在寄存器之間流動(dòng)和如何控制這些數(shù)據(jù)的模型。4 門級(jí)(gate-level): 描述邏輯門以及邏輯門之間的連接的模型。5 開(kāi)關(guān)級(jí)(switch-level): 描述器件中三極管和儲(chǔ)存節(jié)點(diǎn)以及它們之間連接的模型。 算法級(jí)是高級(jí)的建模,一般對(duì)特大型設(shè)計(jì)或有較復(fù)雜的算法時(shí)使用,特別是通

3、訊方面的一些系統(tǒng),通過(guò)算法級(jí)的建模來(lái)保證設(shè)計(jì)的系統(tǒng)性能,在算法級(jí)通過(guò)后,再把算法級(jí)用RTL級(jí)進(jìn)行描述,門級(jí)一般對(duì)小型設(shè)計(jì)時(shí)使用。開(kāi)關(guān)級(jí)一般在版圖級(jí)進(jìn)行。1 1 可描述順序執(zhí)行或并行執(zhí)行的程序結(jié)構(gòu)??擅枋鲰樞驁?zhí)行或并行執(zhí)行的程序結(jié)構(gòu)。2 2 用延遲表達(dá)式或事件表達(dá)式來(lái)明確地控制過(guò)程的啟動(dòng)時(shí)間。用延遲表達(dá)式或事件表達(dá)式來(lái)明確地控制過(guò)程的啟動(dòng)時(shí)間。3 3 通過(guò)命名的事件來(lái)觸發(fā)其它過(guò)程里的激活行為或停止行為。通過(guò)命名的事件來(lái)觸發(fā)其它過(guò)程里的激活行為或停止行為。4 4 提供了條件、提供了條件、if-elseif-else、casecase、循環(huán)程序結(jié)構(gòu)。、循環(huán)程序結(jié)構(gòu)。5 5 提供了可帶參數(shù)且非零延續(xù)時(shí)

4、間的任務(wù)提供了可帶參數(shù)且非零延續(xù)時(shí)間的任務(wù)(task)(task)程序結(jié)構(gòu)。程序結(jié)構(gòu)。6 6 提供了可定義新的操作符的函數(shù)結(jié)構(gòu)提供了可定義新的操作符的函數(shù)結(jié)構(gòu)(function)(function)。7 提供了用于建立表達(dá)式的算術(shù)運(yùn)算符、邏輯運(yùn)算符、位運(yùn)提供了用于建立表達(dá)式的算術(shù)運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符。算符。8 Verilog HDL語(yǔ)言作為一種結(jié)構(gòu)化的語(yǔ)言也非常適合于門級(jí)語(yǔ)言作為一種結(jié)構(gòu)化的語(yǔ)言也非常適合于門級(jí)和開(kāi)關(guān)級(jí)的模型設(shè)計(jì)。和開(kāi)關(guān)級(jí)的模型設(shè)計(jì)。 模塊(module)是Verilog 的基本描述單位,用于描述某個(gè)設(shè)計(jì)的功能或結(jié)構(gòu)及與其他模塊通信的外部端口。 模塊在概念上可等同一個(gè)器

5、件就如我們調(diào)用通用器件(與門、三態(tài)門等)或通用宏單元(計(jì)數(shù)器、ALU、CPU)等,因此,一個(gè)模塊可在另一個(gè)模塊中調(diào)用。 一個(gè)電路設(shè)計(jì)可由多個(gè)模塊組合而成,因此一個(gè)模塊的設(shè)計(jì)只是一個(gè)系統(tǒng)設(shè)計(jì)中的某個(gè)層次設(shè)計(jì),模塊設(shè)計(jì)可采用多種建模方式。module muxtwo(out, a, b, sl);input a, b, sl;output out;reg out;always (sl or a or b)if(!sl)out = a;elseout = b;endmodulemodule muxtwo(out, a, b, sl);input a, b, sl;output out;wire nsl

6、,sela,selb;assign nsl=sl;assign sela=a&nsl;assign selb=b&nsl;assign out=sela|selb;endmodulemodule muxtwo(out, a, b, sl);input a, b, sl;output out;wire nsl,sela,selb;not u1(nsl, sl);and #1 u2(sela, a, nsl);and #1 u3(selb, b, sl);or #1 u4(out, sela, selb);endmodule/*一個(gè)名為一個(gè)名為adder的三位加法器的例子。的三位加

7、法器的例子。*/module adder ( count,sum,a,b,cin ); /模塊定義開(kāi)始模塊定義開(kāi)始 input 2:0 a,b; /輸入信號(hào)定義輸入信號(hào)定義 input cin; /輸出信號(hào)定義輸出信號(hào)定義 output count; /輸出信號(hào)定義輸出信號(hào)定義 output 2:0 sum; /輸出信號(hào)定義輸出信號(hào)定義 assign count,sum = a + b + cin; /模塊功能描述模塊功能描述endmodule /模塊定義結(jié)束模塊定義結(jié)束例2.4 三位加法器例例2.52.5比較器比較器module compare ( equal,a,b ); output e

8、qual; /聲明輸出信號(hào)聲明輸出信號(hào)equal input 1:0 a,b; /聲明輸入信號(hào)聲明輸入信號(hào)a,b /*如果如果a、b 兩個(gè)輸入信號(hào)相等兩個(gè)輸入信號(hào)相等,輸出為輸出為1,否則為,否則為0*/ assign equal=(a=b)?)?1:0;endmodule 這個(gè)程序描述了一個(gè)比較器這個(gè)程序描述了一個(gè)比較器. .在這個(gè)程序中在這個(gè)程序中,/,/* *.* */ /和和/./.表示注釋部分表示注釋部分, ,注注釋只是為了方便程序員理解程序釋只是為了方便程序員理解程序, ,對(duì)編譯是不起對(duì)編譯是不起作用的。作用的。例例2.6 三態(tài)門三態(tài)門module trist1(out,in,en

9、able); output out; input in, enable; mytri tri_inst(out,in,enable); /調(diào)用由調(diào)用由mytri模塊定義的模塊定義的 實(shí)例實(shí)例 元件元件tri_instendmodulemodule mytri(out,in,enable); output out; input in, enable; assign out = enable? in : bz;endmodulemodule trist2(out,in,enable); output out; input in, enable; bufif1 mubuf (out,in,enabl

10、e); /調(diào)用由調(diào)用由門級(jí)原語(yǔ)實(shí)例門級(jí)原語(yǔ)實(shí)例 bufif1endmodule / 模塊定義模塊定義/ 輸入信號(hào)定義輸入信號(hào)定義/ 輸出信號(hào)定義輸出信號(hào)定義/ 模塊內(nèi)信號(hào)線的定義模塊內(nèi)信號(hào)線的定義/ 輸出端子數(shù)型定義輸出端子數(shù)型定義/ 非同步復(fù)位的非同步復(fù)位的F/F/ 選擇邏輯組合選擇邏輯組合選擇輸出的非同步復(fù)位觸發(fā)器一個(gè)設(shè)計(jì)是由一個(gè)個(gè)模塊構(gòu)成的。一個(gè)模塊的設(shè)計(jì)如下:1 模塊內(nèi)容是嵌套在module和endmodule兩個(gè)語(yǔ)句之間。每個(gè)模塊實(shí)現(xiàn)特定的功能,模塊是可以進(jìn)行層次嵌套的。正因?yàn)槿绱?才可以將大型的數(shù)字電路設(shè)計(jì)分割成不同的小模塊來(lái)實(shí)現(xiàn)特定的功能,最后通過(guò)頂層模塊調(diào)用子模塊來(lái)實(shí)現(xiàn)整體功能

11、。2 每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出口,然后對(duì)模塊的功能進(jìn)行行為邏輯描述。模塊的端口定義部分:如上例:module addr(a,b,cin,count,sum); 其中module是模塊的保留字,adddr時(shí)模塊的名字,相當(dāng)于器件名。()內(nèi)是該模塊的端口聲明,定義了該模塊的管腳名,是該模塊與其它模塊通訊的外部接口,相當(dāng)于器件的pin。 模塊的內(nèi)容,包括I/O說(shuō)明,內(nèi)部信號(hào)、調(diào)用模塊等的聲明 語(yǔ)句和功能定義語(yǔ)句。 I/O說(shuō)明如:input2:0a; input2:0b; input cin;output count;其中的input、output、input是保留字,定義了管腳信號(hào)的流

12、向,n:0表示該信號(hào)的位寬(總線或單根信號(hào)線)。 邏輯功能描述部分如:assign d_out=d_en?din:bz;Mytri u_mytri(din,d_en,d_out); 功能描述用來(lái)產(chǎn)生各種邏輯(主要是組合邏輯和時(shí)序邏輯,可用多種方法進(jìn)行描述)還可實(shí)例化一個(gè)器件,該器件可以時(shí)廠家的器件庫(kù)也可以時(shí)我們自己用HDL設(shè)計(jì)的模塊(相當(dāng)于在原理輸入時(shí)調(diào)用一個(gè)庫(kù)元件)。在邏輯功能描述中,主要用到assign和always兩個(gè)語(yǔ)句。3 對(duì)每個(gè)模塊都要進(jìn)行端口定義,并說(shuō)明輸入、輸出口,然后對(duì)模塊的功能進(jìn)行邏輯描述,當(dāng)然對(duì)測(cè)試模塊,可以沒(méi)有輸入輸出口4 Verilog HDL程序的書(shū)寫(xiě)格式自由,一行

13、可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分寫(xiě)多行。5 除了endmodule語(yǔ)句外,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)表示語(yǔ)句結(jié)束??梢杂?*.*/和/.對(duì)Verilog HDL程序的任何部分作注釋。一個(gè)好的,有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。module(模塊模塊)module能夠表示:能夠表示:物理塊,如物理塊,如IC或或ASIC單元單元邏輯塊,如一個(gè)邏輯塊,如一個(gè)CPU設(shè)計(jì)的設(shè)計(jì)的ALU部分部分整個(gè)系統(tǒng)整個(gè)系統(tǒng)每一個(gè)模塊的描述從關(guān)鍵詞每一個(gè)模塊的描述從關(guān)鍵詞module開(kāi)始,有一個(gè)開(kāi)始,有一個(gè)名稱名稱(如(如SN74LS74,DFF,ALU等等),由關(guān)鍵詞等等)

14、,由關(guān)鍵詞endmodule結(jié)束結(jié)束。module是層是層次化設(shè)計(jì)的基次化設(shè)計(jì)的基本構(gòu)件本構(gòu)件邏輯描述放在邏輯描述放在module內(nèi)部?jī)?nèi)部端口在模塊名字端口在模塊名字后的括號(hào)中列出后的括號(hào)中列出端口可以說(shuō)明為端口可以說(shuō)明為input, output及及inout端口等價(jià)于硬件端口等價(jià)于硬件的引腳的引腳(pin)module adder ( cout,sum,a,b,cin ); input 2:0 a,b; input cin; output cout; output 2:0 sum; assign cout,sum=a+b+cin;endmodule例設(shè)計(jì)三位全加器例設(shè)計(jì)三位全加器這個(gè)例子描

15、述了一個(gè)三位的加法器。從例子中可以看出整個(gè)這個(gè)例子描述了一個(gè)三位的加法器。從例子中可以看出整個(gè)Verilog HDL程序是嵌套在程序是嵌套在module和和endmodule聲明語(yǔ)句里聲明語(yǔ)句里的,只出現(xiàn)了一個(gè)的,只出現(xiàn)了一個(gè)assign語(yǔ)句。語(yǔ)句。adderaddersum2:0a2:0a2:0b2:0b2:0cincincoutcout模塊名模塊名端口列表端口列表端口聲明端口聲明數(shù)據(jù)流語(yǔ)句數(shù)據(jù)流語(yǔ)句/SR 觸發(fā)器觸發(fā)器module SR_FF (Q, Q_n,S,R);output Q, Q_n; /端口聲明端口聲明input S,R;nand n1(Q, S,Q_n);nand n2(Q

16、_n,R,Q);endmodule模塊中的模塊中的5個(gè)部分并沒(méi)全部出現(xiàn),只出現(xiàn)在個(gè)部分并沒(méi)全部出現(xiàn),只出現(xiàn)在低層次模塊實(shí)例化低層次模塊實(shí)例化nand為為verilog中的與非門門級(jí)中的與非門門級(jí)原語(yǔ)部件原語(yǔ)部件/D 觸發(fā)器觸發(fā)器module D_FF (d, clk,clr,q,qb);output q, qb;input d,clk,clr;reg q, qb; /輸出端口輸出端口q, qb值保存值保存always (posedge clk)beginif (clr)q=1b0;elseq=d;endAssign qb=q;endmodule 該模塊內(nèi)包括該模塊內(nèi)包括always行為塊語(yǔ)句行

17、為塊語(yǔ)句always塊行為描述語(yǔ)句塊行為描述語(yǔ)句module DFF (d, clk, clr, q, qb); .endmodulemodule REG4( d, clk, clr, q, qb); output 3: 0 q, qb; input 3: 0 d; input clk, clr; DFF d0 (d 0, clk, clr, q 0, qb 0); DFF d1 (d 1, clk, clr, q 1, qb 1); DFF d2 (d 2, clk, clr, q 2, qb 2); DFF d3 (d 3, clk, clr, q 3, qb 3);endmodule可以

18、將模塊的實(shí)例通過(guò)端口連接起來(lái)構(gòu)成一個(gè)大的系統(tǒng)或元件。可以將模塊的實(shí)例通過(guò)端口連接起來(lái)構(gòu)成一個(gè)大的系統(tǒng)或元件。在上面的例子中,在上面的例子中,REG4有模塊有模塊DFF的四個(gè)實(shí)例。注意,每個(gè)的四個(gè)實(shí)例。注意,每個(gè)實(shí)例都有自己的名字實(shí)例都有自己的名字(d0, d1, d2, d3)。實(shí)例名是每個(gè)對(duì)象唯。實(shí)例名是每個(gè)對(duì)象唯一的標(biāo)記,通過(guò)這個(gè)標(biāo)記可以查看每個(gè)實(shí)例的內(nèi)部。一的標(biāo)記,通過(guò)這個(gè)標(biāo)記可以查看每個(gè)實(shí)例的內(nèi)部。實(shí)例中端口的次序與模塊定義的次序相同。實(shí)例中端口的次序與模塊定義的次序相同。模塊實(shí)例化與調(diào)用程序不同。每個(gè)實(shí)例都是模塊的一個(gè)完全的模塊實(shí)例化與調(diào)用程序不同。每個(gè)實(shí)例都是模塊的一個(gè)完全的拷貝,

19、相互獨(dú)立、并行??截?,相互獨(dú)立、并行。模塊實(shí)例化模塊實(shí)例化(module instances)在調(diào)用模塊時(shí),可以用在調(diào)用模塊時(shí),可以用順序連接順序連接和和按名連接按名連接把模塊定義的端口把模塊定義的端口與外部信號(hào)連接起來(lái)與外部信號(hào)連接起來(lái)順序連接:需要連接的順序連接:需要連接的信號(hào)信號(hào)需要與模塊聲明的端口列需要與模塊聲明的端口列表一致;表一致;按名連接:端口和外部信號(hào)按名字連接在一起按名連接:端口和外部信號(hào)按名字連接在一起. D_FF d0 (d 0, clk, clr, q 0, qb 0); D_FF d1 (d 1, clk, clr, q 1, qb 1); D_FF d2 (d 2,

20、 clk, clr, q 2, qb 2); D_FF d3 (d 3, clk, clr, q 3, qb 3);當(dāng)設(shè)計(jì)大規(guī)模系統(tǒng)時(shí),端口太多,記住端口順序不大可能,當(dāng)設(shè)計(jì)大規(guī)模系統(tǒng)時(shí),端口太多,記住端口順序不大可能,可以采用按名連接方法。可以采用按名連接方法。不需要連接的端口直接忽略掉即可不需要連接的端口直接忽略掉即可D_FF d0 (.d d 0), .clk(clk), .clr(clr), .q(q 0), .qb(qb 0); D_FF d0 (.d(d 0), .clk(clk), .clr(clr), .q(q 0); 一個(gè)模塊用一個(gè)文件;模塊名與文件名要同名;一行一條語(yǔ)句。信

21、號(hào)方向按輸入、輸出、雙向順序描述。設(shè)計(jì)模塊時(shí)可考慮采用參數(shù)化,提供設(shè)計(jì)的重用。模塊的功能定義可以用采用下面的模塊的功能定義可以用采用下面的4種方式描述:種方式描述:1) 數(shù)據(jù)流方式數(shù)據(jù)流方式;2) 行為方式行為方式;3) 結(jié)構(gòu)方式結(jié)構(gòu)方式;4) 混合描述方式?;旌厦枋龇绞健?數(shù)據(jù)流的建模方式就是通過(guò)對(duì)數(shù)據(jù)流在設(shè)計(jì)中的具體行為的描述的來(lái)建模。最基本的機(jī)制就是用連續(xù)賦值語(yǔ)句。在連續(xù)賦值語(yǔ)句中,某個(gè)值被賦給某個(gè)線網(wǎng)變量(信號(hào)),語(yǔ)法如下:assign delay net_name = expression;如:assign #2 A = B;用連續(xù)賦值語(yǔ)句用連續(xù)賦值語(yǔ)句“assign” ,只能描述組

22、合邏輯。,只能描述組合邏輯。 無(wú)論右邊的操作數(shù)何時(shí)發(fā)生變化, 右邊表達(dá)式都重新計(jì)算, 并且在指定的時(shí)延后賦給左邊線網(wǎng)變量。如果沒(méi)有定義時(shí)延值, 缺省時(shí)延為0。在數(shù)據(jù)流描述方式中,還必須借助于HDL提供的一些運(yùn)算符,如按位邏輯運(yùn)算符:邏輯與(&),邏輯或(|)等。timescale 1ns/ 1nsmodule Decoder2x4 (A, B, EN, Z);input A, B, EN;output 0 :3 Z;wire Abar, Bbar;assign #1 Abar = A; assign #1 Bbar = B; 。 assign #2 Z0 = (Abar & B

23、bar & EN) ; assign #2 Z1 = (Abar & B & EN) ; assign #2 Z2 = (A & Bbar & EN) ; assign #2 Z3 = (A & B & EN) ; endmodule連續(xù)賦值語(yǔ)句是連續(xù)賦值語(yǔ)句是并發(fā)執(zhí)行并發(fā)執(zhí)行的,也就是說(shuō)各語(yǔ)句的執(zhí)行順序與其在描述中的,也就是說(shuō)各語(yǔ)句的執(zhí)行順序與其在描述中出現(xiàn)的順序無(wú)關(guān)。如上,當(dāng)出現(xiàn)的順序無(wú)關(guān)。如上,當(dāng)A有變化時(shí),有變化時(shí),S1、T3、T1 將同時(shí)變化,將同時(shí)變化,S1的變化又會(huì)造成的變化又會(huì)造成Sum的變化。的變化。2-4解碼器電路ti

24、mescale 1ns/100psmodule FA_flow(A,B,Cin,Sum,Count)input A,B,Cin;output Sum, Count;wire S1,T1,T2,T3;assign # 2 S1 = A B;assign # 2 Sum = S1 Cin;assign #2 T3 = A & B;assign #2 T1 = A & Cin;assign #2 T2 = B & Cin ;Endmodule如上,當(dāng)A有個(gè)變化時(shí),S1、T3、T1 將同時(shí)變化,S1的變化又會(huì)造成Sum的變化。 行為方式的建模是指采用對(duì)信號(hào)行為級(jí)的描述(不是結(jié)構(gòu)

25、級(jí)行為方式的建模是指采用對(duì)信號(hào)行為級(jí)的描述(不是結(jié)構(gòu)級(jí)的描述)的方法來(lái)建模,的描述)的方法來(lái)建模,在表示方面,類似數(shù)據(jù)流的建模方式,但一般是把用initial 塊語(yǔ)句或always 塊語(yǔ)句描述的歸為行為建模方式。行為建模方式通常需要借助一些行為級(jí)的運(yùn)算符如加法運(yùn)算符(+),減法運(yùn)算符(-)等1) initial語(yǔ)句:此語(yǔ)句只執(zhí)行一次。語(yǔ)句:此語(yǔ)句只執(zhí)行一次。2) always語(yǔ)句:此語(yǔ)句總是循環(huán)執(zhí)行語(yǔ)句:此語(yǔ)句總是循環(huán)執(zhí)行, 或者說(shuō)重復(fù)執(zhí)行?;蛘哒f(shuō)重復(fù)執(zhí)行。只有寄存器類型數(shù)據(jù)能夠在這兩種語(yǔ)句中被賦值。只有寄存器類型數(shù)據(jù)能夠在這兩種語(yǔ)句中被賦值。 所有的所有的initial語(yǔ)句和語(yǔ)句和alway

26、s語(yǔ)句在語(yǔ)句在0時(shí)刻并發(fā)執(zhí)行。時(shí)刻并發(fā)執(zhí)行。用用always語(yǔ)句對(duì)語(yǔ)句對(duì)1位全加器電路建模位全加器電路建模module FA_Seq (A, B, Cin, Sum, Cout);input A, B, Cin;output Sum, Cout;reg Sum, Cout;reg T1, T2, T3;always ( A or B or Cin ) beginSum = (A B) Cin;T1 = A & Cin;T2 = B & Cin;T3 = A & B;Cout = (T1| T2) | T3; endendmodule1位全加器電路module FA_be

27、hav2(A, B, Cin, Sum, Cout );input A,B,Cin;output Sum,Cout;reg Sum, Cout;always ( A or B or Cin )Count ,Sum = A + B + Cin ;endmodule在本例中,采用更加高級(jí)(更趨于行為級(jí))描述方式,即直接采用“+”來(lái)描述加法。Count,Sum表示對(duì)位數(shù)的擴(kuò)展,因?yàn)閮蓚€(gè)1bit 相加,和有兩位,低位放在Sum 變量中,進(jìn)位放在Count 中。1、只有寄存器類型的信號(hào)才可以在always和initial 語(yǔ)句中進(jìn)行賦值,類型定義通過(guò)reg語(yǔ)句實(shí)現(xiàn)。2、always 語(yǔ)句是一直重復(fù)執(zhí)行,

28、由敏感表(always 語(yǔ)句括號(hào)內(nèi)的變量)中的變量觸發(fā)。這意味著只這意味著只要要A、B或或Cin 上發(fā)生事件,即上發(fā)生事件,即A、B或或Cin之一的之一的值發(fā)生變化,順序過(guò)程就執(zhí)行。值發(fā)生變化,順序過(guò)程就執(zhí)行。3、always 語(yǔ)句從0 時(shí)刻開(kāi)始。4、在begin 和end 之間的語(yǔ)句是順序執(zhí)行,屬于串行語(yǔ)句。并且在順序過(guò)程執(zhí)行結(jié)束后被掛起。并且在順序過(guò)程執(zhí)行結(jié)束后被掛起。順序過(guò)程執(zhí)行完成后,順序過(guò)程執(zhí)行完成后,always 語(yǔ)句再次等待語(yǔ)句再次等待A、B或或Cin上發(fā)生的事件。上發(fā)生的事件。 結(jié)構(gòu)化的建模方式就是通過(guò)對(duì)電路結(jié)構(gòu)的描述來(lái)建模,即通過(guò)對(duì)器件的調(diào)用(HDL概念稱為例化),并使用線網(wǎng)

29、來(lái)連接各器件的描述方式。這里的器件包括Verilog HDL的內(nèi)置門如與門and,異或門xor等,也可以是用戶的一個(gè)設(shè)計(jì)。結(jié)構(gòu)化的描述方式反映了一個(gè)設(shè)計(jì)的層次結(jié)構(gòu)。在Verilog HDL中可使用如下方式描述結(jié)構(gòu):1) 內(nèi)置門原語(yǔ)內(nèi)置門原語(yǔ)(在門級(jí)在門級(jí));2) 開(kāi)關(guān)級(jí)原語(yǔ)(在晶體管級(jí));3) 用戶定義的原語(yǔ)(在門級(jí));4) 模塊實(shí)例模塊實(shí)例 (創(chuàng)建層次結(jié)構(gòu)創(chuàng)建層次結(jié)構(gòu))。module FA_Str (A, B, Cin, Sum, Cout); input A, B, Cin; output Sum, Cout; wire S1, T1, T2, T3; xor X1 (S1, A, B);

30、 xor X2 (Sum, S1, Cin); and A1 (T3, A, B); and A2 (T2, B, Cin); and A3 (T1, A, Cin); or O1 (Cout, T1, T2, T3);Endmodule1位全加器電路該實(shí)例顯示了一個(gè)全加器由兩個(gè)異或門、三個(gè)與門、一個(gè)或門構(gòu)成。S1、T1、T2、T3則是門與門之間的連線。代碼顯示了用純結(jié)構(gòu)的建模方式,其中xor 、and、or 是Verilog HDL 內(nèi)置的門器件。以 xor x1 (S1, A, B) 該例化語(yǔ)句為例:xor 表明調(diào)用一個(gè)內(nèi)置的異或門,器件名稱xor ,代碼實(shí)例化名x1(類似原理圖輸入方式)

31、。括號(hào)內(nèi)的S1,A,B 表明該器件管腳的實(shí)際連接線(信號(hào))的名稱,其中 A、B是輸入,S1是輸出。其他同。4位全加器可以使用位全加器可以使用4個(gè)個(gè)1位全加器模塊描述位全加器模塊描述module FourBitFA (FA, FB, FCin, FSum, FCout );input 3:0 FA, FB;output 3:0 FSuminput FCin;input FCout;wire 1: 3 FTemp;FA_Str FA1( .A(FA1), .B(FB1), .Cin(FCin),.Sum(FSum1), .Cout(FTemp1);FA_Str FA2( .A(FA2), .B(F

32、B2), .Cin(FTemp1),.Sum(FSum2), .Cout(FTemp2);FA_Str FA3(FA3, FB3, FTemp2, FSum3, FTemp3);FA_Str FA4(FA4, FB4, FTemp3, FSum4, FCout);endmodule模塊實(shí)例模塊實(shí)例用于建模用于建模4位全加器。位全加器。在模塊實(shí)例語(yǔ)句中,在模塊實(shí)例語(yǔ)句中,端口可以與名稱或位置關(guān)聯(lián)端口可以與名稱或位置關(guān)聯(lián)。前兩個(gè)實(shí)例前兩個(gè)實(shí)例FA1和和FA2使用使用命名關(guān)聯(lián)方式命名關(guān)聯(lián)方式,也就是說(shuō),也就是說(shuō),端口的名稱和它連接的線網(wǎng)被顯式描述(每一個(gè)端口的名稱和它連接的線網(wǎng)被顯式描述(每一個(gè)的形

33、式都為的形式都為“.port_name (net_name))。)。最后兩個(gè)實(shí)例語(yǔ)句,實(shí)例最后兩個(gè)實(shí)例語(yǔ)句,實(shí)例FA3和和FA4使用使用位置關(guān)聯(lián)方位置關(guān)聯(lián)方式式將端口與線網(wǎng)關(guān)聯(lián)。這里將端口與線網(wǎng)關(guān)聯(lián)。這里關(guān)聯(lián)的順序很重要關(guān)聯(lián)的順序很重要,例如,在實(shí)例例如,在實(shí)例FA4中,第一個(gè)中,第一個(gè)FA4與與FA_Str 的端的端口口A連接,第二個(gè)連接,第二個(gè)FB4與與FA_Str 的端口的端口B連接,連接,余下的由此類推。余下的由此類推。結(jié)構(gòu)的和行為的描述自由混合。模塊描述中可以包含實(shí)例化的門、結(jié)構(gòu)的和行為的描述自由混合。模塊描述中可以包含實(shí)例化的門、模塊實(shí)例化語(yǔ)句、連續(xù)賦值語(yǔ)句以及模塊實(shí)例化語(yǔ)句、連續(xù)

34、賦值語(yǔ)句以及always語(yǔ)句。語(yǔ)句。module FA_Mix (A, B, Cin, Sum, Cout);input A,B, Cin;output Sum, Cout;reg Cout;reg T1, T2, T3;wire S1;xor X1(S1, A, B); / 門實(shí)例語(yǔ)句。門實(shí)例語(yǔ)句。always ( A or B or Cin ) /always語(yǔ)句語(yǔ)句begin T1 = A & Cin; T2 = B & Cin; T3 = A & B; Cout = (T1| T2) | T3;end assign Sum = S1 Cin; / 連續(xù)賦值語(yǔ)句連

35、續(xù)賦值語(yǔ)句endmodule只要只要A或或B上有事件發(fā)生,門實(shí)上有事件發(fā)生,門實(shí)例語(yǔ)句即被執(zhí)行。例語(yǔ)句即被執(zhí)行。只要只要A、B或或Cin上有事件發(fā)生,上有事件發(fā)生,就執(zhí)行就執(zhí)行always 語(yǔ)句。語(yǔ)句。只要只要S1或或Cin上有事件發(fā)生,就上有事件發(fā)生,就執(zhí)行連續(xù)賦值語(yǔ)句。執(zhí)行連續(xù)賦值語(yǔ)句。如果用如果用Verilog模塊實(shí)現(xiàn)一定的功能,首先應(yīng)該清楚模塊實(shí)現(xiàn)一定的功能,首先應(yīng)該清楚哪些是同哪些是同時(shí)發(fā)生的時(shí)發(fā)生的,哪些是順序發(fā)生的哪些是順序發(fā)生的?!癮ssign”語(yǔ)句語(yǔ)句、實(shí)例元件實(shí)例元件和和“always”塊塊描述的邏輯功能描述的邏輯功能是同時(shí)執(zhí)行的,也就是是同時(shí)執(zhí)行的,也就是并發(fā)并發(fā)的,如果

36、把這三項(xiàng)寫(xiě)到一的,如果把這三項(xiàng)寫(xiě)到一個(gè)個(gè) VeriIog 模塊文件中去,它們的次序不會(huì)影響邏輯實(shí)模塊文件中去,它們的次序不會(huì)影響邏輯實(shí)現(xiàn)的功能。現(xiàn)的功能。在在“always”模塊內(nèi),邏輯是按照指定的模塊內(nèi),邏輯是按照指定的順序執(zhí)行順序執(zhí)行的。的?!癮lways”塊中的語(yǔ)句稱為塊中的語(yǔ)句稱為“順序語(yǔ)句順序語(yǔ)句”。兩個(gè)或更多的兩個(gè)或更多的“always”模塊也是同時(shí)執(zhí)行的,但是模塊模塊也是同時(shí)執(zhí)行的,但是模塊內(nèi)部的語(yǔ)句是順序執(zhí)行的。內(nèi)部的語(yǔ)句是順序執(zhí)行的。 在實(shí)際的設(shè)計(jì)中,往往是多種設(shè)計(jì)模型的混合。一般地,對(duì)頂層設(shè)計(jì),采用結(jié)構(gòu)描述方式,對(duì)低層模塊,可采用數(shù)據(jù)流、行為級(jí)或兩者的結(jié)合。如上面的4bit

37、 全加器,對(duì)頂層模塊(Four_bit_FA)采用結(jié)構(gòu)描述方式對(duì)低層進(jìn)行例化,對(duì)低層模塊(FA)可采用結(jié)構(gòu)描述、數(shù)據(jù)流描述或行為級(jí)描述。寫(xiě)出二選一MUX功能模塊的Verilog HDL的行為描述和結(jié)構(gòu)描述數(shù)據(jù)流描述模塊module mux_beh( out, a, b, sel);output out;inputa, b, sel;Assign out = ( sel= 0 ) ? a : b;endmodulemodule muxtwo(out, a, b, sl);input a, b, sl;output out;reg out;always (sl or a or b)if(!sl)o

38、ut = a;elseout = b;endmodulemodule mux_str( out, a, b, sel);outputout;inputa, b, sel;notgate1( net1, sel);andgate2( net2, a, net1 );andgate3( net3, b, sel);orgate4( out, net2, net3 );endmodule需要有測(cè)試激勵(lì)信號(hào)輸入到被測(cè)模塊需要記錄被測(cè)模塊的輸出信號(hào)需要把用功能和行為描述的Verilog模塊轉(zhuǎn)換為門級(jí)電路互連的電路結(jié)構(gòu)(綜合)。 需要對(duì)已經(jīng)轉(zhuǎn)換為門級(jí)電路結(jié)構(gòu)的邏輯 進(jìn)行測(cè)試(門級(jí)電路仿真)。 需要對(duì)布局布線后的電路結(jié)構(gòu)進(jìn)行測(cè)試。 (布局布線后仿真)。1測(cè)試平臺(tái)(Test Bench)描述測(cè)試信號(hào)的變化和測(cè)試過(guò)程的模塊叫測(cè)試平臺(tái)我們可以通過(guò)觀測(cè)被測(cè)模塊的輸出信號(hào)是否符號(hào)要求來(lái)驗(yàn)證邏輯系統(tǒng)的設(shè)計(jì)和結(jié)構(gòu)是否正確,發(fā)現(xiàn)問(wèn)題可及時(shí)修改2通常將需要測(cè)試的對(duì)象稱之為DUT(Device Under Test)3 測(cè)試模塊要調(diào)用DUT包含用于測(cè)試的激勵(lì)信號(hào)源能夠?qū)嵤?duì)輸出信號(hào)的檢測(cè),并報(bào)告檢測(cè)的結(jié)果測(cè)試平臺(tái)測(cè)試平臺(tái)是驗(yàn)證對(duì)象電路的工作狀態(tài)是否正確的測(cè)試用模塊。是驗(yàn)證對(duì)象電路的工作狀態(tài)是否正確的測(cè)

溫馨提示

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