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*
Scarica

Ecoscan