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

下載本文檔

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

文檔簡(jiǎn)介

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

2、果1. Rst_n為0時(shí)數(shù)碼管顯示0000,led燈不亮,rst_n撥為1,可以開(kāi)始輸入,將輸入的開(kāi)關(guān)撥到1,按下按鈕,數(shù)碼管示數(shù)變?yōu)?001,之后一次類(lèi)推分別輸入 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燈的信號(hào),sei表示數(shù)碼管的選擇信號(hào),seg表示數(shù)碼管信號(hào)四、實(shí)驗(yàn)分析1、實(shí)驗(yàn)基本結(jié)構(gòu)N f £其中狀態(tài)機(jī)部分使用三段式結(jié)構(gòu):>L>第三段al會(huì)迺a

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

4、整個(gè)模塊的輸入為時(shí)鐘信號(hào),脈沖信號(hào),序列輸入變量,復(fù)位信號(hào),輸出LED燈控制信號(hào)丫。第一段是狀態(tài)轉(zhuǎn)換模塊,為時(shí)序邏輯電路,功能是描述次態(tài)寄存器遷移到現(xiàn)態(tài)寄存器。 即如果收到復(fù)位信號(hào)將現(xiàn)態(tài)置零,否則將上次得到的next_state賦給current_state。第二段是描述狀態(tài)轉(zhuǎn)移的條件判斷,即對(duì)于輸入的現(xiàn)態(tài),判定對(duì)于不同的輸入 A(或無(wú)輸入),下一狀態(tài)將怎么確定。為組合邏輯電路。第三段是格式化描述次態(tài)寄存器輸出,即處理輸出信號(hào)。即對(duì)于不同的現(xiàn)態(tài)和輸入得到 輸出。Display.v 這一模塊輸入已經(jīng)得到的結(jié)果,來(lái)產(chǎn)生顯示。 輸入時(shí)鐘信號(hào),掃描信號(hào),復(fù)位信號(hào)和之前得到的 num 和 Y 輸出,來(lái)得

5、到數(shù)碼管的顯 示 sel 和 seg 以及 LED 燈的亮滅。其中對(duì)得到的掃描信號(hào)再次分頻,得到1/4 的頻率分別顯示 num 的四位。Top.v 綜合各模塊。測(cè)試代碼:用 forever 使時(shí)鐘動(dòng)起來(lái)后,先復(fù)位,然后模擬各輸出和按鈕信號(hào)的短時(shí)抖動(dòng),并將上 述過(guò)程放入 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;initial begin op=0;cnt=0;oi=0;endalways(pos

6、edge clk)begin if(op=1) op=0;if(btn!=oi)begin if(cnt=20'd1000_000) cnt=0;elsebegincnt=cnt+1;if(cnt=20'd999_999) begin oi=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) i

7、f(rst_n) num=4'b0;else if(op)beginnum3=num2; num2=num1;num1=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) begin if(cnt_scan=17'd99_999) begincnt_scan=0;scan=17'b1;endelsebegin cnt_s

8、can=cnt_scan+17'b1; scan=17'b0;endendendmoduletrigger.vmodule 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) begin if(rst_n) Q=3'b0; else Q=NQ; endalways(*) begin if(rst_n)NQ=3

9、9;b0; elsebegin if(op) case(Q) 3'b000: beginif(A)NQ=3'b001; elseNQ=3'b000;end3'b001:begin if(A) NQ=3'b010; else NQ=3'b000;end3'b010:begin if(A) NQ=3'b010; else NQ=3'b011;end 3'b011:beginif(A)NQ=3'b100;elseNQ=3'b000;end3'b100:beginif(A) NQ=3'b00

10、1;else NQ=3'b000;enddefault:Jendcase/else ifelseNQ=Q;endendalways(posedge clk or negedge rst_n) begin if(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);re

11、g 1:0 a;reg display_num;initial a=2'b0;initial display_num=0;initial seg=8'b0000_0011;initial led=0;initial sel=4'b0111;always(posedge clk) begin if(rst_n) begin a=2'b0;display_num=0;endelse if(scan)beginif(a=2'b11) a=2'b0;elsea=a+2'b1;endcase(a)2'b0:begin sel=4'b

12、0111; display_num=num3; end2'b01:begin display_num=num2; sel=4'b1011;end2'b10:begindisplay_num=num1; sel=4'b1101;enddefault:begin sel=4'b1110; display_num=num0; end endcase if(display_num) seg=8'b1001_1111;else seg=8'b0000_0011;endalways(posedge clk) begin if(Y)led=1;else

13、led=0;endendmoduletop.vmodule top( input clk, input rst_n, input btn, input A, output 7:0seg, output 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 );(numdispla

14、yu_display(.scan(scan.clk(clk.rst_n(rst_n ),.num(num.Y(Y.led(led.sel(sel.seg);(segscanu_scan(.clk(clk.scan );(scantriggeru_trigger(.op(op.A(A.clk(clk.rst_n(rst_n ),.Y(Y),),),),),),),),),),);),),),endmodule仿真代碼:module test2;/ Inputs reg clk; reg rst_n;reg btn; reg A;/ Outputs wire 7:0 seg;wire 3:0 se

15、l; wire led;wire 2:0 NQ;/ Instantiate the Unit Under Test (UUT) top uut (.clk(clk),.rst_n(rst_n),.btn(btn),.A(A),.seg(seg),.sel(sel),.led(led),.NQ(NQ);initial begin#100;clk = 0;foreverbegin#1;clk=clk;end endinitial begin rst_n = 0; btn = 0;A = 0; #100; rst_n=1;A=1;forever begin A=1;btn=1; #2000_000;

16、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_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上的要求來(lái),由于沒(méi)看仔細(xì)PPT的要求,開(kāi)始用的不是三段式電 路而是用觸發(fā)器的門(mén)電路來(lái)間接實(shí)現(xiàn),要麻煩的多

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論