Page 1 of 1

CPU in VHDL

PostPosted: 14 Jan 2014, 20:40
by SalvoPappa
Ciao a tutti,
sotto consiglio di giovanni ho cominciato a lavorare su un architettura CPU in VHDL; al primo impatto si nota subito che il progetto è costituito da un numero di nodi elevato:

-Controllo ALU;
-Unità Registri e ALU;
-Instruction Memory
-PC;
-Data Memory;

Ovviamente ci dovrà esser un entità Top-level e dei suoi figli.Come faccio ad impostare i figli nel progetto? Perchè nel caso del controllo, cioè impostare dei bit di controllo, potrei controllare sia l'unità ALU che altri nodi.
Forse l'immagine spiegherà meglio il concetto.

Grazie anticipatamente

Re: CPU in VHDL

PostPosted: 15 Jan 2014, 10:25
by legacy
Prima di avventurarti in questa direzione devi assolutamente aver presente che cosa vuoi realizzare, quale ISA dare alla CPU e come vuole essere implementata (a microcodice, o microcablata), e solo dopo si smanetta.

Re: CPU in VHDL

PostPosted: 15 Jan 2014, 11:01
by Leonardo
Ovviamente ci dovrà esser un entità Top-level e dei suoi figli.Come faccio ad impostare i figli nel progetto?


Prova a pensare ai "figli" come ad entità con segnali di ingresso ed uscita. La Control Unit avrà alcuni segnali collegati alla ALU ed altri ad altre entità.
L'entità top-level la puoi realizzare eventualmente anche tramite schematico in Quartus (e convertire se serve in codice VHDL automaticamente).

Successivamente potresti magari aggiungere delle "porte" (pin di IO) per comunicare col mondo esterno, esempio banale accendere un piccolo led
Ciao

Re: CPU in VHDL

PostPosted: 15 Jan 2014, 14:06
by SalvoPappa
Se non ho capito male; posso scrivere la topo level, nel mio caso sarà il file cpu.vhdl con i tre macro blocchi Memory Control e Data, di conseguenza i vari blocchi li posso trattare come black box scrivendone solo la dichiarazione(Component) e poi dopo faccio solo il Port Map.
Se questa prima parte è giusta mi sorge una domanda...Nelle black box(PC-File Register-Instruction Memory-ALU-ecc) come faccioa spiegare qual'è il loro funzionamento??


Comunque io preferisco scrivere in codice, mi sento più sicuro e vedo subito gli errori.

Grazie e scusate se sono domande banali.

Re: CPU in VHDL

PostPosted: 15 Jan 2014, 14:37
by legacy
Quella che hai indicato in figura e' una CPU con ISA MIPS, un tipico progetto RISC che spezza il datpath in modo che siano fortemente modulari, ovvero e' quanto di + comodo ci sia per l'approccio microcablato descrivibile senza troppa fatica in HDL. Torna comodo questo approccio sopratutto perché si presta alle implementazioni pipelining introducendo pero' bypass e scorciatoie ma sopratutto molta intelligenza al nella control unit, sopratutto perche' il primo problema della pipeline e' la predizione speculativa dei salti, cosa che cosa lo stallo completo della pipeline e il dover ripartire.

Lasciando perdere la pipeline e tutti i casini che si porta dietro, anche nelle implementazioni bovine deve esserti chiaro pero' che tutto ruota attorno al datapath: tutti i moduli blackbox (di cui al loro interno ti preoccupi di descrivere solo il modulo rispettando unicamente constraints ed interfaccia di modulo) che puoi spezzare in {gestione PC (aka fetch e vari branch), registri, load/store ram, ed ALU} sono connessi al datapath che veicola a ciascuno di loro sincronismi, segnali di datapath (quando attivare che cosa) e ovviamente i segnali da/verso sorgenti e destinazioni.

Nell'approccio microprogrammato avresti un datapath minimale ridotto all'osso e del microcodice microsequenziato per descrivere le istruzioni macchina della ISA, tipicamente questo approccio si usa per semplificarsi la vita con CPU CISC con ISA molto complessa oppure per tagliare corto (dato lo scarso tempo a disposizione per le attività di laboratorio) nella mera manovalanza implementativa di CPU didattiche come la ijvm32.

Re: CPU in VHDL

PostPosted: 15 Jan 2014, 22:51
by Leonardo
Bisogna creare un'implementazione per i vari blocchi (es. ALU.vhdl, SRAM.vhdl, etc..)
Lo schematico in genere si crea solamente per connettere tra loro i vari blocchi e poco altro, es. http://robotaries.blogspot.it/2012/05/c ... -core.html

Non farti scrupolo a porre anche le domande più banali, all'inizio tutti ne abbiamo fatte e per chi inizia sono senz'altro utili

Prego
Ciao

Re: CPU in VHDL

PostPosted: 26 Jan 2014, 13:05
by legacy
beh ? come e' andata a finire ? news ?

Re: CPU in VHDL

PostPosted: 04 Feb 2014, 19:44
by SalvoPappa
Ciao a tutti,
bhè l'impresa di progettare una CPU non è stata molto semplice, anzi è stata alquanto complicata.
Ho postato un'immagine del progetto che ho completato, dove ho utilizzato 6 Macro entità:

-Data: dove risiedono il PC,RegFile,InstrRegister;
-TempReg: un registro temporaneo;
-ALU;
-ALU_Control: per ottenere un segnale da inviare all'ALU;
-Control_Unit:Un gestore per i vari segnali di controllo;
-Memory:dove risiede la ram;

Re: CPU in VHDL

PostPosted: 04 Feb 2014, 20:37
by pinball
@salvo,
con che tools di sviluppo hai realizzato la cpu? mi piace la grafica del tuo progetto :)
non mi sembra assomigliare al quartus di altera !!

Re: CPU in VHDL

PostPosted: 04 Feb 2014, 21:02
by legacy
prima di buttarti in questa impresa hai scritto una ISA di riferimento ?

Re: CPU in VHDL

PostPosted: 05 Feb 2014, 08:46
by Leonardo
@pinball: La nuova versione 13.1 di Quartus (non compatibile però con molti vecchi device) fa i diagrammi RTL così

Re: CPU in VHDL

PostPosted: 05 Feb 2014, 11:38
by SalvoPappa
@Legacy: Ho scritto una ISA, ed ho implementato seguendola. Ho fatto riferimento ad alcuni progetti così che mi potessi ispirare, anche perchè come ho già detto il progetto è assai complicato. Avevo fatto già una prima release, ma forse era un pò troppo semplice e non rispettava i requisiti.

Re: CPU in VHDL

PostPosted: 05 Feb 2014, 12:24
by legacy
E allora, se l'hai scritta e l'hai seguita, dire qualcosa in merito no ?