Εργαστήριο Αρχιτεκτονικής Υπολογιστών

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
5 Οργάνωση υπολογιστών Εισαγωγή στην Επιστήμη των Υπολογιστών ã Εκδόσεις Κλειδάριθμος.
Advertisements

7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Εισαγωγή στις Τεχνολογίες της Πληροφορικής και των Επικοινωνιών
-Στοίβα-Ουρά - Πλεονεκτήματα πινάκων -Δομές δεδομένων δευτερεύουσας μνήμης -Πληροφορική και δεδομένα -Παραδείγματα-Προβλήματα ψευδοκώδικα.
Το υλικο του Υπολογιστη
Αντισταθμιστική ανάλυση Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή.
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Πρώτο Αρχιτεκτονική.
ΤΑΞΗ Γ ΓΥΜΝΑΣΙΟΥ Βασικές Έννοιες Επανάληψη (1).
Σημειώσεις : Χρήστος Μουρατίδης
Σχεδίαση μονάδας ελέγχου επεξεργαστή Αρχιτεκτονική Υπολογιστών 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκτάριος Κοζύρης
Ημιαγωγοί – Τρανζίστορ – Πύλες - Εξαρτήματα
Εκτέλεση Αλγορίθμων σε ψευδογλώσσα
ΕΣ 08: Επεξεργαστές Ψηφιακών Σημάτων © 2006 Nicolas Tsapatsoulis Η Αρχιτεκτονική των Επεξεργαστών Ψ.Ε.Σ Τμήμα Επιστήμη και Τεχνολογίας Τηλεπικοινωνιών.
O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control) Σχεδίαση datapath 4 κατηγορίες εντολών: Αριθμητικές-λογικές.
Λύση: Multicycle υλοποίηση Single-cyle υλοποίηση: Διάρκεια κύκλου ίση με τη μεγαλύτερη εντολή-worst case delay (εδώ η lw) = χαμηλή.
Μικροπρογραμματιζόμενη Λογική Μειονεκτήματα καλωδιωμένης λογικής (hardwired logic): Πολυπλοκότητα συνδυαστικού κυκλώματος ΜΕ Αδυναμία αλλαγής των εντολών.
Εργασία Η υλοποίηση του αλγορίθμου συγχώνευσης θα πρέπει να χρησιμοποιεί την ιδέα των ροών (streams). Θα πρέπει να υπάρχουν δύο διαφορετικά είδη.
Εντολές PIC16F rrf <όνομα καταχωρητή>,a a=f ή a=w
William Stallings Computer Organization and Architecture 7 th Edition Κεφάλαιο 16 Λειτουργία Μονάδας Ελέγχου.
Η ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΧΡΗΣΤΗ ΑΠ’ ΤΟΝ Η/Υ ΤΟΜΕΑΣ ΤΕΧΝΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Δ.ΙΕΚ ΠΑΤΡΑΣ.
1 Οργάνωση και Αρχιτεκτονική Υπολογιστών Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Οργάνωση και Αρχιτεκτονική.
Δεδομένα, Πληροφορίες και Ηλεκτρονικοί Υπολογιστές
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
1 Οργάνωση και Αρχιτεκτονική Υπολογιστών A. Βαφειάδης Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Α.Τ.Ε.Ι Θεσσαλονίκης Μάθημα Οργάνωση.
ΑΤΕΙ ΣΕΡΡΩΝ, ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΕΠΙΚΟΙΝΩΝΙΩΝ
Διαχείριση μνήμης Υπόβαθρο Εναλλαγή Συνεχής κατανομή Σελιδοποίηση
ΑΡΧΙΤΕΚΤΟΝΙΚΗ & ΟΡΓΑΝΩΣΗ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 1 Εισαγωγή
Οργάνωση και Αρχιτεκτονική Υπολογιστών Βασικές αρχές Αρχιτεκτονικής
1 Οργάνωση και Αρχιτεκτονική Υπολογιστών Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Οργάνωση και Αρχιτεκτονική.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΚMΕΚMΕ Η σχεδίαση ψηφιακών κυκλωμάτων όπως η ΚΜΕ ενός Η/Υ απαιτεί συμβιβασμούς μεταξύ αντικρουόμενων παραγόντων: ΧΡΟΝΟΣ ΕΚΤΕΛΕΣΗΣΚΟΣΤΟΣΕΠΙΦΑΝΕΙΑΠΟΛΥΠΛΟΚΟΤΗΤΑ.
ΠΑΡΑΔΟΣΕΙΣ ΜΑΘΗΜΑΤΟΣ «ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ 1» ΕΣΩΤΕΡΙΚΗΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ 8085 ΟΚΤΩΒΡΙΟΣ 2005.
© Θέματα Φεβρουαρίου © Θέμα 1ο (30%): Έστω η παρακάτω ακολουθία εντολών που χρησιμοποιείται για την αντιγραφή.
© Ασκήσεις στα Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών ακ. έτος Νεκτάριος Κοζύρης Νίκος Αναστόπουλος
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
Κεφάλαιο 10 – Υποπρογράμματα
Κάντε κλικ για έναρξη… Τ Ο ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ Κέντρο εντολών Χώρος γραφικών (σελίδα) Χώρος σύνταξης διαδικασιών.
1 Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Τέταρτο Οι κίνδυνοι της.
Μερικές φορές το αποτέλεσμα εμφανίζεται αμέσως από κάτω.
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
Κρυφή μνήμη (cache memory) (1/2) Εισαγωγή στην Πληροφορκή1 Η κρυφή μνήμη είναι μία πολύ γρήγορη μνήμη – πιο γρήγορη από την κύρια μνήμη – αλλά πιο αργή.
Η Κεντρική Μονάδα Συστήματος Εισαγωγή στην Πληροφορκή 1 Η κεντρική μονάδα του συστήματος (base unit ή system unit) αποτελεί τον πυρήνα ενός υπολογιστή.
ΠΑΡΑΔΕΙΓΜΑ: ΤΑ ΕΠΙΠΕΔΑ ΥΛΙΚΟΥ – ΛΟΓΙΣΜΙΚΟΥ ΣΕ ΕΝΑΝ ΥΠΟΛΟΓΙΣΤΗ.
ΕΙΣΑΓΩΓΗ μέρος 2 ΜΙΚΡΟΕΛΕΓΚΤΕΣ - ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ Π. ΚΩΣΤΑΡΑΚΗΣ Β. ΧΡΙΣΤΟΦΙΛΑΚΗΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ.
Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 10 ο Μάθημα.
Κύρια Μνήμη Διάφοροι τύποι μνήμης RAM Από πάνω προς τα κάτω, DIP, SIPP, SIMM (30-pin), SIMM (72-pin), DIMM (168-pin), DDR DIMM (184-pin). Μνήμη RΟM.
ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ 1 Διάλεξη 12: Διάλεξη 12: Καταχωρητές - Μετρητές Δρ Κώστας Χαϊκάλης.
Γιώργος Μαγουλάκης Εξάμηνο: Εαρινό 2015 ΤΕΙ Κρήτης Τμ. Μηχανικών Πληροφορικής Τμ. Μηχανικών Πληροφορικής.
Αρχιτεκτονική Υπολογιστών DATAPATH & CONTROL. Αρχιτεκτονική Υπολογιστών DATAPATH & CONTROL Για κάθε εντολή υπάρχουν δυο βήματα που πρέπει να γίνουν: –Προσκόμιση.
Καταχωρητές (Registers) (1/3) Εισαγωγή στην Πληροφορκή1 Οι Καταχωρητές (Registers) είναι ειδικές θέσεις μνήμης υψηλής ταχύτητας που χρησιμοποιούνται για.
Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 9 ο Μάθημα.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control) 4 κατηγορίες εντολών: Αριθμητικές-λογικές εντολές (add, sub, slt κλπ) –R Type.
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Single-cyle υλοποίηση:
MIPS: Σύνολο εντολών, γλώσσα μηχανής & μεθοδολογία σχεδίασης
1 Οργάνωση και Αρχιτεκτονική Υπολογιστών A. Βαφειάδης Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Α.Τ.Ε.Ι Θεσσαλονίκης Μάθημα Οργάνωση.
O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control) 4 κατηγορίες εντολών: Αριθμητικές-λογικές εντολές (add, sub, slt κλπ) –R Type.
Θέματα Φεβρουαρίου
ΑΛΓΟΡΙΘΜΟΣ.
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
Single-cyle υλοποίηση:
Άσκηση Pipeline 1 Δεδομένα Έχουμε ένα loop... Rep: lw $2,100($3)
Single-cyle υλοποίηση:
Single-cyle υλοποίηση:
O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control) 4 κατηγορίες εντολών: Αριθμητικές-λογικές εντολές (add, sub, slt κλπ) –R Type.
ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ
O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control) 4 κατηγορίες εντολών: Αριθμητικές-λογικές εντολές (add, sub, slt κλπ) –R Type.
Μεταγράφημα παρουσίασης:

Εργαστήριο Αρχιτεκτονικής Υπολογιστών 2003 - 2004

Διαδικαστικά Ομάδες 2 ατόμων Πριν την εκτέλεση της άσκησης θα πρέπει να έχετε έτοιμη την αναφορά Δεν υπάρχει επαναληπτικό εργαστήριο Στον τελικό βαθμό δε θα ληφθεί υπόψη ο χειρότερος βαθμός εργαστηριακής άσκησης Μπορείτε να λείψετε σε ένα εργαστήριο, όμως τότε αναγκαστικά θα συνυπολογιστούν στον τελικό βαθμό όλοι οι βαθμοί των εργαστηρίων που εκτελέσατε Αν χάσετε δύο εργαστηριακές ασκήσεις, χάνετε το εργαστήριο Βαθμός εργαστηριακής άσκησης : 50% αναφορά , 50% εκτέλεση

Διαδικαστικά Πρώτο εργαστήριο : Παρουσίαση πλακέτας, εκτέλεση πρώτης άσκησης Η πρώτη άσκηση θα εκτελεστεί στον μικροπρογραμματιζόμενο εκπαιδευτικό υπολογιστή του εργαστηρίου (πλακέτα) Οι υπόλοιπες στον εξομοιωτή. Σημειώσεις : Θα βγει ανακοίνωση (Λογικά από Τρίτη) Τελική εξέταση : Δε θα έχετε σημειώσεις μαζί σας. Οτιδήποτε χρειαστεί (πίνακες, datasheets κλπ.) θα σας δοθεί στο εργαστήριο.

Βασικές Έννοιες

Register File (Καταχωρητές) Καταχωρητής : Βασική μονάδα αποθήκευσης για την εκτέλεση πράξεων 16x8bit Register File : 16 καταχωρητές των 8 bit. Δύο Ports Ανάγνωσης (PortA και PortB) Ένα Port Εγγραφής (PortB) Σε κάθε κύκλο, η έξοδος Α (B), δίνει τα περιεχόμενα του καταχωρητή που διευθυνσιοδοτείται από την είδοδο PortA (PortB) Αν επιπλέον, είναι ενεργοποιημένο το σήμα write, τα δεδομένα εισόδου Data In, εγγράφονται στον καταχωρητή που διευθυνσιοδοτείται από το PortB 8 Data In 8 4 Port A A 8 4 Port B B write

Αριθμητική και Λογική Μονάδα (ALU) H καρδιά του data-path Εκτελεί αριθμητικές και λογικές πράξεις, ανάλογα με την τιμή της εισόδου op. Το αποτέλεσμα της πράξης δίνεται ως έξοδος από το F Π.χ., αν op = 000, τότε θα γίνει η πράξη F = S + R Η αντιστοίχιση κωδικών της εισόδου op σε πράξεις υπάρχει σε μορφή πίνακα. 8 R ALU F 8 S op 3

Κύρια Μνήμη MAR : Memory Address Register (8 bit Καταχωρητής) Διευθυνσιοδοτεί τη μνήμη. Κάθε φορά που θέλουμε να αλλάξουμε διεύθυνση, ενεργοποιούμε το σήμα MARCLK. Με τον τρόπο αυτό η νέα διεύθυνση κλειδώνεται στον MAR. MDR : Memory Data Register (8 bit Καταχωρητής) Περιέχει τα δεδομένα της θέσης που διευθυνσιοδοτείται από τον MAR. 8 Data In 8 Data Out MDR 8 Address MAR write MARCLK write : Η τιμή του σήματος αυτού καθορίζει αν θα γίνει εγγραφή ή ανάγνωση στη μνήμη

Ένα στοιχειώδες Σύστημα (Υπεραπλουστευμένο) ΜΟΝΑΔΑ ΕΠΕΞΕΡΓΑΣΙΑΣ data Memory RF Data In APort Port A MDR A R ALU address F MAR BPort Port B B S op write MARCLK write ALU_op MEM_wr RF_wr Υπενθύμιση : Οι δύο βασικές υπομονάδες ενός συστήματος είναι η μονάδα επεξεργασίας και η μονάδα ελέγχου. Στο σχήμα δίνουμε μόνο τη μονάδα επεξεργασίας

Ένα στοιχειώδες Σύστημα (Υπεραπλουστευμένο) data Main Memory RF Data In APort Port A MDR A R ALU address F MAR BPort Port B B S op write MARCLK write ALU_op MEM_wr RF_wr Για να καθορίσουμε τη λειτουργία του συστήματος σε μία χρονική στιγμή, θα πρέπει να θέσουμε τιμές σε όλα τα control σήματα ένα προς ένα.

Παράδειγμα 1 data Main Memory RF Data In 0001 Port A (0001) MDR A R ALU address F MAR 0010 Port B (0010) (0001)+(0010) B S op write write 000 1 Πρόσθεσε τα περιεχόμενα των καταχωρητών 0001 και 0010 και γράψε το αποτέλεσμα στον καταχωρητή 0010. Δεν επηρεάζεται καθόλου η διεύθυνση της κύριας μνήμης και τα περιεχόμενά της

Παράδειγμα 2 data Main Memory RF Data In 0001 Port A (0001) MDR A R ALU address F MAR 0010 Port B (0010) (0001)+(0010) B S op write 1 write 000 Πρόσθεσε τα περιεχόμενα των καταχωρητών 0001 και 0010. Μην επηρεάσεις το Register File Διευθυνσιοδότησε την κύρια μνήμη με το αποτέλεσμα της πράξης Μην επηρεάσεις το περιεχόμενο της κύριας μνήμης

Σύνθετες Πράξεις Για να μπορέσουμε να εκτελέσουμε μία σύνθετη πράξη, ‘σπάμε’ την πράξη αυτή σε στοιχειώδεις υποπράξεις. Για κάθε μία από τις στοιχειώδεις πράξεις θα πρέπει να προσδιορίσουμε όλα τα control σήματα. Για να εκτελέσουμε τη σύνθετη πράξη, απλώς εισάγουμε τα control σήματα κάθε υποπράξης διαδοχικά.

Παράδειγμα 3 Ζητούμενο : Διευθυνσιοδότησε την Κύρια μνήμη με την τιμή (0000)+(0001)+(0010) (όπου (Χ)=περιεχόμενο καταχωρητή Χ) Βήμα 1 : (0000)+(0001) -> (0001) Βήμα 2 : (0001)+(0010) -> MAR 0000 0001 000 (0000) (0001) (0000)+(0001) 1 0001 0010 000 1 (0001) (0010) (0001)+(0010) Main Memory RF Data In Port A MDR A R ALU address F MAR Port B B S op write write

Μικροεντολές και Μακροεντολές Μικροεντολή : Η ακολουθία μηδενικών και άσσων που καθορίζει πλήρως τη λειτουργία του συστήματος σε μία χρονική στιγμή. Η μικροεντολή περιέχει τις τιμές για όλα τα control σήματα του συστήματος Main Memory RF Data In 0001 Port A (0001) MDR A R ALU address F MAR 0010 Port B (0010) (0001)+(0010) B S op write write 000 1 Μικροεντολή : 0001 0010 1 000 0 0 Μήκος Μικροεντολής για το απλοϊκό σύστημα : 14 bit

Μικροεντολές και Μακροεντολές Μακροεντολή : Μία σύνθετη πράξη Μια μακροεντολή αποτελείται από μία αλληλουχία μικροεντολών οι οποίες προσδιορίζουν τις στοιχειώδεις πράξεις που θα πρέπει να εκτελεστούν Παράδειγμα Μακροεντολή : Διευθυνσιοδότησε την Κύρια μνήμη με την τιμή (0000)+(0001) +(0010) (όπου (Χ)=περιεχόμενο καταχωρητή Χ) Υλοποίηση Μικροεντολή 1 : 0000 0001 1 000 0 0 [ (0000)+(0001) -> (0001) ] Μικροεντολή 2 : 0001 0010 0 000 1 0 [ (0001)+(0010) -> MAR ] Μικροπρόγραμμα

Αρχιτεκτονική Συνόλου Εντολών Σύνολο εντολών : Το σύνολο των μακροεντολών που έχουμε υλοποιήσει Βρίσκουμε ένα σύνολο λειτουργιών τις οποίες θεωρούμε θεμελιώδεις για την υλοποίηση οποιουδήποτε προγράμματος. Υλοποιούμε τις λειτουργίες αυτές ως μακροεντολές (μέσω μικροεντολών) Ο προγραμματιστής του συστήματος χρησιμοποιεί μόνο τις μακροεντολές που ορίσαμε για να υλοποιεί τα προγράμματά του. Ο προγραμματιστής σε καμία περίπτωση δεν γράφει μικροεντολές (αν και θα μπορούσε) : Δεν ασχολείται καθόλου με τη χαμηλού επιπέδου αρχιτεκτονική και το συγχρονισμό των control σημάτων Προφανώς : Το σύνολο εντολών που ορίζουμε θα πρέπει να είναι αρκετά γενικό ούτως ώστε ο προγραμματιστής να μπορεί να υλοποιήσει ό,τι πρόγραμμα θέλει.

Αρχιτεκτονική Συνόλου Εντολών Ορίζουμε Ν μακροεντολές (opcode, έντελα, τρόποι διευθυνσιοδότησης …) : Εντολή1, Εντολή2, … , ΕντολήΝ Κάθε Εντολή, υλοποιείται μέσω πολλών μικροεντολών Ο προγραμματιστής γράφει τα προγράμματά του χρησιμοποιώντας το ρεπερτόριο εντολών που ορίσαμε. Π.χ. Πρόγραμμα : Εντολή5 Εντολή10 Μακροπρόγραμμα Το μακροπρόγραμμα βρίσκεται αποθηκευμένο στην Κύρια Μνήμη Εντολή4 Εντολή5 Εντολή4

Μικρομνήμη Πρόβλημα : Με κάποιον τρόπο θα πρέπει να είμαστε σε θέση ανά πάσα στιγμή να τροφοδοτούμε τις control εισόδους του συστήματος με τις τιμές που υπαγορεύει η κάθε μικροεντολή Λύση : Αποθηκεύουμε όλες τις μικροεντολές σε μία μνήμη. Η μνήμη αυτή καλείται μικρομνήμη. Η έξοδος της μικρομνήμης δίνεται ως είσοδος στις control εισόδους των υπομονάδων που βρίσκονται στο σύστημα. Όπως κάθε μνήμη, έτσι και η μικρομνήμη θα πρέπει να διευθυνσιοδοτείται με κάποιον τρόπο. Για το λόγο αυτό υπάρχει στο hardware ένας μετρητής ο οποίος ανά πάσα στιγμή δείχνει σε κάποια θέση της μικρομνήμης Ο μετρητής αυτός καλείται μετρητής μικροπρογράμματος (microPC ή μPC)

Μικρομνήμη Βήμα 1 : (0000)+(0001) -> (0001) (0000) (0001) (0000)+(0001) 1 μPC Βήμα 1 : (0000)+(0001) -> (0001) Βήμα 2 : (0001)+(0010) -> MAR 0001 0010 000 1 (0001) (0010) (0001)+(0010) μPC Main Memory RF Data In Port A MDR A R ALU address F MAR Port B B S op write write 0000 0001 1 000 0 0 Μικρομνήμη 0001 0010 0 000 1 0

Μικρομνήμη Μικροπρόγραμμα 1 Μπορούμε να αποθηκεύουμε μικροπρογράμματα σε οποιεσδήποτε συνεχόμενες θέσεις της μικρομνήμης θέλουμε. Υπενθύμιση : Κάθε μικροπρόγραμμα αντιστοιχεί σε μία μάκροεντολή Μικροπρόγραμμα 2 Μικροπρόγραμμα 3

Μνήμη Αντιστοίχισης (Mapper) Πρόβλημα : Το μακροπρόγραμμα περιέχει μία ακολουθία μακροεντολών. Το μικροπρόγραμμα για κάθε μακροεντολή μπορεί να βρίσκεται οπουδήποτε μέσα στη μικρομνήμη (βλ. προηγούμενη διαφάνεια). Θα πρέπει να υπάρχει κάποιος τρόπος ούτως ώστε κάθε φορά που συναντάμε μία μακροεντολή, ο μPC να διευθυνσιοδοτεί τη σωστή θέση της μικρομνήμης Υπενθύμιση : Το μακροπρόγραμμα βρίσκεται αποθηκευμένο στην κύρια μνήμη. Τα μικροπρογράμματα βρίσκονται αποθηκευμένα στην μικρομνήμη. Λύση : Κάθε μακροεντολή έχει ένα μοναδικό Opcode (κωδικός εντολής). Χρησιμοποιούμε μία μνήμη αντιστοίχισης. Η μνήμη αυτή εκτελεί την αντιστοίχιση : Opcode Μακροεντολής  Αρχική διεύθυνση μικρομνήμης

Μνήμη Αντιστοίχισης (Mapper) ΜΟΝΑΔΑ ΕΛΕΓΧΟΥ Αρχική Διεύθυνση Opcode Εντολής MAR Μικροπρόγραμμα 1 MAR Εντολή 3 MAR Εντολή 2 MAR Εντολή 3 Μικροπρόγραμμα 2 MAR MDR MAPPER μPC MAR Εντολή 3 Εντολή 2 Εντολή 1 LOAD_DIR_SEQ~ Μικροπρόγραμμα 3 Κύρια Μνήμη Μνήμη Αντιστοίχισης Μικρομνήμη

2 Βασικά Σημεία MAPPER Προσοχή !!! PC = μετρητής μάκροΠρογράμματος 1. Ο MAR, ελέγχεται σε επίπεδο μικροπρογράμματος. Είναι δική σας μέριμνα η αύξησή του ώστε να δείχνει στην επόμενη εντολή ! Πρακτικά, αυτό επιτυγχάνεται ορίζοντας έναν από τους καταχωρητές του συστήματος ως PC (program counter). Ο PC αυτός δεν έχει καμία σχέση με τον μPC και ορίζεται κατόπιν δικής σας σύμβασης (το σύστημα δεν έχει ιδέα για το ποιος καταχωρητής είναι program counter για το μακροπρόγραμμα) Μικροπρόγραμμα 1 MAR Εντολή 3 MAR Εντολή 2 Εντολή 3 Μικροπρόγραμμα 2 MDR MAPPER μPC Εντολή 3 Εντολή 2 Εντολή 1 LOAD_DIR_SEQ~ Μικροπρόγραμμα 3 Προσοχή !!! PC = μετρητής μάκροΠρογράμματος μPC = μετρητής μίκροΠρογράμματος

2 Βασικά Σημεία MAPPER 1 MAR MAR MDR μPC 2. Γιατί χρειαζόμαστε το σήμα LOAD_DIR_SEQ~ ; Εκτός από opcodes η κύρια μνήμη μπορεί να περιέχει και άλλα δεδομένα (π.χ. operands, δεδομένα γενικής χρήσης). Το σήμα LOAD_DIR_SEQ~ χρησιμοποιείται για να μην κλειδώνονται δεδομένα στον μPC, όταν ο MAR δε δείχνει σε opcode. Μικροπρόγραμμα 1 MAR Εντολή 3 MAR 1 Έντελο 3.1 Έντελο 3.2 Μικροπρόγραμμα 2 MDR MAPPER μPC LOAD_DIR_SEQ~ Μικροπρόγραμμα 3 Υπενθύμιση : Το ~ στο όνομα ενός σήματος υποδηλώνει σήμα αρνητικής λογικής. Το σήμα είναι ενεργοποιημένο όταν έχει τιμή 0

Παράδειγμα Έστω ότι ορίζουμε το εξής σύνολο εντολών : LDA $K : Φόρτωσε τον Accumulator (ένας οποιοσδήποτε καταχωρητής τον οποίο βαπτίζουμε Accumulator) με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) ADD $K : Πρόσθεσε στον Accumulator το περιεχόμενο της διεύθυνσης Κ STA $K : Αποθήκευσε το περιεχόμενο του Accumulator στη θέση μνήμης με διεύθυνση Κ

Παράδειγμα Εντελώς αυθαίρετα, ορίζουμε ένα μοναδικό opcode για κάθε μία από τις μακροεντολές : LDA $K : 00H ADD $K : 01H STA $K : 02H Το μικροπρόγραμμα για κάθε μακροεντολή ξεκινάει από τη διεύθυνση (μικρομνήμης) : LDA $K : 10H ADD $K : 16H STA $K : 1CH Περιεχόμενα Mapper ΔΙΕΥΘΥΝΣΗ ΔΕΔΟΜΕΝΑ 00000000 00010000 00000001 00010110 00000010 00011100

Περιεχόμενα Κύριας Μνήμης Παράδειγμα O προγραμματιστής γράφει στην κύρια μνήμη το εξής μακροπρόγραμμα LDA 80H ADD 81H STA 82H Περιεχόμενα Κύριας Μνήμης Διεύθυνση Κύριας Μνήμης Περιεχόμενα Εντολή (συμβολική γλώσσα) 00000000 opcode LDA 00000001 10000000 έντελο 80Η 00000010 opcode ADD 00000011 10000001 έντελο 81H 00000100 opcode STA 00000101 10000010 έντελο 82H

Παράδειγμα Σημείωση : Όταν LOAD_DIR_SEQ~ είναι απενεργοποιημένο (δηλ. 1), ο μPC αυξάνεται κατά ένα (σαν κανονικός μετρητής). Όταν το σήμα αυτό είναι ενεργοποιημένο, τότε στον μPC ανατίθεται η έξοδος του MAPPER 10H MAR 00H 10H Μικροπρόγραμμα LDA 00H 01H 02H 00010000 MAR 80H ??H 1 00010110 00H 16H 00000000 00011100 MAR 01H 16H Μικροπρόγραμμα ADD 10000000 MAR 81H ??H 1 MAR 02H 1CH 00000001 MDR μPC 1CH MAR 82H ??H 1 10000001 Μικροπρόγραμμα STA 00000010 10000010 LOAD_DIR_SEQ~ Κύρια Μνήμη Μνήμη Αντιστοίχισης Μικρομνήμη

Μικροπρογραμματιζόμενος Εκπαιδευτικός Υπολογιστής

Μικροπρογραμματιζόμενος Εκπαιδευτικός Υπολογιστής Ίδια φιλοσοφία με το απλοϊκό σύστημα που περιγράψαμε Μονάδα ελέγχου και μονάδα επεξεργασίας Και οι δύο μονάδες έχουν πολύ περισσότερες δυνατότητες σε σχέση με το απλοϊκό σύστημα που περιγράψαμε Από την προηγούμενη παρατήρηση γίνεται προφανής και ο λόγος για τον οποίο τα σήματα ελέγχου είναι αρκετά περισσότερα Μήκος μικροεντολής 40 bit

Μικροπρογραμματιζόμενος Εκπαιδευτικός Υπολογιστής Μονάδα Εξόδου Μονάδα Επεξεργασίας (DIP Switches – Διακόπτες Δύο Θέσεων) Μονάδα Εισόδου Μονάδα Ελέγχου

Block Διάγραμμα

Μονάδα Επεξεργασίας

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A R ALU A address F MAR Selector Selector Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Ίδια φιλοσοφία με το απλοϊκό σύστημα που παρουσιάσαμε Μονάδα Επεξεργασίας Ίδια φιλοσοφία με το απλοϊκό σύστημα που παρουσιάσαμε Για να καθορίσουμε τη λειτουργία του συστήματος σε μία χρονική στιγμή, θα πρέπει να θέσουμε τιμές σε όλα τα control σήματα ένα προς ένα. Η μόνη διαφορά είναι ότι τώρα τα σήματα αυτά είναι περισσότερα (προφανώς το σύστημα έχει περισσότερες δυνατότητες)

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A R ALU A address F MAR Selector Selector Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα Σήματα Aport(3:0) και Bport(3:0), για διευθυνσιοδότηση του Register File Τι ρόλο παίζει το σήμα SELB; Αν SELB=1 , τότε το Port B διευθυνσιοδοτείται με την τιμή του Bport(3:0). Αν SELB=0, τότε το Port B διευθυνσιοδοτείται με την τιμή του Feedback Register, ΔΗΛΑΔΗ με το αποτέλεσμα της προηγούμενης πράξης TIP : Για τις περισσότερες περιπτώσεις αρκεί SELB = 1 Η τιμή SELB=0, είναι πολύ χρήσιμη για την υλοποίηση μακροεντολών του τύπου ADD RX,$k Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A R ALU A address F Selector Selector MAR Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A R ALU A address F Selector Selector MAR Αν DDATAE~ = 0 , τότε απ’ τον selector περνάει μία σταθερά των 2bit D(1:0). Η τιμή D(1:0) καθορίζεται από εμάς (ξεχωριστό πεδίο στη μικροεντολή) Αν PCE~ = 0 , τότε απ’ τον selector περνάει η τιμή που έχουν 8 DIP Switches της πλακέτας Αν MDE~ = 0 , τότε απ’ τον selector περνάει η τιμή του MDR Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα I(2:0) : Επιλέγει 2 από τις 5 εισόδους του selector και τροφοδοτεί τις εισόδους R και S της ALU Βρίσκετε την τιμή που θέλετε από τον πίνακα 1.5 (σελ. 14 του manual) Προσοχή : Δεν υπάρχουν όλοι οι δυνατοί συνδυασμοί διαθέσιμοι !!! Π.χ. αν και υπάρχει επιλογή D και A, δεν υπάρχει επιλογή D και B TIP : Αρκετά συνηθισμένες τιμές : AB 001 ZA 100 DA 101 DZ 111 Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A R ALU A address F Selector Selector MAR Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα I(5:3) : 3 bit σήμα που καθορίζει την πράξη που θα εκτελέσει η ALU (8 επιλογές) Τιμές από πίνακα 1.6 (σελ. 14) TIP : Στις περισσότερες περιπτώσεις η ALU εκτελεί πρόσθεση Ι(5:3)=000 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A R ALU A address F Selector Selector MAR Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα I(8:6) : 3 bit σήμα που καθορίζει (α.) Τι θα περάσει στο σημείο Υ (β.) Αν θα γίνει εγγραφή στο Register File (γ.) Αν θα γίνει εγγραφή στον Q register (δ.) Αν θα εφαρμοστεί shift πριν την αποθήκευση Τιμές από πίνακα 1.7 (σελ. 16) TIP : Για τις περισσότερες των περιπτώσεων επιλέγετε μία από τις NOP (001) : Καμία εγγραφή, κανένα shift , o selector επιλέγει το F για την έξοδο Y RAMF (011) : Γράψε το F στο register file, όχι εγγραφή στον Q, κανένα shift, το F περνάει στο Y Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A A R ALU address F MAR Selector Selector F Y Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Προσοχή : Στον πίνακα 1.7 (σελ. 16), όπου αναφέρεται RAM, υπονοείται το Register File και όχι η Κύρια Μνήμη. Ο συμβολισμός F->B, σημαίνει ότι το F γράφεται στη θέση του Register File που διευθυνσιοδοτείται από το Port B Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα MARCLK : Καθορίζει αν το Υ θα ‘κλειδωθεί’ στον MAR MWE~ : Καθορίζει αν θα γίνει εγγραφή στην Κύρια Μνήμη Switches D(1:0) DDATAE~ PCE~ Selector MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A A R ALU address F MAR Selector Selector Y Port B B B S op write MARCLK write I(5:3) I(8:6) MWE~ I(2:0) I(8:6) Selector FeedBack Register Bport(3:0) SELB

Μονάδα Επεξεργασίας Άλλα σήματα ελέγχου που σχετίζονται με τη μονάδα επεξεργασίας SH~ : Σε συνδυασμό με το Ι(8:6), καθορίζει αν θα γίνει απλή ή κυκλική ολίσθηση στα αποτελέσματα (Πίνακας 1.9 σελ. 21, Σχήματα 1.7 και 1.8 σελ. 19) TIP : Στις περισσότερες περιπτώσεις δεν χρειάζεστε ολίσθηση οπότε SH~=1 CARRYE~ (carry enable): Καθορίζει αν η ALU θα εκτελέσει πράξη με κρατούμενο εισόδου (Πίνακας 1.8 – σελ. 20) TIP : Στις περισσότερες περιπτώσεις δεν χρειάζεται κρατούμενο εισόδου οπότε CARRYE~ = 1

Μονάδα Επεξεργασίας MSTATUSCLK : H ALU μετά από κάθε πράξη που εκτελεί, ενημερώνει και 4 flags : microC (microCarry), microO (microOverflow), microS (microSign) και microZ (microZ). Τα micro-flags, ενημερώνονται σε κάθε πράξη. Εκτός από τα micro-flags, το σύστημα διαθέτει και macro-flags (macroC, macroO, macroS και macroZ). Αν ενεργοποιήσετε το σήμα MSTATUSCLK , οι τιμές των micro-flags ‘κλειδώνονται’ στα macro-flags. Άρα : Τα micro-flags ενημερώνονται πάντα Τα macro-flags ενημερώνονται μόνο όταν θέλετε (και προφανώς σε κάποια χρονική στιγμή που έχει ιδιαίτερο νόημα για το μακροπρόγραμμα.) TIP : Στις περισσότερες περιπτώσεις δεν απαιτείται η καταγραφή των flags , οπότε MSTATUSCLK = 0.

Μονάδα Ελέγχου Σε σχέση με τη μονάδα ελέγχου του απλοϊκού συστήματος, υπάρχουν οι εξής βελτιώσεις : 1. Δυνατότητα διακλαδώσεων στο μικροπρόγραμμα με ή χωρίς συνθήκη 2. Δυνατότητα κλήσης / επιστροφής από ρουτίνα (με τη βοήθεια μίας hardware στοίβας) Κατά τα άλλα το σχήμα κύρια μνήμη  Mapper  μPC  μικρομνήμη , έχει διατηρηθεί. Τα control σήματα είναι : LOAD_DIR_SEQ~ (το γνωστό) BRA(4:0) , BIN(2:0) , CON(2:0)

Μονάδα Ελέγχου LOAD_DIR_SEQ~ = 0 Για διακλαδώσεις LOAD_DIR_SEQ~ = 1 Κλήση και επιστροφή από ρουτίνα

Σήματα ελέγχου Μονάδας Ελέγχου ! LOAD_DIR_SEQ~ : Με την ενεργοποίηση του σήματος αυτού η έξοδος του mapper περνάει στον μPC (και διευθυνσιοδοτεί τη μικρομνήμη). TIP: Ενεργοποιούμε το σήμα αυτό μόνο όταν ισχύουν τα δύο παρακάτω (και τα δύο) : α. όλες οι λειτουργίες του τρέχοντος μικροπρογράμματος έχουν ολοκληρωθεί β. ο MAR δείχνει στο opcode της επόμενης προς εκτέλεση μακροεντολής Μετά την ενεργοποίηση ο έλεγχος θα περάσει στο μικροπρόγραμμα που αντιστοιχεί στην επόμενη μακροεντολή (του μακροπρογράμματος) Πρακτικά : Στις περισσότερες περιπτώσεις η τελευταία εντολή κάθε μικροπρογράμματος, θα έχει ενεργοποιημένο το LOAD_DIR_SEQ~ και δεν θα εκτελεί καμία πράξη στη μονάδα επεξεργασίας.

Σήματα ελέγχου Μονάδας Ελέγχου ! ΒΙΝ(2:0) : (σελ.34. Πίνακας 2.2) Καθορίζει αν η μικροεντολή είναι α. Εντολή διακλάδωσης χωρίς συνθήκη (JMP - Jump) β. Εντολή διακλάδωσης με συνθήκη (BR – Branch conditional) γ. Κλήση υπορουτίνας με ή χωρίς συνθήκη δ. Επιστροφή από υπορουτίνα με ή χωρίς συνθήκη ε. Σειριακή μικροεντολή CON(2:0) : (σελ. 35, Πίνακας 2.3) Καθορίζει ποια είναι η συνθήκη για conditional εντολές (Π.χ Branch if macroCarry ή Branch if microCarry) BRA(4:0) : 5-bit πεδίο το οποίο προστίθεται (2’s complement, εύρος [-16,15) ) στη διεύθυνση της τρέχουσας μικροεντολής για την εύρεση της διεύθυνσης της επόμενης μικροεντολής (σημ: μόνο αν πρόκειται για εντολή που αλλάζει τη ροή π.χ. JMP, taken branch κλπ.) TIP : Συνήθως οι μικροεντολές που γράφετε θα είναι σειριακές οπότε οι τιμές των πεδίων αυτών είναι BRA(4:0) : XXXXX ΒΙΝ(2:0) : 000 CON(2:0): XXX

Οργάνωση Μικροεντολής Η μικροεντολή περιέχει όλα τα πεδία για τα οποία μιλήσαμε μέχρι τώρα Μονάδα Ελέγχου Μονάδα Επεξεργασίας

Πώς γράφουμε μικροπρογράμματα ;

Πώς γράφουμε μικροπρογράμματα ; Βήμα 1 : Σπάμε την πράξη σε στοιχειώδεις λειτουργίες που να μπορούν να υλοποιηθούν από τη μονάδα επεξεργασίας που διαθέτουμε. Βήμα 2 : Γράφουμε τη μικροεντολή για κάθε στοιχειώδη λειτουργία (δηλ. γράφουμε τη 40άδα) TIP : Καλό είναι να γράφετε τις στοιχειώδεις εντολές με μία συμβολική γλώσσα που να σας βολεύει. Π.χ. μερικές στοιχειώδεις λειτουργίες μπορεί να συμβολιστούν, (0001)+(0010)(0010) (0001)+(0010)NOP, MAR PC + 1  PC , MAR // σημ.: Θα πρέπει πρώτα να έχουμε πει ποιος είναι ο PC MDR + ACC  ACC // >> >> >> ACC ACC + 0  NOP, MWE

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator (ένας οποιοσδήποτε καταχωρητής τον οποίο βαπτίζουμε Accumulator) με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) Ορίζουμε αυθαίρετα έναν καταχωρητή ως PC (τον PC τον χρειαζόμαστε πάντα) και έναν ως ACC (επειδή ζητείται από τη σημασιολογία της εντολής) Έστω λοιπόν : PC = 0100 και ACC = 1000

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) Με το που καλείται μία LDA $K από το μακροπρόγραμμα, η κατάσταση στην κύρια μνήμη θα έχει ως εξής : PC MAR MDR OPCODE LDA K OPCODE XYZ Έτσι όπως έχει η κατάσταση δεν μπορούμε με κανέναν τρόπο να ‘δούμε’ το έντελο K. Τι πρέπει να κάνουμε ;;;;;

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) PC + 1  PC , MAR OK !!! Τώρα έχουμε την τιμή K στον MDR. Προφανώς, για να διευθυνσιοδοτή-σουμε τη θέση μνήμης K (όπως απαιτεί ο ορισμός της LDA) , θα πρέπει η τιμή Κ με κάποιον τρόπο να έρθει στον MAR. Πώς ;;;; MAR MDR PC MAR MDR PC OPCODE LDA K OPCODE XYZ

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) MDR + 0  ACC OPCODE LDA PC MAR MDR K OPCODE XYZ ACC OK !!! Τώρα το K ήρθε στον accumulator. Εγώ όμως το θέλω στον MAR !!!

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) ACC + 0  NOP, MAR OPCODE LDA PC K OPCODE XYZ K ACC MAR MDR Περιεχόμενο Κ Τώρα η σωστή τιμή βρίσκεται στον MDR. Το μόνο που μένει είναι να την αποθηκεύσω στον accumulator. Πώς ;;;

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) MDR + 0  ACC OPCODE LDA PC K OPCODE XYZ K ACC MAR MDR Περιεχόμενο Κ Τώρα η λειτουργία της LDA $K έχει ολοκληρωθεί. Το περιεχόμενο της K ήρθε στον accumulator. Τελειώσαμε ;;;;;

Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) Θα πρέπει να δώσουμε τον έλεγχο στο μικροπρόγραμμα της επόμενης μακροεντολής (XYZ στην περίπτωσή μας). Ο PC δείχνει ακόμα στο έντελο K, οπότε κάνουμε : PC + 1  PC , MAR PC MAR MDR Τελειώσαμε;;; OPCODE LDA MAR MDR PC K OPCODE XYZ K ACC Περιεχόμενο Κ

Παράδειγμα (LDA $K – Βήμα 1) Το μόνο που απομένει είναι να περάσουμε το opcode της XYZ στον mapper και από εκεί στον μPC. Με τον τρόπο αυτό θα συνεχίσουμε την εκτέλεση από το κατάλληλο μικροπρόγραμμα. Αυτό γίνεται μέσω του σήματος LOAD_DIR_SEQ~ : ΝΕΧΤ(PC) : Συμβολικό όνομα για μία εντολή που έχει LOAD_DIR_SEQ~ = 0 και δεν κάνει τίποτα άλλο Mapper OPCODE LDA K PC MAR MDR μPC OPCODE XYZ ACC Περιεχόμενο Κ Τώρα τελειώσαμε !!!

Παράδειγμα (LDA $K – Βήμα 1) Συνοψίζοντας, το μικροπρόγραμμα σε συμβολική γλώσσα θα είναι LDA $K : 1. PC + 1  PC , MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  NOP, MAR // To Κ στον MAR, άρα το περιεχόμενο της // Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

Παράδειγμα (ADD $K – Βήμα 1) ADD $K : Πρόσθεσε στον Accumulator το περιεχόμενο της διεύθυνσης Κ LDA $K : 1. PC + 1  PC , MAR 2. MDR + 0  ACC 3. ACC + 0  NOP,MAR 4. MDR + 0  ACC 5. PC + 1  PC, MAR 6. NEXT(PC) ADD $K : 1. PC + 1  PC , MAR 2. MDR + 0  X 3. X + 0  NOP, MAR 4. MDR + ACC  ACC 5. PC + 1  PC , MAR 6. NEXT(PC) Σημ: Ο Χ είναι ένας έξτρα καταχωρητής τον οποίο χρειάζομαι. H μικροεντολή 2 της ADD δεν μπορεί να γίνει ως MDR + 0  ACC , γιατί θα καταστραφούν τα προηγούμενα δεδομένα του ACC

Παράδειγμα (STA $K – Βήμα 1) STA $K : Αποθήκευσε το περιεχόμενο του Accumulator στη θέση μνήμης με διεύθυνση Κ LDA $K : 1. PC + 1  PC , MAR 2. MDR + 0  ACC 3. ACC + 0  NOP, MAR 4. MDR + 0  ACC 5. PC + 1  PC, MAR 6. NEXT(PC) STA $K : 1. PC + 1  PC , MAR 2. MDR + 0  X 3. X + 0  NOP,MAR 4. ACC + 0  NOP, MWE~ 5. PC + 1  PC , MAR 6. NEXT(PC) Σημ: Ο Χ είναι ένας έξτρα καταχωρητής τον οποίο χρειάζομαι. H μικροεντολή 2 της ADD δεν μπορεί να γίνει ως MDR + 0  ACC , γιατί θα καταστραφούν τα προηγούμενα δεδομένα του ACC

Συγγραφή Μικροπρογραμμάτων - Tips Γενικά : Για μία εντολή που δέχεται K ορίσματα, θα πρέπει να κάνουμε PC + 1  PC, MAR , K φορές, μία για κάθε όρισμα. Με τον τρόπο αυτό ‘βλέπουμε’ κάθε όρισμα. Χρειαζόμαστε ακόμα μία PC+1  PC, MAR για να διευθυνσιοδοτήσουμε το opcode της επόμενης macroεντολής. Τελειώνουμε με μία NEXT(PC) Π.χ. ΚΑΤΙ Ε1, Ε2, Ε3 : PC +1  PC, MAR // To Ε1 στον MDR Κάνε κάτι με το E1 PC + 1  PC, MAR // Το Ε2 στον MDR Kάνε κάτι με το E2 PC + 1  PC, MAR // To Ε3 στον MDR Κάνε κάτι με το E3 PC + 1  PC, MAR // Το επόμενο opcode στον MDR ΝΕΧΤ(PC) Standard τρόπος διευθυνσιοδότησης μνήμης, με το περιεχόμενο του MDR : MDR + 0  X X + 0  NOP, MAR Μπορούμε να απαλείψουμε τον X ;;;;; ΝΑΙ : MDR + 0  NOP , MAR Η παραπάνω εντολή είναι αποδεκτή (γλιτώνουμε έναν καταχωρητή και μία μικροεντολή) ΠΡΟΣΟΧΗ : Δεν υποστηρίζεται εντολή του στυλ : MDR + 0  PC, MAR

Βήμα 2 : Συγγραφή Μικροεντολών PC = 0100 και ACC = 1000 LDA $K : 1. PC + 1  PC , MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  NOP, MAR // To Κ στον MAR, άρα το περιεχόμενο της // Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

PC + 1  PC, MAR (0100) + 01  (0100) , MAR ALU Main Memory RF D(1:0) Switches 01 1 DDATAE~ PCE~ Selector (0100) + 01  (0100) , MAR MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A ALU A R 0100 address F MAR Selector Selector Port B B B S op write 1 MARCLK write 000 1 011 0100 1 101 (DA) I(5:3) I(8:6) MWE~ I(2:0) SH~ = MSTATUSCLK = CARRYE~ = 1 I(8:6) Selector FeedBack Register Bport(3:0) 1 SELB

PC + 1  PC, MAR Μονάδα Ελέγχου : Σειριακή Εντολή

Βήμα 2 : Συγγραφή Μικροεντολών PC = 0100 και ACC = 1000 LDA $K : 1. PC + 1  PC , MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  MAR // To Κ στον MAR, άρα το περιεχόμενο της Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

MDR + 0  ACC MDR + 0  (1000) ALU Main Memory RF D(1:0) Switches XX DDATAE~ 1 PCE~ Selector MDR + 0  (1000) MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A A R ALU XXXX address F MAR Selector Selector Port B B B S op write MARCLK write 000 1 1000 011 1 111 (DZ) I(5:3) I(8:6) MWE~ I(2:0) SH~ = MSTATUSCLK = CARRYE~ = 1 I(8:6) Selector FeedBack Register Bport(3:0) 1 SELB

MDR + 0  ACC Μονάδα Ελέγχου : Σειριακή Εντολή

Βήμα 2 : Συγγραφή Μικροεντολών PC = 0100 και ACC = 1000 LDA $K : 1. PC + 1  PC , MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  MAR // To Κ στον MAR, άρα το περιεχόμενο της Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

ACC+0  NOP, MAR (1000) + 0  NOP, MAR ALU Main Memory RF D(1:0) Switches XX 1 DDATAE~ PCE~ Selector (1000) + 0  NOP, MAR MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A ALU A R 1000 address F MAR Selector Selector Port B B B S op write 1 MARCLK write 000 1 001 XXXX 1 100 (ZA) I(5:3) I(8:6) MWE~ I(2:0) SH~ = MSTATUSCLK = CARRYE~ = 1 I(8:6) Selector FeedBack Register Bport(3:0) 1 SELB

ACC+0  NOP, MAR Μονάδα Ελέγχου : Σειριακή Εντολή

Βήμα 2 : Συγγραφή Μικροεντολών PC = 0100 και ACC = 1000 LDA $K : 1. PC + 1  PC , MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  MAR // To Κ στον MAR, άρα το περιεχόμενο της Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

NEXT(PC) : Η μονάδα επεξεργασίας δεν κάνει ‘τίποτα’ D(1:0) Switches XX ???? op ????  NOP DDATAE~ 1 Το αφήνουμε στην τύχη PCE~ 1 Selector αφού όμως πρώτα απενεργοποιήσουμε όλες τις εγγραφές MDE~ 1 Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A ALU A R XXXX address F Selector Selector MAR Port B B B S op write MARCLK write XXX 1 001 XXX I(5:3) I(8:6) MWE~ I(2:0) 001 SH~ = Χ MSTATUSCLK = 0 CARRYE~ = 1 I(8:6) Selector FeedBack Register Bport(3:0) XXXX 1 SELB

NEXT(PC) : Η μονάδα επεξεργασίας δεν κάνει ‘τίποτα’ Μονάδα Ελέγχου : LOAD_DIR_SEQ~

Βήμα 2 : ADD $K , STA $K STA $K : ADD $K : 1. PC + 1  PC , MAR 2. MDR + 0  X 3. X + 0  NOP, MAR 4. MDR + ACC  ACC 5. PC + 1  PC , MAR 6. NEXT(PC) 3. X + 0  NOP,MAR 4. ACC + 0  NOP, MWE~ Να τις έχετε έτοιμες για το πρώτο εργαστήριο. Παρατηρήστε ότι οι περισσότερες εντολές είναι ίδιες με αυτές που περιγράψαμε

Αναφορά Στην αναφορά του εργαστηρίου , δεν χρειάζονται πολλά λόγια Θα πρέπει όμως οπωσδήποτε : 1. Να παρουσιάζετε τα μικροπρογράμματα σε ‘συμβολική’ γλώσσα 2. Να διευκρινίζετε ποιους καταχωρητές χρησιμοποιείτε (π.χ. ο PC είναι ο 0100, ο ACC είναι ο 1000, o Χ είναι … ) 3. Να διευκρινίζετε ποια opcodes έχετε αναθέσει για κάθε μακροεντολή 4. Να παρουσιάζετε τα περιεχόμενα του mapper 5. Να παρουσιάζετε τα περιεχόμενα της κύριας μνήμης (π.χ. δοκιμαστικό μακροπρόγραμμα) 6. Να παρουσιάζετε τα μικροπρογράμματα (τις 40 άδες) και σε ποια θέση της μικρομνήμης αποθηκεύεται η κάθε μικροεντολή. (κατά προτίμηση σε πίνακα του excell ή του word)

Το Bootstrap μικροπρόγραμμα Με τον τρόπο που γράφουμε τα μικροπρογράμματα εξασφαλίζουμε ότι μετά το τέλος ενός μικροπρογράμματος, ο έλεγχος περνάει στο μικροπρόγραμμα της επόμενης μακροεντολής (PC+1PC, MAR και NEXT(PC)) Πώς όμως θα ξεκινήσει το μικροπρόγραμμα της πρώτης μακροεντολής, αφού δεν υπάρχει κάποιο άλλο μικροπρόγραμμα που να του δώσει τον έλεγχο ;;;; Bootstrap μικροπρόγραμμα : Αρχικοποιεί τον PC με τη διεύθυνση της κύριας μνήμης όπου έχουμε αποθηκευμένη την πρώτη μακροεντολή του μακροπρογράμματος. Στη συνέχεια εκτελεί τη NEXT(PC)

Το Bootstrap μικροπρόγραμμα switches + 0  PC , MAR NEXT(PC) Η αρχικοποίηση του PC, γίνεται ‘χειροκίνητα’ μέσω των DIP SWITCHES της πλακέτας !

Το bootstrap μικροπρόγραμμα : Switches + 0 PC, MAR D(1:0) Switches XX DDATAE~ 1 PCE~ Selector Sw + 0  (0100), MAR MDE~ Q data Main Memory RF Data In Port A D Q Z Aport(3:0) MDR A A R ALU XXXX address F MAR Selector Selector Port B B B S op write 1 MARCLK write 000 1 0100 011 1 111 (DZ) I(5:3) I(8:6) MWE~ I(2:0) SH~ = MSTATUSCLK = CARRYE~ = 1 I(8:6) Selector FeedBack Register Bport(3:0) 1 SELB

Το Bootstrap μικροπρόγραμμα TIP : To bootstrap είναι standard μικροπρόγραμμα Προσοχή : Μην ξεχνάτε να βάζετε τον PC που έχετε ορίσει στο πεδίο BPORT της πρώτης μικροεντολής !!! Τελευταίο Πρόβλημα : Ξεκινώντας, το σύστημα έχει μη καθορισμένη τιμή στον μPC. Θα πρέπει με κάποιον τρόπο να αποθηκεύσουμε στον μPC τη διεύθυνση της πρώτης μικροεντολής του bootstrap (έτσι θα ξεκινήσει η εκτέλεση του μακροπρογράμματος). Θα δούμε τον τρόπο με τον οποίο γίνεται το παραπάνω στο εργαστήριο.

Τέλος (Επιτέλους) Παρουσίαση : http://students.ceid.upatras.gr/~kalogera/archlab.zip Φύλο excel με sample μικροκώδικα : http://students.ceid.upatras.gr/~kalogera/sample.xls