Diseño del transmisor
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 registro de desplazamiento (shift_reg) para enviar cualquier byte, no solo la letra fija 'A'.
El registro de desplazamiento carga la trama completa (bit de parada + 8 bits de datos + bit de inicio) y la desplaza un bit a la vez.
Formato de la Trama
| Parada (1) | Datos (8 bits) | Inicio (0) |
|---|---|---|
| 1 | data_in | 0 |
Por ejemplo, si data_in = 8'b01000001 (la letra 'A'), el registro de desplazamiento se convierte en: 1 01000001 0
Tu Tarea
Se te proporciona la máquina de estados de la lección anterior (que 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, ya que 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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo