Verilog硬件描述語言設(shè)計實例剖析_第1頁
Verilog硬件描述語言設(shè)計實例剖析_第2頁
Verilog硬件描述語言設(shè)計實例剖析_第3頁
Verilog硬件描述語言設(shè)計實例剖析_第4頁
Verilog硬件描述語言設(shè)計實例剖析_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、VerilogHDL模塊設(shè)計實例1.組合邏輯電路設(shè)計實例:例1八位帶進位端的加法器的設(shè)計實例(利用 簡單的算法描述)module addar_8(coirt,sum,a,b,cin);output cout;output 7:0 sum;input cin;input7:0 a,b;assign cout/sum)=a+b+cin;endmodule'minus: out=a-b;/位運算'band: out=a&b;'bor: out=a I b;/單目運算Hinegate: out= a;defaul t: out=8, hx;endcaseendendmo

2、dule例2指令譯碼電路的設(shè)計實例(利用電平敏感的always塊來設(shè)計組合邏輯)操作碼的宏定義' define plus3'dOx define minus3'dlx define band3'd2x define bor3'd3、define unegate 3'd4modulealu (out, opcode, a, b);output 7: 0 out;input 2: 0 opcode;input 7: 0 a, b;reg 7: 0 out;always (opcode or a or b)/用電平敏感的always塊描述/組合邏輯be

3、gincase (opcode)/算術(shù)運算p 1 us. onia十。,例3.利用task和電平敏感的al ways塊設(shè) 計比較后重組信號的組合邏輯.module sort4(ra,rb,rc,rd,a,b,c,d);parameter t=3;output t:0 raz rb, rct rd;input t:0 a, b, ct d;reg t:0 raz rb, rc, rd;always (a or b or c or d)/用電平敏感的always塊描述組合邏輯beginreg t:0 va, vb, vc, vd;va/vb/vc/vd)=(a/b/c/d);sort2(vazvc

4、);sort2(vb,vd);sort2(va,vb);sort2(vc,vd);sort2(vb,vc);ra/rb/rc/rd=va/vb/vc/vd);task sort2;inout t:0 x, y;reg t:0 tmp;if ( x > y )begintmp = x;x = y;y = tmp;endendtaskendmodule例4.比較器的設(shè)計實例(利用賦 值語句設(shè)計組合邏輯)module compare(equal,a,b);parameter size=l;output equal;input size-l:O a, b;assign equal = (a=b)

5、 ? 1 : 0;endmodule例5. 3-8譯碼器設(shè)計實例(利用賦 值語句設(shè)計組合邏輯)module decoder(outjn);output 7:0 out;i叩u十2:0 in;assign out = rbl«in;/* 把最低位的1 左移in (根據(jù)從in 口輸入的值)位,并 賦予 out */endmodule例6. 8-3編碼器的設(shè)計實例 編碼器設(shè)計方案之一: module encoderl(outzin): output 2:0 out;inpu十7:0 in;reg 2:0 out;always (in)begin: local integer i;out =

6、 0;/*returns the value of the highest bit number turned on*/ for( i=0; i<8; i=i+l ) begin if( ini) begin out = i; end end end endmodule編碼器設(shè)計方案之二:於module encoder2 ( none_on, out2, outl, outOz h," e, d, c, b, a);、input hz 9, f, e, d, c, b, a;output none_onz ou十2, outl, outO;wire 3:0 outvec;ass

7、ign outvec= h? 4'bOlll : g? 4'bOllO : f? 4'bOlOl:e? 4'bOlOO : d? 4'bOOll :c? 4'bOOlO : b? 4'b0001: a?4'b0000 : 4161000;assign none_on = outvec3;assign out2 二 outvec2: assign outl = outvecl;outO = outvec0; ;ndmodule編碼器設(shè)計方案之三:module encoders (none_on, out29,f, e, d, c,

8、b,a);input h, g, f, e, d, c, bz a;output out2, outl, ou+0;output none_on;reg 3:0 outvec;assign none_pn,out2,outl,out0outl, outO, h,outvec;always ( a or b or c or d or e beginif(h) outvec=4'bOlll;else if(g) outvec=4'bOHO; else if(f) outvec=4'bOlOl; else if(e) outvec=4'bOlOO; else if(d

9、) outvec=4'bOOll; else if(c) outvec=4'bOOlO; else if(b) outvec=4' bOOOl; else if(a) outvec=4' bOOOO; else outvec=4'bl000;f or g or h)CHamodule例7.多路器的設(shè)計實例。使用連續(xù)賦值、case語句或if-else語句可以生成 多路器電路,如果條件語句(case或if-else)中 分支條件是互斥的話,綜合器能自動地生成并行的 多路器。多路器設(shè)計方案之一:modul emuxl (out, a, b, sei);outp

10、ut out;input a, b, sei;assign out = sei? a : b;endmodule多路器設(shè)計方案之二:module mux2( out, az bz sei);output out;input a, b, sei;reg out;用電平觸發(fā)的always塊來設(shè)計多路器的組合邏輯always ( a or b or sei )begin/檢查輸入信號sei的值,如為1,輸jout為a,如為0,輸出。ui"為 b*/case( sei )1'bl: out = a;I'bO: out = b;Idefault: out = 'bx;多

11、路器設(shè)計方案之三:module mux3( out, a, b, sei);output out;input a, b, sei;reg out;always ( a or b or sei )beginif( sei )out = a;elseout = b;end例8.奇偶校驗位生成器設(shè)計實例、Module parity( even_numbitszoclcl_numbi+sz input_bus);output even_numbits. odd_numbits;input 7:0 input_bus;assign odd_numbits = input_bus;assign even_

12、numbits =八 input_bus;endtnodule例9.輸出驅(qū)動器設(shè)計實例 三態(tài)輸出驅(qū)動器設(shè)計方案之一: module tristl( out, in, enable);output out;input in, enable;assign out = enable? in: 'bz;endmodule三態(tài)輸出驅(qū)動器設(shè)計方案之二:module tris十2( out, in, enable );output out;input in, enable;/bufif 1 是一個Verilog門級原語(primitive)bufif 1 mybufl(outz inz enable

13、);endmodule2.時序邏輯電路設(shè)計實例例1觸發(fā)器設(shè)計實例module dff( q, data, elk);output q;input data, elk;reg q;always ( posedge elk ) beginq 二 data;判d HIenamodule例2.電平敏感型鎖存器設(shè)計實例module latch3( q, data, elk);output q;input data, elk;reg q;always (clk or data)beginif(clk)q=data;鄴endmodule例3.移位寄存器設(shè)計實例 module shif ter ( din,

14、elk, clr, input din, elk, clr;output 7: 0 dout;reg 7: 0 dout;always (posedge elk) beginif (clr) dout = 8Z bO; /清零 else begindout <= dout<<l; /左移一位 dout 0 <= din;end 把輸入信號放入寄存器的最低位endmodule例4 ,八位計數(shù)器設(shè)計實例之一 module counterl( out, data, load, coutput 7:0 out;input 7:0 data;input load, elk;reg

15、 7:0 out;always (posedge elk) beginif( load )out = data; elseout = out + 1; end/只有當(dāng)ou+7:O的所有各位都為1endmodule例5.八位計數(shù)器設(shè)計實例之二:module counter2 ( out, cout, dat load, elk);output 7: 0 out;output cout;input 7: 0 data;input load, elk;reg 7: 0 out;reg cout;mg 7: 0 preout;/創(chuàng)建8位寄存器 always (posedge elk)beginout

16、<= preout;end/*計算計數(shù)器和進位的F一個狀態(tài), 注意:為提高性能不希望加載影響進位""/ndmoduleaIways ( begin cout, if (load)out or data or load )preout <= out + 1; preout <= data;存儲建模目標(biāo)學(xué)會如何用Verilog對存儲器建模。學(xué)會如何用Verilog中對雙向(即輸入/輸出)端口, (inout)建模。例如:指出可以對存儲器做以F哪幾種操作:1)2)3)4)5)my rom_data0000010111000011110100100011 mi10

17、001001100000011101101000011101存儲器建模存儲器建模必須注意以下兩個方面的問題:聲明存儲器容量的大小。明確對存儲器訪問操作的權(quán)限。只讀 讀寫 同步讀寫 多次讀,同時進行一次寫多次同步讀寫,同時提供一些方法保證一致性簡單ROM建模:timescale lns/10psmoduleluyroiu (read data, addr, read en ) input read_en_;input 3:0| addr;output 3:0 readdata;reg 13:0' read data;reg 3:0 mein | 0:15;initial$readmemb

18、 ("my roin data”, mein);always (addr or read if (!read_en_)read data-mein addr;在黑2鏟及公F1I一在另外的一個獨endiuodule立舟支件中簡單ROM建模上頁所示的ROM模型說明:簡單RAM建模,如何在Verilog中用二維的寄存器組來定義存儲器。/ ROM中的數(shù)據(jù)保存在一個獨立的文件中,如上頁的右邊 的虛線方框所示。,這是一種保存ROM數(shù)據(jù)的通用的方法,它可以使數(shù)據(jù)和 ROM模型分開。'timescale Ins/1ns;module mymem (data, addr, read, writ

19、e);jinout 3:0 data;jinput 3:0| addr;input read, write;reg 3:01 meuiory 10:15 ; /4 bits, 16 words,從存儲器讀出到總線上assign data=read? menioiy addi :4'bz ;從總線寫入存儲器; always (posedge write)i memoryaddr=data;;endinodule簡單RAM建模RAM模型比ROM模型稍微復(fù)雜: 它必須具有讀寫能力; 進行讀寫時通常使用相同的數(shù)據(jù)總線; 需要新技術(shù)來處理雙向總線; 當(dāng)讀信號無效時,RAM模型與總線脫離,如 果此

20、時寫信號也無效,總線無驅(qū)動源,則 總線進入高阻狀態(tài),這就避免了 RAM中的讀寫競爭。存儲量可變的只讀存儲器建模X例:module scalable_ROM (mem_word, address);parameter addr_bits=8;/size of address busparameter wordsize=8;/width of a wordparameter words=(l«addr_bits); /size of memoutput wordsize: 1 mem_word; /word of memory input addr_bits:l address; /ad

21、dress busreg wordsize:1 mem 0 : words-1; /mem declaration/output one word of memorywire wordsize:l mem_word=mem address; endmodule存儲器的加載可以在初始化塊中用一個循環(huán)或系統(tǒng)任務(wù)把初始 數(shù)據(jù)存入存儲器的每個單元。使用循環(huán)把值賦給存儲器數(shù)組。for(i=0;i<memsize;i=i+i) / initialize memory memai=wordsizelbl;調(diào)用$readmem系統(tǒng)任務(wù)。從文件mem_file.txt中,把初始數(shù)據(jù)存入 存儲器(mem)的

22、每個單元$ read me mb(u mem_file.txt1 z me m);注意:上面兩項必須寫在in寫al塊中,加載這些 初始化數(shù)據(jù)不需要時間。怎樣使用雙向口使用inou十關(guān)鍵字聲明端口為雙向口。inout 7:0 databus;使用雙向口必需遵循下面的規(guī)則: inou十口只能聲明為網(wǎng)絡(luò)連接類型,不允許把它聲明 為寄存器類型。(所以仿真器能確定多個驅(qū)動源的最 終值。)在設(shè)計中,每次只能從一個方向來驅(qū)動inou十口。例如:當(dāng)使用總線讀RAAAM的數(shù)據(jù)時,如果同時乂 向RAM模型的雙向數(shù)據(jù)總線寫數(shù)據(jù),就會產(chǎn)生邏輯競 爭,導(dǎo)致總線數(shù)據(jù)無法確定。所以必須為inou十口設(shè)計 控制邏輯,只有這樣

23、才能保證正確的操作。注意:聲明一個inoutU,可以用來輸入或輸出數(shù)據(jù)。 inout默認為網(wǎng)絡(luò)連接類型。不允許在過程 塊(ini*tial或always塊)中對網(wǎng)絡(luò)連接類型的 數(shù)據(jù)進行過程賦值;但可以在過程塊外把一個 寄存器數(shù)據(jù)類型通過連續(xù)賦值語句賦給它(inout )-必須為inout設(shè)計控制邏輯,用來保證正確 的操作。當(dāng)把inout口作為輸入口時,必須通 過控制邏輯禁止輸出到inout 口 oen a ben b a使用Verilog中的基本元件(bufifl)為雙向建模:module bus xcvrinput en_a_b, en_b_a;bufifirybl(bus_b, bus_a

24、, en_a_b);bufiflb2(bus_a, bus_b, en_b_a);當(dāng)en_b_a=l時,元器 件bl激潔,bus_b的值傳 到bus_a上當(dāng)en_a_b=l時,元器 件bl激活,bus_a的值傳 到bus_b上 flV W «0 OB (bus_a, bus_b, en_a_b, en_b_a); inout bus_a, bus_b;注意:在上頁的例子中,使用en_a_b和en_b_a來控制元器 件bufifl,如果控制信號同山苗效,則結(jié)果無法確定。使用連續(xù)賦值為雙向口建模:bus ben b a所以必須把控制信號en_a_b和en_b_a在時間上分 開。當(dāng)en_a_b=l 時,bus_a的 值傳到bus_b上當(dāng)en_b_a=l時,bus_b的 值傳到bus_a上module bus_xcvr(bu s_a, bus b, en_a_b, en b a);inout bus_a, bus_b

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論