Máquina de estados
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 88 de 90.
Desafío
Una máquina de estados es un circuito que puede estar en uno de varios estados. Para UART, tenemos diferentes estados para cada bit: inactivo (idle), inicio (start), bits de datos 0-7 y parada (stop). El contador de bits (cnt) nos indica en qué estado nos encontramos. Basándonos en cnt, decidimos qué valor enviar por la línea tx.
Ya tienes el contador de bits de la lección anterior. Necesitas modificarlo para que funcione como un transmisor UART.
Valores de bits a enviar (para la letra 'A')
| cnt | valor tx |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 1 |
| 10 | 1 |
Qué hacer
- Añade una entrada llamada
start - Añade un registro de salida (output reg) llamado
tx - En el bloque
initial, establecetx = 1(inactivo en alto) - Cambia la lógica del contador:
- Cuando
cnt == 0ystart == 1, establececnt <= 1(comenzar transmisión) - Cuando
cntesté entre 1 y 9, increméntalo:cnt <= cnt + 1 - Cuando
cnt == 10, reinícialo a0
- Cuando
Pruébalo tú mismo
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
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