Transmitter Design
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 89 de 90.
Desafío
En esta lección, completarás el transmisor UART agregando el shift register para enviar cualquier byte, no solo la letra fija 'A'.
El shift register carga el frame completo (bit de Stop + 8 bits de Data + bit de start) y lo desplaza un bit a la vez.
Formato del frame
| Stop (1) | Data (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Por ejemplo, si data_in = 8'b01000001 (letra 'A'), el shift register se convierte en: 1 01000001 0
Tu tarea
Se te proporciona la máquina de estados de la lección anterior (transmite un byte fijo). Debes modificarla para enviar cualquier byte desde la entrada data_in.
Qué hacer:
- Agrega un
input [7:0]llamadodata_ina la lista de puertos (dentro de los paréntesis) - Agrega un
regde 10 bits llamadoshift_regfuera de los paréntesis (dentro del cuerpo del módulo, porque es una señal interna) - Cuando
cnt == 0ystart == 1:- Carga
shift_regcon{1'b1, data_in, 1'b0}
- Carga
- Cuando
cntesté entre 1 y 8:- Envía
tx <= shift_reg[0] - Desplaza a la derecha:
shift_reg <= shift_reg >> 1
- Envía
- Cuando
cnt == 9:- Envía
tx <= shift_reg[0] - Desplaza a la derecha:
shift_reg <= shift_reg >> 1
- Envía
Pruébalo tú mismo
module uart_tx (
input clk,
input start, // NEW: señal de inicio para comenzar la transmisión
output reg tx, // NEW: línea de salida serial
output reg [3:0] cnt // Mantener como salida para pruebas
);
initial begin
cnt = 0;
tx = 1; // NEW: establecer tx en HIGH (estado inactivo)
end
always @(posedge clk) begin
// NEW: Lógica del contador con condición de inicio
if (cnt == 0 && start) begin // NEW: comenzar a transmitir
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: contar mientras se transmite
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: reiniciar después del último bit
cnt <= 0;
end
end
endmoduleTodas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators 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 LogicPractica por tu cuenta: Compilador de Verilog online