Il 0% ha trovato utile questo documento (0 voti)
4 visualizzazioni25 pagine

5 RegisterFile e Memorie

Il documento tratta della progettazione e implementazione di Register File e memorie nel contesto delle architetture dei calcolatori. Viene descritto il funzionamento del Register File, le sue porte di lettura e scrittura, e le differenze rispetto alla RAM, oltre a fornire dettagli sull'interfaccia e sull'implementazione in Verilog. Inoltre, si discute delle memorie SRAM e DRAM, delle loro caratteristiche e delle esercitazioni pratiche relative alla loro implementazione.

Caricato da

trojette moetez
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
4 visualizzazioni25 pagine

5 RegisterFile e Memorie

Il documento tratta della progettazione e implementazione di Register File e memorie nel contesto delle architetture dei calcolatori. Viene descritto il funzionamento del Register File, le sue porte di lettura e scrittura, e le differenze rispetto alla RAM, oltre a fornire dettagli sull'interfaccia e sull'implementazione in Verilog. Inoltre, si discute delle memorie SRAM e DRAM, delle loro caratteristiche e delle esercitazioni pratiche relative alla loro implementazione.

Caricato da

trojette moetez
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

L5.

Register File e Memorie


Architetture dei Calcolatori 2 - [I215-018]

Corso di Laurea in INFORMATICA Dr. Alessandro Capotondi


Anno accademico 2025/2026 [Link]@[Link]
Credits
• Computer Organization and Design RISC-V Edition,
Patterson-Hennessy. (Appendice A)

L5 - Registerfile e Memorie
2
Download lab sources
Clona il repository:

git clone [Link]

Cosa troverai:
• Sorgenti per le esercitazioni
• Documentazione dei tools

In caso l’avessi già clonato puoi aggiornarlo:

git pull origin main

L5 - Registerfile e Memorie
3
Agenda
• RegisterFile
• Progettazione
• Design e Test
• Memorie
• Definizione Interfaccie
• Handshake
• Test

L5 - Registerfile e Memorie
4
Register File
È una piccola memoria interna alla CPU costituita da un insieme di registri
generali (general-purpose), accessibili molto velocemente.

E’ accessibile al programmatore tramite ISA

Fornisce tipicamente più porte: 2 porte di lettura e 1 di scrittura (2R1W) per


leggere due operandi e scrivere un risultato ogni ciclo.

È usato dalle istruzioni aritmetico/logiche: in pipeline, la lettura avviene in ID/EX


e la scrittura in WB.

Esempi:
– RISC-V RV32I: 32 registri x32 bit (x0 è cablato a zero).
– MIPS classico: 32×32, due letture, una scrittura per ciclo.

L5 - Registerfile e Memorie
5
Non è una RAM
• Multi-ported: molte più porte rispetto a una SRAM standard
([Link]. 2 letture + 1 scrittura).
• Latenza molto bassa: progettato per essere letto/scritto in un
singolo ciclo.
• Implementazione:
• array di flip-flop o macro SRAM multiporta;
• include logica di decodifica scrittura, mux di lettura e (spesso)
bypass per gestire conflitti.

L5 - Registerfile e Memorie
6
Progettazione Register File

L5 - Registerfile e Memorie
7
Register File / Porte Read

L5 - Registerfile e Memorie
8
Register File / Porte Write

L5 - Registerfile e Memorie
9
Verilog tips
reg [7 : 0] my_register; reg [7 : 0] my_register_file [3 : 0];

• Registro 8-bit • 2^4 Registri 8-bit


• 16x8-bit Registri

L5 - Registerfile e Memorie
10
Interfaccie
• Interfaccia tipica (2 letture, 1 scrittura)
• Parametri: NREGS (numero registri), XLEN (larghezza)
• Segnali: clk, reset, we, waddr, wdata, raddr1, rdata1, raddr2,
rdata2

L5 - Registerfile e Memorie
11
Questioni pratiche/progettuali
• Porta di scrittura: indirizzo, dato, enable;
• la scrittura avviene sul fronte di clock.

• Porte di lettura: indirizzi indipendenti


• dati disponibili combinazionalmente o registrati, a seconda del design.

• Hazard nel medesimo ciclo (leggo e scrivo lo stesso registro):


– Politica “write-first” o bypass: se si scrive e legge lo stesso indirizzo nel
ciclo, si restituisce il dato nuovo.

• Registro hard-wired a zero (es. x0): lettura sempre 0; scrittura


ignorata.

L5 - Registerfile e Memorie
12
Implementazione
• Esercizio lab5/es1
• Implementare regfile.v rv32i
• Note
• Reset attivo con logica negata
• RegisterFile sensibile fronte positive
• No “bypass” write
• X0 -> 1b’0 in caso di read, no effetto in caso di write

L5 - Registerfile e Memorie
13
lab5/es1/regfile.v
module regfile #(
parameter NREGS = 32,
parameter XLEN = 32,
parameter LOG2_NREGS = $clog2(NREGS)
)( $clog2
input clk_i, Calcola logaritmo base 2
input reset_ni, (arrotondato) di un numero.
input we_i,
input [LOG2_NREGS-1:0] waddr_i,
input [XLEN-1:0] wdata_i, Molto utile per automatizzare il
input [LOG2_NREGS-1:0] raddr1_i, numero di bit necessari a
output [XLEN-1:0] rdata1_o, rappresentare un “valore”
input [LOG2_NREGS-1:0] raddr2_i,
output [XLEN-1:0] rdata2_o
);

L5 - Registerfile e Memorie
14
Soluzione lab5/es1/regfile.v
module regfile #( reg [XLEN-1:0] regs [0:NREGS-1];

parameter NREGS = 32, always @(posedge clk_i or negedge reset_ni) begin

parameter XLEN = 32, if (!reset_ni) begin

parameter LOG2_NREGS = $clog2(NREGS) for (i = 0; i < NREGS; i = i + 1) begin

)( regs[i] = {XLEN{1'b0}};

input clk_i, end

input reset_ni, end else if (we_i && (waddr_i != {LOG2_NREGS{1'b0}})) begin

input we_i, regs[waddr_i] <= wdata_i;

input [LOG2_NREGS-1:0] waddr_i, end

input [XLEN-1:0] wdata_i, end

input [LOG2_NREGS-1:0] raddr1_i, assign rdata1_o = (raddr1_i == {LOG2_NREGS{1'b0}}) ? {XLEN{1'b0}} :

output [XLEN-1:0] rdata1_o, regs[raddr1_i];

input [LOG2_NREGS-1:0] raddr2_i, assign rdata2_o = (raddr2_i == {LOG2_NREGS{1'b0}}) ? {XLEN{1'b0}} :

output [XLEN-1:0] rdata2_o regs[raddr2_i];

);
endmodule
integer i;

L5 - Registerfile e Memorie
15
Test
OK: dopo il reset r[5] == 0
OK: dopo il reset r[10] == 0

-- Scrivo r[5] = 0xDEADBEEF --


OK: lettura r[5] corretta (0xDEADBEEF)
OK: r[0] (x0) è 0

-- Scrivo r[10] = 0x12345678 --


OK: r[5] invariato
OK: lettura r[10] corretta (0x12345678)

-- Lettura simultanea r[7]=0 (mai scritto) e r[10] --


OK: r[7] = 0 come atteso
OK: r[10] = 0x12345678

-- TENTO scrittura r[0] = 0xFFFF_FFFF (deve essere ignorata) --


OK: x0 cablato a zero
OK: r[5] invariato

-- Secondo reset, verifica azzeramento --


OK: dopo secondo reset r[5] == 0
OK: dopo secondo reset r[10] == 0

=================================
Testbench Register File completato con successo.
Tutti i test SUPERATI!
=================================

L5 - Registerfile e Memorie
16
Esercizio a casa
• Aggiungi bypass “write first”
• In caso di write e read nello stesso ciclo dello stesso registro, la
read deve ritornare il nuovo valore scritto.

L5 - Registerfile e Memorie
17
Memorie
Registri sono i blocchi base di
memoria dei processori

Quantità maggiori di memoria


si realizzano usando:
• SRAM (static random access
memories) – ON-CHIP
• DRAM (dynamic random
access memories) – OFF-
CHIP

L5 - Registerfile e Memorie 18
Static random access memory (SRAM)

• Dati salvati in FF-D


• Solitamente singola porta dati (per
read/write)
• Tempo di accesso fisso (DRAM non è
così)
• Configurazione chip SRAM:
• Numero di locazioni indirizzabili
• Larghezza di ciascuna locazione
• Ad esempio, una SRAM 2M×16 offre
2M voci, ciascuna larga 16-bit.
• 21 bit di indirizzo (poiché 2M = 2^21),
una linea di uscita dati a 16 bit e una
singola linea di ingresso dati a 16 bit
• SRAM moderne sono di taglia «stretta»
• ×1 o ×4
• Motivi tecnologici

L5 - Registerfile e Memorie 19
Output SRAM

• Usata al posto di un
multiplexer gigantesco
• Buffer a tre stati: un ingresso
di dato, uno di abilitazione,
una uscita
• È fondamentale garantire che
solo un Select sia abilitato in
ogni istante
• Out ha lo stesso valore di In
se Select è affermato,
altrimenti è in uno stato di alta
impedenza

L5 - Registerfile e Memorie
20
Write SRAM

• Usata al posto di un
multiplexer gigantesco
• Buffer a tre stati: un ingresso
di dato, uno di abilitazione,
una uscita
• È fondamentale garantire che
solo un Select sia abilitato in
ogni istante
• Out ha lo stesso valore di In
se Select è affermato,
altrimenti è in uno stato di alta
impedenza

L5 - Registerfile e Memorie
21
Memoria SRAM

L5 - Registerfile e Memorie
22
Handshake dei segnali
Write e Read

L5 - Registerfile e Memorie
23
Esercizio lab5/es2
• Ispezionare le due implementazioni di sram
• Eseguire il testbench
• Risolvere il problema presente nell’implementazione latch
del SRAM

L5 - Registerfile e Memorie
24
Esercizio a casa
• Implementare una sram da 16Kx32-bit componendo 1Kx32-
bit moduli SRAM

L5 - Registerfile e Memorie
25

Potrebbero piacerti anche