Prof. Giovanni Neri Prof. Stefano Mattoccia Realizzato da: Simone Berardi Daniele Di Donato Isabella...

83
PROGETTO DI CALCOLATORI ELETTRONICI M Prof. Giovanni Neri Prof. Stefano Mattoccia Realizzato da: Simone Berardi Daniele Di Donato Isabella Gottardi Stefano Poli

Transcript of Prof. Giovanni Neri Prof. Stefano Mattoccia Realizzato da: Simone Berardi Daniele Di Donato Isabella...

  • Slide 1
  • Prof. Giovanni Neri Prof. Stefano Mattoccia Realizzato da: Simone Berardi Daniele Di Donato Isabella Gottardi Stefano Poli
  • Slide 2
  • Lo Scenario Il Protocollo MESI Protocollo di contesa a bus Uno sguardo al Progetto Introduzione
  • Slide 3
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 3 Introduzione Lobbiettivo presentato allinizio del progetto era la creazione si un controllore di memoria tramite lutilizzo di FPGA opportunamente programmate tramite software Xilinx. Questo componente doveva garantire lintegrit di dati presenti in una memoria centrale comune a pi processori muniti di diversi livelli di cache.
  • Slide 4
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 4 Lo Scenario Nel dettaglio il nostro progetto si basava su di una visione ben specifica di sistema. Lambiente comprendeva due processori in grado di lavorare contemporaneamente con una stessa memoria centrale comune entrambi dotati di due livelli di memoria cache. Tutte le ipotesi formulate sono state virtualizzate tramite ambiente Xilinx.
  • Slide 5
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 5 Lo Scenario
  • Slide 6
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 6 Un interfaccia verso il bus Partendo dallidea di riutilizzare alcuni componenti che lavorano in sistemi con singolo master, abbiamo definito un interfaccia tramite la quale questi componenti potessero accedere alle risorse senza accorgersi della natura condivisa di questultime. Abbiamo quindi definito un interfaccia che si connettesse in modo naturale ai componenti gi presenti come la cache e il DLX.
  • Slide 7
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 7 Un interfaccia verso il bus
  • Slide 8
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 8 Un interfaccia verso il bus La CPU e le Cache accedono in modo trasparente alle risorse come se fossero a loro dedicate. Il Controller della cpu fornisce un interfaccia tramite cui i componenti accedono come se stessero accedendo al bus ed alla memoria. Inoltre il controller controlla e gestisce la coerenza allinterno delle cache presenti.
  • Slide 9
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 9 La Coerenza Un aspetto fondamentale di tutto il progetto era incapsulato dal concetto di coerenza interna ai due processori nonch di coerenza a livello di sistema multiprocessore. La soluzione adottato fin dalla fase di progetto stata quella di un protocollo MESI per garantire tale propriet allintero sistema virtuale.
  • Slide 10
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 10 Il Protocollo Mesi Il protocollo sfruttato allinterno del progetto si basa sulla discriminazione della validit, in termini di aggiornamenti disponibili, dei dati presenti nelle cache dei due processori. Ogni dato pertanto etichettato con uno stato che identifica il suo livello di freschezza riferita allintero sistema multiprocessore.
  • Slide 11
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 11 Il Protocollo Mesi Gli stati possibili sono quattro: 1. Modified: indica lavvenuta modifica della linea di cache in una sua parte; 2. Exclusive: legato al concetto di livelli multipli di memoria cache indica nello specifico la concordanza tra la linea corrente e quella presente nel livello inferiore (verso la memoria centrale) che pu a sua volta risultare modificata rispetto ad un livello successivo; 3. Shared: in parte sfruttato nel contesto di livelli multipli di cache ma soprattutto utilizzato nel caso di processori multipli garantisce la coerenza tra la linea corrente e quella nel livello successivo, nel caso in cui la linea si trovi subito sopra alla memoria centrale (RAM) questo stato garantisce la coerenza dei dati con tutte le linee identiche caricate da parte di altri processori nello stesso sistema; 4. Invalid: utilizzato in presenza di processori multipli indica la presenza di dati non pi aggiornati poich modificati da una cpu presente nel sistema; in caso la linea sia necessaria in un secondo momento al processore, la cache dovr provvedere a reperirli nuovamente aggiornati dalla memoria centrale.
  • Slide 12
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 12 Il Protocollo Mesi Caso Di Studio Il progetto nello specifico interessa una particolare configurazione di riferimento del protocollo MESI in presenza, per lappunto, di processori multipli.
  • Slide 13
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 13 Il Protocollo Mesi Caso Di Studio Il progetto nello specifico interessa una particolare configurazione di riferimento del protocollo MESI in presenza, per lappunto, di processori multipli. In figura sono presenti tutte le possibili configurazioni dello stato allegato a due eventuali linee di cache. Queste linee sono presenti in livelli differenti della stessa cache presupponendo la presenza di un altri processori. L1 identifica il primo livello di cache mentre L2 identifica il secondo livello di cache (a valle).
  • Slide 14
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 14 Il Protocollo Mesi Visione Generale Le transizioni previste dal protocollo MESI implementato a qualunque livello, mono o multi processore prevede il seguente grafo delle transizioni. Limmagine evidenzia tutte i passaggi corretti fra gli stati possibili delle linee presenti in una qualunque delle cache.
  • Slide 15
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 15 Protocollo di Contesa a Bus Gestisce laccesso contemporaneo della risorsa bus Il protocollo utilizzato di tipo request- grant, implementato modificando la modalit base del Pentium in configurazione master-slave
  • Slide 16
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 16 Dominare La Complessit Lapproccio adottato nella soluzione stato rappresentato in una divisione in parti di ambiente virtuale (due processori con doppio livello di cache) e soluzione alla problematica (controllore di memoria). Questa soluzione offre il vantaggio della modularit e della ridotta complessit delle parti singolarmente esaminate e sintetizzate.
  • Slide 17
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 17 Le Cache Uno degli obbiettivi secondari stato rappresentato dalla resa modulare di un componente prelevato da una presentazione di alcuni nostri colleghi : la Cache DLK. Aggiungere un secondo livello di cache e rendere i due moduli interagenti ha comportatolo smussamento di alcuni punti principali. Le attivit di re-factoring hanno portato sostanzialmente allaggiunta di alcuni segnali di comodo per la gestione multilivello della cache.
  • Slide 18
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 18 Le Cache Nello specifico si sono rese necessarie due attivit di re-factoring: 1. stato installato un segnale aggiuntivo in grado di indicare la fine di una risposta ad unoperazione di snoop cos da poter sequenzializzare pi operazioni di questo tipo; 2. stato esplicitato il protocollo adottato dalla cache di secondo livello per effettuare un caricamento dalla memoria principale per adeguare cos anche il primo livello di cache alle stesse convenzioni.
  • Slide 19
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 19 Il Sequencer In presenza di una cache di secondo livello si subito posta la problematica di effettuare letture multiple atte al caricamento di una linea dalla memoria centrale. Il componente effettua una serie di letture allineate alla dimensione delle linee della cache di primo livello in modo da caricare completamente la parte di memoria necessaria alla cache di secondo livello.
  • Slide 20
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 20 I Controller Componente principe del lavoro svolto che racchiude in se tutta la logica di applicazione del protocollo MESI per rendere coerente tutto lambiente di lavoro. La progettazione di questo componente ha richiesto una ulteriore suddivisione in sottoparti: due nello specifico.
  • Slide 21
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 21 Cpu Controller La prima funge da substrato per la ogni cpu che diventa capace di gestire in modo formale le richieste del bus condiviso di dati, effettuare richieste di snoop ad una terza parte per suo conto in lettura e scrittura ed infine di garantire una risposta efficace allo snoop stesso effettuato a suo carico.
  • Slide 22
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 22 Memory Controller La seconda parte carica di tutta la logica necessaria alla risoluzione di conflitti in operazioni in lettura e scrittura veri e propri; la dicotomia tra meccanismi e politiche assume in questa scelta la sua valenza pi ampia separando la parte di substrato alla cpu dalla parte del componente incaricato di gestire i conflitti tra le diverse richieste dei processori.
  • Slide 23
  • Introduzione Il Protocollo MESI Protocollo contesa a bus Uno sguardo al progetto 23 Una Visione Panoramica Nel complesso lintuizione alla base della soluzione implementata racchiusa nella divisione modulare dei componenti in grado di interfacciarsi per ottenere un risultato finale perfettamente sincronizzato e coerente.
  • Slide 24
  • RandomNumberGenerator_32Bit Sequencer Dummymemory Cpucontroller Memorycontroller Cache_cmp _2 Cache_2_livelli Cache_with_Sequencer Cpu Descrizione dei componenti
  • Slide 25
  • Descrizione dei componenti: RandomNumberGenerator_32bit 25 RandomNumberGenerator_32Bit Genera numeri casuali a 32 bit con lo scopo di simulare dati letti e scritti dal processore da e verso le cache e la memoria. Utilizzato allinterno del componente DummyMemory Registro a scorrimento retroazionato con xor modulo 2
  • Slide 26
  • Descrizione dei componenti: RandomNumberGenerator_32bit 26 RNGenerator_32Bit : Segnali ENABLE : in STD_LOGIC segnale di attivazione del componente CLK : in STD_LOGIC clock RESET : in std_logic segnale di reset del componente U : out std_logic_vector(31 downto 0) bus a 32 bit che consente di trasferire il dato generato signal sr: std_logic_vector(31 downto 0) := x1045ACE1 registro a scorrimento inizializzato con un seme scelto a caso signal sr_in: std_logic bit inserito nel registro a scorrimento
  • Slide 27
  • Descrizione dei componenti: RandomNumberGenerator_32bit 27 RNGenerator_32Bit: Processo Unico processo del componente Se il componente abilitato (ENABLE=1), ad ogni fronte di salita del clock: shift del registro (sr) immissione del nuovo bit nel registro abilitazione delluscita collegandovi sr
  • Slide 28
  • Descrizione dei componenti: RandomNumberGenerator_32bit 28 RNGenerator_32Bit : Calcolo del bit da reinserire Concorrentemente al precedente processo viene calcolato il bit da inserire nel registro tramite la formula sr_in
  • Descrizione dei componenti: Sequencer 30 Segnali di Input/Output DataIn_2_level : in STD_LOGIC_VECTOR (dataOutParallelism-1 downto 0) dati in ingresso dalla memoria con parallelismo a 32 bit AddressIn : in STD_LOGIC_VECTOR (PARALLELISM-1 downto 0) indirizzo da sequenzializzare DataLineIn : in data_line_2 dati in ingresso dalla cache di dimensione pari ad una linea di cache di livello 2 (128 byte) AddressOut_2_level : out std_logic_vector(PARALLELISM-1 downto 0) indirizzo in uscita per la memoria Rd_in : in STD_LOGIC segnale di lettura dei dati fornita dalla cache per trasferimenti memoria-cache Ready_from_2_level : in STD_LOGIC segnale di ready ricevuto dalla memoria, utilizzato per sequenzializzare le operazioni Reset : in STD_LOGIC segnale di reset del componente Enable : in STD_LOGIC segnale di abilitazione del componente Wr_in : in STD_LOGIC segnale di scrittura dei dati fornita dalla cache per trasferimenti cache => memoria DataLineOut : out data_line_2 linea di cache in uscita per la cache di secondo livello (una volta caricata) DataOut_2_level : out std_logic_vector(dataParallelism-1 downto 0) dati in uscita per la memoria con parallelismo a 32 bit Ready : out std_logic segnale di ready verso la cache di secondo livello Rd_out_2_level : out std_logic segnale di read in uscita verso la memoria Wr_out_2_level : out std_logic segnale di write in uscita verso la memoria
  • Slide 31
  • Descrizione dei componenti: Sequencer 31 Processi Operazione di lettura (memoria - cache) inizializza variabili interne per la sincronizzazione delle operazioni aggiorna il segnale di ready ad ogni clock inizializza le variabili interne necessarie al trasferimento cache - memoria effettua i cicli di scrittura per trasferire lintera linea di cache in memoria inizializza le variabili interne necessarie al trasferimento memoria - cache effettua cicli di lettura per trasferire lintera linea di cache dalla memoria Operazione di scrittura (cache - memoria) Processi accessori
  • Slide 32
  • Descrizione dei componenti: Sequencer 32 Operazioni e processi Write (cache => memoria), processi in gioco: SplitProcess_Write WriteLoop Read (memoria => cache), processi in gioco: SplitProcess_Read ReadLoop
  • Slide 33
  • Descrizione dei componenti: Sequencer 33 SplitProcess_Write Prepara il componente allesecuzione della reale operazione di trasferimento dellintera linea dalla cache alla memoria Attivato al variare dei segnali Enable, Wr_in, Rd_in o Reset Disattiva il ready Setta variabili e segnali interni (loopEnabled_var, loopIndex, InAddress, toSplitRegister, tempDataLine)
  • Slide 34
  • Descrizione dei componenti: Sequencer 34 WriteLoop Effettua le reali operazioni di scrittura dalla cache alla memoria Pilota write, bus indirizzi e bus dati della memoria Effettua 32 cicli di scrittura (ognuno da 4 byte) per trasferire lintera linea di cache da 128 byte Attivato al variare dei segnali Ready_From_2_level, Wr_in, Rd_in o Reset
  • Slide 35
  • Descrizione dei componenti: Sequencer 35 SplitProcess_Read Prepara il componente allesecuzione della reale operazione di trasferimento dellintera linea dalla memoria alla cache Attivato al variare dei segnali Enable, Wr_in, Rd_in o Reset Disattiva il ready Setta variabili e segnali interni (loopEnabled_var, loopIndex, InAddress)
  • Slide 36
  • Descrizione dei componenti: Sequencer 36 ReadLoop Effettua le reali operazioni di lettura dalla memoria alla cache Pilota read, bus indirizzi e bus dati della memoria Effettua 32 cicli di lettura (ognuno da 4 byte) per trasferire lintera linea di cache da 128 byte Attivato al variare dei segnali Ready_From_2_level, Wr_in, Rd_in o Reset Registro tempDataLine che svolge il ruolo di deposito di dati in attesa del completamento dellintera linea di cache
  • Slide 37
  • Descrizione dei componenti: DummyMemory 37 DummyMemory Memoria fittizia per le operazioni di read/write da parte della cpu Per le operazioni di read utilizza un generatore di numeri casuali (RandomNumberGenerator_32Bit) Le operazioni di write non vengono realmente eseguite
  • Slide 38
  • Descrizione dei componenti: DummyMemory 38 Segnali di input/output chipEnable : in STD_LOGIC segnale di abilitazione della memoria CLK : in STD_LOGIC clock InputAddress : in STD_LOGIC_VECTOR (addressParallelism-1 downto 0) bus degli indirizzi MemRd : in STD_LOGIC segnale che se asserito indica una lettura dalla memoria MemWr : in STD_LOGIC segnale che se asserito indica una scrittura in memoria Ready : out STD_LOGIC segnale di ready DataInOut : inout STD_LOGIC_VECTOR (dataParallelism-1 downto 0) dati in ingresso/uscita signal temp_dataout : STD_LOGIC_VECTOR (dataParallelism-1 downto 0) contiene il numero casuale generato dal RandomNumberGenerator_32Bit
  • Slide 39
  • Descrizione dei componenti: DummyMemory 39 ProcessoMemoria Unico processo del componente Riceve e risponde alle richieste di read/write provenienti dalla cpu Utilizza il generatore di numeri casuali RandomNumberGenerator_32Bit
  • Slide 40
  • Descrizione dei componenti: DummyMemory 40 Lettura di un dato Il segnale di ingresso MemRd viene collegato al clock del generatore di numeri casuali Luscita del generatore viene collegata alluscita della DummyMemory
  • Slide 41
  • Descrizione dei componenti: DummyMemory 41 Scrittura di un dato Loperazione di write non viene realmente eseguita Alza il segnale di Ready
  • Slide 42
  • Descrizione dei componenti: Cpucontroller 42 CpuController Il CpuController rappresenta linterfaccia verso lesterno per i vari componenti Gestisce il lato client del protocollo di gestione per laccesso ai bus esterni. Gestione delle operazioni di snoop verso le cache interne.
  • Slide 43
  • Descrizione dei componenti: Cpucontroller 43 Interfacciamento con i componenti interni alla cpu MemWr_from_cpu ch_memwr DLXCPU_CONTROLLER Il cpuController necessita di conoscere se loperazione in corso di lettura o scrittura per poter eseguire delle operazioni coerenti al protocollo mesi.
  • Slide 44
  • Descrizione dei componenti: Cpucontroller 44 Interfacciamento con i componenti interni alla cpu I segnali inviati dalle Cache e che normalmente sarebbero diretti alle memorie vengono intercettati dallinterfaccia del cpu_controller. Ram_Address Ram_data_out Ram_data_in Ram_we Ram_oe Ram_ready ch_hit_1 ch_hit_2 ch_hitm_1 ch_hitm_2 ch_inv_1 ch_inv_2 ch_eads ch_wtwb_2 ch_snoop_addr transaction_complete Address_from_cache Data_from_cache Data_to_cache WriteBack_from_cache MemRd_from_cache Ready_to_cache Hit_1 Hit_2 HITM_1 HITM_2 invalidate_to_cache EADS_to_cache WbWt_2 snoop_address transaction_complete CACHE L1 L2 CPU_CONTROLLER
  • Slide 45
  • Descrizione dei componenti: Cpucontroller 45 Interfacciamento con i componenti esterni alla cpu Il cpuController si collega al MemoryControll er per gestire tutte le operazioni del protocollo Mesi BReq BGrnt Eads_from_controller Invalidate_out invalidate Hit HITM WbWt Restart_op snoop_address_in Address MemRd MemWr Breq[ ] BGrnt[ ] Eads Invalidate_in Invalidate Hit[ ] Hitm[ ] WbWt[ ] Restart_op[ ] snoop_addr[] Address_for_snoop MemRd MemWr CPU_CONTROLLER MEMORY_CONTROLLER
  • Slide 46
  • Descrizione dei componenti: Cpucontroller 46 Interfacciamento con i componenti esterni alla cpu Linterfaccia mento con la memoria rappresenta il collegamento della cpu con la risorsa condivisa. La cpu potr leggere o scrivere solo quando le sar concesso. CPU_CONTROLLER MEMORY MemRd MemWr Address DataInOut Ready MemRd MemWr InputAddress DataInOut Ready
  • Slide 47
  • Descrizione dei componenti: Cpucontroller 47 Segnali di input Address_from_cache: in STD_LOGIC_VECTOR (PARALLELISM-1 downto 0) indirizzo richiesto dalla cache in lettura o scrittura BGrnt : in STD_LOGIC segnale di Bus Grant per l'utilizzo del Bus MemRd_from_cache: in STD_LOGIC segnale di lettura proveniente dalla cache WriteBack_from_cache: in STD_lOGIC segnale di scrittura a causa di un writeBack. (unico caso in cui la cache emette un segnale di Wr) MemWr_from_cpu: in STD_LOGIC segnale di scrittura da parte della memoria, utilizzato per invalidare le altre cache snoop_address_in: in STD_LOGIC_VECTOR(PAR ALLELISM-1 downto 0) indirizzo di snoop in ingresso Ready_from_mem: in STD_LOGIC segnali di ready dalla memoria, verr propagato direttamente alla cache Invalidate : in STD_LOGIC segnale in ingresso per indicare di invalidare i dati trovate dallo snoop HITM_2: in STD_LOGIC hitm dalla seconda cache transaction_complete : in STD_LOGIC segnale di completamento del trasferimento dalla cache alla memoria e viceversa. Attivato al termine dallesterno al termine del trasferimento di una linea di livello2
  • Slide 48
  • Descrizione dei componenti: Cpucontroller 48 Segnali di input Eads : in STD_LOGIC ingresso del segnale eads esterno proveniente dal memory controller WbWt: in STD_LOGIC indica lo stato in cui portare la linea in caricamento Reset : in STD_LOGIC segnale di reset Data_from_cache : in STD_LOGIC_VECTOR( dataparallelism-1 downto 0) dati dalla cache in caso di scrittura HITM_1: in STD_LOGIC hitm dalla prima cache Hit_2 :in STD_LOGIC hit dalla seconda cache Hit_1 : in STD_LOGIC hit dalla prima cache
  • Slide 49
  • Descrizione dei componenti: Cpucontroller 49 Segnali di output AddressOut : out STD_LOGIC_VECTOR (PARALLELISM-1 downto 0) indirizzo in uscita verso la memoria BReq : out STD_LOGIC segnale di richiesta del bus MemRd : out STD_LOGIC segnale di lettura verso la memoria (propaga quello della cache - segnale in input MemRd_from_cache) MemWr: out STD_LOGIC segnale di scrittura verso la memoria (propaga quello della cache - segnale in input WriteBack_from_cache) HITM: out STD_LOGIC segnale inviato a seguito di uno snoop in ingresso Inv_to_others_cpu: out STD_LOGIC segnale inviato al memory controller nel caso di scritture con propagazione per fare invalidare le cache degli altri processori Ready_to_cache: out STD_LOGIC segnali di ready per la cache snoop_address: out STD_LOGIC_VECTOR(PAR ALLELISM-1 downto 0) indirizzo di snoop da inviare alle cache
  • Slide 50
  • Descrizione dei componenti: Cpucontroller 50 Segnali di output EADS_to_cache: out STD_LOGIC segnale di EADS per le cache (propaga il segnale inviato dal MemoryController - segnale in input EADS) inv_to_cache : out STD_LOGIC segnale di invalidazione per le cache (propaga quello del MemoryController - segnale in input Invalidate) Data_to_cache : out STD_LOGIC_VECTOR (dataparallelism-1 downto 0) Dati in uscita per la cache WbWt_2 : out STD_LOGIC segnale per indicare lo stato finale della linea di secondo livello al caricamento HIT: out STD_LOGIC segnale inviato a seguito di uno snoop in ingresso DataInOut : inout STD_LOGIC_VECTOR(datap arallelism-1 downto 0) dati da/per la memoria
  • Slide 51
  • Descrizione dei componenti: Cpucontroller 51 Gestione protocollo di Accesso Arbitraggio lato client laccesso al bus dati, al bus indirizzi ed ai segnali di controllo della memoria. Adattamento dei segnali provenienti dalle cache ai segnali di protocollo utilizzati.
  • Slide 52
  • Descrizione dei componenti: Cpucontroller 52 ProcessoRichiestaBus Il processo si comporta da 245 per i segnali provenienti da e verso le cache il cui segnale di abilitazione dato dal segnale BGrnt inviato dal memory controller. Conforma la semantica dei segnali a quella richiesta dal memory controller per gestire correttamente la coerenza del protocollo Mesi.
  • Slide 53
  • Descrizione dei componenti: Cpucontroller 53 IndirizzoOperazioneDati Breq Indirizzo OperazioneDati BGrnt CPU CONTROLLER Gestione protocollo di Accesso
  • Slide 54
  • Descrizione dei componenti: Cpucontroller 54 Gestione snoop Il componente Cpu Controller si occupa della gestione dello snoop a livello di processore Provvede linvio dei segnali di snoop ricevuti dal MemoryController verso le cache Fornisce le risposte alle richieste di snoop.
  • Slide 55
  • Descrizione dei componenti: Cpucontroller 55 Gestione snoop I processi che gestiscono le problematiche di snoop sono: ProcessoRispostaASnoop ProcessoSnoopEsterno
  • Slide 56
  • Descrizione dei componenti: Cpucontroller 56 ProcessoSnoopEsterno Gestisce la propagazione verso le cache dei segnali di snoop Invia i segnali di Eads ed Invalidate alle cache. Invia lindirizzo di snoop alle cache.
  • Slide 57
  • Descrizione dei componenti: Cpucontroller 57 ProcessoRispostaASnoop Il processo si occupa di gestire le risposte allo snoop ricevute dalle due cache. Fa confluire i segnali Hit ed Hitm generati dalle due cache in due segnali Hit ed Hitm inviati al memory controller.
  • Slide 58
  • Descrizione dei componenti: Cpucontroller 58 Hit_1Hit_2Hitm_1Hitm_2 HitHitm EadsInvalidateSnoop Address Eads Invalidat e Snoop Address CPU CONTROLLER
  • Slide 59
  • Descrizione dei componenti: Memorycontroller 59 MemoryController Gestisce la parte server del protocollo di accesso al bus da parte dei processori Viene utilizata la politica a priorit rotanti Altra problematica gestita lattivazione dello snoop verso gli altri processori durante le operazioni di lettura e scrittura del processore che possiede il BGrnt
  • Slide 60
  • Descrizione dei componenti: Memorycontroller 60 Segnali di Input Address_for_snoop: in STD_LOGIC_VECTOR(addre ssParallelism-1 downto 0) indirizzo di snoop da propagare verso le altre cpu BReq : in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) nei sistemi multiprocessore, utilizzato per segnalare al controllore di memoria la necessit di avere il controllo del bus Hit : in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) indica allesterno se il ciclo di snoop ha trovato il dato richiesto allinterno di una cache HitM : in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) indica allesterno se il ciclo di snoop ha trovato il dato richiesto allinterno di una delle, ma tale dato stato ivi modificato Reset: in STD_LOGIC segnale di reset del dispositivo BOff : in STD_LOGIC segnale di input, obbliga il processore ad abortire il ciclo di bus in corso e a porsi in 3state nei confronti del bus fino alla disattivazione del segnale MemWR : in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) segnali di scrittura dalle cpu MemRD: in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) segnali di Lettura dalle cpu Ready_from_mem: in STD_LOGIC segnali di ready proveniente dalla memoria Invalidate_in: in STD_LOGIC_VECTOR (cpuNumber-1 downto 0) segnale di richiesta invalidazione da parte della cpu master
  • Slide 61
  • Descrizione dei componenti: Memorycontroller 61 Segnali di Output snoop_addr: out STD_LOGIC_VECTOR(addr essParallelism-1 downto 0) indirizzo di snoop in uscita verso le altre cpu BGrnt : out STD_LOGIC_VECTOR (cpuNumber-1 downto 0) segnali di permesso accesso al bus Invalidate: out STD_LOGIC determina lo stato finale di una linea di cache dopo uno snoop EAds : out STD_LOGIC External ADdress Strobe. Segnale utilizzato dai controllori di memoria per verificare se il dato il cui indirizzo pilotato sul bus address in cache al processore WbWt : out STD_LOGIC_VECTOR (cpuNumber-1 downto 0) utilizzato per la gestione del protocollo MESI, consente di definire, per ogni linea di cache, il tipo di politica di scrittura (Write Back o Write Through). Restart_op: out std_logic_vector(cpuNumber-1 downto 0) segnale di restart dell'operazione per la cpu master in caso di writeBack
  • Slide 62
  • Descrizione dei componenti: Memorycontroller 62 Processi Il componente costituito da quattro processi: Processo di aggiornamento del BGrnt alla cpu attualmente master Processo di risoluzione conflitti per l'accesso al bus Processo Attivazione dello snoop Processo che attende l'attivarsi dei segnali Hit ed Hitm da parte delle varie cpu
  • Slide 63
  • Descrizione dei componenti: Memorycontroller 63 ProcessoAggiornamentoBGrnt Si occupa dellaggiornamento del bus grant Viene risvegliato quando una Cpu fa richiesta del bus Se gi occupato non posso assegnarlo Se libero allora lo assegno e aggiorno che la cpu che ha fatto richiesta ora la master
  • Slide 64
  • Descrizione dei componenti: Memorycontroller 64 ProcessoRichiestaBus E possibile che durante lesecuzione pi processori richiedano il bus contemporaneamente La politica delle priorit applicata rotazione, lultimo processore che ha ottenuto il bus viene inserito in coda ottenendo la priorit pi bassa Se il bus non occupato procedo allassegnazione scorrendo la lista delle cpu
  • Slide 65
  • Descrizione dei componenti: Memorycontroller 65 ProcessoAttivazioneSnoop Si occupa di attivare i segnali per lo snoop dellindirizzo di ogni linea di cache di secondo livello che deve essere trasferita I segnali sono inviati alle cpu che non hanno il possesso del bus (non hanno assegnato il bus grant)
  • Slide 66
  • Descrizione dei componenti: Memorycontroller 66 ProcessoRilevazioneEsitiSnoop Si occupa di verificare ciclicamente quali sono gli esiti degli snoop attivati. Due casi: Una cpu ha la linea modificata Nessuna cpu ha la linea modificata Se la linea presente in unaltra cache verr caricata in stato shared Altrimenti in stato Exclusive
  • Slide 67
  • Descrizione dei componenti: Cache_2_livelli 67 Cache_2_livelli Unisce i componenti Cache_cmp e Cache_cmp_2 in un'unica entit Questo permette un accesso da parte della cpu alla cache in modo del tutto trasparente Per risolvere problematiche di coerenza del protocollo Mesi vengono eseguiti snoop consecutivi alla cache di primo livello ed infine a quella di secondo livello
  • Slide 68
  • Descrizione dei componenti: Cache_cmp_2 Cache_with_sequencer Cpu 68 Altri componenti Cache_cmp_2 un evoluzione del componente Cache_cmp, sviluppato nel progetto Cache_dlx la differenza risiede solamente nella dimensione delle linee memorizzate e trasferite verso lesterno Cache_with_sequencer unisce la Cache_2_livelli al component Sequencer per eseguire trasferimenti di linee di cache di secondo livello in modo sequenziale in base al parallelismo del bus dati del processore Cpu contiene tutte le componenti sopracitate con laggiunta del controller della CPU (CPU Controller) fornisce linterfaccia di ingresso da parte della pipeline e linterfaccia duscita verso i bus dati.
  • Slide 69
  • Caso Monoprocessore Caso Multiprocessore TestBench
  • Slide 70
  • TestBech 70 Testbench Monoprocessore Nelle slide successive sono riportati i testbench eseguiti per i seguenti casi di interesse in un sistema monoprocessore. Mono processore: Lettura di un dato non presente in Cache L1 e Cache L2 Lettura di un dato non presente in Cache L1 e presente in Cache L2 in stato Exclusive o Modified. Scrittura con dato presente in Cache L1. Scrittura con dato non presente in Cache L1 o in entrambe.
  • Slide 71
  • TestBech 71 Lettura di un dato non presente in Cache L1 e Cache L2 La lettura di un dato non presente allinterno delle cache genera una richiesta di trasferimento per il Cpu Controller. La linea di cache viene quindi caricata dalla memoria non appena la cpu riceve il diritto di accesso ai bus.
  • Slide 72
  • TestBech 72 Lettura di un dato non presente in Cache L1 e Cache L2 La lettura della linea viene sequenzializza ta dal sequencer. Le linee saranno caricate in stato Shared per la cache L1 e Exclusive per la cache L2
  • Slide 73
  • TestBech 73 Caso 2: se la linea della cache L2 presente in stato Modified la linea di livello 1 sar caricata in stato Exclusive Lettura di un dato non presente in Cache L1 e presente in Cache L2 in stato Exclusive o Modified. In questo caso la linea della cache L1 pu assumere due stati in base allo stato della linea della cache L2 Caso 1: se la linea della cache L2 presente in stato Exclusive o Shared la linea di livello 1 sar caricata in stato Shared
  • Slide 74
  • TestBech 74 Scrittura con dato presente in Cache L1. La scrittura di un dato presente in cache L1 in stato Shared produce una scrittura nella cache L2. Ci porter ad avere la cache L1 in stato exclusive mentre la cache L2 verr portata in stato Modified. Diversamente se la linea presente nella cache L1 in stato Exclusive, questa verr portata in stato Modified senza scrittura a valle
  • Slide 75
  • TestBech 75 Scrittura con dato non presente in Cache L1 o in entrambe. In questo caso,utilizzando la strategia write-allocate, si avr una lettura dalla cache di livello due o dalla memoria e successivamente una scrittura. Si avranno quindi la successione dei due punti precedentemente discussi: Lettura di un dato non presente in cache L1 e L2 o Lettura di un dato non presente in Cache L1 e presente in Cache L2 in stato Exclusive o Modified Scrittura con dato presente in Cache L1.
  • Slide 76
  • TestBech 76 Testbench Multiprocessore Nelle slide successive sono riportati i testbench eseguiti per i seguenti casi di interesse in un sistema multiprocessore. Multi processore: lettura di dato non presente nella cache con snoop hit. Snoop di Invalidazione dei dati a causa di una scrittura. WriteBack a seguito di uno snoop in lettura. Protocollo contesa bus.
  • Slide 77
  • TestBech 77 Lettura di dato non presente nella cache con snoop hit. Il testbench prevede la lettura consecutiva da parte delle due cpu ad indirizzi contenuti allinterno della stessa linea di cache di livello 2.
  • Slide 78
  • TestBech 78 Lettura di dato non presente nella cache con snoop hit. La seconda lettura provocher un cache hit che caricher le linee in stato shared su entrambi i livelli di cache.
  • Slide 79
  • TestBech 79 Snoop di Invalidazione dei dati a causa di una scrittura. Nel caso in cui una scrittura venga propagata fino alla memoria (cache di livello 1 e 2 in stato shared). La scrittura provocher un invalidazione delle altre cpu che contengono il dato nelle loro cache. Dopo la scrittura lo stato delle linea di primo livello sar Shared mentre quella di socondo livello avr stato Exclusive. La cache dellaltro processore sar invece invalidata
  • Slide 80
  • TestBech 80 WriteBack a seguito di uno snoop in lettura. Questo testbench mostra il comportamento del sistema a seguito di un operazione di snoop che trova la linea cercata in stato modified. La linea verr quindi scritta in memoria togliendo il Bgrnt alla Cpu che ha eseguito lo snoop ed assegnandolo alla Cpu con la linea modificata per permettergli di eseguire il Writeback
  • Slide 81
  • TestBech 81 Protocollo contesa Bus Il protocollo di accesso al bus mostra le sue politiche di assegnamento per priorit solo nel caso in cui gli accessi avvengano in modo contemporaneo. Laccesso multiplo al bus fa si che questultimo venga assegnato al processore conLac priorit pi alta. Limmagine si riferisce a due accessi contemporanei successivi alla risorsa bus ed a come il protocollo gestisce le priorit assegnando il bus, nel primo conflitto a CPU1, nel secondo a CPU2.
  • Slide 82
  • Conclusioni e possibili estensioni
  • Slide 83
  • 83 Conclusioni Il controllore di memoria in grado di gestire in maniera accademica i conflitti fra letture e scritture sulla memoria comune ed in generale le problematiche di coerenza fra dati in cache ed in memoria principale. Il cuore pulsante del progetto definito dal memory controller resta legato a principi che garantiscono la presenza di una forte modularit, la quale persiste nelleventualit di una possibile futura espansione ad un sistema virtuale che supporti una moltitudine qual si voglia elevata di processori e livelli di cache.
  • Slide 84
  • Conclusioni e possibili estensioni 84 Possibili Estensioni Alcune parti software hanno lasciato spazio a delle possibili migliorie nel campo delle prestazioni. Si potrebbe modificare il sequencier in modo da far pervenire alla cpu in maniera prioritaria i dati necessari a continuare lesecuzione dellistruzione corrente per poi caricare in un secondo momento la parte restante della linea.