상태 머신
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 88번째.
챌린지
상태 머신(state machine)은 여러 상태 중 하나에 있을 수 있는 회로입니다. UART의 경우, 각 비트에 대해 유휴(idle), 시작(start), 데이터 비트 0-7, 정지(stop)와 같은 서로 다른 상태를 가집니다. 비트 카운터(cnt)는 우리가 현재 어떤 상태에 있는지를 알려줍니다. cnt에 따라 tx 라인에 어떤 값을 보낼지 결정합니다.
이전 레슨에서 만든 비트 카운터가 있습니다. 이를 UART 송신기(transmitter)로 작동하도록 수정해야 합니다.
전송할 비트 값 (문자 'A'의 경우)
| cnt | tx value |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 1 |
| 10 | 1 |
수행할 작업
start라는 입력을 추가하세요.tx라는 output reg를 추가하세요.initial블록에서tx = 1로 설정하세요 (유휴 상태는 high입니다).- 카운터 로직을 변경하세요:
cnt == 0이고start == 1일 때,cnt <= 1로 설정하세요 (전송 시작).cnt가 1에서 9 사이일 때, 값을 증가시킵니다:cnt <= cnt + 1cnt == 10일 때,0으로 리셋하세요.
직접 해보기
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
end
endmodule