Άσκηση 11: Ο Απλός Υπολογιστής στον Προσομοιωτή...
TRANSCRIPT
Άσκηση11:ΟΑπλόςΥπολογιστήςστονΠροσομοιωτή
(μέροςΑ’)
011c(Άσκηση11) – 4 - 7 Ιαν.2021 – ΜανόληςΚατεβαίνης
©copyrightUniversityofCrete– https://www.csd.uoc.gr/~hy120/20f/copyright.html
Πανεπ.Κρήτης– Τμ.Επ.Υπολογιστών– ΗΥ-120ΨηφιακήΣχεδίαση
Προοίμιο:Πρωτοβουλίες/παραλλαγέςευπρόσδεκτες• ΣτηνεκφώνησηαυτήπαρουσιάζεταιέναςδυνατόςτρόποςναφτιαχτείέναςαπλόςυπολογιστήςσανεκείνοντουμαθήματοςκαιτουΕργαστηρίουστοCircuitVerse,όμωςπροφανώςυπάρχουνκιάλλοι
• Είστεευπρόσδεκτοινακάνετετηδικήσαςπαραλλαγήηπρόταση• Καλέςιδέεςαπόδικέςσαςπαραλλαγές/προτάσειςθαεξεταστούνγιάπιθανήενσωμάτωσηστηνεκφώνησητηςεπόμενηςχρονιάς
• Καινοτομίεςαπόπλευράςσαςθαεκτιμηθούνβαθμολογικάθετικά(αρκείηπαραλλαγήσαςναμηναφαιρείαπότονυπολογιστήκάποιαουσιαστικήδυνατότητα,όπωςδομέςδεδομένων,επιστροφήαπόδιαδικασίες,κλπ)
• ΗDataMemory,εδώ,παραπιάνειπολύχώρο– μακάριναβρείτεκάποιοντρόπονατηνμικρύνετεσεεπιφάνειαπουκαταλαμβάνειστηνοθόνη
• Εντολέςδιακλάδωσης&indexedδενείναιεδώ- θαείναιστηνΆσκηση122011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ΣημείωσηγιάτονέοUserInterfaceτουCircuitVerse• Τοcircuitverse.org/simulator απέκτησενέοUserInterface• Μοιάζειναέχει(τουλάχιστον)έναbugστοSaveOffline– ότανέχειπολλάprojectsαποθηκευμένακαιγεμίζεικατακόρυφατομενούOpenOffline,(α)χαλάειτοUI,και (β)κάθενέοsaveσβήνεικαι πανωγράφειτοτελευταίοproject– επίσηςδενδουλεύειτοdeletepreviouslysavedproject (γιάναξαλαφρώσειτοσχετικόμενού)
• ΤοπαλαιόUserInterface,πουμοιάζειναδουλεύεικαλά,βρισκεταιστο:https://circuitverse.org/simulator_old– μόνοπουτοfontσταPropertiesείναιμαύροπάνωσεμαύροL– οιSplittersστηνεδώεκφώνησηείναιαπότοπαλαιόUserInterf.
3011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ΜνήμηΕντολών: κατασκευήμεROM• ΗROMέχειτοπλεονέκτημαότιβλέπουμεταπεριεχόμενάτης(καιποιάλέξηδιαβάζουμετώρα),ότιμπορούμεμεποντίκικαιπληκτρο-λόγιονατααρχικοποιούμεήαλλάζουμε– δηλ.ναγράφουμεεκείταπρογράμματάμας– καιαυτάδιατηρούνταιacross save• ΗROMείναιπάνταενόςμόνονμεγέθους:16λέξεις× 8bits/λέξη• Ίσωςκαιναέφταναν16εντολέςσυνολικά(τσίμα-τσίματοπρόγραμ-ματης§12.5),αλλάθαέπρεπενασβήμουμεκαιγράφουμεταδιάφοραπρογραμματαελέγχουπουθαέχουμε• Γι’αυτόεγώέβαλαχωρητικότητα32εντολέςστηνεδώI_MEM,δηλαδήπεντάμπιτοςPCκαιδύοROMblocksκαθ’ύψος• Πλάτος8bitsμόνονανάεντολήθαήτανσχεδόναδύνατο(θαμαςυποχρέωνεσε4-μπιτεςδιευθύνσεις⇒ 16datawords, 16εντολές),άραεγώέβαλα16-μπιτεςεντολές⇒ δύοROMblocksκατάπλάτος
4011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ΟκτάμπιτοςOpcode: ΑπλότητακαιΕυελιξίαΕλέγχου• Κράτησα8-μπιτοτοδεξιόπεδίοτωνεντολών(συνήθωςδιεύθυνση)– έτσι,opcodes-διευθύνσειςχωρίζονταιαπλάσεαριστερές-δεξιέςROM– παρ’ότι5bitsαρκούνγιάτιςδιευθύνσεις,όμωςτώραμπορούμεναβάζουμεκαιαριθμητικέςσταθερές(8bits) μέσαστιςεντολές(χάριςσταπολλάopcodes)
• Μετα8bitsπουπερισσεύουνγιάτονOpcode,μπορούμετώρανα«σπαταλήσουμε»κάμποσουςσυνδυασμούςτουςπροκειμένουνααπλοποιήσουμετοκύκλωμαελέγχου– αφιερώνουμεopcode bits,ανάέναήλίγα, σεέναήμερικάσήματαελέγχου– ακόμακαιεάνμερικοίτέτοιοισυνδυασμοίεμφανίζονταισπανίωςήποτέ– 3bitsγιάτοALUmodeγιάτις8πράξειςτηςALUτουCircuitVerse– 1bit(«ολόκληρο»!)bitγιά“passB”– 2bitsγιάεπιλογήενόςαπότους4οδηγητέςτουBUS(imm,dm,acc,ext)– 1bitγιάεντ. μεταφοράςελέγχου(CTI– ControlTransferInstr./jump-branch)– 1bitγιάεντολέςindexed(indirect)αριθμητικήςκαιload/store
5011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ΜνήμηΔεδομένωνμεορατάπεριεχόμενα:Καταχωρητές• ΟιRAMτουCircuitVerseυστερούνσεεποπτεία– δενβλέπουμεταπεριεχόμενάτους(“coredump”δενδουλεύει)
• Οικαταχωρητές(multi-bitDflipFlop’s)δείχνουντοπεριεχόμενότους• ΠροτείνωτηνκατασκευήτηςDataMemoryμεκαταχωρητές– Πλεονέκτημα:βλέπουμεσυνεχώςόλαταπεριεχόμενα– Μειονέκτημα:πιάνειπολύχώροστηνοθόνη
• Εγώτηνέκαναμε16λέξεις(τετράμπιτεςδιευθύνσεις)– σεδύοστήλες,γιάναμηνείναιυπερβολικάψηλή– 12λέξειςθααρκούσαν,αλλάδενείναιδύναμητου2– 8λέξειςθαζόριζανστηνάσκησημετονπίνακα(§12.5)
• Ακμοπυροδότητοικαταχωρητές,επειδήστιςεντολέςεγγραφήςτοσήμαdmWrite μπορείναανάψειπριν ηδιεύθυνσηναείναιέγκυρη
6011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
Παρακολούθησητιμών:Μανταλωτέςμεload=1
7011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
• Dlatch(μανταλωτής)– απότο“SequentialElements”menu
• BitWidth=8• Label=επιθυμητόόνομα,ναμαςθυμίζειτιδείχνει• Loadenableinput(τηνλέει“clock”– κακώς!)συνδεδε-μένησταθεράστο1⇒ τοπεριεχόμενοαλλάζειαμέσωςμόλιςαλλάξειηείσοδος(1=“Power”,απόInputmenu)• ΤοπεριεχόμενοεμφανίζεταιστοΔεκαεξαδικό– πολύπιόcompactαπόταHexDisplays
Αριθμητική-ΛογικήΜονάδακαισυναφή
9011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
• BitWidth=8σεόλαταστοιχείαεδώ• ALU απότοMiscmenuτουcircuitverse• Κρατάμετις8πράξειςπουαυτήέχει,όπωςτιςέχει,μετο3-μπιτοσήμαελέγχουaluMode
• Δενέχει«πράξη»passB,άραχρειαζόμαστεεξωτερικάτηςτονπολυπλέκτηπουφαίνεται,μετο(«τέταρτο»)σήμαελέγχουpassB
• DflipFlop (8-bit)ACC ωςΣυσσωρευτής,μεσήμαελέγχουφόρτωσηςaccLd
• Δύο(8-μπιτα)Dlatch’es ωςdisplays(BUS,ALUout)• Εξωτερικήείσοδος«πληκτρολογίου»(8-μπιτη)• Δύοτρικατάστατοιοδηγητέςελεγχόμενοιαπότασήματαελέγχουacc2bus,ext2bus
ProgramCounter(PC)
10011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ProgramCounter(PC)
11011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
• Εάνκρατείστετομέγεθοςτηςμνήμηςεντολώνσε32όπωςεδώ,τότετοBitWidth=5γιάPCκαισυναφή
• ΤοBUS όμωςείναι8-μπιτο,άραχρειάζεταιέναςSplitterκάτωαριστερά,εκείπουπαίρνουμετα5LSbitsτουBUSωςυποψήφιαδιεύθυνσηεπόμενηςεντολής
• DflipFlop (πεντάμπιτο)ωςPC,δεξιάστοβρόχο,μεέλεγχοloadenable(pcLd)• ΣήμαReset καιδιακόπτεςαρχικήςτιμήςγιάδιεύθ.εκκίνησηςπρογρ.(“main”)• Adder (5-bit)απόMiscmenu,αριστερά,μεσταθερέςεισόδουςγιά+1 πάντα• ΠολυπλέκτηςμεέλεγχοpcMd γιάεπόμενηεντολή:«απόκάτω»ή«άλλη»• Τρία (πεντάμπιτα)Dlatch’esωςdisplays(PC+1,other_nxt_PC,nxt_PC)• Εδώ,pcLdείναιπάντα=1(θααλλάξειστηνΆσκ.12γιάεντολέςindexed)
ΜνήμηΕντολών(IMEM)
12011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ΜνήμηΕντολών(IMEM)
13011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
• Τέσσεραμπλόκ“Rom”απότοMemoryElementsmenu
• ΑριστεράοιOpcodes,μεέξοδοπροςταεπάνω(προςΈλεγχο)
• Δεξιάοιαριθμητικέςσταθερέςήδιευθύνσεις,iaddr(“addressfrominstruction”)μεέξοδοδεξιάκάτω
• Επάνωοιδιευθύνσεις00έωςκαι0F• Κάτωοιδιευθύνσεις10έωςκαι1F• Διεύθυνση(πεντάμπιτη)απότονPC,κάτω,μέσωSplitterγιά4 LSbits,1MSbit• Τα4LSbitsδιεύθυνσηςπάνεστοκάθεROMblock• ΤοέναMSbitδιεύθυνσηςεπιλέγει,μέσωπολυπλεκτών,τοπάνωήκάτωμπλόκ
ΜνήμηΔεδομένων
14011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
• DflipFlops(8-μπιτα)ωςλέξεις• Αριστερήστήληοιδιευθ.0- 7• Δεξιάστήληοιδιευθ.8- F• ΤετράμπιτηΔιεύθυνσηαπόκάτωαριστεράμέσωSplitter:– 3LSbitsεπιλογήπάνω-κάτω– 1MSbit επιλ.αριστερά-δεξιά
• Ανάγνωσημεπολυπλέκτες,δεξιάστηνκάθεστήλη(3LSaddr.bits),καιμετάπολυπλ.κάτω(addr_MS)• Εγγραφήαπόαριστερά,μεClockκαιταDataIn απότοBUS (κάτω)• ΕπιλογήλέξηςγιάτυχόνεγγραφήμέσωτωνloadEnable,μεχρήσηαποκωδικοποιητών(αριστερά)πουέχουνκαισήμαEnable(“demux”τουςλέει),ξεκινώνταςαπόdmWrπάνωδεξιά,μεMSaddr.bit,κλπ.
BUS,ΟδήγησηαπόIMEMήDMEM,AddressMode
15011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
• ΤρικατάστατοςπροςBUSαπόδεξιόπεδίοτηςIMEM (“iaddr”)(στααριστερά)ελεγχόμενοαπόim2bus• ΟμοίωςαπόDMEM (μέσονκάτω,“dataOut”)ελεγχόμενοαπόdmRd (mem.Read)• ΤρίαοκτάμπιταDlatch’esωςdisplays:iaddr (πάνωαριστερά),BUS,dataOut (κάτωμέσον)• ΟκτάμπιτοςκαταχωρητήςTMP κρατάτηντιμήτουBUSαπόπροηγ.κύκλογιάεντ.indexed• ΔιεύθυνσηπροςDataMemoryμέσωοκτάμπιτουπολυπλέκτηελεγχόμενουαπόaddrMd• ΕδώτοaddrMd πάντα=0 –ηδιεύθυνσηαπόTMPμόνονγιάεντολέςIndexed(Άσκ.12)
Opcode1bit 1bit 2bits 1bit 3bits
X CTI busSrc passB aluMode
16011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
Indexedload/store
/ALU(indirectDMEMaccess)
ControlTransfer
Instruction(branch/jump)
aluMode Operation000 0 A&B (and)001 1 A|B(or)010 2 A+B(add)011 3 ???100 4 A&(~B)101 5 A|(~B)110 6 A- B(sub)111 7 set-if-less-than
(ίδιαόπωςCircuitVerseALU)
busSrc enable00 0 im2bus01 1 dmRd10 2 acc2bus11 3 ext2bus
17011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
Decoder
ΚύκλωμαΕλέγχου1b 1b 2b 1b 3bits
X CTI busSrc passB aluMode
ΆμεσεςΣταθερές(ImmediateConstants)• ΑφούδώσαμεπερισσότεραbitsστονOpcode,μπορούμεναέχουμεκαιεντολέςαριθμητικής/loadμεσταθερότελεστέο• Σταθεράωςτελεστέος:οδήγησητουBUSαπόIMEM(im2bus)• Μεταβλητήωςτελεστέος:οδήγησητουBUSαπόDMEM(dmRd)• Έστω“iaddr” ταδεξιά8bitsτηςεντολής(imm.constant/ address):– loadimmediate:ACC← iaddr (τα8bitsαπόεντολήαυτάκαθεαυτά)– load (παραδοσ.):ACC← DM[iaddr] (ημτβλ.απόεκείπουλένετα8bits)– addimmediate:ACC← ACC+iaddr (πρόσθεσησταθεράςαπόεντολή)– add (παραδοσ.):ACC← ACC+DM[iaddr] (πρόσθεσημεταβλητής)
• Έτσιαπαλλασόμαστεκαιαπότοπρόβληματουναπρέπειναβάζου-μετιςσταθερέςστηνDMEMκαιναπρέπεικαινατιςαρχικοποιούμε
18011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
ΟιπιόχρήσιμεςΕντολές(γιάτηνΆσκηση11)
19011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
Opcode Opcode/controlfields(binary)ΛειτουργίαAssembly Hex X CTI busSrc passB aluMode
andi 00
0 0 00(im2bus)
0
000 ACC← ACC&iaddr (andimmed.)ori 01 001 ACC← ACC| iaddr (orimmediate)addi 02 010 ACC← ACC+iaddr (addimmed.)subi 06 110 ACC← ACC- iaddr (sub immed.)ldi 08 0 0 1 xxx ACC← iaddr (loadimmediate)and 10
0 0 01(dmRd)
0
000 ACC← ACC&DM[iaddr] (and)or 11 001 ACC← ACC| DM[iaddr] (or)add 12 010 ACC← ACC+DM[iaddr] (add)sub 16 110 ACC← ACC- DM[iaddr] (subtract)ld 18 0 0 1 xxx ACC← DM[iaddr] (load)st 20 0 0 10(acc2bus) x xxx DM[iaddr]← ACC (store)inp 30 0 0 11(ext2bus) x xxx DM[iaddr]← Ext_kbd_in (input)jmp 40 0 1 00(im2bus) x xxx PC← iaddr (jump)
Παράδειγμα:Άθροισμαακεραίων–απόδεδομένον&πάνωAssembly: Instr.Mem.
06: ldi 00 06: 08 0007: st s (05) 07: 20 0508: inp n (04) 08: 30 04
loop→ 09: ld s (05) 09: 18 050a: add n (04) 0a: 12 040b: st s (05) 0b: 20 050c: ld n (04) 0c: 18 040d: addi 01 0d: 02 010e: st n (04) 0e: 20 040f: jmp 09(loop) 0f: 40 09
20011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete
s=0;n=input();while(1){
s=s+n;n=n+1;
}
DataMem.
04: n05: s
Τιέχετενακάνετε1. Μελετήστεκαικαταλάβετετηνεκφώνηση2. ΣχεδιάστετοναπλόυπολογιστήσαςστοCircuitVerse– είτεαυτόνπουδίδεταισεαυτήτηνεκφώνηση,είτετηνδικήσαςπαραλλαγή
3. Γράψτεμερικέςδικέςσαςαπλέςεντολέςπουναελέγχουντοκύ-κλωμα,στιςδιευθύνσεις00έωςκαι05(ήκαιπιόκάτω)τηςIMEM
4. Ορίστεinitial_PC =0,πατήστεRESET,μετάCLOCK επανειλημμένα,καικατανοήστεκαιελέγξτετησωστήεκτέλεσητωνεντολών
5. Ομοίωςγιάτοπρόγραμματηςδιαφάνειας20 (μεinitial_PC =06)6. Γράψτε,τρέξτε,καιελέγξτεκιέναάλλοδικόσαςπρογραμματάκι
στιςθέσεις10- 1F(ήάλλες) τηςμνήμηςεντολών (initial_PC =10)7. Αναφορά(PDF):φωτογραφίατου2&εξηγήσειςεάνδιαφέρειαπό
τηνεκφώνηση,Assembly,binary,&εξηγήσειςγιά3και6παραπάνω
21011c-Άσκηση11:οΑπλόςΥπολογιστήςστονΠροσομοιωτή(μέροςΑ')-ΗΥ-120©U.Crete