Πανεπιστήμιο Αιγαίου Πολυτεχνική Σχολή Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων Διπλωματική Εργασία Συμπίεση Δεδομένων Ελέγχου Ψηφιακών Κυκλωμάτων Άγνωστης Δομής Με Χρήση Γραμμικών Αποσυμπιεστών Με Δυναμική Ανατροφοδότηση Πανουργιάς Αναστάσιος 321/2004069 icsd04069@icsd.aegean.gr Επιβλέπων Καθηγητής: Εμμανουήλ Ι. Καλλίγερος Σάμος, Σεπτέμβριος 2009 0
1
2
Περιεχόμενα I. Εισαγωγή 4 α. Πρόλογος 4 β. Διανύσματα Δοκιμής (Test Set) 6 γ. Κυκλώματα Άγνωστης Δομής 7 δ. Σχεδίαση για αυξημένη δοκιμαστικότητα (Design For Testability) 8 II. Δομές Ελέγχου 9 α. LFSR (Linear Feedback Shift Register) 9 β. Scan Chains 11 γ. Phase Shifter 11 δ. Multivariable Dynamic Reseeding Architecture (MDRA) 12 III. Μεθοδολογία 13 α. Συμβολική Εξομοίωση 14 β. Γενική Περίπτωση Επίλυσης Δεδομένων Έλεγχου 24 γ. Βήματα πριν τη Πραγματική Εξομοίωση 28 δ. Πραγματική Εξομοίωση 29 ε. Ο προτεινόμενος σχεδιασμός του κυκλώματος 31 ζ. Διαφορετικές Υλοποιήσεις 33 IV. Αποτελέσματα 37 V. Υλοποίηση 49 VI. Βιβλιογραφία 51 3
I. Εισαγωγή α. Πρόλογος Τα Integrated Circuits (ICs) ή αλλιώς ολοκληρωμένα chip, πλέον συναντώνται και μπορούν να αξιοποιηθούν σε κάθε πτυχή τις σύγχρονης ζωής μας. Πρακτικά οποιαδήποτε συσκευή μπορεί να προσθέσει, κρύβει στη καρδιά της ένα ολοκληρωμένο, είτε πρόκειται για ένα ρολόι ή για το οδόμετρο του αυτοκινήτου μας. Είναι αυτονόητο όμως ότι την κύρια εφαρμογή των ολοκληρωμένων τη βρίσκουμε στους υπολογιστές και στις σύγχρονες ηλεκτρονικές συσκευές. Με εκατοντάδες χιλιάδες wafers (δίσκος πυριτίου, ο οποίος χρησιμοποιείται στην κατασκευή των IC) να μπαίνουν σε παραγωγή σε εβδομαδιαία βάση είναι εμφανής η ανάγκη για τον έλεγχο και την εξασφάλιση της σωστής λειτουργίας των παραγομένων κυκλωμάτων από κάθε wafer. Παρόλο που ο έλεγχος των κυκλωμάτων παλαιότερα γινόταν περισσότερο σε συστήματα τα οποία Wafer κατασκευαστικής διαδικασίας 45nm προορίζονταν για χρήση στη στρατιωτική, αεροδιαστημική και τραπεζική βιομηχανία, όπου ένα προβληματικό chip μπορεί να επιφέρει καταστροφικές συνέπειες, πλέον το ενδιαφέρον για τεχνικές ελέγχου και αξιοπιστίας έχει εξαπλωθεί σε τομείς όπως οι Η/Υ, οι τηλεπικοινωνίες, τα ηλεκτρονικά καταναλωτικά προϊόντα, η αυτοκινητοβιομηχανία κ.ο.κ.. Όσο όμως, τα μεγέθη στις κατασκευαστικές διαδικασίες μειώνονται, ενώ παράλληλα η ταχύτητα και η πυκνότητα του συνολικού συστήματος αυξάνεται, τόσο δυσκολότερος γίνεται ο έλεγχος των κυκλωμάτων, με νέα είδη σφαλμάτων να εμφανίζονται. Μια απαραίτητη προϋπόθεση για να έχουμε αξιόπιστα ηλεκτρονικά συστήματα είναι η ικανότητα να διακρίνουμε ότι αυτά λειτουργούν πλήρως ορθά (error-free). Τα ηλεκτρονικά συστήματα βέβαια, έκτος από το υλικό, αποτελούνται και από λογισμικό αλλά στη παρούσα εργασία και στο εργαλείο που αναπτύξαμε, επικεντρωνόμαστε αποκλειστικά στο κομμάτι του ελέγχου υλικού (hardware testing) και ακόμη ποιο συγκεκριμένα του ψηφιακού ελέγχου (digital testing) καθώς ελέγχουμε ψηφιακά κυκλώματα. Κύριο μέλημα μας είναι, μέσω του ελέγχου, να εγγυηθούμε ότι το κύκλωμα δουλεύει σωστά και θα συνεχίσει να δουλεύει σύμφωνα με τις προδιαγραφές. Ο έλεγχος που γίνεται σε ένα ολοκληρωμένο, μπορεί να ανιχνεύσει διάφορα σφάλματα, όπως 4
κατασκευαστικά, σφάλματα που προκύψανε κατά τη διάρκεια της κανονικής λειτουργίας του chip λόγω γήρανσης, σφάλματα λόγω διακυμάνσεων της τροφοδοσίας, κτλ. Οι έλεγχοι των διαφόρων κυκλωμάτων, γίνονται από μηχανήματα τα οποία ονομάζονται testers, ή αλλιώς ATE (Automatic Test Equipment). Αυτά διαθέτουν έναν συγκεκριμένο αριθμό καναλιών, τα οποία μπορούν να συνδεθούν στα pins (είσοδοι, έξοδοι) ενός κυκλώματος κι έτσι μπορούν να επικοινωνήσουν και να ελέγξουν ένα chip, τροφοδοτώντας το με συγκεκριμένες ακολουθίες εισόδων κι έπειτα αναλύοντας τις εξόδους του Flying-Probe Tester chip έτσι ώστε να ανιχνευτεί κάποιο λάθος. Το πώς είναι εφικτό, παλαιότερα και πιο αργά κυκλώματα να ελέγχουν πιο σύγχρονα κι εξελιγμένα, θα αποσαφηνιστεί στη συνέχεια. Μια από τις απαιτήσεις του σύγχρονου testing είναι ο μικρός όγκος των δεδομένων ελέγχου. Το hardware που σχεδιάσαμε καθώς και υλοποιήσαμε σε λογισμικό εφαρμόζει την τεχνική του Dynamic Reseeding και με διάφορες παραλλαγές και προσθήκες προσπαθεί να επιτύχει μεγάλη συμπίεση των δεδομένων ελέγχου, καθώς ο όγκος των δεδομένων έχει άμεση επίδραση στην απαιτούμενη μνήμη από τον tester καθώς και το κόστος το οποίο θέλουμε να είναι το μικρότερο δυνατό. Αν αναλογιστούμε την περιορισμένη διεκπαιρεωτική ικανότητα (throughput) του καναλιού που συνδέει τον tester με τη συσκευή υπό έλεγχο, τον περιορισμένο αριθμό pins καθώς και συχνότητας, βλέπουμε ότι ο όγκος των δεδομένων ορίζει το χρόνο διάρκειας του ελέγχου. Επίσης πρέπει να έχουμε υπόψη ότι όσο αυξάνεται η πολυπλοκότητα των IC, η απόδοση των συσκευών ATE δεν είναι γραμμική και καθώς όλο και περισσότερη λογική προστίθεται σε ένα chip, οι απαιτήσεις μνήμης στον tester και οι απαιτήσεις εύρους ζώνης (bandwidth) για τα δεδομένα ελέγχου, μεταξύ του tester και του chip, αυξάνονται με ταχείς ρυθμούς. Η αναβάθμιση σε νέους testers με περισσότερη μνήμη, κανάλια και ταχύτερη συχνότητα λειτουργίας, δεν είναι ποτέ η καλύτερη λύση λόγω υψηλού κόστους. Είναι λογικό λοιπόν να στρεφόμαστε σε τεχνικές που θα μειώσουν τον όγκο των δεδομένων, με αποτέλεσμα το φόρτο των testers και ο χρόνος του ελέγχου να μειωθεί. Όπως προείπαμε η τεχνική που υλοποιούμε είναι το Dynamic Reseeding, το οποίο 5
αποτελεί αυτή τη στιγμή την δημοφιλέστερη λύση της βιομηχανίας στο πρόβλημα της αυξανόμενης δυσκολίας του ψηφιακού ελέγχου. β. Διανύσματα Δοκιμής (Test Set) Μέχρις στιγμής κάναμε λόγο για κάποιες ακολουθίες δεδομένων που τροφοδοτεί ο tester το υπό εξέταση κύκλωμα, δηλαδή για δεδομένα ελέγχου, χωρίς να αναφέρουμε πως αυτά δημιουργούνται. Η παραγωγή των δεδομένων αυτών, είναι το πρώτο βήμα στη διαδικασία του ελέγχου και ονομάζεται εξαγωγή ή παραγωγή διανυσμάτων δοκιμής (test pattern extraction / generation). Κάθε διάνυσμα δοκιμής, καθορίζει τις τιμές στις οποίες πρέπει να τεθούν οι είσοδοι ενός κυκλώματος, έτσι ώστε στην έξοδο να διαγνωστεί η ύπαρξη ή μη, ενός ή περισσοτέρων ελαττωμάτων, με την σωστή και λάθος απόκριση του κυκλώματος να είναι προδιαγεγραμμένες. Τα διανύσματα δοκιμής εξάγονται με τη βοήθεια προγραμμάτων ATPG (Automatic Test Pattern Generation), μία μεθοδολογία / τεχνολογία, η οποία μας επιτρέπει να βρούμε μία ακολουθία εισόδων, όπου ένας tester εφαρμόζοντας τες σε ένα ολοκληρωμένο, θα μπορέσει να διακρίνει εάν παρουσιάζεται κάποιο ελάττωμα ή όχι. Το σύνολο των διανυσμάτων αυτών, ή αλλιώς test set, χρησιμοποιείται σε μερικές περιπτώσεις για να γίνει γνωστή και η αιτία του ελαττώματος (failure analysis). Η αποτελεσματικότητα (effectiveness) του ATPG μετράται από το μέγεθος των μοντελοποιημένων ελαττωμάτων (fault models) που μπορούν να ανιχνευθούν, αλλά και από τον αριθμό των παραγομένων διανυσμάτων. Ένα fault model, είναι μία μηχανική μοντελοποίηση για το τί θα μπορούσε να μην λειτουργήσει σωστά σε ένα κύκλωμα και με τη βοήθεια του μοντέλου να προβλεφθούν οι συνέπειες του εκάστοτε σφάλματος. Επιγραμματικά, τα βασικά σφάλματα που μπορούμε να έχουμε σε ένα κύκλωμα είναι: Stack-At fault, στο οποίο μία είσοδος ή έξοδος από πύλη είναι μόνιμα στη τιμή 1 ή 0, ανεξαρτήτως εισόδων στο κύκλωμα Bridging fault, σφάλμα γεφύρωσης, το οποίο συμβαίνει όταν δύο γραμμές στο κύκλωμα μας, έχουν ενωθεί, ενώ δεν θα έπρεπε. Στην διπλανή εικόνα έχουμε ράγισμα στο μονωτικό υλικό, ακολουθούμενο από διάβρωση του αγωγού, λόγω του φαινομένου metal migration το οποίο έκανε αυτήν την ατέλεια να συμπεριφερθεί όπως ένα σφάλμα γεφύρωσης μεταξύ των παρακείμενων στρωμάτων μετάλλων Open fault, σε αυτό το σφάλμα θεωρούμε ότι κάποια γραμμή έχει σπάσει κι έτσι μία ή περισσότερες είσοδοι, 6
έχουν αποσυνδεθεί από την έξοδο που τις οδηγεί Delay fault, ελάττωμα που προκύπτει όταν μία γραμμή παίρνει τη σωστή τιμή που πρέπει να έχει, αλλά με μία καθυστέρηση (ή σπανιότερα πιο γρήγορα) σε σχέση με τον αναμενόμενο χρόνο διάδοσης του σήματος. Στην ουσία η ποιότητα του ελέγχου κρίνεται από των αριθμό των ανιχνεύσιμων ελαττωμάτων και ο χρόνος εκτέλεσης του ελέγχου κρίνεται από μέγεθος του συνόλου δοκιμής. Όσον αφορά την αποτελεσματικότητα του συνόλου δοκιμής, η μετρική που χρησιμοποιείται είναι η κάλυψη σφαλμάτων (fault coverage) και ορίζεται σαν το ποσοστό των σφαλμάτων ενός κυκλώματος, που ανιχνεύτηκαν από το συγκεκριμένο σύνολο δοκιμής. Σε περιπτώσεις, οι οποίες σπάνια απαντώνται σε πραγματικά κυκλώματα, που το ποσοστό είναι 100%, ο όρος που χρησιμοποιείται είναι πλήρη κάλυψη σφαλμάτων. Πλήρης κάλυψη σημαίνει ότι το κύκλωμα δεν έχει κάποιο από τα μοντελοποιημένα σφάλματα του ελέγχου, κάτι που επαγωγικά μας λέει ότι ναι μεν το κύκλωμα δεν έχει κάποιο από τα σφάλματα που έχουμε ορίσει στον έλεγχο, αλλά αυτό δε σημαίνει ότι δεν υπάρχει κάποιο άλλο ελάττωμα, το οποίο δεν έχει συμπεριληφθεί στη διαδικασία ελέγχου ή δεν έχει μοντελοποιηθεί. Επίσης πρέπει να έχουμε υπ όψιν ότι το κάθε σφάλμα ενός κυκλώματος διακρίνεται και ως προς την ευκολία που μπορεί να εντοπιστεί. Αυτό σημαίνει ότι υπάρχουν ελαττώματα τα οποία είναι εύκολα ή δύσκολα ανιχνεύσιμα (easy / hard-to-detect faults). Τα δύσκολα ανιχνεύσιμα σφάλματα, έχουν το χαρακτηριστικό ότι τα διανύσματα που τα ανιχνεύουν είναι αρκετά λιγότερα από αυτά που ελέγχουν τα εύκολα. γ. Κυκλώματα Άγνωστης Δομής Έχοντας περιγράψει τα δεδομένα ελέγχου αλλά και τα ελαττώματα που αυτά ανιχνεύουν, θα συνεχίσουμε περιγράφοντας τα κυκλώματα τα οποία θέλουμε να ελέγξουμε με αυτά. Όπως αναφέρεται στο τίτλο της εργασίας αυτής, ασχολούμαστε με κυκλώματα άγνωστης δομής ή αλλιώς IP cores/blocks (Intellectual Property). Ο σχεδιασμός πολλών κυκλωμάτων πλέον γίνεται με την σύνθεση επιμέρους λογικών μονάδων, οι οποίες μπορούν να παραμετροποιηθούν και να αντικατασταθούν ανεξάρτητα η μία με την άλλη, δίνοντας έμφαση στην επαναχρησιμοποίηση τους σε διάφορα κυκλώματα. Οι μονάδες που σχεδιάζονται με αυτή τη λογική λέγονται IP cores. Στη βιομηχανία του ηλεκτρονικού σχεδιασμού κυκλωμάτων, ένας πυρήνας πνευματικής ιδιοκτησίας ημιαγωγών (IP core), είναι μία επαναχρησιμοποιήσιμη λογική μονάδα, κελί, ή σχεδιάγραμμα ενός chip, το οποίο ανήκει στην εταιρία που το σχεδίασε. Ιδανικά αυτή η μονάδα είναι πλήρως φορητή, δηλαδή μπορεί να ενσωματωθεί σε οποιαδήποτε τεχνολογία προμηθευτή ή μεθοδολογία σχεδιασμού. Παραδείγματα χρήσης του 7
σχεδιασμού με τη λογική αυτή, απαντώνται σε CPU's, σε ελεγκτές Ethernet καθώς και διεπαφές PCI. Τα IP cores μπορούν να χορηγηθούν με άδεια σε τρίτους αλλά μπορεί να χρησιμοποιούνται και από ένα πρόσωπο και μόνο. Όταν χορηγείται όμως ένα IP core σε κάποιον τρίτο, αυτός δεν γνωρίζει το σχεδιασμό του πυρήνα ούτε μπορεί να επέμβει σε αυτόν και το μόνο που κατέχει είναι οι netlists του IP core, δηλαδή την περιγραφή της συνδεσιμότητας του. Αποτέλεσμα αυτού είναι ότι εφόσον δεν γνωρίζουμε την δομή τους, δεν μπορούμε να παράξουμε δικά μας test set κι έτσι πρέπει ο κάθε έλεγχος του πυρήνα σε ένα κύκλωμα, να γίνει με τα δεδομένα ελέγχου που μας δίνει ο κατασκευαστής. δ. Σχεδίαση για αυξημένη δοκιμαστικότητα (Design For Testability) Καθώς όπως είπαμε η πολυπλοκότητα των κυκλωμάτων αυξάνει και ταυτόχρονα υπάρχει η ανάγκη για διατήρηση του εξοπλισμού ελέγχου, έπρεπε με κάποιο τρόπο ο έλεγχος να απλοποιηθεί όσο γίνεται περισσότερο και γι αυτό το λόγο αναπτύχθηκε η σχεδιαστική προσέγγιση DFT. Σκοπός της είναι η ενσωμάτωση δομών ελέγχου στο αρχικό κύκλωμα, με στόχο την καλύτερη ελεγξιμότητα (controllability) και παρατηρησιμότητα (observability) των εσωτερικών του κόμβων. Η μεθοδολογία που χρησιμοποιούμε βασίζεται σε αυτές τις δομές ελέγχου, καθώς μπορούμε να τις χρησιμοποιήσουμε για την αναπαραγωγή και εφαρμογή των διανυσμάτων δοκιμής στο υπό έλεγχο κύκλωμα, αλλά και για τη διαδικασία επαλήθευσης των αποκρίσεων, αφαιρώντας σημαντικό φόρτο από τον tester. 8
II. Δομές Ελέγχου Σε αυτό το σημείο θα εξετάσουμε τις δομές ελέγχου που χρησιμοποιεί η τεχνική μας βασισμένη στη προσέγγιση DFT, περιγράφοντας την λειτουργία τους καθώς και που μας χρησιμεύουν. Στο τέλος της ενότητας θα αναφερθούμε και στο επιπλέον υλικό που η υλοποίηση μας απαιτεί έτσι ώστε να επιτευχθεί ο υψηλός αριθμός συμπίεσης στα δεδομένα ελέγχου. α. LFSR (Linear Feedback Shift Register) Ένα LFSR μήκους n αναπαριστάται συνήθως από το χαρακτηριστικό πολυώνυμο του aa nn xx nn + + aa 1 xx + aa 0, όπου ο όρος αα ii xx ii αναφέρεται στο i-οστό flip-flop (καταχωρητή), με το συντελεστή aa ii, να μας δείχνει αν υπάρχει ανάδραση σε αυτό το flip-flop, εφόσον ισούται με 1. Προτού εξηγήσουμε τη λειτουργία ενός LFSR, παρουσιάζουμε ένα απλό παράδειγμα, έτσι ώστε να γίνει ευκολότερα κατανοητό. aa nn aa nn 1 aa 1 RR... 1 RR 2 RR nn 1 RR nn Σχήμα 1 Ένα LFSR λοιπόν, ή αλλιώς ολισθητής γραμμικής ανάδρασης, βλέπουμε ότι αποτελείται από D flip-flops με τους συντελεστές ολίσθησης (aa ii ), να μας υποδεικνύουν τις θέσεις όπου υπάρχουν πύλες XOR (XOR tap), εκτός από το aa nn το οποίο το θεωρούμε πάντα ίσο με 1 χωρίς να έχουμε πύλη σε αυτό το σημείο. Σύμφωνα με όσα προείπαμε το χαρακτηριστικό πολυώνυμο του 2 ου σχήματος είναι το 1xx 4 + 1xx 3 + 0xx 2 + 1xx + 1 ή αλλιώς 11011. aa 4 aa 3 aa 2 aa 1 RR 1 RR 2 RR 3 RR 4 Σχήμα 2 9
Η λειτουργία του LFSR είναι αρκετά απλή καθώς σε κάθε επόμενη κατάσταση το RR 1, παίρνει τη τιμή του RR nn της παρούσας κατάστασης και κάθε RR ii, αν συνδέεται με απλή σύνδεση με το RR ii 1, στην επόμενη κατάσταση θα έχει πάρει την τιμή του ενώ αν υπάρχει ανάδραση, η τιμή του RR ii για την επόμενη κατάσταση προκύπτει από τη λογική πράξη XOR των τιμών των RR ii 1 και RR nn στη παρούσα κατάσταση. Η κατηγορία των LFSR που χρησιμοποιούμε, ονομάζονται internal LFSRs καθώς οι πύλες XOR είναι τοποθετημένες εσωτερικά του ολισθητή, σε αντίθεση με τα external όπου τα XOR taps βρίσκονται στην εξωτερική σύνδεση μεταξύ του RR 1, RR nn. Παρατηρούμε ότι το LFSR είναι ένα κυκλικό κύκλωμα, δηλαδή αν εφαρμοστούν σε αυτό επανειλημμένοι κύκλοι ρολογιού, θα διέρχεται από μία προκαθορισμένη και σταθερή ακολουθία καταστάσεων. Ο αριθμός των καταστάσεων που επαναλαμβάνονται μπορεί να είναι το πολύ 2 nn 1, κάτι το οποίο εμφανίζεται μόνο όταν το πολυώνυμό μας είναι πρώτο (primitive). Χωρίς να το αναλύσουμε περαιτέρω, primitive πολυώνυμα είναι αυτά τα οποία, έχοντας ένα πολυώνυμο P(x) βαθμού n, η μικρότερη τιμή k για την οποία το πολυώνυμο 1 xx kk διαρείται από το P(x), είναι η kk = 2 nn 1. Ένα τέτοιο πολυώνυμο είναι το 1011 ή αλλιώς 1xx 3 + 0xx 2 + 1xx + 1 και στο σχήμα που ακολουθεί παρατηρούμε την κυκλική ιδιότητα του LFSR καθώς και πως προκύπτει η μέγιστη ακολουθία επαναλαμβανόμενων καταστάσεων. aa aa aa 3 2 1 RR 1 RR 2 RR 3 Initial State S0 0 1 0 S1 0 0 1 S2 1 0 1 S3 1 1 1 S4 1 1 0 S5 0 1 1 S6 1 0 0 S7 0 1 0 Σχήμα 3 Παρατηρώντας την αρχική κατάσταση και την S7, βλέπουμε αυτό το οποίο αναφέραμε προηγουμένως, ότι δηλαδή έχοντας ένα πρώτο πολυώνυμο βαθμού 3, έχουμε 2 3 1 = 7 καταστάσεις που θα επαναλαμβάνονται, κάτι το οποίο φαίνεται και από την έξοδο του LFSR η οποία θα περιέχει ότι η τελευταία στήλη και θα είναι μια 10
επαναλαμβανόμενη ακολουθία της μορφής 01110100111010, με την ονομασία m- sequence. Ο λόγος λοιπόν, για τον οποίο επιλέξαμε τα πολυώνυμα που χρησιμοποιούμε στο εργαλείο μας να είναι πρώτα, είναι διότι ορίζουμε εμείς την περιοδικότητα των καταστάσεων κι έτσι δεν τίθεται θέμα μελέτης των αρχικών καταστάσεων που θα χρησιμοποιηθούν. Σε διαφορετική περίπτωση μπορεί οι καταστάσεις να επαναλαμβάνονται μετά από μικρό αριθμό κύκλων ρολογιού και οι διάφορες καταστάσεις που προκύπτουνε, να μην αρκούνε για να παράξουμε τις ακολουθίες δύσκολα ανιχνεύσιμων σφαλμάτων. Το LFSR αποτελεί ίσως το σημαντικότερο και πιο κρίσιμο τμήμα της μεθοδολογίας μας, καθώς χρησιμοποιείται για την αναπαραγωγή των διανυσμάτων δοκιμής (αναφέρεται στον τίτλο ως γραμμικός αποσυμπιεστής) κι έτσι η καλύτερη χρήση του για βελτίωση των αποτελεσμάτων, απαιτεί αρκετή σκέψη και δοκιμές. Αυτό που δεν έχουμε αναφέρει μέχρις στιγμής είναι ότι χρησιμοποιούμε μία παραλλαγή των LFSR. Δηλαδή ενώ από μόνο του το LFSR έχει κάποιες πύλες XOR, εμείς προσθέτουμε εσωτερικά κι άλλες, τις οποίες τις τροφοδοτούμε από εξωτερικά κανάλια. Στην ουσία η διαφορά τους είναι ότι δεν παίρνουν τιμή από την ανάδραση αλλά ότι τους δίνει το εξωτερικό κανάλι. Με αυτό τον τρόπο ελέγχουμε τον αριθμό των νέων μεταβλητών που εισάγονται στο LFSR, βάζοντας ότι μεταβλητή θέλουμε από κάθε κανάλι, ανά τους κύκλους λειτουργίας που θέλουμε. β. Scan Chains Η έξοδος του LFSR τροφοδοτείται στους καταχωρητές ανίχνευσης (scan registers), οι οποίοι δρουν κανονικά ως flip flops, αλλά σε λειτουργία test δρουν ως ένας μεγάλος καταχωρητής ολίσθησης, επιτρέποντας στα δεδομένα να διαδοθούν σειριακά μέσω όλων των καταχωρητών προς το pin εξόδου, ενώ ταυτόχρονα νέα δεδομένα εισέρχονται από το pin εισόδου. Στην ουσία χρησιμοποιούμε τις scan chains για να αποσυμπιέσουμε τα διανύσματα ελέγχου, έτσι ώστε να εξετάσουμε συγκεκριμένα σημεία του κυκλώματος, αλλάζοντας τις καταστάσεις των καταχωρητών αυτών μεταξύ κανονικής λειτουργίας και ελέγχου. Η τεχνική αυτή ονομάζεται αλλιώς και scan path. γ. Phase Shifter Αν τροφοδοτούσαμε τις Scan αλυσίδες απευθείας από τις εξόδους του LSFR τότε οι γειτονικές αλυσίδες θα περιείχαν υψηλά συσχετισμένα δεδομένα ελέγχου, με αποτέλεσμα να μην μπορούμε να επιτύχουμε υψηλό ποσοστό κάλυψης σφαλμάτων αλλά και ο έλεγχος μας να μην είναι ψευδοτυχαίος, δηλαδή να έχουμε 11
επαναλαμβανόμενες ακολουθίες δεδομένων. Για αυτό το λόγο χρησιμοποιούμε μεταξύ του LFSR και των scan αλυσίδων ένα κύκλωμα με την ονομασία Phase Shifter. Ένας τυπικός Phase Shifter αποτελείται από ένα δίκτυο πυλών XOR, τοποθετημένες έτσι ώστε να αποφευχθούν οι ολισθημένες εκδόσεις των ίδιων δεδομένων σε διαφορετικά σημεία των scan chains. Κάθε scan chain οδηγείται από ένα δέντρο XOR πυλών, το οποίο αντιστοιχεί σε ένα γραμμικό συνδυασμό εξόδων από τους καταχωρητές του LFSR. Αυτό το κύκλωμα μας παράγει ακολουθίες δεδομένων ελέγχου, ασυσχέτιστες μεταξύ τους, εφαρμόζοντας μια ιδιότητα της m-sequence σύμφωνα με την οποία το άθροισμα οποιασδήποτε m-sequence και μίας κυκλικής μετατόπισης της, μας δίνει μία καινούρια μετατόπιση της m-sequence (shift and add). Αυτό που πετυχαίνουμε με τον Phase Shifter λοιπόν είναι η ελαχιστοποίηση των γραμμικών εξαρτήσεων μεταξύ των μεταβλητών που υπάρχουν στο LSFR, κάτι που μας βοηθάει καθώς αυξάνεται η πιθανότητα να επιτύχουμε την αναπαραγωγή του εκάστοτε διανύσματος και επιπλέον χρησιμοποιώντας το κύκλωμα αυτό μπορούμε να οδηγούμε ένα μεγάλο αριθμό Scan αλυσίδων με σχετικά πάντα μικρού μήκους LFSR. δ. Multivariable Dynamic Reseeding Architecture (MDRA) Η υλοποίηση που προτείνουμε χρησιμοποιεί ένα επιπλέον hardware με το οποίο είναι δυνατή η αύξηση των κύκλων στους οποίους το LFSR δέχεται νέες μεταβλητές και λειτουργεί κανονικά, αλλά η έξοδος του δεν μεταφέρεται στις scan chains. Αυτό το πετυχαίνουμε απενεργοποιώντας τις scan αλυσίδες για τους κύκλους που θέλουμε κι έτσι ενώ το LFSR δουλεύει, οι νέες μεταβλητές δεν περνάνε στις scan chains παρά μόνο όταν το κύκλωμα τις ξαναενεργοποιήσει. Επίσης αυτό το κύκλωμα μπορεί και δέχεται δεδομένα σύμφωνα με τα οποία γνωρίζει σε κάθε φάση παραγωγής των διανυσμάτων, για πόσο πρέπει να διατηρήσει τις scan chains απενεργοποιημένες. Δηλαδή ξέροντας εξ αρχής ότι έχει να αναπαράγει 120 διανύσματα, σε κάθε βήμα γνωρίζει ότι πχ αφού βγουν τα δεδομένα ελέγχου για το 20 ο διάνυσμα, μετά θα πρέπει οι κύκλοι που απενεργοποιούνται οι scan αλυσίδες να αυξηθούνε από τρείς στους τέσσερις για τα επόμενα δέκα διανύσματα. Όταν επιδράει το κύκλωμα στην ουσία πρώτα παράγονται οι ψεύτικοι ή fake κύκλοι κατά τους οποίους τα δεδομένα που βγάζει το LFSR δεν φορτώνονται στις scan αλυσίδες και στο τέλος ο πραγματικός κύκλος του οποίου τα δεδομένα φορτώνονται κανονικά. 12
III. Μεθοδολογία Σκοπός μας είναι να συμπιέσουμε τα δεδομένα ελέγχου. Για να το επιτύχουμε στην ουσία προσπαθούμε να χρησιμοποιήσουμε όσο το δυνατόν λιγότερες μεταβλητές γίνεται. Μέχρις στιγμής όμως δεν έχουμε κάνει ξεκάθαρο το τι εννοούμε μεταβλητές αλλά και πως τις χρησιμοποιούμε. Παρακάτω παρουσιάζουμε μερικά διανύσματα έτσι ώστε να γίνει περισσότερο κατανοητό. Διανύσματα hard-to-detect-faults 111110101000010001001111111111X1101100000001XX01X111X0101110110101001X011 10100101111110111111010XXX01X01101111111110000000000011001000101X01111001 0101111110111111010111010000000110111111111000000000001100100010110111111 Διανύσματα easy-to-detect-faults XXXXXXXXXXXX11010XXXXX0XXXXXXXXXX00001000XX1XXXXXXXXXXXX000 XXX1XXXXXXXXXXXXXXXXXX0XXXXXXXXXXXXXX000XXXXXXXXXXXXXXX0XX XXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XX Αυτό που παρατηρούμε είναι ότι στα δύσκολα διανύσματα έχουμε πολλά ορισμένα bits (defined bits) ενώ στα εύκολα έχουμε πολύ λίγα με τα περισσότερα bits να μην μας νοιάζει τι τιμή θα πάρουνε ( X ). Έτσι λοιπόν όταν μιλάμε για μεταβλητές εννοούμε ότι βάζουμε μία τιμή στο LFSR η οποία δεν έχει οριστεί ακόμη και θα οριστεί σε επόμενο στάδιο και μπορεί να πάρει την τιμή 1 ή 0. Επίσης όταν μιλάμε για συμπίεση εννοούμε πόσα bits χρειαστήκαμε για να αναπαραστήσουμε όλα τα διανύσματα, δηλαδή αν ένα διάνυσμα έχει πχ 50 bits από τα οποία τα 40 είναι defined και τα 10 είναι μη ορισμένα (undefined), τότε η καλύτερη συμπίεση που μπορούμε να έχουμε είναι να χρησιμοποιήσουμε 40 bits γι αυτό το διάνυσμα μειώνοντας δηλαδή το μέγεθος του διανύσματος στο 80% του αρχικού. Σε σπάνιες περιπτώσεις εκμεταλλευόμενοι τις ιδιότητες του LFSR, δηλαδή τις γραμμικές εξαρτήσεις που προκύπτουν, μπορούμε να χρησιμοποιήσουμε και ελάχιστα λιγότερα από τα defined bits όλου του test set, αλλά γενικά ο κανόνας είναι ότι η πλήρης συμπίεση έχουμε όταν έχουμε χρησιμοποιήσει τόσα bits όσα τα defined bits του test set, δηλαδή έχοντας ξεφορτωθεί όλα τα X από το test set. Στη συνέχεια θα αναλύσουμε τη μεθοδολογία μας σταδιακά, ακολουθώντας τις λειτουργίες του εργαλείου που έχουμε αναπτύξει, έτσι ώστε να γίνει αντιληπτός ο τρόπος που επιτυγχάνουμε τη συμπίεση και τέλος να παρουσιάσουμε τα αποτελέσματα της μεθόδου μας. 13
α. Συμβολική Εξομοίωση Το πρώτο βήμα στο εργαλείο μας είναι η συμβολική εξομοίωση, με συμβολική να εννοούμε ότι δεν εισάγουμε πραγματικές τιμές στο LFSR, δηλαδή 0 ή 1, αλλά μεταβλητές οι οποίες θα οριστούνε στη πορεία της εξομοίωσης. Κάθε κύκλωμα έχει τα δικά του δεδομένα ελέγχου τα οποία μας δίνονται και από εκεί και πέρα μπορούμε να ορίσουμε τις δομές ελέγχου που χρησιμοποιούνται, δηλαδή τη δομή του LFSR, προσδιορίζοντας τις πύλες XOR του αλλά και τις εξωτερικές, τον αριθμό των scan αλυσίδων και τέλος τον αρχικό αριθμό κύκλων που θα απενεργοποιούνται οι scan chains. Το test set αποτελείται από όλα τα διανύσματα που πρέπει να αναπαραχθούν και σκοπός μας είναι να δούμε αν μετά από κάθε Scan Chain Length (το άνω ακέραιο μέρος της διαίρεσης Μήκος Διανυσμάτων / Αριθμό Scan Αλυσίδων) κύκλους, με τα δεδομένα που έχουν εισαχθεί στις scan chains, μπορούμε να παράγουμε κάποιο από τα διανύσματα. Ξεκινώντας την εξομοίωση θεωρούμε μία αρχική κατάσταση του LFSR, την οποία ονομάζουμε seed και περιέχει τις μεταβλητές αα 2, αα 3,. aa 2 aa 3 aa 4 aa 5 Εξωτερικές πύλες Σχήμα 4 Στο παραπάνω σχήμα βλέπουμε και τις εξωτερικές πύλες (μπλε χρώμα), οι οποίες τροφοδοτούνται από εξωτερικά κανάλια του tester. Έπειτα όπως είπαμε ξεκινάει η διαδικασία όπου το LFSR δέχεται νέες τιμές και οι καταχωρητές μετατοπίζουν τις μεταβλητές, αφού πρώτα έχουν εισαχθεί δεδομένα στις scan chains. Όταν δύο μεταβλητές θα συνδυάζονται, αυτό θα συμβολίζει τη λογική πράξη XOR. Πχ όταν γίνονται XOR δύο μεταβλητές, η α2 και η α3 αυτό θα γράφεται ως α2,α4. Ως συμπλήρωμα θα αναφέρουμε εδώ όλες τις δυνατές πράξεις χρησιμοποιώντας πύλες XOR, με τα Χ Υ να συμβολίζουν μεταβλητές. 14
Είσοδος 1 Είσοδος 2 Έξοδος Χ Υ Χ,Υ Χ 0 Χ Χ 1 Χ,1 1 1 0 1 0 1 0 1 1 0 0 0 Είσοδος 1 Είσοδος 2 Έξοδος Θα ακολουθήσουμε ένα μικρό παράδειγμα έτσι ώστε να γίνει περισσότερο κατανοητή η διαδικασία βασιζόμενοι στο LFSR 11001 του σχήματος 4 με εξωτερικές πύλες, ή αλλιώς external XOR taps, στα σημεία 10010 και έχοντας δύο scan αλυσίδες. Επίσης ως δεδομένα ελέγχου έχουμε τα εξής: X1101XX00X XXXXX1XX0X X100XX110X XXXXX1X00X XXXXXXX0XX τα οποία βλέπουμε ότι αποτελούνται από 5 διανύσματα μήκους 10 bits το καθένα. Το εργαλείο λειτουργεί κάνοντας shift (μετατοπίζοντας τις τιμές) για scan chain length κύκλους μέχρις ότου να γεμίσει τις scan αλυσίδες κι έπειτα ελέγχει αν μπορεί να αναπαραχθεί κάποιο vector. Εφόσον κανένα vector δεν γίνεται να αναπαραχθεί είτε ξεκινάει να κλειδώνει τις scan chains δηλαδή να βγάζει fake (ψεύτικους) κύκλους, αν ακόμα δεν είχε χρειαστεί, ή στην αντίθετη περίπτωση αυξάνει κατά ένα κύκλο την φάση όπου απενεργοποιούνται οι scan chains και γεμίζει μόνο το LFSR. Η λειτουργία με τους fake κύκλους θα εξηγηθεί με περισσότερη λεπτομέρεια στη συνέχεια. Σε αυτό το σημείο βρίσκεται και η κύρια διαφορά της μεθόδου Dynamic Reseeding (Δυναμική Ανατροφοδότηση) με τη μέθοδο του Static Reseeding (Στατική), δηλαδή ενώ στη πρώτη μέθοδο βασιζόμαστε στη λειτουργία του LFSR και των μεταβλητών που βάζουμε έτσι ώστε να σχηματίσουμε τα δεδομένα ελέγχου, στη δεύτερη μέθοδο πρέπει η εφαρμογή που ελέγχει το κύκλωμα να σταματάει μέχρι να φορτωθεί μία νέα κατάσταση στο LFSR όπου το μήκος της κατάστασης ισούται με το μήκος του LFSR (full reseeding). Στο Dynamic Reseeding αυτό λοιπόν που γίνεται είναι ότι έχουμε μερική κι όχι ολική ανατροφοδότηση, δηλαδή η νέα κατάσταση προκύπτει με seed μικρότερο του μήκους του LFSR. Αυτό πέραν του ότι μας δίνει καλύτερη συμπίεση στα δεδομένα ελέγχου, έχει και απλούστερη υλοποίηση σε επίπεδο υλικού. 15
Συνεχίζοντας λοιπόν το παράδειγμα μπορούμε να δούμε τις διάφορες καταστάσεις που περνάει το LFSR μέχρις ότου να αναπαράγει το πρώτο vector που μπορεί. Υπ όψιν ότι τα εξωτερικά κανάλια σε κάθε κύκλο εισάγουν νέες μεταβλητές, όπου αυτό φαίνεται από τον αυξανόμενο δείκτη τους από τα δεξιά προς τα αριστερά (πράσινο χρώμα), ο οποίος παίρνει την τιμή του μεγαλύτερου δείκτη στον προηγούμενο κύκλο + 1 για την πρώτη εξωτερική πύλη XOR και ούτω καθεξής. Επίσης είπαμε ότι το μήκος μίας scan αλυσίδας (Scan Chain Length) ισούται με το μήκος των διανυσμάτων διά τον αριθμό τον scan αλυσίδων (10 / 2 = 5), άρα πρέπει το LFSR να κάνει shift άλλες τέσσερις φορές έτσι ώστε να γεμίσουν οι scan αλυσίδες και να προσπαθήσουμε να δούμε αν γίνεται να παραχθεί κάποιο από τα διανύσματα του test set, υποθέτοντας ότι η μία θέση κάθε αλυσίδας γεμίζει και από την αρχική κατάσταση. aa ii, μεταβλητή με το μεγαλύτερο δείκτη σε τρέχον κύκλο Καταχωρητής 1 Καταχωρητής 2 Καταχωρητής 3 aa 2 aa 3 aa 4 aa 5 aa ii+2 Εξωτερικές πύλες aa ii+1 Καταχωρητής 4 Κατάσταση Καταχωρητής 1 Καταχωρητής 2 Καταχωρητής 3 Καταχωρητής 4 αρχική a2 a3 a4 a5 1 ο shift a5,a7 a2,a5 a3 a4,a6 2 ο shift a4,a6,a9 a4,a5,a6,a7 a2,a5 a3,a8 3 ο shift a3,a8,a11 a3,a4,a6,a8,a9 a4,a5,a6,a7 a2,a5,a10 4 ο shift a2,a5,a10,a13 a2,a3,a5,a8,a10,a11 a3,a4,a6,a8,a9 a4,a5,a6,a7,a12 Αυτές λοιπόν είναι όλες οι καταστάσεις που περνάει το LFSR μέχρι να γεμίσουν οι scan αλυσίδες και από κάθε μία, μεταβλητές μέσω του phase shifter μεταφέρονται στις scan chains. Ο phase shifter του εργαλείου μας, δημιουργείται δυναμικά με τη μέθοδο που αναπτύσσει ο Rajski (Βιβλιογραφία [3]) και καθώς η ανάλυση της μεθόδου ξεφεύγει από τους σκοπούς της εργασίας, απλά θα πούμε ότι είναι μία αυτοματοποιημένη μέθοδος που λαμβάνει υπόψη τη μορφολογία του LFSR. Για το συγκεκριμένο παράδειγμα ο phase 16
shifter που παράχθηκε, παίρνει δεδομένα από τρία σημεία του LFSR, για να γεμίσει το κελί της αντίστοιχης αλυσίδας και περιγράφεται από την εξής μορφή: 1 2 3 1 2 4 Από τα στοιχεία αυτά καταλαβαίνουμε ότι για να γεμίσει το κάθε κελί της 1 ης αλυσίδας θα κάνει XOR τα δεδομένα που βρίσκονται στον 1 ο, 2 ο και 3 ο καταχωρητή του LFSR ενώ για το κάθε κελί της 2 ης αλυσίδας θα κάνει XOR τα δεδομένα του 1 ου, 2 ου και 4 ου καταχωρητή. Σχηματικά η ροή των δεδομένων, για τη γενική περίπτωση, μπορεί να αναπαρασταθεί ως εξής: Scan Chain 1 Scan Chain 2 Scan Chain 3 Scan Chain Μήκος διαν / # scan αλυσίδων Μπορούμε όμως για αυτή τη φάση της εξομοίωσης να δώσουμε ένα πιο επεξηγηματικό σχήμα του κυκλωμάτων που χρησιμοποιούμε, βασισμένο στο παράδειγμα που ακολουθούμε. Στο επόμενο σχήμα θα γίνουν σαφέστερες οι είσοδοι και έξοδοι των πυλών ενώ θα εμφανιστούν και τα XOR δέντρα που αναφέραμε προηγουμένως. Όπως και πριν οι γραμμές με το μπλε χρώμα συμβολίζουν τα εξωτερικά κανάλια καθώς εδώ δεν γίνεται διάκριση σε εξωτερικές και εσωτερικές πύλες XOR. Επίσης στους καταχωρητές έχουμε διατηρήσει την αρχική κατάσταση του LFSR καθώς είναι το πρώτο βήμα και στην συμβολική εξομοίωση για την παραγωγή των διανυσμάτων. Τέλος πρέπει να πούμε ότι εδώ δεν εμφανίζεται το κύκλωμα το οποίο ονομάζουμε ως vector counter διότι για την περιγραφή που ακολουθεί δεν επιδρά. Παρουσίαση του κυκλώματος αυτού θα γίνει σε επόμενη ενότητα. 17
Καταχωρητής 1 Καταχωρητής 2 Καταχωρητής 3 Καταχωρητής 4 aa 2 aa 3 aa 4 aa 5 Phase Shi ft er Slice 5 Slice 4 Scan Chains Slice 3 Slice 2 Slice 1 Scan Chain 2 Scan Chain 1 Σχήμα 5 Στο σχήμα 5 εμφανίζεται ένας νέος όρος, το slice ή αλλιώς κομμάτι το οποίο δεν είναι τίποτα παραπάνω από τα δεδομένα του αντίστοιχου κελιού όλων των αλυσίδων, που μπαίνουν σε κάθε κύκλο. Από εδώ και στο εξής τα δεδομένα που βρίσκονται στις scan chains θα αναφέρονται και ως symbolic vector, δηλαδή συμβολικό διάνυσμα. Αυτό που βλέπουμε είναι ότι έχουμε όσα slices όσο και το μήκος της αλυσίδας κάτι που είναι λογικό και επίσης ότι οι scan αλυσίδες γεμίζουν από κάτω προς τα πάνω δηλαδή τα δεδομένα του κάθε πρώτου κύκλου μπαίνουν στο 1 ο slice και τα δεδομένα του κάθε 5 ου κύκλου, μπαίνουν στο 5 ο. Για να μην παρερμηνευτούν οι όροι πρώτος και πέμπτος κύκλος, εδώ αναφέρουμε σαν πρώτο κύκλο, τον κύκλο ο οποίος ξεκινάει μετά από την παραγωγή ενός διανύσματος, δηλαδή το LFSR δεν σταματάει να λειτουργεί και ξεκινάμε τη διαδικασία από την αρχή για κάθε διάνυσμα, αλλά συνεχίζει κανονικά, οπότε όταν πχ λέμε πρώτος κύκλος για να προσπαθήσουμε να παράγουμε το όποιο τρίτο διάνυσμα, θα εννοείτε ότι το LFSR βρίσκεται στον 11 ο κύκλο λειτουργίας του. Αφού λοιπόν είδαμε το πώς διαμορφώνονται τα δεδομένα του LFSR μέχρι τη στιγμή που γεμίζουν οι αλυσίδες, μπορούμε πλέον να δούμε και πως γεμίσανε οι αλυσίδες πάντα ακολουθώντας τη λογική του σχήματος 5. 18
Scan Chain 2 Scan Chain 1 a3,a4,a5,a6,a7,a8,a11,a12,a13 a4,a6,a9,a11,a13 Slice 5 a2,a4,a5,a6,a9,a10,a11 a5,a7,a9,a11 Slice 4 a3,a5,a7,a8,a9 a2,a7,a9 Slice 3 a2,a4,a6,a7 a2,a3,a7 Slice 2 a2,a3,a5 a2,a3,a4 Slice 1 Αυτή είναι η πρώτη φάση της διαδικασίας παραγωγής του κάθε διανύσματος με τη δεύτερη να είναι η πραγματική παραγωγή του διανύσματος από τα δεδομένα του συμβολικού. Να υπενθυμίσουμε ότι όλες οι μεταβλητές του κάθε κελιού γίνονται μεταξύ τους XOR, κάτι που συμβολίζεται με το κόμμα και ο λόγος που το αναφέρουμε είναι διότι εμφανίζονται ταξινομημένες κάτι που μπορεί να οδηγήσει σε σύγχυση, αλλά αυτό γίνεται μόνο διότι ακολουθούνται οι συμβάσεις της υλοποίησης, στην οποία οι γραμμικές αυτές εκφράσεις διατηρούνται σε ταξινομημένες λίστες για λόγους ταχύτητας, καθώς δύο ταξινομημένες λίστες μπορούν να συγχωνευτούν σε γραμμικό χρόνο (τόσες πράξεις όσες και το άθροισμα των στοιχείων τους) σε αντίθεση με το να κρατούσαμε τα στοιχεία της λίστας ακανόνιστα μεταξύ τους. - Θέματα Υλοποίησης Πριν προχωρήσουμε παρακάτω θα πρέπει να εμβαθύνουμε σε κάποια σημεία της υλοποίησης του εργαλείου έτσι ώστε να κατανοήσουμε τους μηχανισμούς που χρησιμοποιούμε για να μεταβούμε στα επόμενα στάδια της εξομοίωσης. Εδώ δεν θα αναφέρουμε καθαρά τεχνικά θέματα, αλλά τη λογική με την οποία σχεδιάσαμε κάποια κομμάτια του εργαλείου και τον λόγο για τον οποίο ακολουθήσαμε τις όποιες σχεδιαστικές επιλογές. Καταρχήν θα πρέπει να μιλήσουμε για της δομές δεδομένων που διατηρεί το εργαλείο μας και οι οποίες βοηθάνε στη σωστή και βέλτιστη λειτουργία της εξομοίωσης. Όλες οι δομές μας είναι στην ουσία πίνακες λιστών με κύριους, τους πίνακες λιστών για την αναπαράσταση του LFSR, των scan αλυσίδων και τον πίνακα ιστορικού καθορισμού τον μεταβλητών. Ο τελευταίος πίνακας κρατάει στοιχεία για το αν μία μεταβλητή έχει οριστεί, δηλαδή έχει πάρει μία τιμή 0 ή 1 ή έχει συσχετιστεί με μία γραμμική έκφραση. Αν μία μεταβλητή πχ η a2 δεν έχει οριστεί τότε η τρίτη λίστα του πίνακα αυτού (κελί 0, κελί 1, κελί 2) είναι κενή ενώ αν έχει πάρει πχ την τιμή 1 τότε υπάρχει ένας κόμβος στη λίστα που περιέχει την τιμή 1. Αν η μεταβλητή έχει συσχετιστεί με μία γραμμική έκφραση τότε στη συγκεκριμένη λίστα θα υπάρχουν οι κόμβοι με τον καθένα να έχει ως τιμή τον δείκτη της κάθε μεταβλητής που ανήκει στην γραμμική έκφραση. Για παράδειγμα αν είχαμε ότι 19