상태 머신
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 88번째.
챌린지
상태 머신은 여러 상태 중 하나에 있을 수 있는 회로입니다. UART의 경우 각 비트에 대해 서로 다른 상태(idle, start, 데이터 비트 0-7, stop)가 있습니다. 비트 카운터(cnt)는 현재 어느 상태에 있는지 알려줍니다. cnt를 기반으로 tx 라인에 어떤 값을 보낼지 결정합니다.
이전 레슨에서 작성한 비트 카운터가 있습니다. 이를 UART 송신기로 동작하도록 수정해야 합니다.
전송할 비트 값 (문자 'A'의 경우)
| cnt | tx 값 |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 1 |
| 9 | 0 |
| 10 | 1 |
수행할 작업
start라는 이름의 input 추가tx라는 이름의 output reg 추가initial블록에서tx = 1로 설정 (idle 상태는 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