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 |