Transmitter Design
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 89 de 90.
Desafio
Nesta lição, você concluirá o transmissor UART adicionando o shift register para enviar qualquer byte, não apenas a letra fixa 'A'.
O shift register carrega o quadro completo (stop bit + 8 data bits + start bit) e o desloca para fora um bit por vez.
Formato do quadro
| Stop (1) | Data (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Por exemplo, se data_in = 8'b01000001 (letra 'A'), o shift register se torna: 1 01000001 0
Sua tarefa
Você recebeu a máquina de estados da lição anterior (transmite um byte fixo). Você precisa modificá-la para enviar qualquer byte a partir da entrada data_in.
O que fazer:
- Adicione um
input [7:0]chamadodata_inà lista de portas (dentro dos parênteses) - Adicione um
regde 10 bits chamadoshift_regfora dos parênteses (dentro do corpo do módulo, pois é um signal interno) - Quando
cnt == 0estart == 1:- Carregue
shift_regcom{1'b1, data_in, 1'b0}
- Carregue
- Quando
cntestiver entre 1 e 8:- Envie
tx <= shift_reg[0] - Desloque para a direita:
shift_reg <= shift_reg >> 1
- Envie
- Quando
cnt == 9:- Envie
tx <= shift_reg[0] - Desloque para a direita:
shift_reg <= shift_reg >> 1
- Envie
Experimente você mesmo
module uart_tx (
input clk,
input start, // NEW: sinal start para iniciar a transmissão
output reg tx, // NEW: linha de saída serial
output reg [3:0] cnt // Manter como saída para testes
);
initial begin
cnt = 0;
tx = 1; // NEW: define tx como HIGH (estado ocioso)
end
always @(posedge clk) begin
// NEW: Lógica do contador com condição de start
if (cnt == 0 && start) begin // NEW: inicia a transmissão
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: conta enquanto transmite
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: reseta após o último bit
cnt <= 0;
end
end
endmoduleTodas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators 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 LogicPratique por conta própria: Compilador de Verilog online