View Full Version : [Asm] Progettare una architettura di processore
cdimauro
26-09-2011, 19:47
Prova a cercare il mio nick e il nome di quel progetto. :fiufiu:
ingframin
29-09-2011, 10:05
Volevo segnalare questo, trovato stamattina per caso
http://www.opensparc.net/
cdimauro
29-09-2011, 13:53
Lo conoscevo già. Lavoro enorme. Francamente non mi spiego ancora perché Sun l'abbia rilasciato come open source.
Continuo a sconsigliare un eventuale implementazione su breadboard con integrati 74**: se vuoi avere la sensazione di collegare a mano, cerca un software per tablet che ti permette di simulare una breadboard (e gli integrati 74**), o comunque usa un monitor touchscreen.
Secondo me quando i fili sono troppi qualcosa si sbaglia e il danno può essere terribile. Se non si brucia niente, si rischia di avere qualcosa di non funzionante (ad esempio l'ALU potrebbe fare la sottrazione al posto della somma e viceversa).
ingframin
07-10-2011, 09:09
Ragazzi mi permetto di segnalare questo:
http://careers.peopleclick.com/careerscp/client_arm/external/jobDetails.do?functionName=getJobDetail&jobPostId=4766&localeCode=en-us
Oh... non si sa mai, qualcuno potrebbe trasformare un'hobby in lavoro ;-)
cdimauro
07-10-2011, 15:58
Troppo diverso da quello che faccio e, soprattutto, mi mancano tante skill. :p
Continuo a sconsigliare un eventuale implementazione su breadboard con integrati 74**: se vuoi avere la sensazione di collegare a mano, cerca un software per tablet che ti permette di simulare una breadboard (e gli integrati 74**), o comunque usa un monitor touchscreen.
Secondo me quando i fili sono troppi qualcosa si sbaglia e il danno può essere terribile. Se non si brucia niente, si rischia di avere qualcosa di non funzionante (ad esempio l'ALU potrebbe fare la sottrazione al posto della somma e viceversa).
Il giusto compromesso tra mettere i fili a mano e programmare il tutto con l'FPGA utilizzando solo un mouse, secondo me è un tablet: al limite ci sono anche con CPU x86, se proprio non si trovano software per ARM. Con un tablet puoi simulare di collegarli a mano, poi fai tutto con un FPGA.
Se fai un collegamento errato ti si può bruciare un integrato, con l'FPGA no.
Ciao a tutti!
Mi intrometto in questa interessante discussione, suggerita da cdmauro e prima ancora da z80fan.
Premetto che ho letto solo fino alla 6° pagina fino adesso.
Avrei qualche domanda, che cmq non riguardano le architetture che avete proposto fino ad ora ma le CPU in generale.
Eccole:
1) Nelle architetture Harvard, in cui dati e istruzioni sono in memorie separatamente, esistono delle istruzioni con indirizzamento immediato (in cui una costante è "inclusa" nell'istruzione stessa)?
2) Che cos'è la "doppia indirezione" che citavate intorno alla 4° pagina di discussione o giù di lì?
Per adesso..mi fermo qui!
cdimauro
04-03-2012, 18:49
Ciao a tutti!
Mi intrometto in questa interessante discussione, suggerita da cdmauro e prima ancora da z80fan.
Benvenuto. :)
Premetto che ho letto solo fino alla 6° pagina fino adesso.
Di mal di testa ne avrai ancora. :D
Avrei qualche domanda, che cmq non riguardano le architetture che avete proposto fino ad ora ma le CPU in generale.
Eccole:
1) Nelle architetture Harvard, in cui dati e istruzioni sono in memorie separatamente, esistono delle istruzioni con indirizzamento immediato (in cui una costante è "inclusa" nell'istruzione stessa)?
Certamente. Di per sé sarebbe un dato, ma fa parte dell'opcode, e quindi del codice.
2) Che cos'è la "doppia indirezione" che citavate intorno alla 4° pagina di discussione o giù di lì?
Pagina 5. Si usa in alcune architetture, come quella 68020+, dove un'indirizzamento verso la memoria più complicato consente prima di prelevare un puntatore dalla memoria, per poi usarlo (magari aggiungendo un offset) per recuperare il dato vero e proprio.
Esempio:
move.b ([a0, d0.l * 4, $12345678], $87654321),d0
Che "tradotto" significa:
- a0 + d0.l * 4 + $12345678 indica la locazione di memoria da cui recuperare il puntatore;
- al puntatore viene poi aggiunto l'offset $87654321;
- viene prelevato il byte (.b) da questa locazione di memoria;
- il byte viene copiato nel registro d0.
Benvenuto. :)
Di mal di testa ne avrai ancora. :D
Certamente. Di per sé sarebbe un dato, ma fa parte dell'opcode, e quindi del codice.
Pagina 5. Si usa in alcune architetture, come quella 68020+, dove un'indirizzamento verso la memoria più complicato consente prima di prelevare un puntatore dalla memoria, per poi usarlo (magari aggiungendo un offset) per recuperare il dato vero e proprio.
Esempio:
move.b ([a0, d0.l * 4, $12345678], $87654321),d0
Che "tradotto" significa:
- a0 + d0.l * 4 + $12345678 indica la locazione di memoria da cui recuperare il puntatore;
- al puntatore viene poi aggiunto l'offset $87654321;
- viene prelevato il byte (.b) da questa locazione di memoria;
- il byte viene copiato nel registro d0.
Grazie per il benvenuto e per le risposte!
Altra domanda...
cosa ne pensate delle architetture "dataflow" pure (quindi diverse dall'OoO)?
Esistono progetti commerciali?
cdimauro
04-03-2012, 19:36
Francamente non le conosco. O magari le conosco, ma quel nome non mi dice niente. :D
Francamente non le conosco. O magari le conosco, ma quel nome non mi dice niente. :D
In che senso??
cdimauro
04-03-2012, 20:23
Volevo dire semplicemente che di architetture "dataflow" non ne avevo sentito parlare.
Oppure magari le conosco, ma non con quel nome.
Volevo dire semplicemente che di architetture "dataflow" non ne avevo sentito parlare.
Oppure magari le conosco, ma non con quel nome.
Guarda qui per esempio:
http://www.appuntidigitali.it/9759/sfruttare-il-parallelismo-tra-le-istruzioni-le-architetture-dataflow/
cdimauro
05-03-2012, 00:39
L'avevo letto, ma rimosso il termine dalla memoria.
Il motivo per cui non vengono utilizzate è esposto alla fine dell'articolo. Ci sono limiti troppo pesanti.
Le implementazioni out-of-order consentono di raggiungere risultati similari, ma con meno dispendio di risorse e, soprattutto, con architetture tradizionali.
Ciao clros! :)
Ti stavo per scrivere la stessa cosa che ha detto cdimauro; Pleg già spiega il problema alla fine dell'articolo.
ingframin
26-02-2014, 17:11
Vi riporto una piccola voce di corridoio, non e' detto che si trasformi in realta' ma quantomeno e' una cosa che gira nell'aria.
Qui da me e' stata lanciata la proposta di concedere agli hobbysti di usare lo spazio inutilizzato dei wafer che mandiamo in produzione.
In pratica la mia azienda raccoglie piu' progetti di chip, li mette su un wafer e poi consegna i prototipi.
Siccome capita spesso di non riempire la griglia che compone il layout del wafer e' stata lanciata la proposta di concedere questo spazio a chi progetta un chip non per uso commerciale consentendogli di produrre un chip a prezzo super scontato (solo il package in pratica).
Non e' detto che questa cosa vada in porto, pero' se davvero i capi accettassero sarebbe una figata :D
Vi tengo aggiornati sulla cosa, magari un giorno il processore di cdmauro o di Z80Fan sara' davvero su un chip di silicio :)
AnonimoVeneziano
26-02-2014, 18:13
Vi riporto una piccola voce di corridoio, non e' detto che si trasformi in realta' ma quantomeno e' una cosa che gira nell'aria.
Qui da me e' stata lanciata la proposta di concedere agli hobbysti di usare lo spazio inutilizzato dei wafer che mandiamo in produzione.
In pratica la mia azienda raccoglie piu' progetti di chip, li mette su un wafer e poi consegna i prototipi.
Siccome capita spesso di non riempire la griglia che compone il layout del wafer e' stata lanciata la proposta di concedere questo spazio a chi progetta un chip non per uso commerciale consentendogli di produrre un chip a prezzo super scontato (solo il package in pratica).
Non e' detto che questa cosa vada in porto, pero' se davvero i capi accettassero sarebbe una figata :D
Vi tengo aggiornati sulla cosa, magari un giorno il processore di cdmauro o di Z80Fan sara' davvero su un chip di silicio :)
Sarebbe una figata per davvero. :)
Per curiosita' dove lavori? :p
cdimauro
26-02-2014, 22:32
Vi riporto una piccola voce di corridoio, non e' detto che si trasformi in realta' ma quantomeno e' una cosa che gira nell'aria.
Qui da me e' stata lanciata la proposta di concedere agli hobbysti di usare lo spazio inutilizzato dei wafer che mandiamo in produzione.
In pratica la mia azienda raccoglie piu' progetti di chip, li mette su un wafer e poi consegna i prototipi.
Siccome capita spesso di non riempire la griglia che compone il layout del wafer e' stata lanciata la proposta di concedere questo spazio a chi progetta un chip non per uso commerciale consentendogli di produrre un chip a prezzo super scontato (solo il package in pratica).
Non e' detto che questa cosa vada in porto, pero' se davvero i capi accettassero sarebbe una figata :D
Vi tengo aggiornati sulla cosa, magari un giorno il processore di cdmauro o di Z80Fan sara' davvero su un chip di silicio :)
Ma lo sai che l'idea è davvero strafica? Dovrei chiederlo alla mia azienda, se sia possibile fare qualcosa del genere, visto che di silicio inutilizzato nei wafer ce ne sarà sicuramente in abbondanza, permettendo in questo modo di sperimentare con progetti interni innovativi che potrebbero magari trovare degli sbocchi alla fine.
Prima, però, dovrei dare una sistemata alla mia nuova ISA, così avrei in mano qualcosa di concreto e appetibile. No, non è quella che ho pubblicato in questo thread. :D
Rimane, purtroppo, la difficoltà di implementare l'architettura in qualche modo (VHDL / Verilog et similia). :cry:
ingframin
27-02-2014, 11:00
Sarebbe una figata per davvero. :)
Per curiosita' dove lavori? :p
Io lavoro in imec, nella divisione che si occupa di servizi alle aziende e alle universita'.
Basta che cerchi su google imec belgium oppure europractice ic service.
Ma lo sai che l'idea è davvero strafica? Dovrei chiederlo alla mia azienda, se sia possibile fare qualcosa del genere, visto che di silicio inutilizzato nei wafer ce ne sarà sicuramente in abbondanza, permettendo in questo modo di sperimentare con progetti interni innovativi che potrebbero magari trovare degli sbocchi alla fine.
Prima, però, dovrei dare una sistemata alla mia nuova ISA, così avrei in mano qualcosa di concreto e appetibile. No, non è quella che ho pubblicato in questo thread. :D
Rimane, purtroppo, la difficoltà di implementare l'architettura in qualche modo (VHDL / Verilog et similia). :cry:
Le aziende possono gia' farlo tramite europractice, si puo' ordinare una serie limitatissima (35 pezzi) che costano abbastanza poco, ma sempre alcume migliaia di euro...
Percio' si era pensato di usare lo spazio vuoto per gli hobbysti che non possono pagare queste cifre.
cdimauro
28-02-2014, 18:21
A me non interessa, perché ho già l'azienda che potrebbe provvedere, ma per un hobbysta quanto costerebbe?
epimerasi
02-03-2014, 18:34
Ma lo sai che l'idea è davvero strafica? Dovrei chiederlo alla mia azienda, se sia possibile fare qualcosa del genere, visto che di silicio inutilizzato nei wafer ce ne sarà sicuramente in abbondanza, permettendo in questo modo di sperimentare con progetti interni innovativi che potrebbero magari trovare degli sbocchi alla fine.
Prima, però, dovrei dare una sistemata alla mia nuova ISA, così avrei in mano qualcosa di concreto e appetibile. No, non è quella che ho pubblicato in questo thread. :D
Rimane, purtroppo, la difficoltà di implementare l'architettura in qualche modo (VHDL / Verilog et similia). :cry:
Quella che avevi presentato ad Europython?
cdimauro
02-03-2014, 18:46
Esattamente. Ma da allora ho lavorato poi a un'altra versione che introduce alcune migliorie, e riorganizza anche gli opcode in modo diverso per recuperare spazio nella opcode table e liberarlo per istruzioni più utile; più qualche altra cosuccia. Comunque il grosso l'ho presentato (anche se astrattamente) al talk dell'EuroPython.
cdimauro
02-03-2014, 19:20
Quella che avevi presentato ad Europython?
Scusami la curiosità: come fai a saperlo? Per caso eri presente?
ingframin
02-03-2014, 21:46
A me non interessa, perché ho già l'azienda che potrebbe provvedere, ma per un hobbysta quanto costerebbe?
Ah boh? La proposta e' nata durante una sessione di brainstorming che facciamo periodicamente all'ora di pranzo, non si sa neanche se i manager accetteranno.
Come costi penso che comunque ci vorrebbe qualche centinaio di euro a chip. Vedremo, e' tutto in divenire, puo' anche darsi che non se ne faccia niente.
Se la cosa parte via vviso senz'altro ;)
epimerasi
07-03-2014, 11:29
Scusami la curiosità: come fai a saperlo? Per caso eri presente?
Non c'ero, ma ho visto i video dal sito.
ingframin
12-09-2014, 18:14
Non facciamolo morire questo thread che è interessante!
Vi volevo segnalare 2 cose:
1)http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=593 schedina con FPGA molto economica e ottima per sperimentare
2)http://www.amazon.com/gp/aw/d/0123944244?pc_redir=1410433630&robot_redir=1 questo libro è fantastico e riporta oltre alle basi una implementazione del mips sia in verilog che vhdl spiegata passo passo!
Non facciamolo morire questo thread che è interessante!
Non prometto niente, ma nel tempo libero sto rifinendo (assieme a un amico) una ISA relativamente potente ma semplice da implementare per farcela stare in una FPGA; in molte parti è diversa dalle ISA più diffuse, giusto per provare qualcosa di diverso dal solito! :D
Se c'è interesse, quando arriva ad essere più o meno stabile (con la codifica degli opcode etc), la posto qui.
Nel resto del tempo libero 'sto anche trafficando con FPGA e VGA per fare un cosino che può mostrare roba a video; fin'ora son arrivato a mostrare un'immagine fissa memorizzata nella block ram dell'fpga; è 640x480 in bianco e nero perchè la block ram non è abbastanza, quindi il passo successivo è far funzionare la SDRAM in modo da avere più memoria per un'immagine a colori.
1)http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=593 schedina con FPGA molto economica e ottima per sperimentare
Io personalmente posseggo questo kit (non proprio questo, ma una versione leggermente più vecchia ma dello stesso produttore):
http://www.wvshare.com/product/OpenEP3C16-C-Package-B.htm
di bello è che ha i moduli già pronti che si possono usare come plug-and-play, che è utile per chi non ha già una grande collezione di pezzi e/o non ha voglia/possibilità di creare PCB per i componenti più piccoli (ad esempio le interfacce USB con i chip FTDI)
Di negativo è che non ha il programmatore integrato, ma dallo stesso produttore si può prendere anche un clone USB-Blaster che funziona tranquillamente con Quartus (il tutto si può comprare da e-bay con spedizione gratuita).
La DE0-Nano la vedo più per chi o ha già diversi dispositivi a cui collegarla, oppure a chi interessa usarla solo come "unità di calcolo", visto che ha SDRAM direttamente sul PCB (il kit di prima la ha su un modulino separato che si può installare su appositi pin header)
2)http://www.amazon.com/gp/aw/d/0123944244?pc_redir=1410433630&robot_redir=1 questo libro è fantastico e riporta oltre alle basi una implementazione del mips sia in verilog che vhdl spiegata passo passo!
Interessante! Io sul MIPS ho solo il Patterson/Hennessy, che parla solo dell'architettura e dell'implementazione "a blocchi"; mi serve proprio un buon libro che parla delle implementazioni in HDL. :)
Vorremmo vedere qualcosa di funzionante, fosse anche una CPU 4 bit :)
cdimauro
14-09-2014, 07:13
Non facciamolo morire questo thread che è interessante!
E' un pezzo che non viene aggiornato, ma a me capita ogni tanto di ridargli un'occhiata. :fagiano:
Vi volevo segnalare 2 cose:
1)http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=593 schedina con FPGA molto economica e ottima per sperimentare
In effetti costa poco, ma tempo fa c'era la Arrow board (SockIT) che era un mostro di scheda offerta a 99$ per chi partecipava al workshop.
La scheda di cui hai fornito il link è economica e buona per cominciare. Unico grosso limite: i 50Mhz. Ma per un buon prototipo rimane comunque ottima: first, make it work. ;)
2)http://www.amazon.com/gp/aw/d/0123944244?pc_redir=1410433630&robot_redir=1 questo libro è fantastico e riporta oltre alle basi una implementazione del mips sia in verilog che vhdl spiegata passo passo!
Peccato che non usi MyHDL (http://www.myhdl.org/). Comunque avrei preferito averlo disponibile in formato Kindle.
Vorremmo vedere qualcosa di funzionante, fosse anche una CPU 4 bit :)
One word! :p
Unico grosso limite: i 50Mhz.
Quello non è importante: nell'FPGA hai diversi PLL (quel modello lì ne ha 4), e quindi puoi estrarti (quasi) qualsiasi frequenza preferisci. ;)
cdimauro
14-09-2014, 14:57
Quindi posso far girare l'FPGA a 5Ghz? :fagiano:
Quindi posso far girare l'FPGA a 5Ghz? :fagiano:
In base ai registri del PLL, forse puoi anche impostarlo per un x100; ovviamente poi l'fpga devi raccoglierla col cucchiaino di amianto perchè ti si è sciolta in un blob di silicio e plastica. :D
Scherzi a parte, i 4 PLL possono prendere uno dei vari clock esterni (in questo caso è collegato solo l'oscillatore da 50 MHz), e possono generare (quasi) qualsiasi frequenza (più alta o più bassa) che poi puoi usare come meglio credi; ovviamente devi fare il conto sia con la maximum switching frequency dell'fpga stessa (che per quel modello lì dovrebbe stare attorno a 400-500 MHz), sia sopratutto con la frequenza massima del tuo design, che viene stimata dalla suite quando compili il progetto.
cdimauro
14-09-2014, 15:10
Perfetto. Era alla frequenza massima dell'FPGA che mi riferivo, e 400-500Mhz è un ottimo risultato: si possono fare tante cose carine. :p
ingframin
15-09-2014, 13:30
Vorremmo vedere qualcosa di funzionante, fosse anche una CPU 4 bit :)
https://github.com/ingframin/Franky-s-VM
È brutto e fa schifo e soprattutto super embrionale però funziona!
ingframin
15-09-2014, 13:39
Perfetto. Era alla frequenza massima dell'FPGA che mi riferivo, e 400-500Mhz è un ottimo risultato: si possono fare tante cose carine. :p
io non credo che uno riesce a far girare quell'FPGA a 400MHz però 200 già li vedo più abbordabili.
Il problema è che quando cominci a fare cose complicate lo spazio occupato su chip aumenta e le interconnessioni di un'FPGA non sono fatte bene come quelle statiche di un ASIC.
In pratica ogni volta che il segnale incontra un interruttore (che poi e un pass transistor) è come se incontrasse un circuito Resistenza e Condensatore (RC) che si unisce ai parametri parassiti delle linee (RLC... L sta per induttanza) tagliando ulteriormente la banda.
Andare così veloce rende la sincornizzazione dei vari blocchi non banale (nei chip per computer, tipo Pentium, ci sono dei PLL in ogni blocco per sincronizzare il clock).
Inoltre la potenza dissipata dinamicamente = CfV^2:
C = capacità parassita, f = frequenza di lavoro, V^2 e'la tensione di alimentazione al quadrato.
A 400MHz hai bisogno di un package metallico e dissipatore mi sa...
Consiglio per chi vuole approfondire:
- http://www.amazon.com/Digital-Integrated-Circuits-2nd-Edition/dp/0130909963
- http://www.ece.rutgers.edu/~orfanidi/ewa/ (libro free da scaricare)
cdimauro
15-09-2014, 19:29
https://github.com/ingframin/Franky-s-VM
È brutto e fa schifo e soprattutto super embrionale però funziona!
Ecco perché mi avevi chiesto quelle informazioni sulla VM di Python. :D
Ho dato un'occhiata e il codice mi sembra pulito e semplice anche da capire. Dovresti, però, mettere quale versione minima di Python utilizzare per farlo girare. Adesso penso che basti una 2.x anche molto vecchia, perché non ho visto costrutti sintattici recenti (ad esempio i decoratori).
Ciò che mi piacerebbe realizzare, comunque, è un modo per descrivere in Python (che è abbastanza semplice anche come linguaggio "descrittivo" / "dichiarativo") la struttura degli opcode di un'architettura, il funzionamento delle istruzioni, la condizione al reset, e far generare automaticamente un emulatore / virtual machine in Python stesso, o magari in C / C++.
Il massimo sarebbe poter generare anche codice VHDL e/o Verilog da dare in pasto a Quartus et similia per generare il firmware per un'FPGA.
Quest'ultimo, però, credo sia un tantino più difficile da realizzare... :stordita:
io non credo che uno riesce a far girare quell'FPGA a 400MHz però 200 già li vedo più abbordabili.
Il problema è che quando cominci a fare cose complicate lo spazio occupato su chip aumenta e le interconnessioni di un'FPGA non sono fatte bene come quelle statiche di un ASIC.
In pratica ogni volta che il segnale incontra un interruttore (che poi e un pass transistor) è come se incontrasse un circuito Resistenza e Condensatore (RC) che si unisce ai parametri parassiti delle linee (RLC... L sta per induttanza) tagliando ulteriormente la banda.
Andare così veloce rende la sincornizzazione dei vari blocchi non banale (nei chip per computer, tipo Pentium, ci sono dei PLL in ogni blocco per sincronizzare il clock).
Inoltre la potenza dissipata dinamicamente = CfV^2:
C = capacità parassita, f = frequenza di lavoro, V^2 e'la tensione di alimentazione al quadrato.
A 400MHz hai bisogno di un package metallico e dissipatore mi sa...
Sì, alla fine il problema è sempre dovuto al tempo impiegato dal circuito più lento. Comunque con un FPGA si potrebbe sintetizzare una CPU a frequenza più bassa (es: l'FPGA usa un clock di 400Mhz, ma la CPU gira effettivamente a 200Mhz; è così che funziona il nuovo softcore 68K del progetto Apollo), e il resto che usa logica più semplice a velocità massima (ad esempio un Blitter o un Copper per l'Amiga, o la circuiteria video).
Consiglio per chi vuole approfondire:
- http://www.amazon.com/Digital-Integrated-Circuits-2nd-Edition/dp/0130909963
Premesso che non è roba per me (pur essendo un perito in automatica elettronica, l'elettronica analogica non è proprio il mio forte), è un prezzo esageratamente alto.
- http://www.ece.rutgers.edu/~orfanidi/ewa/ (libro free da scaricare)
Almeno questo è gratuito, ma rimane comunque roba a me indigesta. :mad:
ingframin
17-04-2015, 08:56
.
Ciò che mi piacerebbe realizzare, comunque, è un modo per descrivere in Python (che è abbastanza semplice anche come linguaggio "descrittivo" / "dichiarativo") la struttura degli opcode di un'architettura, il funzionamento delle istruzioni, la condizione al reset, e far generare automaticamente un emulatore / virtual machine in Python stesso, o magari in C / C++.
Il massimo sarebbe poter generare anche codice VHDL e/o Verilog da dare in pasto a Quartus et similia per generare il firmware per un'FPGA.
Quest'ultimo, però, credo sia un tantino più difficile da realizzare... :stordita:
http://www.myhdl.org/
A quanto pare sta riscuotendo un pochino di successo... Chissà che ne verrà fuori...
Ora sto smanettando a lavoro con una bella FPGA grossa grossa (Kintex 7), se stasera non ho troppo da fare, prima di andare a casa cerco di provarlo questo "MyHDL" e vi faccio sapere.
io non credo che uno riesce a far girare quell'FPGA a 400MHz però 200 già li vedo più abbordabili.
Il problema è che quando cominci a fare cose complicate lo spazio occupato su chip aumenta e le interconnessioni di un'FPGA non sono fatte bene come quelle statiche di un ASIC.
In pratica ogni volta che il segnale incontra un interruttore (che poi e un pass transistor) è come se incontrasse un circuito Resistenza e Condensatore (RC) che si unisce ai parametri parassiti delle linee (RLC... L sta per induttanza) tagliando ulteriormente la banda.
Andare così veloce rende la sincornizzazione dei vari blocchi non banale (nei chip per computer, tipo Pentium, ci sono dei PLL in ogni blocco per sincronizzare il clock).
Inoltre la potenza dissipata dinamicamente = CfV^2:
C = capacità parassita, f = frequenza di lavoro, V^2 e'la tensione di alimentazione al quadrato.
A 400MHz hai bisogno di un package metallico e dissipatore mi sa...
Consiglio per chi vuole approfondire:
- http://www.amazon.com/Digital-Integrated-Circuits-2nd-Edition/dp/0130909963
- http://www.ece.rutgers.edu/~orfanidi/ewa/ (libro free da scaricare)
Volendo si può arrivare a 300 con una placca di metallo attaccata con il pad termico alla plastica oppure no?
ingframin
21-04-2015, 22:17
Volendo si può arrivare a 300 con una placca di metallo attaccata con il pad termico alla plastica oppure no?
Più che la frequenza in se, conta quanta roba commuta contemporaneamente. Se l'FPGA è relativamente vuota non ci sono problemi, se è super piena magari qualche prova la farei.
Più che una placca di metallo, che tanto con la plastica fa contatto male, io userei una ventola.
Un'altra alternativa molto valida (ma costa un poco di più) è questa:
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=830
Questa dovrebbe riuscire ad andare un po' più veloce e il package si presta al montaggio di dissipatore e ventola.
Anche qui ci sono un sacco di kit a prezzo relativamente basso:
https://www.digilentinc.com/
Un'altra valida alternativa è questa:
http://www.latticesemi.com/en/Products/DevelopmentBoardsAndKits/ECP5PCIExpressDevKit.aspx
Io ti consiglio di non fissarti troppo sulla frequenza di clock per ora e cercare di far funzionare le cose.
Dallo scrivere l'ISA a fare un processore su FPGA il passo non è così breve...
Bisogna capire un sacco di cose e tenere conto di un'infinità di fattori.
Ti faccio un esempio pratico di una cosa che mi è capitata un mese fa.
Dovendo simulare una trasmissione molto veloce su un cavo molto lungo ho implementato su FPGA un piccolo generatore di segnale. Il circuito consisteva di un generatore di numeri pseudorandom (2^16 -1), un codificatore 8b/10b e un pin di uscita configurato come DDR (una commutazione ogni fronte del clock, quindi sia salita che discesa). Il tutto per poter avere un segnale seriale a circa 640MHz.
Per far funzionare tutto correttamente ho usato un core già pronto che mi consentiva di configurare il clock.
Quindi 640MHz al serializzatore, e 128MHz al generatore 8b/10b e 156MHz (se non ho sbagliato il conto al generatore pseudorandom).
Primo problema... Ho scoperto che il clock DDR non è simmetrico, quindi su tutte le sequenze dispari di 1 consecutivi avevo un sacco di jitter...
Poi una cosa simpatica che mi ha fatto perdere 2 settimane... Osservando le mie misure all'oscilloscopio mi sono accorto che i condensatori di accoppiamento del cavo si caricavano, cosa che teoricamente è impossibile con uno stram codificato 8b/10b... Dopo due settimane e un po' di prove e tanti smadonnamenti e aver riscritto da capo metà del codice, ho preso una misura usando il trigger intelligente e ho scoperto che a random una sequenza di 1 durava molto di più dei teorici massimi cinque 1 consecutivi...
Cercando tra i warning ho trovato una piccola timing violation, che il simulatore non mi dava come critica ma che faceva si che a un certo punto il serializzatore si trovasse senza dati in input e si mettesse in attesa.
Il problema era dovuto a quel 2^16 -1... In pratica superati gli 8 bit il tool di placement usava due slice che per qualche motivo non erano adiacenti, percui tutte le parole >255 avevano un leggero ritardo rispetto a quelle più piccole e il tutto metteva in ginocchio il sistema.
pochi picosecondi mi hanno fatto perdere quasi un mese semplicemente perché non ero esperto di FPGA e non sapevo che gli shift register di lunghezza maggiore di 8 bit è meglio implementarli usando le ram distribuite nel dispositivo.
Tutto questo sproloquio per dire: parti con un circuito semplice e aumenta via via la complessità. Quando conosci bene gli FPGA e il tuo microprocessore funziona a bassa frequenza allora cominci a salire piano piano finché non raggiungi i limiti del dispositivo.
In pratica con 50MHz puoi campare benissimo per i prossimi 2 anni...
cdimauro
24-04-2015, 06:47
http://www.myhdl.org/
A quanto pare sta riscuotendo un pochino di successo... Chissà che ne verrà fuori...
Ora sto smanettando a lavoro con una bella FPGA grossa grossa (Kintex 7), se stasera non ho troppo da fare, prima di andare a casa cerco di provarlo questo "MyHDL" e vi faccio sapere.
Lo conosco da tempo, e purtroppo è una soluzione ancora troppo a basso livello, che richiede conoscenze di elettronica che, onestamente, non ho.
ingframin
19-11-2015, 16:48
Siccome oggi sono in vena di recuperare vecchi thread, gli FPGA sono lùltimo argomento di cui si è parlato e sto per mettere in pratica un bel po'di cose che ho imparato in questa mega discussione, volevo segnalarvi questa:
http://www.xilinx.com/products/boards-and-kits/arty.html#hardware
Lo scopo di questo kit è essenzialmente quello di giocare con l'architettura di un microprocessore. Xilinx spinge per il microblaze ma è perfettametne personalizzabile, alla fine si tratta di un "soft core" ovvero è tutto VHDL, non ha nessun hardware dedicato nell'FPGA.
Io l'ho ordinata dal sito Mirifica:
http://www.mirifica.it/store/new-products/724-artix-7-35t-arty-fpga-evaluation-kit.html
Alla fine inclusa iva e spedizione viene 133,78€...
A breve farò una serie di post sul mio blog in cui implementerò un piccolo microprocessore su questa scheda.
Ogni contributo è il benvenuto ovviamente :D
A quel prezzo è veramente un'affarone!
Che HDL userai per la CPU? Hai già in mente a grandi linee l'architettura?
cdimauro
19-11-2015, 21:37
Siccome oggi sono in vena di recuperare vecchi thread, gli FPGA sono lùltimo argomento di cui si è parlato e sto per mettere in pratica un bel po'di cose che ho imparato in questa mega discussione, volevo segnalarvi questa:
http://www.xilinx.com/products/boards-and-kits/arty.html#hardware
Lo scopo di questo kit è essenzialmente quello di giocare con l'architettura di un microprocessore. Xilinx spinge per il microblaze ma è perfettametne personalizzabile, alla fine si tratta di un "soft core" ovvero è tutto VHDL, non ha nessun hardware dedicato nell'FPGA.
Io l'ho ordinata dal sito Mirifica:
http://www.mirifica.it/store/new-products/724-artix-7-35t-arty-fpga-evaluation-kit.html
Alla fine inclusa iva e spedizione viene 133,78€...
A breve farò una serie di post sul mio blog in cui implementerò un piccolo microprocessore su questa scheda.
Ogni contributo è il benvenuto ovviamente :D
Il costo è veramente contenuto, ma è un peccato che il kit sia della concorrenza. Devo informarmi se c'è qualcosa di simile per Altera (a parte le Arrow board).
L'idea di realizzare un softcore la trascino da tempo, ma il mio grosso limite rimane il VHDL, di cui sono a digiuno, come sai. :(
P.S. Ho perso 2 ore a rileggermi il thread. :D
Non sapevo dell'esistenza di un thread del genere. :D :D :D :D :D
Che figata :D
ingframin
23-11-2015, 17:09
A quel prezzo è veramente un'affarone!
Che HDL userai per la CPU? Hai già in mente a grandi linee l'architettura?
Ciao,
Userò VHDL che ci sto riprendendo pratica a lavoro.
Tutto il odice lo caricherò su github, poi magari posto qui e mi date qualceh commento :)
Come architettura ho qualche idea ma non voglio fare nulla di complicato.
Parto liscio liscio, tipo 25 istruzioni, niente prefetch, niente predizione di salti, niente cache, niente DMA e soprattutto esecuzione in ordine.
Inoltre vorrei fare una serie di articoli sul mio blog per spiegare passo passo cosa faccio.
Poi le cose più complciate le aggiungo dopo.
Sicuramente voglio includere:
- moltiplicatore hardware (viene gratis in quell'fpga)
- divisore hardware (questo lo devo implementare da 0)
- radice quadrata in hardware
- seno e coseno in hardware (col circuito CORDIC magari o col metodo di Newton Ramphson)
- qualche istruzione SIMD
- se mi riesce vorrei implementare anche le quattro operazioni fondamentali su floating point (IEEE758)
Il costo è veramente contenuto, ma è un peccato che il kit sia della concorrenza. Devo informarmi se c'è qualcosa di simile per Altera (a parte le Arrow board).
L'idea di realizzare un softcore la trascino da tempo, ma il mio grosso limite rimane il VHDL, di cui sono a digiuno, come sai.
P.S. Ho perso 2 ore a rileggermi il thread.
Cesare,
vatti a vedere il sito di Terasic:
http://www.terasic.com.tw/en/
Ci sono un paio di board paragonabili.
Un'altra cosa che puoi vedere è High level synthesis -> Scrivi codice C o SystemC che viene poi sintetizzato in FPGA o ASIC.
Qui però sono ignorante come una zappa, ti conviene provare a chiedere a qualcuno dei tuoi colleghi che lavora con queste cose.
Se vuoi invece imparare VHDL:
http://www.amazon.com/Circuit-Design-Simulation-Volnei-Pedroni/dp/0262014335
oppure questo che è fatto benissimo (parte dalle porte logiche fino e arriva al MIPS, ce n'è anche una versione con ARM):
http://www.amazon.com/Digital-Design-Computer-Architecture-Edition/dp/0123944244/ref=pd_sim_sbs_14_6?ie=UTF8&dpID=51W0N9SRedL&dpSrc=sims&preST=_AC_UL160_SR128%2C160_&refRID=0NCNERRWCD5KNBK6N6E9
cdimauro
23-11-2015, 22:08
Ciao,
Userò VHDL che ci sto riprendendo pratica a lavoro.
Tutto il odice lo caricherò su github, poi magari posto qui e mi date qualceh commento :)
Come architettura ho qualche idea ma non voglio fare nulla di complicato.
Parto liscio liscio, tipo 25 istruzioni, niente prefetch, niente predizione di salti, niente cache, niente DMA e soprattutto esecuzione in ordine.
Bene. Così sarà più facile provare a seguirti.
Inoltre vorrei fare una serie di articoli sul mio blog per spiegare passo passo cosa faccio.
Posso suggerirti di contattare il responsabile di Appunti Digitali? IMO avresti più visibilità, renderesti felici parecchie più persone. ;)
Poi le cose più complciate le aggiungo dopo.
Sicuramente voglio includere:
- moltiplicatore hardware (viene gratis in quell'fpga)
- divisore hardware (questo lo devo implementare da 0)
- radice quadrata in hardware
- seno e coseno in hardware (col circuito CORDIC magari o col metodo di Newton Ramphson)
- qualche istruzione SIMD
- se mi riesce vorrei implementare anche le quattro operazioni fondamentali su floating point (IEEE758)
Qui vai già sul complicatuccio.
Cesare,
vatti a vedere il sito di Terasic:
http://www.terasic.com.tw/en/
Ci sono un paio di board paragonabili.
Ehm... diciamo che preferisco aspettare un po'. Non si sa mai. :fiufiu:
Un'altra cosa che puoi vedere è High level synthesis -> Scrivi codice C o SystemC che viene poi sintetizzato in FPGA o ASIC.
Questo m'intrippa molto. Adesso casco dal sonno, e in questi giorni sono incasinato: cerco qualcosa nel fine settimana.
Qui però sono ignorante come una zappa, ti conviene provare a chiedere a qualcuno dei tuoi colleghi che lavora con queste cose.
Se vuoi invece imparare VHDL:
http://www.amazon.com/Circuit-Design-Simulation-Volnei-Pedroni/dp/0262014335
Francamente il VHDL non fa proprio per me.
oppure questo che è fatto benissimo (parte dalle porte logiche fino e arriva al MIPS, ce n'è anche una versione con ARM):
http://www.amazon.com/Digital-Design-Computer-Architecture-Edition/dp/0123944244/ref=pd_sim_sbs_14_6?ie=UTF8&dpID=51W0N9SRedL&dpSrc=sims&preST=_AC_UL160_SR128%2C160_&refRID=0NCNERRWCD5KNBK6N6E9
Quest'altro è molto più abbordabile per un profano come me. :D
Comunque m'è venuta in mente un'altra delle mie malsane idee sull'argomento, per realizzare qualcosa di più interessante e di più vasta portata, ma devo aspettare un po' di mesi prima di muovermi. :fagiano:
Grazie per le dritte, e buon lavoro!
Sono solo uno studente, ma mi piacerebbe "seguirvi". Imparerei tante cose, ne sono sicuro. All'Università abbiamo fatto solo un sacco di roba teorica; so analizzare circuiti logici, fare le pulci ad ogni singolo transistor, ma niente VHDL o progettazione.
Quindi, vi tengo d'occhio. :stordita:
cdimauro
28-11-2015, 21:41
FPGA processor resources (http://www.amigacoding.de/index.php?topic=535.msg4106#msg4106)
Come procede questo progetto?
ingframin
15-09-2016, 14:04
Come procede questo progetto?
Io sono impantanato con i numeri floating point e con troppe ore di lavoro a settimana... Sto aspettando novembre che avrò un po'di ferie per cominciare l'implementazione vera e propria.
Al momento non ho granché a parte il setup di base (clock, interfaccia DDR, etc...) e una catasta di ore di sonno arretrate.
Gli altri non lo so.
cdimauro
15-09-2016, 21:43
Io sto lavorando all'aggiornamento dello script che uso per generare binario (partendo da x86 o x64) e statistiche. Questo per la terza versione della mia architettura. Al momento non ho tempo per completarlo, ma conto di riprenderlo a breve.
Nel frattempo ho già definito i dettagli più importanti della quarta (e ormai penso ultima) versione, che per fortuna è basata per lo più sulla terza, per cui le modifiche allo script non dovrebbero richiedere troppo tempo.
Scusate se ho riuppato questo topic, ma almeno raccontate a che punto siete. Del resto ... non dovete avere fretta, è solo una soddisfazione personale.
Thread interessantissimo!
Cosa ne pensate di ForwardCom? http://www.forwardcom.info
cdimauro
18-09-2016, 20:32
Scusate se ho riuppato questo topic, ma almeno raccontate a che punto siete. Del resto ... non dovete avere fretta, è solo una soddisfazione personale.
Fretta? E' da 5 anni che lavoro alle mia (mie) architettura, e non ho ancora finito. :D
Mi spiace soltanto non poter pubblicare informazioni, perché spero sempre che ci possa essere uno sviluppo commerciale.
Però l'ISA 64K, che è sostanzialmente completa, la puoi trovare fra le prime pagine del thread, se t'interessa.
Thread interessantissimo!
Cosa ne pensate di ForwardCom? http://www.forwardcom.info
Ho letto il manuale un po' di settimane fa. Sembra interessante, ma sono scettico nei confronti del meccanismo dei vettori a lunghezza variabile, riguardo sia al supporto (compilatori + software) sia all'implementazione (ma qui non sono esperto di FPGA, RTL, et. similia: è una solo una sensazione).
Comunque, a dispetto delle affermazioni, l'architettura non è affatto ortogonale. Qui mi riferisco alle istruzioni "tiny".
Debbo dire che è un interessante esercizio, e si vede proprio che Agner Fog si sia sfogato, dando spazio alle idee che ha accumulato in tutti questi anni, visto che alla Intel non hanno recepito i suoi consigli / suggerimenti (mi riferisco, in particolare, a quelli per rendere più corte le istruzioni AVX-512, che arriveranno a breve).
Peraltro alcune idee simili alle sue le ho già implementate da tempo nella mia architettura, ma con la differenza che quest'ultima è fortemente ispirata (nonché totalmente retrocompatibile a livello di sorgenti assembly) a x86 e x64.
In breve: lui ha pensato di scrivere un'architettura completamente nuova (e totalmente incompatibile), mentre io l'ho sostanzialmente ridisegnata (nonché grandemente estesa e ottimizzata).
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.