-
HINTERGRUND DER ERFINDUNG
-
1. Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft im Allgemeinen inhaltsadressierbare
Speicher (CAM: Content Addressable Memories), die auch assoziative Speicher
genannt werden.
-
2. Beschreibung des Stands
der Technik
-
Ein
inhaltsadressierbarer Speicher (CAM) weist eine Anzahl von Speicherpositionen
auf, in denen Daten gespeichert werden können. Wenn Daten in einer Speicherposition
gespeichert werden, kann der Speicherort mit Hilfe des Inhaltes
(Datenwert) des Speicherorts adressiert werden. Ein Eingangswort
wird mit einer Tabelle von zulässigen
Werten verglichen. Wenn eine Übereinstimmung
vorliegt, wird der Speicherort des übereinstimmenden Wortes zurückgegeben.
Der Speicherort wird üblicherweise verwendet,
um eine darauf bezogene Tabelle zu adressieren und ein entsprechendes
Wort wird zurückgegeben.
Eine Anwendung von CAMs besteht bei der Internetprotokoll (IP) Paketklassifizierung, wobei
IP Adressen und andere Felder eines Internetpakets in Netzwerk-Switches
und Routern verglichen werden. In einer allgemeinen Formen von IP
Adressen, die Subnetzadresse (subnet address) oder Adressenpräfix genannt
werden, werden bestimmte Werte für
eine bestimmte Anzahl von Bits festgelegt und die restlichen Bits
der Adresse werden als "x" (don't care) Bits festgelegt.
Ein Beispiel für
IPv4 Adressen wird nachfolgend angegeben:
0110 1100 0111 xxxx
xxxx xxxx xxxx xxxx
-
Die
Bits, die nicht x (don't
care) entsprechen, bilden den Präfix
der Adresse und die Anzahl der Präfixbits wird Präfixlänge genannt.
Eine Untermenge der Klassifizierungsanwendung dient zum Identifizieren
der übereinstimmenden
Präfixe,
das die größte Anzahl
von Präfixbits
aufweist. In der allgemeineren Klassifizierungsanwendung müssen mehrere Felder
gleichzeitig übereinstimmen.
Eine Beispielspezifikation für
die Klassifizierung ist in der Tabelle der 19 gezeigt.
-
Zusätzliche
Felder können
in der Klassifizierung verwendet werden, z. B. 144 Bits zur Spezifizierung
können
für die
Klassifizierung für
das Internetprotokoll der Version vier (IPv4) verwendet werden. Bei
dem Internetprotokoll der Version sechs (IPV6) beträgt die Länge jedes
Adressfeldes 128 Bits und eine Klassifizierungsspezifikation kann
576 Bits übersteigen.
Eine Schlüsseleigenschaft
der Klassifizierungsspezifikationen besteht darin, dass jedes der Felder
x (don't care) Bits
aufweisen kann. Solche CAMs für
die Klassifizierung müssen
x (don't care) Bits
zulassen, die nicht notwendigerweise zueinander benachbart sind.
Eine Klasse von CAMs, die ternäre
CAMs genannt wird, wurde vorgeschlagen, um diese Notwendigkeit zu
adressieren, wobei ein zusätzliches
Bit, das jedem Datenbit zugeordnet wird, das Maskierungsbit genannt
wird.
-
Es
gibt jedoch viele Nachteile bei der herkömmlichen ternären CAM
Struktur. Da jede Zelle zwei Speicherzellen umfasst sowie eine Maskierungs-
und Vergleichschaltung, erfordert die Implementierung einer Tabelle
der Größe w × 2n w × 2n + 1
Speicherelemente und w × 2n
Maskierungs- und Vergleichsschaltungen. Da jedes Nachschlagen in der
Tabelle die Aktivierung aller Zellen erfordert, ist die Leistungsaufnahme
proportional zu w × 2n.
Für große Werte
von n sind die Kosten bemerkenswert und die Leistungsaufnahme untragbar.
Da zusätzlich die
Vergleichslogik in jeder Zelle wiederholt wird, ist es aufwendig
und schwierig, verschiedene Arten von Vergleich bereitzustellen
und das typische CAM stellt lediglich einen Bit-für-Bit-Vergleich
zur Verfügung.
-
Um
diese Nachteile zu vermeiden, offenbart
US 6,289,414 B1 ein Verfahren,
das teilweise ein Sortieren der ternären hierarchischen Adressen
und ihre zugeordneten Maskierungseinträge sowohl in binär als auch
in ternär
inhaltsadressierbaren Speichern (CAM) verwendet. Dieses Verfahren
ermöglicht
schnelleres Suchen und eine Reduzierung der Adresstabellengröße, die
bei der Verarbeitung der Kommunikationssystemadresse zum Identifizieren der
Quelle und des Ziels aller digitalen Paketdaten erlaubt.
-
Die
vorliegende Erfindung versucht die Handhabung von inhaltsadressierbaren
Speichern (CAMs) zu verbessern. Was insbesondere benötigt wird,
ist ein inhaltsadressierbares Speichersystem, das a) die Anzahl
von notwendigen Vergleichen reduziert, b) Feldanordnungen aus reinem
Speicher verwendet, c) Vergleicher von den Speicherelementen trennt,
und d) bestimmte Einträge
als potentielle Übereinstimmungen
auswählt,
bevor alle Bits miteinander verglichen werden. Diese Änderung
führen
zu einer verringerten Implementierungsgröße, indem die Anzahl der Speicherelemente
und Vergleicher reduziert wird, und die Energieaufnahme durch einen effizienteren
Vergleich der Dateneinträge
verringert wird.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Diese
Aufgabe wird durch das erfinderische Verfahren, das in Anspruch
1 definiert ist, erreicht. Gemäß der vorliegenden
Erfindung wird ein Verfahren bereitgestellt, um inhaltsadressierbare
Speicher zu implementieren, die für eine Internetpaketklassifizierung
geeignet sind, dass die Kosten wenig mehr als ein Speicherelement
pro Bit reduziert. Die vorliegende Erfindung ermöglicht erhebliche Leistungseinsparungen
sogar bei viel größeren CAM
Tabellen. Die bevorzugte Ausführungsform
stellt einen breiten Bereich von Nachschlagfunktionen mit einer
einzigen Struktur zur Verfügung.
Der Bereich der Optionen kann während
des Entwurfstadiums (Entwurfsskalierung), während der Herstellung der Chips
(Maskenprogrammierbarkeit), bevor das CAM in eine bestimmte Verwendung
(Feldprogrammierbarkeit) eingesetzt wird, zwischen Zyklen der CAM
Programmierung (Umprogrammierbarkeit) oder sogar zwischen Zyklen
der CAM Verwendung (Umkonfigurierbarkeit) genutzt werden. Eine Ausführungsform
der vorliegenden Erfindung erlaubt verschiedene Arten des Vergleichs
einschließlich
eines Bit-für-Bit-Vergleichs und
Bereichsvergleiche. In weiteren Ausführungsformen können verschiedene
Typen des Vergleichs in dem gleichen CAM Wort gemischt werden oder
verschiedene CAM Einträge
können
Gegenstand verschiedener Arten von Vergleichen sein.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt
ein herkömmliches
CAM System.
-
2 zeigt
eine herkömmliche
ternäres CAM
Feldanordnung.
-
3A zeigt
ein Blockdiagramm eines CAM gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
3B zeigt
ein Blockdiagramm eines Systems, das ein CAM gemäß einer Ausführungsform der
vorliegenden Erfindung verwendet.
-
3C zeigt
ein Flussdiagramm der Steuerphasentechnik gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
3D zeigt
ein Flussdiagramm der Datenphasentechnik gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
4 zeigt
eine Beispieltabelle von CAM Einträgen.
-
5 zeigt
ein Beispiel, wie CAM Einträge
in Gruppen aufgeteilt werden können,
gemäß einer Ausführungsform
der Erfindung.
-
6 zeigt
Konfigurationswerte für
die erste Gruppe, die in dem in 5 dargestellten
Beispiel gezeigt ist, gemäß einer
Ausführungsform.
-
7 zeigt
eine Eintragsauswahlschaltung basierend auf ternären CAM Bits gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
8 zeigt,
wie ein Einträge
so gruppiert werden können,
dass x (don't care)
Werte nicht in der Eintragsauswahleinheit erforderlich sind, gemäß einer
Ausführungsform
der vorliegenden Erfindung; und
-
9 zeigt
ein Codierschema, um Präfixspezifikationen
darzustellen, gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
10 zeigt
eine komprimierte Spezifikation für die dritte Gruppe der 8 gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
11 ist
ein Beispiel einer Eintragsauswahltabelle gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
12 zeigt
ein Beispiel einer Eintragsauswahltabelle, die in vier Segmente
aufgeteilt ist, gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
13 zeigt
die logische Operation einer 2-stufigen Eintragsauswahleinheit gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
14 zeigt
ein Beispiel einer Implementierung einer 2-stufigen Eintragsauswahleinheit
gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
15 zeigt
eine Bit-Auswahlschaltung gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
16 zeigt
den Verfahrensablauf beim Auswählen
von Bits von einer Eingabe gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
17A zeigt eine überlappenden Bit-Auswahlschaltung
gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
17B zeigt, wie Segmente der überlappenden Bit-Auswahlschaltung
verbunden sind, gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
18 zeigt
den Verfahrensablauf beim Auswählen
von Bits bei einer überlappenden
Bit-Auswahlschaltung gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
19 zeigt
das Format einer Beispielklassifizierungsspezifikation gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
AUSFÜHRLICHE
BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
Ausführungsformen
der vorliegenden Erfindung werden nun in Bezug auf die Figuren beschrieben,
wobei gleiche Bezugszeichen gleiche oder funktional ähnliche
Elemente bezeichnen. Auch in den Figuren entsprechen die am weitesten
links stehenden Ziffer(n) jeder Bezugszeichen der Figur, in der
die Bezugsnummer zuerst verwendet wird.
-
1 zeigt
ein typisches System mit einem CAM. Ein Eingabewort der Breite w 101 Bit
mit einer Tabelle von zulässigen
Werten 102 verglichen. Wenn eine Übereinstimmung vorliegt, wird
der Speicherort des übereinstimmenden
Ortes 103 zurückgegeben. Der
Speicherort wird üblicherweise
verwendet, um eine darauf bezogene Tabelle 104 zu adressieren und
ein entsprechendes Wort 105 wird zurückgegeben.
-
2 zeigt
eine herkömmliche
ternäres CAM
Feldanordnung. Daten werden in dem Datenregister D 201 gespeichert
und die Maske wird in dem Maskenregister M 202 gespeichert.
Während
eines Vergleichs wird der zu vergleichende Wert auf die Spaltenleitungen
Col 203 angeordnet. Die Vergleichsschaltung C 204 vergleicht
die Datenwerte mit den Col Zeilenleitungswerten und überträgt das Ergebnis
des Vergleichs auf die Übereinstimmungsleitungen 205,
wenn der Wert des Maskierungsregisters angibt, dass das Datenbit
für den
Vergleich gültig ist.
Die Zelle 206 ist w mal angeordnet, um eine Zeile der Breite
w 207 zu bilden und die Zeile ist 2n mal
angeordnet, um die Tabelle zu bilden. Da mehrere Zeilen mit einer
bestimmten Eingabe übereinstimmen können, wird
eine Prioritätsschaltung 208 verwendet, um
eine der Übereinstimmungszeilen
auszuwählen.
-
Das
Blockdiagramm der 3A zeigt einen CAM 300 mit
einer Kapazität
von N × n
Einträgen
gemäß einer
Ausführungsform
der vorliegenden Erfindung. Es gibt N Blocke, Block-1 320 bis
Block-N 321. In jedem Block gibt es einen Spezifizierungsspeicher 301,
der bis zu n Einträgen
speichern kann. Die Eintragsbitauswahlschaltung 302 wählt bestimmte
Bits aus dem Eingangswort 303 der Breite w aus. Die Eintragsauswahlschaltung 305 verwendet
die ausgewählten
Bits 304 der Breite sw, um einen der n Einträgen aus
dem Spezifizierungsspeicher auszuwählen. Der ausgewählte Eintrag,
der bei 306 ausgegeben wird, wird optional durch die Interpretationsschaltung 307 modifiziert
und bei 308 ausgegeben. Die Eingabe 303 wird optional
durch das Vergleichstor und Modifizierungsschaltung 316 modifiziert und bei 310 ausgegeben.
Die Vergleichsschaltung 309 vergleicht 308 gegen 310 und
gibt an, ob die Eingabe mit dem ausgewählten Eintrag in der Übereinstimmungszeile 311 übereinstimmt.
Die Adresse des ausgewählten
Eintrags innerhalb des Blocks wird als Addr 312 ausgegeben.
Es liegen N Übereinstimmungsindikatoren
vor, einer von jedem der N Blöcke und
einer, aus denen von der Prioritätsschaltung 313 ausgewählt wird,
dessen Ausgabe Match 315 eingestellt wird, wenn mindestens
einer der Blöcke
eine Übereinstimmung
angibt. Die ausgegebene Ausgewählte
Adresse 314 kombiniert die Identität der Gruppe, die durch die
Prioritätsschaltung
ausgewählt
wird und die Adresse des übereinstimmenden
Eintrags innerhalb dieses Blockes.
-
Der
CAM 300 kann in einem System, das in 3B dargestellt
ist, verwendet werden. Bei einer Ausführungsform gibt es zwei Phasen
der Verwendung des CAMs 300: eine Steuerphase, während der das
CAM 300 mit Einträgen
geladen wird, und eine Datenphase, während der das CAM 300 die
Eingangswerte mit den gespeicherten Einträgen vergleicht und das Ergebnis
zurückgibt.
Der Überwachungsprozessor 331 hat
die Aufgabe, die Konfigurationsregister und Speicher der CAM 300 mit
Einträgen
zu laden. Ist dieser geladen, arbeitet das CAM 300 in der
Datenphase unabhängig,
wo es Eingaben 303 akzeptiert, diese mit den Einträgen vergleicht und
den resultierenden Übereinstimmungsindikator 315 und
die ausgewählte
Adresse 314 zurückgibt.
-
Das
Ziel in der Steuerphase besteht darin, den CAM 300 so zu
laden, dass nur ein Eintrag in jedem Block des CAMs mit einer bestimmten
Eingabe möglicherweise übereinstimmen
kann. Eine Art, dieses Ziel zu erreichen, ist durch den Verfahrensablauf, der
in 3C dargestellt ist, dargestellt. Der Anfangspunkt 350 ist
eine Tabelle mit bis zu N × n
Einträgen.
In einem ersten Schritt 351 werden die Einträge in N
Gruppen unterteilt, von denen jede nicht mehr als n Einträge umfasst,
so dass innerhalb jeder Gruppe nicht mehr als ein Eintrag mit einer
bestimmten Eingabe übereinstimmen
kann. Die nächsten
drei Schritte werden für
jede in dem Schritt 351 gebildeten Gruppe wiederholt. In
Schritt 352 werden die Einträge der Gruppe in den Spezifizierungsspeicher 301 eines
neuen Blocks in dem CAM 300 geladen. In Schritt 353 werden
bestimmte Bitpositionen für
die Gruppe ausgewählt,
so dass die Werte der ausgewählten
Bitpositionen ausreichend sind, um einzelnen Eintrag von dem Rest
der Einträge
dieser Gruppe zu unterscheiden. In dem nächsten Schritt 354 wird
die Eintragsbitauswahl 302 mit den Bitposition, die in
Schritt 353 ausgewählt sind,
konfiguriert. Dann wird in Schritt 355 die Eintragsauswahl 305 so
konfiguriert, dass sie die Unterscheidungsbits der Einträge an Speicherorten
aufweist, die den Speicherorten der Einträge in dem Spezifizierungsspeicher 301 entsprechen.
-
Das
Ziel der Datenphase wird durch das CAM 300 erreicht. Jeder
Block des CAM 300 arbeitet, wie durch das Flussdiagramm
der 3D dargestellt ist. In Schritt 361 werden
die Bitpositionen, die in der Eintragsbitauswahl konfiguriert sind,
von der Eingabe 303 gelesen. In Schritt 362 wählt die
Eintragsauswahl 305 zumeist einen einzelnen Eintrag anhand
der in Schritt 361 gelesenen Bitwerte aus. In dem folgenden Schritt 363 wird
der ausgewählte
Eintrag aus dem Spezifizierungsspeicher 301 gelesen. In
dem optionalen Schritt 364 wird der Wert von dem Spezifizierungsspeicher
durch die Interpretationsschaltung 307 modifiziert und/oder
die Eingabe wird durch die Vergleichsbitauswahl und Interpretationsschaltung 316 modifiziert.
In Schritt 365 vergleicht die Vergleichsschaltung 309 die
optional modifizierten Werte von Schritt 364 miteinander
und gibt das Ergebnis aus. In Schritt 366 wählt die
Prioritätsschaltung 313 eines
der Ergebnisse aus allen Blöcken
aus und gibt das ausgewählte
Ergebnis aus.
-
Die
Arbeitsweise 300 kann mit der Beispieltabelle der CAM Einträge, die
in 4 gezeigt sind, dargstellt werden. Die Beispieltabelle
weist 20 Einträge
von jeweils 13 Bits auf, wobei jedes Bit 3 mögliche Zustände annehmen kann, 0, 1 und
x. Die Tabelle kann in Gruppen von fünf Einträgen oder weniger, wie es in 5 gezeigt
ist, aufgeteilt werden, so dass nur ein Eintrag mit jeder möglichen
Eingabe übereinstimmen
kann. Innerhalb jeder Gruppe sind wenige Bits ausreichend, um eindeutig
zwischen den Einträgen
zu unterscheiden und diese Bits sind schattiert (hervorgehoben)
dargestellt. Es kann mehr als einen Weg geben, die Einträge zu gruppieren,
und es kann mehr als eine Gruppe von sich unterscheidenden Schaltungsbits
geben. Für
diese Zwecke der verschiedenen Ausführungsformen der vorliegenden
Erfindung ist die besondere Auswahl der Gruppen oder Bits nicht
relevant. Die Eintragsbitauswahlschaltung 302 ist so konfiguriert,
dass die hervorgehobenen Bits jeder Gruppe automatisch als Eingabe
in der Eintragsauswahlschaltung 305 auswählt werden.
Die potentiellen Ausgaben der Eintragsbitauswahl 302 sind
in der Tabelle der 5 als SB0, SB1, SB2 und SB3
gezeigt. Die akzeptierbaren Werte von SB0 – 3 für eine Gruppe, werden in die
Eintragsauswahl 305 geladen. Die Gruppeneinträge werden
in den Spezifizierungsspeicher 301 an den selben Speicherort geladen,
an dem die ausgewählten
Bits für
diesen Eintrag in der Eintragsauswahl 305 gefunden wurden.
Wenn der Eingabewert von SB0 – 3
mit einem der akzeptierbaren Werte übereinstimmt, wird der entsprechende
Eintrag in dem Spezifizierungsspeicher ausgewählt und als eine potentielle Übereinstimmung über die
Leitungen 306 ausgegeben. In diesem Beispiel wird die Interpretierungsschaltung 305 konfiguriert,
um die Ausgabe nicht zu modifizieren, und die Vergleichs, Tor – und Modifizierungsschaltung 316 wird
konfiguriert, um alle Eingangsbits auszugeben, so dass die ausgewählte Eingabe
direkt mit dem Eingangswort verglichen wird. Die 6 zeigt
die Konfiguration und die Werte für die erste Gruppe und die
Ergebnisse einer Beispieleingabe. Die Eintragsbitauswahl 302 wählt Bits
0, 5, 6, 12 als Eingaben für
die Eintragsauswahlschaltung 305 aus. Die ausgewählten Bits
stimmten mit der zweiten Eingabe der Eintragsauswahleinheit 305 überein.
Der zweite Eintrag des Spezifizierungsspeichers 301 wird ausgelesen
und mit allen Bits der Eingabe 303 verglichen, was zu einer Übereinstimmung
führt.
-
Ausführungsformen
der vorliegenden Erfindung stellen eine Verbesserung gegenüber herkömmlichen
CAMs dar, weil die Spezifizierungsspeicherblöcke Speicheranordnungen entsprechen, die
aus reinen RAM Zellen (nicht aus herkömmlichen ternären CAM
Zellen) zusammengesetzt sind. Die Größe einer RAM Zelle ist kleiner
als die einer CAM Zelle. Im Falle einer statischen RAM Technologie kann
die reine RAM Zelle ein Drittel bis zu einem Fünftel der Größe einer
ternären
CAM Zelle entsprechen. Die Größe kann
sogar weiter reduziert werden, indem die DRAM oder 1-T SRAM Technologien
verwendet werden, so dass die Speicherzellen, die in Ausführungen
der vorliegenden Erfindung verwendet werden, kleiner als ein Zehntel
der Größe der CAM Zelle
betragen. So wird die Größe einer
CAM Implementierung viel kleiner (1/3 bis 1/10) in der Größe als eine äquivalente
Größe eines
herkömmlichen
CAMs. Somit kann bei einer bestimmten Größe des Siliziums ein CAM gemäß der vorliegenden
Erfindung Tabellen aufweisen, die drei bis zehn mal größer sind, verglichen
mit herkömmlichen
CAMs. Die Kosten pro Bit für
die vorliegende Erfindung können
in der Größenordnung
von 10 mal billiger sein.
-
Bei
einem herkömmlichen
CAM wird eine Vergleichsschaltung in jeder Zelle der Feldanordnung
angebaut. Somit aktiviert jede Eingabe so viele Vergleichsschaltungen
wie Bits in dem CAM vorhanden sind. In der Ausführung von der vorliegenden Erfindung
gibt es nur einen Vergleicher für
eine Eingabebreite pro Gruppe, abgesehen von den wenigen schmaleren
Vergleichern, die in der Eintragsauswahlschaltung verwendet werden.
Somit ist auch die Leistungsaufnahme für die Berechnung einer Übereinstimmung
um einen Faktor reduziert, der annähernd der Größe der Gruppe
entspricht.
-
Ein
Aspekt der Ausführungsform
der vorliegenden Erfindung, der diese von herkömmlichen CAM Vorrichtungen
unterscheidet, besteht in der Trennung der Speicherelemente von
den Berechnungs-/Vergleichselementen. Diese Trennung erlaubt den
zwei Elementen unabhängig
bezüglich Leistung
und Kosten optimiert zu werden. Zum Beispiel können die Vergleiche, die in
Ausführungsformen
der vorliegenden Erfindung verwendet werden, anspruchsvollere Leistungsmanagementtechniken verwenden,
da die Komplexität über die
große
Anzahl von Elementen in jedem Block amortisiert wird. Als weiteres
Beispiel können
die Speicherblöcke
geringere Spannungshübe
verwenden, ohne durch die Anorderungen der Vergleicher beschränkt zu werden.
-
Da
die Implementierungsgröße und die
Leistungsaufnahme viel kleiner sind als bei herkömmlichen CAMs, sind die Ausführungsformen
der vorliegenden Erfindung viel einfacher zu integrieren. Es können nicht
nur viel größere CAM
Tabellen auf einem einzelnen Chip integriert werden, sondern auch sehr
große
CAM Tabellen können
auf dem selben Chip mit komplexen Logikfunktionen wie Netzwerkprozessoren,
Datenverkehr-Managern und Sicherheits-Chips integriert werden. Durch
Auftrennen der Vergleichsfunktion von dem Speicher in dem CAM können komplexere
Vergleichsfunktionen (z. B. Bereichsvergleiche) ohne erhebliche
zusätzliche
Kosten implementiert werden.
-
In
der Steuerphase gibt es eine Vielzahl von Wegen, das Gruppieren
der Einträge
zu erreichen. Der effizienteste Weg die Einträge zu gruppieren, hängt von
den Eigenschaften der Tabelle der Einträge ab. Wenn z. B. die Einträge keine
x (don't care) Werte
umfassen, ist die Aufgabe des Auffindens von Einträgen, die
zu einer Gruppe gehörig
annehmbar sind, geradlinig, da alle Einträge per Definition eindeutig
sind und so jede vorgegebene Eingabe nur mit einem bestimmten Eintrag übereinstimmen
kann, unbeachtet dessen, wie die Einträge gruppiert sind. Dies ist
der Fall für
mehrere Tabellen, was bei Netzwerktechnik üblich ist, einschließlich dessen,
was in der Netzwerksprache eine Flusstabelle (flow table) genannt
wird. In der typischen Weiterleitungstabelle, die bei Netzwerkanwendungen
verwendet wird, weisen die Tabelleneinträge die Form von Präfixadressen
auf, und weisen somit x (don't
care) Bits auf, die aneinander benachbart sind. Dieser Fall kann
auf mehrere Arten behandelt werden, z. B. mit einer Strategie des
Gruppierens von Einträgen
durch die Anzahl der in ihnen enthaltenen x (don't care) Bits. In dem allgemeineren Klassifizierungsfall
kann es notwendig sein, komplexere Strategien anzuwenden. Zum Beispiel
können
die Einträge
deterministisch gruppiert werden, indem ein zweistufiger Ansatz
verwendet wird. Während
eines ersten Durchlaufs werden die Daten in einen Baum mit drei
potentiellen Zweigen von jedem Knoten organisiert. In einem zweiten
Durchlauf kann der Baum auf eine Vielzahl von Arten durchlaufen
werden, um die Gruppen zu bilden. Eine Idee, die in dem Baumdurchlauf
sehr gut funktioniert, besteht darin, dass jeder Knoten, der sowohl
einen 0-Zweig als auch einen 1-Zweig aufweist, einen Eintrag aus
dem 0-Zweig und einen Eintrag aus dem 1-Zweig aufgreift. Die zwei
Einträge,
die auf diese Weise ausgewählt
werden, können
nicht gleichzeitig übereinstimmen,
da sie in dieser Position sich unterscheiden. Eine weitere Option
besteht darin, eine statistische Information zu verwenden, z. B. bezüglich von
IP Adressen, um die Bitpositionen zu identifizieren, die verwendet
werden, um die Daten in jeder Gruppe zu unterscheiden. In dieser
Technik unterscheidet sich das Flussdiagramm von 3C dadurch,
dass die sich unterscheidenden Bitpositionen zuerst ausgewählt werden,
und dann die Gruppen ausgebildet werden. In dieser Technik ist es
nicht notwendig, dass die gleiche Gruppe von Bitpositionen für alle Gruppen
in dem CAM verwendet werden; eine Gruppe kann verwendet werden,
bis eine Unterscheidung zwischen den verbleibenden Einträgen schwierig
wird, und dann kann eine weitere Gruppe verwendet werden. Eine Variation
dieser Technik besteht darin, die Gruppe der sich unterscheidenden Bitpositionen
zufällig
auszuwählen.
Dies funktioniert gut, wenn man es mit großen Tabellen mit einer guten Verteilung
der Werte innerhalb der entsprechenden Tabelle zu tun hat.
-
Der
Auswahl der Einträge
für eine
Gruppe hat auch Auswirkungen auf die sich unterscheidenden Bitpositionen
für diese
Gruppe und daher auf die Anzahl der Bitpositionen, die für die Eintragsauswahleinheit 305 ausgewählt werden.
Obwohl die Eintragsauswahleinheit ausgebildet sein kann, um jede Anzahl
von Bitpositionen zu handhaben, kann die Logik vereinfacht werden,
wenn die Steuerphase eine minimale Anzahl von sich unterscheidenden
Bitpositionen für
jede Gruppe auswählt.
Die kleinste Anzahl von sich unterscheidenden Bitpositionen ist
logt der Anzahl der Einträge
in der Gruppe und die größte Notwendige
ist eins weniger als die Anzahl der Einträge in der betreffenden Gruppe.
Sowohl die Baumdurchlauftechnik als auch die Technik des Auswählens der
Bitposition (zufällig
oder mit einem a priori statistischen Wissen) vor dem Auswählen der
Gruppen kann helfen, minimale Anzahlen von sich unterscheidenden
Bitpositionen auszuwählen.
-
Eine
weitere Überlegung
beim Gruppieren von Einträgen
und der Auswahl von Bitpositionen besteht darin, ob x (don't care) Werten in
den sich unterscheidenden Bitpositionen für jede der Gruppen erlaubt
sind. Die Implementierung der Eintragsauswahlschaltung kann vereinfacht
werden, indem nicht zugelassen wird, dass x (don't care) Werte in den sich unterscheidenden
Positionen vorkommen. In diesem Fall besteht die Steuerphase darin,
Einträge so
zu gruppieren, dass Unterscheidungen zwischen den Einträgen in jeder
Gruppe vorgenommen werden können,
indem nur diejenigen Bitpositionen berücksichtigt werden, in denen
keine x (don't care)
Werte innerhalb der Gruppe vorliegen. Ein Beispiel dieser Strategie
ist in 8 gezeigt, worin die Einträge der Tabelle der 4 so
gruppiert worden sind, dass x (don't care) Werte nicht in der Eintragsauswahl
benötigt
werden.
-
Eine
Implementierung der Eintragsauswahlschaltung 305 basierend
auf CAM Bits ist in 7 gezeigt. Sie verwendet ein
herkömmliches
CAM 701 einer Breite, die ausreichend ist, um die ausgewählten Bits
zu speichern. Die Tiefe der Tabelle entspricht der Anzahl der Einträge in einer
Gruppe. Die ausgewählten
Bits 702 wählen
zumeist einen der Einträge aus
und das CAM gibt einen Zeiger 703 an die auf das ausgewählte Bit
basierende Eintragsspezifikation, die eine Übereinstimmung aufweist, zurück. Da nicht
alle Einträge
in einer Gruppe definiert werden können (wie in Gruppe 4 der 5)
wird ein gültiges Bit 704 jedem
Auswahlkriterium hinzugefügt.
Das gültige
Bit kann als ungültig
festgelegt werden, wenn kein Eintrag an diesem Speicherort vorliegt.
Die CAM Zellen, die in dieser Implementierung verwendet werden,
müssen
ternär
sein, wenn x (don't
care) Werte in den sich unterscheidenden Bits wie in 5 gezeigt ist,
erlaubt sind, können
jedoch binär
sein, wenn x (don't
care) Werte nicht wie in 8 gezeigt ist, erlaubt sind.
-
Die
Größe der Eintragsauswahlschaltung 305 kann
mit Hilfe einer mehrstufigen Technik weiter reduziert werden. 11 zeigt
ein Beispiel einer Eintragsauswahlinformation, bei der 8 ausgewählte Bits verwendet
werden, um aus 16 Einträgen
auszuwählen.
In 12 wurde die Information in vier Segmente gemäß der Größe der Anzahl,
die durch die Bits gebildet wird, unterteilt. Einige der Bits, die
grau schattiert sind, werden verwendet, um zwischen den Einträgen zu unterscheiden.
Die Eintragsauswahl wird in zwei Stufen vorgenommen. In der ersten
Stufe werden alle ausgewählten
Bits SB0 – 7
verwendet, um zu entscheiden, welche Segmente angewendet werden
und in der zweiten Stufe werden einige der SB0 – 7 Bits verwendet, um einen
Eintrag in dem Segment auszuwählen. 13 zeigt
die logische Operation einer 2-stufigen Eintragsauswahl 305. 14 zeigt
eine beispielhafte Implementierung. Die ausgewählten Bits Sel1 werden durch
einer Größenvergleichsanordnung 1401 verwendet,
um eine Speicherzeile auszuwählen,
die eine Information über
Unterscheidungsbits für
die Stufe 2 (1402) und einen Adressoffset 1403 in
einem CAM 1404 eines zweistufigen Bitwertes enthält. Die
Information der für
die zweite Stufe benötigten
Bits wird an die zweite Bitauswahlschaltung 1405 geleitet,
die die geeigneten Bits herausgreift, um diese als Eingang dem CAM
zur Verfügung
zu stellen. Eine einstufige Auswahl würde ein 16 × 8 CAM für die Beispieltabelle der 11 erfordern.
Die 2-stufige Auswahlimplementierung der 12 fordert
drei 8 Bit Größenvergleicher
und einen 16 × 3
CAM. In einigen Fällen
kann das CAM durch einen Decoder ersetzt werden. Mehrstufige Schaltungen
reduzieren die Implementierungskosten, insbesondere wenn die Gruppengröße groß ist, und
viele Bits in der Eintragsauswahleinheit vorhanden sind, wodurch
die Latenz für
die Transistoreffizienz ausgeglichen wird.
-
In
dem Fall, bei dem die Steuerphase sicherstellen kann, dass die Anzahl
von ausgewählten
Bits genau logt der Gruppengröße entspricht,
kann die Eintragsauswahlschaltung auf einen einfachen Decodierer
vereinfacht werden.
-
15 zeigt
eine Beispielsimplementierung einer Bitauswahlschaltung. Die Bits
in der Eingabe 1501, die ausgewählt werden sollen, werden durch einen "1" Wert in dem Auswahlregister SEL 1502 angegeben.
Wenn ein Laden angezeigt wird, werden die ausgewählten Bits in das Schieberegister 1503 geladen.
In diesem Beispiel liegen zwei Bits in jeder Schieberegisterzelle
vor, wobei F/E 1505 angibt, ob das Schieberegisterbit gefüllt oder
leer ist und VAL 1506 den Wert angibt, wenn dieses gefüllt ist.
Wenn somit ein Bit geladen wird, wird das entsprechende F/E Bit
auf „gefallt" eingestellt. Alle
weiteren F/E Bits werden auf "leer" eingestellt. Wenn
das Laden beendet ist, wird das Schieberegister für das Schieben
aktiviert. Das Schieben wird in einer Reihe von Schritten durchgeführt. In
jedem Schritt bewegt das Schieberegister Werte von einem "gefüllten" Speicherort zu dem
benachbarten Speicherort zur Linken, wenn dieser "leer" ist. Nach dem Beenden
eines solchen Schiebevorgangs, wird der ursprüngliche Speicherort auf "leer" festgelegt und der
neue Speicherort auf "gefüllt" festgelegt. Das
Schieben wird fortgesetzt, bis keine weiteren Verschiebungen mehr
möglich
sind. Die Schiebesteuerschaltung 1507 verwendet den Wert
des F/E Bits von dem aktuellen Speicherort und der vorangehende
Speicherort, um die Entscheidung darüber zu treffen, ob ein Verschieben
erlaubt ist, und ist verantwortlich für das Setzen und Rücksetzen
des F/E Bits sowohl an dem aktuellen als auch an dem vorangehenden
Speicherort. Die Abfolge der Schritte für eine Beispielbitauswahl ist
in 16 gezeigt. Durch den letzten Schritt (Schritt
5) werden alle ausgewählten
Bits an den am weitest links stehenden Bits positioniert und die
Bits werden an die Ausgangsleitungen SBit 1504 durch das
Out Signal geleitet. Wenn das Schieberegister asynchron ist, können alle
Schritte in einem Zyklus des CAM beendet werden.
-
Die
im schlimmsten Fall benötigte
Anzahl von Schritten, die notwendig ist, um die relevanten Bits
an die Stelle der höchstwertigen
Bits zu verschieben, kann mit Hilfe des Schemas der 17 reduziert
werden. Die Schieberegisterlänge
wird in zwei weitere Segmente mit jeweils einer Länge von
sw Bits, wie es in 17B gezeigt ist, unterteilt.
Die Ausgabe 1701 der am weitesten links stehenden Bits
jedes Schieberegisters wird mit dem Eingang 1702 des am
weitesten rechts stehenden Bits verbunden, um ein zirkulares Schieberegister
auszubilden. Ein zusätzliches
Bit POS 1703 wird verwendet, um die letzte Position der
verschobenen Bits in jedem Segment anzugeben. Während des Verschiebungsprozesses sind
keine Verschiebungen von einem Bit mit POS = 1 mit einem Bit mit
POS = 0 erlaubt. Die Verschiebesteuerung für jeden Speicherort berücksichtigt
den POS Wert sowie den F/E Wert des aktuellen Speicherortes und
des vorangehenden Speicherortes. Die Segmente überlappen sich so, dass die
Ausgabe von jedem ersten Bit jedes Segments 1704 mit dem ersten
Bit der Ausgabe der Bitauswahleinheit S-Bit1 1705 verbunden
ist. Auf ähnliche
Weise sind die zweiten Bitausgaben aller Segmente mit den SBit-2 verbunden
usw. Die POS Bits sind so konfiguriert, dass das POS Bit für ein Segment
für jede
vorgegebene SBit Speicherort auf 1 eingestellt wird und so dass
in jedem bestimmten Segment alle POS Bits einander benachbart sind.
Sind einmal die Schieberegister der Segmente durch die Eingaben
geladen, beginnt das zirkuläre Verschieben
und durch den letzten Schritt werden alle ausgewählten Bits so positioniert,
dass sie von dem am weitesten links stehenden SBit in geeigneter
Weise ausgerichtet sind. Da darin Schieberegister verwendet werden,
kann die Reihenfolge der ausgewählten
Bits von der ursprünglichen
Eingabe verschieden sein. 18 zeigt den
Verfahrensablauf. Wenn das Verschieben beendet ist, wie es in Schritt
2 gezeigt ist, haben die zwei zirkulären Schieberegister (Ringschieberegister)
ihre gefüllten
Bit so angeordnet, dass keine Überlappung besteht,
und die Werte können
auf die Ausgangsleitungen geladen werden. Der Wert wird nur ausgegeben,
wenn das POS Bit für
diesen Speicherort festgelegt ist. Durch das Überlappen wird die Zeit zum
Beenden der Bitauswahlprozedur reduziert, in diesem Beispiel von
5 Schritten auf 2 Schritte. Wenn die Länge des Segments geringer ist
als die Anzahl der ausgewählten
Bits, werden zusätzliche
Konfigurationsbits benötigt,
um die verschobenen Werte in jedem Segment zur geeigneten Ausgangsleitung
zu leiten.
-
In
einem herkömmlichen
CAM ist die Interpretation der Werte der Speicherzellen in dem CAM durch
die Logik in der CAM Zelle beschränkt. Somit wird in einer typischen
ternären
CAM Zelle eine Speicherzelle immer als eine Maske interpretiert,
die angibt, ob der Wert x (don't
care) entspricht oder nicht und die weitere Speicherzelle wird als
der nicht x Wert interpretiert. Ausführungsformen der vorliegenden
Erfindung trennen die Interpretationsfunktion von dem Speicher in
dem CAM, wodurch viele Optionen ermöglicht werden, welche Art von
Werten in dem Spezifizierungsspeicher 301 gespeichert werden. Diese
Optionen umfassen binäre,
ternäre
Bereichsspezifikationen und komprimierte Spezifikationen, sind jedoch
nicht auf diese beschränkt.
In dem Fall der binären
Spezifikation können
w Speicherbits für eine
Eingabe der Größe w Bit
verwendet werden. Im Falle einer ternären Spezifikation 2w Speicherbits können für eine Eingabe
der Größe w Bit
verwendet werden. Für
die Bereichsspezifikation ist es möglich, zwei Felder zum Definieren
des Beginns und dem Ende eines Bereiches zu definieren oder ein
Start und ein Zähler
ist eine andere Art einen Bereich zu definieren. Es ist auch möglich, Bereichsfelder
zu definieren, die die Form von größer als oder kleiner als usw.
aufweisen.
-
Viele
Darstellungen von komprimierten Feldern sind möglich. Als ein Beispiel erfordern
Subnetzwerk-Adressfelder (auch Präfixadressen genannt) der Breite
w Bits 2w Speicherzellen in herkömmlichen
ternären
CAMs, jedoch ist es durch Verwenden des Codierschemas, das in 9 gezeigt ist,
möglich,
die Präfixadressen
von w Bits mit gerade w + 1 Bits in Ausführungsformen der vorliegenden
Erfindung zu repräsentieren.
Das zusätzliche
Bit wird am Ende der w Bits angehängt und wird verwendet, anzugeben,
wenn das vorangehende Bit verglichen werden soll oder nicht. Wenn
das Bit nicht verglichen werden soll, gibt der Wert des Bits an,
ob das nächste Bit
verglichen werden soll. Der Prozess wird fortgesetzt, bis ein Bit
angibt, dass das nächste
Bit verglichen werden soll. Nach diesem Punkt sind alle Bits verglichen.
Es ist auch möglich,
die Speicheranforderung durch Gruppeneinträge so zu reduzieren, dass die
Spezifikation der Maskenbits (die angegeben, welche Bits verglichen
werden sollen) für
die gesamte Gruppe gleich ist. Beide Techniken werden in 10 verwendet,
die Titelgruppe der 8 als ein Beispiel verwendet.
Der Spezifizierungsspeicher 1001 weist keine x Werte auf,
hat jedoch zwei neue Bits X1 und X2, die mit den Präfixbits
0–4 und
Bits 5–9
zugeordnet sind. Die Interpretationsschaltung 1002 ist
ausgebildet, um diese Felder als Präfixwerte zu erkennen. Da zusätzlich Bit
12 für
die gesamte Gruppe "x" entspricht, wird
die Interpretationsschaltung konfiguriert, um Bit 12 als x (don't care) zu behandeln.
Der Spezifizierungsspeicher kann in Bit 12 willkürliche Werte aufweisen. Die
Interpretationsschaltung stellt den ursprüngliche Eintrag aus der codierten
Form her, und der wiederhergestellte Eintrag wird mit den Eingaben
mit Hilfe der Vergleichsschaltung 1003 verglichen.
-
Mit
Bezug auf die Interpretationstechniken der vorliegenden Erfindung
gibt es eine Anzahl von verfügbaren
Optionen als mögliche
Ausführungsformen
der vorliegenden Erfindung. Die Interpretationsoptionen sind komplementär zu den
Codierungsoptionen in dem Spezifizierungsspeicher. Zusätzlich zu den
bereits oben erwähnten
Optionen ist es möglich, Laufzeitfehlerüberprüfungen und
Fehlerkorrektur dieser Schaltung hinzuzufügen. Dies entspricht einer Funktion,
die sehr schwierig in einem typischen ternären CAM zur Verfügung zu
stellen ist. Es ist auch möglich,
die Interpretation der Einträge
von Eintrag zu Eintrag in der gleichen Gruppe zu variieren, wenn zusätzliche
Codebits in dem Spezifizierungsspeicher vorgesehen werden, um anzugeben,
wie der Eintrag interpretiert werden soll. Dies kann nützlich sein,
wobei die "Bedeutung" von bestimmten Bits
in der Eingabe sich mit den Werten von bestimmten weiteren Bits ändert.
-
Verschiedene
Vergleichsoptionen (oder weitere Operationen) sind für die Implementierung
von Vergleichen durch die Schaltung 309 verfügbar, einschließlich eines
Bit für
Bit Vergleichs, Bereichsvergleichs und verschiedene "weiche" Vergleiche, ist
jedoch nicht darauf beschränkt.
Der Bit für
Bit Vergleich entspricht dem herkömmlichen CAM Ansatz. Ein Bereichsvergleich
ist möglich,
um eine günstige
Implementierung zu erreichen, da die Bereichsberechnung einmal für die Gruppe
durchgeführt
wird. Bestimmte Formen des Bereichsvergleichs können Toleranzen bei den Werten
zulassen oder die Berechnung von Vektorabständen erlauben. Dies kann bei "weichen" Vergleichen wie
z. B. Stimmabdrücken
und Bildern nützlich
sein. Im Allgemeinen werden die Kombination von Optionen, in welcher
Weise Bits interpretiert werden und die Optionen in dem Vergleichsblock
erlauben Komplexe ALU ähnliche
Funktionalität
in Ausführungsformen
der vorliegenden Erfindung. Da die Logik, die beim Durchführen dieser
komplexeren Operationen verwendet wird, für jede Gruppe dupliziert wird,
unterstützt
nicht jede Speicherzelle bei der vorliegenden Erfindung eine komplexere
Logik zu moderaten Kosten.
-
Die
soweit gezeigten Beispiele verwenden das gesamte Eingabewort in
der Vergleichsschaltung, so dass die Vergleichs, Tor- und Modifizierungsschaltung
optional ist. Jedoch kann in bestimmten Ausführungsformen der vorliegenden
Erfindung diese Schaltung für
eine zusätzliche
nützliche
Funktionalität
bereitgestellt werden. Es ist z. B. möglich, weniger Bits, als der
Eingabewert enthält,
in die Vergleichsschaltung zu leiten, wenn z. B. Bits, die in der Eintragsauswahlschaltung
verwendet werden, nicht erneut verglichen werden müssen. Dies
reduziert die Anzahl von Speicherbits in dem Spezifizierungsspeicher.
Es ist auch möglich,
in dieser Schaltung zu überprüfen, ob
bestimmte Bedingungen durch die Eingabe erfüllt werden, bevor das Durchführen einer Operation
in dem Block erlaubt wird. Dies ist insbesondere nützlich,
wenn während
der Steuerphase alle Einträge
in einer Gruppe so ausgewählt
werden, dass alle Einträge
in dieser Gruppe bestimmte Kriterien erfüllen. Diese Kriterien können dann
zu Durchlasskriterien werden, die durch den Vergleichs-, Tor- und
Modifizierungsschaltung bewirkt wird. In diesem Fall werden nicht
alle Blöcke
des CAM 300 während jedes
Vergleichsvorgangs aktiviert, was weiterhin zu einer Leistungseinsparung
führt.