• Non ci sono risultati.

Generazione Latch e ResetD

Nel documento Politecnico di Torino (pagine 102-106)

Capitolo 8. Programmazione scheda DT5550W / A55CIT4

8.1 Generazione Latch e ResetD

Il Latch e il ResetD sono due comandi che, come anticipato, provengono dal DDS. Tuttavia, sia per costruire il codice SCI-Compiler sia per testarlo, è necessario simulare questi comandi, rendendoli uguali a quelli che arriverebbero dal DDS. Questo viene fatto nel subdiagram d enominato

“Generazione Latch”. Il diagramma a blocchi è visibile in Fig. 8.5. Il blocco principale è il Pulse Generator (Fig. 8.6), che permette la generazione di un’onda periodica dandogli degli input relativi

93 Fig.8.5. Subdiagram "Generazione Latch".

Fig.8.6. Pulse Generator.

alle caratteristiche dell’onda. L’input “PULSE_PERIOD” e “PULSE_WIDTH” indicano rispettivamente il periodo dell’impulso e la sua larghezza, ossia il tempo in cui si trova a livello logico alto sull’intero periodo. Il valore di questi input deve essere dato in termini di cicli di clock e l’input deve essere una parola a 32 bit, come segnalato sull’help del Pulse Generator. L’input “CE”

abilita la generazione dell’output quando vede in ingresso un 1 logico; in caso contrario il segn ale non viene generato. L’input “CLK” indica il clock interno del blocco. Molti blocchi hanno un proprio clock interno su SCI-Compiler; in questo caso, infatti, i valori di cicli di clock inseriti nei primi due input del blocco fanno riferimento proprio a questo clock. Infine, l’input “RESET” serve per resettare il processo di generazione dell’onda in uscita, che avviene quando quel pin vede in ingresso un 1 logico.

Nella Fig. 8.5 si notano tre blocchetti denominati “SCHEMATIC ENTRY”. Questi blocchi sono utilizzati per trasferire segnali dal top a un subdiagram (Schematic Port In), o da un subdiagram al top (Schematic Port Out). Nel diagramma ci sono due Schematic Port In (“period” e “dc”) e una Schematic Port Out (“Start”). Il segnale “period” viene mandato nel blocco SUB che sottrae il primo input (“period”) e il secondo (in questo caso 1). A breve verrà spiegato il motivo della presenza di questo blocco. Gli ultimi tre pin del Pulse Generator non hanno alcun blocco collegato.

Questo significa che in quei pin viene dato in ingresso un valore di default come suggerito dall’help:

• In CE il valore di default è 1; la generazione dell’output è sempre abilitata;

• In CLK viene dato il clock di default che è quello a 160 MHz;

• In RESET il valore di default è lo 0 logico; il blocco, quindi, non viene resettato mai.

94 Fig.8.7. Latch e ResetD (parte di diagramma sul top).

Il subdiagram viene richiamato sul top. La parte di diagramma sul top relativa alla generazione di Latch e ResetD è quella in Fig. 8.7. Il blocco rosso, denominato “Generazione Latch”, sarebbe il diagramma rappresentato in Fig. 8.5, richiamato sul top, come si può notare dai due ingressi

“period” e “dc” e dall’uscita “Start”. A “period” si dà il valore di 16000. Questo perché il segnale di Latch, da specifica, deve avere un periodo di 100 µs. Considerando che quel valore indica 16000 cicli di un clock da 160 MHz, si può intendere che questo equivale a dare all’onda da generare un periodo di 100 µs. Effettuando lo stesso ragionamento, dando il valore di 16 a “dc”, si impone che l’onda deve rimanere a livello logico alto per 100 ns, come da specifica. Tuttavia, considerando che al valore 16000 di period gli viene sottratto 1 con il blocco sottrattore SUB, si dà in ingresso al pin

“PULSE_PERIOD” del Pulse Generator il valore 15999. Questa operazione è stata necessaria perché è stato possibile osservare sperimentalmente tramite l’oscilloscopio che, dando 16000 come valore di periodo, si otteneva un impulso con un periodo di 100 µs più un ciclo di clock, che, p er un clock da 160 MHz, equivale a circa 6,25 ns. Facendo quella sottrazione, invece, l’onda ha un periodo precisamente di 100 µs. Questo vale in generale nell’utilizzo del Pulse Generator; anche più avanti nella spiegazione del codice, si troverà sempre un valore di ingresso a “PULSE_PERIOD”

pari al valore desiderato meno un ciclo di clock. Questo discorso, invece, non vale per il pin

“PULSE_WIDTH”, in questo caso pari a 16 che, come è stato osservato dall’oscilloscopio, genera un impulso di larghezza pari esattamente a 100 ns.

Per poter avere il Latch e il ResetD in ingresso alla scheda come se provenissero dal DDS, è stata adottata la seguente tecnica: i due segnali vengono mandati in output su due LEMO differenti (programmati come output), portati verso l’oscilloscopio con due cavi LEMO, dove è possibile visualizzarli e, con un connettore a T, vengono riportati indietro, verso altri due LEMO (programmati come input). In Fig. 8.8 è possibile osservare questa configurazione: nel caso in figura è riportata la configurazione per un solo segnale. Per quanto riguarda il firmware, questo meccanismo è stato implementato nel seguente modo (riportato sempre in Fig. 8.7): sono stati selezionati i blocchi di SCI-Compiler che si riferiscono ai LEMO, i quali possono essere scelti a coppie di due. In Fig. 8.7, infatti, si vedono le coppie di LEMO 0 e 1 e di LEMO 2 e 3. I LEMO 0 e 1 sono stati programmati in uscita, come si può notare dal collegamento del blocco “False” (che indica uno 0 logico) al pin “DIR-OUT (0)”, il quale imposta quei due LEMO come output. In “IN A” è stato collegato il segnale “Start” (ossia il Latch), in “IN B” è stato collegato il segnale di ResetD. Questo è stato implementato come un registro in lettura (blocco verde). Utilizzando il

95 Fig.8.8. Configurazione di connettori e cavi per mandare in uscita un segnale da un LEMO e riportarlo indietro in

ingresso su un altro LEMO.

registro, l’utente può scrivere un qualsiasi valore da tastiera che verrà letto sul pin al quale il registro si collega. In questo caso al registro è stata data la possibilità di scrivere in quel pin due bit, ossia 0 o 1. Quando si ha 0 il ResetD non ha alcun effetto sul codice. Quando si fa leggere sul pin del LEMO l’1 logico, allora avviene il reset dei contatori dei 128 canali di acquisizione. È possibile, così, interagire con il programma in esecuzione sulla scheda grazie al pulsante “Resource Explorer”

presente su SCI-Compiler, di cui si è parlato già nel Par. 7.2.3. In questo modo, si possono resettare in qualsiasi momento i contatori, rispettando la specifica che vuole il segnale di ResetD essere un comando asincrono. Infine, si ha il blocco LEMO 2 e 3, che viene programmato come input, grazie al blocco “True” (che indica il livello logico alto) collegato al pin “DIR-OUT (0)”, il quale imposta i due LEMO come input. Questi LEMO ricevono in ingresso i segnali che prima sono stati mandati in uscita dai LEMO 0 e 1. Una volta portati in ingresso, i due segnali possono essere usati all’interno del firmware e collegati ad altri blocchi a partire dai pin “OUT A” e “OUT B” del blocco LEMO 2 e 3. I rettangoli gialli a cui si collegano i fili da “OUT A” e “OUT B” sono dei blocchi denominati “Variable Read”. Questi servono per leggere e memorizzare il valore del pin del blocc o al quale è collegato. Esisterà nel programma un blocco graficamente identico che si chiama

“Variable Write”, il quale serve per scrivere quello stesso valore su un pin di un altro blocco al quale il “Variable Write” si collega. “Variable Read” e “Variable Write” sono usati insieme per evitare di collegare due pin di due blocchi diversi utilizzando un filo, nel caso in cui i due blocchi da collegare siano molto lontani nel diagramma. In questo caso, questa tecnica è stata utilizzata con

96 il Latch e il ResetD che dovranno essere collegati a vari pin nel diagramma top, in maniera tale da far risultare il diagramma più ordinato avendo meno fili.

In conclusione, il segnale di Latch viene portato fuori sul LEMO 0 e ricevuto in ingresso sul LEMO 2 mentre il segnale di ResetD viene portato fuori sul LEMO 1 e ricevuto in ingresso sul LEMO 3.

Nel documento Politecnico di Torino (pagine 102-106)