Η μνήμη flowGroup έχει 3072 στοιχεία προσεταιριστικής μνήμης, οργανωμένα σε ένα πίνακα 256 επί 12-bit λέξεις. Καθένα από αυτά αποτελείται από 9 τρανζίστορ όπως φαίνεται στο σχήμα 3.3. Το πάνω μέρος είναι ένα συμβατικό κύτταρο στατικής RAM των 6 τρανζίστορ, ενώ το σκιασμένο μέρος αποτελεί τη λογική αποκλειστικού-ή των 3 τρανζίστορ. Είναι πλήρως δίπορτο, με δύο ζευγάρια bitlines. Το μέγεθός του είναι 7.25 μm x 11.1 μm.
Figure 3.3: Το δίπορτο κύτταρο της μνήμης flowGroup
Αν και η έκδοση τύπου NAND (σχήμα 3.4) ενός κυττάρου CAM καταλαμβάνει μικρότερο χώρο, απορρίφθηκε σαν επιλογή λόγω της αργότερης εκφόρτισης της γραμμής ταιριάσματος (υπάρχουν δύο τρανζίστορ στη σειρά και μία επιπλέον επαφή ανά κύτταρο) [NC92].
Figure 3.4: Συγκριτής ενός κυττάρου μνήμης CAM βάσει λογικής τύπου NAND
Ο οδηγητής των γραμμών ανίχνευσης και ο οδηγητής του σήματος search (ενεργό όταν είναι μηδέν) απεικονίζονται στο σχήμα 3.5.
Figure 3.5: Ο οδηγητής των bitlines ανίχνευσης στη μνήμη flowGroup
Η μνήμη outMask έχει 4352 κύτταρα μνήμης, οργανωμένα σε ένα πίνακα 256 επί 17-bit λέξη. Η πρώτη πόρτα χρησιμοποιείται για κανονικές προσπελάσεις ανάγνωσης εγγραφής, η δεύτερη πόρτα για αλλαγή και ανάγνωση, ενώ η τρίτη χρησιμοποιείται για ένα ειδικό είδος διευθυνσιοδότησης μέσω περιεχομένου. Όταν ψάχνουμε τη μνήμη outMask, οποιαδήποτε αποθηκευμένη λέξη που έχει ένα ή περισσότερα bit 1 κοινά με τη λέξη που ψάχνουμε θα δώσει ένα επιτυχές αποτέλεσμα. Έτσι μία μοναδική bitline (match enable) ανά στήλη χρησιμοποιείται κατά το ψάξιμο της μνήμης (σχήμα 3.6) [S.S91]. Το κύτταρο της μνήμης καταλαμβάνει χώρο 7.25 μm x 10.25 μm.
Figure 3.6: Το κύτταρο μνήμης τριών πορτών της μνήμης outMask
Είναι γενικώς αποδεκτό ότι η μοντελοποίηση διαφόρων στοιχείων της μνήμης είναι λιγότερο ακριβής παρά την κατασκευή μίας πραγματικής δομής και προσπαθώντας να ενσωματώσουμε σενάρια με τις δυσκολότερες περιπτώσεις κάτω από τις χειρότερες συνθήκες. Κάτω από αυτή την προοπτική κατασκευάστηκε ένα κύκλωμα μνήμης αποτελούμενο από λέξη εύρους 30 bits (έναντι των πραγματικών 29 bits), 12 κύτταρα της μνήμης flowGroup και 18 της outMask. Οι γραμμές των λέξεων οδηγούνταν από πραγματικούς οδηγητές από αποκωδικοποιητή και οι γραμμές ταιριάσματος ήταν φορτωμένες με το πραγματικό φορτίο που θα οδηγείται στο τελικό κομμάτι μνήμης. Τα κύτταρα μνήμης υπό εξαντλητικό έλεγχο (1, 2, 13, 14) βρίσκονταν στο σημείο διασταύρωσης της οριζόντιας γραμμής των κυττάρων με διπλές στήλες των 256 κυττάρων, έτσι ώστε οι bitlines να υπόκεινται στο κανονικό πραγματικό φορτίο. Στην κορυφή της λέξης των 30 bits υπάρχουν τα κυκλώματα οδήγησης των bitlines, οι αισθητήριοι ενισχυτές, οι μανταλωτές εισόδου και εξόδου, οι οδηγητές των ρολογιών των σημάτων εγγραφής, ψαξίματος και ενεργοποίησης των αισθητήριων ενισχυτών.
Ο ακόλουθος πίνακας (πίνακας 3.1.2) απεικονίζει ένα από τα πιο αντιπροσωπευτικά σενάρια που εφαρμόστηκαν στην παραπάνω δομή για έλεγχο. Όλες οι δυνατές και κρίσιμες λειτουργίες έχουν συμπυκνωθεί σε ένα διάστημα προσομοίωσης 6 συνεχόμενων κύκλων ρολογιού των 20 ns.
Το σχήμα 3.7 δείχνει τα αποτελέσματα προσομείωσης που επαληθεύουν την
ορθή λειτουργία. Μία επικίνδυνη κατάσταση μπορεί να συμβεί αν κατά τη διάρκεια
ψαξίματος στη μνήμη flowGroup όλα τα κύτταρα μίας στήλης έχουν αποθηκευμένη
την ίδια τιμή με αυτήν του συγκεκριμένου bit που ψάχνουμε, εκτός από ένα μοναδικό
που πρέπει να εκφορτίσει τη γραμμή ταιριάσματος. Στην περίπτωση αυτή αποτελέσματα
προσωμοιώσεων δείξαν ότι ένας μέτριος οδηγητής των bitlines ψαξίματος ήταν
ικανοποιητικός, συνυπολογίζοντας βεβαίως και τις παρασιτικές χωρητικότητες
λόγω διασύνδεσης. Εντούτοις, αν το κύτταρο μνήμης βρίσκεται στην αντίθετη
κατάσταση, ένα μικρό ρεύμα μεγέθους 4 A διαρρέει από την bitline ψαξίματος.
Όσο και αν φαίνεται ασήμαντο, αν όλα τα 255 κύτταρα έχουν αυτή την αντίθετη
πολικότητα προς το bit που ψάχνεται τότε ένα ρεύμα διαρροής, μεγέθους περίπου 1 mA
είναι παραπάνω από αρκετό για να καταρρίψει την αρχική μας υπόθεση για το ρεύμα
που πρέπει να παρέχει ο οδηγητής για να φορτίσει την bitline ψαξίματος.
Η σχετικά αργή ανύψωση της bitline ``BS1'' οφείλεται σε αυτό το φαινόμενο.
Figure: Κυματομορφές ανίχνευσης στις μνήμες flowGroup-outMask (χειρότερη περίπτωση :
διαφορά σε ένα μονο bit)
Όπως φαίνεται μία λειτουργία ψαξίματος που αποτυγχάνει προκαλεί σχεδόν πλήρες κατέβασμα της γραμμής ψαξίματος, κάνοντας φανερό λοιπόν ότι δεν υπάρχει ανάγκη για έναν αισθητήριο ενισχυτή. Είναι επίσης φανερό ότι η γραμμή ψαξίματος μίας λέξης που γράφεται εκφορτίζεται για να αποφευχθούν καταστάσεις ανταγωνισμού όπου μία λέξη γράφεται και ψάχνεται ταυτόχρονα στον ίδιο κύκλο. Λαμβάνοντας υπόψη τον ιδιαίτερο τρόπο διευθυνσιοδότησης της μνήμης outMask, ένα ψάξιμο μπορεί να έχει ένα επιτυχές αποτέλεσμα αν ψάξουμε για μία λέξη σχηματιζόμενη από ένα υπάρχον flow group και όλα τα άλλα μηδενικά. Η σωστή λειτουργία όμως της λίστας κυττάρων χωρίς πιστώσεις (CLL) αποτρέπει εξ' ολοκλήρου τέτοια λανθανσμένη λειτουργία.
Στο σχήμα 3.8 φαίνονται οι κυματομορφές που αντιστοιχούν στη λειτουργία αλλαγής/ανάγνωσης που συμβαίνει στην μνήμη outMask. Τα σήματα ``DO'' είναι οι έξοδοι μιας κοινής θύρας ram, ενώ τα ``MDO'' της θύρας αλλαγής/ανάγνωσης. Αν ταυτόχρονα ένα κύτταρο μνήμης αλλάζει και διαβάζεται από την δεύτερη πόρτα έγκυρα δεδομένα μπορούμε να πάρουμε μετά από 7.3ns μετά την ανερχόμενη ακμή του phi2. Στον πέμπτο κύκλο συμβαίνει ανάγνωση και από τις δύο πόρτες στον ίδιο κύκλο και έχουμε ένα έγκυρο αποτέλεσμα μετά από 5.7ns στις εξόδους ``DO'' ενώ στις εξόδους ``MDO'' μετά από 3.2ns. Η χειρότερη περίπτωση εμφανίζεται όταν το κύτταρο εξυπηρετεί και την πόρτα ψαξίματος στον ίδιο κύκλο. Ένα διάβασμα από την τυπική ram πόρτα έχει τώρα χρόνο προσπέλασης 8 ns, ενώ το διάβασμα από την πόρτα αλλαγής/ανάγνωσης έχει χρόνο 3.7 ns.
Figure 3.8: Λειτουργία αλλαγής/ανάγνωσης στη μνήμη outMask