設(shè)計(jì)背景:
狀態(tài)機(jī)是描述各種復(fù)雜時(shí)序的時(shí)序行為,是使用HDL進(jìn)行數(shù)學(xué)邏輯設(shè)計(jì)中非常重要的方法之一,狀態(tài)機(jī)分為摩爾機(jī)和米粒機(jī),當(dāng)輸出只和狀態(tài)有關(guān)系的話稱為摩爾機(jī),當(dāng)輸出不僅和狀態(tài)有關(guān)系也和輸入信號(hào)有關(guān)系的時(shí)候稱為米粒機(jī),米粒機(jī)和摩爾機(jī)的電路原型我就不在這里給大家介紹了。
狀態(tài)機(jī)是由狀態(tài)寄存器和組合邏輯電路構(gòu)成,能夠根據(jù)控制信號(hào)按照預(yù)先設(shè)計(jì)的狀態(tài)進(jìn)行狀態(tài)的轉(zhuǎn)移,是協(xié)調(diào)相關(guān)信號(hào)的動(dòng)作,完成特定操作的控制中心。比如我們生活中遇到的問題,健康---感冒---健康,這個(gè)就是一個(gè)狀態(tài)的轉(zhuǎn)移圖,從健康狀態(tài)到感冒狀態(tài)在到健康狀態(tài)。
設(shè)計(jì)原理:
我認(rèn)為對于我們初學(xué)者來說我們只要只要狀態(tài)機(jī)就是當(dāng)這個(gè)狀態(tài)也就是當(dāng)這個(gè)時(shí)鐘來的時(shí)候發(fā)生這件事情,當(dāng)下各時(shí)鐘來的時(shí)候發(fā)生另一件事,也就是說發(fā)生這件事后,跳轉(zhuǎn)下一個(gè)時(shí)鐘發(fā)生另一件事情,兩個(gè)事情發(fā)生沒有關(guān)系。我們理解初學(xué)者理解這個(gè)就行了,不用理解高深的二段式,三段式。
我們會(huì)在下面的設(shè)計(jì)中用到簡單的狀態(tài)機(jī)讓大家明白簡單的狀態(tài)機(jī)。
我們的設(shè)計(jì)也是一個(gè)流水燈,我們的設(shè)計(jì)是在復(fù)位的時(shí)候讓4個(gè)等全熄滅,第一個(gè)上升沿點(diǎn)亮一個(gè),第二個(gè)點(diǎn)亮下一個(gè),依次類推。
我們的寫法可以這樣想,當(dāng)?shù)谝粋€(gè)狀態(tài)也就是一個(gè)上升沿點(diǎn)亮第一個(gè)燈,然后跳轉(zhuǎn)下一個(gè)狀態(tài)點(diǎn)亮第二個(gè)燈,第三個(gè)點(diǎn)亮下一個(gè)。。。。
設(shè)計(jì)架構(gòu)圖:
?
設(shè)計(jì)代碼:
設(shè)計(jì)模塊
0moduleled_run (clk,rst_n,led);
1
2 inputclk,rst_n; //定義輸入輸出
3
4 outputreg[3:0]led;
5
6 reg[10:0]count; //定義一個(gè)時(shí)間寄存器
7 regclk_1hz; //定義一個(gè)時(shí)鐘
8 reg[1:0]state;//定義狀態(tài)
9
10 always@(posedgeclk)
11 if(!rst_n)
12 begin
13 clk_1hz <=1;
14 count <=0;
15 end
16 elseif(count <(5/1/2-1))//計(jì)數(shù)來產(chǎn)生一個(gè)時(shí)鐘
17 count <=count +1'd1;
18 else
19 begin
20 count <=26'd0;
21 clk_1hz <=~clk_1hz;
22 end
23
24 always@(posedgeclk_1hz)
25 if(!rst_n)
26 led <=4'b1111; //復(fù)位熄滅4個(gè)燈
27 else
28 case(state)
29 0 : begin //第一個(gè)狀態(tài)點(diǎn)亮第一個(gè)燈,然后跳轉(zhuǎn)下 一個(gè)狀態(tài)
30 state <=1;
31 led <=4'b1110;
32 end
33
34 1 : begin //第2個(gè)狀態(tài)點(diǎn)亮第2個(gè)燈,然后跳轉(zhuǎn)下 一個(gè)狀態(tài)
35 state <=2;
36 led <=4'b1101;
37 end
38
39 2 : begin //第3個(gè)狀態(tài)點(diǎn)亮第3個(gè)燈,然后跳轉(zhuǎn)下 一個(gè)狀態(tài)
40 state <=3;
41 led <=4'b1011;
42 end
43 3 : begin //第4個(gè)狀態(tài)點(diǎn)亮第4個(gè)燈,然后跳轉(zhuǎn)0狀態(tài)
44 state <=0;
45 led <=4'b0111;
46 end
47
48 default:state <=0;//否則跳轉(zhuǎn)0狀態(tài)
49 endcase
50
51endmodule
測試模塊
0`timescale1ns/1ps//例化時(shí)標(biāo)
1
2moduletb();
3
4 regclk,rst_n;
5 wire[3:0]led;
6
7 initialbegin
8
9 clk =1;
10 rst_n =0;
11
12 #200.1rst_n =1;
13
14
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605523 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27633
發(fā)布評論請先 登錄
相關(guān)推薦
評論