Esercizi relativi all`architettura MIC-1 1. Nel MIC
Transcript
Esercizi relativi all`architettura MIC-1 1. Nel MIC
Esercizi relativi all’architettura MIC-1 1. Nel MIC-1 ci vuole 1 ns per preparare MIR, 1 ns per mettere il contenuto di un registro sul bus B, 3 ns per far funzionare l’ALU e lo shifter, e 1 ns perchè i risultati ritornino ai registri. La larghezza dell’impulso di clock è di 2 ns. Questa macchina può funzionare a 100 M Hz? E a 150 M Hz? Quale è la frequenza massima di clock a cui la macchina può funzionare correttamente ? Soluzione: Il data path occupa 6 ns così ripartiti: - 1 ns per preparare MIR; - 1 ns per mettere il contenuto di un registro sul bus B; - 3 ns per far funzionare l’ALU e lo shifter; - 1 ns perchè i risultati ritornino ai registri. Ai 6 ns del data path bisogna aggiungere i 2 ns della larghezza dell’impulso di clock. Quindi, per far funzionare correttamente la macchina, il periodo del clock deve essere superiore a 8 ns. A 100 M Hz, il periodo del clock è: T = 1 1 = = 10 ns 100 · 106 108 ed è quindi sufficiente a far funzionare correttamente la macchina. A 150 M Hz, il periodo del clock è: T = 1 1 = = 6.667 ns 150 · 106 1.5 · 108 e non è, quindi, sufficiente a far funzionare correttamente la macchina. Dato che un ciclo di clock sull’hardware della macchina impiega (6+2) = 8 ns, la frequenza massima di clock sarà: F = 1 1 = = 125 M Hz T 8 · 10−9 2. Dare due diverse traduzioni IJVM per la seguente istruzione, e commentare la loro validità: i = j +k +4 Soluzione: I traduzione: 1 ILOAD ILOAD IADD BIPUSH IADD ISTORE j k 4 i / / / / / / carica j sullo stack carica k sullo stack carica j+k sullo stack carica 4 sullo stack carica j+k+4 sullo stack memorizza il risultato in i / / / / / / carica j sullo stack carica k sullo stack carica 4 sullo stack carica k+4 sullo stack carica j+k+4 sullo stack memorizza il risultato in i II traduzione: ILOAD ILOAD BIPUSH IADD IADD ISTORE j k 4 i ATTENZIONE! - se j ha valore negativo e k positivo, l’operazione j + k + 4 potrebbe essere ammessa, ma il risultato intermedio k + 4 dare overflow. In questo caso la seconda soluzione darebbe errore. 3. Quanto tempo occorre (espresso in ns) perchè una machhina MIC-1 con clock a 200 M Hz esegua l’istruzione JAVA: i = j +k Soluzione: Traduco l’istruzione in linguaggio IJVM e conto quante micrositruzioni occorrono per la sua esecuzione: ILOAD ILOAD IADD ISTORE Totale j k i / / / / impiega impiega impiega impiega 6 6 4 7 microistruzioni microistruzioni microistruzioni microistruzioni 23 microistruzioni Con un clock a 200 M Hz, ogni microistruzione impiega un tempo pari a un periodo del clock: durata 1 microistruzione = 1 = 5 ns 200 · 106 Per cui il tempo totale per l’esecuzione della istruzione JAVA data è: 5 · 23 = 115 ns 4. Esprimere in linguaggio MAL cosa esegue la seguente µistruzione MIC-1 (codificata per semplicità in esadecimale): 0000C 2103 Soluzione: La decodifica (in binario) dei vari campi della µistruzione produce: 2 NEXTADDR JAM SH ALU C W/R B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 1 il cui significato in MAL è: TOS = MDR = MBRU and H ; GOTO 0x000 5. Si voglia aggiungere all’insieme di istruzioni ISA-IJVM la nuova istruzione POPTWO che toglie due parole dalla cima stack. Scrivere il microinterprete MIC-1 per questa nuova istruzione. Soluzione: poptwo1 poptwo2 poptwo3 poptwo4 SP=SP-1 MAR=SP=SP-1; rd TOS=MDR; goto Main1 6. Si voglia aggiungere all’insieme di istruzioni ISA-IJVM la nuova istruzione: BI2P U < const16 > che fa il push sullo stack di < const16 > che è una costante con segno a 16 bit (2 byte). Scrivere il microinterprete MIC-1 per questa nuova istruzione. Soluzione: bi2pu1 bi2pu2 bi2pu3 bi2pu4 bi2pu5 PC=PC+1; fetch H=MBR << 8 MDR=TOS=MBRU OR H MAR=SP=SP+1; wr PC=PC+1; fetch; goto Main1 7. Il risultato ottenuto con la nuova istruzione BI2P U < const16 >, potrebbe anche essere ottenuto applicando alla istruzione BIP U SH il prefisso W IDE, con l’intesa che W IDEBIP U SH < const16 > ha un operando con segno a 16 bit (concordemente a quanto succede per W IDEILOAD e W IDEIST ORE). Scrivere il microinterprete MIC-1 per questa nuova istruzione. Soluzione: 3 wide1 PC=PC+1; fetch; goto (MBR or x100) widebipush1 widebipush2 widebipush3 widebipush4 widebipush5 PC=PC+1; fetch H=MBR << 8 MDR=TOS=MBRU OR H MAR=SP=SP+1; wr PC=PC+1; fetch; goto Main1 Discutere la differenza fra le due implementazioni. 8. Si vuole aggiungere all’insieme ISA-IJVM la nuova istruzione: BISH8P U < byte > che shifta di 1 byte verso sinistra la parola affiorante sullo stack e aggiunge l’operando < byte > nel byte meno significativo. Scrivere il microinterprete MIC-1 per questa nuova istruzione. Soluzione: bish8pu1 bish8pu2 bish8pu3 bish8pu4 bish8pu5 MAR=SP H=TOS << 8 TOS=MDR=MBRU OR H;wr PC=PC+1;fetch goto Main1 // // // // // MAR punta alla cima dello stack shifta di 1 byte parola affiorante carica operando e aggiorna TOS incrementa PC e fetch termina 4