Macchina a stati
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 88 di 90.
Sfida
Una macchina a stati è un circuito che può trovarsi in uno di diversi stati. Per UART, abbiamo stati diversi per ogni bit: inattivo, avvio, bit di dati da 0 a 7 e stop. Il contatore dei bit (cnt) ci indica in quale stato ci troviamo. In base a cnt, decidiamo quale valore inviare sulla linea tx.
Hai il contatore dei bit della lezione precedente. Devi modificarlo per farlo funzionare come trasmettitore UART.
Valori dei bit da inviare (per la lettera 'A')
| cnt | valore tx |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 1 |
| 9 | 0 |
| 10 | 1 |
Cosa fare
- Aggiungi un input chiamato
start - Aggiungi un output reg chiamato
tx - Nel blocco
initial, impostatx = 1(livello alto in stato inattivo) - Modifica la logica del contatore:
- Quando
cnt == 0estart == 1, impostacnt <= 1(inizia la trasmissione) - Quando
cntè compreso tra 1 e 9, incrementalo:cnt <= cnt + 1 - Quando
cnt == 10, azzeralo a0
- Quando
Provalo tu
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
end
endmoduleTutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online