디지털 논리 설계, 컴퓨터 제어 시스템의 동작을 상태와 상태 간의 전이로 표현하는 개념적 모델이다.
입력에 따라 일정한 상태(state)를 가지며, 현재 상태와 입력 값에 의해 다음 상태(next state) 와 출력이 결정된다.
시스템이 가질 수 있는 상태의 수가 유한하므로 Finte(유한) 상태 머신이라 부른다.
동작 방식에는Mealy model과Moore model이 있다.
Mealy Machine 특징
입력이 변할 때 마다 상태(state) 변화가 가능하다.
상태(state) 변화와 함께 출력이 생성된다.
입력이 변하면 상태가 같더라도 출력이 바로 변할 수 있다.
출력이 입력과 상태에 의존하므로 Moore FSM과 상대적으로 복잡하다.
신호처리, 통신 프로토콜, 데이터 압축 등 실시간 처리 시스템에서 사용된다.
빠른 응답 시간이 필요한 시스템에 적합하다.
Mealy Model FSM의 상태도
사용 코드
module fsm_mealy(
iCLK, // 1MHz 기준 클록
iRESETn, // Active-Low reset
iIN, // Mealy FSM의 입력
oOUT, // Mealy FSM의 출력
oSTATE); // Mealy FSM의 현재 상태
localparam A = 2'b00, B = 2'b01, C = 2'b10, D = 2'b11;
input iCLK, iRESETn;
input iIN;
output oOUT;
output [1:0] oSTATE;
reg out;
reg [1:0] curr_state, next_state;
// Combinational block with next state and output of Mealy FSM
always @ (curr_state or iIN) begin
case(curr_state)
A :
if (iIN) begin
next_state= B;
out = 1;
end
else begin
next_state= A;
out = 0;
end
B :
if (iIN) begin
next_state= D;
out = 1;
end
else begin
next_state= C;
out = 0;
end
C :
if (iIN) begin
next_state= D;
out = 1;
end
else begin
next_state= C;
out = 0;
end
D :
if (iIN) begin
next_state= A;
out = 1;
end
else begin
next_state= D;
out = 1;
end
default :
begin
next_state= next_state;
out = out;
end
endcase
end
// Sequential block
always @(posedge iCLK or negedge iRESETn)
if (!iRESETn)
curr_state<= A;
else
curr_state<= next_state;
assign oOUT = out;
assign oSTATE= curr_state;
endmodule