1. 程式人生 > >Verilog筆記.3.有限狀態機

Verilog筆記.3.有限狀態機

情況 || mage 參數 lose default def ril 定義

有限狀態機
有限狀態機是由寄存器組和組合邏輯構成的硬件時序電路,其狀態(即由寄存器組的1和0的組合狀態
所構成的有限個狀態)只可能在同一時鐘跳變沿的情況下才能從一個狀態轉向另一個狀態,究竟轉向
哪一狀態還是留在原狀態不但取決於各個輸入值,還取決於當前所在狀態。(這裏指的是米裏Mealy型有限狀態
機,而莫爾Moore型有限狀態機究竟轉向哪一狀態只決於當前狀態。)

技術分享圖片

采用獨熱碼實現的有限狀態機。采用了獨熱編碼後有了多余的狀態,就有一些不可到達的狀態,為此在CASE語句的最後需要增加default分支項,以確保多余狀態能回到Idle狀態。

 1 module fsm (Clock, Reset, A, F, G);
2 input Clock, Reset, A; 3 output F,G; 4 reg F,G; 5 reg [3:0] state ; 6 parameter Idle = 4’b1000, 7 Start = 4’b0100, 8 Stop = 4’b0010, 9 Clear = 4’b0001; 10 always @(posedge clock) 11 if (!Reset) 12 begin 13 state <= Idle; F<=0; G<=0; 14 end 15 else 16 case (state) 17 Idle: begin
18 if (A) begin 19 state <= Start; 20 G<=0; 21 end 22 else state <= Idle; 23 end 24 Start: if (!A) state <= Stop; 25 else state <= Start; 26 Stop: begin 27 if (A) begin
28 state <= Clear; 29 F <= 1; 30 end 31 else state <= Stop; 32 end 33 Clear: begin 34 if (!A) begin 35 state <=Idle; 36 F<=0; G<=1; 37 end 38 else state <= Clear; 39 end 40 default: state <=Idle; 41 endcase 42 endmodule

用always語句和連續賦值語句把狀態機的觸發器部分和組合邏輯部分分成兩部分來描述。

 1 module fsm (Clock, Reset, A, F, G);
 2 input Clock, Reset, A;
 3 output F,G;
 4 
 5 reg [1:0] state ;
 6 wire [1:0] Nextstate;
 7 parameter     Idle = 2’b00, 
 8             Start = 2’b01,
 9             Stop = 2’b10, 
10             Clear = 2’b11;
11 
12 always @(posedge Clock)
13 begin
14     if (!Reset)
15     begin
16     state <= Idle;
17     end
18     else
19     state <= Nextstate;
20 end
21 
22 assign Nextstate =     ( state == Idle ) ? ( A ? Start : Idle ) :
23                     ( state==Start ) ? ( !A ? Stop : Start ) :
24                     ( state== Stop ) ? ( A ? Clear : Stop ) :
25                     ( state== Clear) ? ( !A ? Idle : Clear) : 
26                     Idle;
27 assign F = (( state == Stop) && A );
28 assign G = (( state == Clear) && (!A || !Reset));
29 
30 endmodule

用沿觸發的always語句和電平敏感的always語句把狀態機的觸發器部分和組合邏輯部分分成兩部分來描述。

技術分享圖片
 1 module fsm (Clock, Reset, A, F, G);
 2 input Clock, Reset, A;
 3 output F,G;
 4 
 5 reg [1:0] state, Nextstate;
 6 parameter     Idle = 2’b00, 
 7             Start = 2’b01,
 8             Stop = 2’b10, 
 9             Clear = 2’b11;
10 
11 always @(posedge Clock)
12 begin
13     if (!Reset)
14     begin
15         state <= Idle;
16     end
17     else
18         state <= Nextstate;
19 end
20 
21 always @( state or A )
22 begin
23     F=0;
24     G=0;
25     if (state == Idle)
26     begin
27         if (A)
28             Nextstate = Start;
29         else
30             Nextstate = Idle;
31         G=1;
32     end
33     else
34         if (state == Start)
35             if (!A)
36                 Nextstate = Stop;
37             else
38                 Nextstate = Start;
39         else
40             if (state == Stop)
41                 if (A)
42                     Nextstate = Clear;
43                 else
44                     Nextstate = Stop;
45             else
46                 if (state == Clear)
47                 begin
48                     if (!A)
49                         Nextstate = Idle;
50                     else
51                         Nextstate = Clear;
52                     F=1;
53                 end
54                 else
55                     Nextstate= Idle;
56     end
57 end 
58 endmodule
View Code

狀態必須明確賦值,通常使用參數(parameters)或宏定義(define)語句加上賦值語句來實現。

Verilog筆記.3.有限狀態機