Verilog筆記.3.有限狀態機
阿新 • • 發佈:2018-04-24
情況 || 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: begin18 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) begin28 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 endmoduleView Code
狀態必須明確賦值,通常使用參數(parameters)或宏定義(define)語句加上賦值語句來實現。
Verilog筆記.3.有限狀態機