Sommario:

Cronometro di base utilizzando VHDL e Basys3 Board: 9 passaggi
Cronometro di base utilizzando VHDL e Basys3 Board: 9 passaggi

Video: Cronometro di base utilizzando VHDL e Basys3 Board: 9 passaggi

Video: Cronometro di base utilizzando VHDL e Basys3 Board: 9 passaggi
Video: 9.FPGA FOR BEGINNERS- CASE-WHEN in VHDL on the Basys3 Board 2024, Dicembre
Anonim
Image
Image

Benvenuto nell'istruzione su come costruire un cronometro utilizzando la scheda VHDL e Basys 3 di base. Siamo entusiasti di condividere con voi il nostro progetto! Questo era un progetto finale per il corso CPE 133 (Digital Design) a Cal Poly, SLO nell'autunno 2016. Il progetto che abbiamo costruito è un semplice cronometro che avvia, azzera e mette in pausa il tempo. Accetta tre pulsanti sulla scheda Basys3 come ingressi e l'ora viene visualizzata sul display a sette segmenti a quattro cifre della scheda. Il tempo trascorso viene visualizzato nel formato secondi: centisecondi. Utilizza l'orologio di sistema della scheda come input per tenere traccia del tempo trascorso e invia l'ora alle quattro cifre del display a sette segmenti.

Passaggio 1: materiali

Impostazione di ingressi e uscite
Impostazione di ingressi e uscite

I materiali necessari per questo progetto:

  • 1 computer con Vivado Design Suite WebPack installato da Xilinx (preferire la versione 2016.2)
  • 1 scheda FPGA Digilent Basys3 Xilinx Artix-7
  • 1 cavo porta USB

Passaggio 2: impostazione di ingressi e uscite

La figura sopra mostra uno schema a blocchi di primo livello del modulo cronometro principale. Il cronometro accetta gli ingressi "CLK" (orologio), "S1" (pulsante avvio), "S2" (pulsante pausa) e "RST" (reset) e dispone di un'uscita "Anodi" a 4 bit, l'uscita "segmento" e un'uscita a bit singolo "DP" (punto decimale). Quando l'ingresso "S1" è alto, il cronometro inizia a contare il tempo. Quando "S2" è basso, il cronometro mette in pausa il tempo. Quando "RST" è alto, il cronometro si ferma e azzera l'ora. Ci sono quattro sottomoduli all'interno del circuito: il divisore di clock, il contatore di cifre, il driver del display a sette segmenti e l'encoder del display a sette segmenti. Il modulo principale del cronometro collega tra loro tutti i sottomoduli e agli ingressi e alle uscite.

Passaggio 3: creazione di orologi

Fare orologi
Fare orologi

Il modulo divisore di clock accetta un clock di sistema e utilizza un ingresso divisore per creare un clock di qualsiasi velocità non superiore a quello del clock di sistema. Il cronometro utilizza due diversi moduli di clock, uno che crea un clock a 500 Hz e un altro che crea un clock a 100 Hz. Lo schema del divisore dell'orologio è mostrato nella figura sopra. Il divisore di clock accetta un ingresso a bit singolo "CLK", un ingresso "Divisore" a 32 bit e l'uscita a bit singolo "CLKOUT". "CLK" è l'orologio di sistema e "CLKOUT" è l'orologio risultante. Il modulo include anche una porta NOT, che commuta il segnale "CLKTOG" quando il conteggio raggiunge il valore del divisore.

Passaggio 4: contare fino a dieci

Contando fino a dieci
Contando fino a dieci

Il contatore di cifre conta ogni cifra da 0 a 10 e crea un altro orologio per il funzionamento della cifra successiva che oscilla quando il conteggio raggiunge 10. Il modulo accetta 3 ingressi a bit singolo "S", "RST" e "CLK " e produce un'uscita a bit singolo "N" e un'uscita a 4 bit "D". L'ingresso "S" è l'abilitazione in ingresso. L'orologio si accende quando "S" è alto e si spegne quando "S" è basso. "RST" è l'ingresso di reset, quindi l'orologio si resetta quando "RST" è alto. "CLK" è l'ingresso dell'orologio per il contatore di cifre. "N" è l'uscita dell'orologio che diventa l'orologio di ingresso per la cifra successiva. L'uscita "D" presenta il valore binario della cifra a cui si trova il contatore.

Passaggio 5: visualizzazione dei numeri

Visualizzazione dei numeri
Visualizzazione dei numeri

Il codificatore del display a sette segmenti codificherà il numero binario ricevuto dal modulo del driver del display a sette segmenti e lo trasformerà in un flusso di bit che verranno interpretati come valori "1" o "0" per ciascun segmento del display. Il numero binario viene ricevuto dal modulo come "cifra" di ingresso a 4 bit e risulta nei "segmenti" di uscita a 7 bit. Il modulo è costituito da un unico blocco di processo case che assegna uno specifico flusso di 7 bit per ogni possibile valore di ingresso da 0 a 9. Ciascun bit nei flussi di sette bit rappresenta uno dei sette segmenti delle cifre sul display. L'ordine dei segmenti nel flusso è "abcdefg" con "0" che rappresentano i segmenti che si accendono per il dato numero.

Passaggio 6: come visualizzare il cronometro

Come visualizzare il cronometro
Come visualizzare il cronometro

Nel modulo driver display a sette segmenti sono presenti quattro ingressi a 4 bit "D0", "D1", "D2" e "D3", ognuno dei quali rappresenta le quattro cifre da visualizzare. L'ingresso "CLK" è l'ingresso dell'orologio del sistema. L'uscita a bit singolo "DP" rappresenta il punto decimale sul display a sette segmenti. L'uscita a 4 bit "Anodes" determina quale cifra viene visualizzata sul display a sette segmenti e l'uscita a 4 bit "temp" dipende dallo stato dell'ingresso di controllo a 2 bit "SEL". Il modulo utilizza 4 multiplexer per l'ingresso di controllo "SEL" e le tre uscite; "Anodi", "temp" e "DP".

Passaggio 7: portare tutto insieme

Per creare i pulsanti di avvio e di pausa viene utilizzato un blocco di processo "se" che parte dal clock a 500 Hz. Quindi collegare insieme tutti i sottomoduli nel modulo principale del cronometro dichiarando i componenti di ogni singolo sottomodulo e utilizzando vari segnali. I sottomoduli digit accettano l'uscita di clock del precedente sottomodulo digit mentre il primo riceve il clock a 100Hz. Le uscite "D" dei sottomoduli numerici diventano quindi gli ingressi "D" del modulo driver display a sette segmenti. Infine, l'uscita "temp" del modulo driver del display a sette segmenti diventa l'ingresso "temp" del modulo encoder a sette segmenti.

Passaggio 8: vincoli

vincoli
vincoli

Utilizzare 3 pulsanti (W19, T17 e U18) per gli ingressi "RST", "S1" e "S2". W19 è il pulsante di ripristino, T17 è il pulsante di avvio (S1) e U18 è il pulsante di pausa (S2). È inoltre necessario un vincolo per l'ingresso dell'ingresso di clock utilizzando la porta W5. Inoltre, ricorda di aggiungere questa riga al vincolo di clock:

create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK}]

Collega anche gli anodi e i segmenti alla scheda in modo che il cronometro venga visualizzato sul display a sette segmenti come mostrato nel file dei vincoli.

Passaggio 9: test

test
test

Assicurati che il tuo dispositivo funzioni giocando con i tre pulsanti: premendoli e tenendoli premuti in ogni ordine possibile per trovare eventuali problemi con il codice.

Consigliato: