Come creare un semplice trasmettitore UART seriale in verilog HDL

La maggior parte dei trasmettitori ricevitori asincroni universali (UART) che ho trovato online sono troppo complicati e difficili da capire, qui spiegherò alcune semplici teorie e anche il codice su come costruirne uno.

Innanzitutto parliamo di come funzionano i trasmettitori. Il principio di base è inviare più bit di dati su una singola linea. Nel nostro trasmettitore, questi dati sono paralleli, tuttavia per ridurre il numero di fili necessari, utilizziamo la comunicazione seriale che viene convertita in parallelo all'estremità ricevente.

Le cose fondamentali di cui abbiamo bisogno sono le seguenti:

  1. Un divisore dell'orologio (il nostro bancone)

Questo ci permette di inviare dati ad una certa velocità (baud rate). Il nostro ricevitore campionirà e prenderà i dati bit per bit.

  1. Un registro a turni

Abbiamo bisogno di sapere quanti bit alla volta stiamo trasmettendo, il nostro registro a scorrimento avrà un bit di inizio, bit di dati, bit di parità (opzionale), bit di fine.

  1. Un diagramma di stato

Prima di scrivere qualsiasi codice, dobbiamo pensare a cosa dobbiamo creare e il modo migliore è creare un diagramma di stato del nostro progetto. Sappiamo che per un trasmettitore abbiamo bisogno di 2 stati, IDLE e TRANSMITTING.

Come creare un semplice trasmettitore UART seriale in verilog HDL

Dopo aver ottenuto un diagramma di stato, ora possiamo calcolare quale sarà il nostro contatore. Questo viene fatto utilizzando:

contatore = velocità di clock FPGA/ baud rate

In questo esempio utilizzo una velocità di trasmissione di 9600, rendendo il mio contatore = 5208.

Come creare un semplice trasmettitore UART seriale in verilog HDL

Infine, calcoliamo il nostro registro a turni e finiamo di scrivere la nostra macchina a stati. Nel mio codice di esempio utilizzo un bit di inizio, un bit di parità, 8 bit di dati e un bit di fine. Questo è un totale di 11 bit.

Entrambe le immagini nei passaggi 2 e 3 insieme nello stesso modulo completano il codice del trasmettitore necessario per programmare sull'FPGA. Questo codice funzionerà con un altro FPGA collegato in serie o con Windows Hyperterminal tra l'altro hardware. Può essere facilmente modificabile per lavorare con molto di più.

Infine, creiamo un dispositivo di prova per correggere eventuali errori e simulare il nostro programma prima di programmare l'FPGA.

Questo conclude il trasmettitore. Si prega di lasciare commenti se avete domande o sentite che manca qualcosa qui.

Suggerimenti

Sia il trasmettitore che il ricevitore devono conoscere la velocità di trasmissione alla quale vengono inviati i dati.