Progettazione del trasmettitore
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 89 di 90.
Sfida
In questa lezione completerai il trasmettitore UART aggiungendo il registro a scorrimento per inviare qualsiasi byte, non solo la lettera fissa 'A'.
Il registro a scorrimento carica il frame completo (bit di stop + 8 bit di dati + bit di start) e lo invia un bit alla volta.
Formato del frame
| Stop (1) | Dati (8 bit) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Ad esempio, se data_in = 8'b01000001 (lettera 'A'), il registro a scorrimento diventa: 1 01000001 0
Il tuo compito
Ti viene fornita la macchina a stati della lezione precedente (trasmette un byte fisso). Devi modificarla per inviare qualsiasi byte dall'ingresso data_in.
Cosa fare:
- Aggiungi un
input [7:0]chiamatodata_inall'elenco delle porte (tra le parentesi) - Aggiungi un
rega 10 bit chiamatoshift_regfuori dalle parentesi (nel corpo del modulo, perché è un segnale interno) - Quando
cnt == 0estart == 1:- Carica
shift_regcon{1'b1, data_in, 1'b0}
- Carica
- Quando
cntè compreso tra 1 e 8:- Invia
tx <= shift_reg[0] - Fai scorrere a destra:
shift_reg <= shift_reg >> 1
- Invia
- Quando
cnt == 9:- Invia
tx <= shift_reg[0] - Fai scorrere a destra:
shift_reg <= shift_reg >> 1
- Invia
Provalo tu
module uart_tx (
input clk,
input start, // NEW: segnale start per iniziare la trasmissione
output reg tx, // NEW: linea di uscita seriale
output reg [3:0] cnt // Mantieni come uscita per i test
);
initial begin
cnt = 0;
tx = 1; // NEW: imposta tx su HIGH (stato di inattività)
end
always @(posedge clk) begin
// NEW: logica del contatore con condizione di avvio
if (cnt == 0 && start) begin // NEW: avvia la trasmissione
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: conta durante la trasmissione
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: azzera dopo l'ultimo bit
cnt <= 0;
end
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