Sei sulla pagina 1di 3

Politecnico di Torino

III Facolt - Ingegneria dell'informazione Corso di Laurea Specialistica in Ingegneria Informatica

Progettazione di una calcolatrice ed implementazione su scheda FPGA


Luca Belluccini (159489) Scheda: Spartan3

Progettazione di Sistemi Digitali Relazione

Specifiche di progetto.
Il circuito dovr svolgere la funzione di una semplice calcolatrice in grado di eseguire la somma e la differenza tra due numeri esadecimali senza segno. Il progetto deve rispettare le seguenti specifiche: L'incremento e decremento degli operandi sono gestiti da 2 push-button. Ogni operando incrementato o decrementato di una unit ogni 0.5 s per cui il corrispondente push-button premuto. Esistono due modalit diverse di reset del circuito: la prima setta a 0000h ambo le variabili A e B, la seconda setta il numero di matricola su B&A, partendo dalla cifra meno significativa. Il circuito deve effettuare le operazioni di somma e sottrazione oppure visualizzazione delle due variabili A e B. Le variabili A e B sono operandi in binario puro senza segno. Le specifiche pi dettagliate sono fornite nel testo dell'homework. Questo progetto permette l'incremento o decremento degli operandi all'istante della pressione del corrispondente push-button e successivamente, se esso rimane premuto, ogni 0.5 s. La board Spartan3 non ha alcun circuito di de-bouncing. E' stato quindi necessario implementarlo in VHDL.

Input ed output. I segnali di ingresso sono: Selettore operando: A / B Incremento operando selezionato Decremento operando selezionato Selettore: risultato / operandi Selettore operazione di: somma (A+B) / differenza (A-B) Selettore di condizione iniziale al reset: normale / numero di matricola Segnale di reset Segnale di clock Il circuito dovr riportare il risultato dello stato corrente selezionato sul display 7 segmenti da 4 cifre secondo la codifica esadecimale.

Descrizione del progetto.


Il progetto rappresentato nello schema sottostante. Lo schema non descrive rigorosamente tutti i segnali definiti nei moduli. Alcuni segnali sono stati omessi perch forzati a valori costanti nel codice VHDL, altri perch non utilizzati per questo specifico progetto. Il circuito completo implementato in VHDL con un architectural, che ingloba tutti i moduli definiti singolarmente e collegati in modo opportuno. Se l'immagine non ben visibile, nella cartella del progetto presente il file jpg.

Filtraggio al front-end. I segnali di input attraversano un circuito di de-bouncing, in modo da filtrare le oscillazioni dovute alla meccanica dei componenti nelle transizioni di stato. Tutti i blocchi DEBOUNCE_CIRCUIT sono connessi ad un divisore di frequenza programmabile FREQ_DIV, impostato per generare un clock tale da permettere un campionamento ogni 0.0625 s (valore sufficiente per permettere di premere pi volte incremento operatore o decremento operatore manualmente senza avere problemi). Ottenuti tutti i segnali di ingresso, attraverso una serie di porte logiche vengono generati: il segnale di ENABLE di un secondo FREQ_DIV (genera il clock a 2 Hz), collegato all'A_B_BLOCK: abilitato soltanto quando si incrementa o decrementa in modo esclusivo e quando selezionata la modalit operandi il segnale INC_DEC, che indica quale operazione tra incremento e decremento deve essere effettuata

Blocco variabili. Il modulo A_B_BLOCK un modulo puramente strutturale, composto da due UP_DOWN_COUNTER e una parte di circuiti logici all'ingresso, per la opportuna abilitazione dei contatori. I due UP_DOWN_COUNTER ricevono il segnale di clock dal FREQ_DIV a 2 Hz (se quest'ultimo abilitato): essi sono attivati in modo esclusivo, a seconda del segnale di selezione A_B. Verr quindi effettuato un incremento o decremento a seconda dello stato del segnale UP_DOWN. I counter hanno due modalit di reset: quella standard, che setta a 0000h il valore interno, l'altra che carica un valore da un opportuno ingresso a 16bit. Quest'ultima viene utilizzata per il caricamento della matricola. Blocco ALU. Il modulo ALU esegue la somma e la sottrazione tra i due operandi di ingresso a 16bit unsigned a seconda del segnale SUM_SUB_SEL e soltanto se ALU_ENABLE abilitato. Se ALU_ENABLE disabilitato, tale blocco diviene trasparente: collega in uscita il primo o il secondo operando in base al segnale di selezione OP_SEL. Blocco di back-end. Gli ultimi due moduli VHDL permettono la visualizzazione degli operandi e dei risultati sul display a 4 cifre. Dopo aver consultato la documentazione della scheda Spartan3 per conoscere le specifiche di gestione del display, sono stati scritti due moduli: il FOUR_SEVENDIGIT_MUX e il SEVENDIGIT_DRIVER. Il primo, ad ogni clock, invia in uscita 4 linee consecutive delle 16 in ingresso (ovvero invia il valore di una cifra esadecimale) e genera i 4 segnali di controllo Anode Enable. Al clock successivo verranno inviate le successive 4 linee e cos via. Le 4 linee vengono codificate dal SEVENDIGIT_DRIVER per rendere visualizzabile la cifra sul singolo display a 7 segmenti abilitato. Il punto per le cifre decimali stato spento, imponendolo con una costante al modulo del driver. Il clock ricevuto dal FOUR_SEVENDIGIT_MUX generato da un FREQ_DIV a 260Hz. Tale valore stato ottenuto ipotizzando che un singolo display dovrebbe avere un refresh di 65Hz. Verifica del corretto funzionamento sulla scheda Spartan3. Mediante l'utilizzo di Xilinx 9.2i stato possibile scrivere il codice VHDL, verificare la sintassi e generare il file binario per la scheda Spartan3. Ogni singolo blocco stato simulato mediante dei waveform testbench. E' necessario effettuare il binding tra i vari ingressi ed uscite del modulo COMPLETE_CHIP e quelli della board. I dati sono stati ottenuti dal manuale tecnico della scheda.

Potrebbero piacerti anche