Architettura progetto Memoria PD32 MDB PD32 MAB MCB RAM 64Kx8 8 Khz Clock VOXMSG I/ODB I/OAB I/OCB 12 bits DAC Blocchi funzionali unita’ VOXMSG • INTERFACCIA I/O BUS • PD32 => VOXMSG - Fornire il segnale di inizio riproduzione messaggio - Programmare la lunghezza della sequenza da riprodurre • VOXMSG => PD32 •- Generazione di un interrupt alla fine della riproduzione • CONTROLLORE RAM INTERNA (64Kx8) - Gestione accessi PD32 in scrittura (memory mapped) - Gestione accessi in lettura per riproduzione messaggio • INTERFACCIA con il DAC - Formattazione dei dati e presentazione ad 8 Khz • SCO - Gestione del Timing Protocollo PD32 VOXMSG 1) Caricamento nella RAM di VOXMSG della sequenza di campioni 2) Caricamento in VOXMSG della lunghezza della sequenza da riprodurre 3) Attivazione della riproduzione del messaggio 4) Preleva i dati dalla RAM e li presenta in ingresso la DAC in formato 12 bit alla frequenza di 8 Khz 5) Invia un Interrupt al PD32 Protocollo PD32 Routine assembler 1) Caricamento nella RAM di VOXMSG della sequenza di campioni 2) Caricamento in VOXMSG della lunghezza della sequenza da riprodurre (LENGHT) 3) Attivazione della riproduzione del messaggio label1 ....................................... MOV 1 in registro R1 MOV da memoria a registro R2 valore LENGHT MOV da memoria a registro R3 R1-campione INC R1 JUMP labe11 se R1 < R2 MOV R2 nel registro di VOXMSG ........................................ Protocollo ATTESA VOXMSG NO START ? SI Per generare il segnale di start utilizzo la scrittura della lunghezza ADD = 0 Leggi MEM( ADD) ADD = ADD + 1 Leggi MEM(ADD) ADD = ADD + 1 LENGHT = LENGHT -1 LENGHT = 0 SI Interrupt Request NO 4) Preleva i dati dalla RAM e li presenta in ingresso la DAC in formato 12 bit alla frequenza di 8 Khz 5) Invia un Interrupt al PD32 VOXMSG Schema a blocchi funzionale - prima approssimazione - I/ODB(31:0) I/OWR I/OAB(7:0) /IRQ IACK LENGHT Interfaccia I/O bus 8Khz Clk Start Play SCO 8 Khz CLK ADD MDB(31:0) MWR MAB(31:2) Mb0 Mb1 Mb2 Mb3 Controllore RAM RA(15:0) 64Kx8 RAM RD(7:0) Interfaccia DAC DAC Reg. (11:0) al DAC primo timing CLK (8 Khz) START PLAY IRQ* TC* Fine della riproduzione del messaggio (LENGHT = 0) INTERFACCIA I/O BUS PD32 => VOXMSG •Fornire il segnale di inizio riproduzione messaggio •Programmare la lunghezza della sequenza da riprodurre CLK (8Khz) I/OAB(14:0) CLK D(14:0) PLAY CE TC* I/OWR I/OAB(7:0) NAND 9 input decodifica accesso porta indirizzo 0xFF alla SCO LOAD* Contatore 15 bit con caricamento parallelo asincrono START INTERFACCIA I/O BUS VOXMSG => PD32 • Generazione di un interrupt alla fine della riproduzione 1 TC* D Q CLK CL 0 IVN IACK IRQ* I/ODB(7:0) timing per interfaccia DAC CLK (8 Khz) PLAY RA(15:0) RD(7:0) 0 LSB0 1 2 3 MSB0 LSB1 4 MSB1 LSB2 5 6 2N-4 MSB2 LSB3 2N-3 2N-2 MSBN-2 LSBN-1 2N-1 MSBN-1 CLKLSB CLKMSB conversione campione 0 Dato proveniente dalla RAM interna al VOXMSG conversione campione 1 conversione campione 2 (3:0) conversione campione N-2 conversione campione N-1 D(11:8) Q(11:0) RD(7:0) D(7:0) Q(7:0) CLKLSB CLK D(7:0) CLKMSB CLK Il campione a 12 bit viene tenuto stabile all’ingresso del DAC SCO •Generazione dei clocks •Gestione interazione segnali START/PLAY •Generazione indirizzi RAM interna al VOXMSG 1 START D Q D CLK Q PLAY CLK CL* TC CLKMSB CLK 8 KHz NOT CLKLSB CLK PLAY CLEAR RA(0) Q(14:0) 15 BIT COUNTER RA(15:1) Controllore RAM Memoria SRAM 64Kx8 RA(15:0) A (15:0) MDB(31:0) MAB(15:2),A1,A0 D(7:0) D (7:0) PLAY Blocco RD/WR RD(7:0) RD/WR* NOT CE* PLAY* PLAY* NAND 3 inputs MWR Decodifica memory mapping MAB(31:16) (0xFFF0XXXX) PLAY A0 A1 NOR 2 inputs Decodifica 32 to 8 bit Mb0 Mb1 Mb2 Mb3 Blocco RD/WR PLAY* Mb0 AND 2 inputs MDB(7:0) Mb1 AND 2 inputs MDB(15:8) Mb2 x8 x8 D(7:0) AND 2 inputs MDB(23:16) x8 RD(7:0) Mb3 AND 2 inputs MDB(31:24) x8 “Memory Mapping” Spazio di indirizzamento PD32 Locazio ne 0x00000000 Spazio memoria programma PD32 Locazio ne 0x00FF0000 Locazio ne 0x00FFFFFF Spazio “DEVICE-0” Area inutilizzata Locazio ne 0xF0000000 Spazio “DEVICE-N” Locazio ne 0xFFFFFFFF Quando e’ necessario si puo’ utilizzare una parte dello spazio di indirizzamento del PD32 per “mappare”una periferica sul bus dati invece che su quello di I/O PD32 MAB(31:2),Mb0,Mb1,Mb2,Mb3 Decodifica address < 0x00FF0000 Decodifica address 0x00FFXXXX Decodifica address 0xFXXXXXXX Memoria Programma DEVICE-0 DEVICE-N