1. 문제 및 설명
[HDLBits] Fsm serialdata
1. 문제 및 설명https://idkihg.tistory.com/160 [HDLBits] Fsm serial1. 문제 및 설명 A. 많은 직렬 통신 프로토콜에서는 데이터 바이트의 경계를 구분하기 위해 시작 비트(start bit)와 정지 비트(stop bit)를 함께 전
idkihg.tistory.com
위의 설계한 직렬 수신기에 패리티 검사 기능을 추가해라. 패리티 검사는 홀수 패리티를 사용한다.
2. 요구사항
A. FSM 기능
- 시작 비트 검출
- 데이터 8비트 수신
- 패리티 검사
- Stop bit 확인
- 오류 복구
B. done 조건
- 데이터 수신 완료
- Odd parity 통과
- Stop bit 정상
3. 문제 풀이
A. State
- idle: in == 1, 입력을 기다리는 상태
- start: in == 0, 입력을 받아서 상태 천이
- data: 자동 천이
- Error: cnt == 9 & in == 0, data를 다 입력 받고 나서, in == 1 받지 못한 경우
- 1 byte 데이터 및 Parity Bit 수신 후 done 조건 불만족
- stop: cnt == 89& in == 1 , data를 다 입력 받고 나서, in == 1 받은 경우
- 1 byte 데이터 및 Parity Bit 수신 후 done 조건 만족

4. 모듈 정의
module top_module(
input clk,
input in,
input reset, // Synchronous reset
output [7:0] out_byte,
output done
);
5. 답
odule top_module(
input clk,
input in,
input reset, // Synchronous reset
output [7:0] out_byte,
output done
); //
parity i0 (clk, parity_reset, in, odd);
parameter idle = 3'b000, start = 3'b001, data = 3'b010, stop = 3'b011, Err = 3'b100;
reg [2:0] state, next_state;
reg [3:0] cnt;
reg [8:0] out;
wire odd;
wire parity_reset;
assign out_byte = {8{done}}&out[7:0];
assign parity_reset = reset|(next_state==start);
always@(*)
begin
case(state)
idle: next_state = !in?start:idle;
start: next_state = data;
data: next_state = (cnt==9)?(in?stop:Err):data;
Err: next_state = in?idle:Err;
stop: next_state = !in?start:idle;
default next_state = state;
endcase
end
always@(posedge clk)
begin
if(reset)
begin
state <= idle;
done <= 1'b0;
cnt <= 4'd0;
out<= 8'd0;
end
else
begin
state <= next_state;
if(next_state == data)
begin
cnt <= cnt + 4'd1;
out <= {in, out[8:1]};
end
else
begin
cnt <= 4'd0;
end
if(next_state == stop & odd)
done = 1'b1;
else
done = 1'b0;
end
end
endmodule
'Verilog > HDLbits' 카테고리의 다른 글
| [HDLBits] Exams/ece241 2013 q8 (0) | 2026.05.10 |
|---|---|
| HDLbits[HDLBits] Fsm hdlc (0) | 2026.05.10 |
| [HDLBits] Fsm serialdata (0) | 2026.05.05 |
| [HDLBits] Fsm serial (0) | 2026.04.26 |
| [HDLBits] Fsm ps2data (0) | 2026.04.20 |