初級建模實例_第1頁
初級建模實例_第2頁
初級建模實例_第3頁
初級建模實例_第4頁
初級建模實例_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、初級建模實例一、觸發(fā)器 觸發(fā)器是邏輯電路中廣泛采用的存儲信息的元件,種類有R-S觸發(fā)器、J-K觸發(fā)器、D觸發(fā)器、T觸發(fā)器等。其中D觸發(fā)器是最常用的。 因為觸發(fā)器是邊沿敏感的元件,所以一般在always語句中敏感列表使用posedge和negedge。1. D觸發(fā)器data是數(shù)據(jù)輸入端,clk是時鐘輸入端,q是輸出端。dataclkq1module dff (data,clk,q); input data,clk; output q; always(posedge clk) q=data;endmodule22. 帶異步復(fù)位端的上升沿觸發(fā)器dataclkqreset reset是異步復(fù)位端,當(dāng)r

2、eset變成0時就執(zhí)行復(fù)位,而不管當(dāng)前時鐘信號如何,即復(fù)位行為與時鐘不是同步的,所以稱為異步復(fù)位。3module dff_1 ( data, clk, reset, q ); input data, clk, reset; output q; reg q; always ( posedge clk or negedge reset) if (!reset) q=1b0; else q=data;endmodule43. 帶異步置數(shù)端的上升沿觸發(fā)器dataclkqpresetpreset是異步置數(shù)端,當(dāng)preset變?yōu)?時,輸出q置為1。module dff_2 ( data, clk, pre

3、set, q ); input data, clk, preset; output q; reg q; always ( posedge clk or posedge preset) if (!preset) q=1b1; else q=data;endmodule54. 帶同步復(fù)位端的上升沿D觸發(fā)器dataclkqresetreset是同步復(fù)位端,與異步復(fù)位端不同的是,同步復(fù)位行為是在時鐘信號控制下進(jìn)行的,即當(dāng)某個時刻復(fù)位信號生效,但必須等到下一個時鐘上升沿時才能執(zhí)行復(fù)位,即復(fù)位行為與時鐘同步。6module dff_3 ( data, clk, reset, q ); input data

4、, clk, reset; output q; reg q; always ( posedge clk ) if (!reset) q=1b0; else q=data;endmodule75. 帶異步復(fù)位端和使能端的上升沿D觸發(fā)器dataclkqresetenen是使能端,當(dāng)en高電平有效時,才能輸出數(shù)據(jù)。module dff_3 ( data, clk, reset, en, q ); input data, clk, reset, en; output q; reg q; always ( posedge clk or negedge reset ) if (!reset) q=1b0;

5、 else if (en) q=data;endmodule8二、鎖存器 和觸發(fā)器一樣,鎖存器也是一種具有存儲功能的元件,兩者不同之處是,鎖存器是電平敏感的存儲器件,而觸發(fā)器是邊沿敏感的存儲器件。所以在always語句的敏感列表中不會使用posedge和negedge。1. 帶使能端的鎖存器dataenableq 鎖存器有一個數(shù)據(jù)輸入端data,數(shù)據(jù)輸出端q和一個使能端enable。當(dāng)使能端enable有效時,才能把數(shù)據(jù)輸入到鎖存器中。9module d_latch ( enable, data, q); input data, enable; output q; reg q; always

6、( enable or data ) if ( enable ) q=data;endmodule102. 可異步選通數(shù)據(jù)的鎖存器dataenableqgate gate是一個異步數(shù)據(jù)選通端,gate用于選通輸入數(shù)據(jù),當(dāng)gate為1時將輸入數(shù)據(jù)與gate做與操作后輸出,所以當(dāng)gate為1是,輸出就是輸入的數(shù)據(jù),否則輸出是0。module d_latch ( enable, gate, data, q); input data, enable, gate; output q; reg q; always ( enable or gate or data ) if ( enable ) q=dat

7、a&gate;endmodule11三、編碼器 編碼器是指能實現(xiàn)用二進(jìn)制對輸入信號進(jìn)行編碼的電路,對于每一種輸入信號將輸出唯一的二進(jìn)制代碼。 編碼器分為一般編碼器和優(yōu)先編碼器兩種,一般編碼器一次只能輸入一個信號,優(yōu)先編碼器一次允許輸入多個信號。1. 8-3編碼器In7In6In5In4In3In2In1In0Out2Out1Out0in7in0是8位數(shù)據(jù)輸入端,out2out0是3位編碼輸出端。(輸入端每次有且只有一個是有效的“1”)12module encoder (in, out)Input 7:0 in;output 2:0 out; reg 2:0 out;always (in) ca

8、se (in) 8b00000001: out=3b000; /in0為1時輸出編碼000 8b00000010: out=3b001; /in1為1時輸出編碼001 8b00000100: out=3b010; /in2為1時輸出編碼010 8b00001000: out=3b011; /in3為1時輸出編碼011 8b00010000: out=3b100; /in4為1時輸出編碼100 8b00100000: out=3b101; /in5為1時輸出編碼101 8b01000000: out=3b110; /in6為1時輸出編碼110 8b10000000: out=3b111; /in

9、7為1時輸出編碼111 endcaseendmodule13四、譯碼器 譯碼器是指能實現(xiàn)將二進(jìn)制代碼所表示的輸入變量翻譯出來的電路,對每一種輸入代碼組合,僅有一個輸出信號有效。按應(yīng)用不同,分為一般譯碼器和顯示譯碼器兩種。1.3-8譯碼器out7out6out5out4out3out2out1out0in2in1in0in2in0是3位數(shù)據(jù)輸入端,out7out0是8位譯碼輸出端。(輸出端每次有且只有一個是有效的“1”)。en是使能端。en14module decoder ( in, out, en ); input en; input 2:0 in; output 7:0 out; reg 7

10、:0 out; always ( en or in) begin if (! en ) out=8b0; else case( in ) 3b000: out=8b00000001; /0 3b001: out=8b00000010; /1 3b010: out=8b00000100; /2 3b011: out=8b00001000; /3 3b100: out=8b00010000; /4 3b101: out=8b00100000; /5 3b110: out=8b01000000; /6 3b111: out=8b10000000; /7 endcaseendmodule15五、 4選

11、1多路數(shù)據(jù)選擇器cdefsout c、d、e、f是4個數(shù)據(jù)輸入端,out是數(shù)據(jù)輸出端,s是選擇信號輸入端。 分別采用if-else構(gòu)造和case構(gòu)造。16用if-else構(gòu)造module mux (c,d,e,f,s,out)input c,d,e,f;input 1:0 s;output out;reg out;always (c or d or e or f or s)begin if (s=2b00) out=c; /s是00時選通c else if (s=2b01) out=d; /s是01時選通d else if (s=2b10) out=e; /s是10時選通e else out=

12、f; /s是其他值時選通fendendmodule17用case構(gòu)造module mux (c,d,e,f,s,out)input c,d,e,f;input 1:0 s;output out;reg out;always (c or d or e or f or s)begin case (s) 2b00 : out=c; /00時選通c 2b01 : out=d; /01時選通d 2b10 : out=e; /10時選通e default : out=f; /其他值時選通f endcaseendendmodule18六、計數(shù)器 計數(shù)器用于對時鐘脈沖計數(shù),還用于分頻、定時、產(chǎn)生脈沖序列等。

13、計數(shù)器分類方法較多。按計數(shù)器中觸發(fā)器是否同時翻轉(zhuǎn),可以分為同步計數(shù)器和異步計數(shù)器。按計數(shù)的增減,可以分為加計數(shù)器、減計數(shù)器和可逆計數(shù)器。按編碼方式,可以分為二進(jìn)制計數(shù)器、2-10進(jìn)制計數(shù)器、循環(huán)碼計數(shù)器。按計數(shù)器容量可以分成不同模的計數(shù)器。191. 帶使能和進(jìn)位輸出的4位加法計數(shù)器dintload_dataresetclkqcout4位加法計數(shù)器 d是4位置數(shù)輸入端,int是加法計數(shù)使能端,load_data是置數(shù)使能端,reset是復(fù)位端,clk是時鐘輸入端。q是4位輸出端,cout是進(jìn)位輸出端。該4位加法計數(shù)器的模是16。20module counter4_bit (q, cout, d,

14、 int, load_data, reset, clk); output 3:0 q; output cout; input 3:0 d; input int, load_data, reset, clk; reg 3:0 q; reg cout; always (posedge clk) if (reset) begin q=4b0000; cout=0; end else if (load_data) begin q=d; cout=0; end else if (int) if (q=15) begin q=0; cout=1; end else begin q=q+1; cout=0;

15、 end endmodule是異步復(fù)位還是同步復(fù)位?212. 4分頻 module div (clk_in, clk_out, reset); parameter bitsize=2; parameter L=3; input clk_in, reset; output clk_out; reg bitsize:1 count; reg clk_out; always (posedge clk_in) begin if (!reset) count=0; else begin if(countL) count=count+1; else count=0; end clk_out=countbi

16、tsize; endendmodule 對參數(shù)L、bitsize進(jìn)行修改,可得到任意整數(shù)倍分頻。例如5分頻,令參數(shù)L=4、bitsize=322七、加法器 加法器是能實現(xiàn)算術(shù)運算的邏輯電路,包括半加器和全加器。加法器是構(gòu)成算術(shù)運算的基本單元。半加器 不考慮來自低位的進(jìn)位而是將兩個1位二進(jìn)制數(shù)直接相加,稱為半加。sumcaba 和 b是兩個1位二進(jìn)制數(shù)輸入端,sum是相加結(jié)果,c是進(jìn)位輸出。23用行為描述的方法:module half_adder ( a, b, sum, c ); input a, b; output sum,c; assign sum=ab; assign c=a&b;end

17、module用結(jié)構(gòu)描述的方法:module half_adder ( a, b, sum, c ); input a, b; output sum,c; xor n1 (sum, a, b); and n2 ( c, a, b );endmodule242. 全加器 實現(xiàn)兩個1位二進(jìn)制數(shù)相加,除考慮本位被加數(shù)和加數(shù)相加外,還考慮來自低位的進(jìn)位,這三者相加,稱為全加。實現(xiàn)這樣全加操作的電路稱為全加器。sumcabcincin是進(jìn)位輸入25module full_adder ( a, b, cin, sum, c ); input a, b, cin; output sum,c; reg sum,

18、 c; reg t1, t2, t3; always ( a or b or cin) begin sum=(ab)cin; t1=a&cin; t2=b&cin; t3=a&b; c=( t1|t2 )|t3; endendmodule26八、移位寄存器 移位寄存器是寄存器的一種,除了可以存儲數(shù)據(jù)外,還可以把內(nèi)部的數(shù)據(jù)進(jìn)行移位。移位是指該寄存器內(nèi)的數(shù)據(jù)可以再移位脈沖(時鐘信號)作用下依次左移或右移。因此移位寄存器不但可以存放數(shù)據(jù),還可以實現(xiàn)數(shù)據(jù)的串-并轉(zhuǎn)換等。串行輸入、串行輸出的移位寄存器 移位功能可以通過在always語句塊內(nèi)使用for語句描述。zdclkd是串行數(shù)據(jù)輸入端,z是串行數(shù)據(jù)輸

19、出端,clk是移位時鐘實現(xiàn)右移操作。27module shift_reg ( d, clk, z ); input d, clk; output z; parameter num_reg=6; reg 1:num_reg q; integer p; always ( negedge clk ) begin for ( p=1; pnum_reg; p=p+1 ) qp+1=qp; /寄存器內(nèi)數(shù)據(jù)數(shù)據(jù)右移一位 q1=d; /右移一位后最高位q1變空,就可以把串行數(shù)據(jù)D再加載一位到q1 end assign z=qnum_reg; / 最低位qnum_reg在右移時輸出到zendmodule 28

20、module dff_1 ( data, clk, reset, preset, q); input data, clk, reset, preset; output q; reg q; always ( posedge clk or negedge reset or posedge preset) if (! reset ) q=1b0; else if ( ! preset ) q=1b1; else q=data;endmodule1. 帶異步復(fù)位和異步置數(shù)的上升沿D觸發(fā)器presetresetdataclkq292. 帶異步復(fù)位端的鎖存器module d_latch ( data, e

21、n, reset, q); input data, en, reset; output q; reg q; always ( data or en or reset ) if (! reset ) q=1b0; else if (en) q=data;endmodule resetdataenq303. 8-3 優(yōu)先編碼器moduel coder8-3 ( in, out, en ) input 7:0 in; input en; output 2:0 out; reg out; always ( in ) if (! en ) out=3b0; else casex (in) 8b00000

22、001: out=3b000; /in0為1時輸出編碼000 8b0000001x: out=3b001; /in1為1時輸出編碼001 8b000001xx: out=3b010; /in2為1時輸出編碼010 8b00001xxx: out=3b011; /in3為1時輸出編碼011 8b0001xxxx: out=3b100; /in4為1時輸出編碼100 8b001xxxxx: out=3b101; /in5為1時輸出編碼101 8b01xxxxxx: out=3b110; /in6為1時輸出編碼110 8b1xxxxxxx: out=3b111; /in7為1時輸出編碼111 end

23、caseendmodule314. 4位串行進(jìn)位加法器全加器模塊:module adder ( a, b, cin, sum, c ); input a, b, cin; output sum,c; reg sum, c; always ( a or b or cin) begin sum=(ab)cin; c=a&b+a&cin+b&cin; endendmodule32module adder4_bit ( a, b, cin, sum, cout ); input 3:0 a,b; input cin; output 3:0 sum; output cout; wire 2:0 c; /

24、實例化4個1位全加器,并用c串連起來。 adder n0 ( a0,b0,c,sum0,c0); adder n1 ( a1,b1,c0,sum1,c1); adder n2 ( a2,b2,c1,sum2,c2); adder n3 ( a3,b3,c2,sum3,cout);endmodule33存儲器設(shè)計一、ROM 只讀存儲器ROM是一種具有n個輸入、m個輸出的組合邏輯電路。只讀存儲器ROM是一種非易失性存儲器,斷電不會丟失數(shù)據(jù)。A0A1A2An-1D0D1Dm-1A0An-1為N個地址輸入信號,D0.Dm-1為M個數(shù)據(jù)輸出信號,該存儲器有2N個存儲單元,每個單元M位。34A2A1A0D3D2D1D0000111000111010101011011011110000011010010110010011110003輸入、4輸出的ROM的真值表35

溫馨提示

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

最新文檔

評論

0/150

提交評論