Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Εργαστήριο Αρχιτεκτονικής Υπολογιστών"— Μεταγράφημα παρουσίασης:

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

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

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

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

5 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

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

7 Κύρια Μνήμη 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 : Η τιμή του σήματος αυτού καθορίζει αν θα γίνει εγγραφή ή ανάγνωση στη μνήμη

8 Ένα στοιχειώδες Σύστημα (Υπεραπλουστευμένο)
ΜΟΝΑΔΑ ΕΠΕΞΕΡΓΑΣΙΑΣ 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 Υπενθύμιση : Οι δύο βασικές υπομονάδες ενός συστήματος είναι η μονάδα επεξεργασίας και η μονάδα ελέγχου. Στο σχήμα δίνουμε μόνο τη μονάδα επεξεργασίας

9 Ένα στοιχειώδες Σύστημα (Υπεραπλουστευμένο)
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 σήματα ένα προς ένα.

10 Παράδειγμα 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. Δεν επηρεάζεται καθόλου η διεύθυνση της κύριας μνήμης και τα περιεχόμενά της

11 Παράδειγμα 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 Διευθυνσιοδότησε την κύρια μνήμη με το αποτέλεσμα της πράξης Μην επηρεάσεις το περιεχόμενο της κύριας μνήμης

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

13 Παράδειγμα 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

14 Μικροεντολές και Μακροεντολές
Μικροεντολή : Η ακολουθία μηδενικών και άσσων που καθορίζει πλήρως τη λειτουργία του συστήματος σε μία χρονική στιγμή. Η μικροεντολή περιέχει τις τιμές για όλα τα 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 Μικροεντολή : Μήκος Μικροεντολής για το απλοϊκό σύστημα : 14 bit

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

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

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

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

19 Μικρομνήμη Βήμα 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 Μικρομνήμη

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

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

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

23 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 = μετρητής μίκροΠρογράμματος

24 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

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

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

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

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

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

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

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

32 Block Διάγραμμα

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

34 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

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

36 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

37 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
Σήματα 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

38 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

39 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

40 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

41 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

42 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα
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

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

44 Μονάδα Επεξεργασίας 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.

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

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

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

48 Σήματα ελέγχου Μονάδας Ελέγχου !
ΒΙΝ(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

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

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

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

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

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

54 Παράδειγμα (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

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

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

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

58 Παράδειγμα (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 Περιεχόμενο Κ

59 Παράδειγμα (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 Περιεχόμενο Κ Τώρα τελειώσαμε !!!

60 Παράδειγμα (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~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

61 Παράδειγμα (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

62 Παράδειγμα (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

63 Συγγραφή Μικροπρογραμμάτων - 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

64 Βήμα 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~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

65 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

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

67 Βήμα 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~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

68 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

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

70 Βήμα 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~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

71 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

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

73 Βήμα 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~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

74 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

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

76 Βήμα 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~ Να τις έχετε έτοιμες για το πρώτο εργαστήριο. Παρατηρήστε ότι οι περισσότερες εντολές είναι ίδιες με αυτές που περιγράψαμε

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

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

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

80 Το 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

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

82 Τέλος (Επιτέλους) Παρουσίαση :
Φύλο excel με sample μικροκώδικα :


Κατέβασμα ppt "Εργαστήριο Αρχιτεκτονικής Υπολογιστών"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google