Πρωτότυπη Υβριδική Πλατφόρμα Προσομοίωσης (ΥΠΠ)

Ο σκοπός αυτής της ερευνητικής δραστηριότητας είναι να αναπτυχθούν νέοι τρόποι και εκπαιδευτικά εργαλεία για την αποτελεσματικότερη εκμάθηση της σχεδίασης και του προγραμματισμού των μικροεπεξεργαστών από τους νέους φοιτητές μηχανικούς.

Τα αποτελέσματα αυτής της έρευνας, έτυχαν διεθνούς αναγνώρισης με τη δημοσίευση σχετικών εργασιών.

Σε αυτή τη σελίδα παρουσιάζεται όλο το project, το οποίο δημοσιεύτηκε στο περιοδικό Applications in Engineering Education, WILEY


Σχετικές δημοσιεύσεις με το project

P.M.Papazoglou
A Hybrid Simulation Platform for Learning Microprocessors, Computer Applications in Engineering Education, Volume 26, Issue 2, March 2018, WILEY (2018)

P.M.Papazoglou, D.A.Karras
A Hardware Based Novel Educational Methodology for Teaching Microprocessor Architectures Using Object Oriented Approach, International Review on Computers and Software (IRECOS), Vol 10, No 10, 2015

P.Papazoglou, A.Moschos
OpenHardSim: An Open Source Hardware Based Simulator for Learning Microprocessors”, IEEE Global Engineering Education Conference (EDUCON 2017), 25-28 April 2017 Athens, Greece

Συντομογραφίες

ΥΠΠ Υβριδική Πλατφόρμα Προσομοίωσης

μΕ Μικροεπεξεργαστής

μC Μικροελεγκτής

ΗΒ Hardware Block


Εισαγωγή

Ο στόχος του project
Η Ανάπτυξη μιας πρωτότυπης Υβριδικής Πλατφόρμας Προσομοίωσης (ΥΠΠ) που θα επιτρέπει στο φοιτητή να σχεδιάζει, να αναπτύσσει και να προγραμματίζει πειραματικές αρχιτεκτονικές μικροεπεξεργαστών.

Υφιστάμενα εργαλεία

Σήμερα, χρησιμοποιούνται σχεδόν αποκλειστικά εργαλεία λογισμικού στα οποία οι φοιτητές παρατηρούν την εκτέλεση προγραμμάτων Assembly που αναπτύσσουν (εικόνα 2.1). Πριν από αρκετά χρόνια, υπήρχαν ειδικές πλατφόρμες (εικόνα 2.2) για προγραμματισμό συγκεκριμένων μικροεπεξεργαστών στο δεκαεξαδικό σύστημα (Assembly μέσω δεκαεξαδικού συστήματος).

Εικόνα 2.1 Προσομοιωτές λογισμικού

Εικόνα 2.2 Εκπαιδευτικά board (Παλαιά εργαλεία)*


*Δεν είναι πλέον διαθέσιμα


Η αναγκαιότητα ενός νέου προσομοιωτή
Η αναγκαιότητα προκύπτει από τα μειονεκτήματα και τους περιορισμούς των υφιστάμενων εκπαιδευτικών και μη εργαλείων:

  • Δεν προσαρμόζονται σε πειραματικές αρχιτεκτονικές (προσομοιώνονται μόνο τυπικά μοντέλα)

  • Δεν μπορούν να μελετηθούν μεμονωμένα συστατικά του μΕ

  • Οι καθηγητές δεν μπορούν να αναπτύξουν εκπαιδευτικά σενάρια βασισμένα στις απαιτήσεις και τις προδιαγραφές του μαθήματος

  • Οι φοιτητές δεν μπορούν να εξοικειωθούν με το επίπεδο του υλικού

  • Δεν έχουν δυνατότητες επέκτασης

  • «Τρέχουν» μόνο σε κλασικό υπολογιστή

  • «Υποστηρίζουν» μια στατική (μη δημιουργική) εκπαιδευτική διαδικασία

Ταυτόχρονα, υπάρχουν σημαντικοί περιορισμοί ως προς το ρόλο των φοιτητών:

  • Παρακολουθούν μόνο την εκτέλεση των εντολών

  • Αναπτύσσουν μόνο κώδικα Assembly

  • Δεν μπορούν να έχουν ρόλο σχεδιαστή της αρχιτεκτονικής

  • Δεν μπορούν να σχεδιάσουν το ρεπερτόριο εντολών


Η νέα ΥΠΠ συνιστά μια εντελώς διαφορετική προσέγγιση, όχι μόνο σε θέματα υλοποίησης, αλλά και σε θέματα εκπαιδευτικής φιλοσοφίας. Η νέα αυτή πλατφόρμα, βασίζεται στα ακόλουθα χαρακτηριστικά:

  • Αυτόνομο εργαλείο (δεν απαιτεί κλασικό υπολογιστή)

  • Δυνατότητα σχεδιασμού πειραματικών αρχιτεκτονικών

  • Έμφαση στο επίπεδο υλικού

  • Δυνατότητα μελέτης μεμονωμένων συστατικών του μΕ

  • Επεκτασιμότητα

  • Ανοιχτό λογισμικό και αρχιτεκτονική

  • «Υποστήριξη» πολλαπλών παιδαγωγικών προσεγγίσεων

2.2 Η βασική ιδέα - Το βασικό συστατικό του προσομοιωτή

Το βασικό συστατικό του προσομοιωτή είναι το Hardware Block-HB (σχήμα 2.1). Το HB αποτελείται στον πυρήνα του από έναν μικροελεγκτή (μC), ενώ διαθέτει και δύο μονάδες απεικόνισης επτά τμημάτων (σχήμα 2.2). Η λειτουργία (συμπεριφορά) του HB καθορίζεται από το ενσωματωμένο λογισμικό. Βάσει αυτού του λογισμικού, μπορεί να λειτουργεί (συμπεριφορά) ως καταχωρητής, Αριθμητική και Λογική Μονάδα (ΑΛΜ), κλπ. Ο φοιτητής έχει στη διάθεσή του πολλά τέτοια ΗΒ τα οποία συνδυάζει μέσω φυσικών συνδέσεων προκειμένου να «χτίσει» την απαιτούμενη εσωτερική αρχιτεκτονική του πειραματικού μικροεπεξεργαστή. Τα HB επαναχρησιμοποιούνται (reusability) όπως τα γνωστά LEGO και έτσι, «χτίζεται» το σύστημα των μονάδων που ελληλεπιδρούν και αποτελούν τον πειραματικό μικροεπεξεργαστή. Με άλλα λόγια, το HB είναι το «τουβλάκι» που επαναχρησιμοποιείται για να «χτίσουμε» οποιαδήποτε αρχιτεκτονική (σχήμα 2.3). Καθώς γίνεται η εκτέλεση των εντολών Assembly, οι μονάδες απεικόνισης επτά τμημάτων αποτυπώνουν σε πραγματικό χρόνο τις επιθυμητές πληροφορίες, όπως για παράδειγμα το περιεχόμενο ενός καταχωρητή.

Σχήμα 2.1 Hardware Block (HB)

Σχήμα 2.2 Δομή Hardware Block (HB)


Πειραματική αρχιτεκτονική μικροεπεξεργαστή


Σχήμα 2.3 Επαναχρησιμοποίηση Hardware Block (HB)


2.3 Ο νέος ρόλος για το φοιτητή

Με τα υφιστάμενα εργαλεία, ο φοιτητής απλά προγραμματίζει ένα συγκεκριμένο μοντέλο μικροεπεξεργαστή. Με την προτεινόμενη πλατφόρμα, ο φοιτητής μπορεί να σχεδιάσει την πειραματική αρχιτεκτονική, να αναπτύξει τη γλώσσα Assembly, αλλά και να πειραματιστεί με οποιαδήποτε σύνθεση συστατικών (σχήμα 2.4).

Σχήμα 2.4 Νέος ρόλος φοιτητή


2.4 Παιδαγωγικά ζητήματα

Η εισαγωγή αυτού του νέου εκπαιδευτικού εργαλείου με επίκεντρο τη φιλοσοφία της αντικειμενοστραφούς προσέγγισης, της απαναχρησιμοποίησης και της οικοδόμησης της γνώσης, δίνει μεγάλες και σημαντικές προοπτικές για την υλοποίησης των μαθησιακών στόχων, την ανάπτυξη των δεξιοτήτων των φοιτητών, κλπ. Πιο συγκεκριμένα, από παιδαγωγικής πλευράς τονίζονται τα ακόλουθα ζητήματα:

  • Η ΥΠΠ αποτελεί ένα νέο εκπαιδευτικό εργαλείο που «εισάγει» νέες εκπαιδευτικές μεθοδολογίες

  • Η ΥΠΠ αποτελεί μέρος της εκπαιδευτικής δραστηριότητας

  • «Υποστηρίζει» τα τρία είδη στόχων κατά Bloom

Γνωστικοί: οι φοιτητές αντιλαμβάνονται, πιστοποιούν, αναλύουν, δημιουργούν και εφαρμόζουν τη γνώση αρχιτεκτονικής και του προγραμματισμού μΕ από διαφορετικές οπτικές γωνίες

Συναισθηματικοί: οι φοιτητές μαθαίνουν να συνεργάζονται και να παρουσιάζουν την εργασία τους

Ψυχοκινητικοί: οι φοιτητές μαθαίνουν να «συναρμολογούν», να «χτίζουν», να σχεδιάζουν και να επεκτείνουν τις δεξιότητές τους με επίκεντρο τις πειραματικές αρχιτεκτονικές

(α) Δημιουργώντας την εκπαιδευτική δραστηριότητα

Η δημιουργία εκπαιδευτικής δραστηριότητας με επίκεντρο την ΥΠΠ, έχει τα ακόλουθα στοιχεία και χαρακτηριστικά:

  • Πλαίσιο δραστηριότητας: περιβάλλον υλοποίησης δραστηριότητας (π.χ. εργαστήριο τριτοβάθμιας εκπαίδευσης), επίπεδο δυσκολίας (προσαρμόσιμο), μαθησιακά αποτελέσματα (γνώσεις, κλπ)

  • Παιδαγωγική προσέγγιση: διερευνητική μάθηση:

(α) Κεντρικό ερώτημα (π.χ. ποιες είναι οι στοιχειώδεις διεργασίες ενός καταχωρητή;)

(β) Συλλογή πληροφοριών, ανάλυση και εξήγηση (π.χ. ανάλυση λειτουργίας καταχωρητή αλλά και πώς αυτή επιτυγχάνεται)

(γ) Σύνδεση (π.χ. οι φοιτητές επιβεβαιώνοτν στην πράξη τη λειτουργία του καταχωρητή)

(δ) Αναστοχασμός και μεταγνωστισμός (π.χ. οι φοιτητές μελετούν την εφαρμογή των βασικών γνώσεων του καταχωρητή και σε άλλες πιο σύνθετες αυθεντικές αρχιτεκτονικές)

  • Εργασίες δραστηριότητας: φόρμες καθοδήγησης, προκαθορισμένα βήματα και ενδιάμεσα αποτελέσματα

(β) Θεωρία μάθησης

Το προτεινόμενο εκπαιδευτικό εργαλείο επικεντρώνεται στην ενίσχυση του τρόπου σκέψης του φοιτητή και όχι απλά στον έλεγχο γνώσης:

  • Η φιλοσοφία λειτουργίας της ΥΠΠ υποστηρίζει τις γνωστικές θεωρίες μάθησης

  • Για παράδειγμα, ο τρόπος διερεύνησης της λειτουργίας του καταχωρητή με την ταυτόχρονη ανάπτυξη κατάλληλου κώδικα για τη ρύθμιση της συμπεριφοράς του, υποστηρίζει στην πράξη τον τρόπο που σκέφτεται και ενεργεί ο φοιτητής. Το ενδιάμεσο δηλαδή στάδιο της επεξεργασίας ανάμεσα στο ερέθισμα και το αποτέλεσμα (όπως υποστηρίζουν οι γνωστικές θεωρίες)



2.5 Γενική δομή Υβριδικής Πλατφόρμας Προσομοίωσης (ΥΠΠ)

Η ΥΠΠ είναι οργανωμένη σε δύο επίπεδα (σχήμα 2.5). Το επίπεδο 1 αντιπροσωπεύει το κεντρικό σύστημα (Raspberry Pi) στο οποίο γίνεται ο έλεγχος και η διαχείριση του προσομοιωτή, ενώ περιλαμβάνει και τη διεπαφή χρήστη. Στο ίδιο επίπεδο, γίνεται και η εισαγωγή των εντολών Assembly στη μνήμη του πειραματικού μικροεπεξεργαστή.

Το επίπεδο 2 αντιπροσωπεύει το πειραματικό σύστημα που περιλαμβάνει το πειραματικό μοντέλο του μικροεπεξεργαστή. Πιο συγκεκριμένα, το επίπεδο 2.1 (επίπεδο λογισμικού) αντιπροσωπεύει τη μνήμη, καθώς και τη μονάδα ελέγχου του πειραματικού μοντέλου. Το επίπεδο 2.2 αποτελείται αποκλειστικά από HB (AVR boards) για την υλοποίηση των υπόλοιπων συστατικών του πειραματικού μικροεπεξεργαστή όπως καταχωρητές, αριθμητική και λογική μονάδα, κλπ.

Σχήμα 2.5 Δομή ΥΠΠ

Φυσικά, ο εκπαιδευτικός και ο φοιτητής είναι ελεύθερος να επιλέξει ποια συστατικά του πειραματικού μικροεπεξεργαστή επιθυμεί να υλοποιήσει στο λογισμικό (πλατφόρμα Raspberry Pi) ή στο υλικό (AVR Board). Επίσης, το ίδιο Hardware Block (AVR board) μπορεί να φιλοξενήσει περισσότερες από μια μονάδες του πειραματικού μικροεπεξεργαστή.

Το σχήμα 2.6 δείχνει τη «ροή πληροφορίας» σχετικά με την αποθήκευση και την εκτέλεση των εντολών. Να σημειωθεί ότι, η επιλογή υλοποίησης των μονάδων του πειραματικού μE του σχήματος 2.6 είναι ενδεικτικές και χρησιμοποιούνται για την ανάλυση της φιλοσοφίας λειτουργίας όλου του μοντέλου της ΥΠΠ. Αρχικά λοιπόν, ο φοιτητής εισάγει τις απαιτούμενες εντολές assembly (σχήμα 2.6, βήμα 1-οι εντολές «λαμβάνονται» από τον έλεγχο της εφαρμογής). Ταυτόχρονα, πρόσθετες πληροφορίες εμφανίζονται (σχήμα 2.6, βήμα 2-τρέχουσα εντολή, περιεχόμενο μνήμης). Οι εντολές αποθηκεύονται στη μνήμη του πειραματικού συστήματος (σχήμα 2.6, βήμα 3-οι εντολές στον έλεγχο του προσομοιωτή και μετά στη μνήμη). Η μονάδα ελέγχου «παράγει» τις απαραίτητες διαδικασίες και σήματα για την ανάγνωση από τη μνήμη (σχήμα 2.6, βήμα 4) και τη μεταφορά των αντίστοιχων δεδομένων στους κατάλληλους καταχωρητές.

Σχήμα 2.6 «Ροή πληροφορίες» στην ΥΠΠ


2.6 «Χτίζοντας» μία λειτουργική ΥΠΠ

Ας δούμε σύντομα τώρα σε βήματα τη διαδικασία ανάπτυξης ενός λειτουργικού πειραματικού μικροεπεξεργαστή στην ΥΠΠ.

Βήμα 1 Σχεδιάζουμε τη θεωρητική εσωτερική αρχιτεκτονική του πειραματικού μΕ

Σχήμα 2.7 Θεωρητική αρχιτεκτονική (πειραματική)

Βήμα 2 Επιλογή των HB που θα χρησιμοποιηθούν (σχήμα 2.8)

Σχήμα 2.8 Συνολική δομή πειραματικής αρχιτεκτονικής

Το σχήμα 2.9 δείχνει τις φυσικές μονάδες που θα χρησιμοποιηθούν για την υλοποίηση των δύο επιπέδων του πειραματικού μΕ. Το πρώτο επίπεδο περιλαμβάνει τόσο τμήματα του πειραματικού μικροεπεξεργαστή, όσο και τα τμήματα του λογισμικού για τη διαχείριση και τον έλεγχο του προσομοιωτή (ΥΠΠ). Βάσει των μονάδων του πειραματικού μικροεπεξεργαστή που έχουμε αποφασίσει να υλοποιήσουμε, θα χρησιμοποιηθεί και το αντίστοιχο πλήθος HB (AVR boards).

Σχήμα 2.9 Πραγματικό υλικό που θα χρησιμοποιηθεί

Βήμα 3 Υλοποίηση συνδεσμολογίας

Αφού έχει επιλεγεί το πλήθος των φυσικών μονάδων που θα χρησιμοποιηθούν, θα γίνει η φυσική συνδεσμολογία που περιλαμβάνει τους διαύλους δεδομένων και ελέγχου, κλπ. Ας φανταστούμε ότι, υπάρχουν πολλά διαθέσιμα HB σε ένα toolbox και ο φοιτητής τα επιλέγει για να τα συνδέσει στο τελικό πειραματικό σύστημα (σχήμα 2.10).

Σχήμα 2.10 Φυσική συνδεσμολογία των μονάδων του πειραματικού συστήματος


Βήμα 4 Ανάπτυξη ενσωματωμένου λογισμικού στα HB

Όπως αναφέρθηκε και προηγουμένως, το ενσωματωμένο λογισμικό είναι αυτό που καθορίζει τη λειτουργία (συμπεριφορά) του HB. Τα HB προγραμματίζονται σε γλώσσα C. Ακολουθεί ο ψευδοκώδικας ενός HB που λειτουργεί ως καταχωρητής γενικής χρήσης. Στην μόνιμη λειτουργία του, εμφανίζει το περιεχόμενό του στις μονάδες απεικόνισης επτά τμημάτων (γραμμές 7-10). Όταν λάβει σήμα CLOCK, τότε ενεργοποιείται η συνάρτηση της αντίστοιχης διακοπής (interrupt, γραμμές 18-35). Αρχικά, γίνεται έλεγχος της διεύθυνσης προορισμού που έχει ληφθεί (Address) με τη μοναδική διεύθυνση του καταχωρητή (Self_address). Αν ο προορισμός είναι αυτός ο καταχωρητής, τότε λαμβάνει χώρα η λειτουργία που αντιστοιχεί στα bit ελέγχου (Command). Βάσει του Command, εκτελείται η κατάληλη λειτουργία (γραμμές 25-32).

  1. REG=0;

  2. Self_address=N;

  3. main

  4. {

  5. Enable Interrupts

  6. Prepare I/O Ports

  7. while(1)

  8. {

  9. display(REG);

  10. }

  11. }

  12. display(num)

  13. {

  14. display num MSB

  15. display num LSB

  16. delay time (ms)

  17. }


  1. {

  2. Command=Read control bus (5bit, command)

  3. Address=Read control bus (7bit, address)

  4. if (Address=Self_address)

  5. {

  6. delay time (ms)

  7. based on Command value

  8. {

  9. case 0: //NOP-No Operation

  10. case 1: //Read-Send REG to Data bus

  11. case 2: //Write-REG=Data bus

  12. case 3: //Reset, REG=00h

  13. case 4: //Set, REG=FFh

  14. }

  15. }

  16. display(REG);

  17. }

ISR(clock) //Interrupt Service Routine

Οι πίνακες 2.1 και 2.2 δείχνουν ενδεικτικά ορισμένες λειτουργίες που μπορεί να υποστηρίζει ένας καταχωρητής ή μια ΑΛΜ.

Πίνακας 2.1 Λειτουργία καταχωρητή (ενδεικτικά)

Πίνακας 2.2 Λειτουργία ΑΛΜ (ενδεικτικά)

Ακολουθεί ακόμας ένας ψευδοκώδικας που θα μπορούσε να περιγράφει τις λειτουργίας μιας απλής ΑΛΜ.

  1. ISR(clock) //Interrupt Service Routine

  2. {

  3. Command=Read control bus (5bit, command)

  4. Address=Read control bus (7bit, address)

  5. if (Address=Self_address)

  6. {delay time (ms)

  7. based on command value

  8. {

  9. case 0: //NOP

  10. case 1: TEMP_A=Data_bus; if TEMP_A>MAX7bit;

  11. {Number_A=0; STATUS=0001;} else Number_A=TEMP_A;

  12. case 2: TEMP_B=Data_bus; if TEMP_B>MAX7bit;

  13. {Number_B=0; STATUS=0001;} else Number_B=TEMP_B; 

  14. case 3: if (Number_A>0) Number_A--; else STATUS=1000;

  15. case 4: Number_A=Number_A+Number_B;

  16. case 5: Data_bus=Number_A;

  17. case 6: Data_bus=Number_B;

  18. case 7: Data_bus=STATUS;

  19. }

  20. }

  21. display(Number_A);

  22. }


Βήμα 5 Δημιουργώντας ένα ρεπερτόριο εντολών Assembly

Στη συνέχεια, αναπτύσσουμε το ρεπερτόριο εντολών Assembly που θα υποστηρίζει ο πειραματικός μΕ. Εφόσον ορισμένα τμήματα του πειραματικού μΕ έχουν υλοποιηθεί με φυσικά κυκλώματα, θα πρέπει οι εντολές Assembly να έχουν πρόσβαση σε αυτά. Ο πίνακας 2.3 δείχνει ένα ρεπερτόριο εντολών Assembly που θα μπορούσε να αναπτυχθεί.

Πίνακας 2.3 Εντολές Assembly (ενδεικτικά)

Για να φανεί πιο ξεκάθαρα η αξιοποίηση των φυσικών κυκλωμάτων (π.χ. καταχωρητής γενικής χρήσης) από τις αντίστοιχες εντολές Assembly, θα παρουσιαστεί η διαδικασία που λαμβάνει χώρα σε φυσικό επίπεδο όταν εκτελείται για παραδειγμα η εντολή MOV A,10. Στο παράδειγμα θα θεωρήσουμε ότι υπάρχει ο καταχωρητής Α μαζί με έναν ακόμα καταχωρητή.

Σχήμα 2.11 Χρήση του διαύλου δεδομένων

Αρχικά το όρισμα (αριθμός 10) της εντολής «εφαρμόζεται» στο δίαυλο δεδομένων (Data Bus). Αυτό έχει ως αποτέλεσμα ο αριθμός 10 να έχει εφαρμοστεί σε όλους τους συνδεδεμένους καταχωρητές (σχήμα 2.11). Στη συνέχεια η διεύθυνση (διεύθυνση προορισμού = 0000001 = καταχωρητής Α), καθώς και ο κώδικας της εντολής (0410=00001002=MOV A,X), εφαρμόζεται μέσω του διαύλου ελέγχου (λέξη ελέγχου) επίσης σε όλους τους συνδεδεμένους καταχωρητές (σχήμα 2.12).

Σχήμα 2.12 Εφαρμογή διεύθυνσης προορισμού

Προκειμένου οι καταχωρητές να διαβάσουν τα σήματα που βρίσκονται στους διαύλους τους, αποστέλλεται ένας παλμός CLOCK σε όλους (σχήμα 2.13). Έτσι, οι καταχωρητές αναγκάζονται να ελέγξουν αν η διεύθυνση προορισμού συμπίπτει με τη δική τους διεύθυνση.

Σχήμα 2.13 Σήμα CLOCK σε όλους τους καταχωρητές

Τέλος, όπως φαίνεται στο σχήμα 2.14, ο αριθμός 10 φορτώνεται μόνο στον καταχωρητή Α του οποίου η μοναδική διεύθυνση ταυτίζεται με τη διεύθυνση προορισμού.

Σχήμα 2.14 Φόρτωση του αριθμού 10 μόνο στον καταχωρητή Α

Βάσει της παραπάνω διαδικασίας, ο κώδικας υλοποίησης της εντολής MOV A,10, θα έχει την ακόλουθη μορφή:

Param=όρισμα εντολής (εδώ ο αριθμός 10)

Data_bus=param


{Control word}

Address=01 (διεύθυνση καταχωρητή Α)

Control_bus=02 (λειτουργία που θα εκτελεστεί στον καταχωρητή προορισμού)


Send Clock (interrupt)

Λαμβάνοντας υπόψη την παραπάνω διαδικασία, αναπτύσσουμε κατάλληλο και αντίστοιχο κώδικα για κάθε εντολή Assembly που δημιουργούμε.

Βήμα 6 Υλοποίηση διαδικασίας εκτέλεσης εντολών σε επίπεδο λογισμικού

Η λογική για την εκτέλεση κάθε εντολής ακολουθεί τη γνωστή διαδικασία των τεσσάρων βημάτων: (α) ανάκληση από τη μνήμη, (β) αποκωδικοποίηση, (γ) εκτέλεση εντολής, (δ) αποθήκευση αποτελεσμάτων. Όπως φαίνεται στον ψευδοκώδικα που ακολουθεί, αρχικά ο χρήστης μπορεί να επιλέξει τη διεύθυνση από την οποία μπορεί να ξεκινήσει η εκτέλεση του προγράμματος (γραμμή 4). Όσο, δεν έχει διαβαστεί η εντολή τερματισμού με κώδικα 47 (γραμμή 5), η εκτέλεση συνεχίζεται. Στη συνέχεια γίνεται ανάκληση της τρέχουσας εντολής (γραμμή 6), ενώ ακολουθεί η αποκωδικοποίηση (γραμμή 7). Κατά την αποκωδικοποίηση, ελέγχεται ο κώδικας της εντολής που ανακλήθηκε από την μνήμη και λαμβάνουν χώρα οι αντίστοιχες ενέργειες και λειτουργίες. Αν δεν πρόκειται να γίνει άλμα σε συγκεκριμένη διεύθυνση, τότε η εκτέλεση συνεχίζεται από την εντολή που ακολουθεί (γραμμή 8). Από την άλλη πλευρά, κατά τη διαδικασία ανάκλησης της εντολής, διαβάζονται 4 byte (σταθερό μήκος εντολής) από τη μνήμη τα οποία τελικά είναι διαθέσιμα για την αποκωδικοποίηση μέσω του καταχωρητή IR που είναι υλοποιημένος στο λογισμικό.

Εκτέλεση εντολής

Ανάκληση από τη μνήμη

  1. run:

  2. print("Execute code from program memory")

  3. print("Enter starting address:")

  4. PC=int(read())

  5. while (progmem[PC]!=47)

  6. fetch()

  7. decode_execute()

  8. if (jump=0) PC+=4

  9. if PC>len(progmem)break

  10. print("Program execution completed")

  1. fetch:

  2. MAR=PC

  3. for i in range (0,4,1)//

  4. MBR[i]=progmem[MAR+i]

  5. IR[i]=MBR[i]


Βήμα 7 Προγραμματισμός του πειραματικού μΕ (καταχώρηση εντολών και εκτέλεση προγράμματος)

Είναι σημαντικό να αναφερθεί ότι, όλα τα προηγούμενα βήματα βάσει του εκπαιδευτικού σεναρίου που έχει δημιουργήσει ο εκπαιδευτικός να είναι ήδη υλοποιημένα και ο φοιτητής να κληθεί στη συνέχεια μόνο για να προγραμματίσει τον πειραματικό μΕ. Ταυτόχρονα όμως, είναι στην ευχέρεια του εκπαιδευτικού να αποφασίσει σε ποιο στάδιο και πώς θα εμπλέξει τους φοιτητές.

Μόλις ο φοιτητής ενεργοποιήσει τον προσομοιωτή, θα έχει στη διάθεσή του ένα σύνολο από επιλογές όπως φαίνονται στο μενού που ακολουθεί.

[1.Enter Source]

[2.Show Memory]

[3.Execute]

[4.Instruction set]

[5.Clear all]

[0.Exit]

Πιο συγκεκριμένα, οι επιλογές αντιστοιχούν στις ακόλουθες λειτουργίες:

  • Enter Source. Εισαγωγή εντολών στη μνήμη του πειραματικού μοντέλου

  • Show Memory. Εμφάνιση περιεχομένων μνήμης (μαζί με μνημονικά)

  • Execute. Έναρξη εκτέλεσης προγράμματος από επιλεγμένη διεύθυνση

  • Instruction set. Εμφάνιση διαθέσιμου ρεπερτορίου εντολών

  • Clear all. Μηδενισμός περιεχομένου μνήμης και καταχωρητών

  • Exit. Έξοδος από τον προσομοιωτή


Βήμα 8 Προγραμματισμός του πειραματικού μΕ (καταχώρηση εντολών και εκτέλεση προγράμματος)

Στη συνέχεια, γίνεται καταχώρηση των επιθυμητών εντολών Assembly που αποτελούν το πρόγραμμα που θέλουμε να αναπτύξουμε. Η διαδικασία είναι εξαιρετικά απλή, αφού ο χρήστης πληκτρολογεί απλά τον κώδικα της εντολής με όποια παράμετρο τυχόν ζητηθεί. Μετά από αυτό, τα πλήρη στοιχεία της εντολής εμφανίζονται στην αντίστοιχη θέση μνήμης. Δηλαδή, καθώς ο χρήστης εισάγει τις εντολές, μπορεί και βλέπει κάθε φορά τα νέα περιεχόμενα της μνήμης καθώς αυτά διαμορφώνονται. Για να είναι πιο κατανοητό το περιεχόμενο της μνήμης, εμφανίζεται και το μνημονικό κάθε εντολής που είναι αποθηκευμένη.

Στη συνέχεια, φαίνεται η διαδικασία για την εισαγωγή δύο εντολών.

:1

Starting Address (e.g. 0,4,8,...)

:0

Enter instruction opcode only (enter 99 to finish)

[0]:01

Instruction= 01 RDA (A <-- Keyboard)

 

>> MEMORY <<

Address mnemonic byte0 byte1 byte2 byte3

------- --------------- -------- ------- ------- -------

[ 0 ]: RDA 01 00 00 00

 

:2

Instruction= 02 WRA (Console <-- A)

 

>> MEMORY <<

address mnemonic byte0 byte1 byte2 byte3

------- -------- -------- ------- -------- -------

[ 0 ]: RDA 01 00 00 00

[ 4 ]: WRA 02 00 00 00



Ως παράδειγμα, θα θεωρήσουμε ότι θα εισάγουμε το ακόλουθο πρόγραμμα:


RDA

Start:

WRA

DEC A

JNZ Start

STOP

Έτσι, στην οθόνη θα εμφανιστούν τα περιεχόμενα της μνήμης τα οποία θα έχουν διαμορφωθεί ως εξής:


>> MEMORY <<

address mnemonic byte0 byte1 byte2 byte3

------- -------- ----- ----- ----- -----

[ 0 ]: RDA 01 00 00 00

[ 4 ]: WRA 02 00 00 00

[ 8 ]: DEC 08 00 00 00

[ 12]: JNZ 09 00 00 04

[ 16]: STOP 47 00 00 00




2.7 Υποδειγματικά εκπαιδευτικά σενάρια

2.7.1 Εκπαιδευτικό σενάριο #1 - ο φοιτητής μελετά έναν καταχωρητή

Ο φοιτητής θα διερευνήσει:

(1) τι είναι ένας καταχωρητής και πώς λειτουργεί

(2) ποιες λειτουργίες υποστηρίζει

(3) ποια σήματα χρησιμοποιούνται για τον έλεγχο και την επικοινωνία με τον καταχωρητή

(4) πώς μπορούν να υλοποιηθούν πρόσθετες λειτουργίες για τον καταχωρητή

Σχήμα 2.15 Συνδεσμολογία διαύλων για το πείραμα γνωριμίας με τον καταχωρητή

Πορεία εργασίας

(1) συλλογή υλικού για τη λειτουργία του καταχωρητή, μελέτη λειτουργίας HB

(2) σύνδεση του HB στο Raspberry Pi

(3) πραγματοποίηση πειραματισμού με την εντολή MOV A,5

(4) τροποποίηση ενσωματωμένου λογισμικού του καταχωρητή για υλοποίηση πρόσθετων λειτουργιών

(5) Ανάπτυξη διαφορετικής δοκιμής για κάθε καταχωρητή

(6) Συγγραφή τεχνικής έκθεσης για την πορεία εργασίας

Ακολουθεί ένα παράδειγμα ανάπτυξης πρόσθετων λειτουργιών για τον καταχωρητή. Εδώ, προστίθενται οι λειτουργίας για αύξηση (INC) και μείωση (DEC) περιεχομένου, καθώς και για ολίσθηση δεξιά (SHR) ή αριστερά (SHL), σχήμα 2.16.


Σχήμα 2.16 Πρόσθετες λειτουργίες καταχωρητή

2.7.2 Εκπαιδευτικό σενάριο #2

Εδώ ο φοιτητής υλοποιεί μια πειραματική αρχιτεκτονική, καθώς και τις αντίστοιχες εντολές Assembly

Βήμα 1 Σχεδίαση Πειραματικής αρχιτεκτονικής

Αρχικά γίνεται ένας σχεδιασμός κυρίως των φυσικών μονάδων που θα περιλαμβάνει ο πειραματικός μΕ (σχήμα 2.17).

Σχήμα 2.16 Φυσικές μονάδες πειραματικού μΕ

Στοιχεία αρχιτεκτονικής:

  • 4x8bit καταχωρητές Γενικής Χρήσης (REG-A, REG-B, REG-C και REG-D)

  • μία 8bit Αριθμητική και Λογική Μονάδα (ALU)

  • ένας καταχωρητή κατάστασης (SREG)

  • δύο 8bit καταχωρητές Ειδικής Χρήσης (REG-PC, REG-SP)

  • μια μονάδα ελέγχου (υλοποίηση στο λογισμικό)

Για την υλοποίηση των παραπάνω στοιχείων, θα χρησιμοποιηθεί ενσωματωμένο λογισμικό για τη λειτουργία του καταχωρητή (RBRegister Block), καθώς και λογισμικό για πιο σύνθετα HB όπως η αριθμητική και λογική μονάδα (CBComplex Block).

Βήμα 2 Υλοποίηση φυσικού συστήματος

Εφόσον έχει ξεκαθαριστεί ποιες μονάδες και που θα υλοποιηθούν, προχωράμε στη φυσική διασύνδεση (σχήμα 2.18).

Σχήμα 2.17α Τελική μορφή συστήματος

Σχήμα 2.17β Φυσική μορφή συστήματος

Βήμα 3 Υλοποίηση λειτουργίας καταχωρητών και ΑΛΜ

Ακολουθεί ο ψευδοκώδικας που δείχνει την προσθήκη λειτουργιών στην ΑΛΜ.


1. //Multiplication

2. case 8: TEMP=Number_A*Number_B;

3. //Store high and low byte

4. Number_A=high(TEMP); Number_B=low(TEMP);

5. //Number increment

6.//Check if greater than max 8bit value

7. case 9: if Number_A<255 Number_A++; else

8. {Number_A=0; STATUS=0001;}

9. //Numerical comparison & subtraction

10. case 10: TEMP=Number_A-Number_B; if TEMP=0

11. {Number_A=TEMP; STATUS=1000;}

12. else if TEMP>0 {Number_A=TEMP;STATUS=0000;}

13. else STATUS=0100; //STATUS=ZNXO (Z=Zero flag,

14. //N=Negative flag, X=not used, O=Overflow flag)

Βήμα 4 Σχεδίαση και υλοποίηση ρεπερτορίου εντολών

Ο πίνακας 2.4 δείχνει με λεπτομέρεια τις εντολές Assembly που θα αναπτυχθούν (κώδικας, ονομασία, ορίσματα).

Πίνακας 2.4 Ρεπερτόριο εντολών πειραματικού μΕ

Στη συνέχεια φαίνεται η υλοποίηση ορισμένων ενδεικτικών εντολών Assembly (Επιλεγμένες εντολές από τον προηγούμενο πίνακα)

ΠΑΡΑΔΕΙΓΜΑ 1

Ανάγνωση ακέραιου από το πληκτρολόγιο και αποθήκευση στον καταχωρητή Α

#RDA (A Keyboard)

opcode=1:

print("A=") //Μήνυμα εισαγωγής αριθμού

A=int(read()) //Ανάγνωση από το πληκτρολόγιο

signalDATA(A) //Εφαρμογή στο δίαυλο δεδομένων

signalADDR(1) //Καθορισμός καταχωρητή προορισμού

//addr=1=register A

signalCTRL(2) //Καθορισμός εντολής στον προορισμό (φόρτωση)

send_clock() //Αποστολή παλμού ρολογιού (διακοπή)


ΠΑΡΑΔΕΙΓΜΑ 2

Εμφάνιση περιεχομένου του καταχωρητή Α

#WRA (console A)

opcode=3:

signalADDR(1) //Καθορισμός διεύθυνσης προέλευσης (addr=1)

signalCTRL(1) //Καθορισμός εντολής για την προέλευση (read)

send_clock() // Αποστολή παλμού ρολογιού (διακοπή)

TEMP_A=readDATA()//Ανάγνωση από τον καταχωρητή A

print("A=",TEMP_A)//Εμφάνιση περιεχομένου καταχωρητή


ΠΑΡΑΔΕΙΓΜΑ 3

Πρόσθεση του περιεχομένου των καταχωρητών Α,Β

#ADD (A A+B)

opcode=4:

//υπολειτουργία: READ REGISTER A

signalADDR(1) //Καθορισμός διεύθυνσης προέλευσης (addr=1=REG A)

signalCTRL(1) //Καθορισμός εντολής προέλευσης (read)

send_clock() //Αποστολή CLOCK (interrupt)

TEMP_A=readDATA() //Λήψη δεδομένων από τον καταχωρητή A

 

//υπολειτουργία: READ REGISTER B

signalADDR(2) //Καθορισμός διεύθυνσης προέλευσης (addr=2=REG B)

signalCTRL(1) //Καθορισμός εντολής προέλευσης (read)

send_clock() //Αποστολή CLOCK (interrupt)

TEMP_B=readDATA() //Λήψη δεδομένων από τον καταχωρητή B

 

//υπολειτουργία: LOAD A to ALU

signalDATA(TEMP_A) //Εφαρμογή του πρώτου αριθμού στο Data bus

signalADDR(5) //Καθορισμός διεύθυνσης προορισμού

//addr=5=ALU

signalCTRL(1) //Φόρτωση του Α στο Number_A της ΑΛΜ

send_clock() //Αποστολή CLOCK (interrupt)

 

//sub-operation: LOAD B to ALU

signalDATA(TEMP_B) //Εφαρμογή του δεύτερου αριθμού στο Data bus

signalADDR(5) //Καθορισμός διεύθυνσης προορισμού

//addr=5=ALU

signalCTRL(2) //Φόρτωση του Β στο Number_Β της ΑΛΜ

send_clock() //Send clock pulse (interrupt)


//υπολειτουργία: Εκτέλεση AA+B in ALU

signalADDR(5) //Set destination address

//addr=5=ALU

signalCTRL(4) //Set command for A+B

send_clock() //Αποστολή CLOCK (interrupt)

 

//υπολειτουργία: READ Result from ALU

signalADDR(5) //Καθορισμός διεύθυνσης προέλευσης (addr=5=ALU)

signalCTRL(5) //Καθορισμός εντολής για την ΑΛΜ (read Number_A)

send_clock() //Αποστολή CLOCK (interrupt)

TEMP_A=readDATA() //Ανάγνωση αποτελέσματος

 

//υπολειτουργία: STORE Result to REGISTER A

signalDATA(TEMP_A) //Εφαρμογή A στο Data Bus

signalADDR(1) //Καθορισμός καταχωρητή προορισμού

//addr=1=register A

signalCTRL(2) //Καθορισμός εντολής για τον προορισμό (load)

send_clock() // Αποστολή CLOCK (interrupt)



Παράδειγμα προγραμματισμού του πειραματικού μΕ που μόλις υλοποιήθηκε (στα προηγούμενα βήματα)


Έστω ότι θα αναπτυχθεί πρόγραμμα που θα υπολογίζει το άθροισμα 10 αριθμών που είναι αποθηκευμένοι στη μνήμη (αρχική διεύθυνση A0h). Αρχικά, οι 10 αριθμοί διαβάζονται από το πληκτρολόγιο.

Το πρόγραμμα θα αποτελείται από τις ακόλουθες ενότητες:


(α) Ανάγνωση 10 αριθμών από το πληκτρολόγιο και αποθήκευση στη μνήμη

(β) Υπολογισμός αθροίσματος


Ακολουθεί ο κώδικας, καθώς και το σχήμα 2.19 που δείχνει το αντίστοιχο διάγραμμα ροής.

1 MOV B,10 //Ανάγνωση 10 αριθμών

3 Start:

4 RDA //Ανάγνωση αριθμού

5 STA A0 //Αποθήκευση του A στη θέση [A0+[B]]

6 DEC B //Μείωση του Β (B=B-1)

7 JNZ Start //Αν B<>0, τότε μετάβαση στο Start

8 MOV B,10 //Πλήθος αριθμών που θα διαβαστούν

//από τη μνήμη

9 Start2:

10 LDA A0 //Ανάγνωση από τη θέση [A0+[B]]

11 ADD C,A //Υπολογισμός αθροίσματος

12 DEC B //Μείωση του B (B=B-1)

13 JNZ Start2 //Αν B<>0, τότε μετάβαση στο Start2

14 MOV A,C //Αποθήκευση αθροίσματος στο A

15 WRA //Εμφάνιση αθροίσματος

//(καταχωρητής A)

16 STOP


Σχήμα 2.19 Πρόγραμμα Assembly και διάγραμμα ροής


Μετά την καταχώρηση των εντολών Assembly, το περιεχόμενο της μνήμης διαμορφώνεται σύμφωνα με τον πίνακα 2.5.


Πίνακας 2.5 Το πρόγραμμα στη μνήμη


2.7 Συμπεράσματα για την Υβριδική Πλατφόρμα Προσομοίωσης (ΥΠΠ)

Συνοψίζοντας τη φιλοσοφία και τα χαρακτηριστικά της προτεινόμενης ΥΠΠ που παρουσιάστηκε στις προηγούμενες ενότητες, σημειώνονται τα ακόλουθα:


  • Η ΥΠΠ αφορά στην εκμάθηση των μικροεπεξεργαστών

  • Το προτεινόμενο σύστημα αντιμετωπίζει αποτελεσματικά τα μειονεκτήματα των υφιστάμενων εργαλείων (λογισμικό & υλικό)

  • Δίνει την ελευθερία στους καθηγητές και τους φοιτητές να σχεδιάσουν οποιοδήποτε πειραματικό μικροεπεξεργαστή (για εκπαιδευτικούς λόγους)

  • Οι φοιτητές έχουν τώρα περισσότερες δυνατότητες (σχεδίαση αρχιτεκτονικής, ανάπτυξη γλώσσας Assembly, κλπ)

  • Υποστηρίζει το μεταγνωστισμό, όπου οι φοιτητές μπορούν να εφαρμόσουν τη γνώση που αποκτήθηκε σε νέα αυθεντικά προβλήματα

  • Η πλατφόρμα αυτή είναι κατάλληλη και για την διερευνητική-ανακαλυπτική μάθηση