對於狀態機的總結以及Gray碼基本概念
阿新 • • 發佈:2018-12-03
一、狀態機總結
狀態機分為兩種
一種稱為Mealy狀態機,它的時序邏輯輸出不但取決於狀態還取決於輸入;
另外一種稱為Moore狀態機,它的輸出只取決於當前的狀態。實際的設計工作中大部分都是Mealy狀態機。
有限狀態機設計一般步驟:1、邏輯抽象,得出狀態轉換圖;2、狀態化簡;3、狀態分配;4、選定觸發器的型別並求出狀態方程、驅動方程和輸出方程;5、按照方程得出邏輯圖。
1、“111”序列檢測器(米里型)
module fsm111 ( clk,rst,x,z) ; input clk,rst,x; output reg z ; reg[1:0] state; parameter s0=2’b00,s1=2’b01,s2=2’b11;//狀態轉換圖在心中,哈哈
[email protected](posedge clk or negedge rst) begin if(!rst) state<=s0; else case(state) s0:begin if(x) state<=s1 ; else state<=s0 ; end s1:begin if(x) state<=s2; else state<=s0 ; end s2:begin if(x) state<=s2 ; else state<=s0 ; end defualt : state<=s0; always @(state) begin case(state) s2: begin if(x) z=1’b1; else z=1’b0; defualt : z=1’b0; end endmodule
2、“101”序列檢測器(摩爾型)
module fsm101 ( clk,rst,x,z) ; input clk,rst,x; output reg z ; reg[1:0] state,next_state; parameter s0=2’b00,s1=2’b01,s2=2’b11,s3=2’b10;//狀態編碼,採用格雷碼 [email protected](posedge clk or negedge rst) begin if(!rst) state<=s0; else state<=next_state; end always(state or x) begin case(state) s0:begin if(x) next_state<=s1 ; else next_state<=s0 ; end s1:begin if(x) next_state<=s1; else next_state<=s2 ; end s2:begin if(x) next_state<=s3 ; else next_state<=s0 ; end s3:begin if(x) next_state<=s1 ; else next_state<=s2 ; end default : state<=s0; endcase end always @(state) begin case(state) s3: z=1’b1; default: z=1’b0; endcase end endmodule
3、“1001”序列檢測器
module fsm1001 ( clk,clr,x,z) ;
input clk,clr,x; output reg z ;
reg[1:0] state;
parameter s0=2’b00,s1=2’b01;
parameter s2=2’b11,s3=2’b10;
always @(posedge clk or posedge clr)
begin if(clr) state<=s0;
else case(state)
s0:begin if(x) state<=s1 ;
else state<=s0 ; end
s1:begin if(x) state<=s1;
else state<=s2 ; end
s2:begin if(x) state<=s1 ;
else state<=s3 ; end
s3:begin if(x) state<=s1;
else state<=s0 ; end
defualt : state<=s0;
always @(state)
begin case(state)
s3: begin if(x) z=1’b1;
else z=1’b0;
defualt : z=1’b0;
end
endmodule
二、Gray碼基本概念
1、格雷碼概念
在一組數的編碼中,若任意兩個相鄰的程式碼只有一位二進位制數不同,則稱這種編碼為格雷碼;另外由於最大數與最小數之間也僅一位數不同,即“首尾相連”,因此又稱迴圈碼或反射碼;
2、優點:
若採用8421碼,則數0111變到1000時四位均要變化,而在實際電路中,4位的變化不可能絕對同時發生,則計數中可能出現短暫的其它程式碼(1100、1111等)。在特定情況下可能導致電路狀態錯誤或輸入錯誤,使用格雷碼可以避免這種錯誤。
3.Gray碼的編碼形式(我們討論四位Gray碼,二位三位方法相同)
十進位制數 | 4位二進位制碼 | 四位典型Gray碼 |
---|---|---|
0 | 0000 | 0000 |
1 | 0001 | 0001 |
2 | 0010 | 0011 |
3 | 0011 | 0010 |
4 | 0100 | 0110 |
5 | 0101 | 0111 |
6 | 0110 | 0101 |
7 | 0111 | 0100 |
8 | 1000 | 1100 |
9 | 1001 | 1101 |
10 | 1010 | 1111 |
11 | 1011 | 1110 |
12 | 1100 | 1010 |
13 | 1101 | 1011 |
14 | 1110 | 1001 |
15 | 1111 | 1000 |