Convertitore Analogico / Digitale Output VREF LSB= VREF/2N 111 b0 Vin ~ b1 N bit-ADC bN 110 101 100 011 ENCODE 010 001 000 Vin ~ 0 VT1 VT2 VT3 VT4 VT5 VT6 VT7 VREF ENCODE b(N:0) LSB = risoluzione del convertitore < 0.1 % 40 ns risoluzione < (VREF /100)*0.1 VREF/2N < VREF/1000 LSB < VREF/1000 2N > 1000 N >= 10 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 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) 0 S1(3:0) Cin Cout A(3:0) C(3:0) S2(3:0) Cin R(3:0) B(3:0) S1(7:4) S2(10:0) R(7:4) R(11:0) Cout A(3:0) C(3:0) 0,S2(10:8) B(3:0) A(10:0) C(11:0) B(10:0) Cin 0,S1(10:8) A(3:0) C(3:0) S2(7:4) S1(10:0) Cout 12 bit adder tpd =30 ns B(3:0) R(11:8) ECOSCAN - Read Only Memory ADD(9:0) OE* ROM 1K*16 DATA(15:0) CE* CE* OE* ADD(9:0) DATA(15:0) A Alta impedenza DATO(A) Tempo accesso = 70 ns Alta impedenza ECOSCAN - Random Access Memory ADD(15:0) WE* OE* RAM 64K*16 DATA(15:0) CE* CE* OE* WE* ADD(9:0) A DATA(15:0) DATO(A) Tempo scrittura = 25 ns ECOSCAN Memory Mapping Spazio di indirizzamento PD32 (byte) Locazio ne 0x00000000 Spazio memoria programma PD32 Locazio ne 0x80000000 ECOSCAN internal RAM (256 Kbytes) Locazio ne 0x8003FFFF Locazio ne 0xFFFFFFFF Affinche’ il PD32 acceda in lettura la RAM interna ECOSCAN deve “tradurre” gli indirizzi del MAB PD32 in indirizzi validi per la RAM interna MAB(31:2) => ADD(15:0) 0x20000000 0x0000 0x20000001 0x0001 ................................................ ................................................ 0x2000FFFF 0xFFFF Poiche’ l’accesso e’ permesso solo a longword(32 bit) posso trascurare il valore dei segnali Mb(3:0) Architettura progetto ECOSCAN Memoria PD32 MDB PD32 MAB MCB RAM 64Kx16 ROM 1Kx16 ECOSCAN I/ODB I/OCB 20Mhz Clk ADC 10 bit Vin ~ 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) 64Kx16 RAM PD32 Interface RAM Interface RD(15:0) LOG ROM S/4 PIPELINE I/O Bus Dec. RA(15:0) I/ODB(7:0) I/OWR I/OAB(7:0) IACK Mem Map Dec. RAMENB* MRD 20 MHz CLK ADD SCANREQ* SCO 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 10 bit ADC Vin ~ ECOSCAN - SCO (RAMENB* timing) CLK (20 Mhz) SCANREQ* RAMENB* IRQ* TC* Scrittura ultima locazione memoria interna (ADD = 0xFFFF) SCANREQ* AND Clk@20 MHZ ADD = 0xFFFF or RESET D Q CLK PR* RAMENB* ECOSCAN - Pipeline Conversione A/D 12 bit adder (4 bit adder) Vin ~ 10 bit-ADC ENCODE + Campione precedente Clk@20Mhz 40 ns + 30 ns > 50 ns (20MHz) Pipeline register Vin ~ ADC(9:0) 10 bit-ADC ENCODE Q(9:0) D(9:0) CLK Clk@20Mhz Tempo pipe = Tencode + Tsu,R = 45 ns All’ingresso dell’addizionatore ECOSCAN - Pipeline Calcolo Media mobile S(i+3) 10 ns S(i+2) 10 S(i+1) S(i) 10 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 Calcolo Media mobile S(i+3) 10 ns 30 ns 5 ns S(i+2) 10 S(i+1) S(i) 10 10 10 + + 11 11 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 Calcolo Media mobile Uscita ADC S(i+3) S(i+2) 10 S(i+1) 10 S(i) 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 Calcolo Logaritmo M(i) 10 ns 70 ns 10 ROM 10 5 ns LOG(i) 85 ns > 50 ns !! 16 Due soluzioni: • Ridurre la frequenza di clock (non per noi) • Buffer Multipli a frequenza ridotta!! 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 Calcolo Logaritmo Valore Medio uno ogni 50 ns Clk@10mhz NOT 10 ns M(i) M(i+1) 10 ns 10 70 ns 10 ROM 1 ROM 2 OE 5 ns OE 10 10 Clk@20mhz RAMENB* LOG(i) L’uscita va connessa al bus bidirezionale della memoria interna e quindi il registro deve essere dotato di uscite TRISTATE 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 STATO RAMENB* = 0 RAMENB* = 1 ADD CE* OE* WE* ADD(SCO) 0 1 RAMWE* MAB(17:0) RAMRD*(0) RAMRD* 1 • 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 • Generazione Clk (CLK@10Mhz) • Generazione segnale RAMWE* (Clk@20Mhz ma dopo 8 cicli inizio acquisizione) 3 BIT COUNTER Clk@20mhz CLK Q0 Clk@10mhz Q1 RAMENB* CL Clk@20mhz Q2 RAMWE* OR 0 Q D WRENB* Q* CLK* PR 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 0 1 2 CLK@20MHZ Q(3:0) CLK@10MHZ Q2 WRENB* RAMWE* 11 12 13 14 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 RAMENB* Q(15:0) Q(15) CL 0 Q D “fine acquisizione” agisce sul preset del DFF che genera RAMENB* Q* CLK* PR 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 0 1 2 1 2 11 12 13 14 3 4 5 6 CLK@20MHZ Q(3:0) CLK@10MHZ Q2 WRENB* RAMWE* RA(15:0) 0 7 8 9 10 ECOSCAN - SCO • Generazione segnale IRQ* per richiesta interrupt a fine acquisizione 1 RAMENB* Q D Q* CLK CL IACK CLK (20 Mhz) SCANREQ* RAMENB* “fine acquisizione” IRQ* 0 IRQ*