1 / 25

EasyDLX

EasyDLX. Università degli Studi di Bologna. Facoltà di Ingegneria. Un linguaggio che realizza un sottoinsieme dell’Instruction Set Architecture del DLX. Progetto per l’esame di Linguaggi e Modelli Computazionali LS. Realizzato da Daniele Biagi. Docente Prof. E.Denti.

Download Presentation

EasyDLX

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EasyDLX Università degli Studi di Bologna Facoltà di Ingegneria Un linguaggio che realizza un sottoinsieme dell’Instruction Set Architecture del DLX Progetto per l’esame di Linguaggi e Modelli Computazionali LS Realizzato da Daniele Biagi Docente Prof. E.Denti

  2. Obiettivi del progetto • Sviluppare un linguaggio che consenta di simulare delle operazioni su un processore DLX. • Realizzare un interprete per questo linguaggio che possa aggiornare lo stato interno di una macchina virtuale. • Realizzare un’interfaccia grafica dotata di un editor per la scrittura di codice e che possa mostrare passo passo lo stato della macchina virtuale. EasyDLX - Daniele Biagi

  3. Principali caratteristiche del DLX (1/2) • Istruzioni di tipo RISC (Reduced Instruction Set Computer) • Le istruzioni sono sempre allineate ad indirizzi multipli di 4 • Program Counter (PC) per tenere traccia dell’inidirizzo della prossima istruzione • 32 registri general purpose da 32 bit (R0..R31, R0=0) • 32 registri da 32 bit ed un registro di stato sono dedicati per operazioni floating point. EasyDLX - Daniele Biagi

  4. Principali caratteristiche del DLX (2/2) • Gli operandi immediati, dove previsti, sono codificati con 16 bit • Lo spazio di indirizzamento è di 4 GigaByte (32bit) • Una sola modalità di indirizzamento: registro + offset (di 16 bit) • I numeri negativi sono rappresentati in complemento a due, mentre quelli positivi in segno-valore assoluto EasyDLX - Daniele Biagi

  5. Il set di istruzioni del DLX Le istruzioni possono essere suddivise in 3 classi: • Istruzioni aritmetiche e logiche che possono prevedere anche un operando immediato (I) e tipo unsigned (U): • Istruzioni logiche:AND(I), OR(I), XOR(I) • Istruzioni aritmetiche: ADD(U)(I), SUB(U)(I), MULT(U), DIV(U) • Istruzioni di shift logico (a destra o a sinistra): SLL(I), SRL(I) • Istruzioni di set condition, le quali se verificata una certa condizione inseriscono un 1 nel registro di destinazione, o altrimenti uno 0: SEQ(I) (=), SNE(I) (≠), SLT (I) (<), SGT (>), SLE (≤) , SGE (≥) • Istruzioni di trasferimento dati: • Trasferimento dalla memoria (Load): LB(U), LH(U), LW • Trasferimento verso la memoria (Store): SB, SH, SW • Istruzioni di trasferimento del controllo: • Istruzioni di salto condizionato: BNEZ, BEQZ • Istruzioni di salto incondizionato diretto e indiretto: J, JR • Istruzioni di chiamata a procedura: JAL, JALR EasyDLX - Daniele Biagi

  6. Linguaggio: esempio • LOOP: ADD R1,R2,R3; R1  R2+R3 • ADDI R1, R2,3; R1  R2+3 • ADD R1, R5, R0; R1 R5 • SLT R1, R2, R3; se R2<R3 R1  1, altrimenti R1  0 • LB R1,40(R3); R1  (MEM[40+R3]7)24##(MEM[40+R3]) • LBU R1,40(R3); R1  (0)24## (MEM[40+R3]) • SW 10(R5), R7;MEM[10+R5]  R7 • JAL alfa; R31  PC+4, PC  (PC+4)+OFFSET(alfa) • BEQZ R4,LOOP;se R4=0 PC  PC+4+OFFSET(LOOP) • NOP; estensione del segno EasyDLX - Daniele Biagi

  7. Realizzazione • Dal progetto sono state escluse le operazioni ed i registri floating point. • Non vengono gestite le interruzioni • Le istruzioni RFE, CLI, STI e TRAP non sono state implementate • Ma, il linguaggio sviluppato comprende tutte le istruzioni delle 3 classi viste precedentemente e l’istruzione NOP. EasyDLX - Daniele Biagi

  8. Grammatica: i token • Le parole chiave per le etichette, numeri e separatori: utilizzata nelle istruzioni di salto es. BEQZ R4,LOOP; <LABELJ: <LETTER> (<LETTER> | <DIGIT>)*> <LABEL_COLON: <LABELJ> ":"> <NUMBER: (<SIGN>)? ["1"-"9"] (<DIGIT>)* | "0"> <DIGIT: ["0"-"9"]> <COMMA: ","> <OPEN_BRACKET: "("> <CLOSE_BRACKET: ")"> <SIGN: "+" | "-"> <SEMICOLON: ";"> <LETTER: ["a"-"z","A"-"Z","_"]> utilizzata nella definizione delle etichette es. LOOP:... EasyDLX - Daniele Biagi

  9. Grammatica: non terminali • Lo scopo della grammatica: <Goal> ::= ( <Label>)? <Instruction><SEMICOLON> <Label> ::= <LABEL_COLON> <Instruction> ::= <Instr3Regs> | <Instr2RegImm> | <InstrLoad> | <InstrStore> | <InstrBranch> | <InstrJumpReg> | <InstrJumpLab> | <Nop> In base al numero di operandi ed al tipo, possiamo dividere le istruzioni in 8 tipi diversi EasyDLX - Daniele Biagi

  10. Grammatica: non terminali • Istruzioni aritmetiche e logiche: <Instr3Regs> ::= <Op3Regs> <Register> <COMMA><Register> <COMMA><Register> <Op3Regs> ::= ADD | ADDU | SUB | SUBU | MULT | MULTU | DIV | DIVU | AND | OR | XOR | SLL | SRL | SLT | SGT | SLE | SGE | SEQ | SNE <Instr2RegImm> ::= <Op2RegsImm><Register> <COMMA> <Register> <COMMA> <Immed> <Op2RegsImm> ::= ADDI | ADDUI | SUBI | SUBUI | ANDI | ORI | XORI | SLLI | SRLI | SLTI | SGTI | SLEI | SGEI | SEQI | SNEI Con 3 registri es. ADD R1,R2,R3 Con 2 registri ed un immediato es. ADDI R1,R2,3 EasyDLX - Daniele Biagi

  11. Grammatica: non terminali • Istruzioni di traferimento dati e di salto: <InstrLoad> ::= <OpLoad> <Register> <COMMA> <Immed> <OPEN_BRACKET> <Register> <CLOSE_BRACKET> <OpLoad>::= LB | LBU | LH | LHU | LW <InstrStore> ::= <OpStore> <Immed> <OPEN_BRACKET> <Register> <CLOSE_BRACKET> <COMMA><Register> <OpStore> ::= SB | SH | SW <InstrBranch> ::= <OpBranch> <Register> <COMMA> <LABELJ> <OpBranch> ::= BEQZ | BNEZ <InstrJumpReg> ::= <OpJumpReg> <Register> <OpJumpReg> ::= JR | JALR <InstrJumpLab> ::= <OpJumpLab><LABELJ> <OpJumpLab> ::= J | JAL Load es. LB R1,16(R2) Store es. SB 16(R2),R1 Branch es. BEQZ R2,LOOP Jump con registro es. JR R31 Jump con etichetta es. J LABEL EasyDLX - Daniele Biagi

  12. Grammatica: non terminali • Istruzione NOP, operando immediato e registri: <Nop>::= NOP <Immed> ::= <NUMBER> <Register>::= R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 • Ma quali proprietà ha questa grammatica? EasyDLX - Daniele Biagi

  13. Grammatica: proprietà (1/2) • Proprietà della grammatica: • non ci sono produzioni che accorciano la forma di frase corrente • le parti sinistre di tutte le produzioni presentano un solo simbolo non terminale • le produzioni non sono vincolate alle forme lineari • Quindi, secondo la classificazione di Chomsky, la grammatica è di tipo 2 (context-free), in quanto tutte le produzioni risultano essere nella forma: con EasyDLX - Daniele Biagi

  14. Grammatica: proprietà (2/2) • La grammatica è LL(1), quindi basta un solo simbolo della frase per scegliere la produzione da applicare • In particolare, la grammatica non contiene ε-rules, quindi per verificare che sia LL(1) è sufficiente verificare che la condizione sugli Starter Symbols sia soddisfatta • Il linguaggio generato è regolare (tipo 3), poichè la grammatica non contiene self-embedding EasyDLX - Daniele Biagi

  15. Architettura del sistema: interpretazione (1/2) editor Analisi Lessicale (Scanner o Lexer) caratteri Analisi Semantica (Visitor) token AST rappresentazione della frase Analisi Sintattica (Parser) EasyDLX - Daniele Biagi

  16. Architettura del sistema: interpretazione (2/2) generato da JavaCC • Package parser: • EasyDLXParserTokenManager è lo Scanner che individua i singoli token • EasyDLXParser è il Parser che effettua l’Analisi Sintattica • Package sintaxtree: • contiene tutte le classi che possono essere usate per la costruzione dell’ AST • Package easyDLXVisitor: generato da JTB Le classi visitor estendono DepthFirstVisitor generata da JTB • contiene tutti i visitor che vengono utilizzati per l’interpretazione e per il controllo semantico ...perchè 3 visitor? EasyDLX - Daniele Biagi

  17. Problema delle forward references • Prima di simulare l’esecuzione delle istruzioni, viene eseguito un passo in cui viene associato un PC ad ogni istruzione. • di conseguenza viene assegnato anche un PC ad ogni etichetta che viene definita • E se avessi bisogno di fare un salto ad un’istruzione prima della definizione della sua etichetta? J LABEL; ... LABEL: ADD R1,R2,R3; EasyDLX - Daniele Biagi

  18. Analisi Semantica(Primo passo) • Al primo passo l’applicazione analizza le istruzioni nell’ordine in cui sono state inserite, ed esegue dei controlli semantici attraverso EasyDLXVisitorReferences: • gli immediati con segno devono essere compresi fra -32768 e 32767 • gli immediati senza segno devono essere compresi fra 0 e 65535 • la stessa etichetta deve essere definita soltanto una volta • R0 non può essere la destinazione • Jump o Branch a riferimenti mai definiti • Successivamente avviene la simulazione passo-passo, dove il contenuto dei registri e della memoria viene modificato sfruttando EasyDLXVisitorSimulation EasyDLX - Daniele Biagi

  19. Analisi Semantica (Secondo passo) • Ora nel caso di un salto o di un branch taken si va ad eseguire l’istruzione al nuovo PC. • Tuttavia, attraverso l’interfaccia grafica l’utente può controllare: • la prossima istruzione • quando eseguire la prossima istruzione • il contenuto dei registri • l’albero sintattico generato dal terzo visitor EasyDLXVisitorTree • il contenuto della memoria • Inoltre, ci sono le condizioni per effettuare ulteriori controlli semantici: • load e store non possono coinvolgere gli indirizzi dove sono memorizzare le istruzioni • l’indirizzo di una load deve riferirsi ad un’area di memoria dove è stato scritto qualcosa • gli indirizzi nelle LH ed SH devono essere pari • gli inidirizzi nelle LW e SW devono essere multipli di 4 EasyDLX - Daniele Biagi

  20. Architettura del sistema: interfaccia grafica e simulazione • L’applicazione è inoltre composta dei seguenti package: • easyDLXGUI: contiene le classi per l’interfaccia grafica • easyDLXsimulation: contiene le classi che modellano la macchina • easyDLXeditor: contiene le classi per costruire l’editor del codice EasyDLX - Daniele Biagi

  21. Interfaccia Utente • Aspetto dell’interfaccia utente durante la simulazione: controllo step-by-step stato dei registri prossima istruzione che verrà eseguita tabella corrispondenze etichetta-PC albero sintattico editor area di notifica stato della memoria EasyDLX - Daniele Biagi

  22. Test e collaudi • Per verificare la correttezza dell’analisi sintattica e semantica sono stati dati in input: • file con errori sintattici • file con errori semantici • Per accertare la correttezza delle operazioni che simulano il DLX, gli operandi sono stati generati in maniera casuale • in questo modo i test sono attendibili e garantiscono un ottimo grado di copertura EasyDLX - Daniele Biagi

  23. Strumenti utilizzati • Linguaggio di programmazione • Java (jdk1.7.0_01) • Ambiente di sviluppo • Eclipse Indigo • Generazione parser e scanner • JavaCC 5.0 • Generazione AST e visitor • Java Tree Builder 1.3.2 • Ambiente di test • Junit 4.8.2 EasyDLX - Daniele Biagi

  24. Limiti e sviluppi futuri... • Limiti: • L’applicazione in caso di overflow non avvisa l’utente: • Non è possibile mappare alcuna periferica • Non è possibile visualizzare i bit delle aree di memoria dove sono presenti le istruzioni • Oltre ai limiti dell’applicazione, ulteriori spunti per sviluppi futuri sono: • introduzione delle operazioni floating point • introduzione delle interruzioni EasyDLX - Daniele Biagi

  25. Demo EasyDLX - Daniele Biagi

More Related