Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής Βασισμένο σε μια εργασία των Καζαρλή, Καλόμοιρου, Μαστοροκώστα, Μπαλουκτσή, Καλαϊτζή, Βαλαή, Πετρίδη
Εισαγωγή Η Εξελικτική Υπολογιστική (ΕΥ) είναι μια σχετικά πρόσφατη επιστήμη που αναπτύσσει μεθόδους και αλγορίθμους που χρησιμοποιούνται κυρίως ως καθολικοί βελτιστοποιητές για δύσκολα προβλήματα βελτιστοποίησης πραγματικού κόσμου. Ο Γενετικός Προγραμματισμός (ΓΠ) αναπτύχθηκε για να εξελίξει βέλτιστο λογισμικό υπολογιστών, χρησιμοποιώντας δενδρική κωδικοποίηση των λύσεων. Ο ΓΠ έχει επίσης χρησιμοποιηθεί για να εξελίξει βέλτιστα άλλους τύπους πολύπλοκων δομών όπως αναλογικά και ψηφιακά κυκλώματα. Για να εφαρμόσουμε έναν αλγόριθμο ΓΠ ή γενικά ΕΥ, πρέπει να δομηθεί μία συνάρτηση Καταλληλότητας (Fitness Function). Η συνάρτηση αυτή θα αξιολογήσει κάθε γενετικά παραγόμενη λύση και θα παρέχει μέτρο της ποιότητας ή της καταλληλότητάς της (fitness). Μέσω της συνάρτησης Καταλληλότητας, ο αλγόριθμος ΕΥ μπορεί να πάρει δείγματα από την ποιότητα των σημείων στο πεδίο αναζήτησης και να οδηγηθεί σε ένα πεδίο καταλληλότητας και τελικά στη βέλτιστη λύση.
Γενετική Εξέλιξη Ψηφιακών Κυκλωμάτων Για να επιτευχθεί γενετική εξέλιξη ψηφιακών κυκλωμάτων, πρέπει να γίνουν τα παρακάτω βήματα: Αρχικά, καθορίζεται μία συγκεκριμένη ρύθμιση εισόδου εξόδου για το επιθυμητό κύκλωμα η οποία περιλαμβάνει: Το πλήθος των εισόδων και εξόδων Ο επιθυμητός πίνακας αληθείας του κυκλώματος που περιλαμβάνει όλους τους δυνατούς συνδυασμούς των εισόδων. Στη συνέχεια, εκτελείται ο αλγόριθμος ΕΥ με σκοπό να βρει βέλτιστες λύσεις στο πρόβλημα, τύπου βέλτιστων ψηφιακών κυκλωμάτων (στο επίπεδο των πυλών), που υπακούουν στις προδιαγραφές. Η συνάρτηση καταλληλότητας του αλγορίθμου καλείται πολλές φορές κατά τη διάρκεια της εκτέλεσης και κάθε φορά τροφοδοτείται με μία γενετικά παραγόμενη λύση, που είναι ουσιαστικά ένα προτεινόμενο ψηφιακό κύκλωμα για το συγκεκριμένο πρόβλημα. Το υπό αξιολόγηση κύκλωμα τροφοδοτείται στον προσομοιωτή με κωδικοποιημένη μορφή που περιγράφει πλήρως τα στοιχεία του κυκλώματος και τις διασυνδέσεις. Τέλος, η συνάρτησης καταλληλότητας πρέπει να προσομοιώσει το προτεινόμενο ψηφιακό κύκλωμα και να υπολογίσει την έξοδό του για όλους τους συνδυασμούς των εισόδων. 3
Προσομοιωτής Ψηφιακών Κυκλωμάτων Μια συνάρτηση καταλληλότητας αυτού του τύπου πρέπει να είναι ένας προσομοιωτής ψηφιακών κυκλωμάτων με δυνατότητα προσομοιώσης και ελέγχου κάθε προτεινόμενης λύση. Ο προσομοιωτής πρέπει να είναι γρήγορος, αξιόπιστος και να είναι κωδικοποιημένος με τη μορφή μιας συνάρτησης, έτσι ώστε να μπορεί να συνεργαστεί με τον αλγόριθμο ΕΥ. Τέτοιοι προσομοιωτές έχουν ήδη προταθεί στο παρελθόν, αλλά οι περισσότεροι μπορούν να χειριστούν μόνο συνδυαστικά κυκλώματα και έχουν γενικά αναπτυχθεί ως πλατφόρμες, αφού είναι μεγάλα σε μέγεθος και χρονοβόρα. Σε αυτή την εργασία, παρουσιάζεται μια νέα μέθοδος κωδικοποίησης και προσομοίωσης ψηφιακών κυκλωμάτων, με σκοπό να χρησιμοποιηθεί ως μια συνάρτηση καταλληλότητας για εξελικτική βελτιστοποίηση. Η προτεινόμενη μέθοδος είναι απλή, γρήγορη, ευέλικτη και εύκολα προσαρμόζεται σε αλγόριθμο ΕΥ για ανακάλυψη βέλτιστων ψηφιακών κυκλωμάτων, τόσο συνδυαστικών, όσο και ακολουθιακών. 4
Μέθοδος Κωδικοποίησης Ψηφιακού Κυκλώματος Για να περιγράψουμε συνολικά ένα κύκλωμα, πρέπει να καθορίσουμε: το πλήθος των πυλών και τον τύπο κάθε πύλης το πλήθος των εισόδων του κυκλώματος το πλήθος των εξόδων του κυκλώματος τις συνδέσεις των εισόδων και εξόδων κάθε πύλης, δηλ. όλες τις διασυνδέσεις του κυκλώματος Δε χρησιμοποιούνται πολύπλοκες δομές δεδομένων. Μια κωδικοποιημένη συμβολοσειρά χρησιμοποιείται για να αποθηκεύσει όλη την πληροφορία του κυκλώματος. Στη συνέχεια, αυτή η συμβολοσειρά είναι εύκολο να τροφοδοτηθεί σε μια συνάρτηση μιας οποιαδήποτε γλώσσας προγραμματισμού. Σε αυτή την εργασία, έχουν χρησιμοποιηθεί μόνο πύλες δύο εισόδων, εκτός από την περίπτωση της μη-πύλης, η οποία έχει μόνο μια είσοδο. Οι πύλες πολλαπλών εισόδων πρέπει απλοποιηθούν σε πύλες δύο εισόδων, πριν μπορέσουν να χρησιμοποιηθούν στην προσομοίωση. 5
Κωδικοποιημένη συμβολοσειρά Η συμβολοσειρά δημιουργείται κομμάτι κομμάτι, χρησιμοποιώντας παραμέτρους συγκεκριμένου μήκους. Σε αυτή την εργασία, χρησιμοποιούνται παράμετροι τριών ψηφίων. Κάθε παράμετρος αναπαριστά ένα συγκεκριμένο χαρακτηριστικό του κυκλώματος και έχει συγκεκριμένο εύρος τιμών. 6
Παράμετροι της Συμβολοσειράς Κωδικοποίησης 7 Αριθμός Ιδιότητα Εύρος τιμών 1.1 Πλήθος πυλών κυκλώματος [001-500] 2.1 Πλήθος εισόδων κυκλώματος [001-500] 3.1 Πλήθος εξόδων κυκλώματος [001-500] 4.1 Τύπος της πύλης 1 4.N Τύπος της πύλης N [000-006] (AND, OR, NOT, NAND, NOR, XOR, XNOR) 5.1.1 Πύλη 1 είσοδος 1 [000-499] (έξοδος της άλλης πύλης) [500-999] (αριθμός εισόδου κυκλώματος) [HIG, LOW] (λογικό 1 ή λογικό 0) 5.1.2 Πύλη 2 είσοδος 2 [NULL] (δεν υπάρχει είσοδος) 5.1.3 Πύλη 1 έξοδος είναι η έξοδος του κυκλώματος 5.N.1 5.N.2 5.N.3 N = πλήθος πυλών κυκλώματος [000-499] (αριθμός εξόδου κυκλώματος) [NOO] (δεν είναι έξοδος κυκλώματος)
Περιγραφή της Μεθόδου Προσομοίωσης Η μέθοδος προσομοίωσης ψηφιακού κυκλώματος που παρουσιάζεται σε αυτή την εργασία, μπορεί να χαρακτηρισθεί ως προσομοίωση διακριτού χρόνου. Ακολουθεί παρόμοιες αρχές με τη μετάδοση ψηφιακών σημάτων μέσω λογικών πυλών. Η μετάδοση σήματος προσομοιώνεται βήμα βήμα, χρησιμοποιώντας διακριτό χρόνο. Τα διακριτά χρονικά διαστήματα παίζουν το ρόλο των διαδοχικών περιόδων σε ένα άτυπο εσωτερικό ρολόι. Η περίοδος του ιδεατού ρολογιού είναι ίση με την καθυστέρηση μιας πύλης, ενώ η μετάδοση του σήματος μέσω των διεπαφών θεωρείται ότι πραγματοποιείται στιγμιαία. 8
Βήματα προσομοίωσης Βήμα 1 : Ανάλυση συμβολοσειράς εισόδου Η προσομοίωση ξεκινάει με την ανάλυση της συμβολοσειράς εισόδου και την εξαγωγή της πληροφορίας του κυκλώματος. Η πληροφορία αυτή αποθηκεύεται σε πίνακες. Βήμα 2 : Αρχικοποίηση κυκλώματος Δημιουργούμε ένα διδιάστατο πίνακα που ονομάζουμε "Κύκλωμα" και στον οποίον αποθηκεύουμε τα δεδομένα που δημιουργούνται κατά την προσομοίωση. Αποτελείται από 7 στήλες και τόσες γραμμές, όσες είναι οι πύλες του κυκλώματος. Τύπος Πύλης Έξοδος Κυκλώματος # Εξόδου Πύλη1 Πύλη2... 9
Βήμα προσομοίωσης 2: Αρχικοποίηση Κυκλώματος x y Πύλη1 Πύλη3 S z=cin Πύλη2 Πύλη4 Πύλη5 Cout Τύπος ς Έξοδος Κυκλώματος Πύλη1 x y XOR null Πύλη2 x y AND null Πύλη3 Πύλη1 z XOR S Πύλη4 Πύλη1 z AND null Πύλη5 Πύλη4 Πύλη2 OR Cout Εξόδου 10
Βήμα προσομοίωσης 3: Ορισμός Εισόδων Κυκλώματος x=1 x y Πύλη1 Πύλη3 S y=0 z=1 z=cin Πύλη2 Πύλη4 Πύλη5 Gate5 Cout Τύπος ς Έξοδος Κυκλώματος Πύλη1 x 1 y 0 XOR null Πύλη2 x 1 y 0 AND null Πύλη3 Πύλη1 z 1 XOR S Πύλη4 Πύλη1 z 1 AND null Πύλη5 Πύλη4 Πύλη2 OR Cout Εξόδου 11
Βήμα προσομοίωσης 4: Υπολογισμός Εξόδων Πυλών x=1 y=0 x y Πύλη1 Gate1 Πύλη3 Gate3 S z=1 z=cin Πύλη2 Gate2 Πύλη4 Gate4 Πύλη5 Gate5 Cout Τύπος ς Έξοδος Κυκλώματος Εξόδου Πύλη1 x 1 y 0 XOR null 1 Πύλη2 x 1 y 0 AND null 0 Πύλη3 Πύλη1 z 1 XOR S Πύλη4 Πύλη1 z 1 AND null Πύλη5 Πύλη4 Πύλη2 OR Cout 12
Βήμα προσομοίωσης 5: Μετακίνηση Εξόδων Κυκλώματος x=1 y=0 x y Πύλη1 Gate1 Πύλη3 Gate3 S z=1 z=cin Πύλη2 Gate2 Πύλη4 Gate4 Πύλη5 Gate5 Cout Τύπος ς Έξοδος Κυκλώματος Εξόδου Πύλη1 x 1 y 0 XOR null 1 Πύλη2 x 1 y 0 AND null 0 Πύλη3 Πύλη1 1 z 1 XOR S Πύλη4 Πύλη1 1 z 1 AND null Πύλη5 Πύλη4 Πύλη2 0 OR Cout 13
Επανάληψη βήματος 4 (Υπολογισμός Εξόδων Κυκλώματος) x=1 y=0 x y Πύλη1 Gate1 Πύλη3 Gate3 S z=1 z=cin Πύλη2 Gate2 Πύλη4 Gate4 Πύλη5 Gate5 Cout Τύπος ς Έξοδος Κυκλώματος Εξόδου Πύλη1 x 1 y 0 XOR null 1 Πύλη2 x 1 y 0 AND null 0 Πύλη3 Πύλη1 1 z 1 XOR S 0 Πύλη4 Πύλη1 1 z 1 AND null 1 Πύλη5 Πύλη4 Πύλη2 0 OR Cout 14
Επανάληψη βήματος 5 (Μετακίνηση Εξόδων Πυλών) x=1 y=0 x y Πύλη1 Gate1 Πύλη3 Gate3 S z=1 z=cin Πύλη2 Gate2 Πύλη4 Gate4 Πύλη5 Gate5 Cout Τύπος Πύλης Έξοδος Κυκλώματος Εξόδου Πύλη1 x 1 y 0 XOR null 1 Πύλη2 x 1 y 0 AND null 0 Πύλη3 Πύλη1 1 z 1 XOR S 0 Πύλη4 Πύλη1 1 z 1 AND null 1 Πύλη5 Πύλη4 1 Πύλη2 0 OR Cout 15
Επανάληψη βήματος 4 (Υπολογισμός Εξόδων Κυκλώματος) x=1 y=0 x y Πύλη1 Gate1 Πύλη3 Gate3 S z=1 z=cin Πύλη2 Gate2 Πύλη4 Gate4 Πύλη5 Gate5 Cout Τύπος Πύλης Έξοδος Κυκλώματος Εξόδου Πύλη1 x 1 y 0 XOR null 1 Πύλη2 x 1 y 0 AND null 0 Πύλη3 Πύλη1 1 z 1 XOR S 0 Πύλη4 Πύλη1 1 z 1 AND null 1 Πύλη5 Πύλη4 1 Πύλη2 0 OR Cout 1 16
Προσομοίωση Βήμα 6: Έλεγχος Σταθερότητας Κυκλώματος Προκειμένου να χειριστούμε ακολουθιακά κυκλώματα και πιθανές αναδράσεις, ελέγχεται η σταθερότητα του κυκλώματος. Αυτό γίνεται επαναλαμβάνοντας τα βήματα 4 και 5 για έναν αριθμό κύκλων, ελέγχοντας παράλληλα αν κάποιες ή όλες από τις εξόδους του κυκλώματος μεταβάλλονται. Σε κάθε επιπλέον επανάληψη, διαδοχικές έξοδοι του κυκλώματος αποθηκεύονται σε έναν διδιάστατο πίνακα. Αν παρατηρηθούν αλλαγές στην έξοδο των πινάκων μετά από ένα συγκεκριμένο πλήθος επαναλήψεων, τότε το κύκλωμα χαρακτηρίζεται ως ταλαντώμενο. 17
Βήμα προσομοίωσης 7: Επιστροφή Εξόδων Κυκλώματος x=1 y=0 x y Πύλη1 Gate1 Πύλη3 Gate3 S S=0 z=1 z=cin Πύλη2 Gate2 Πύλη4 Gate4 Πύλη5 Gate5 Cout Cout=1 Τύπος Πύλης Έξοδος Κυκλώματος Εξόδου Πύλη1 x 1 y 0 XOR null 1 Πύλη2 x 1 y 0 AND null 0 Πύλη3 Πύλη1 1 z 1 XOR S 0 Πύλη4 Πύλη1 1 z 1 AND null 1 Πύλη5 Πύλη4 1 Πύλη2 0 OR Cout 1 18
Το Σετ Ελέγχου 19 Κύκλωμα C/S a Πλήθος Εισόδων Πλήθος Εξόδων Πλήθος Πυλών 2-Εισόδων Ημιαθροιστής C 2 2 2 Πλήρης αθροιστής C 3 2 5 Πολλαπλασιαστής 2-bit C 4 4 8 Πολυπλέκτης 4 σε 1 C 6 1 13 Αποκωδικοποιητής 3 σε 8 C 3 8 19 Αθροιστής 4-bit C 9 5 20 1-bit ALU b C 5 2 25 Πολυπλέκτης 16 σε 1 C 20 1 83 S-R Latch S 2 2 2 a Συνδυαστικό ή Ακολουθιακό κύκλωμα b Μία απλή ALU 1-bit που επιτρέπει 4 πράξεις (AND, OR, NOT και πρόσθεση)
Τα δοκιμαστικα κυκλώματα 1 1. Ημιαθροιστής 2. Πλήρης αθροιστής x y S z=cin Cout 20
Τα δοκιμαστικά κυκλώματα 2 A0 A1 C0 C1 3. Πολλαπλασιαστής 2-bit C2 C3 B0 B1 4. Πολυπλέκτης 4 σε 1 21
Τα δοκιμαστικά κυκλώματα 3 5. Αποκωδικοποιητής 3 σε 8 6. Αθροιστής 4-bit y3 x3 y2 x2 y1 x1 y0 x0 Cin Full Adder Full Adder Full Adder Full Adder Cout S3 C3 S2 C2 S1 C1 S0 22
Τα δοκιμαστικά κυκλώματα 4 7. 1-bit ALU 23
Τα δοκιμαστικά κυκλώματα 5 8. Πολυπλέκτης 16 σε 1 9. S-R Latch S 0 Input 1 0 1 Q _ Output 1 R Input 2 1 0 0 Q Output 2 24
Αποτελέσματα προσομοίωσης Κύκλωμα Πλήθος επαναλή ψεων Χρόνος (μs) Πόροι μνήμης (Bytes) Παραγόμενα bits εξόδου Ποσοστό επιτυχίας 25 Ημιαθροιστής 4 16.3 220 8 100% Πλήρης αθροιστής 10 23.3 436 16 100% Πολλαπλασιαστής 2-bit 16 35.7 740 64 100% Πολυπλέκτης 4 σε 1 26 46.3 948 64 100% Αποκωδικοποιητής 3 σε 8 38 89.0 1972 64 100% Αθροιστής 4-bit 40 86.7 1792 2560 100% 1-bit ALU b 50 105.7 1876 64 100% Πολυπλέκτης 16 σε 1 166 645.7 5708 1048576 100% S-R Latch 4 16.3 220 32 100% Όλα τα πειράματα διεξήχθησαν σε ένα PC που έτρεχε Windows 8.1, επεξεργαστή quad-core στα 2.83 GHz και 4 GB μνήμης.
Συσχέτιση των επαναλήψεων και του χρόνου με το πλήθος των πυλών No of Iterations 180 160 140 120 100 80 60 40 20 700 600 500 400 300 200 100 Time in μs 0 0 10 20 30 40 50 60 70 80 90 No of Gates 0 Iterations Time 26
Συμπεράσματα Στην παρούσα εργασία παρουσιάστηκε μια μέθοδος για προσομοίωση ασύγχρονων ψηφιακών κυκλωμάτων (συνδυαστικών και ακολουθιακών), με σκοπό να χρησιμοποιηθεί ως μια συνάρτηση καταλληλότητας για εξελικτική βελτιστοποίηση. Επιπλέον, παρουδιάστηκε μια μέθοδος κωδικοποίησης ψηφιακών κυκλωμάτων σε συμβολοσειρές, οι οποίες εισάγονται στον προσομοιωτή. Ο προτεινόμενος προσομοιωτής αξιολογήθηκε σε ένα σύνολο 9 ψηφιακών κυκλωμάτων, τόσο συνδυαστικών όσο και ακολουθιακών, αυξανόμενης πολυπλοκότητας. Τα αποτελέσματα δείχνουν ότι ο προτεινόμενος προσομοιωτής είναι ακριβής και γρήγορος στην προσομοιώση των δοκιμαστικών κυκλωμάτων, καταναλώνοντας παράλληλα λίγους πόρους. Είναι απλό και εύκολο να ενσωματώσουμε τον προσομοιωτή σε πολύπλοκο εξελικτικό λογισμικό, έτσι ώστε να χρησιμοποιηθεί ως συνάρτηση καταλληλότητας για εξελικτική βελτιστοποίηση ψηφιακών κυκλωμάτων. 27
Μελλοντική Εργασία Η εργασία αυτή θα μπορούσε να επεκταθεί ως εξής: a) Βελτιστοποίηση στον αριθμό των βημάτων προσομοίωσης ανάλογα με την πολυπλοκότητα του κυκλώματος b) Αναβάθμιση του προσομοιωτή έτσι ώστε να συμπεριλάβει σύγχρονα ψηφιακά κυκλώματα που λειτουργούν με σήματα ρολογιού c) Έλεγχος του προσομοιωτή σε ψηφιακά κυκλώματα μεγάλης κλίμακας d) Επιτρέποντας στον προσομοιωτή το χειρισμό ιεραρχικών κυκλωμάτων που αποτελούνται από σχεδιαστικά μπλοκ. 28