SHMARB - Ciclo di Read PD32 T1 T2 MAB T3 Utilizzo del segnale di WAIT*: A • Memorie o periferiche lente • Memoria condivisa • Controllore DMA MRD DATO MDB T1 MAB T2 TW1 TW2 TW3 T3 A MRD MDB WAIT* DATO SHMARB - Ciclo di Write PD32 T1 MAB T2 T3 A MWR DATO MDB T1 MAB T2 TW1 TW2 A MWR MDB WAIT* DATO TW3 T3 SHMEM ADD(21:0) SHMEMWE SHMEMOE SHMEMCE0 WE OE RAM0 4M*8 CE SHMEMD(7:0) D(7:0) A(21:0) WE SHMEMCE1 OE SHMEMWE RAM1 4M*8 CE 16 Mbytes (4M*32) accessibile a byte , word, longword SHMEMOE SHMEMCE0 SHMEMD(15:8) D(7:0) SHMEMCE1 SHMEMCE2 SHMEMCE3 SHMEMA(21:0) SHMEMA(21:0) ADD(21:0) WE SHMEMCE2 OE RAM2 4M*8 CE SHMEMD(23:16) D(7:0) ADD(21:0) WE SHMEMCE3 OE CE RAM3 4M*8 D(7:0) SHMEMD(31:24) SHMEMD(31:0) SHMEM Memory Mapping Spazio di indirizzamento PD32 (byte) Locazio ne 0x00000000 Spazio memoria programma PD32 MAB(31:2) => SHMEMA(21:0) 0x3C000000 0x000000 0x3C000001 0x000001 ................................................ ................................................ 0x3C3FFFFF 0x3FFFFF Locazio ne 0xF0000000 SHMEM shared RAM (16 Mbytes) Locazio ne 0xF0FFFFFF Locazio ne 0xFFFFFFFF Affinche’ il PD32 acceda in lettura la RAM interna SHMARB deve “tradurre” gli indirizzi del MAB PD32 in indirizzi validi per la SHMEM MAB(31:24) si usa per la decodifica MAB(23:2) si usa per la generazione SHMEMA inoltre per garantire tutti i tipi di accesso Mb0 Mb1 Mb2 Mb3 => => => => SHMEMCE0 SHMEMCE1 SHMEMCE2 SHMEMCE3 SHMARB - Encoder FLAG0 MARKER0(3:0) FLAG1 MARKER1(3:0) FLAG2 MARKER2(3:0) FLAG3 MARKER3(3:0) PDEN(1:0) PDEN = i abilita l’accesso del PD32i alla SHMEM Architettura progetto SHMARB Memoria PD32-0 PD32-0 MDB-0 MAB-0 MCB-0 Encoder MARKER counter Internal Clk SHMARB Memoria PD32-3 PD32-3 MDB-3 MAB-3 MCB-3 SHMEMA SHMEMD SHMEMC SHMEM (4M*32) Blocchi funzionali unita’ SHMARB • SHMEM INTERFACE - gestione segnali SHMEM SHMEMA SHMEMD SHMEMCEi,SHMEMWE,SHEMEMRD • PD32 DECODING - decodifica “memory mapping” MAB(31:24),MWR,MRD - generazione flag richiesta accesso inizio (MEMREQ-i) • SCO - gestione timing flag (FLAG-i) - generazione marker temporali - gestione linee di WAIT*-i - gestione abilitazione accesso SHMEM Protocollo SHMARB PD32 1) Inizio ciclo di accesso di uno piu’ PD32 SHMARB (al reset la SHMEM e’ libera) 2) Memoria libera 3) Generazione flag richiesta di accesso (MEMREQ-i) e MARKER temporale (MARKER-i(3:0)) Inizio ciclo di accesso di uno piu’ PD32 4) Lettura Encoder ed abilitazione di un PD32 all’accesso con eventuale gestione del WAIT per gli altri. Durante l’accesso di un PD32 devo garantire il punto 3 per gli altri PD32 e conseguente generazione WAIT states 5) Alla fine del ciclo di accesso: - Se non ho richieste attive (MEMREQi) torno al punto 2 - Se ho richieste attive torno al punto 4 Protocollo SHMARB RESET NON ci sono richieste di accesso SHMARB MEM FREE (al reset la SHMEM e’ libera) 2) Memoria libera Richiesta di accesso Ciclo R/W finito e NON ci sono richieste di accesso READ ENC Ciclo R/W finitoe ci sono richieste di accesso MEM BUSY 3) Generazione flag richiesta di accesso (MEMREQi) e MARKER temporale (MARKi(3:0)) 4) Lettura Encoder ed abilitazione di un PD32 all’accesso con eventuale gestione del WAIT per gli altri. Durante l’accesso di un PD32 devo garantire il punto 3 per gli altri PD32 e conseguente generazione WAIT states 5) Alla fine del ciclo di accesso: - Se non ho richieste attive (MEMREQi) torno al punto 2 - Se ho richieste attive torno al punto 4 Ciclo R/W in corso SHMARB Schema a blocchi funzionale - prima approssimazione MRD-0,MWR-0,Mb-0(3:0) MDB-0(31:0) MAB-0(23:2) SHMEMOE SHMEMWE SHMEMCE3 SHMEMCE2 SHMEMCE1 MRD-1,MWR-1,Mb-1(3:0) MDB-1(31:0) MAB-1(23:2) MRD-2,MWR-2,Mb-2(3:0) MDB-2(31:0) MAB-2(23:2) SHMEMCE0 SHMEM Interface SHMEMA(31:0) SHMEMD(31:0) MRD-3,MWR-3,Mb-3(3:0) MDB-3(31:0) MAB-3(23:2) WAIT*-i ENABLE-i MRD-0,MWR-0 MAB-0(31:24) MRD-1,MWR-1 MAB-1(31:24) MRD-2,MWR-2 MAB-2(31:24) MRD-3,MWR-3 MAB-3(31:24) MEMREQ-i PD32 Decoding Mem Map Dec. SCO MARKER Internal CLK Encoder SHMARB - SHMEM INTERFACE Segnali di controllo ENABLE-0 ENABLE-0 ENABLE-0 MWR-0 MRD-0 Mb-0(3:0) ENABLE-1 ENABLE-1 ENABLE-1 MWR-1 MRD-1 Mb-1(3:0) ENABLE-2 SHMEMWE ENABLE-2 SHMEMOE ENABLE-2 MWR-2 MRD-2 Mb-2(3:0) ENABLE-3 ENABLE-3 ENABLE-3 MWR-3 MRD-3 Mb-3(3:0) SHMEMCE(3:0) SHMARB - SHMEM INTERFACE Address e Data Bus ENABLE-0 MAB-0(23:2) ENABLE-1 MAB-1(23:2) ENABLE-2 MAB-2(23:2) Questa logica va ripetuta 4 volte ENABLE-3 MAB-3(23:2) ENABLE-i MWR-i MDB-i (31:0) ENABLE-i MRD-i AND SHMEMD(31:0) AND SHMEMA(21:0) SHMARB - PD32 DECODING Generazione MEMREQ-i MAB-i (24) MAB-i (25) MAB-i (26) MAB-i (27) NOR Decodifica MAB(31:24) = 0xF0 MAB-i (28) MAB-i (29) MAB-i (30) MAB-i (31) MWR-i MRD-i AND AND MEMREQ-i OR Questa logica e’ ripetuta 4 volte per i che va (0..3) SHMARB - SCO (MEMREQ-i timing) Fine ciclo di accesso Internal CLK MEMREQ-i (MRD or MWR) FLAG-i MARKER-i PDEN(1:0) i- abilitato CLKEN ENABLE-i WAIT*-i ENWAIT* MEM FREE READ ENC MEM BUSY SHMARB - SCO - gestione timing flag (FLAGi) - generazione marker temporali MEMREQ-3 D3 Q3 FLAG-3 MEMREQ-2 D2 Q2 FLAG-2 MEMREQ-1 D1 Q1 FLAG-1 MEMREQ-0 D0 Q0 FLAG-0 CLK MARKER REGISTERS CLK CL RESET D(3:0) Q(3:0) MARKER COUNTER FLAG-0 CLK Q(3:0) CLK CLK MARKER-0(3:0) D(3:0) Q(3:0) MARKER-1(3:0) FLAG-1 CLK D(3:0) Q(3:0) FLAG-2 MARKER-2(3:0) CLK D(3:0) Q(3:0) FLAG-3 CLK MARKER-3(3:0) SHMARB - SCO - gestione abilitazione accesso SHMEM (ENABLE-i) FLAG-0 MARKER-0(3:0) FLAG-1 MARKER-1(3:0) FLAG-2 MARKER-2(3:0) FLAG-3 MARKER-3(3:0) FLAG0 MARKER0(3:0) FLAG1 MARKER1(3:0) FLAG2 PDEN(1:0) MARKER2(3:0) FLAG3 MARKER3(3:0) CLKEN D3 Q3 Q3 D2 Q2 Q2 D1 Q1 Q1 D0 Q0 Q0 CLK CL RESET MEMFREE* e’ generato dalla macchina a stati quando non ci sono trasferimenti in corso e lo uso per tenere i bus di SHMEM ad un valore inattivo Q3 MEMFREE* AND Q2 MEMFREE* AND Q1 MEMFREE* AND Q0 MEMFREE* AND ENABLE-3 ENABLE-2 ENABLE-1 ENABLE-0 SHMARB - SCO - gestione WAIT states FLAG-3 ENWAIT* ENABLE-3 WAIT*-3 OR FLAG-2 ENWAIT* ENABLE-2 WAIT*-2 OR FLAG-1 ENWAIT* ENABLE-1 WAIT*-1 OR FLAG-0 ENWAIT* ENABLE-0 WAIT*-0 OR La SCO asserisce bassa la linea di WAIT-i solo se il PD32-i ha richiesto l’accesso alla SHMEM e se la macchina a stati ne ne abilita uno diverso da i SHMARB - SCO RESET ACCREQ = 0 MEM FREE FLAG-0 FLAG-1 FLAG-2 FLAG-3 OR ACCREQ ACCREQ = 1 MEMBUSY = 0 and ACCREQ = 1 READ ENC FLAG-0 ENABLE-0 AND FLAG-1 ENABLE-1 AND MEMBUSY MEMBUSY = 0 and ACCREQ = 0 MEM BUSY MEMBUSY = 1 OR FLAG-2 ENABLE-2 AND FLAG-3 ENABLE-3 AND SHMARB - SCO Generazione segnali di controllo (CLKEN, ENWAIT, MEMFREE) CLKEN ENWAIT* MEMFREE* SMREG(1) SMREG(0) MEM_FREE 0 1 0 0 0 READ_ENC 1 1 1 0 1 MEM_BUSY 0 0 1 1 0 CLKEN <= SMREG(0).Q MEMFREE* <= SMREG(1).Q or SMREG(0).q ENWAIT* <= SMREG(1).Q* SMREG(0).D <= not(SMREG(1).Q) and not(SMREG(0).Q) and ACCREQ or SMREG(1).Q and not(MEMBUSY) and ACCREQ SMREG(1).D <= SMREG(0).Q or SMREG(1).Q and MEMBUSY SHMARB - SCO Logica macchina a stati SM1Q* SM0Q* D OR AND ACCREQ SM0Q CLKEN SMREG(0) CLK MEMBUSY* Q CLK Q* SM0Q* CL RESET AND SM1Q SM0Q D OR SM1Q OR MEMFREE* SMREG(1) MEMBUSY SM1Q Q AND CLK RESET CLK Q* CL SM1Q* ENWAIT*