DE60216938T2 - Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher - Google Patents

Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher Download PDF

Info

Publication number
DE60216938T2
DE60216938T2 DE60216938T DE60216938T DE60216938T2 DE 60216938 T2 DE60216938 T2 DE 60216938T2 DE 60216938 T DE60216938 T DE 60216938T DE 60216938 T DE60216938 T DE 60216938T DE 60216938 T2 DE60216938 T2 DE 60216938T2
Authority
DE
Germany
Prior art keywords
string
filtered
bit
common input
input string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60216938T
Other languages
English (en)
Other versions
DE60216938D1 (de
Inventor
Varadarajan Los Altos Hills SRINIVASAN
Sandeep Santa Clara KHANNA
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netlogic I LLC
Original Assignee
Netlogic Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netlogic Microsystems Inc filed Critical Netlogic Microsystems Inc
Publication of DE60216938D1 publication Critical patent/DE60216938D1/de
Application granted granted Critical
Publication of DE60216938T2 publication Critical patent/DE60216938T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

  • GEBIET DER ERFINDUNG
  • Diese Erfindung bezieht sich auf das Gebiet der Speichervorrichtungen und insbesondere auf inhaltsadressierbare Speichervorrichtungen.
  • HINTERGRUND DER ERFINDUNG
  • Netzwerke können Ansammlungen von Computersystemen (z.B. Clients und Server) besitzen, die über Übertragungsleitungen miteinander verbunden sind, um zwischen ihnen die Übertragung von Daten zu ermöglichen. Ein Netzwerk beinhaltet typischerweise mehrere Zugangspunkte (Router und Server), die Daten zwischen Übertragungsleitungen schalten und/oder weiterleiten, um Daten von einer Quelle zu einem Ziel zu übertragen. Daten werden typischerweise in der Form von Paketen übertragen, die aus kleineren Datenzellen zusammengesetzt sind. Ein Paket ist eine Dateneinheit, die in einem paketgeschalteten Netzwerk zwischen einer Quelle und einem Ziel übertragen wird. Wenn eine Datei (z.B. eine E-Mail, eine Grafik, etc.) von einem Ort zu einem anderen in einem Netzwerk gesendet wird, wird die Datei in solch kleinere Pakete unterteilt, wodurch sie für die Übertragung effizienter werden. Die individuellen Pakete für eine gegebene Datei können entlang verschiedener Wege durch die Netzwerke wandern, wobei jedes Paket sowohl Daten- als auch Übertragungsinformationen besitzt, die mit dem Weiterleiten der Daten verknüpft sind. Als solches kann ein Paket dahingehend beschrieben werden, dass es Nutzdaten hat, welches die Daten beinhaltet, und einen oder mehrere Kopfzeilen bzw. Header, die die Weiterleitungsinformationen beinhalten (z.B. eine Zieladresse).
  • Wenn alle Pakete an einem Zielort eingetroffen sind, werden sie am empfangenden Ende zur Originaldatei zusammengefügt. Solch ein Paketschaltverfahren ist eine effiziente Art und Weise, die Übertragung in einem Netzwerk ohne Verbindungen zu übertragen. Dies steht im Gegensatz zu einem leitungsvermittelten Schema, wo eine Verbindung (z.B. eine Sprachverbindung) die Überlassung eines bestimmten Pfads während der Dauer der Verbindung erfordert.
  • Ein Router ist eine Vorrichtung (z.B. Hardware, Firmware, Software), die das nächste Netzwerksegment bestimmt, zu welchem ein Paket in Richtung zu seinem Ziel befördert werden muss. Ein Router kann an Punkten positioniert werden, die innerhalb eines Netzwerkes liegen oder wo Netzwerke aneinander stoßen, nachfolgend als Gateway bezeichnet. Ein Router kann Tabellen von verfügbaren Wegen und ihren Benutzungsbedingungen erzeugen und verwalten, zusammen mit anderen Informationen zur Bestimmung des besten Weges für ein gegebenes Paket. Typischerweise wan dert ein Paket durch eine Anzahl von Netzwerkpunkten, die Router besitzen, bevor es an seinem Zielort eintrifft.
  • Wenn ein Datenpaket als Input bei einem Router eintrifft, werden verschiedene Nachschlagevorgänge durchgeführt, um die nachfolgende Behandlung des Pakets zu bestimmen, wie es in 1 gezeigt ist. Die Nachschlagevorgänge können zum Beispiel beinhalten, wohin das nächste Paket gesendet wird (nächster Sprung), das Dienstgüteerfordernis (QoS), die Ethernet-Port-Adresse, etc. Man betrachte z.B. ein Paket, das bei einem Router A eintrifft. Der Router A muss bestimmen, ob das Paket für lokale Server bestimmt ist, die direkt mit dem Router A verbunden sind, oder ob das Paket zum nächsten Router auf einem Weg (Router B) zu einem Ziel gehen soll. Zusätzlich kann der Router A eine gewisse Priorität zuordnen, die auf der Zieladresse (DA) und der Quellenadresse (SA) des Pakets basiert.
  • Der Paket-Header kann zuerst geparst oder verarbeitet werden, um die Werte der verschiedenen Felder zu erhalten (z.B. SA, DA, Protokolltyp, QoS, etc.), um verschiedene Nachschlagevorgänge durchzuführen. Ein Paketklassifikationsnachschlagevorgang kann z.B. unter Benutzung von SA, DA und anderen relevanten Feldern im Paket-Header durchgeführt werden. Der Nachschlagevorgang für den nächsten Schritt kann z.B. durchgeführt werden, um festzustellen, ob das Paket für lokale Server oder für den Router B bestimmt ist. Wenn das Paket für den Router B bestimmt ist, wird das Paket in eine Warteschlange für den Router B eingereiht. Wenn das Paket für einen lokalen Server bestimmt ist (z.B. Server 1 oder Server 2) kann ein MAC- (Media Access Control) Nachschlagevorgang durchgeführt werden, um das Paket zum jeweiligen Server zu senden. In dem vorangegangenen Beispiel sind drei Nachschlagevorgänge erforderlich, um das Paket auf seinen Weg zu bringen: Paketklassifikation, nächster Sprung und MAC. Oftmals sind jedoch andere Nachschlagevorgänge mit dem Paket-Header durchzuführen, wobei die Zahl der Nachschlagevorgänge fünf oder mehr überschreitet.
  • Router können Prozessoren und inhaltsadressierbare Speicher- (CAM-) Vorrichtungen benutzen, um die verschiedenen Nachschlagevorgänge bei den Paketen durchzuführen. Im Gegensatz zu einer Vorrichtung mit einem Speicher mit wahlfreiem Zugriff (RAM), bei der auf Informationen durch Spezifizierung einer bestimmten Speicherortsadresse zugegriffen wird, wird auf die in einem CAM gespeicherten Daten über die Inhalte der Daten zugegriffen. Insbesondere benutzt ein CAM anstelle einer Adresse für den Zugriff auf einen bestimmten Speicherort einen Schlüssel, der einen Teil des gewünschten Inhalts einer bestimmten Speicherzelle in der Speichervorrichtung beinhaltet. Der CAM kann von einem Prozessor angewiesen werden, den Schlüssel, der auch als die Komparanddaten bezeichnet wird, (z.B. Paket-Header-Daten) mit Daten zu vergleichen, die in seinem assoziativen Speicherarray gespeichert sind, wie es in 2 veranschaulicht ist. Der CAM untersucht simultan alle seine Einträge und wählt die gespeicherten Daten aus, die mit dem Schlüssel zusammenpassen.
  • Wenn die gesamte CAM-Vorrichtung, oder Blöcke derselben, durchsucht wird, und zwar simultan auf das Zusammenpassen der gespeicherten Daten mit den Schlüssel-Komparanddaten, zeigt die CAM-Vorrichtung das Vorhandensein eines Treffers durch Setzen eines Treffer-Flags an. Mehrere Treffer können auch durch Setzen eines Multi-Treffer-Flags angezeigt werden. Die CAM-Vorrichtung besitzt typischerweise einen Prioritätskodierer, um den Trefferort in eine Trefferadresse oder in einen CAM-Index zu übersetzen, und diese Adresse an ein Statusregister auszugeben, sodass auf die Trefferdaten zugegriffen werden kann. Der Prioritätskodierer kann auch den Speicherort mit der höchsten Priorität auswählen, wenn es mehr als einen Treffereintrag gibt.
  • Daten können in Form von Zeichenketten von binären Ziffern ("Bits") repräsentiert werden, die einen niedrigen ("0") logischen Zustand und einen hohen ("1") logischen Zustand haben. Verschiedene Typen von CAMs können mit verschiedenen Datenformaten benutzt werden. Ein binärer CAM ist ausgelegt, mit "0"- und "1"-Zuständen betrieben zu werden, wohingegen ein ternärer CAM ausgelegt ist, mit den Zuständen "0", "1" und "egal" betrieben zu werden. Die Bits können in Gruppen wie z.B. einem Wort (z.B. 64 oder 72 Bit breit) organisiert werden und in verschiedenen Segmenten eines CAMs abgelegt sein. Die Schlüssel, die für verschiedene Datenfelder benutzt werden, können verschiedene Wortgrößen haben, z.B. kann ein Schlüssel für den Nachschlagevorgang einer Klassifikation 128 Bit breit sein und der Schlüssel für den Nachschlagevorgang des nächsten Sprungs kann 32 Bit breit sein.
  • Ein Router kann mehrere CAMs besitzen, wobei jeder CAM eine andere Tabelle haben kann, oder alternativ einen einzigen CAM, der mehrere Blöcke für jeden der verschiedenen Tabellen besitzt, um verschiedene Nachschlagevorgänge durchzuführen. Zum Beispiel kann ein Router einen 32-Bit breiten CAM für den nächsten Schritt haben, einen 128-Bit CAM für die Klassifikation und einen 48-Bit-MAC-CAM. Bei Routern mit mehreren CAMs werden typischerweise die mehreren CAMs mit gemeinsamen Bussen verbunden, die benutzt werden, um die verschiedenen Schlüssel und andere Eingangs- und Ausgangsdaten mit jedem der CAM-Vorrichtungen zu übertragen. Auf ähnliche Weise wird bei Routern, die einen einzigen CAM mit mehreren Blöcken haben, auf jeden der Blöcke unter Benutzung gemeinsamer Busse zugegriffen. Daher werden Nachschlagevorgänge typischerweise sequenziell durchgeführt, bevor ein Paket verarbeitet (z.B. zum nächsten Ziel weitergeleitet oder klassifiziert) wird. Weil die Busse so viele Eingabe- und Ausgabefunktionen aller CAMs oder CAM-Blöcke bereitstellen, werden viele Taktzyklen benötigt, um die Daten auf den Bus zu multiplexen. Dies begrenzt typischerweise die Suchrate und den gesamten Durchsatz von konventionellen CAM-Vorrichtungen. Wenn die Zahl der Ports, Segmente oder Vorrichtungen, die durch Router unterstützt werden, und die Zahl der Nachschlagevorgänge ansteigt, können konventionelle CAM-Vorrichtungen und -architekturen unerwünschterweise den gesamten Durchsatz des Systems begrenzen.
  • Das US-Patent 6,098,147 bezieht sich auf ein Verfahren und eine Vorrichtung für die längste Koinzidenzdatendetektion unter Benutzung assoziativer Speichereinheiten, die Interleave-Daten haben. Gemäß diesem Dokument vergleicht jede der N assoziativen Speichereinheiten einen verteilten Teil externer Daten sowie einen korrespondierenden Teil interner Daten mit einer ausgewählten Bitregion des signifikantesten Bits eines korrespondierenden Teils interner Daten und gibt ein Treffersignal aus, wenn in der ausgewählten Bitregion der korrespondierende Teil des externen Datenanteils und ein entsprechender Abschnitt der internen Daten miteinander koinzidieren. Dieses Dokument offenbart ebenfalls das Schieben von Masken-Bitdaten, wenn bei einer Vergleichsoperation kein Treffer erzielt wurde und offenbart das Verschieben der Masken-Bitdaten um ein Bit in Richtung auf das signifikanteste Bit und das Addieren einer "0" beim am wenigstens signifikanten Bit, wodurch die Bits der Datenmaske in denselben Positionen relativ zueinander erhalten werden.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung wird durch die beigefügten Patentansprüche definiert, die sich auf ein Verfahren und eine Vorrichtung für das gleichzeitige Durchsuchen verschiedener Tabellen in einem inhaltsadressierbaren Speicherarray beziehen.
  • Andere Merkmale und Vorteile der vorliegenden Erfindung werden aus den beigefügten Zeichnungen und von der detaillierten Beschreibung ersichtlich, die nachfolgend angegeben sind.
  • KURZE BESCHREIBUNG DER FIGUREN
  • Die vorliegende Erfindung wird beispielhaft durch die Figuren in den begleitenden Zeichenblättern beschrieben, die nicht beschränkend verstanden werden sollen.
  • 1 ist eine konzeptionelle Veranschaulichung der Paketbehandlung durch einen Router.
  • 2 veranschaulicht eine Ausführungsform einer CAM-Vorrichtung.
  • 3 zeigt eine Ausführungsform einer Leitungskarte oder Schaufel bzw. Blade eines Routers, der eine CAM-Vorrichtung hat, die konfiguriert ist, gleichzeitige Nachschlagevorgänge vor zunehmen.
  • 4A zeigt eine Ausführungsform einer Multiblock-CAM-Vorrichtung mit Eingangszeichenkettenfilterschaltkreisen.
  • 4B zeigt eine Ausführungsform eines Filterschaltkreises in einer Multiblock-CAM-Vorrichtung.
  • 5A zeigt eine Ausführungsform einer Eingangszeichenkette.
  • 5B ist eine konzeptionelle Darstellung des Betriebs der CAM-Vorrichtung unter Benutzung von bestimmten Paket-Header-Segmenten der Eingangszeichenkette der 5A.
  • 6 ist eine konzeptionelle Darstellung einer Ausführungsform des Filterns und Verdichtens einer Eingangszeichenkette.
  • 7 ist eine konzeptionelle Veranschaulichung einer Ausführungsform einer Bit-Manipulation für das Filtern und Verdichten einer Eingangszeichenkette.
  • 8 zeigt ein Verfahren für das Programmieren eines Filterschaltkreises, sodass dieser eine Eingangszeichenkette filtern und verdichten kann.
  • 9 zeigt eine Ausführungsform eines Crossbar-Schalters.
  • 10 zeigt eine Ausführungsform eines Speicherelements des Crossbar-Schalters der 9.
  • 11 zeigt eine Ausführungsform eines Filterschaltkreises.
  • 12 zeigt eine Ausführungsform des Adressengenerators der 11.
  • 13 zeigt eine weitere Ausführungsform des Adressengenerators der 11.
  • 14 zeigt eine weitere Ausführungsform eines Filterschaltkreises.
  • 15 zeigt eine Ausführungsform eines Datengenerators, der mit einem Blockfilterregister verbunden ist.
  • 16 zeigt ein Beispiel, wie die Ausführungsform der 15 benutzt wird.
  • 17 veranschaulicht zehn Matrix-Verbindungen für einen Crossbar-Schalter, basierend auf dem exemplarischen Bitmuster in einem Blockfilterregister.
  • 18 zeigt eine alternative Ausführungsform eines Datengenerators, der mit einem Blockfilterregister verbunden ist.
  • 19 zeigt eine Ausführungsform eines Blockfilterregisters, das mit einem Leseverstärker verbunden ist.
  • 20 zeigt eine Ausführungsform eines Crossbar-Schalters.
  • 21 zeigt eine weitere Ausführungsform eines Filterschaltkreises.
  • 22 zeigt eine Ausführungsform des Datengenerators der 21, der mit einer ODER-Logik und einem Blockfilterregister verbunden.
  • 23 zeigt eine weitere Ausführungsform eines Crossbar-Schalters.
  • DARSTELLUNG DER ERFINDUNG
  • In der folgenden Beschreibung werden zahlreiche spezielle Details dargelegt, wie z.B. spezielle Komponenten, Schaltkreise, Verfahren, etc., um ein gründliches Verständnis der vorliegenden Erfindung zu ermöglichen. Es wird jedoch dem Fachmann offensichtlich werden, dass diese speziellen Details nicht benutzt werden müssen, um die vorliegende Erfindung auszuführen. In anderen Fällen werden allgemein bekannte Komponenten oder Verfahren nicht im Detail beschrieben, um nicht unnötigerweise den Blick auf die vorliegende Erfindung zu verstellen.
  • Ausführungsformen der vorliegenden Erfindung beinhalten verschiedene Verfahrensschritte, die nachstehend beschrieben werden. Diese Schritte können durch Hardwarekomponenten ausgeführt werden oder können als maschinenausführbare Instruktionen verkörpert sein, die benutzt werden können, um Hardwarekomponenten (z.B. einen Prozessor, einen Programmschaltkreis), die mit den Instruktionen programmiert sind, anweisen, die Schritte durchzuführen. Alternativ können die Schritte durch eine Kombination von Hardware und Software ausgeführt werden.
  • Ausführungsformen der vorliegenden Erfindung können in Form eines Computerprogrammprodukts bzw. einer Software bereitgestellt werden, die ein maschinenlesbares Medium beinhaltet, auf welchem die Anweisungen abgelegt sind. Das maschinenlesbare Medium kann benutzt werden, um ein Computersystem (oder andere elektronische Vorrichtungen) zu programmieren, um Artikel herzustellen (z.B. Wafermasken), die benutzt werden, um Ausführungsformen der vorliegenden Erfindung herzustellen. Das maschinenlesbare Medium kann Disketten, optische Disketten, CD-ROMs und magnetooptische Disketten, ROMs, RAMs, EPROMs, EEPROMs, magnetische oder optische Karten, Flash-Speicher oder andere Arten von medien-/maschinenlesbare Medien sein, die geeignet sind, elektronische Instruktionen zu speichern, sind aber nicht darauf beschränkt.
  • Das maschinenlesbare Medium kann Daten speichern, die das Konstruktionslayout einer integrierten Schaltung repräsentieren, die Ausführungsformen der vorliegenden Erfindung verkörpern. Das Konstruktionslayout für den Rohchip der integrierten Schaltungen kann unter Benutzung verschiedener Mittel erzeugt werden, z.B. schematische Darstellungen, Textdateien, Netzlisten mit Gate-Niveau, Hardwarebeschreibungssprachen, Layout-Daten, etc. Das Konstruktionslayout kann für die Herstellung von Wafern in Masken-Layer konvertiert werden, die eine oder mehrere Rohchips der integrierten Schaltkreise besitzen. Die Rohchips der integrierten Schaltkreise können dann in verpackte Komponenten zusammengefasst sein. Das Design-Layout, die Erzeugung der Masken-Layer, die Herstellung und das Verpacken der integrierten Schaltkreis-Rohchips sind allgemein bekannt; entsprechend werden diese nicht ausführlich beschrieben.
  • Das Verfahren und die Vorrichtung, die hier beschrieben werden, sehen das Filtern einer gemeinsamen Eingangszeichenkette vor, um eine oder mehrere gefilterte Komparand-Zeichenketten zu erzeugen. In einer Ausführungsform ermöglicht das Filtern einer gemeinsamen Eingangszeichenkette gleichzeitige Nachschlagevorgänge in verschiedenen CAM-Tabellen, die mit mehreren gefilterten Komparanden verschiedener CAM-Vorrichtungen (oder verschiedene Blöcke einer CAM-Vorrichtung) durchgeführt werden, um Daten in gefilterten Komparand-Zeichenketten mit Daten, die in seinem assoziativen Speicher abgelegt sind, zu vergleichen. Indem mehrere Nachschlagevorgänge parallel und nicht sequenziell vorgenommen werden, wird der Paketdurchsatz (z.B. in einem Router) signifikant erhöht.
  • Die gemeinsame Eingangszeichenkette einschließlich mehrerer Komparanden oder Suchschlüsselinformationen kann durch eine Controller-Einheit wie z.B. einen Netzwerkprozessor oder eine Zentraleinheit gebildet werden. In einer Ausführungsform kann die gemeinsame Eingangszeichenkette einen oder mehrere Paket-Header besitzen oder Teile derselben. Die Eingangszeichenkette kann verschiedene Weiterleitung- bzw. Routing-Daten in Feldsegmenten der Eingangszeichenkette besit zen, die benützt werden, um die nachfolgende Behandlung des Pakets festzulegen, z.B. Klassifikation, nächster Schritt und MAC. Dieselbe Eingangszeichenkette passiert verschiedene Filterschaltkreise. Die Filterschaltkreise können vorprogrammiert werden, um es selektiv einem oder mehreren Segmenten der gemeinsamen Zeichenkette zu ermöglichen, als gefilterte Komparand-Daten zu einer oder mehreren CAM-Tabellen zu gelangen.
  • In einer Ausführungsform wird das Filtern auf einer Bitbasis durchgeführt, wobei spezielle vorbestimmte Bits aus der gemeinsamen Eingangszeichenkette ausgewählt werden, damit gefilterte Zeichenkettensegmente erzeugt werden. Die gefilterten Zeichenkettensegmente können ebenso zu geeigneten Bitpositionen verschoben werden, um die gefilterten Zeichenkettensegmente in eine verdichtete gefilterte Komparand-Zeichenkette zu verdichten. Die verschiedenen Verdichtungs- und/oder Filteroperationen, die mit der Eingangszeichenkette ausgeführt werden, können parallel anstelle von sequenziell durchgeführt werden, sodass eine Filteroperation gestartet werden kann, bevor eine weitere Filteroperation abgeschlossen ist. Jede der gefilterten Komparand-Zeichenketten kann dann den CAM-Vorrichtungsblöcken zur Verfügung gestellt werden. Auf diese Weise können alle CAM-Vorrichtungsblöcke gleichzeitig Nachschlagevorgänge durchführen. Alternativ kann das Filtern und/oder Verdichten sequenziell durchgeführt und kann vor nachfolgenden Nachschlagevorgängen abgeschlossen werden, oder kann gleichzeitig mit nachfolgenden Nachschlagevorgängen durchgeführt werden.
  • In einer Ausführungsform können die Filterungs- und Verdichtungsoperationen durch mehrere Crossbar-Schalter durchgeführt werden, die jeweils unter der Kontrolle eines entsprechenden Programmierschaltkreises sind. Die Eingangszeichenkette wird parallel zu allen Crossbar-Schaltern übertragen. Jeder Crossbar-Schalter kann durch seinen entsprechenden Programmierschaltkreis vorprogrammiert werden, um verschiedene Segmente der Eingangszeichenkette zu filtern und zu verdichten, um mehrere verdichtete und gefilterte Komparand-Zeichenketten zu erzeugen. Die mehreren gefilterten Komparand-Zeichenketten können dann benutzt werden, um verschiedene Nachschlagevorgänge unter Benutzung verschiedener Tabellen durchzuführen. Die verdichteten gefilterten Komparand-Zeichenketten können ohne Lücken zwischen ihnen kontinuierlich gefüllt werden. Der Programmierschaltkreis beinhaltet in einem Beispiel einen Adressengenerator, ein Blockfilterregister und einen Datengenerator. In einer Ausführungsform können die Crossbar-Schalter und/oder die Blockfilterregister mit RAM- (Random Access Memory) Vorrichtungen implementiert werden.
  • 3 zeigt eine Ausführungsform einer Leitungskarte oder Schaufel bzw. Blade eines Routers mit einer CAM-Vorrichtung, die konfiguriert ist, gleichzeitige Nachschlagevorgänge durchzuführen. Die Leitungskarte 300 besitzt einen Prozessor 310, Eingangsschnittstellenschaltungen 330, Ausgangsschnittstellenschaltungen 340, eine CAM-Vorrichtung 320, eine zugeordnete Datenspeichereinheit 370, einen Verkehrsmanager 370 und eine Nutzdatenspeichereinheit 350.
  • Der Prozessor 310 dient dazu, alle Operationen der Leitungskarte 300 gemeinsam mit den weiteren Komponenten der Leitungskarte 300 zu steuern. Zum Beispiel empfängt der Prozessor 310 über die Eingangsschnittstellenschaltung 330 Pakete von einem Netzwerkmedium, speichert die Nutzdaten der Pakete in der Nutzdatenspeichereinheit 350 und verarbeitet die Paket-Header-Informationen, um die erforderlichen Nachschlagevorgänge in der CAM-Vorrichtung 320 und die nachfolgende Behandlung der Pakete wie hier erläutert festzulegen. Eingangsschaltungen beinhalten z.B. PHY- und MAC-Vorrichtungen. Der Prozessor 310 sendet, basierend auf den Nachschlagevorgängen, die in der CAM-Vorrichtung 320 durchgeführt werden, mit der Ausgangsschnittstellenschaltung 340 Pakete über ein Netzwerkmedium. Die Ausgangsschnittstellenschaltung 340 kann mit einer Schaltstruktur verbunden werden oder kann direkt mit einem oder mehreren Routern oder Schaltern verbunden werden. Der Prozessor 310 kann ein oder können mehrere Netzwerkprozessoreinheiten (NPUs), Mikroprozessoren oder ein oder mehrere Spezialprozessoren wie z.B. ein digitaler Signalprozessor (DSP) sein. In einer weiteren Ausführungsform kann der Prozessor 310 eine andere Art von Controller sein, z.B. ein feldprogrammierbares Gate-Array oder ein Allzweckprozessor. Die Komponenten des Prozessors 310, der Eingangsschnittstellenschaltung 330, der Ausgangsschnittstellenschaltung 340 eines Routers sind allgemein bekannt, sodass entsprechend auf eine detaillierte Beschreibung verzichtet wird.
  • In Antwort auf Informationen im Paket-Header bestimmt der Prozessor 310 für das jeweilige Paket die Zahl und die Arten der von einem oder mehreren der CAM-Vorrichtungen 320 durchzuführenden Nachschlagevorgänge und erzeugt die Suchschlüssel für diese Nachschlagevorgänge. Die Suchen oder Nachschlagevorgänge können z.B. Nachschlagevorgänge für eine Klassifikation, für das Weiterleiten (z.B. Nachschlagevorgänge des nächsten Sprungs oder der längsten Präfix-Übereinstimmung (LPM), MAC-Nachschlagevorgänge, MPLS-Nachschlagevorgänge, etc.) beinhalten. Wenn mehrere Suchen erforderlich sind, erstellt der Prozessor 320 einen zusammengesetzten Suchschlüssel, der mindestens zwei und bis zu allen der verschiedenen Suchschlüssel für die Nachschlagevorgänge beinhaltet. Der zusammengesetzte Suchschlüssel wird der CAM-Vorrichtung 320 als eine gemeinsame Eingangszeichenkette zur Verfügung gestellt. Die CAM-Vorrichtung 320 identifiziert und extrahiert die jeweiligen Suchschlüssel selektiv aus der gemeinsamen Eingangszeichenkette und stellt den zugeordneten CAM-Blöcken die jeweiligen Suchschlüssel zur Verfügung, um die Nachschlagevorgänge durchzuführen. Es ist von Vorteil, dass dann die Nachschlagevorgänge gleichzeitig oder simultan in den CAM-Blöcken der CAM-Vorrichtung 320 stattfinden können, wodurch der gesamte Durchsatz gegenüber konventionellen Systemen erhöht wird, bei denen die Suchen sequenziell abgearbeitet werden.
  • Die CAM-Vorrichtung 320 kann eine Multiblock-CAM-Vorrichtung sein, bei der jeder Block imstande ist, eine andere Tabelle für Komparand-Nachschlagevorgänge zu speichern, wie es nachstehend mit Bezug auf die 4A und 4B diskutiert wird. Alternativ kann die CAM-Vorrichtung 320 mehrere Einzelblock-CAM-Vorrichtungen repräsentieren, (z.B wobei jede Einzelblock-CAM-Vorrichtung auf ei nem anderen integrierten Schaltkreissubstrat abgelegt ist) und wobei jede CAM-Vorrichtung benützt wird, eine andere Tabelle für Komparand-Nachschlagevorgänge zu speichern. Nachdem in einer CAM-Vorrichtung 320 ein oder mehrere Nachschlagevorgänge durchgeführt wurden, können zugeordnete Informationen für Treffereinträge (z.B. zusätzliche Weiterleitungsinformationen und/oder Paketinformationen) aus der zugeordneten Dateneinheit 370 gewonnen werden. Der Prozessor 310 kommuniziert dann mit dem Verkehrsmanager 320, um die Ausgabe eines Pakets durch die Leitungskarte 300 über die Ausgangsschnittstellenschaltung 340 zeitlich einzuplanen.
  • 4A zeigt eine Ausführungsform einer Multiblock-CAM-Vorrichtung mit Eingangszeichenketten-Filterschaltkreisen. Die CAM-Vorrichtung 400 kann die CAM-Vorrichtung 320 der 3 sein. Wie oben mit Bezug auf den CAM 320 der 3 diskutiert, kann ein Block ein ganzes Array oder ein Teil eines größeren Arrays sein. In einer Ausführungsform beinhaltet die CAM-Vorrichtung 400 Multiblock-Speicher-Arrays (N Blöcke), wobei jeder Block eine andere Nachschlagetabelle oder Teile derselben oder mehrere gemeinsame Nachschlagetabellen speichert (z.B. können Block 0 und Block 1 eine Nachschlagetabelle speichern und die Blöcke N-3 bis N-1 eine andere Nachschlagetabelle). Obwohl zwecks einfacherer Darstellung fünf Blöcke 410414 gezeigt werden, kann die CAM-Vorrichtung 400 mehr oder weniger als fünf Blöcke haben. Jeder der Blöcke 420424 ist jeweils mit einem Filterschaltkreise verbunden. Jeder der Filterschaltkreise 420424 ist konfiguriert, eine gemeinsame Eingangszeichenkette 405 zu empfangen, und aus der Eingangszeichenkette 405 ein oder mehrere Segmente auszufiltern, zu extrahieren oder zu entfernen, die benutzt werden können, um einen Nachschlagevorgang durchzuführen. In einer alternativen Ausführungsform kann die CAM-Vorrichtung 400 mehrere Einzelblock-CAM-Vorrichtungen beinhalten, anstelle einer einzigen Multiblock-CAM-Vorrichtung, wie sie in den 4A und 4B gezeigt ist. Jeder Filterschaltkreis kann auch die extrahierten Suchinformationen verdichten, um aneinander angrenzende Bits zu erzeugen, die in einer Suche mit Daten partizipieren, die im entsprechenden CAM-Block abgelegt sind.
  • Jeder der Filterschaltkreise 420424 kann dezidierte Filterfunktionen besitzen. Alternativ kann jeder Filterschaltkreis programmierbar sein, um ein oder mehrere Segmente oder Bits der Eingangszeichenkette 405 dynamisch auszuwählen.
  • In einer Ausführungsform, die in 4B dargestellt ist, besitzt jeder der Filterschaltkreise 420424 einen Crossbar-Schalter (XBAR) und einen Programmierschaltkreis (PGM). Zum Beispiel besitzt der Filterschaltkreis 420 einen Crossbar-Schalter 430 und einen Programmierschaltkreis 440. Der Programmierschaltkreis 440 kann benutzt werden, um den Crossbar-Schalter 430 vorzuprogrammieren, damit dieser bestimmte Feldsegmente der Eingangszeichenkette 405 ausfiltert und Bitpositionen der Feldsegmente verschiebt, um das gefilterte Zeichenkettensegment in eine verdichtete, gefilterte Komparand-Zeichenkette zu verdichten. Es sollte angemerkt werden, dass ein oder mehrere der Filterschaltkreise 420424 keinen Programmierschaltkreis besitzen müssen. Zum Beispiel können eine oder mehrere der Crossbar-Schalter für den Zugang durch externe Vorrichtungen und für die direkte Programmierung (z.B. durch den Prozessor 310 der 3) konfiguriert sein. Programmierschaltkreise in der CAM-Vorrichtung 400 können auch als zusätzlicher Komfort für den Benutzer hinzugefügt werden.
  • Der Programmierschaltkreis 440 ist konfiguriert, Filterdaten (FDATA) über Datenleitungen) 491 zu empfangen, die benützt werden, um den Crossbar-Schalter 430 direkt oder indirekt zu programmieren, um eine bestimmte gefilterte Komparand-Zeichenkette aus der gemeinsamen Eingangszeichenkette 405 zu erzeugen. Der Programmierschaltkreis 440 kann auch konfiguriert werden, ein oder mehrere Steuersignale über Steuerleitungen) 492 zu empfangen und von einem Taktgenerator (nicht dargestellt) ein oder mehrere Taktsignale über die Leitung 493 zu empfangen, um den Betrieb des Programmierschaltkreises zu steuern, wie nachfolgend im Detail beschrieben.
  • Es sollte angemerkt werden, dass die Filterschaltkreise 421424 in einer Art und Weise betrieben werden können, die ähnlich ist zu derjenigen, wie sie für den Filterschaltkreis 420 erläutert wurde. Jede der Filterschaltkreise 420424 kann ein anderes Segment oder eine Kombination von Segmenten der gemeinsamen Eingangszeichenkette 405 auswählen, wobei jeder Block eine andere Tabelle speichert. Alternativ können eine oder mehrere Filterschaltkreise dasselbe Segment oder dieselbe Kombination von Segmenten der gemeinsamen Eingangszeichenkette 405 auswählen, wenn z.B. korrespondierende CAM-Blöcke Teile derselben Nachschlagetabelle speichern. Als solche kann jeder der Crossbar-Schalter 430434 durch seinen zugeordneten Programmierschaltkreis 440444 vorprogrammiert werden, um geeignete Filtersegmente der Eingangszeichenkette zu filtern. Alle sich ergebenden gefilterten Komparand-Zeichenketten können dann gleichzeitig mit ihren entsprechenden Nachschlagetabellen verglichen werden, die in den entsprechenden CAM-Blöcken abgelegt sind. Zum Beispiel wird die gefilterte Komparand-Zeichenkette, die durch den Filterschaltkreis 420 erzeugt wird, mit der Nachschlagetabelle verglichen, die im Block 410 abgelegt ist, wohingegen die gefilterte Komparand-Zeichenkette, die durch den Filterschaltkreis 421 erzeugt wurde, mit der in Block 411 gespeicherten Nachschlagetabelle verglichen.
  • In einer alternativen Ausführungsform kann das Filtern der gemeinsamen Eingangszeichenkette 405 zum Erzeugen der gefilterten Komparand-Zeichenketten oder Suchschlüssel sequenziell erreicht werden. Die Nachschlagevorgänge in den Blöcken können auch gleichzeitig oder sequenziell erfolgen.
  • 5A zeigt eine Ausführungsform einer Eingangszeichenkette. In einer Ausführungsform kann die Eingangszeichenkette 405 Feldsegmente besitzen, die von einem oder mehreren Paket-Headern 510 und 520 geparst oder verarbeitet werden. Wenn Datenverarbeitungssysteme (z.B. Router, Clients, Server) Daten über ein Netzwerk austauschen, beinhaltet das Verfahren den Einsatz von Protokollen, durch welche sich diese Systeme abstimmen, wie sie miteinander kommunizieren müssen. Um die Komplexität des Designs zu reduzieren, können die Netzwerke als eine Abfolge von Schichten organisiert werden. Die Zahl der Schichten und die Funktion jeder Schicht variieren von Netzwerk zu Netzwerk.
  • Wenn z.B. ein Übertragungssteuerprotokoll (TCP)/Internetprotokoll (IP) benutzt wird, ist es in mehreren Schichten organisiert, einschließlich einer Netzwerkzugangsschicht und einer Internet-Schicht. Die Netzwerkzugangsschicht benutzt ein TCP zum Ermöglichen eines Datenaustausches zwischen einem Endsystem und einem Netzwerk. Eine Internet-Schicht benutzt ein IP, um zu ermöglichen, dass Daten an mehrere miteinander verbundene Netzwerke übertragen werden. Jedes dieser Protokolle benutzt Paket-Header, die Weiterleitungsinformationen wie oben beschrieben besitzen. Zum Beispiel beinhaltet der TCP-Paket-Header 510 ein Quellenadressen- (SA-) Port-Segment 552 und ein Zieladressen- (DA-) Port-Segment 553 und besitzt einen IP-Paket-Header 520, ein SA-Segment 554, ein DA-Segment 555, ein Servicetyp- (ToS-) Segment 551 und ein Protokolltyp-Segment 556.
  • In einer Ausführungsform kann zum Beispiel der Prozessor 310 der 3 benutzt werden, um durch gewisse Segmente des Paket-Headers 510 und 520 zu parsen, um eine Eingangszeichenkette 405 zu erzeugen und die Eingangszeichenkette der CAM-Vorrichtung 320 zu übertragen. Zum Beispiel kann die Eingangszeichenkette 405 ein MAC-Segment 557, ein TOS-Segment 551, ein SA-Port-Segment 551, ein DA-Port-Segment 552, ein SA-Segment 554 und ein DA-Segment 555 beinhalten. Alternativ kann die Eingangszeichenkette 405 mehr oder weniger als die angegebenen Segmente besitzen. Jeder der Filterschaltkreise (dargestellt in den 4A und 4B) kann dann die Bitwerte der verschiedenen Feldsegmente der Eingangszeichenkette 405 ausfiltern, um verschiedene gefilterte Komparand-Zeichenketten zu erzeugen, um gleichzeitig verschiedene Nachschlagevorgänge in den CAM-Blöcken durchzuführen. In einer alternativen Ausführungsform kann der Prozessor 310 die Original-Header-Segmente in ungeparster Form der CAM-Vorrichtung 320 übertragen.
  • Die 5B ist eine konzeptionelle Darstellung des Betriebs der CAM-Vorrichtung 400 unter Benutzung der Paket-Header-Segmente der Eingangszeichenkette 405, die in der 5A dargestellt sind. Zum Beispiel kann die CAM-Vorrichtung 400 drei CAM-Blöcke 410, 411 und 412 besitzen. Jeder der Blöcke 410, 411 und 412 ist mit einem entsprechenden Filterschaltkreis 420, 421 und 422 verbunden. Jeder der Filterschaltkreise 420422 ist konfiguriert, eine Eingangszeichenkette 405 zu empfangen und die empfangene Eingangszeichenkette 405 zu verarbeiten.
  • In einer Ausführungsform können Filterschaltkreise 420422 vorprogrammiert werden, um bestimmte Feldsegmente der Eingangszeichenkette 405 zu filtern, um gleichzeitige Nachschlagevorgänge in den verschiedenen Tabellen, die in den Blöcken 410412 gespeichert sind, vorzunehmen. Zum Beispiel kann der Filterschaltkreis 420 vorprogrammiert werden, das MAC-Segment 557 zu filtern, was zu einer gefilterten Komparand-Zeichenkette 580 führt; der Filterschaltkreis 421 kann vorprogrammiert werden, das DA-Segment 555 zu filtern, was in einer gefilterten Komparand-Zeichenkette 581 führt, und der Filterschaltkreis 422 kann vorprogrammiert werden, das SA-Segment 554, das DA- Feldsegment 555 und das TOS-Segment 551 zu filtern, was zu einer gefilterten Komparand-Zeichenkette 582 führt. Durch paralleles Filtern verschiedener Feldsegmente der Eingangszeichenkette 405 kann jede der gefilterten Komparand-Zeichenketten 580581 benutzt werden, um die verschiedenen Nachschlagevorgänge gleichzeitig durchzuführen. Zum Beispiel: Die gefilterte Komparand-Zeichenkette 580 kann benutzt werden, einen MAC-Nachschlagevorgang im CAM-Block 410 vorzunehmen, die gefilterte Komparand-Zeichenkette 581 kann benutzt werden, einen Nachschlagevorgang des nächsten Schritts (z.B. LPM) im CAM-Block 411 durchzuführen, und eine gefilterte Komparand-Zeichenkette 582 kann benutzt werden, einen Klassifikations-Nachschlagevorgang im CAM-Block 412 vorzunehmen. Als solcher erfordert jeder einzelne Nachschlagevorgang für die Durchführung X Taktzyklen und nur eine Gesamtheit von X Taktzyklen kann erforderlich sein, um alle drei Nachschlagevorgänge durchzuführen, weil alle drei Nachschlagevorgänge gleichzeitig durchgeführt werden. Auf diese Art und Weise kann der Paketdurchsatz in einem Router gegenüber Routern signifikant erhöht werden, die bekannte CAM-Architekturen benutzen.
  • 6 ist eine konzeptionelle Darstellung einer Ausführungsform des Filterns und Verdichtens einer Eingangszeichenkette. Wie oben erläutert, kann die Eingangszeichenkette 405 ein Teil oder der gesamte Header eines Pakets sein, oder kann Feldsegmente von anderen Teilen eines Pakets oder anderen verarbeiteten Informationen beinhalten. Die Eingangszeichenkette 405 wird durch einen Filter 620 geführt, der unerwünschte Feldsegmente der Eingangszeichenkette 405 maskiert oder blockiert. Der Ausgang des Filters 620 besteht in einem oder mehreren gefilterten Zeichenkettensegmenten 629. Zum Beispiel können vier Zeichenkettensegmente X1, X2, X3 und X4 durch den Filter 620 gefiltert werden. Die Zeichenkettensegmente X1, X2, X3 und X4 können auch zum Beispiel dem DA-, SA-, Servicetyp (ToS) und Protokolltyp entsprechen. Das Filtern der Eingangszeichenkette 405 kann durch einen oder mehrere der Filterschaltkreise 420424 durchgeführt werden, wobei jeder der Filterschaltkreise 420424 programmiert ist, verschiedene Feldsegmente der Eingangszeichenkette 405 oder ein oder mehrere derselben Feldsegmente zu filtern. Das Filtern der Eingangszeichenkette 405 kann auf einer Bitbasis durchgeführt werden. Alternativ kann das Filtern der Eingangszeichenkette 405 auf anderen Größen basieren, z.B. auf einer Bytegröße. Darüber hinaus kann jeder der Filterschaltkreise 420424 vorprogrammiert werden, um verschiedene Feldsegmente der Eingangszeichenkette 405 aus einem vorherigen programmierten Zustand zu filtern.
  • Wie in 6 gezeigt, müssen die gefilterten Zeichenkettensegmente (X1, X2, X3 und X4) 629 nicht aneinander angrenzen. Solche nicht aneinandergrenzenden gefilterten Zeichenkettensegmente können verschoben werden, um eine verdichtete gefilterte Zeichenkette 639 zu erzeugen. Wenn z.B. das Filtern auf einer Bitbasis durchgeführt wird, verschiebt ein Filterschaltkreis (z.B. der Filterschaltkreis 420) die Bits der gefilterten Zeichenkettensegmente 629, um eine gefilterte Komparand-Zeichenkette 639 zu erzeugen. In einer Ausführungsform werden z.B. alle Bits des gefilterten Zeichenkettensegments 629 zu den niedrigsten Positionen verschoben. Alternativ können die Bits der gefilterten Zeichenkettensegmente 629 auf eine andere Art und Weise verschoben werden, z.B. zu den höchsten Positionen.
  • 7 ist eine konzeptionelle Darstellung einer Ausführungsform einer Bitmanipulation für das Filtern und Verdichten einer Eingangszeichenkette unter Benutzung eines Crossbar-Schalters 720 (z.B. des Crossbar-Schalters 430). Der Crossbar-Schalter 720 besitzt eine n × n Matrix von Schnittpunkten, wobei n die Bitbreite der Eingangszeichenkette 405 und auch die Bitbreite der Ausgangszeichenkette ist. Jede der Rauten (z.B. Raute 721) repräsentiert einen Schnittpunkt und eine mögliche Verbindung für ein Eingangsbit IN(0)-IN(n-1) und ein Ausgangsbit Y(0)-Y(n-1) der gefilterten Komparand-Zeichenkette. Ein oder mehrere Schnittpunkte werden über eine Adresse ausgewählt und ein Crossbar-Schalter 720 durch Programmierdaten (PDATA) programmiert, um vorbestimmte Bits der Eingangszeichenkette 405 auszuwählen und zu übertragen oder verdichten, um Bitpositionen der verdichteten gefilterten Komparand-Zeichenkette auszugeben. Die Adresse und/oder die PDATA können von einem Programmierschaltkreis (z.B. der Programmierschaltkreis 440 der 4B) oder extern (z.B. durch den Prozessor 310 der 3) erzeugt werden.
  • Linie 722 entlang der Diagonalen des Filterschaltkreises repräsentiert eine 1:1-Verbindungskorrelation zwischen den Bitpositionen einer Eingangszeichenkette 405 und einer ausgegebenen gefilterten Komparand-Zeichenkette 639. Die ausgewählten oder programmierten Bits, bildlich das "+" innerhalb eines Kreises (z.B. die Verbindung 723 der 7) repräsentiert ein programmiertes Bit zum Herstellen einer Verbindung zwischen einer Eingangs-Bitposition und einer Ausgangs-Bitposition. Jede Verbindung wird durch Programmieren eines oder mehrerer Schaltelemente bei den Schnittpunkten hergestellt. Die Programmierung eines Schnittpunkts kann unter Benutzung verschiedener Mittel einschließlich des Schreibens des Zustandes einer Speicherzelle, Aufteilen oder Zusammenführen einer anderen Verbindung, Aufrechterhalten einer Verbindung, usw. durchgeführt werden. Wenn z.B. ein Speicherelement benutzt wird, um Verbindungen an einem Schnittpunkt herzustellen, kann eine Verbindung durch Schreiben eines ersten logischen Zustandes (z.B. einer logischen "1") in das Speicherelement hergestellt werden und wird keine Verbindung durch Schreiben eines zweiten logischen Zustandes (z.B. einer logischen "0") in das Speicherelement hergestellt.
  • Der Crossbar-Schalter 720 ist programmiert, Bitlücken in der sich einstellenden gefilterten Komparand-Zeichenkette 639 zu vermeiden, die Ausgang des Filterschaltkreises 720 ist. Im dargestellten Beispiel werden alle ausgewählten Bits der Eingangszeichenkette 405 zu den niedrigsten Bitpositionen verschoben. Die sich ergebende gefilterte Komparand-Zeichenkette 639 kann daher signifikant weniger Bitpositionen haben als die Eingangszeichenkette 405. Zum Beispiel kann die Eingangszeichenkette 405 288 Bit breit sein (n = 288), wohingegen die gefilterte Komparand-Zeichenkette 639 nur 72 oder 144 Bit breit sein kann. Die Zahl der Schnittpunkte im Crossbar-Schalter kann reduziert werden, um zu der Zahl der Ausgangsbits zu passen. Es ist ein Vorteil, wenn die Einträge in der Nachschlagetabelle in jedem der CAM-Blöcke 410414 signifikant kleiner sein können als die Größe der Eingangszeichenkette 405. Daher kann ein schmaleres CAM-Array (d.h. ein solches, das weniger Bits pro Zeile hat als die Gesamtlänge der gemeinsamen Eingangszeichenkette) benutzt werden. Die verdichtete gefilterte Zeichenkette kann auch eine wünschenswerte Energieersparnis mit sich bringen, da die nicht benutzten Spalten eines CAM-Arrays global über den globalen Maskenschaltkreis (nicht gezeigt) maskiert werden können und daher während eines Suchvorgangs minimal wenig- oder erheblich weniger Leistung aufnehmen bzw. abgeben. Globale Masken sind allgemein bekannt, demgemäß wird hierzu keine detaillierte Erläuterung bereitgestellt.
  • Die Darstellung der 7 beschreibt einen programmierten Crossbar-Schalter, der Eingangsdaten von höheren Bitpositionen zu niedrigeren Bitpositionen in der Ausgangs-Datenzeichenkette verdichtet oder umwandelt. Alternative Filter können Eingangsdaten von niedrigen Bitpositionen zu höheren Bitpositionen in der Ausgangszeichenkette verdichten oder umwandeln. Zusätzlich muss die gefilterte Zeichenkette nicht verdichtet werden und kann die gefilterte Zeichenkette, wenn überhaupt, mit Lücken ausgestattet sein und einem CAM-Block oder -Tabelle für einen Abschlagevorgang zugeführt werden. Die nicht benutzten Bits im Suchschlüssel werden dem CAM-Block zur Verfügung gestellt und können durch ein globales Maskenregister global maskiert werden.
  • Es sollte angemerkt werden, dass die Größe der gefilterten Komparand-Zeichenkette, die vom Crossbar-Schalter 720 erzeugt wird, kleiner sein kann als die Eingangszeichenkette 405, selbst dann, wenn die ausgewählten Bits der Eingangszeichenkette 405 aneinander angrenzen. Wenn z.B. die auszuwählenden Bits der Eingangszeichenkette 405 zu den Zeilen 0 bis 2 korrespondieren, würden die Ausgabebits nicht verschoben werden, weil die ausgewählten Zeilen aneinander angrenzen. Selbst wenn die gewünschten Bits der Eingangszeichenkette 405 aneinander angrenzen, kann die Größe der sich ergebenden gefilterten Komparand-Zeichenkette 639 kleiner sein als die Größe der Eingangszeichenkette 405 als Ganzes.
  • 8 veranschaulicht ein Verfahren zum Programmieren eines Filterschaltkreises, sodass dieser eine Eingangszeichenkette filtern und verdichten kann. Das Verfahren kann zum Beispiel durch den Programmierschaltkreis 440 der 4B oder durch den Prozessor 310 der 3 ausgeführt werden. Das Verfahren kann in Antwort auf eine explizite Programmanweisung oder durch ein Steuersignal gestartet werden, das an die CAM-Vorrichtung angelegt wird, nach einem Reset oder in Antwort auf einen anderen Auslöseimpuls. In einer Ausführungsform können Lücken in der sich ergebenden Ausgangszeichenkette 639 durch kontinuierliches sequenzielles Verarbeiten der Eingangsbits vermieden werden, sowie durch Bestimmen, ob das Eingangsbit als ein besonderes Ausgangsbit zur Verfügung gestellt werden soll.
  • Die Programmierung startet bei Schritt 802. Bei Schritt 804 wird festgestellt, ob ein bestimmtes Eingangsbit auf eine bestimmte Ausgangs-Bitposition gesetzt werden soll (z.B. bestimmt durch FDATA, dem Programmierschaltkreis 440 der 4B bereitgestellt). Ist dies der Fall, wird bei Schritt 806 im Crossbar-Schalter eine geeignete Verbindung hergestellt oder programmiert. Ist dieses nicht das letzte Eingangsbit, Schritt 808, verschiebt das Verfahren in Schritt 810 die nächsten Eingangsbits und wiederholt den Schritt 804. Wenn alle Eingangsbits verarbeitet wurden, schließt das Verfahren mit Schritt 812 ab.
  • Jede Art von Crossbar-Schalter kann als Crossbar-Schalter 430 der 4 genutzt werden. 9 zeigt einen Crossbar-Schalter 1000, der eine Ausführungsform des Crossbar-Schalters 430 ist. Der Crossbar-Schalter 1000 beinhaltet ein Array von Zeilen und Spalten von Datenspeicherelementen 1010, die an die Gatter der Transistoren 1020 angeschlossen sind. Jedes Paar von Speicherelement/Transistor wird an einer Schnittstelle einer Zeile und einer Spalte positioniert und wird benutzt, um eine Verbindung zwischen Eingangssignalen IN(0)-IN(n-1) und Ausgangssignalen Y(0)-Y(n-1) herzustellen (oder nicht herzustellen). Die Eingangssignale IN repräsentieren die Eingangszeichenkettendaten (z.B. die Eingangszeichenkette 405 der 4A) und die Ausgangssignale Y repräsentieren gefilterte Ausgabezeichenkette, die an einen CAM-Block oder -Tabelle angelegt werden.
  • Jede Speicherzelle 1010 speichert einen Zustand, der anzeigt, ob bei einem bestimmten Zeilen- und Spaltenschnittpunkt im Schalter 1000 eine Verbindung hergestellt wurde. Die Speicherzellen können jede Art von Speicher sein, einschließlich RAM- (Random Access Memory) Zellen (sowohl statisch als auch dynamisch), ROM-Zellen (Read Only Memory Cells) und andere flüchtige und nichtflüchtige Speicherzellen. Die Speicherzellen können unter Benutzung beliebiger Schreibschaltungen programmiert oder beschrieben werden, die für den jeweiligen Speicherzellentyp geeignet sind. Wenn die Speicherzelle den logischen Zustand "1" speichert, ist der zugeordnete Transistor 1020 imstande, ein Eingangssignal IN an eines der Signalleitungen 1030(0)1030(n-1) anzulegen, um es an einen der Ausgänge Y von einer der Signalleitungen 1030(0)1040(n-1) zu legen. Die Ausgangs-Signalleitungen 1040 können durch Vorladungs-Schaltkreise 1050 auf vorbestimmte oder Standardzustände vorgeladen werden. Vorladungsschaltkreise 1050 sind allgemein bekannte Schaltkreise.
  • Der Crossbar-Schalter 1000 ist ein vollständiger Crossbar-Schalter, der jeden beliebigen Input an jeden beliebigen Output Y legen kann. Bei alternativen Ausführungsformen wird nur ein Teil des Crossbar-Schalters 1000 benötigt, beispielsweise, wenn eine Eingabezeichenkette verdichtet wird. Wenn zum Beispiel die Eingangszeichenkette von höheren Bitpositionen zu niedrigeren Bitpositionen in der Eingangszeichenkette verdichtet wird, kann die korrespondierende Schaltung des Crossbar-Schalters zum Umwandeln niedriger Bitpositionen zu höheren Bitpositionen vom vollständigen Crossbar-Schalter entfernt werden. Wenn auf ähnliche Weise die Eingangszeichenkette von niedrigeren Bitpositionen zu höheren Bitpositionen in der Ausgangszeichenkette verdichtet wird, kann der entsprechende Schaltkreis des Crossbar-Schalters für das Umwandeln höherer Bitpositionen zu niedrigeren Bitpositionen vom vollständigen Crossbar-Schalter entfernt werden. Beispielhafte Ausführungsformen modifizierter Crossbar-Schalter werden nachstehend erläutert.
  • Die 10 veranschaulicht eine Speicherzelle 1100, die eine Ausführungsform der Speicherzelle 1010 ist. Die Zelle 1100 beinhaltet kreuzgekoppelte Inverter 1130 und 1140, die ein bistabiles D-Flipflop zum Speichern von Daten bei Knoten 1180 und 1190 bilden. Durchlassgatter 1150 und 1160 erlauben es, Programmierdaten (und Lesedaten) über die Speicherknoten zu übertragen, wenn das Wort-Leitungszeichen auf der Signalleitung 1110 aktiv ist. Der Knoten 1180 ist mit dem Gatter des Transistors 1020 gekoppelt. Ein Reset-Transistor 1170 kann auch vorhanden sein, um den Knoten 1180 auf einen vorbestimmten logischen Zustand "0" zu bringen, wenn das Reset-Signal Reset auf der Signalleitung 1120 aktiviert ist. Das Gatter des Reset-Transistors 1170 ist mit der Signalleitung 1120 verbunden, sein Drain ist mit dem Knoten 1180 verbunden, und seine Source ist mit der Erde verbunden.
  • 11 veranschaulicht einen Filterschaltkreis 1200, der eine Ausführungsform eines der Filterschaltkreise 420424 der 4A ist. In dieser Ausführungsform besitzt der Filterschaltkreis 1200 einen Crossbar-Matrix-Schalter 430 und einen Programmierschaltkreis 1204. In einer Ausführungsform kann ein vollständiger Crossbar-Schalter (z.B. der Crossbar-Schalter 1000 der 9) als Crossbar-Schalter 430 genutzt werden. In einer alternativen Ausführungsform kann der vollständige Crossbar-Schalter modifiziert werden, um lediglich die erforderliche Verbindungsfunktionalität bereitzustellen, wodurch die Größe des Crossbar-Schalters reduziert wird.
  • In dieser Ausführungsform beinhaltet der Programmierschaltkreis 1240 einen Programmierdatengenerator 1208 und einen Adressengenerator 1206. Der Programmierdatengenerator 1208 erzeugt Programmdaten PDATA zum Programmieren einer oder mehrerer Schnittpunkte des Crossbar-Schalters. PDATA wird in Antwort auf Filterdaten FDATA erzeugt, die anzeigen, welche Eingangsbits auch in die Ausgabezeichenkette gehören, und ob und wie die Eingangsbits verdichtet oder in die Ausgabezeichenkette umgewandelt werden. FDATA kann z.B. durch den Prozessor 310 der 3 bereitgestellt werden. Der Adressengenerator 1206 ist mit dem Crossbar-Schalter 430 verbunden. In einer alternativen Ausführungsform kann der Adressengenerator 1206 auch mit dem Programmierdatengenerator 1208 verbunden sein. Der Adressengenerator 1206 dient dazu, dass bei der Programmierung auf einen oder mehrere Schnittpunkte des Crossbar-Schalters 430 zugegriffen werden kann. Der Adressengenerator 1206 kann z.B. einen oder mehrere Zeilen- und/oder Spalten-Decoder zum Auswählen einer oder mehrerer Zeilen oder Spalten der Schnittpunkte im Crossbar-Schalter für das Programmieren beinhalten oder zum Auswählen eines einzigen Schnittpunkts oder anderer Gruppen von Schnittpunkten für das Programmieren.
  • In einer Ausführungsform beinhaltet der Adressengenerator 1206 einen Decoder 1304, der von einem Adressenzähler 1302 gesteuert wird, wie es in 12 gezeigt ist. Der Adressenzähler 1302 ist konfiguriert, den Decoder 1304 sequenziell durch die Zeilen oder Spalten des Crossbar-Schalters 430 durchzulassen, indem die Signale auf den Signalleitungen 1306(0)1306(n-1) aktiviert werden, die an den Crossbar-Schalter 430 gelegt sind. Der Zähler 1302 inkrementiert oder dekrementiert seinen Zählerstand zum Auswählen einer neuen Zeile oder Spalte in Antwort auf das Taktsignal CLK und einem Freigabesignal ENABLE, das für die Programmierung aktiviert wird. Das ENABLE-Signal kann vom Programmierdatengenerator 1208 gesteuert werden (z.B. in Antwort auf FDATA) oder kann extern gesteuert werden (z.B. durch den Prozessor 310 der 3). Alternativ kann der Adressengenerator 1206 andere Komponenten haben, z.B. ein Schieberegister 1402, um sequenziell durch die Zeilen und/oder Spalten des in 13 gezeigten Crossbar-Schalters 430 zu gehen. Adressengeneratoren, Adressendecoder, Register und Zähler sind allgemein bekannt, sodass eine detaillierte Erläuterung nicht bereitgestellt wird.
  • 14 veranschaulicht einen Programmierdatengenerator 1502, der eine Ausführungsform des Programmierdatengenerators 1208 der 11 ist. Der Programmierdatengenerator 1502 besitzt einen Schreibepufferschaltkreis 1504, einen Datengenerator 1506 und ein Blockfilterregister (BFR) 1508. Der Datengenerator 1506, das BFR 1508 und der Adressegenerator 1206 können optional ein oder mehrere Taktsignale CLK empfangen, wie es in 14 durch die gestrichelte Linie gezeigt ist.
  • Das Blockfilterregister 1508 speichert die jeweiligen Filterdaten FDATA, die benutzt werden, um die Eingangszeichenkette 405 zu filtern, um eine gewünschte gefilterte Komparand-Zeichenkette zu erhalten. Das Blockfilterregister 1508 kann programmiert werden (z.B. durch den Prozessor 310 der 3) mit einem bestimmten Bitmuster mit "1" und "0", das von der gewünschten Filterung der Eingangszeichenkette 405 abhängt. Als solche können jede der Blockfilterregister innerhalb der Filterschaltkreise 420424 ein anderes Bitmuster speichern, um verschiedene Bits der gemeinsamen Eingangszeichenkette 405 zu filtern, das an alle Filterschaltkreise 420424 angelegt wird. Alternativ kann ein Blockfilterregister das gleiche Bitmuster wie andere Blockfilterregister speichern. In einer weiteren Ausführungsform können Multiblock-Filterregister in einem einzigen Programmiergenerator 1502 benutzt werden und sind auswählbar (z.B. durch den Prozessor 310 der 3 oder durch andere Elemente), um die gewünschten FDATA bereitzustellen.
  • Das Blockfilterregister 1508 ist mit dem Datengenerator 1506 verbunden. Der Datengenerator 1506 erzeugt das Bitmuster PDATA, das in den Schreibpufferschaltkreis 1504 geladen wird, um selektiv Schnittpunkte innerhalb des Crossbar-Schalters 430 zu programmieren. Der Schreibpufferschaltkreis 1504 dient dazu, die programmierten Daten für den Crossbar-Schalter 430 zu puffern. In einer Ausführungsform kann der Schreibpufferschaltkreis 1504 Teil des Datengenerators 1506 sein. Schreibpufferschaltkreise sind allgemein bekannt, sodass auf eine detaillierte Erläuterung verzichtet wird.
  • Für eine Ausführungsform werden genauso viele Bits von FDATA in das BFR 1508 geladen, wie es Bits in der Eingangszeichenkette gibt. Ein bestimmtes Bit von FDATA zeigt an, ob die entsprechende Bitposition der Eingangszeichenkette in der Ausgangszeichenkette enthalten sein wird. Auf diese Weise dient FDATA im BFR 1508 als eine Maske zum Filtern gewisser Eingabebits, damit sie nicht in der Ausgangszeichenkette enthalten sind, die dem CAM-Block zugeführt wird. Das von FDATA ermöglichte Maskieren erlaubt es dem Datengenerator 1506, geeignete PDATA für den Crossbar-Schalter 430 zu erzeugen, sodass der Schalter 430 die Eingangszeichenkette filtern und verdichten wird.
  • In einer beispielhaften Darstellung des Betriebs des Programmierschaltkreises 1204 ist der Adressengenerator 1206 konfiguriert, am Anfang eine erste Zeile des Crossbar-Schalters 430 auszuwählen. Der Datengenerator 1506 programmiert einen Schnittpunkt für die ausgewählte Zeile und eine bestimmte Spalte, wenn das korrespondierende Bit von FDATA, das im Blockfilterregister 1508 gespeichert ist, in der Bitposition, die zu diesem Zeilen-/Spaltenort korrespondiert, als eine "1" abgelegt ist. Wenn das Bit von FDATA, das im Blockfilterregister 1508 abgelegt ist, in der Bitposition, die zu diesem Zeilen-/Spaltenort korrespondiert, als eine "0" abgelegt ist, programmiert der Datengenerator 1506 eine "0" in die Schnittpunkte der Zeilen und Spalten, sodass für diese Eingangszeile keine Verbindungen hergestellt werden. Der Adressengenerator 1206 führt dann sequenziell durch den Rest der Zeilen und die zusätzlichen Bits von FDATA im Blockfilterregister bestimmen weiter, ob Verbindungen hergestellt werden. In einer Ausführungsform führt der Adressengenerator 1206 sequenziell durch den Rest der Zeilen und bedingt durch die Spalten, festgelegt durch FDATA. Für eine weitere Ausführungsform führt der Adressengenerator 1206 sequenziell zu einer neuen Zeile und kontinuierlich sequenziell durch die Spalten, festgelegt durch FDATA.
  • 15 zeigt einen Datengenerator 1606 und ein BFR 1608, die jeweils Ausführungsformen des Datengenerators 1506 und des BFR 1508 sind. Der Datengenerator 1606 beinhaltet ein Schieberegister 1610, einen Logikschaltkreis 1620 und ein Logikgatter 1605. Das Schieberegister 1610 beinhaltet n+1 Bits Daten, wobei die ersten n Bits anfänglich alle logisch "0" sind, und die (n+1)-ten Bits werden auf eine logische "1" gesetzt. Das Schieberegister 1610 ist ein Schleifenschieberegister, sodass die in den n+1 Bitpositionen vorgeladenen "1" durch die anderen Bitpositionen des Schieberegisters 1010 geschoben werden, abhängig vom Ausgang des UND-Gatters 1605. Zu jedem gegebenen Zeitpunkt besitzt nur eine Bitposition im Schieberegister 1610 eine logische "1", wohingegen die anderen Bitpositionen eine logische "0" enthalten.
  • BFR 1608 ist auch ein Schieberegister und speichert n Bits von FDATA. Jedes von im BFR 1608 gespeicherte Bit von FDATA wird von CLK auf Signalleitung 1695 taktweise an einen Eingang des UND-Gatters 605 ausgegeben. Das UND-Gatter 1605 empfängt auch CLK und ermöglicht es dem Schieberegister 1610, in Antwort auf eine logische "1" von sowohl FDATA als auch CLK, seinen Inhalt nach links um ein Bit zu verschieben. Daher bestimmt das im BFR 1608 abgelegte FDATA, ob das Schieberegister 1610 seinen Inhalt verschiebt. Es ist anzumerken, dass das Schieberegister 1610 und BFR 1608 konfiguriert sein können, verschiedene Taktsignale zu empfangen. Es ist auch anzumerken, dass der Ausgang des UND-Gatters 1605 ebenfalls gelatcht oder registriert wird, bevor das Signal ausgegeben wird, dass das Register 1610 und der Logikschaltkreis 1620 einen Schiebevorgang vornehmen sollen.
  • Jedes Bit im Schieberegister 1610 wird auch an einen Eingang des UND-Gatters 1601(0)1601(n-1) des Logikschaltkreises 1620 angelegt. Der andere Eingang des UND-Gatters 1601(0)1601(n-1) wird angelegt, um den Ausgang des UND-Gatters 1605 zu empfangen. Wenn CLK logisch tief ist (d.h. ein logischer Zustand "0") gibt das UND-Gatter 1601 eine logische "0" aus. Wenn CLK logisch hoch ist (d.h. ein Zustand logisch "1") geben die UND-Gatter 1601 die Bitinhalte aus, die sie vom Schieberegister 1610 empfangen haben. Mit einer solchen Konfiguration gibt der Logikschaltkreis 1620 entweder alle "0" oder die Bitinhalte des Schieberegisters 1610 aus. Die Signalausgänge der UND-Gatter 1601(0)1601(n-1) werden auf Signalleitungen 1603(0)1603(n-1) ausgegeben und werden an den Schreibpufferschaltkreis 1605 der 14 angelegt. Der Schreibpufferschaltkreis 1504 stellt seinerseits dem Crossbar-Schalter diese Daten als PDATA zur Verfügung, um Zeilen- und Spaltenverbindungen zu ermöglichen.
  • Wie oben angemerkt, gibt der Logikschaltkreis 1620 entweder jeweils eine logische "0" oder den Inhalt des Schieberegisters 1610 als PDATA aus, um eine Verbindung im Crossbar-Schalter 430 zu programmieren. Wenn eine Zeile des Crossbar-Schalters 430 vom Adressengenerator 1602 ausgewählt ist, wird die Zeile entweder jeweils mit einer logischen "0" programmiert, sodass kein Eingangsbit-zu-Ausgangsbit-Ort festgelegt wird, oder wird ein einzelnes Bit für die Zeile zum Herstellen einer Verbindung programmiert. Der Adressengenerator 1602 führt dann sequenziell zur nächsten Zeile. Der Ausgang PDATA des Logikschaltkreises 1620 wird dann aktualisiert, wie es durch FDATA im BFR 1608 angedeutet wird. Wenn das nächste Bit von FDATA im logischen Zustand "0" ist, wird für die nächste Zeile keine Verbindung gewählt, ist jedoch das nächste Bit von FDATA eine logische "1", wird eine Verbindung programmiert. Auf diese Weise sind der Datengenerator 1606 und das BFR 1608 imstande, den Crossbar-Schalter 430 zu programmieren, um die Eingangszeichenkette zu filtern und weiterhin zu verdichten. Ein spezielles Beispiel wird in 16 gezeigt.
  • In 16 hat das Schieberegister 1610 11 Bitpositionen (n = 10) und das BFR 1608 zehn Bitpositionen. Das BFR 1608 wird mit einem beispielhaften Bitmuster dargestellt, das benutzt werden kann, um gewisse Verbindungen im Crossbar-Schalter 430 herzustellen, damit Bits der Eingangszeichenkette 405 gefiltert und verdichtet werden. In diesem Beispiel speichert BFR 1608 FDATA, das Bitpositionen des Typs "1" in den Positionen 1681, 1682, 1685, 1686, 1689 und 1690 hat. Um Masken von der Eingangszeichenkette 405 auszumaskieren, wird eine "0" in den Bitpositionen 1683, 1684, 1687 und 1688 abgelegt.
  • Am Anfang wählt der Adressengenerator 1206 der 14 eine Zeile (oder eine Spalte) von Schnittpunkten im Crossbar-Schalter 430 aus, um festzulegen, ob die erste Eingangsbitposition IN(0) mit der entsprechenden ersten Ausgabebitposition Y(0) gekoppelt wird. Im ersten Taktzyklus von CLK wird vom BFR 1608 die "1" der Bitposition 1681 an das UND-Gatter 1605 angelegt. Da die Bitposition 1681 eine "1" hat, wird im nächsten Taktzyklus die "1" der Bitposition 1650 in die Bitposition 1640 des Schieberegisters 1610 verschoben. Nachfolgend geben die UND-Gatter 1601(9)1601(0) jeweils 000000001 aus, und zwar als PDATA an den Crossbar-Schalter 430 (über den Schreibpuffer 1504), um eine Verbindung zwischen IN(0) und Y(0) am Schnittpunkt der Spalte 0 und der Zeile 0 der Schaltmatrix herzustellen, wie es durch das "+" des Schnittpunkts der Zeile 0 und der Spalte 0 in 7 gezeigt ist. Da UND-Gatter 1601(1)1601(9) jeweils eine "0" an andere mögliche Verbindungen von Zeile 0 und anderen Spalten ausgeben, werden für diese Schnittpunkte keine Verbindungen hergestellt.
  • Anschließend wählt der Adressengenerator 1206 eine zweite Zeile (Zeile 1) im Crossbar-Schalter 430 aus, um festzulegen, ob die zweite Eingangsbitposition IN(1) entweder mit der ersten oder der zweiten Ausgangsbitposition Y(1) bzw. Y(0) gekoppelt wird. In einem nachfolgenden Taktzyklus von CLK wird eine andere Schiebe- und Programmieroperation durch das Schieberegister 1610 um den Logikschaltkreis 1620 durchgeführt, weil das BFR 1608 die Bitposition 1682 als eine "1" speichert. Eine "1" wird an das UND-Gatter 1605 angelegt, die "1" der Bitposition 1640 in die Bitposition 1641 des Schieberegisters 1610 verschoben und eine "0" in die Bitposition 1640 verschoben. UND-Gatter 1601(9)1601(0) geben jeweils 0000000010 als PDATA an den Crossbar-Schalter 430 (über den Schreibpuffer 1504) aus, um eine Verbindung zwischen IN(1) und Y(1) an der Schnittstelle zwischen Spalte 1 und Zeile 1 der Schaltmatrix herzustellen, wie es durch das "+" am Schnittpunkt der Zeile 1 und der Spalte 1 der 17 gezeigt ist. Da die UND-Gatter 1601(0) und 1601(2)1601(9) eine "0" an andere Verbindungen der Spalte 1 und anderen Spalten ausgeben, werden für diese Schnittpunkte keine Verbindungen hergestellt.
  • Der Adressengenerator 1206 wählt dann eine dritte Zeile (Zeile 2) im Crossbar-Schalter 430 aus, um festzustellen, ob die dritte Eingangsbitposition IN(2) entweder an die erste, zweite oder dritte Ausgabebitposition Y(0), Y(1) oder Y(2) angelegt wird. Beim nächsten Taktzyklus schiebt das Schieberegister 1610 wegen der in der Bitposition 1683 vom BFR 1608 abgelegten "0" nicht. Als solches wird für Zeile 2 mit einer Spalte oder einem Ausgang des Schalters 430 keine Verbindung hergestellt. Das bedeutet, dass IN(2) nicht an eine korrespondierende Ausgangsbitposition in der Filterausgabezeichenkette angelegt wird und effektiv, wie in 17 gezeigt, ausmaskiert wird.
  • Der Adressengenerator 1206 wählt dann im Crossbar-Schalter 430 eine vierte Zeile (Zeile 3) aus, um festzustellen, ob die vierte Eingangsbitposition IN(3) entweder an die erste, zweite, dritte oder vierte Ausgabebitposition Y(0), Y(1), Y(2) oder Y(3) angelegt wird. Beim nächsten Taktzyklus schiebt das Schieberegister 1610 wegen der in der Bitposition 1684 des BFR 1608 abgelegten "0" nicht. Daher wird für Zeile 3 mit einer Spalte oder einem Ausgang des Schalters 430 keine Verbindung hergestellt. Das bedeutet, dass das Eingangsbit 4 nicht an eine entsprechende Ausgabebitposition in der gefilterten Ausgabezeichenkette angelegt wird, und es effektiv, wie in 17 gezeigt, aus maskiert wird.
  • Der Adressengenerator 1206 wählt dann eine fünfte Zeile (Zeile 4) im Crossbar-Schalter 430 aus, um festzustellen, ob die fünfte Eingangsbitposition IN(4) entweder an die erste, zweite, dritte, vierte oder fünfte Ausgabebitposition Y(0), Y(1), Y(2), Y(3) oder Y(4) angelegt wird. Bei einem nachfolgenden Taktzyklus wird wegen der in Bitposition 1685 abgelegten "1" die "1" der Bitposition 1641 in die Bitposition 1642 des Schieberegisters 1610 verschoben. Die UND-Gatter 1601(9)1601(0) geben jeweils 0000000100 als PDATA an den Crossbar-Schalter 430 (über den Schreibpuffer 1504) aus, um eine Verbindung am Schnittpunkt der Spalte 2 mit der Zeile 4 der Schaltmatrix herzustellen, wie es durch das "+" am Schnittpunkt der Zeile 4 mit der Spalte 2 der 17 gezeigt ist. Daher wird zwischen IN(4) und Y(2) eine Verbindung hergestellt. Da die UND-Gatter 1601(0)1601(1) und 1601(3)1601(9) an andere mögliche Verbindungen von Zeile 1 und anderen Spalten eine "0" ausgeben, werden für diese Schnittpunkte keine Verbindungen hergestellt. Das abgeschlossene Filtern und Verdichten des programmierten Crossbar-Schalters 430 in Antwort auf FDATA, welches im BFR 1608 der 16 gespeichert ist, wird in 17 gezeigt.
  • 18 zeigt einen Datengenerator 1906 und ein BFR 1908, die alternative Ausführungsformen des Datengenerators 1506 und des BFR 1508 von 15 sind. Der Datengenerator 1906 besitzt ein Schieberegister 1610, einen Logikschaltkreis 1620 und ein UND-Gatter 1605, wie es zuvor mit Bezug auf 15 beschrieben wurde, und besitzt zusätzlich einen verdrahteten ODER-Schaltkreis 1913 und ein Schieberegister 1916. Der verdrahtete ODER-Schaltkreis 1913 besitzt ein UND-Gatter 1930 und einen Pull-Down-Transistor 1931, die paarweise gekoppelt sind, um vom BFR 1908 verschiedene Bits von FDATA zu empfangen, sowie ein korrespondierendes Bit vom Schieberegister 1916. Das BFR 1908 gibt alle seine Bitpositionsdaten parallel an den verdrahteten ODER-Schaltkreis 1913 ab. Der verdrahtete ODER-Schaltkreis 1930 steuert seinerseits die Schiebeoperationen des Schieberegisters 1610. Die Ausgabe des verdrahteten ODER-Schaltkreises 1913 wird an die Signalleitung 1935 gelegt, die an einen Vorladungs- (PC-) Schaltkreis 1918 und an den Eingang des Inverters 1919 angelegt sind. Der Ausgang des Inverters 1919 ist an einen Eingang des UND-Gatters 1905 gelegt. In einer alternativen Ausführungsform können die im BFR 1608 abgelegten FDATA komplementiert werden und kann auf den Inverter 1919 verzichtet werden.
  • Das Schieberegister 1916 schiebt bei jedem Takt von CLK eine "1" durch seine Bitpositionen. Die Ausgänge der UND-Gatter 1930 werden mit den Gattern der Pull-Down-Transistoren 1931 verbunden, sodass die Signalleitung 1935 auf niedrig gesetzt und es dem Schieberegister 1619 ermöglicht wird, zu schieben, wenn die korrespondierenden Bitpositionen in jedem BFR 1908 und jedem Schieberegister 1916 "1" sind. Auf diese Weise legen das Schieberegister 1916 und die im BFR 1908 gespeicherten FDATA fest, welche der Daten, die Eingangsdaten des verdrahteten ODER- Schaltkreises 1913 sind, bei jedem gegebenen Taktzyklus vom Schieberegister 1610 taktweise durchgeschoben werden.
  • 19 zeigt, dass das BFR 1508 auch als ein Einzelspalten-RAM (Random Access Memory) 2002 ausgebildet sein kann, das mehrere Zeilen besitzt, um das Filtermasken-Bitmuster FDATA zu speichern. An einem gewünschten Bit-Ort im SRAM kann durch Eingabe einer dekodierten Zeilenadresse zugegriffen werden (z.B. vom Adressengenerator 1206 der 4). Ein Leseverstärker (S/A) 2004 ist mit den Zeilen des RAMs verbunden, um den Datenwert auszugeben, der bei der Bitposition abgelegt ist, auf die zugegriffen wird. Der Ausgang des Leseverstärkers 204 kann zum Beispiel mit einem Eingang des UND-Gatters 1605 verbunden sein. Das RAM 2002 ist allgemein bekannt, sodass auf eine detaillierte Erläuterung hierzu verzichtet wird. Auf jede der Zeilen des RAMs 2002 kann sequenziell unter Benutzung eines Zählers und eines Decoders wie z.B. dem Zähler 1302 und dem Decoder 1304 zugegriffen werden, wie es mit Bezug auf 12 erläutert wurde, oder mit anderen Mitteln, z.B. unter Benutzung des Schieberegisters 1402 der 13.
  • Wie oben erläutert, kann der Crossbar-Schalter 430 ein vollständiger Crossbar-Schalter sein (z.B. wie in 19 gezeigt) oder kann modifiziert sein, sodass er nur Verbindungen benutzt, die erforderlich sind, um Verbindungen herzustellen. Für die Ausführungsformen des Datenprogrammierschaltkreises 1204, der in den 11 bis 19 dargestellt ist, und der den Crossbar-Schalter 430 programmiert, um Eingangsdaten von höheren Bitpositionen zu niedrigeren Bitpositionen der Ausgangszeichenkette zu filtern und zu verdichten, kann auch nur ein Teil des Crossbar-Schalters 1000 der 9 erforderlich sein, wie es in 20 gezeigt ist. 20 zeigt nur vier Zeilen und vier Spalten des modifizierten Crossbar-Schalters, aber es kann jede Anzahl von Zeilen und Spalten benutzt werden. Zusätzlich zeigt 20, dass jede der Zeilen der Speicherelemente 1010 mit einer Wort-Leitung (WL) verbunden ist, um es den Elementen zu ermöglichen, Daten über mehr als eine Bitleitung zu übertragen, die mit D(0)–D(3) bezeichnet sind. Jede dieser Bitleitungen kommuniziert ein Bit der Programmierdaten PDATA.
  • 21 zeigt den Programmierschaltkreis 2004, der eine weitere Ausführungsform des Programmierschaltkreises 440 der 11 ist. In dieser Ausführungsform besitzt der Programmierschaltkreis 2004 einen Adressengenerator 2110 und den Programmierdatengenerator 1502 der 14. Der Adressengenerator 2110 besitzt einen Zähler 2112, einen Decoder 2114 und eine ODER-Logik 2116. Während der Programmierung führt der Adressengenerator 2110 bedingt-sequenziell durch die Zeilen des Crossbar-Schalters 430 und programmiert eine Verbindung basierend auf FDATA, die im BFR 1508 abgelegt sind. Wenn zum Beispiel ein bestimmtes Bit von FDATA anzeigt, dass für eine ausgewählte Zeile im Crossbar-Schalter 430 eine Verbindung hergestellt werden soll, gibt der Datengenerator 1506 mindestens ein Signal an den Schreibpuffer 1504 oder die ODER-Logik 2116 aus, das einen logischen Zustand "1" hat. In Antwort darauf versetzt die ODER-Logik 2116 das Inkrementsignal INC auf einen geeigneten logischen Zustand, sodass der Zähler 2112 seinen Zähler stand in Antwort auf das Taktsignal CLK aktualisiert. Die Ausgabe des Zählers wird vom Decoder 2114 decodiert, um eine neue Zeile im Crossbar-Schalter 430 auszuwählen. In einer anderen Ausführungsform kann das Inkrementsignal ein Dekrementsignal sein, um den Zählerstand 2112 zu dekrementieren. Für eine weitere Ausführungsform können der Zähler 2112 und der Decoder 2114 durch ein Schieberegister ersetzt werden, das aktualisiert wird, um eine Zeile auszuwählen, wenn INC auf den geeigneten logischen Zustand gebracht und CLK umgeschaltet wird.
  • Die 22 zeigt einen Datengenerator 2202, der eine Ausführungsform des Datengenerators 1506 der 21 ist. Der Datengenerator 2202 besitzt ein Schieberegister 2204 und UND-Gatter 2206(0)2206(n-1). Jedes UND-Gatter 2206(0)2206(n-1) ist gekoppelt, um entsprechende Bits vom Schieberegister 2204 und dem BFR 1508 zu empfangen und um eine Mehrzahl von PDATA-Signalen auf den Signalleitungen 2208(0)2208(n-1) zu erzeugen. Die PDATA-Signale werden an den Schreibpufferschaltkreis 1504 und die ODER-Logik 2116 angelegt.
  • Für diese Ausführungsform wird ein logischer Zustand "1" über die Bitpositionen des Schieberegisters 2204 verschoben und im BFR 1508 sowie den UND-Gattern 2206(0)2206(n-1) mit korrespondierenden Bits von FDATA logisch mit UND verknüpft. Wenn ein Bit von FDATA im logischen Zustand "1" ist und das korrespondierende Bit im Schieberegister 2204 ebenso im logischen Zustand "1" ist, erzeugt das korrespondierende UND-Gatter 2206 ein Signal PDATA, das den korrespondierenden Zeilen- und Spaltenschnittpunkt im Crossbar-Schalter 430 veranlasst, ausgewählt und programmiert zu werden. Alle anderen Spalten für eine ausgewählte Zeile werden nicht programmiert oder mit Logikzuständen "0" programmiert, um keine Verbindung herzustellen. Zusätzlich wird, wenn eines der UND-Gatter 2206 ein PDATA-Signal mit einem logischen Zustand "1" ausgibt, die ODER-Logik 2112 die nächste Zeile beim nächsten Taktzyklus auswählen, um sequenziell eine neue Zeile für die Programmierung auszuwählen.
  • Wie oben erläutert kann der Crossbar-Schalter 430 ein vollständiger Crossbar-Schalter sein (z.B. wie in 9 gezeigt) oder kann modifiziert werden, um nur Verbindungen zu benutzen, die nötig sind, um Verbindungen ermöglichen. Für die Ausführungsformen des Datenprogrammierschaltkreises 1504, der in den 21 und 22 dargestellt ist, der den Crossbar-Schalter 430 programmiert, um Eingangsdaten von höheren Bitpositionen zu niedrigeren Bitpositionen der Ausgangszeichenkette zu filtern und zu verdichten, kann auch nur ein Teil des Crossbar-Schalters 1000 der 9, wie in 23 gezeigt ist, benötigt werden. 23 zeigt lediglich vier Zeilen und vier Spalten des modifizierten Crossbar-Schalters, aber es kann jede Zahl von Zeilen und Spalten benutzt werden. Zusätzlich zeigt 2230, dass jede der Zeilen des Speicherelements 1010 mit einer Wort-Leitung (WL) verbunden ist, um es den Komponenten zu ermöglichen, Daten über eine oder mehrere Bitleitungen zu übertragen, die als D(0)–D(3) angegeben sind. Jede der Bitleitungen überträgt ein Bit der Programmierdaten PDATA.
  • In der vorangegangenen Beschreibung wurde die Erfindung mit Bezug auf spezielle beispielhafte Ausführungsformen erläutert. Es wird jedoch offensichtlich sein, dass verschiedene Modifikationen und Änderungen hieran möglich sind, ohne vom Umfang der Erfindung abzurücken, wie er in den beigefügten Ansprüchen festgelegt ist. Die Beschreibung und die Zeichnungen sind daher in einem erklärenden Sinne und nicht in einem einschränkenden Sinne zu verstehen.

Claims (22)

  1. Verfahren, das aufweist: Filtern (420424) einer gemeinsamen Eingangszeichenkette, um eine erste gefilterte Zeichenkette und eine zweite gefilterte Zeichenkette zu erzeugen, wobei die erste gefilterte Zeichenkette sich von der zweiten gefilterten Zeichenkette unterscheidet, Verdichten (420424) der ersten gefilterten Zeichenkette, wobei die erste gefilterte Zeichenkette Bitpositionen hat und wobei das Verdichten das Verschieben der Bitpositionen relativ zueinander aufweist, um eine Comparand-Zeichenkette zu erzeugen mit kontinuierlich gefüllten Bitpositionen, und Durchführen von Nachschlagvorgängen in einem ersten und einem zweiten inhaltsadressierbaren Speicherblock (410414) unter Verwendung derr ersten bzw. zweiten gefilterten Zeichenkette.
  2. Verfahren nach Anspruch 1, bei dem die Nachschlagevorgänge gleichzeitig durchgeführt werden.
  3. Verfahren nach Anspruch 1 oder Anspruch 2, bei dem das Filtern der gemeinsamen Eingangszeichenkette, um die erste und zweite gefilterte Zeichenkette zu erzeugen, gleichzeitig unter Verwendung von unterschiedlichen Filterschaltkreisen durchgeführt wird.
  4. Verfahren nach einem der vorherigen Ansprüche, das das Verdichten der zweiten gefilterten Zeichenkette aufweist.
  5. Verfahren nach einem der vorherigen Ansprüche, bei dem das Verdichten weiterhin aufweist das Verschieben von Bitpositionen der ersten und zweiten gefilterten Zeichenkette zu niedrigeren Bitpositionen.
  6. Verfahren nach Anspruch 5, bei dem die erste gefilterte Zeichenkette durch einen Crossbar-Schalter gefiltert wird.
  7. Verfahren nach Anspruch 6, das weiterhin aufweist das Programmieren des Crossbar-Schalters.
  8. Verfahren nach Anspruch 7, bei dem das Programmieren aufweist: a) Bestimmen, ob eine Verbindung zwischen einer Bitposition der gemeinsamen Eingangszeichenkette und einer Bitposition der ersten gefilterten Zeichenkette errichtet werden kann, b) Errichten einer Verbindung in dem Crossbar-Schalter basierend auf der Bestimmung in Schritt (a), c) Weiterrücken zu einer nächsten Bitposition der gemeinsamen Eingangszeichenkette, wenn eine Verbindung in Schritt (b) errichtet wurde, und d) nicht Weiterrücken zu der nächsten Bitposition der gemeinsamen Eingangszeichenkette, wenn eine Verbindung in Schritt (b) nicht errichtet wurde.
  9. Verfahren nach Anspruch 8, das das Wiederholen der Schritte (a) bis (d) aufweist.
  10. Verfahren nach einem der vorherigen Ansprüche, das das Programmieren des ersten und des zweiten Filterschaltkreises aufweist, um die erste und zweite gefilterte Zeichenkette aus der gemeinsamen Eingangszeichenkette zu erzeugen.
  11. Verfahren nach Anspruch 10, bei dem das Programmieren vor der Filterung durchgeführt wird.
  12. Vorrichtung, die aufweist: eine Einrichtung (420424) für das Filtern einer gemeinsamen Eingangszeichenkette, um eine erste gefilterte Zeichenkette und eine zweite gefilterte Zeichenkette zu erzeugen, wobei die erste gefilterte Zeichenkette sich von der zweiten gefilterten Zeichenkette unterscheidet, eine Einrichtung (420424) für das Verdichten der ersten gefilterten Zeichenkette, wobei die erste gefilterte Zeichenkette Bitpositionen hat und wobei das Verdichten das Verschieben der Bitpositionen relativ zueinander aufweist, um eine Comparand-Zeichenkette mit kontinuierlich gefüllten Bitpositionen zu erzeugen, und eine Einrichtung für das Durchführen von Nachschlagvorgängen in einem ersten und einem zweiten inhaltsadressierbaren Speicherblock (410414) unter Verwendung der ersten bzw. zweiten gefilterten Zeichenkette.
  13. Vorrichtung nach Anspruch 12, die aufweist eine Einrichtung für das gleichzeitige Durchführen der Nachschlagvorgänge.
  14. Vorrichtung nach Anspruch 12 oder Anspruch 13, bei der die Einrichtung für das Filtern der gemeinsamen Eingangszeichenkette aufweist: eine erste Einrichtung für das Filtern der gemeinsamen Eingangszeichenkette, die erste gefilterte Zeichenkette zu erzeugen, und eine zweite Einrichtung für das Filtern der gemeinsamen Eingangszeichenkette gleichzeitig mit dem Filtern der gemeinsamen Eingangszeichenkette durch die erste Einrichtung, um die zweite gefilterte Zeichenkette zu erzeugen.
  15. Vorrichtung nach einem der Ansprüche 12 bis 14, die aufweist eine Einrichtung für das Verdichten der zweiten gefilterten Zeichenkette.
  16. Vorrichtung nach einem der Ansprüche 12 bis 15, bei der die Einrichtung für das Verdichten eine Einrichtung für das Verschieben von Bitpositionen der ersten und zweiten gefilterten Zeichenkette zu niedrigeren Bitpositionen aufweist.
  17. Vorrichtung nach einem der Ansprüche 12 bis 16, bei der die Einrichtung für das Filtern aufweist: eine Einrichtung (430434) für das Schalten und eine Einrichtung (440444) für das Programmieren der Einrichtung für das Schalten.
  18. Vorrichtung nach Anspruch 17, bei der die Einrichtung für das Programmieren aufweist: (a) eine Einrichtung für das Bestimmen, ob eine Verbindung zwischen einer Bitposition der gemeinsamen Eingangszeichenkette und einer Bitposition der ersten gefilterten Zeichenkette errichtet werden kann, (b) eine Einrichtung für das Errichten einer Verbindung in der Schalteinrichtung basierend auf der Einrichtung für das Bestimmen einer Verbindung, (c) eine Einrichtung für das Weiterrücken zu einer nächsten Bitposition der gemeinsamen Eingangszeichenkette, wenn eine Verbindung durch die Einrichtung für das Errichten einer Verbindung errichtet wurde, und (d) eine Einrichtung für das nicht Weiterrücken zu der nächsten Bitposition der gemeinsamen Eingangszeichenkette, wenn eine Verbindung nicht durch die Einrichtung für das Errichten einer Verbindung errichtet wurde.
  19. Vorrichtung nach Anspruch 17 oder Anspruch 18, bei der die Einrichtung für das Schalten ein Crossbar-Schalter ist.
  20. Vorrichtung nach einem der Ansprüche 12 bis 19, die eine Einrichtung für das Programmieren des ersten und des zweiten Filterschaltkreises aufweist, um erste und zweite gefilterte Zeichenketten aus der gemeinsamen Eingangszeichenkette zu erzeugen.
  21. Vorrichtung nach Anspruch 12, die aufweist: eine Einrichtung für das Übertragen eines ersten Eingangsbits eines ersten Komparanden von einer ersten Bitposition zu einer anderen Bitposition eines zweiten Komparanden und eine Einrichtung für das Vergleichen des zweiten Komparanden mit in einer ersten inhaltsadressierbaren Speicheranordnung des ersten inhaltsadressierbaren Speicherblockes gespeicherten Daten.
  22. Vorrichtung nach Anspruch 21, die aufweist: eine Einrichtung für das Übertragen eines zweiten Eingangsbits des ersten Komparanden von einer zweiten Bitposition zu einer anderen Bitposition eines dritten Komparanden und eine Einrichtung für das Vergleichen des dritten Komparanden mit Daten, die in einer zweiten inhaltsadressierbaren Speicheranordnung des zweiten inhaltsadressierbaren Speicherblockes abgelegt sind.
DE60216938T 2001-08-22 2002-08-21 Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher Expired - Lifetime DE60216938T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US935997 1986-11-28
US09/935,997 US6744652B2 (en) 2001-08-22 2001-08-22 Concurrent searching of different tables within a content addressable memory
PCT/US2002/026636 WO2003019571A1 (en) 2001-08-22 2002-08-21 Concurrent searching of different tables within a content addressable memory

Publications (2)

Publication Number Publication Date
DE60216938D1 DE60216938D1 (de) 2007-02-01
DE60216938T2 true DE60216938T2 (de) 2007-10-04

Family

ID=25468029

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60216938T Expired - Lifetime DE60216938T2 (de) 2001-08-22 2002-08-21 Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher

Country Status (5)

Country Link
US (2) US6744652B2 (de)
EP (1) EP1425755B1 (de)
JP (1) JP4076497B2 (de)
DE (1) DE60216938T2 (de)
WO (1) WO2003019571A1 (de)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6744652B2 (en) * 2001-08-22 2004-06-01 Netlogic Microsystems, Inc. Concurrent searching of different tables within a content addressable memory
JP3979486B2 (ja) * 2001-09-12 2007-09-19 株式会社ルネサステクノロジ 不揮発性記憶装置およびデータ格納方法
US7065083B1 (en) * 2001-10-04 2006-06-20 Cisco Technology, Inc. Method and apparatus for dynamically generating lookup words for content-addressable memories
US7210003B2 (en) * 2001-10-31 2007-04-24 Netlogic Microsystems, Inc. Comparand generation in a content addressable memory
US6993622B2 (en) * 2001-10-31 2006-01-31 Netlogic Microsystems, Inc. Bit level programming interface in a content addressable memory
BR0213863A (pt) * 2001-11-01 2004-12-21 Verisign Inc Processo e sistema para atualizar um banco de dados remoto
US7813346B1 (en) * 2001-11-21 2010-10-12 Juniper Networks, Inc. Filter-based forwarding in a network
US7401180B1 (en) * 2001-12-27 2008-07-15 Netlogic Microsystems, Inc. Content addressable memory (CAM) device having selectable access and method therefor
US7117300B1 (en) 2001-12-27 2006-10-03 James David V Method and apparatus for restricted search operation in content addressable memory (CAM) devices
US7301961B1 (en) 2001-12-27 2007-11-27 Cypress Semiconductor Corportion Method and apparatus for configuring signal lines according to idle codes
US7237058B2 (en) * 2002-01-14 2007-06-26 Netlogic Microsystems, Inc. Input data selection for content addressable memory
US7219187B1 (en) * 2002-08-30 2007-05-15 Netlogic Microsystems, Inc. Search parameter table in a content addressable memory
US7680769B2 (en) * 2003-01-14 2010-03-16 International Business Machines Corporation Method of creating a database and search keys and for searching the database
US20060018142A1 (en) * 2003-08-11 2006-01-26 Varadarajan Srinivasan Concurrent searching of different tables within a content addressable memory
US7698118B2 (en) * 2004-04-15 2010-04-13 Mentor Graphics Corporation Logic design modeling and interconnection
GB0408868D0 (en) 2004-04-21 2004-05-26 Level 5 Networks Ltd Checking data integrity
GB0408870D0 (en) * 2004-04-21 2004-05-26 Level 5 Networks Ltd Processsing packet headers
US7739445B1 (en) * 2004-06-11 2010-06-15 Srinivasan Venkatachary Circuit, apparatus, and method for extracting multiple matching entries from a content addressable memory (CAM) device
EP3217285B1 (de) 2005-03-10 2021-04-28 Xilinx, Inc. Datenübertragung
GB0505300D0 (en) 2005-03-15 2005-04-20 Level 5 Networks Ltd Transmitting data
GB0506403D0 (en) 2005-03-30 2005-05-04 Level 5 Networks Ltd Routing tables
US8230167B1 (en) 2005-06-29 2012-07-24 Netlogic Microsystems, Inc. Block mapping circuit and method for memory device
US7853578B1 (en) * 2005-12-09 2010-12-14 Marvell International Ltd. High-performance pattern matching
GB0600417D0 (en) 2006-01-10 2006-02-15 Level 5 Networks Inc Virtualisation support
US8006114B2 (en) * 2007-03-09 2011-08-23 Analog Devices, Inc. Software programmable timing architecture
US8085568B1 (en) 2007-06-29 2011-12-27 Netlogic Microsystems, Inc. Methods and circuits for placing unused content addressable memory (CAM) cells into low current states
US7782645B1 (en) 2008-02-04 2010-08-24 Netlogic Microsystems, Inc. Selective encoding of data values for memory cell blocks
US7814267B1 (en) 2008-02-04 2010-10-12 Netlogic Microsystems, Inc. Processor with compare operations based on any of multiple compare data segments
US8214305B1 (en) 2008-11-24 2012-07-03 Netlogic Microsystems, Inc. Pattern matching system and method for data streams, including deep packet inspection
US7907432B2 (en) * 2009-06-30 2011-03-15 Netlogic Microsystems, Inc. Content addressable memory device for simultaneously searching multiple flows
US9305115B1 (en) 2010-10-04 2016-04-05 Broadcom Corporation Method and apparatus for reducing power consumption during rule searches in a content search system
CN102122270B (zh) * 2011-02-23 2013-08-07 华为技术有限公司 在存储器中查找数据的方法和装置以及存储器
US8467213B1 (en) 2011-03-22 2013-06-18 Netlogic Microsystems, Inc. Power limiting in a content search system
US8861241B1 (en) 2011-09-01 2014-10-14 Netlogic Microsystems, Inc. Content search system having embedded power control units
US8639875B1 (en) 2011-09-06 2014-01-28 Netlogic Microsystems, Inc. Content search system having multiple pipelines
US9043448B1 (en) * 2012-05-08 2015-05-26 Gigamon Inc. Systems and methods for configuring a network component that involves TCAM
JP6170718B2 (ja) * 2012-11-21 2017-07-26 ルネサスエレクトロニクス株式会社 検索システム
ES2549188B1 (es) * 2014-04-23 2016-05-19 Univ Del Pais Vasco - Euskal Herriko Unibertsitatea (Upv/Ehu) Sistema y método de lectura y escritura de una memoria digital

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3648254A (en) 1969-12-31 1972-03-07 Ibm High-speed associative memory
US5046046A (en) * 1978-03-10 1991-09-03 Intel Corporation Redundancy CAM using word line from memory
DE3801380A1 (de) 1987-01-20 1988-07-28 Nec Corp Zeichenfolge-erkennungsvorrichtung mit einem speicher, dessen speicherbereiche selektiv zugreifbar sind
US4845668A (en) 1987-12-10 1989-07-04 Raytheon Company Variable field content addressable memory
US4996666A (en) 1988-08-12 1991-02-26 Duluk Jr Jerome F Content-addressable memory system capable of fully parallel magnitude comparisons
US5088066A (en) * 1989-02-10 1992-02-11 Intel Corporation Redundancy decoding circuit using n-channel transistors
US5319762A (en) 1990-09-07 1994-06-07 The Mitre Corporation Associative memory capable of matching a variable indicator in one string of characters with a portion of another string
JP2966638B2 (ja) * 1992-04-17 1999-10-25 三菱電機株式会社 ダイナミック型連想メモリ装置
DE69324204T2 (de) 1992-10-22 1999-12-23 Cabletron Systems Inc Aufsuchen von Adressen bei Paketübertragung mittels Hashing und eines inhaltsadressierten Speichers
US5444649A (en) 1993-06-10 1995-08-22 Apple Computer, Inc. Associative memory system having configurable means for comparing fields in an array of stored data words with corresponding one or more fields in a supplied argument word
US5860085A (en) 1994-08-01 1999-01-12 Cypress Semiconductor Corporation Instruction set for a content addressable memory array with read/write circuits and an interface register logic block
WO1996033499A1 (de) 1995-04-18 1996-10-24 International Business Machines Corporation Inhalts-adressierbarer speicher
US5642322A (en) 1995-05-24 1997-06-24 Kawasaki Steel Corporation Layout of semiconductor memory and content-addressable memory
US6041389A (en) 1995-11-16 2000-03-21 E Cirrus Logic, Inc. Memory architecture using content addressable memory, and systems and methods using the same
US5978885A (en) 1996-06-17 1999-11-02 Hewlett Packard Co. Method and apparatus for self-timing associative data memory
US6069573A (en) 1996-06-17 2000-05-30 Hewlett-Packard Company Match and match address signal prioritization in a content addressable memory encoder
US5956336A (en) 1996-09-27 1999-09-21 Motorola, Inc. Apparatus and method for concurrent search content addressable memory circuit
JP3036467B2 (ja) * 1997-06-19 2000-04-24 日本電気株式会社 最長一致検出装置
US6226710B1 (en) 1997-11-14 2001-05-01 Utmc Microelectronic Systems Inc. Content addressable memory (CAM) engine
US6161144A (en) 1998-01-23 2000-12-12 Alcatel Internetworking (Pe), Inc. Network switching device with concurrent key lookups
JP3196720B2 (ja) 1998-03-20 2001-08-06 日本電気株式会社 連想メモリ制御回路及び制御方法
US6424659B2 (en) * 1998-07-17 2002-07-23 Network Equipment Technologies, Inc. Multi-layer switching apparatus and method
US6289414B1 (en) * 1998-10-08 2001-09-11 Music Semiconductors, Inc. Partially ordered cams used in ternary hierarchical address searching/sorting
US6081440A (en) 1998-11-05 2000-06-27 Lara Technology, Inc. Ternary content addressable memory (CAM) having fast insertion and deletion of data values
US6275406B1 (en) * 1999-09-10 2001-08-14 Sibercore Technologies, Inc. Content address memory circuit with redundant array and method for implementing the same
US6324087B1 (en) * 2000-06-08 2001-11-27 Netlogic Microsystems, Inc. Method and apparatus for partitioning a content addressable memory device
US6249467B1 (en) * 1999-10-18 2001-06-19 Netlogic Microsystems, Inc Row redundancy in a content addressable memory
US6374326B1 (en) 1999-10-25 2002-04-16 Cisco Technology, Inc. Multiple bank CAM architecture and method for performing concurrent lookup operations
US6633953B2 (en) * 2000-02-08 2003-10-14 Hywire Ltd. Range content-addressable memory
US6243281B1 (en) * 2000-06-14 2001-06-05 Netlogic Microsystems, Inc. Method and apparatus for accessing a segment of CAM cells in an intra-row configurable CAM system
CA2313275C (en) * 2000-06-30 2006-10-17 Mosaid Technologies Incorporated Searchline control circuit and power reduction method
US6629099B2 (en) * 2000-12-07 2003-09-30 Integrated Silicon Solution, Inc. Paralleled content addressable memory search engine
US20020126672A1 (en) * 2001-01-10 2002-09-12 Nelson Chow Method and apparatus for a flexible and reconfigurable packet classifier using content addressable memory
US6691252B2 (en) * 2001-02-23 2004-02-10 Hewlett-Packard Development Company, L.P. Cache test sequence for single-ported row repair CAM
US6373758B1 (en) * 2001-02-23 2002-04-16 Hewlett-Packard Company System and method of operating a programmable column fail counter for redundancy allocation
US6525987B2 (en) * 2001-05-23 2003-02-25 Tachyon Semiconductor Corporation Dynamically configured storage array utilizing a split-decoder
US6744652B2 (en) * 2001-08-22 2004-06-01 Netlogic Microsystems, Inc. Concurrent searching of different tables within a content addressable memory
US7210003B2 (en) * 2001-10-31 2007-04-24 Netlogic Microsystems, Inc. Comparand generation in a content addressable memory
US6993622B2 (en) * 2001-10-31 2006-01-31 Netlogic Microsystems, Inc. Bit level programming interface in a content addressable memory
US7237058B2 (en) * 2002-01-14 2007-06-26 Netlogic Microsystems, Inc. Input data selection for content addressable memory

Also Published As

Publication number Publication date
DE60216938D1 (de) 2007-02-01
WO2003019571A1 (en) 2003-03-06
US20030039135A1 (en) 2003-02-27
EP1425755A1 (de) 2004-06-09
US20040032775A1 (en) 2004-02-19
JP2005501448A (ja) 2005-01-13
US6744652B2 (en) 2004-06-01
JP4076497B2 (ja) 2008-04-16
EP1425755A4 (de) 2005-11-09
EP1425755B1 (de) 2006-12-20
US6967855B2 (en) 2005-11-22
WO2003019571A9 (en) 2003-08-14

Similar Documents

Publication Publication Date Title
DE60216938T2 (de) Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher
DE60313371T2 (de) Verwendung von baumartigen "Bitmap" Datenstrukturen
DE60220088T2 (de) Schaltung und verfahren zur ausführung von suchoperationen variabler breite in einem inhaltsadressierbaren speicher
DE60026229T2 (de) Verfahren und Vorrichtung für Klassifizierung von Datenpaketen
EP0010195B1 (de) Vorrichtung zur Adressumwandlung in einer Datenverarbeitungsanlage
DE3788032T2 (de) Struktur zum Wiederordnen von Bits auf dem Chip.
DE60222575T2 (de) Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden
DE2163342C3 (de) Hierarchische binäre Speichervorrichtung
DE60222622T2 (de) Verfahren und Vorrichtung zur Paketkopfteilverarbeitung
DE10028563B4 (de) Kommunikationssteuerungseinheit
DE60015186T2 (de) Verfahren und system für rahmen- und protokollklassifikation
DE60032674T2 (de) Verfahren zum Suchen von Adressen
DE3513473A1 (de) Hochgeschwindigkeits-datenschieberegister
DE102005005073B4 (de) Rechnereinrichtung mit rekonfigurierbarer Architektur zur parallelen Berechnung beliebiger Algorithmen
DE2230103A1 (de) Adressiereinrichtung fuer einen speicher
DE2010772A1 (de)
DE3344141T1 (de) Sortiervorrichtung
DE2926322C2 (de) Speicher-Subsystem
DE60215416T2 (de) Zeigerbasierte binäre Suchmaschine und dafür geeignetes Verfahren
DE2750400A1 (de) Schaltungsanordnung fuer das mit dem laden und abrufen von datensaetzen ueberlappende sortieren von datensaetzen
DE112016001193T5 (de) Protokollunabhängiger, programmierbarer Schalter für durch Software definierte Datenzentrumsnetzwerke
DE69835547T2 (de) Inhaltsadressierbares Speichersystem
DE2436932A1 (de) Anordnung zur messung der effektivitaet einer datenverarbeitungsanlage mit virtuellem speicher
DE60217526T2 (de) Tertiäre cam-zelle
DE2459476C3 (de)

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
R082 Change of representative

Ref document number: 1425755

Country of ref document: EP

Representative=s name: BOSCH JEHLE PATENTANWALTSGESELLSCHAFT MBH, DE