FSM으로 패턴 찾기

김준혁·2026년 2월 24일

저항 색띠 읽는법 알아두기!

다이오드: 전류를 한쪽 방향으로만 흐르도록 제어함
다리 긴게 +임
유리속에 커다란게 -임

애노드/캐소드 (Anode/Cathode)

조합회로: 값 저장 x, clock 사용x, 입력이 바로 출력에 반영된다.
순차회로: 값 저장 O, clock 사용

FSM(Finite State Machine)
유한한 상태 천이 머신, 현재 상태에 따라서 다음상태가 결정된다.
현재 상태에 따라 출력이 결정된다.
조합회로=무조건 다음 상태만 결정하는 회로
State Register
클럭의 엣지를 검출하여, 현재 상태로 업데이트하고 유지함
State Transition Diagram-원은 상태, 선은 입력
Moore Machine: 출력은 상태 레지스터의 값만 보고 만들어짐, 외부 입력은 연결 x, 안정,느림
Mealy Machine: 출력은 현재 상태,입력 모두에 의해 결정된다, 노이즈(글리치)에 취약, 빠름
FSM으로 패턴 찾기
ex) 101011이 들어온 경우

0110 패턴 찾기 코드

`timescale 1ns / 1ps

module fsm_pattern(
  input clk,
  input reset,
  input in,
  output reg out
  );
parameter start=3'd0,st1=3'd1,st2=3'd2,st3=3'd3,st4=3'd4;
reg [2:0] cur_state=start;
reg [2:0] next_state;

always@(*) begin

case(cur_state)
  start: next_state=in ? start : st1;
  st1: next_state=in ? st2 : st1;
  st2: next_state=in ? st3 : st1;
  st3: next_state=in ? start : st4;
  st4: next_state=in ? st2 : st1;

  default: next_state=start;
endcase
end


always@(posedge clk, posedge reset) begin
 if(reset)
   cur_state<=start;
   else 
   cur_state<=next_state;
end

always@(*) begin
  out=1'b0;
  case(cur_state)
  st3: begin
          if (in==1'b0) out=1'b1;
          else out=1'b0;
  end
  default: out=1'b0;
endcase

end





endmodule
`timescale 1ns / 1ps

module tb_fsm_pattern();
reg clk;
reg reset;
reg in;
wire out;
fsm_pattern u_fsm_pattern(
    .clk(clk),
    .reset(reset),
    .in(in),
    .out(out)
);
always  #5 clk=~clk;
initial begin
$monitor("time=%t, state=%b, in=%b, out=%b", $time, fsm_pattern.cur_state,in,out);
end

initial begin
clk=0;
reset=1;
in=0;
#100 reset=0;
@(posedge clk) in=0;
@(posedge clk) in=1;
@(posedge clk) in=0;
@(posedge clk) in=1;
@(posedge clk) in=1;
@(posedge clk) in=0;
@(posedge clk) in=0;
@(posedge clk) in=1;
@(posedge clk) in=0;
@(posedge clk) in=0;
@(posedge clk) in=1;
@(posedge clk) in=1;
@(posedge clk) in=0;
@(posedge clk) in=1;
@(posedge clk) in=1;
@(posedge clk) in=0;
#20;
$display("Finished");
$finish;
end



endmodule
profile
임베디드

0개의 댓글