다이오드: 전류를 한쪽 방향으로만 흐르도록 제어함
다리 긴게 +임
유리속에 커다란게 -임
애노드/캐소드 (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