-
Notifications
You must be signed in to change notification settings - Fork 0
Wiki
Costruzione di una CPU basata su RISC-V in VHDL divisa in 5 stadi:
Esce con l'istruzione a 32 bit, il program counter (pc) e il prossimo valore del program counter (npc) indirizzato a BYTE, dentro contiene una BRAM 32 x 1024 (32Kb) utilizzata come memoria istruzioni.
Configurazione BRAM:
- Single port ram,
- No byte accessing,
- Pin ENA per abilitazione (collegato a 'pc_load')
- Primitives Output Register disabilitato
Decodifica l'istruzione dai 32bit alla control word (segnali di selezione degli operandi, valori dei registri, immediato) che serve allo stadio successivo per eseguire l'operazione, estende in segno l'immediato, contiene il Register File.
Contiene la ALU ed il Comparatore, legge la control word ed esegue effettivamente i calcoli necessari ad eseguire l'istruzione (calcoli aritmetici [op], calcoli di indirizzi di memoria [L & S] o calcoli sul prossimo valore di PC [B & J]) inoltre il comparatore calcola l'eventuale condizione per eseguire i salti tra istruzioni
Contiene la RAM ed il circuito di selezione del prossimo valore di PC.
Configurazione BRAM
- Single port ram, 32x2048
- Byte accessing -> wea[2:0],
- Pin ENA per abilitazione (gestito dalla MSF)
- Primitives Output Register disabilitato
Note:
- Nel caso di una Jump è il comparator (dello stadio precedente) a mettere ad '1' il segnale 'cond'.
- Cambiare il PC in contatore a 12 bit;
- Portare fuori il contatore
- Cambiare la memoria istruzioni in BRAM
- Provare a vedere come influisci il pc_enable e il registro dell'istruzione
- Inserire il controller AXI per la BRAM e creare la modalità programmazione
- Modificare il sign-extender
- Da testare
- Aggiungere un 'load_enable' al register file
- Testare il file register
- Creare il decoder
- Aggiungere il load_enable
- Inserire i multiplaxer
- Da Testare
- Provare a simulare il comportamento della RAM nel caso in cui l'indirizzo arrivi in un ciclo di clock, mentre il dato arrivi al fronte successivo!
- Probabilmente bisogna togliere i registri in uscita per PC, per i dati; va verificato
- Indirizzamento a BYTE
- Unaligned memory access
Test flow
- Operazioni con immediati
- Load
- Store
- Brench
- Jump
- LUI
- AUIPC