Transmitter Design
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 89번째.
챌린지
이 레슨에서는 고정된 문자 'A'뿐만 아니라 모든 바이트를 전송할 수 있도록 shift 레지스터를 추가하여 UART 송신기를 완성합니다.
shift 레지스터는 전체 프레임(정지 비트 + 8개의 Data 비트 + Start 비트)을 로드한 다음 한 번에 한 비트씩 내보냅니다.
프레임 형식
| 정지 (1) | Data (8비트) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
예를 들어 data_in = 8'b01000001(문자 'A')인 경우, shift 레지스터는 다음과 같이 됩니다: 1 01000001 0
과제
이전 레슨의 상태 머신(고정된 바이트를 전송)이 주어집니다. data_in 입력에서 어떤 바이트든 전송하도록 수정해야 합니다.
해야 할 일:
- 포트 목록(괄호 안)에
data_in이라는 이름의input [7:0]을 추가합니다. - 10비트
reg인shift_reg를 괄호 바깥(내부 signal이므로 module 본문 안)에 추가합니다. cnt == 0이고start == 1일 때:shift_reg에{1'b1, data_in, 1'b0}을 로드합니다.
cnt가 1과 8 사이일 때:tx <= shift_reg[0]을 전송합니다.- 오른쪽으로 shift합니다:
shift_reg <= shift_reg >> 1
cnt == 9일 때:tx <= shift_reg[0]을 전송합니다.- 오른쪽으로 shift합니다:
shift_reg <= shift_reg >> 1
직접 해보기
module uart_tx (
input clk,
input start, // NEW: 전송을 시작하기 위한 시작 신호
output reg tx, // NEW: 직렬 출력 라인
output reg [3:0] cnt // 테스트를 위해 출력으로 유지
);
initial begin
cnt = 0;
tx = 1; // NEW: tx를 HIGH로 설정 (유휴 상태)
end
always @(posedge clk) begin
// NEW: 시작 조건이 있는 카운터 로직
if (cnt == 0 && start) begin // NEW: 전송 시작
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: 전송 중 카운트
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: 마지막 비트 후 리셋
cnt <= 0;
end
end
endmodule기초의 모든 레슨
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic직접 연습해 보세요: 온라인 Verilog 컴파일러