|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
[Asm] Progettare una architettura di processore
Salve a tutti!
Apro questo thread per discutere su una nuova architettura di processore, costruita partendo da zero, definendo il set di istruzioni, i registri, le modalità ecc... Quando avremo deciso queste cose (o anche durante), possiamo implementare l'architettura usando l'ottimo simulatore Hades, così da poter far girare qualche programma che scriveremo. Io ho già in mente qualche idea, tipo un' architettura RISC con 16 registri, ma con alcune istruzioni comode e tipiche di un CISC in modo da migliorare la densità del codice. Sono però indeciso sul formato delle istruzioni, se comprimerlo a 16 bit o lasciarlo largo a 32 bit e metterci più funzionalità. Fatemi sapere cosa ne pensate, chiunque più dire la sua, anche se non è un esperto; siamo qui anche per imparare ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Io da tempo sto meditando sui dettagli di un'ISA CRISP a 64 bit fortemente ispirata ai Motorola 68000, ma di realizzarne il circuito non se ne parla proprio: sarebbe troppo complesso come progetto.
I RISC, poi, non riesco a farmeli digerire. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Io mi iscrivo... non so quanto riuscirò a fare, più che altro vorrei imparare qualcosa
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Quote:
![]() |
||
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Mi ci vorranno un po' di giorni, comunque.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Quote:
So giusto cosa sono gli opcode.
__________________
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() Intende dire che deve definire quanti/quali registri, la loro larghezza, il datapath... , e poi descrivere le istruzioni, cioè il loro formato, i modi di indirizzamento ecc... |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Avendo studiato un'unica architettura(MIPS), non penso di poter fare molto. Qualsiasi cosa io dica, penso sarebbe influenzata da quell'unico, solo punto di vista.
Ultima modifica di ndakota : 19-06-2010 alle 11:28. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E io che sono influenzato dal 68000, allora?
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
un doppio array di registri a 32 bit, in modo da poter operare sui 64 non lo mettiamo in conto ?
secondo me tra 32 e 16, il 16 è più snello e leggero...ma se prendiamo in considerazione tutte e 3 le opzioni, un idea sulla struttura di un 64 io ce la butterei giù |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Da crasso ignorante della materia, io mi pongo alcune domande. A partire proprio dai registri.
A volerla fare semplice, i registri altro non sono che delle aree di memoria ad accesso *estremamente* veloce (direi immediata). Quindi, anziché andare a definire singolarmente i registri, la mia idea era quella di definire direttamente un'area di memoria ad accesso estremamente veloce, e di indirizzarla con una serie di codici specifici. Poniamo, che so, di avere un'area di 128 byte come "memoria di registro". Possiamo usarla come suddivisa in 16 registri a 64 bit, oppure 32 registri a 32 bit, oppure come 64 registri a 16 bit, o come 128 registri a 8 bit. O anche 8 registri a 128 bit... Con 8 bit possiamo completamente indicare ogni singola porzione di memoria di quest'area. Ad esempio, per indicare un registro a 8 bit, lo indichiamo mettendo a 1 il bit 0 ed usando gli altri 7 per indicare quale dei 128 registri a 8 bit usiamo. Per i registri a 16 bit, poniamo i bit 0 a 0 ed il bit 1 ad 1, usando gli altri 6 bit per indicare quale dei registri a 16 bit stiamo usando. E così via... Esempio: 0011010 1 indica il registro a 8 bit numero 26 (offset 25 dell'area dei registri) 011000 10 indica il registro a 16 bit numero 24 (offset 47) 0110 1000 indica il registro a 64 bit numero 6 (offset 47, come sopra) Pare una minchiata? O troppo complesso?
__________________
![]() Ultima modifica di MaxArt : 19-06-2010 alle 22:16. |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Mi sembra estremamente complicato, difficilmente implementabile e poco scalabile.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Puoi scendere più nel dettaglio? Altrimenti non capisco nulla...
![]() La mia idea (che in realtà ho da quando ero un ragazzino che smanettava con l'assembly) è mutuata da quello che si fa con i registri AX, BX, CX e DX dell'x86, che vengono automaticamente suddivisi in due registri a 8 bit: AH, AL, poi BH e BL e così via. Rendere più generale questo concetto è così complicato?
__________________
![]() |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Richiede un decodificatore per recuperare dimensione e posizione del registro da utilizzare, e già questo è un grosso impedimento (tutt'altra cosa è chiedere: "voglio AH", oppure "voglio RAX"; si tratta di scelte "immediate" perché già "decodificate").
Inoltre, fatto questo, serve logica addizionale per selezionare e mascherare opportunamente le parti interessate.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Quote:
Il mio discorso si riferiva al fatto che bastano 8 bit per indicare tutti i registri possibili.
__________________
![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
provo a spiegare la mia idea sui registri 32/64 bit.
adesso provo ad esporre un esempio supponendo i registri a 4bit, che possono essere sdoppiati ad 8bit, per ovvie semplicità di calcolo. supponiamo di avere un array di 8 registri, e immaginiamolo con la seguente struttura, a "doppia colonna": Codice:
riga0: R0: xxxx R1: xxxx riga1: R2: xxxx R3: xxxx riga2: R4: xxxx R5: xxxx riga3: R6: xxxx R7: xxxx • R1 lo chiamiamo "registro di sdoppiamento", ed ogni bit del registro è un valore di verità riferito ad una delle righe della struttura a doppia colonna. il bit più significativo se sarà 0 indicherà che la modalità "ad estensione di registri" è disattivata, 1 altrimenti; se l'i-esimo bit è 1, i due registri della riga associata andranno letti in sequenza come un unico registro da 8 bit, se invece è 0 si potrà avere accesso ad entrambi i registri contententi valori a 4 bit. con semplici (almeno in linea teorica) cambi di notazione si può risolvere il tutto con degli shift o degli or/xor sui bit dei registri. se tutti i registri sono implementati come un unico array di bit, la lunghezza di due registri sequenziali o di uno solo ha complessità equivalente, e una richiesta su un determinato registro equivale solo ad operare su n bit (nell'esempio qui sopra 4) consecutivi a partire da un determinato bit, ben identificabile... che dite ?! |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Ecco, questa è una cosa che non ho mai ben capito dei processori, almeno quelli moderni. Cioè, dover attribuire per forza un "compito" specifico ai registri.
Come i vecchi AX, BX, CX e DX che erano "Accumulatore", "Base", "Contatore" e "Dati", in un modo che aiutava anche a ricordare il compito con le iniziali. Poi c'erano SI e DI, e ancora SP, BP, IP ed infine DS, ES, SS e CS. Tutti con compiti specifici, tanto che alcune istruzioni funzionavano con alcuni registri e con altri no. Mica si può fare MOV [AX],DS ... Ma in fondo sono tutti registri a 16 bit! Né più né meno. Capisco che, un tempo, per semplificare la complessità del processore, fosse necessario operare in questi termini, ma oggi penso che si siano abbondantemente superate queste barriere. Io vorrei "liberalizzare" questa filosofia, con la mia idea esposta di sopra. Quote:
__________________
![]() |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
Quote:
![]() • R1 lo chiamiamo "registro di sdoppiamento", ..... il bit più significativo se sarà 0 indicherà che la modalità "ad estensione di registri" è disattivata, 1 altrimenti; il fatto di avere un registro fisso come accumulatore è più semplice, almeno a mio dire, da realizzare sul circuito del processore. comunque, imho, è più divertente sperimentare nuove modifiche su tecnologie abbondantemente testate che ribaltare tutto senza avere nessuna base su cui appoggiarsi |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:41.