9 ο Μαθητικό Συνέδριο Πληροφορικής Κεντρικής Μακεδονίας Θεσσαλονίκη, 25-28 Απριλίου 2017, ΝΟΗΣΙΣ "My Binary Logic" Ένας προσομοιωτής λογικών πυλών στο Scratch Κωνσταντίνος Παρασκευόπουλος Καθηγητής Πληροφορικής ΠΕ19 MSc Μαθητές Γ Γυμνασίου Ελληνικό Κολλέγιο Θεσσαλονίκης Εκπαιδευτικός Οργανισμός Ελληνικό Κολλέγιο Θεσσαλονίκης
Εισαγωγή Ο σκοπός της εργασίας Στην παρακάτω εργασία, χρησιμοποιήσαμε τη γλώσσα προγραμματισμού Scratch για να οπτικοποιήσουμε και να προσομοιώσουμε τη λειτουργία μερικών από τις πλέον βασικές λογικές πύλες. Συγκεκριμένα σχεδιάσαμε και προγραμματίσαμε τη λειτουργία των πυλών OR, AND, NOT, NAND, NOR, XOR και XNOR. Στη συνέχεια χρησιμοποιήσαμε τις παραπάνω πύλες για να δημιουργήσουμε και να προσομοιώσουμε τη λειτουργία πιο σύνθετων λογικών κυκλωμάτων όπως είναι ο Half-Adder και ο Full-Adder.
Λογικές Πύλες Οι δομικές μονάδες κάθε ολοκληρωμένου κυκλώματος Τα ψηφιακά κυκλώματα είναι σχεδιασμένα έτσι ώστε να λαμβάνουν αποφάσεις. Συνήθως δέχονται στην είσοδο δύο ή περισσότερες τιμές και παράγουν μία ή περισσότερες τιμές στην έξοδο. Η διαδικασία αυτή γίνεται με τη βοήθεια των λογικών πυλών (logic gates). Η σημασία των λογικών κυκλωμάτων στην επιστήμη των ηλεκτρονικών υπολογιστών είναι προφανής, καθώς αποτελούν τις δομικές μονάδες κάθε ολοκληρωμένου κυκλώματος.
Ένα πρωτότυπο λογισμικό Για την προσομοίωση λογικών πυλών και κυκλωμάτων Για το λόγο αυτό, δημιουργήσαμε ένα πρωτότυπο λογισμικό προσομοίωσης λογικών πυλών και λογικών κυκλωμάτων ώστε να βοηθήσουμε τους συμμαθητές μας στην καλύτερη κατανόηση της λειτουργίας τους. Για τον προγραμματισμό του προσομοιωτή, χρησιμοποιήσαμε τη γλώσσα προγραμματισμού Scratch. Η γλώσσα Scratch είναι μια σχετικά καινούργια γλώσσα προγραμματισμού με γραφικό περιβάλλον με την οποία μπορούμε να κατασκευάσουμε εφαρμογές εύκολα, γρήγορα και διασκεδαστικά, ενώ είναι ιδανική για αρχάριους προγραμματιστές.
Αντιμέτωποι με την Άλγεβρα Boole Δημιουργώντας απλές και σύνθετες λογικές προτάσεις Στο ξεκίνημα της εργασίας ήρθαμε αντιμέτωποι με την Άλγεβρα Boole. Ο υπολογιστής, εκτός από αριθμητικές πράξεις, έχει τη δυνατότητα να εκτελεί και συγκρίσεις, δηλαδή να επεξεργάζεται λογικά δεδομένα. Χρησιμοποιώντας τα λογικά σύμβολα της Άλγεβρας Boole, μπορούμε να παρουσιάσουμε αυτά τα λογικά δεδομένα, δημιουργώντας απλές ή σύνθετες λογικές προτάσεις.
Η Άλγεβρα Boole Λογικές προτάσεις και Άλγεβρα Boole Μία πρόταση λέγεται λογική όταν μπορεί να χαρακτηριστεί Αληθής ή Ψευδής. Λογική Πρόταση Αληθής Ψευδής Παρουσίαση λογικών προτάσεων με μαθηματικά σύμβολα George Boole Ο πρώτος που διατύπωσε τους βασικούς κανόνες με τους οποίους οι λογικές προτάσεις μπορούν να παρουσιαστούν με μαθηματικά σύμβολα, ήταν ο Άγγλος μαθηματικός George Boole
Η Άλγεβρα Boole Οι Πίνακες Αλήθειας Οι κανόνες που καθορίζουν τις βασικές λογικές πράξεις ορίζονται από Πίνακες Αλήθειας στους οποίους περιλαμβάνονται όλοι οι δυνατοί συνδυασμοί των τιμών που μπορούν να πάρουν οι λογικές μεταβλητές καθώς και τα αποτελέσματα που προκύπτουν από αυτούς τους συνδυασμούς. Πίνακες Αλήθειας Α Β Α AND B A OR B A XOR B A NAND B A NOR B A XNOR B Αληθής Αληθής Αληθής Αληθής Ψευδής Ψευδής Ψευδής Αληθής Αληθής Ψευδής Ψευδής Αληθής Αληθής Αληθής Ψευδής Ψευδής Ψευδής Αληθής Ψευδής Αληθής Αληθής Αληθής Ψευδής Ψευδής Ψευδής Ψευδής Ψευδής Ψευδής Ψευδής Αληθής Αληθής Αληθής Πίνακας Αλήθειας A Αληθής Ψευδής NOT A Ψευδής Αληθής
Άλγεβρα Boole Η εφαρμογή της στη σχεδίαση απλούστερων ηλεκτρονικών κυκλωμάτων Όπως είδαμε, στις πράξεις της Άλγεβρας Boole χρησιμοποιούνται μεταβλητές που παίρνουν δύο μόνο τιμές και δίνουν ως αποτέλεσμα πάλι δίτιμες μεταβλητές. χμμμ.. Νομίζω ότι με την Άλγεβρα Boole μπορώ να απλοποιήσω τη σχεδίαση των ηλεκτρονικών κυκλωμάτων Claude Shannon Το 1938 ο C. Shannon έδειξε ότι με την Άλγεβρα Boole μπορεί να απλοποιήσει τη σχεδίαση των ηλεκτρονικών κυκλωμάτων.
Λογικές Πύλες Τα ηλεκτρονικά κυκλώματα που εκτελούν πράξεις της Άλγεβρας Boole Τα ηλεκτρονικά κυκλώματα που εκτελούν τις βασικές πράξεις της Άλγεβρας Boole καλούνται Λογικές Πύλες. Κάθε τέτοια πύλη δέχεται στην είσοδό της σήματα με τη μορφή υψηλής ή χαμηλής ηλεκτρικής τάσης και δίνει στην έξοδό της ένα μοναδικό λογικό αποτέλεσμα με τη μορφή υψηλής ή χαμηλής ηλεκτρικής τάσης. Λογική Πύλη 2-5v Υψηλή Τάση Λογικό «1» - Αληθής 0-0.8v Χαμηλή Τάση Λογικό «0» - Ψευδής
Λογικές Πύλες Υπάρχουν διάφορες λογικές πύλες. Οι λογικές πύλες που υποστηρίζονται από τον προσομοιωτή είναι οι: NOT OR NOR XNOR AND NAND XOR Στις επόμενες διαφάνειες θα περιγράψουμε τη λειτουργίας τους δίνοντας τους πίνακες αλήθειας καθώς και το σχήμα με το οποίο συμβολίζονται.
Λογικές Πύλες Η λογική πύλη NOT Υλοποιεί τη λογική πράξη «Άρνηση». Έχει μια είσοδο και μια έξοδο. Όταν η είσοδος είναι 1 η έξοδος είναι 0, ενώ όταν η είσοδος είναι 0 η έξοδος είναι 1, δηλαδή αντιστρέφει την αξία της εισόδου. Είσοδοι Έξοδος Κύκλωμα Α NOT A 0 1 1 0
Λογικές Πύλες Η λογική πύλη AND Υλοποιεί τη λογική πράξη «Σύζευξη». Έχει δύο εισόδους και μια έξοδο. H έξοδος είναι 1, όταν όλες οι είσοδοι είναι 1. Είσοδοι Έξοδος Κύκλωμα Α Β Α AND B 0 0 0 0 1 0 1 0 0 1 1 1
Λογικές Πύλες Η λογική πύλη OR Υλοποιεί τη λογική πράξη «Διάζευξη». Έχει δύο εισόδους και μια έξοδο. H έξοδος είναι 1, όταν τουλάχιστον μια είσοδος είναι 1. Είσοδοι Έξοδος Κύκλωμα Α Β Α OR B 0 0 0 0 1 1 1 0 1 1 1 1
Λογικές Πύλες Η λογική πύλη NAND Αποτελείται από μια πύλη AND και μια πύλη NOT. Η πύλη NAND δίνει την αντίθετη έξοδο από την AND, δηλαδή δίνει λογικό 1 όταν υπάρχει τουλάχιστο ένα λογικό 0 στις εισόδους. Είσοδοι Έξοδος Κύκλωμα Α Β Α NAND B 0 0 1 0 1 1 1 0 1 1 1 0
Λογικές Πύλες Η λογική πύλη NOR Αποτελείται από μια πύλη OR και μια πύλη NOT. Η πύλη δίνει την αντίθετη έξοδο από την OR, δηλαδή δίνει λογικό 1 όταν και οι δύο είσοδοι είναι 0. Είσοδοι Έξοδος Κύκλωμα Α Β Α NOR B 0 0 1 0 1 0 1 0 0 1 1 0
Λογικές Πύλες Η λογική πύλη XNOR Αποτελείται από μια πύλη OR και μια πύλη NOT. Η πύλη δίνει την αντίθετη έξοδο από την OR, δηλαδή δίνει λογικό 1 όταν και οι δύο είσοδοι είναι 0. Είσοδοι Έξοδος Κύκλωμα Α Β Α XNOR B 0 0 1 0 1 0 1 0 0 1 1 1
Συνδυαστικά Λογικά Κυκλώματα Half Adder και Full Adder Οι παραπάνω λογικές πύλες μπορούν να συνδυαστούν και να δημιουργήσουν ένα συνδυαστικό λογικό κύκλωμα. Το κύκλωμα του Ημιαθροιστή (Half Adder) και το κύκλωμα του Αθροιστή (Full Adder) είναι δύο από τα περισσότερο γνωστά συνδυαστικά λογικά κυκλώματα και για αυτό επιλέξαμε να τα υλοποιήσουμε στον προσομοιωτή που κατασκευάσαμε.
Συνδυαστικά Λογικά Κυκλώματα Το κύκλωμα του Ημιαθροιστή (Half Adder) Ημιαθροιστής (Half Adder), λέγεται το συνδυαστικό κύκλωμα το οποίο εκτελεί την πρόσθεση δύο δυαδικών ψηφίων σύμφωνα με τον παρακάτω πίνακα: + 0 1 0 0 1 1 1 10 Η πρόσθεση 1 + 1 δίνει άθροισμα 0 και κρατούμενο (carry) 1, το οποίο μεταφέρεται στην επόμενη πιο σημαντική τάξη ψηφίων. Παράδειγμα πρόσθεσης: 1 1 1 1 1 κρατούμενα 0 1 0 1 0 0 1 0 =82 (10) + 0 0 1 1 0 1 1 0 =54 (10) 1 0 0 0 1 0 0 0 =136 (10)
Συνδυαστικά Λογικά Κυκλώματα Το κύκλωμα του Ημιαθροιστή (Half Adder) Αν Α, Β είναι δυαδικά ψηφία, τότε το άθροισμα τους S (Sum) και το κρατούμενο της πρόσθεσής τους c (carry) φαίνονται στον παρακάτω πίνακα αλήθειας. Είσοδοι Πίνακας Αλήθειας του Ημιαθροιστή Έξοδος Α Β S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Κύκλωμα άθροισμα κρατούμενο
Συνδυαστικά Λογικά Κυκλώματα Το κύκλωμα του Αθροιστή (Full Adder) Ο Αθροιστής είναι το συνδυαστικό κύκλωμα που εκτελεί την πρόσθεση τριών δυαδικών αριθμών και, συγκεκριμένα, δύο σημαντικών και ενός κρατουμένου. Το κρατούμενο ενδέχεται να έχει παραχθεί από προηγούμενη άθροιση. Input Output Κύκλωμα A B Cin Cout S 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 Α, Β: προσθετέοι S: Άθροισμα Cin: Προηγούμενο κρατούμενο Cout: Νέο κρατούμενο
Προγραμματισμός του προσομοιωτή Δημιουργία Υπόβαθρου για τη Διεπαφή Χρήστη Αφού κατανοήσαμε πλήρως τη λειτουργία των λογικών πυλών, ήρθε η ώρα να προγραμματίσουμε το λογισμικό του προσομοιωτή στο Scratch. Ξεκινήσαμε από τη δημιουργία της διεπαφής χρήστη στο σχεδιαστικό εργαλείο του Scratch. Α Ο τίτλος της εφαρμογής Διακόπτες για τον έλεγχο της εισόδου στα κυκλώματα Δ Β Χώρος κυκλωμάτων Γ Μενού επιλογής κυκλωμάτων
Προγραμματισμός του προσομοιωτή Δημιουργία αντικειμένων για τις Λογικές Πύλες και τα Λογικά Κυκλώματα Στη συνέχεια σχεδιάστηκαν, τοποθετήθηκαν και προγραμματίστηκαν οι λογικές πύλες και τα συνδυαστικά λογικά κυκλώματα ως εξής: Α Γ Για κάθε κύκλωμα δημιουργήσαμε ένα νέο αντικείμενο. Προγραμματίσαμε το κάθε κύκλωμα-αντικείμενο να αλλάζει ενδυμασία ανάλογα με την είσοδο που θα έπαιρνε από τα χειριστήρια εισόδου. Β Για κάθε κύκλωμα-αντικείμενο σχεδιάσαμε κατάλληλες ενδυμασίες ώστε να αντιστοιχούν στις διαφορετικές καταστάσεις του Πίνακα Αλήθειας του κάθε κυκλώματος. Πίνακας Αλήθειας AND Είσοδοι Έξοδος Α Β Α AND B 0 0 0 0 1 0 1 0 0 1 1 1
Προγραμματισμός του προσομοιωτή Δημιουργία των χειριστηρίων εισόδου Στη συνέχεια σχεδιάστηκαν, τοποθετήθηκαν και προγραμματίστηκαν τα χειριστήρια εισόδου για τα λογικά κυκλώματα: Α Γ Δημιουργήσαμε τρία νέα αντικείμενα Προγραμματίσαμε το κάθε χειριστήριο εισόδουαντικείμενο να αλλάζει ενδυμασία ανάλογα με την επιθυμία του χρήστη. Επίσης δημιουργήσαμε κατάλληλα συμβάντα για να ενημερώνονται τα αντικείμενα των λογικών κυκλωμάτων. Β Για κάθε χειριστήριο εισόδουαντικείμενο σχεδιάσαμε κατάλληλες ενδυμασίες ώστε να αντιστοιχούν στις δύο λογικές καταστάσεις «0» και «1». Είσοδος Α Είσοδος Β Συμβάν χρήστη Αλλαγή ενδυμασίας Κρατούμενο Μετέδωσε συμβάν και ενημέρωσε το τρέχων κύκλωμα
Προγραμματισμός του προσομοιωτή Δημιουργία μενού επιλογής Λογικών Κυκλωμάτων Τέλος σχεδιάστηκαν, τοποθετήθηκαν και προγραμματίστηκαν τα κουμπιά για το μενού επιλογής λογικών κυκλωμάτων : Α Δημιουργήσαμε εννέα αντικείμενα. Ένα κουμπί για κάθε λογικό κύκλωμα που υποστηρίζει ο προσομοιωτής. Β Προγραμματίσαμε το κάθε κουμπί ώστε με το που πατηθεί να ενημερώνει τα λογικά κυκλώματα και τα χειριστήρια εισόδου για το πιο είναι το τρέχων επιλεγμένο λογικό κύκλωμα. Συμβάν χρήστη Καθολική μεταβλητή crn_gate Μετέδωσε συμβάν και ενημέρωσε για το πιο είναι το τρέχων επιλεγμένο κύκλωμα
Προγραμματισμός του προσομοιωτή Τα συμβάντα για την επικοινωνία μεταξύ των αντικειμένων Στην παρακάτω εικόνα μπορείτε να δείτε πως επικοινωνούν μεταξύ τους όλα τα αντικείμενα του προσομοιωτή δημιουργώντας συμβάντα: Συμβάντα input_a_on και input_a_off. Προκαλούν αλλαγή ενδυμασίας στο τρέχων λογικό κύκλωμα. Συμβάν change_gate. Ενημερώνει ποια χειριστήρια εισόδου να εμφανιστούν Συμβάν change_gate. Ενημερώνει ποιο λογικό κύκλωμα να εμφανιστεί.
Προγραμματισμός του προσομοιωτή Το τελικό αποτέλεσμα Μπορείτε να κατεβάσετε τον προσομοιωτή και να τον ανοίξετε στον μεταγλωττιστή του Scratch από την διεύθυνση : www.hellenic-college.gr/works/scratch-binary-logic
Εκπαιδευτικός Οργανισμός Ελληνικό Κολλέγιο Θεσσαλονίκης Ευχαριστούμε! Κωνσταντίνος Παρασκευόπουλος Καθηγητής Πληροφορικής Ελληνικού Κολλεγίου Θεσσαλονίκης Μαθητές Γ Γυμνασίου Καραγιάννη Ελένη, Καραγιαννάκη Μαρία-Ελένη, Βασιλειάδης Αθανάσιος, Κωστουλίδης Αναστάσιος-Συμεών, Μουτεβελίδης Ιωάννης-Παναγιώτης, Βασιλειάδου Ευαγγελία, Βογιατζή Νίκη, Γοργία Φωτεινή, Ευγενιάδου Πηνελόπη, Τσολακίδου Παναγιώτα