CPU in VHDL

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

CPU in VHDL

Postby SalvoPappa » 14 Jan 2014, 20:40

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
Attachments
cpu.JPG
cpu.JPG (133.76 KiB) Viewed 11529 times
SalvoPappa
 
Posts: 9
Joined: 26 Dec 2013, 15:43

Re: CPU in VHDL

Postby legacy » 15 Jan 2014, 10:25

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.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: CPU in VHDL

Postby Leonardo » 15 Jan 2014, 11:01

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
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: CPU in VHDL

Postby SalvoPappa » 15 Jan 2014, 14:06

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.
SalvoPappa
 
Posts: 9
Joined: 26 Dec 2013, 15:43

Re: CPU in VHDL

Postby legacy » 15 Jan 2014, 14:37

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.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: CPU in VHDL

Postby Leonardo » 15 Jan 2014, 22:51

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
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: CPU in VHDL

Postby legacy » 26 Jan 2014, 13:05

beh ? come e' andata a finire ? news ?
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: CPU in VHDL

Postby SalvoPappa » 04 Feb 2014, 19:44

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;
Attachments
CPUII.JPG
CPUII.JPG (111.21 KiB) Viewed 11439 times
SalvoPappa
 
Posts: 9
Joined: 26 Dec 2013, 15:43

Re: CPU in VHDL

Postby pinball » 04 Feb 2014, 20:37

@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 !!
pinball
 
Posts: 9
Joined: 11 Aug 2013, 20:47

Re: CPU in VHDL

Postby legacy » 04 Feb 2014, 21:02

prima di buttarti in questa impresa hai scritto una ISA di riferimento ?
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: CPU in VHDL

Postby Leonardo » 05 Feb 2014, 08:46

@pinball: La nuova versione 13.1 di Quartus (non compatibile però con molti vecchi device) fa i diagrammi RTL così
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: CPU in VHDL

Postby SalvoPappa » 05 Feb 2014, 11:38

@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.
SalvoPappa
 
Posts: 9
Joined: 26 Dec 2013, 15:43

Re: CPU in VHDL

Postby legacy » 05 Feb 2014, 12:24

E allora, se l'hai scritta e l'hai seguita, dire qualcosa in merito no ?
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 15 guests

cron