Esercitazione di laboratorio n. 2 Argomento dell esercitazione Progetto di circuiti combinatori. L esercitazione è composta di tre esercizi: progetto di un Full Adder da 1 bit (esercizio 1), e suo riutilizzo per creare un sommatore di tipo Ripple Carry con parallelismo pari a 4 bit (esercizio 2); progetto di un sommatore (di parallelismo pari a quattro bit) di tipo Carry Look-ahead e confronto delle prestazioni con quello di tipo Ripple Carry (esercizio 3). Esercizio n. 1 Si progetti un circuito combinatorio che realizzi un Full Adder ad 1 bit. Il circuito opera su ingressi di parallelismo pari ad 1 bit codificati in binario puro, e produce una somma codificata su 2 bit (sempre in binario puro). Più in dettaglio, il circuito dispone di tre ingressi di dato (A, B e Ci), un ingresso di controllo En, e due uscite di dato (S e Co), e deve comportarsi nel seguente modo: e Ci (essendo S il bit meno significativo della somma e Co quello più significativo). SW0, SW1, SW2 ed SW3 rispettivamente per gli ingressi A, B, Ci ed En, ed i led LD0 ed LD1 per le uscite S e Co. Il progetto si articola nelle seguenti fasi: 1. Definizione della tabella di verità per le funzioni relative alle due uscite del circuito. La tavola di verità (parziale) delle uscite del circuito è di seguito riportata. A B Cin En Sum Cout 0 0 0 1 0 0 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1
2. Minimizzazione e sintesi di tali funzioni. 3. Tramite il tool Xilinx ISE WebPack, creazione di un nuovo progetto: indicare uno schematico come modulo top-level, selezionando il dispositivo xc3s200 con package ft256. 4. All interno del progetto appena creato, definire un nuovo modulo: esso dovrà essere descritto in codice VHDL, con la definizione di una entità e la descrizione di una architettura (comportamentale) che implementi il comportamento del Full Adder descritto prima. 5. Validazione tramite simulazione del modulo appena specificato. Una volta verificato il corretto funzionamento del circuito, è possibile passare alla sua realizzazione su FPGA. 1. Nella finestra Sources in Project, selezionare il modulo del Full Adder. 2. Nella finestra Processes for Source, fare un doppio click su User Constraints/ Assign Package Pins e si risponda affermativamente alla eventuale domanda posta dal software. 3. Nella tabella Design Object List I/O Pins, si compili la colonna Loc con i seguenti valori. I/O Name A B Ci En S Co Pin F12 G12 H14 H13 K12 P14 4. Si salvino i dati e si chiuda l applicazione. Al termine di queste operazioni un file ucf viene aggiunto al progetto. 5. Nella finestra Processes for Source, avendo di nuovo selezionato il modulo relativo al Full Adder, fare un doppio click su Generate Programming File. Dopo aver connesso la scheda alla porta parallela del PC tramite il cavo JTAG (ATTENZIONE: i nomi dei segnali devono corrispondere) e dopo averla alimentata, fare un doppio click su Configure Device (impact). 6. Nella finestra Configure Devices, selezionare la voce Boundary-Scan Mode e andare Avanti. 7. Nella finestra Boundary-Scan Mode Selection, selezionare Automatically connect to cable and identify Boundary-Scan chain, e fare click su Fine. 8. Si faccia click su OK nella finestra Boundary-Scan Chain Contents Summary. 9. Nella finestra Assign New Configuration File, si selezioni il file di configurazione della FPGA con estensione.bit (se il nome del modulo che si è progettato è full_adder.vhd, il file di configurazione ha il nome full_adder.bit ) e si faccia un click su Apri. 10. Si faccia click su OK nella finestra seguente (che riporta un warning). Quindi, fare click su Annulla nella successiva finestra Assign New Configuration File. 11. Nella finestra di impact, si selezioni il dispositivo xc2s50, si faccia un click con il tasto destro del mouse e si selezioni l opzione Program. Si faccia click su OK per programmare la FPGA. Al termine di queste operazioni, il software deve riportare il messaggio Program Succeeded. La scheda è ora pronta per l uso. 12. Prima di uscire dal tool impact, ricordarsi di premere il bottone PROG per resettare la scheda. 2
Esercizio n. 2 Utilizzando il Full Adder realizzato nell esercizio precedente, costruire un sommatore di tipo Ripple Carry che operi su dati con parallelismo pari a 4 bit (codificati in binario puro) e produca una somma su 5 bit (sempre in binario puro). Più in dettaglio, il circuito dispone di tre ingressi di dato (A e B di parallelismo pari a 4 bit, Ci di parallelismo 1 bit), di un ingresso di controllo En di parallelismo pari ad 1 bit, e di due uscite (S di parallelismo 4 bit e Co di parallelismo 1 bit). Il sommatore deve operare nel seguente modo: e Ci (essendo Co il bit più significativo della somma ed S quelli meno significativi). SW0.. SW3 per l ingresso A, SW4.. SW7 per l ingresso B,BTN0 per l ingresso Ci e BTN3 per l ingresso En. Si visualizzino i risultati della somma utilizzando i led LD0.. LD3 per l uscita S ed LD4 per l uscita Co. Un sommatore Ripple Carry ad n bit si ottiene connettendo in cascata n Full Adder (da 1 bit), come riportato in Figura 1. Fig. 1: schema di un sommatore Ripple Carry (da 4 bit) A questo scopo: 1. si generi un simbolo per il Full Adder definito nell esercizio 1; 2. si crei uno schematico, dove siano posizionati e connessi i simboli per il Full Adder; 3. si validi il progetto mediante simulazione (behavioral e timed), osservando il tempo massimo richiesto per effettuare una somma. Per implementare il nuovo progetto su FPGA, si segua la stessa procedura spiegata per l esercizio precedente. L unica differenza è nella tabella di assegnazione dei pin, che deve essere conforme alla seguente. 3
I/O Name A[0] A[1] A[2] A[3] B[0] B[1] B[2] B[3] Ci En S[0] S[1] S[2] S[3] Co Pin F12 G12 H14 H13 J14 J13 K14 K13 M13 L14 K12 P14 L12 N14 P13 Esercizio n. 3 Si progetti un circuito combinatorio che implementi un sommatore a 4 bit di tipo Carry Look-ahead che operi su dati con parallelismo pari a 4 bit (codificati in binario puro) e produca una somma su 5 bit (sempre in binario puro). Più in dettaglio, il circuito dispone di tre ingressi di dato (A e B di parallelismo pari a 4 bit, Ci di parallelismo 1 bit), di un ingresso di controllo En di parallelismo pari ad 1 bit, e di due uscite (S di parallelismo 4 bit e Co di parallelismo 1 bit). Il sommatore deve operare nel seguente modo: e Ci (essendo Co il bit più significativo della somma ed S quelli meno significativi). SW0.. SW3 per l ingresso A, SW4.. SW7 per l ingresso B,BTN0 per l ingresso Ci e BTN3 per l ingresso En. Si visualizzino i risultati della somma utilizzando i led LD0.. LD3 per l uscita S ed LD4 per l uscita Co. Un sommatore di tipo Carry Look-ahead (con parallelismo 4 bit) ha la struttura riportata in Figura 2. 4
Figura 2: schema di un sommatore di tipo Carry Look-ahead (da 4 bit) In generale, i sommatori di tipo Carry Lookahead sono caratterizzati dal fatto che il calcolo del riporto (C i ) avviene prima del calcolo della somma (S i ). La logica per la generazione del riporto, infatti, effettua il calcolo del riporto per ogni bit della somma indipendentemente dal valore della somma stessa. Tale operazione e possibile grazie alle funzioni di generazione (G i ) e di propagazione (P i ) del riporto, definite come segue: G i = A i B i P i = A i + B i Vengono fornite di seguito le relazioni tra i riporti C i e queste funzioni: C 0 = Cin C 1 = G 0 + C 0 P 0 C 2 = G 1 + C 1 P 1 = G 1 + G 0 P 1 + C 0 P 0 P 1 C 3 = G 2 + C 2 P 2 = G 2 + G 1 P 2 + G 0 P 1 P 2 + C 0 P 0 P 1 P 2 Co = G 3 + C 3 P 3 = G 3 + G 2 P 3 + G 1 P 2 P 3 + G 0 P 1 P 2 P 3 + C 0 P 0 P 1 P 2 P 3 Per realizzare il sommatore richiesto: 1. si crei un nuovo modulo VHDL: esso dovrà contenere la descrizione (come entità e architettura) della logica di generazione dei riporti. 2. si crei un nuovo schematico, che rispecchi la configurazione della Figura 2. 3. si validi il progetto mediante simulazione (behavioral e timed), osservando il tempo massimo richiesto per effettuare una somma. Si confronti il valore ottenuto con quello del sommatore Ripple Carry. La realizzazione del circuito su FPGA segue la stessa identica procedura del precedente esercizio. 5