verilog有限狀態(tài)機(jī)實(shí)驗(yàn)報(bào)告(附源代碼)_第1頁
verilog有限狀態(tài)機(jī)實(shí)驗(yàn)報(bào)告(附源代碼)_第2頁
verilog有限狀態(tài)機(jī)實(shí)驗(yàn)報(bào)告(附源代碼)_第3頁
verilog有限狀態(tài)機(jī)實(shí)驗(yàn)報(bào)告(附源代碼)_第4頁
verilog有限狀態(tài)機(jī)實(shí)驗(yàn)報(bào)告(附源代碼)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、有限狀態(tài)機(jī)實(shí)驗(yàn)報(bào)告一、 實(shí)驗(yàn)?zāi)康膌 進(jìn)一步學(xué)習(xí)時(shí)序邏輯電路l 了解有限狀態(tài)機(jī)的工作原理l 學(xué)會使用“三段式”有限狀態(tài)機(jī)設(shè)計(jì)電路l 掌握按鍵去抖動(dòng)、信號取邊沿等處理技巧二、 實(shí)驗(yàn)內(nèi)容用三段式有限狀態(tài)機(jī)實(shí)現(xiàn)序列檢測功能電路a) 按從高位到低位逐位串行輸入一個(gè)序列,輸入用撥動(dòng)開關(guān)實(shí)現(xiàn)。b) 每當(dāng)檢測到序列“1101”(不重疊)時(shí),LED指示燈亮,否則滅,例如i. 輸入: 1 1 0 1 1 0 1 1 0 1 ii. 輸出: 0 0 0 1 0 0 0 0 0 1 c) 用八段數(shù)碼管顯示最后輸入的四個(gè)數(shù),每輸入一個(gè)數(shù),數(shù)碼管變化一次d) 按鍵按下的瞬間將撥動(dòng)開關(guān)狀態(tài)鎖存i. 注意防抖動(dòng)(按鍵按下瞬間

2、可能會有多次的電平跳變)三、 實(shí)驗(yàn)結(jié)果1. Rst_n為0時(shí)數(shù)碼管顯示0000,led燈不亮,rst_n撥為1,可以開始輸入,將輸入的開關(guān)撥到1,按下按鈕,數(shù)碼管示數(shù)變?yōu)?001,之后一次類推分別輸入1,0,1,按下按鈕后,數(shù)碼管為1101,LED燈亮,再輸入1,LED燈滅,之后再輸入0,1(即共輸入1101101使1101重疊,第二次LED燈不亮),之后單獨(dú)輸入1101,LED燈亮2. 仿真圖像剛啟動(dòng)時(shí)使用rst_n一段時(shí)間后其中Y代表輸出,即控制led燈的信號,sel表示數(shù)碼管的選擇信號,seg表示數(shù)碼管信號四、 實(shí)驗(yàn)分析1、 實(shí)驗(yàn)基本結(jié)構(gòu)其中狀態(tài)機(jī)部分使用三段式結(jié)構(gòu):2、 整體結(jié)構(gòu)為:建

3、立一下模塊:Anti_dither.v輸入按鍵信號和時(shí)鐘信號,輸出去除抖動(dòng)的按鍵信號生成的脈沖信號op這一模塊實(shí)現(xiàn)思路是利用按鈕按下時(shí)會持續(xù)10ms以上而上下抖動(dòng)時(shí)接觸時(shí)間不超過10ms來給向下接觸的時(shí)間計(jì)時(shí),達(dá)到上限時(shí)間才產(chǎn)生輸出。Num.v輸入op和序列輸入信號A,時(shí)鐘信號clk和復(fù)位信號,復(fù)位信號將num置零,否則若收到脈沖信號則將num左移一位并將輸入存進(jìn)最后一位。輸出的num即為即將在數(shù)碼管上顯示的值Scan.v輸入時(shí)鐘信號,對其降頻以產(chǎn)生1ms一次的掃描信號。Trigger.v這一模塊即為狀態(tài)機(jī)模塊,按三段式書寫。整個(gè)模塊的輸入為時(shí)鐘信號,脈沖信號,序列輸入變量,復(fù)位信號,輸出LE

4、D燈控制信號Y。第一段是狀態(tài)轉(zhuǎn)換模塊,為時(shí)序邏輯電路,功能是描述次態(tài)寄存器遷移到現(xiàn)態(tài)寄存器。即如果收到復(fù)位信號將現(xiàn)態(tài)置零,否則將上次得到的next_state賦給current_state。第二段是描述狀態(tài)轉(zhuǎn)移的條件判斷,即對于輸入的現(xiàn)態(tài),判定對于不同的輸入A(或無輸入),下一狀態(tài)將怎么確定。為組合邏輯電路。第三段是格式化描述次態(tài)寄存器輸出,即處理輸出信號。即對于不同的現(xiàn)態(tài)和輸入得到輸出。Display.v這一模塊輸入已經(jīng)得到的結(jié)果,來產(chǎn)生顯示。輸入時(shí)鐘信號,掃描信號,復(fù)位信號和之前得到的num和Y輸出,來得到數(shù)碼管的顯示sel和seg以及LED燈的亮滅。其中對得到的掃描信號再次分頻,得到1/

5、4的頻率分別顯示num的四位。Top.v綜合各模塊。測試代碼:用forever使時(shí)鐘動(dòng)起來后,先復(fù)位,然后模擬各輸出和按鈕信號的短時(shí)抖動(dòng),并將上述過程放入forever中重復(fù)進(jìn)行。五、 附錄源代碼:Anti_dither.vmodule anti_dither( input clk, input btn, input rst_n, output reg op ); reg 19:0 cnt; reg oi;initialbeginop=0; cnt=0; oi=0;endalways(posedge clk)beginif(op=1)op=0;if(btn!=oi)beginif(cnt=20

6、'd1000_000)cnt=0;elsebegincnt=cnt+1;if(cnt=20'd999_999)beginoi=btn;if(btn=1)op=1;endendendelsecnt=0;endendmodulenum.vmodule num( input op, input A, input clk, input rst_n, output reg 3:0 num );initial num=4'b0;always(posedge clk)if(rst_n)num=4'b0;else if(op)beginnum3=num2;num2=num1;n

7、um1=num0;num0=A;endendmodulescan.vmodule scan( input clk, output reg scan );reg 16:0 cnt_scan;initial cnt_scan=17'b0;initial scan=0;always(posedge clk)beginif(cnt_scan=17'd99_999)begincnt_scan=0;scan=17'b1;endelsebegincnt_scan=cnt_scan+17'b1;scan=17'b0;endendendmoduletrigger.vmod

8、ule trigger( input clk, input op, input A, input rst_n, output reg Y /output reg 2:0 NQ, /output reg 2:0 Q ); reg 2:0 Q;reg 2:0 NQ;always(posedge clk or negedge rst_n)beginif(rst_n)Q=3'b0;elseQ=NQ;endalways(*)beginif(rst_n)NQ=3'b0;elsebeginif(op)case(Q)3'b000:beginif(A)NQ=3'b001;else

9、NQ=3'b000;end3'b001:beginif(A)NQ=3'b010;elseNQ=3'b000;end3'b010:beginif(A)NQ=3'b010;elseNQ=3'b011;end3'b011:beginif(A)NQ=3'b100;elseNQ=3'b000;end3'b100:beginif(A)NQ=3'b001;elseNQ=3'b000;enddefault:;endcase/else ifelseNQ=Q;endendalways(posedge clk o

10、r negedge rst_n)beginif(rst_n)Y=0;else if(NQ=3'b100)Y=1;elseY=0;endendmoduledisplay.vmodule display( input scan, input clk, input rst_n, input 3:0 num, input Y, output reg led, output reg 3:0 sel, output reg 7:0 seg ); reg 1:0 a;reg display_num;initial a=2'b0;initial display_num=0;initial se

11、g=8'b0000_0011;initial led=0;initial sel=4'b0111;always(posedge clk)beginif(rst_n)begina=2'b0;display_num=0;endelse if(scan)beginif(a=2'b11)a=2'b0;elsea=a+2'b1;endcase(a)2'b0:beginsel=4'b0111;display_num=num3;end2'b01:begindisplay_num=num2;sel=4'b1011;end2'

12、;b10:begindisplay_num=num1;sel=4'b1101;enddefault:beginsel=4'b1110;display_num=num0;endendcaseif(display_num)seg=8'b1001_1111;elseseg=8'b0000_0011;endalways(posedge clk)beginif(Y)led=1;elseled=0;endendmoduletop.vmodule top( input clk, input rst_n, input btn, input A, output 7:0seg, o

13、utput 3:0 sel, output led ); wire oi; wire op; wire 3:0 num; wire scan; wire Y; anti_ditheru_anti_dither(.clk(clk),.btn(btn),.rst_n(rst_n),.op(op);numu_num(.op(op),.A(A),.rst_n(rst_n),.clk(clk),.num(num);displayu_display(.scan(scan),.clk(clk),.rst_n(rst_n),.num(num),.Y(Y),.led(led),.sel(sel),.seg(se

14、g);scanu_scan(.clk(clk),.scan(scan);triggeru_trigger(.op(op),.A(A),.clk(clk),.rst_n(rst_n),.Y(Y);endmodule仿真代碼:module test2;/ Inputsreg clk;reg rst_n;reg btn;reg A;/ Outputswire 7:0 seg;wire 3:0 sel;wire led;wire 2:0 NQ;/ Instantiate the Unit Under Test (UUT)top uut (.clk(clk), .rst_n(rst_n), .btn(b

15、tn), .A(A), .seg(seg), .sel(sel), .led(led), .NQ(NQ);initial begin#100;clk = 0;foreverbegin#1;clk=clk;endendinitialbeginrst_n = 0;btn = 0;A = 0;#100;rst_n=1;A=1;foreverbeginA=1;btn=1;#2000_000;btn=0;#20;btn=1;#20;btn=0;#2000_000;A=1;btn=1;#2000_000;btn=0;#20;btn=1;#20;btn=0;#2000_000;A=0;btn=1;#2000

16、_000;btn=0;#20;btn=1;#20;btn=0;#2000_000;A=1;btn=1;#1100_000;btn=0;#20;btn=1;#20;btn=0;#2000_000;endendendmodule六、 總結(jié)1. 一定要注意根據(jù)PPT上的要求來,由于沒看仔細(xì)PPT的要求,開始用的不是三段式電路而是用觸發(fā)器的門電路來間接實(shí)現(xiàn),要麻煩的多。而且沒有看清序列不重疊的要求,導(dǎo)致自己推導(dǎo)序列重疊的狀態(tài)轉(zhuǎn)換圖花了很多不必要的時(shí)間。2. 這次感覺比較有效率的一個(gè)方法是一個(gè)模塊一個(gè)模塊的分析,先分析出電路需要哪些基本功能,分好模塊,確定輸入輸出,最后考慮模塊內(nèi)的具體實(shí)現(xiàn)。比如拿到有限狀態(tài)機(jī)的題目,首先考慮肯定要有降頻,展示,防抖動(dòng)等模塊以及獲得輸出數(shù)據(jù)的模塊,最后考慮狀態(tài)機(jī)模塊內(nèi)的實(shí)現(xiàn)。3. 一開始時(shí)出現(xiàn)的問題是四個(gè)數(shù)碼管顯示相同的數(shù)字,即按0全部顯示0,按1全部顯示·1,分析可能是由于控制移位的信號輸出太快,導(dǎo)致輸入的一位直接沖掉了之前的成了4位,后來補(bǔ)上了op信號,即受到按鈕按下的脈沖信號再移位。4. 之后出現(xiàn)的問題是輸入1101LED燈始終不亮。經(jīng)過仿真從源頭搜索發(fā)現(xiàn)防抖動(dòng)模塊寫的有問題,后來重寫了該模塊。5. 重寫該模塊后op的輸出沒問題了,但是仍然LED燈不亮。后來把Q和NQ用多余的LED燈輸出測試,發(fā)現(xiàn)狀態(tài)變化非常奇怪,始終在010和

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論