Upload: EduMips64_first_draft

File EduMips64_first_draft, 5.6 KB (added by trac-wikifileuploader, 3 years ago)

Imported by trac-wikifileuploader

Line 
1== EduMIPS64 - Draft one ==
2=== by Massimo Trubia (max83t) ===
3last update: 22-04-2006
4
5Come al solito editate tutto ciò che è scorretto...
6
7Abbiamo essenzialmente diviso il progetto in 5 moduli:
8
9{{{
10        MAIN----GUI------CPU ---------  INSTRUCTION SET ------  PARSER
11                          _________________________________________
12}}}
13
14=== GUI ===
15L'interfaccia grafica sarà simile a Winmips64 a meno che non si decida una struttura tabbed (linguette
16cliccabili mediante cui si cambia l'oggetto osservato). Quest'ultimo cambiamento potrebbe anche essere
17effettuato successivamente dal momento che il gruppo di sviluppo della GUI progetterà i singoli jpanel.
18La GUI è completamente indipendente dal kernel, ma essa dovrà fornire alla CPU un'interfaccia che
19permetta di agire sui singoli componenti.
20
21Per esempio la pipeline dovrà essere rappresentata da rettangoli
22colorati a seconda dello step eseguito, per cui dovranno esistere dei metodi che agiscano sul singolo
23rettangolo cambiandone gli attributi.I JPanel rappresentanti i dati, i registri e la memoria,come anche la pipeline devono essere aggiornati man mano che le istruzioni vengono eseguite, dunque per esse vale quanto detto prima.
24
25=== SIMULAZIONE E MAIN ===
26Riguarda l'aspetto d'insieme del software e la modalità d'interazione utente-programma. In questo ambito
27sono sviluppate utilità per l'utente finalizzate al miglioramento dell'usabilità e si  effettua la coordinazione tra tutti i moduli di EDUMips64.
28
29=== CPU ===
30Implementa una macchina a stati che si occuperà di eseguire le istruzioni.
31Essa fornisce all'IS l'interfaccia che permette a quest'ultimo di agire sui
32meccanismi interni della CPU.
33
34La CPU deve ad esempio disporre dei metodi setReg(num registro,valore) e getReg(num registro)
35per far si che ogni istruzione dell'instruction set possa agire sui registri.
36Le singole istruzioni sono viste come black box. La CPU ignora la loro implementazione
37interna e può soltanto eseguirle mediante un metodo exec() che ognuna di esse
38dovrà fornire. La CPU subira' dunque le modifiche che le istruzioni richiedono con
39l'invocazione dei metodi anzidetti.
40
41=== PARSER e INSTRUCTION SET ===
42Il parser si occupa di preparare il programma utente (es. il classico file con estensione
43.s del Winmips64) ad essere eseguito nella CPU, ovvero deve costruire il codice oggetto del programma da "dare in pasto alla CPU".
44
45Può comportarsi in soli due modi:
46 *creare il codice oggetto
47 *generare un'eccezione dovuta a un'istruzione errata
48
49'''Come agisce?'''
50La materia prima su cui opera il parser è il programma utente. Lo legge riga per riga
51e controlla se l'istruzione corrispondente è "definita corretta".In caso contrario,se ad esempio
52la riga letta è "DADD R10,R5", si accorgerà dell'errore lessicale/sintattico operando
53un controllo sul numero di parametri da passare alla DADD.
54
55Ogni istruzione dell'instruction set deve dunque fornire al parser
56un'interfaccia che gli permetta di verificare tale correttezza. Nel nostro esempio,
57appena il parser legge la riga "DADD R10,R5,R2" dovrebbe creare un oggetto Instruction e invocare su esso
58dei metodi del tipo  `Instruction.getType()`, `Instruction.getSyntax()` i quali restituiscono il tipo di istruzione letto dal parser e la sintassi che essa deve avere.
59Il parser in altre parole usa l'instruction set per risolvere i propri problemi:
60effettuare le analisi di correttezza.
61
62'''ESEMPIO DI POSSIBILE IMPLEMENTAZIONE'''
63
64 //il parser, dopo aver letto "DADD R10,R5,R2" estrae l'opcode (DADD) e crea un oggetto sul quale
65 //può invocare i metodi anzidetti per istruirsi
66 Instruction i=new Instruction("DADD");
67 type=i.getType();
68 syntax=i.getSyntax();
69 confronto tra istruzione letta dal parser e sintassi corretta proposta dall'instruction set ;
70
71Dopo averne verificato la correttezza, il parser può finalmente creare l'istruzione DADD passando ad essa i relativi parametri.Da questo momento in poi la DADD è impacchettata insieme alla codifica binaria delle operazioni da svolgere ("Leggere dai registri R5 ed R2, sommare i valori e memorizzarli in R10") e inviata alla CPU.
72
73L'oggetto DADD viene aggiunto dalla CPU  nella pipeline e, all'avanzare degli step fetch,decode,execute,mem,writeback, invoca su esso i corrispondenti metodi ID(),EX(),MEM(),WB().
74
75L'invocazione dei metodi anzidetti fa sì che l'istruzione
76DADD operi sui registri dell'oggetto CPU o in altri casi dell'oggetto Memoria (nelle istruzioni di tipo Load/Store).
77L'oggetto DADD si comporterà in questo modo:
78
79-AZIONE DELLA PIPELINE FATTA AVANZARE DALLA CPU CON SUCCESSIVE INVOCAZIONI DEL METODO step()
80  CPU          PIPELINE
81 step()  =>   DADD.ID();
82 step()  =>   DADD.EX();
83 ....
84
85-METODI DELL'OGGETTO DADD
86ID() generaeccezione RegistroGiaBloccato{
87   //blocco registro R10
88   CPU.lockReg(10);
89}
90
91EX(){
92     op1=CPU.getReg(5);
93     op2=CPU.getReg(2);
94     res=somma a 64 bit dei due operandi con controllo di overflow;
95 }
96MEM(){}
97WB(){
98     setReg(10, res);
99     //sblocco registro R10
100     CPU.unlockReg(10);
101}
102
103Un'altra importante azione effettuata dal parser è il monitoring dello stato della memoria e dei salti
104compiuti in essa, infatti sappiamo che l'esecuzione delle istruzioni è governata dalla politica
105PC-relative e PC-region, un salto illegale deve dunque generare un'eccezione.
106
107Infine l'INSTRUCTION SET e' composto da una libreria di classi facilmente estensibile che raggruppa le istruzioni del MIPS64 dal punto di vista funzionale.
108
109{{{
110                           Instruction
111                                 
112                ---------------------------------
113                                                 
114              ALU            LoadStore       FlowControl
115                                                 
116                 _DADD           _LB             _JAL
117                 _DSUB           _LD             _BNEZ
118                 ...             ...             ...
119}}}