본문 바로가기

Verilog/HDLbits

[HDLBits] Fsm ps2

1.    문제 및 설명

     A.     PS/2 마우스 프로토콜은 메시지를 3바이트 단위로 전송한다. 

  • 먼저 bit[3] = 1인 바이트가 나올 때까지 모든 바이트를 버린다.
  • bit[3] = 1인 바이트를 발견하면, 이를 메시지의 첫 번째 바이트로 간주한다.
  • 이후 총 3바이트를 모두 수신하면, 하나의 메시지를 정상적으로 받은 것으로 판단한다.

 

2.    요구사항

     A.     입력 바이트 스트림을 받아 메시지 경계를 탐지하는 FSM설계 하시오.

  • FSM은 각 메시지의 세 번째 바이트를 성공적으로 수신한 직후 사이클에서 done 신호를 출력해야 한다.

 

 

3.    문제 풀이

     A.     State

  • wait_1: in[3] == 1 입력을 기다리는 상태
  • byte1: in[3] == 1 입력을 받아서 상태 천이
  • byte2: 자동 천이
  • byte3: 자동 천이

 

 

4. 모듈 정의

module top_module(
    input clk,
    input [7:0] in,
    input reset,    // Synchronous reset
    output done);

 

 

5. 답

module top_module(
    input clk,
    input [7:0] in,
    input reset,    // Synchronous reset
    output done); //

    parameter wait_1 = 0, byte1 = 1, byte2 = 2, byte3 = 3;
    reg [1:0] state, next_state;
    reg [2:0] cnt;
    // State transition logic (combinational)
    always@(*)
        begin
            case(state)
                wait_1: next_state = (in[3]==1)?byte1:wait_1;
                byte1: next_state = byte2;
                byte2: next_state = byte3;
                byte3: next_state = (in[3]==1)?byte1:wait_1;
            endcase
        end
    

    // State flip-flops (sequential)
    always@(posedge clk)
        begin
            if(reset)
                begin
                	state <= wait_1;
                end
            else
                begin
                    state <= next_state;                        
                end
        end
           
 
    // Output logic
    assign done = (state == byte3);
endmodule
 

 

'Verilog > HDLbits' 카테고리의 다른 글

[HDLBits] Fsm serial  (0) 2026.04.26
[HDLBits] Fsm ps2data  (0) 2026.04.20
[HDLBits] Fsm onehot  (1) 2026.04.13
[HDLBits] Lemmings4  (0) 2026.04.11
[HDLBits] Lemmings3  (0) 2026.04.11