15
1 Esercitazione di Elettronica Per la Telematica Proff. C. Abbate, F. Iannuzzo - A.A. 2012/2013 MODULATORE FSK Introduzione. Nella presente esercitazione si realizzerà un modulatore FSK. Progetto del trasmettitore FSK. Lo schema da realizzare è il seguente: Il modulatore proposto presenta i seguenti pin: clock: clock di sistema; sclr: synchronous clear. Convenzione: quando è attivo, il sistema viene resettato; data: data stream in ingresso; out uscita FSK su m bit (andrà successivamente inviata al convertitore DA). Per prima cosa, dal menù Start -> Risorse del computer si scelga Disco locale (C:). Si crei una cartella C:\Elettronica, e dentro se ne crei un’altra chiamata Modem_FSK. In questa cartella si inseriranno tutti i file del progetto. Si apra l’ambiente Quartus II. Si faccia click su: File -> New Project Wizard, all’apertura della finestra, si scelga Next > , si scelga, facendo click su nel primo campo, la directory Modem_FSK precedentemente creata e si dia il nome “TX_FSK” al progetto, specificandolo nel secondo e terzo campo. Si faccia click su Next > fino ad arrivare alla finestra seguente:

Esercitazione di Elettronica Per la Telematica · 3 Si faccia click su OK: si aprirà la finestra del “MegaWizard Plug-in”. Questa funzionalità di Quartus II consente in maniera

  • Upload
    lamdang

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

1

Esercitazione di Elettronica Per la Telematica Proff. C. Abbate, F. Iannuzzo - A.A. 2012/2013

MODULATORE FSK

Introduzione. Nella presente esercitazione si realizzerà un modulatore FSK.

Progetto del trasmettitore FSK. Lo schema da realizzare è il seguente:

Il modulatore proposto presenta i seguenti pin:

clock: clock di sistema; sclr: synchronous clear. Convenzione: quando è attivo, il sistema viene resettato;

data: data stream in ingresso; out uscita FSK su m bit (andrà successivamente inviata al convertitore DA).

Per prima cosa, dal menù Start -> Risorse del computer si scelga Disco locale (C:). Si crei una cartella C:\Elettronica, e dentro se ne crei un’altra chiamata Modem_FSK. In questa cartella si inseriranno tutti i file del progetto.

Si apra l’ambiente Quartus II. Si faccia click su: File -> New Project Wizard,

all’apertura della finestra, si scelga Next >

, si scelga, facendo click su nel primo campo, la directory Modem_FSK precedentemente creata e si dia il nome “TX_FSK” al progetto,

specificandolo nel secondo e terzo campo. Si faccia click su Next >

fino ad arrivare alla

finestra seguente:

2

Nella finestra che si apre, si scelga la sigla EPM240T100C5 dalla lista, inoltre scegliere come simulatore il Model-Sim Altera col Verilog HDL.

Si clicchi su Finish . Si clicchi sull’icona e si scelga Block Diagram / Schematics File.

Si clicchi su OK . Si aprirà la consueta finestra con griglia, in cui si dovranno inserire i componenti illustrati in figura di pagina 1.

Si clicchi sull’icona . Si aprirà la finestra denominata “Symbol”. Si apra la libreria cliccando

sull’icona e si scelga Megafunction e la sottocartella Arithmetic, si scelga “lpm_counter”. Si disabiliti la funzione Repeat-insert mode, altrimenti si inseriranno più componenti e si controlli che sia abilitata la funzione Launch Megawizard Plug-In, come mostrato nella figura qui sotto.

3

Si faccia click su OK: si aprirà la finestra del “MegaWizard Plug-in”. Questa funzionalità di Quartus II consente in maniera molto intuitiva di costruire macroblocchi con funzionalità arbitrarie e configurabili.

Si imposti Verilog HDL come tipo di output file e si prema Next. Si scelga il numero di bit da realizzare, nel nostro caso 8 bit, si selezioni la modalità di conteggio Down Only e si prema Next. Nella schermata successiva, selezionare la modalità di conteggio Plain binary, attivare l’uscita opzionale Carry-Out e premere ancora Next. Nella terza schermata del “MegaWizard Plug-in” relativo all’ lpm_counter selezionare con un segno di spunta la casella relativa all’ingresso Synchronous Load e premere Next fino ad arrivare alla schermata finale di questo “MegaWizard Plug-in”:

A questo punto premere il pulsante Finish e posizionare il blocco creato nel Block Diagram aperto in precedenza. Abbiamo così creato il divisore di frequenza da usare nel nostro trasmettitore FSK.

Si riapra la libreria cliccando sull’icona si scelga Megafunction e la sottocartella Arithmetic, si scelga di nuovo “lpm_counter”. Questa volta il contatore dovrà avere le seguenti caratteristiche: uscita a 4 bit, modalità di conteggio Up Only e Plain binary, ingresso Count enable abilitato, ingresso Synchronous Clear attivo. Premere il pulsante Next fino ad arrivare all’ultima schermata del “MegaWizard Plug-in” e premere il pulsante Finish. Si è così creato il contatore che scandirà gli indirizzi della ROM. Posizionare il blocco creato come nello schema di pagina 1.

Collegare l’ingresso Count enable del contatore indirizzi all’uscita Carry out del divisore di frequenza.

Creare con l’apposito mfile (senoV.m, scaricabile dal sito) una rom contenente dei campioni di sinusoide. I parametri da fornire al Matlab sono nell’ordine i seguenti:

4

1) Numero di words = 16

2) Numero di bit per words = 4 3) Rappresentazione per eccesso

4) Chiamare “seno” il file così ottenuto (senza inserire nessuna estensione) Copiare il file Verilog generato (seno.v) nella cartella di lavoro (C:\Elettronica\Modem_FSK).

Aprire con il Quartus II il file seno.v. Per creare un blocco che rappresenti la nostra ROM bisogna poi seguire il seguente path: File-> Create/Update -> Create Symbol Files for Current File:

A questo punto aprire la libreria ciccando sull’icona e si scelga Project e si selezioni il componente SENO creato poco prima. Premere il pulsante OK e piazzare la ROM sul Block Diagram. Collegare l’ingresso indirizzi della ROM al bus di uscita q[3..0] del contatore indirizzi.

Si clicchi sull’icona . Si apra la libreria cliccando sull’icona , e si scelga Megafunction e la sottocartella Gates, si scelga “lpm_mux”.

Si clicchi su OK. Si scelgano 2 ingressi (nella prima combo box) da 8 bit ciascuno(seconda combo box). Si prema il pulsante Next fino ad arrivare all’ultima schermata del “MegaWizard Plug-in” e premere il pulsante Finish. Posizionare il blocco creato.

Collegare l’uscita a bus result[7..0] dell’Lpm_Mux all’ingresso Data[7..0], creatasi con l’abilitazione dell’ingresso Synchronous Load, del divisore di frequenza.

Si clicchi sull’icona . Si apra la libreria cliccando sull’icona , e si scelga Megafunction e la sottocartella Gates, si scelga “lpm_constant”. Si clicchi su OK. Si

5

imposti VERILOG HDL come tipo di output file e si prema Next. Si selezioni un’uscita a 8 bit. Si imposti il valore decimale da assegnare al blocco lpm_constant al valore decimale 192. Si prema il pulsante Next fino ad arrivare all’ultima schermata del “MegaWizard Plug-in” e premere il pulsante Finish. Posizionare il blocco creato.

Ripetere il procedimento appena fatto inserendo però nella nuovo blocco lpm_constant creato il valore decimale 105. Attenzione: non usare il copia e incolla!!!!

Collegare i blocchi lpm_constant creati ognuno ad uno dei due ingressi a bus di 8 bit del blocco lpm_mux.

Si clicchi sull’icona . Si apra la libreria cliccando sull’icona , e si scelga Primitives e la sottocartella Pin. Si scelga il pin “Input”e premere OK. Inserire tre blocchi di tipo input sul block diagram.

Si rinominino i pin di input nel modo seguente ck, sclr e data.

Si colleghi il pin di input clock agli ingressi clock dei vari blocchi presenti nel block diagram.

Si colleghi il pin di input data all’ingresso sel del blocco lpm_mux.

Si colleghi il pin di input sclr all’ingresso sclr del contatore indirizzi.

Per completare il trasmettitore FSK bisogna ora inserire una porta OR a due ingressi.

Si clicchi sull’icona . Si apra la libreria cliccando sull’icona , e si scelga Primitives e la sottocartella Logic e si selezioni la porta logica OR2.

Si inserisca la porta OR come nella figura di pagina 1.

Collegare i due ingressi della porta OR rispettivamente al pin sclr e all’uscita Carry out del divisore di frequenza effettuando, quindi, una sorta di retroazione. Collegare l’uscita della porta OR all’ingresso Synchronous Load del divisore di frequenza.

Il trasmettitore FSK fin qui creato ha un’uscita a quattro bit (uscita q[3..0] della ROM). Successivamente bisognerà collegare un convertitore D/A per ottenere la versione analogica da inviare sul canale. A partire dallo schema a blocchi, attraverso la funzione “Create/Update”, generare il corrispondente file Verilog ed aggiungerlo al progetto. Inoltre, cliccando col tasto destro del mouse sul file TX_FSK.dbf rimuoverlo dal progetto. Settare come “Top Level Entity” il file TX_FSK.v. Aprire il file .v generato ed osservare il listato.

Si proceda alla compilazione tramite l’icona , posta in alto sulla barra dei comandi. Finita la compilazione, si visualizzi il Report della compilazione. Le informazioni che vi sono indicate riguardano le fasi della compilazione. Le fasi sono le seguenti:

6

Analysis and Synthesis: in questa fase si analizza il progetto e viene generata la Netlist che specifica i collegamenti tra i vari componenti. Fitter: in questa fase il compilatore distribuisce nello spazio del CPLD le macrocelle contenenti i componenti del progetto. Assembler: in questa fase il compilatore produce il file binario per la programmazione del CPLD.

Timing Analyzer: in questa fase il compilatore analizza i tempi di propagazione nel CPLD, calcola il tempo peggiore e il tempo migliore specificando il percorso per cui si hanno.

7

Simulazione del Progetto. Per simulare il progetto occorre scrivere in Verilog un file di “test beng”.

Per creare un nuovo file Verilog si clicchi su e si scelga “Verilog HDL File” dalla scheda

Design Files e si prema OK .

.

Si aprirà un file vuoto in cui scrivere le istruzioni Verilog necessarie. Un esempio di listato è riportato nella figura in alto a destra. Trattandosi di una macchina sequenziale, occorre definire il segnale di clock attraverso l’istruzione “always”, che ripete in maniera indefinita le istruzioni comprese tra “begin” ed “end” successivi. Impostare la frequenza del clock a 3.68MHz. Inoltre occorre definire l’evoluzione temporale del segnale di synchronous clear, “sclr” e del segnale dati in ingresso, “data”, che, dovendo essere ripetuti una sola volta, devono essere definiti dopo l’istruzione “initial”. Relativamente al clear, fare in modo che lo stesso resti alto per qualche ciclo di clock in modo da inizializzare la macchina e successivamente portarlo allo stato logico 0. Per il segnale dati, settare opportunamente la durata dei bit, in modo da avere una velocità di trasmissione di 300BPS. Salvare il file col nome TX_FSK_tb. NB. Nell’esempio riportato nel listato in alto la segnalazione prevede la trasmissione continua di soli “0”.

8

Impostare opportunamente le opzioni di simulazione attraverso la schermata “Assignments/Settings/EDA Tool Settings/Simulation”, mettendo nel campo “Compile test bench” il nome del file precedentemente creato e l’”istance name” per il test bench.

Si proceda nuovamente con la compilazione tramite l’icona , posta in alto sulla barra dei comandi.

Lanciare la simulazione funzionale attraverso il comando “Tools/RunEDA Simulation Tool/EDA RTL Simulation”, come riportato nella schermata seguente.

9

Se il tutto è andato a buon fine, verrà lanciato il ModelSim e comparirà la schermata relativa alle forme d’onda del progetto. Selezionare i segnali corrispondenti ai bit di uscita e, attraverso un clic sul tasto destro del mouse, raggruppare gli stessi col comando “Group”. Successivamente sempre con il tasto destro selezionare come formato “Analog (automatic)”, e come “Radix”, “Unsigned”, in modo da visualizzare il segnale analogico corrispondente. Attraverso l’ausilio dei cursori misurare sia la frequenza di clock che le frequenze associate ai bit “1” e “0”, in modo da verificare la correttezza delle forme d’onda generate.

10

Assegnazione dei pin Prima di programmare la basetta, occorre assegnare i pin al nostro progetto.

Cosa significa assegnare i pin?

Significa specificare le corrispondenze tra gli input e gli output del progetto e quelli del CPLD. A cosa saranno collegati, fisicamente, i segnali clock, sclr e data? E quello di uscita?

Un’idea potrebbe essere quella di impiegare alcuni dei 16 interruttori on/off per specificare gli ingressi sclr e data. In appendice sono riportati i pin relativi a tali dispositivi.

Si potrebbero assegnare, per esempio, l’ingresso sclr allo switch SW1(pin 2) e l’ingresso data allo switch SW3(pin 6). Si scelga per l’ingresso Clock il pin dell’FPGA corrispondente al clock di sistema. Nel nostro caso tale pin è il pin 64.

Per ottenere l’uscita FSK sinusoidale occorre collegare alla scheda FPGA la schedina ausiliaria con a bordo il convertitore DAC, assegnando opportunamente i pin, secondo lo schema riportato nei files “PIN DAC-ADC.pdf”, e “BASETTA_ADC_DAC.pdf”.

Si ricordi che sia gli interruttori on/off che i led blu sono collegati in logica negata!!! Questo vuol dire che saranno necessarie delle NOT supplementari in ingresso e in uscita per ripristinare i segnali corretti.

Si noti come la porta not sia stata inserita solo all’ingresso data e non all’ingresso sclr. Ciò perché l’ingresso sclr rappresenta il segnale di reset generale del trasmettitore FSK, quindi deve essere alto solo quando si vuole resettare il progetto e basso altrimenti. Avendo assegnato l’ingresso sclr allo switch1 per fare ciò basterà premere una volta lo switch e lasciarlo poi sempre premuto per avere l’effetto desiderato.

Ai fini di assegnare i pin come stabilito sopra, si entri nel menù Assignments -> PinPlanner, si aprirà la seguente finestra:

11

Poiché in precedenza si è già simulato il circuito preparato nella colonna node name appariranno già i nomi dei pin da assegnare. Si faccia doppio click nella colonna Location in corrispondenza (per esempio) del pin clock. Si aprirà un menù a tendina, si scelga da questo menù il Pin_64.

Si ripetano le operazioni descritte sopra per gli altri pin, rispettando le assegnazioni descritte in appendice. (Vedi Appendice) Completata l’assegnazione dei pin, si salvi il file.

Che ne è degli altri pin inutilizzati del CPLD? E’ buona norma non lasciare “unspecified” alcun pin inutilizzato. Per fare ciò, si attivi Assignments… -> Device.

Si scelga il tasto Device & Pin Options… (v. sotto).

Si scelga la scheda Unused Pins e si scelga la voce “As input tri-stated with weak pull-up resistor” (v. sotto).

12

Si clicchi su OK e si compili di nuovo il progetto (tasto ). Se non si hanno errori, si proceda alla fase di programmazione del CPLD.

Set-up della basetta

Elenco del materiale che viene consegnato:

- basetta sperimentale - alimentatore

- kit tripla presa + adattatore schuko - cavetto di programmazione

Seguire scrupolosamente la seguente sequenza di operazioni: 1. Sincerarsi che l’alimentatore sia posizionato su 6V e inserirlo nella presa aggiuntiva.

2. Collegare lo spinotto di alimentazione alla basetta e accenderla con l’interruttore apposito. Se la basetta non dovesse accendersi subito, scollegare immediatamente lo spinotto e chiamare il docente!!!!

13

3. se la basetta si accende, è possibile che essa sia già programmata con vecchie esercitazioni. Non ci si stupisca, dunque, se il sistema incomincia alcune sequenze di operazioni (accensione di led, conteggi, ecc. ecc.)

Programmazione del CPLD

Si faccia click sull’icona . Nella finestra che si aprirà, si controlli che appaia, come di seguito, la scritta ByteBlaster [LPT1] (se non compare, v.sotto).

Se non dovesse comparire, si clicchi su Hardware setup…, si clicchi su Add Hardware… e si scelga ByteBlasterMV or ByteBlaster II. Si clicchi su OK. Adesso si clicchi su No Hardware e si scelga ByteBlasterII [LPT1]. Si clicchi su Close.

Si attivi l’opzione Program/Configure e si clicchi su Start per iniziare la programmazione:

Attenzione: il file utile alla programmazione è il file .pof. Quindi se non dovesse comparire nella colonna File un file .pof, premere col tasto destro nella colonna File e nel menù a tendina che si apre scegliere Change File . Da qui scegliere poi il file col nome del progetto desiderato e con estensione .pof.

14

Verifica del funzionamento Ora si verifichi il funzionamento del trasmettitore FSK.

In particolare si verifichi come in corrispondenza di un ingresso data a valore logico basso (switch 3 non premuto) si ottenga una sinusoide veloce a frequenza 2200Hz; mentre in corrispondenza di un ingresso data a valore logico alto (switch 3 premuto) si ottenga una sinusoide lenta a frequenza 1200Hz.

Per effettuare tale misurazioni si utilizzerà l’oscilloscopio Tektronix TDS3032 presente nel laboratorio di elettronica industriale. Al fine di ottenere le misure necessarie bisogna però apportare alcune modifiche alla basetta MAXII fornita. Come prima cosa bisogna impostare i jumper che controllano i cristalli del clock dell’FPGA in modo da ottenere il clock a frequenza massima possibile, ovvero 3,6864 MHz. In particolare spostare i due jumper J4 e J5 in modo da portarli rispettivamente in posizione J4.2-J4.3 e J5.2-J5.3

Con gli spostamenti effettuati abbiamo selezionato il cristallo a frequenza 3,6864MHz. Per ottenere però effettivamente un clock a 3,6864MH dobbiamo “cortocircuitare” i pin J13.9 e J13.13. Ciò è possibile utilizzando l’apposito jumper fornito insieme alla basetta.

Jumper J4 e J5

Pin J13.1÷J13.20

Pin J12.1÷J12.43

15

Appendice Pin relativi agli switch on/off e ai led della basetta e assegnazioni suggerite.

SW Pin del

CPLD SW1 2 SW2 3 SW3 6 SW4 7 SW5 15 SW6 16 SW7 19 SW8 20 SW9 4

SW10 5 SW11 8 SW12 12 SW13 17 SW14 18 SW15 21 SW16 26

NB: tutti gli switch sono attivi BASSI (switch premuto à

pin a “0”)

LED Pin del CPLD

LED1 48 LED2 49 LED3 43 LED4 47 LED5 37 LED6 39 LED7 90 LED8 88

NB: tutti i led sono attivi BASSI (“0” à led acceso)

sclr

data