ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ «Εγχειρίδιο Προγράμματος Hope (version 2)» Μαργαρίτα Κουτσουπιά Μηχ. Η/Υ και Πληροφορικής ΠΑΤΡΑ 2009
Το Hope αποτελεί έναν Παράλληλο Εξομοιωτή Σφαλμάτων (Fault Simulator) για σύγχρονα ακολουθιακά κυκλώματα. Μπορεί κανείς να χρησιμοποιήσει το συγκεκριμένο εξομοιωτή τόσο σε περιβάλλον DOS (Windows) όσο και σε περιβάλλον UNIX με μικρές αλλαγές όσον αφορά στα test benches. Στο παρόν εγχειρίδιο θα δοθούν περισσότερες πληροφορίες για την εκτέλεση σε περιβάλλον Windows ενώ για το περιβάλλον UNIX οι εντολές θα έχουν την ίδια μορφή. Το εκτελέσιμο αρχείο για το περιβάλλον UNIX, βρίσκεται μέσα στον ίδιο φάκελο που βρίσκονται και τα υπόλοιπα αρχεία τα οποία χρησιμοποιούνται παρακάτω. Εκτέλεση σε περιβάλλον Windows (DOS) Σαν πρώτο βήμα πρέπει κανείς να μεταβεί με το command prompt (κονσόλα εντολών), στο συγκεκριμένο φάκελο που είναι αποθηκευμένα τα αρχεία εκτέλεσης του hope καθώς και τα αρχεία βιβλιοθηκών και συναρτήσεων που χρησιμοποιεί ο συγκεκριμένος εξομοιωτής. Όταν ο χρήστης βρεθεί στο σωστό path, η βασική μορφή εκτέλεσης της εντολής hope είναι η εξής: hope [options] circuit_file [>outfile] όπου οι παράμετροι options και circuit_file αποτελούν τις επιλογές που παρέχονται ώστε να εξάγονται τα επιθυμητά αποτελέσματα και το όνομα του κυκλώματος που μπαίνει ως παράμετρος στην εντολή hope, αντίστοιχα. Προσδιορισμός Βασικών Επιλογών Σε οποιαδήποτε εκτέλεση της εντολής hope που θέλει κάποιος τα επιστρεφόμενα δεδομένα να αποθηκευτούν σε κάποιο αρχείο, θα πρέπει σε κάθε περίπτωση να δίνει το όνομα του συγκεκριμένου αρχείου, διαφορετικά το αρχείο δε δημιουργείται. Στη συνέχεια παρατίθεται ένας πίνακας με διάφορα ορίσματα που μπορούν να φανούν χρήσιμα. -c fn Οι επιλογές διαβάζονται από το αρχείο fn. (default: Οι επιλογές δίνονται από τη γραμμή εντολών) -D Η λίστα με τα σφάλματα που ανιχνεύονται από κάποιο διάνυσμα δοκιμής γράφεται σε ένα log αρχείο. (default: αναγράφεται ο αριθμός των σφαλμάτων που ανιχνεύονται καθώς και ποια είναι τα συγκεκριμένα σφάλματα). Θα πρέπει να προσδιοριστεί και η επιλογή l. -f fn Τα σφάλματα ορίζονται σε ένα αρχείο με όνομα fn. (default : Τα σφάλματα παράγονται εσωτερικά ) -F fn Καταγράφονται οι σωστές καθώς και οι λανθασμένες αποκρίσεις για τα σφάλματα στο αρχείο 2
fn. Με αυτή την επιλογή, δε χρησιμοποιείται το fault dropping του HOPE, δηλ. τα σφάλματα εξομοιώνονται ταυτόχρονα. -l fn Δημιουργείται log file αρχείο log. (default: δε δημιουργείται κανένα logfile αρχείο) Επιλογές στη διαδικασία εξομοίωσης -N Λειτουργία διάγνωσης μόνο. (Diagnostic mode) Δεν εφαρμόζεται fault dropping, που σημαίνει πως όλα τα σφάλματα εξομοιώνονται για κάθε ένα διάνυσμα δοκιμής. (default: Τα σφάλματα που ανιχνεύονται κατά τη διαδικασία της εξομοίωσης, πετάγονται από τη λίστα σφαλμάτων). -r n Κατάσταση παραγωγής τυχαίων διανυσμάτων δοκιμής (Random Pattern Generation mode). Τα διανύσματα ελέγχου παράγονται με τυχαίο τρόπο. Η εξομοίωση σφαλμάτων τερματίζει είτε όταν ανιχνεύονται όλα τα σφάλματα, είτε όταν έχουν εφαρμοστούν n διανύσματα δοκιμής. (default: -r 224) -s n Αρχικό seed για τη γεννήτρια τυχαίων αριθμών (random()). Αν n=0, το αρχικό seed είναι η τρέχουσα τιμή της ώρας (current time). (default: -s 0 ) -t fn Τα διανύσματα ελέγχου παρέχονται στο αρχείο fn. (default: χρησιμοποιούνται τυχαία διανύσματα). - u Εκτυπώνει όλα τα μη ανιχνεύσιμα σφάλματα σε ένα αρχείο. Το όνομα του συγκεκριμένου αρχείου είναι <ckt>.ufaults. Στο σημείο αυτό να σημειωθεί ότι το HOPE δεν ανανεώνει ένα ήδη υπάρχον αρχείο στο path που δουλεύει κάποιος. Η συγκεκριμένη λίστα σφαλμάτων μπορεί άμεσα να διαβαστεί από το atalanta και από το hope. (default: Δε δημιουργείται κανένα αρχείο). - x (Potential detection mode) Πιθανά Σφάλματα Potentially detected faults are dropped as soon as they are detected. (default: Μόνο τα σφάλματα που ανιχνεύονται πετάγονται από τη λίστα). - 0 Όλα τα φλιπ-φλοπς αρχικοποιούνται στη λογική τιμή 0. - 1 Όλα τα φλιπ-φλοπς αρχικοποιούνται στη λογική τιμή 1. (default: Όλα τα φλιπ-φλοπς αρχικοποιούνται σε απροσδιόριστη κατάσταση unknown (X).) Επιπλέον επιλογές που παρέχονται από το πρόγραμμα -h f Πληροφορίες για το πως είναι η μορφή της λίστας σφαλμάτων -h g On-line user s guide -h n Πληροφορίες για τη μορφή του netlist (κύκλωμα) 3
-h t Πληροφορίες για τη μορφή του αρχείου με τα διανύσματα ελέγχου -h a Ολόκληρο το εγχειρίδιο on-line. (default: Κανένα εγχειρίδιο δεν παρέχεται) Outputs : Στη default κατάσταση, δε δημιουργείται κανένα αρχείο. Η περίληψη της εξομοίωσης σφαλμάτων καταγράφεται στη κλασική έξοδο. Αν έχει οριστεί η επιλογή l τότε δημιουργείται ένα log αρχείο από το HOPE, το οποίο περιέχει περισσότερες πληροφορίες για τη διαδικασία εξομοίωσης σφαλμάτων. Μορφή αρχείων BENCH αρχεία Η μορφή του netlist για το hope είναι σε γενικές γραμμές ίδια με τη μορφή του netlist για τα ISCAS89 εκτός κάποιων μικρών αλλαγών που επισημαίνονται στη συνέχεια. Η πρώτη σειρά θα πρέπει να περιέχει # ακολουθούμενη από το όνομα του κυκλώματος. Οι γραμμές που ξεκινούν με # εκτός της πρώτης, αποτελούν γραμμές σχολίων και δε λαμβάνονται υπόψιν κατά την επεξεργασία του αρχείου. Οι γραμμές σχολίων μπορούν να τοποθετηθούν οπουδήποτε μέσα στο αρχείο *. Επίσης, δεν έχει σημασία η σειρά με την οποία εμφανίζονται οι πύλες μέσα στο αρχείο. Τα ονόματα των πυλών πρέπει να είναι αλφαριθμητικοί χαρακτήρες (0-9, Α-Ζ, a-z, _, [ ή ] ). Οι πύλες που υποστηρίζονται αναφέρονται στη συνέχεια. -------------------------------------------------------------------------------------------------------- Σύνταξη Τύπος Πύλης -------------------------------------------------------------------------------------------------------- INPUT primary input OUTPUT primary output AND and πύλη NAND nand πύλη OR or πύλη NOR nor πύλη XOR 2-εισόδων XOR πύλη XNOR 2-εισόδων XNOR πύλη BUFF ή BUF buffer NOT αντιστροφέας -------------------------------------------------------------------------------------------------------- 4
ΠΑΡΑΔΕΙΓΜΑ: ISCAS89 NETLIST (s298.bench) # s298 # 3 inputs # 6 outputs # 14 D-type flipflops # 44 inverters # 75 gates (31 ANDs + 9 NANDs + 16 ORs + 19 NORs) INPUT(G0) INPUT(G1) INPUT(G2) OUTPUT(G117) OUTPUT(G132) OUTPUT(G66) OUTPUT(G118) OUTPUT(G133) OUTPUT(G67) G10 = DFF(G29) G11 = DFF(G30) G12 = DFF(G34) G13 = DFF(G39) G14 = DFF(G44) G15 = DFF(G56) G16 = DFF(G86) G17 = DFF(G92) G18 = DFF(G98) G19 = DFF(G102) G20 = DFF(G107) G21 = DFF(G113) G22 = DFF(G119) G23 = DFF(G125) G28 = NOT(G130) G38 = NOT(G10) G40 = NOT(G13) G45 = NOT(G12) G46 = NOT(G11) G50 = NOT(G14) G51 = NOT(G23) G54 = NOT(G11) G55 = NOT(G13) G59 = NOT(G12) G60 = NOT(G22) G64 = NOT(G15) II155 = NOT(G16) G66 = NOT(II155) II158 = NOT(G17) G67 = NOT(II158) G76 = NOT(G10) G82 = NOT(G11) G87 = NOT(G16) G91 = NOT(G12) G93 = NOT(G17) G96 = NOT(G14) G99 = NOT(G18) G103 = NOT(G13) G108 = NOT(G112) 5
G114 = NOT(G21) II210 = NOT(G18) G117 = NOT(II210) II213 = NOT(G19) G118 = NOT(II213) G120 = NOT(G124) G121 = NOT(G22) II221 = NOT(G2) G124 = NOT(II221) G126 = NOT(G131) G127 = NOT(G23) II229 = NOT(G0) G130 = NOT(II229) II232 = NOT(G1) G131 = NOT(II232) II235 = NOT(G20) G132 = NOT(II235) II238 = NOT(G21) G133 = NOT(II238) G26 = AND(G28, G50) G27 = AND(G51, G28) G31 = AND(G10, G45, G13) G32 = AND(G10, G11) G33 = AND(G38, G46) G35 = AND(G10, G11, G12) G36 = AND(G38, G45) G37 = AND(G46, G45) G42 = AND(G40, G41) G48 = AND(G45, G46, G10, G47) G49 = AND(G50, G51, G52) G57 = AND(G59, G11, G60, G61) G58 = AND(G64, G65) G62 = AND(G59, G11, G60, G61) G63 = AND(G64, G65) G74 = AND(G12, G14, G19) G75 = AND(G82, G91, G14) G88 = AND(G14, G87) G89 = AND(G103, G96) G90 = AND(G91, G103) G94 = AND(G93, G13) G95 = AND(G96, G13) G100 = AND(G99, G14, G12) G105 = AND(G103, G108, G104) G110 = AND(G108, G109) G111 = AND(G10, G112) G115 = AND(G114, G14) G122 = AND(G120, G121) G123 = AND(G124, G22) G128 = AND(G126, G127) G129 = AND(G131, G23) G24 = OR(G38, G46, G45, G40) G25 = OR(G38, G11, G12) G68 = OR(G11, G12, G13, G96) G69 = OR(G103, G18) G70 = OR(G103, G14) G71 = OR(G82, G12, G13) G72 = OR(G91, G20) G73 = OR(G103, G20) G77 = OR(G112, G103, G96, G19) 6
G78 = OR(G108, G76) G79 = OR(G103, G14) G80 = OR(G11, G14) G81 = OR(G12, G13) G83 = OR(G11, G12, G13, G96) G84 = OR(G82, G91, G14) G85 = OR(G91, G96, G17) G41 = NAND(G12, G11, G10) G43 = NAND(G24, G25, G28) G52 = NAND(G13, G45, G46, G10) G65 = NAND(G59, G54, G22, G61) G97 = NAND(G83, G84, G85, G108) G101 = NAND(G68, G69, G70, G108) G106 = NAND(G77, G78) G109 = NAND(G71, G72, G73, G14) G116 = NAND(G79, G80, G81, G108) G29 = NOR(G10, G130) G30 = NOR(G31, G32, G33, G130) G34 = NOR(G35, G36, G37, G130) G39 = NOR(G42, G43) G44 = NOR(G48, G49, G53) G47 = NOR(G50, G40) G53 = NOR(G26, G27) G56 = NOR(G57, G58, G130) G61 = NOR(G14, G55) G86 = NOR(G88, G89, G90, G112) G92 = NOR(G94, G95, G97) G98 = NOR(G100, G101) G102 = NOR(G105, G106) G104 = NOR(G74, G75) G107 = NOR(G110, G111) G112 = NOR(G62, G63) G113 = NOR(G115, G116) G119 = NOR(G122, G123, G130) G125 = NOR(G128, G129, G130) TEST PATTERN αρχεία Η γραμμή που ξεκινάει με * αποτελεί γραμμή σχολίου και αγνοείται. Κάθε διάνυσμα δοκιμής ξεκινάει με εισαγωγικά (:). Για κάποιο κύκλωμα με n εισόδους, μόνο τα n bits που ακολουθούν των εισαγωγικών είναι σημαντικά, και τα εναπομείναντα bits, αν υπάρχουν αγνοούνται. Το k οστό bit από κάποιο διάνυσμα ελέγχου αποτελεί την τιμή της k-οστής εισόδου του κυκλώματος (με βάση την εμφάνισή τους στο κύκλωμα). Για παράδειγμα, σε ένα κύκλωμα που εμφανίζονται στο netlist οι είσοδές του με την εξής σειρά G0, G1, G2 και G3, το 1 ο bit του test pattern αποτελεί τη τιμή της 1 ης εισόδου G0, το 2 ο bit αποτελεί τη τιμή της G1 κοκ. 7
* Name of circuit: c499o.bench * Test patterns and fault free responses: 1: 00000000000000000000000000000000000000000 00000000000000000000000000000000 2: 00110101111011010000100000011001001011011 00110101111011010000100000011001 3: 01110001110000100111001010101001100101100 01110001110000100111001010101001 4: 00110101000000000001001000100000001110001 00110101000000000001001000100000 5: 00001010110100101111010100010011101000100 00001010110100101111010100010011 6: 10100001100010101001011011100110011111110 10100001100010101001011011100110 7: 11111011111110111011000001001010010011001 11111011111100111011000001001010 FAULT LIST Το HOPE μπορεί να αποκτήσει τη λίστα σφαλμάτων από το χρήστη. Όταν είναι ορισμένη η επιλογή -f fn, η λίστα σφαλμάτων διαβάζεται από το αρχείο fn. (default: Η λίστα σφαλμάτων δημιουργείται εσωτερικά). Ένα παράδειγμα της λίστας σφαλμάτων δίνεται στη συνέχεια : ----------------------------------------------------------------------------------- gate_a->gate_b /1 gate_a->gate_b /0 gate_a /1 gate_b /1 -------------------------------------------------------------------------------------------- Τα gate_a και gate_b είναι τα ονόματα των πυλών. Η πρώτη γραμμή, gate_a->gate_b /1 περιγράφει stuck-at 1 fault στη gate_b που είναι συνδεδεμένη με τη gate_a. Παρόμοια, η δεύτερη γραμμή περιγράφει stuck-at 0 fault στη gate_α που είναι συνδεδεμένη με τη gate_β. Η τρίτη και η τέταρτη γραμμή περιγράφουν stuck-at 1 faults στις εξόδους των πυλών gate_a και gate_b αντίστοιχα. Να σημειωθεί ότι δεν εφαρμόζεται fault collapsing με αυτή την επιλογή. Γι αυτό το λόγο, οι χρήστες θα πρέπει να παρέχουν τη λίστα σφαλμάτων η οποία περιέχει και τα collapsed σφάλματα μέσα. 8
Στη συνέχεια δίνονται κάποια παραδείγματα για την καλύτερη κατανόηση των ανωτέρω. Παραδείγματα > hope D c499o.bench Όπως παρατηρεί κανείς στο παρακάτω πίνακα, μία εκτέλεση εντολής hope επιστρέφει στο χρήστη μία σειρά από διάφορα αποτελέσματα που σχετίζονται με τη διαδικασία της εξομοίωσης. Αναφέρεται το όνομα του κυκλώματος που τίθεται σε εξομοίωση, λεπτομέρειες για τη δομή του (είσοδοι, έξοδοι), το πλήθος των flipflops που αυτό περιέχει, συνολικό πλήθος πυλών. Ακόμη περιέχει πληροφορίες για το είδος της εξομοίωσης, αρχικές παράμετροι εξομοίωσης όπως αρχική κατάσταση στη γεννήτρια τυχαίων αριθμών, αποτελέσματα εξομοίωσης, ποσοστό κάλυψης σφαλμάτων καθώς αναφέρει και το πλήθος των διανυσμάτων που έχουν ανιχνευτεί και πόσα από τα σφάλματα είναι μη ανιχνεύσιμα. Στο συγκεκριμένο παράδειγμα, εκτελείται εξομοίωση για το κύκλωμα c499o.bench, το οποίο έχει 41 primary inputs και 32 primary outputs, δε περιέχει φλιπ-φλοπς και περιέχει 202 πύλες συνολικά. Για την εξομοίωση (επειδή δεν ορίζεται η συγκεκριμένη παράμετρος), εφαρμόστηκαν στο κύκλωμα 224 διανύσματα δοκιμής και έχει επιτευχθεί κάλυψη σφαλμάτων σε ποσοστό 96.834%. Ο αριθμός των επικαλυπτόμενων λαθών είναι 758 (collapsed faults), ο αριθμός των ανιχνεύσιμων λαθών είναι 734 και ο αριθμός των μη ανιχνεύσιμων λαθών είναι 24. Τέλος, παρέχονται πληροφορίες για τη μνήμη που έχει χρησιμοποιηθεί καθώς για το χρόνο που χρειάστηκε η εξομοίωση μέχρι να τερματιστεί. 9
Με την παραπάνω εκτέλεση παράγεται ένα αρχείο με όνομα c499o.log στο οποίο αποθηκεύεται η επιστρεφόμενη πληροφορία για την παραπάνω εξομοίωση. Η πληροφορία αυτή όπως παρατίθεται και στη συνέχεια, περιέχει το διάνυσμα δοκιμής που εφαρμόστηκε, την απόκριση εξόδου, καθώς και το πλήθος των σφαλμάτων που ανιχνεύτηκαν. Στις σειρές που ακολουθούν, αναφέρονται τα ίδια τα σφάλματα που έχουν ανιχνευτεί. Στο τέλος του αρχείου περιέχεται και μία λίστα με τα σφάλματα που δεν έχουν ανιχνευτεί. Test 1 : 0110011111010001111001101001100110110100 01100111110100011110011010011001 182 faults detected od0 /1 id0->od0 /1 e0 /1 10
id0 /1 id4 /1 id8 /0 id12 /1 id16 /0 id17 /0 id18 /0 id19 /1 id20 /1 id21 /0 id22 /0 test 111: 11010000111101101101001101000001110000000 11010000111101101101001101000001 0 faults detected test 112: 10100000111000110110100001110001010001101 10100000111000110110000001110001 5 faults detected e20 /0 wf /0 s5->e21 /1 s6->e22 /1 s7->e23 /1 * List of undetected faults: 1. e0 /0 2. id30->xc6 /0 3. id30 /0 4. s0->t3 /1 5. s1->t2 /1 6. s2->t1 /1 7. s3->t0 /1 8. id30->xa15 /0 9. e1 /0 10. e5 /0 11. e8 /0 12. e16 /0 13. s4->t7 /1 14. s5->t6 /1 15. s6->t5 /1 11
Στο συγκεκριμένο παράδειγμα έχει εφαρμοστεί fault dropping. Σε περίπτωση που κάποιος ήθελε κάθε διάνυσμα δοκιμής να εξομοιώσει όλα τα σφάλματα, έπρεπε να ορίσει τη συγκεκριμένη επιλογή (-N). > hope D c499o.bench l c499o.log_faults Είναι ίδιο παράδειγμα με το προηγούμενο, μόνο που σε αυτή τη περίπτωση ορίζει ο χρήστης σε ποιο αρχείο θα γραφτούν τα επιστρεφόμενα δεδομένα (-l fn). 12
> hope D c432o.bench -u Εκτυπώνει όλα τα μη ανιχνεύσιμα σφάλματα σε ένα αρχείο με κατάληξη.ufaults. 13
Περιεχόμενα αρχείου c432o.ufaults : 119gat->157gat /0 119gat /0 203gat->227gat /1 131gat->187gat /0 131gat /0 203gat->239gat /1 143gat->193gat /0 203gat->243gat /1 143gat /0 99gat->195gat /0 99gat /0 203gat->251gat /1 151gat->198gat /0 147gat->196gat /0 282gat->341gat /0 143gat->194gat /0 139gat->192gat /0 135gat->190gat /0 131gat->188gat /0 127gat->186gat /0 123gat->184gat /0 119gat->158gat /0 341gat /1 309gat->341gat /1 309gat->333gat /1 230gat->289gat /1 416gat /0 379gat /1 347gat /1 259gat /1 108gat->414gat /1 213gat->259gat /1 213gat->256gat /1 213gat->257gat /1 346gat /1 319gat->346gat /1 386gat->425gat /1 393gat->429gat /1 > hope s 137900 r 15000 s298.bench Εξομοιώνει το κύκλωμα s298.bench χρησιμοποιώντας 15000 τυχαία διανύσματα δοκιμής. Η γεννήτρια τυχαίων αριθμών αρχικοποιείται με τη τιμή 137900. Η διαδικασία εξομοίωσης σφαλμάτων τερματίζει όταν εξομοιωθούν 15000 τυχαία διανύσματα ελέγχου ή όταν ανιχνευτούν όλα τα σφάλματα. Στη 14
περίπτωση που η εντολή ακολουθείται από την επιλογή >s298.out, η περίληψη της εξομοίωσης αποθηκεύεται στο συγκεκριμένο αρχείο, διαφορετικά εκτυπώνεται μόνο στην οθόνη. 15