1. 문제 및 설명
A. 이 문제는 복잡한 카운터를 만들기 위한 5단계 중 네번째 단계입니다.
B. 타이머를 제어하는 FSM을 설계하시오.
- 이 타이머는 특정 패턴(1101)이 감지되면 시작됩니다.
- 이후 4비트를 추가로 입력 받아 지연 시간을 결정합니다.
- 카운터가 종료 될 때 까지 기다립니다.
- 사용자에게 알림을 보내고, 사용자의 확인을 기다립니다.
2. 요구사항
A. 데이터 경로는 이 문제에 포함되지 않으며, 오직 FSM제어 로직만 구현하면 됩니다.
- 시퀀스 감지: 직렬 데이터(data) 입력에서 '1101'이 수신되면, shift_ena를 정확히 4 클록 주기 동안 1로 설정합니다.
- 카운팅 대기: 이후 counting 출력을 1로 설정하여 카운터가 작동 중임을 나타내고, done_counting 입력이 1이 될 때까지 대기합니다.
- 완료 및 확인: 카운팅이 완료되면 done을 1로 설정하여 사용자에게 알리고, ack 입력이 1이 될 때까지 기다립니다.
- 리셋: ack을 받은 후에는 다시 초기 상태로 돌아가 다음 '1101' 시퀀스를 찾습니다.
3. 문제 풀이
A. state
| 상태 | 의미 |
| S0 | 1 입력 대기 |
| S1 | 1 입력 대기 (1) |
| S2 | 0 입력 대기 (11) |
| S3 | 1 입력 대기 (110) |
| Shift0 | 1101 감지완료 -> shift 시작 |
| Shift1 | shift 1번째 |
| Shift2 | shift 2번째 |
| Shift3 | shift 3번째 |
| Count | shift 4번째, Counting |
| Wait | Counting 완료(Done), ACK 대기 |

4. 모듈 정의
module top_module (
input clk,
input reset, // Synchronous reset
input data,
output shift_ena,
output counting,
input done_counting,
output done,
input ack );
5. 답
module top_module (
input clk,
input reset, // Synchronous reset
input data,
output shift_ena,
output counting,
input done_counting,
output done,
input ack );
parameter S0 = 4'd0, S1 = 4'd1, S2 = 4'd2, S3 = 4'd3,
Shift0 = 4'd4, Shift1 = 4'd5, Shift2 = 4'd6, Shift3 = 4'd7,
Count = 4'd8, Wait = 4'd9;
reg [3:0] state, next_state;
always@(*)
begin
case(state)
S0: next_state = data?S1:S0;
S1: next_state = data?S2:S0;
S2: next_state = data?S2:S3;
S3: next_state = data?Shift0:S0;
Shift0: next_state = Shift1;
Shift1: next_state = Shift2;
Shift2: next_state = Shift3;
Shift3: next_state = Count;
Count: next_state = done_counting?Wait:Count;
Wait: next_state = ack?S0:Wait;
default: next_state = S0;
endcase
end
assign counting = (state==Count);
assign done = (state == Wait);
assign shift_ena = (state==Shift0)|(state == Shift1)|(state == Shift2)|(state == Shift3);
always@(posedge clk) begin
if(reset) begin
state <= S0;
end else begin
state <= next_state;
end
end
endmodule
'Verilog > HDLbits' 카테고리의 다른 글
| [HDLBits] Exams/review2015 fsmonehot (0) | 2026.05.31 |
|---|---|
| [HDLBits] Exams/review2015 fancytimer (0) | 2026.05.31 |
| [HDLBits] Exams/review2015 shiftcount (0) | 2026.05.31 |
| [HDLBits] Exams/review2015 shiftcount (0) | 2026.05.31 |
| [HDLBits] Exams/review2015 shiftcount (0) | 2026.05.31 |