Convertitore Analogico / Digitale Output VREF LSB= VREF/2N 111 N bit-ADC b0 110 Vin ~ b1 101 100 bN 011 ENCODE 010 001 000 Vin ~ VT1 VT2 VT3 VT4 VT5 VT6 VT7 VREF ENCODE b(N:0) LSB = risoluzione del convertitore < 0.1 % risoluzione < (VREF /100)*0.1 LSB < VREF/1000 VREF/2N < VREF/1000 2N > 1000 N >= 10 40 ns
Media Mobile ECOSCAN Media mobile su 4 campioni => M(K) = S i=0..3 S(K+i)/4 M(0) = [S(0) + S(1) + S(2) + S(3)] /4 M(1) = [S(1) + S(2) + S(3) + S(4)] /4 M(2) = [S(1) + S(2) + S(3) + S(4)] /4 .............................................................. M(65535) = [S(65535) + S(65536) + S(65537) + S(65538)]/4 Valore max. possibile della somma campioni = 1023(10 bit)*4 = 4092 rappresentabile con 12 bit (e’ la dimensione dei sommatori) Il risultato M(i) e’ ancora a 10 bit (i bit MSB della somma dei campioni)
Sommatori 12 bit R(11:0) = S1(10:0) + S2(10:0) 4 bit adder tpd =10 ns Cin Cout 4 bit adder tpd =10 ns A(3:0) C(3:0) B(3:0) R(11:0) = S1(10:0) + S2(10:0) Cin Cout Cin Cout Cin Cout 0,S1(10:8) S1(3:0) A(3:0) S1(7:4) A(3:0) A(3:0) R(3:0) R(7:4) R(11:8) C(3:0) C(3:0) C(3:0) 0,S2(10:8) S2(3:0) B(3:0) S2(7:4) B(3:0) B(3:0) S1(10:0) A(10:0) 12 bit adder tpd =30 ns C(11:0) R(11:0) S2(10:0) B(10:0)
ECOSCAN - Read Only Memory ROM 1K*16 ADD(9:0) DATA(15:0) OE* CE* CE* OE* ADD(9:0) A Alta impedenza Alta impedenza DATO(A) DATA(15:0) Tempo accesso = 70 ns
ECOSCAN - Random Access Memory RAM 64K*16 ADD(15:0) DATA(15:0) WE* OE* CE* CE* OE* WE* ADD(9:0) A DATO(A) DATA(15:0) Tempo scrittura = 25 ns
ECOSCAN Memory Mapping Spazio di indirizzamento PD32 (byte) Locazio ne 0x00000000 Spazio memoria programma PD32 Affinche’ il PD32 acceda in lettura la RAM interna ECOSCAN deve “tradurre” gli indirizzi del MAB PD32 in indirizzi validi per la RAM interna Locazio ne 0x80000000 MAB(31:2) => ADD(15:0) 0x20000000 0x0000 0x20000001 0x0001 ................................................ 0x2000FFFF 0xFFFF ECOSCAN internal RAM (256 Kbytes) Locazio ne 0x8003FFFF Poiche’ l’accesso e’ permesso solo a longword(32 bit) posso trascurare il valore dei segnali Mb(3:0) Locazio ne 0xFFFFFFFF
Architettura progetto ECOSCAN Memoria PD32 PD32 ECOSCAN MDB RAM 64Kx16 ROM 1Kx16 ADC 10 bit Vin ~ MAB MCB 20Mhz Clk I/ODB I/OCB
Blocchi funzionali unita’ ECOSCAN PIPELINE - conversione segnale analogico (20 Mhz) - calcolo media mobile - calcolo logaritmo RAM INTERFACE - gestione segnali RAM interna (ADD,DATA,WE*,OE*,CS*) PD32 INTERFACE - decodifica “memory mapping” in lettura (MAB,MWR) - produzione segnale inizio acquisizione (SCANREQ*) - generazione IVN durante la fase di richiesta interrupt SCO - gestione timing acquisizione (SCANREQ*) - generazione address e segnali di controllo per scritture valori calcolati - gestione dei segnali di clock - gestione Interrupt Request (IRQ*,IACK)
Protocollo ECOSCAN PD32 ECOSCAN 1) Generazione via software del segnale di inizio acquisizione: OUTB S,0xFF 2) Generazione segnale inizio acquisizione SCANREQ* 3) Processamento campioni (uno ogni 50 ns): - Conversione A/D - Calcolo media mobile - Calcolo logaritmo - Scrittura in memoria 4) Invia un Interrupt al PD32 dopo 65536 scritture 5) Serve la richiesta di interruzione 6) Puo’ accedere ai dati in memoria ECOSCAN
ECOSCAN Schema a blocchi funzionale - prima approssimazione - MDB(15:0) MAB(31:2) PD32 Interface Mem Map Dec. RAM Interface 64Kx16 RAM RD(15:0) PIPELINE MRD LOG ROM S/4 10 bit ADC Vin ~ I/ODB(7:0) I/OWR I/OAB(7:0) I/O Bus Dec. IACK RAMENB* RA(15:0) SCO ADD 20 MHz CLK SCANREQ* IRQ* Il segnale RAMENB* sara’ attivo (0) solo durante la fase 3 del protocollo cioe’ quando la memoria interna e’ controllata dalla SCO di ECOSCAN
locazione memoria interna ECOSCAN - SCO (RAMENB* timing) CLK (20 Mhz) SCANREQ* RAMENB* IRQ* TC* Scrittura ultima locazione memoria interna (ADD = 0xFFFF) AND SCANREQ* D Q RAMENB* Clk@20 MHZ CLK PR* ADD = 0xFFFF or RESET
ECOSCAN - Pipeline + 40 ns + 30 ns > 50 ns (20MHz) Conversione A/D 12 bit adder (4 bit adder) 10 bit-ADC Vin ~ + ENCODE Clk@20Mhz Campione precedente 40 ns + 30 ns > 50 ns (20MHz) Pipeline register 10 bit-ADC Vin ~ Q(9:0) ADC(9:0) D(9:0) All’ingresso dell’addizionatore ENCODE CLK Clk@20Mhz Tempo pipe = Tencode + Tsu,R = 45 ns
+ + + ECOSCAN - Pipeline S(i+3) S(i+2) S(i+1) S(i) Calcolo Media mobile S(i+3) S(i+2) S(i+1) S(i) 10 10 10 ns 10 10 + + 30 ns 11 11 + 30 ns 12 Prendo i 10 bit MSB del risultato per effettuare la divisione per 4 70 ns > 50 ns !!
+ + + ECOSCAN - Pipeline S(i+3) S(i+2) S(i+1) S(i) M(i) Calcolo Media mobile S(i+3) S(i+2) S(i+1) S(i) 10 10 10 ns 10 10 + + 30 ns 11 11 5 ns S(i+1)+S(i) S(i+2)+S(i+3) 10 ns + 30 ns 10 (MSB) 5 ns M(i) Per entrambe le pipe si ha Tpipe = Tpd,R + Tpd,Adder(12) + Tsu.R = 45 ns
+ + + ECOSCAN - Pipeline S(i+3) S(i+2) S(i+1) S(i) M(i) Calcolo Media mobile Uscita ADC S(i+3) S(i+2) S(i+1) S(i) 10 10 10 10 + + 11 11 S(i+1)+S(i) S(i+2)+S(i+3) + Il tempo di pipe rimane invariato ma il tempo di latenza di questo blocco e’ pari a 6 cicli del CLK dei registri 10 (MSB) M(i) Ingresso alla LOG-ROM
ECOSCAN - Pipeline M(i) ROM LOG(i) Calcolo Logaritmo M(i) 10 ns 10 ROM 70 ns 10 5 ns LOG(i) Due soluzioni: Ridurre la frequenza di clock (non per noi) Buffer Multipli a frequenza ridotta!! 85 ns > 50 ns !! 16 Poiche’ il tempo di pipe e’ Tclk < tpipe < 2*Tclk introduciamo due buffer a frequenza CLK/2 = 10Mhz all’uscita dell’ultimo addizionatore ed utilizziamo due ROM in parallelo
ECOSCAN - Pipeline M(i) M(i+1) ROM 1 ROM 2 LOG(i) Calcolo Logaritmo Valore Medio uno ogni 50 ns Clk@10mhz NOT 10 ns M(i) M(i+1) 10 ns 10 10 ROM 1 ROM 2 70 ns OE OE 10 10 5 ns L’uscita va connessa al bus bidirezionale della memoria interna e quindi il registro deve essere dotato di uscite TRISTATE Clk@20mhz LOG(i) RAMENB* OE* 16 Tpipe(max) = Tpd,NOT + Tpd,R + Ta,ROM + Tsu.R = 95 ns La latenza e’ pari a 2 cicli del CLK@20Mhz
ECOSCAN - RAM Interface Gestione segnali SRAM Segnale RAMRD* = Il PD32 ha indirizzato ECOSCAN ( MAB(31:18) = 0x2000 e MRD = 1) Proviene dal blocco “PD32 Interface” Segnale RAMWE* = ha la stessa temporizzazione di un clk 20 Mhz ma si deve attivare solo dopo che il tempo di latenza della PIPELINE e’ finito ( 8 cicli da RAMENB* = 0) Proviene dalla SCO.
ECOSCAN - SCO OR Generazione Clk (CLK@10Mhz) Generazione segnale RAMWE* (Clk@20Mhz ma dopo 8 cicli inizio acquisizione) 3 BIT COUNTER Clk@20mhz Clk@10mhz CLK Q0 RAMENB* Q1 Clk@20mhz OR RAMWE* CL Q2 D Q CLK* PR Q* WRENB* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CLK@20MHZ Q(3:0) 1 2 3 4 5 6 7 1 2 CLK@10MHZ Q2 WRENB* RAMWE*
ECOSCAN - SCO Generazione Address memoria interna (0x0000 a 0xFFFF) Generazione segnale “fine acquisizione” ( ADD = 0xFFFF) per preset RAMENB*) 16 BIT COUNTER Address per RAM RANWE* CLK Q(15:0) RAMENB* Q(15) CL D Q CLK* PR Q* “fine acquisizione” agisce sul preset del DFF che genera RAMENB* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CLK@20MHZ Q(3:0) 1 2 3 4 5 6 7 1 2 CLK@10MHZ Q2 WRENB* RAMWE* RA(15:0) 1 2 3 4 5 6 7 8 9 10
ECOSCAN - SCO Generazione segnale IRQ* per richiesta interrupt a fine acquisizione 1 D Q CLK CL Q* IRQ* RAMENB* IACK CLK (20 Mhz) SCANREQ* RAMENB* “fine acquisizione” IRQ*