-
Hintergrund der Erfindung
-
Diese
Erfindung betrifft programmierbare integrierte Logik-Schaltungsvorrichtungen
("PLDs") und insbesondere
Speicherschaltungen zur Verwendung mit PLDs, die ein Anwender der
PLD während des
normalen Logik-Betriebs der PLD für verschiedene Zwecke verwenden
kann.
-
Programmierbare
Logik-Vorrichtungen mit relativ großen Speicherblöcken zusätzlich zu
der üblichen
programmierbaren Logik und programmierbarer Verbindung sind wohl
bekannt, wie es beispielsweise in der
US
5,550,782 von Cliff et al.,
US 5,689,195 von
Cliff et al.,
US 6,020,759 von
Heile, der US-Patentanmeldung Nr. 09/292,448 von Heile, eingereicht
am 15. April 1999, und der US-Patentanmeldung Nr. 09/389,995 von
Heile, eingereicht am 2. September 1999, dargelegt ist. Die oben
genannten Speicherblöcke
können über die
programmierbare Verbindung mit der programmierbaren Logik und/oder
den Eingabe/Ausgabe-("I/O")-Pins der Vorrichtung
verbunden werden. Derartige Speicherblöcke können für Nur-Lese-Speicher ("ROM"), Direktzugriffspeicher
("RAM"), Assoziativspeicher
("CAM"), Produkt-Term-(p-Term)-Logik,
usw. verwendet werden. Es ist bekannt, daß derartige Speicherblöcke eine
programmierbar variable Breite und Tiefe haben können. Ein 2K-bit-Speicher kann
beispielsweise als 2K Ein-Bit-Worte ("2K×1"), 1K Zwei-Bit-Worte ("1K×2"), 512 Vier-Bit-Worte
("512×4"), 256 Acht-Bit-Worte
("256×8"), 128 16-bit-Worte ("128×16"), usw. konfiguriert
sein. Es ist auch bekannt, daß derartige
Speicherblöcke
mit separaten Lese- und Schreib-Ports ausgestattet sein können, so
daß Lesen
und Schreiben unabhängig
gleichzeitig erfolgen können
(sogenannter Dual-Port-Betrieb).
-
Die
bekannten programmierbaren Logikvorrichtungs-Speicheranordnungen
des oben beschriebenen Typs lassen sich mitunter nur schwer vollständig nutzen.
Wenn ein erster First-In/First-Out-("FIFO")-Speicher mit einer
Kapazität
von acht Worten von jeweils acht Bit (d. h. ein 8×8 FIFO)
benötigt
wird, werden nur 64 Bit eines 2K-Bit-Speicherblocks genutzt, und
die restlichen 1984 Bits in diesem Block werden vergeudet.
-
Die
US 5,559,450 offenbart die
Implementierung von Multi-Port-RAMs in einem FPGA, wobei das RAM
ein Dual-Port-RAM mit zwei Schreib-Ports und zwei Lese-Ports ist.
-
OFFENBARUNG DER ERFINDUNG
-
Erfindungsgemäß wird eine
programmierbare Schaltung bereitgestellt, welche mehrere Logikkomponenten
umfaßt,
wobei jede Logikkomponente wenigstens eine programmierbare Schaltung
umfaßt; und
einen Multi-Port-Speicher umfaßt,
welcher mit den mehreren Logikkomponenten gekoppelt ist, wobei der
Speicher selektiv konfigurierbar ist, um wenigstens einen Schreib-Port und wenigstens
einen Lese-Port zu umfassen, wobei die Gesamtzahl an Lese- und Schreib-Ports größer als
zwei ist, wobei der Speicher in der Lage ist, mehrere Schreib- und Lese-Operationen gleichzeitig
durchzuführen,
und dadurch gekennzeichnet ist, daß wenigstens einer der Ports
mit einer programmierbaren Inversions-Schaltung versehen ist, welche
selektiv Signale an den Speicher in einer wahren und komplementären Form
liefert.
-
Der
Speicher der Vorrichtung ist in einer Ausführungsform so konfigurierbar,
daß er
mindestens zwei Lese-Ports und einen Schreib-Port umfaßt.
-
Der
Speicher der Vorrichtung ist in einer anderen Ausführungsform
so konfigurierbar, daß er mindestens
zwei Lese-Ports und zwei Schreib-Ports umfaßt.
-
In
jeder Ausführungsform
kann auf jede Speicherzelle über
jeden Lese-Port und jeden Schreib-Port zugegriffen werden. Hierdurch kann
der Speicher in jeglichen von mehreren unterschiedlichen Modi betrieben
werden, einschließlich
(1) Operation als ein großer
Speicher oder (2) Operation als zwei effektiv separate Speicher
mit einem beliebigen aus einem weiten Bereich von relativen Größen.
-
Weitere
Merkmale der Erfindung, ihre Natur und verschiedene Vorteile ergeben
sich aus den angefügten
Zeichnungen und der folgenden detaillierten Beschreibung.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
ein vereinfachtes schematisches Blockdiagramm einer beispielhaften
programmierbaren Logikvorrichtung, die erfindungsgemäß ausgelegt
sein kann.
-
2 ist
ein vereinfachtes schematisches Blockdiagramm, das detaillierter
eine beispielhafte Ausführungsform
eines repräsentativen
Abschnitts der erfindungsgemäßen Vorrichtung
von 1 zeigt.
-
3 ist
ein vereinfachtes schematisches Blockdiagramm, das noch detaillierter
eine beispielhafte Ausführungsform
eines repräsentativen
Abschnitts der erfindungsgemäßen Schaltung
von 2 zeigt.
-
4 ist
eine vereinfachtere Darstellung der in 2 gezeigten
Schaltung.
-
5 ist 4 ähnlich,
stellt jedoch eine spezielle Anwendung der erfindungsgemäßen Schaltung
von 4 dar.
-
6 ist
ein vereinfachtes schematisches Blockdiagramm einer beispielhaften
Ausführungsform
einer repräsentativen
Schaltung, die erfindungsgemäß in den
erfindungsgemäßen Schaltungen
der anderen Figuren verwendet werden kann.
-
7 ist
ein vereinfachtes Blockdiagramm eines beispielhaften Systems, das
eine erfindungsgemäße programmierbare
Logikvorrichtung verwendet.
-
DETAILLIERTE BESCHREIBUNG
-
Wie
in 1 gezeigt ist, umfaßt eine beispielhafte programmierbare
Logikvorrichtung 10, die erfindungsgemäß ausgelegt sein kann, eine
zweidimensionale Matrix sich schneidender Reihen und Spalten von
Bereichen 30 einer programmierbaren Logik. Jede Reihe umfaßt auch
einen relativ großen Bereich 40 von
Speicherzellen. Jeder Speicherbereich 40 kann beispielsweise
4K (4096) Bit Speicher umfassen. Die Speicherbereiche 40 sind
auf Vorrichtung 10 in einer Spalte angeordnet. Die Bereiche 20 der
Eingabe/Ausgabe-Schaltung und Pads sind neben jedem Ende jeder Reihe
und Spalte der Bereiche 30/40 angeordnet. Jeder
Reihe der Bereiche 20/30/40 sind die
horizontalen Verbindungsleiter 50 zugeordnet. Jeder Reihe
der Bereiche 20/30 oder 20/40 sind
vertikale Verbindungsleiter 60 zugeordnet. Jedem Bereich 30/40 sind
Bereichszuführungsleiter 70 zugeordnet,
um Signale von den horizontalen Leitern 50 zu dem zugeordneten
Bereich 30 oder 40 zu bringen. Jedem Bereich 30 oder 40 zugeordnete
Eingabeleiter 80 überbringen
Signale von den dazugeordneten Leitern 70 zu jenem Bereich 30 oder 40. Ausgabeleiter 90a senden
Signalausgaben von jedem Bereich 30 oder 40 als
Ausgabe zu benachbarten Leitern 50. Ausgabeleiter 90b senden
in ähnlicher Weise
Signalausgaben von jedem Bereich 30 oder 40 als
Ausgabe zu benachbarten Leitern 60. Programmierbare Logikverbinder
("PLCs") 52 werden bereitgestellt,
um sich schneidende Leiter 50 und 70 selektiv
miteinander zu verbinden. Die PLCs 62 verbinden in ähnlicher
Weise selektiv die sich schneidenden Leiter 50 und 60,
und die PLCs 72 verbinden in ähnlicher Weise selektiv die
sich schneidenden Leiter 70 und 80.
-
Jeder
der Bereiche 30 ist programmierbar, um eine oder mehrere
relativ einfache Logikaufgaben mit Signalen durchzuführen, die
durch die zugeordneten Leiter 80 an jenen Bereich angelegt
werden. Die resultierenden Ausgabesignale werden über Leiter 90 ausgegeben.
Durch Verketten mehrerer Logikbereiche 30 mittels der Verbindungsressourcen
(z. B. 50, 52, 60, 62, 70, 72, 80, 90)
der Vorrichtung können
sehr komplexe Logikaufgaben durchgeführt werden. Signale können von
Vorrichtung 10 über
I/O-Bereiche 20 als Eingabe empfangen oder als Ausgabe gesendet
werden.
-
Die
Speicherbereiche 40 können
in einem oder mehreren von etlichen verschiedenen Modi operieren.
Ein Speicherbereich 40 kann beispielsweise am Anfang während der
Anfangskonfiguration von Vorrichtung 10 programmiert werden
und danach als ROM verwendet werden. In einem derartigen Fall werden
die verschiedenen Positionen des Speicherbereichs von Adress-Signalen auf den
zugeordneten Drähten 80 adressiert,
und die Inhalte der adressierten Positionen werden als Ausgabe über Drähte 90 zur
anderweitigen Verwendung auf Vorrichtung 10 oder zur Ausgabe
aus Vorrichtung 10 über
eine oder mehrere I/O-Bereiche 20 ausgegeben. Als weiteres Beispiel
kann ein Speicherbereich 40 als RAM operieren und Daten
speichern, die mittels zugeordneter Drähte 80 an Speicherpositionen
angelegt werden, die durch "Write
Address"-Signale ("Schreibe Adresse"-Signale) an anderen
zugeordneten Drähten
bestimmt werden, und danach Daten durch "Read address"-Signale ("Lies Adresse"-Signale) an anderen zugeordneten Drähten 80 aus
Positionen (über Drähte 90)
auslesen. In RAM- oder ROM-Modi kann ein Speicherbereich 40 so
konfiguriert werden, daß er
als einfacher Speicher, als Assoziativspeicher ("CAM"),
als Produkt-Term-("p-Term")-Logik, usw. operiert.
-
Es
sei darauf hingewiesen, daß 1 nur eine
mögliche "Architektur" programmierbarer
Logikvorrichtungen zeigt, in denen die vorliegende Erfindung verwendet
werden kann, und daß die
Erfindung gleichermaßen
in vielen anderen Architekturen programmierbarer Logikvorrich tungen
verwendbar ist.
-
Ein
erfindungsgemäßer repräsentativer Speicherbereich 40 ist
detaillierter in 2 gezeigt. Der Speicherbereich 40 umfaßt eine
Matrix 100 aus Speicherzellen. (Eine beispielhafte Ausführungsform einer
repräsentativen
Speicherzelle 200 ist in 3 gezeigt).
Die Matrix 100 kann beispielsweise 4K Bit Speicher und
daher 4K Speicherzellen 200 umfassen. Die Speicherzellen 200 in
der Matrix 100 sind in einer zweidimensionalen Matrix sich
schneidender Reihen und Spalten derartiger Zellen angeordnet. Die
Matrix 100 kann beispielsweise 64 Reihen und 64 Spalten
Speicherzellen 200 umfassen.
-
Der
Speicherbereich 40 umfaßt auch zwei unabhängige Logikschaltungen 110-1 und 110-2 zur Auswahl
der Schreibspalte. Jede der Logikschaltungen 110-1 und 110-2 zur
Auswahl der Schreibspalte empfängt
jeweils eine von zwei Gruppen von Signalen 80-1 und 80-2 von
der Verbindungsschaltung 50/60/70/usw. der Vorrichtung 10 (siehe 1). Jede
der Logikschaltungen 110-1 und 110-2 zur Auswahl
der Schreibspalte kann auch teilweise durch eine jeweilige Gruppe
programmierbarer Funktionssteuerungselemente ("FCEs") 120-1 und 120-2 gesteuert
werden. Die an jede der Schaltungen 110 angelegten Signale 80 umfassen
(1) Spaltenadress-Signale,
die der Empfangsschaltung 110 die Auswahl ermöglichen,
welche der Spalten in der Matrix 100 zum Schreiben von
Daten ausgewählt
werden wird, die auch von jener Schaltung 110 erhalten
wurden, und (2) Datensignale, die Daten repräsentieren, die in die gewählten Spalten
in der Matrix 100 geschrieben werden sollen. Jede Instanz
der Bezugsziffer 80 steht somit in der Regel für einen
Bus mit mehreren parallelen Drähten
(einschließlich
mehrerer paralleler Adress-Signaldrähte, und
im Fall der mit Elementen 110 verbundenen Busse 80 auch
einschließlich
mehrerer paralleler Datensignaldrähte). Die Anzahl der Drähte in einem
Bus 80 ist dessen Breite, die ein Maß für die Kapazität des Busses
und des zugeordneten Schreib-Ports ist. Jeder mit einem Element 110 verbundene
Bus 80 kann beispielsweise 16 parallele Drähte umfassen,
die für
Daten verwendbar sind, obwohl nicht in allen Fällen alle dieser Drähte für Daten verwendet
werden können.
-
Die
jeder der Schaltungen 110 zugeordneten FCEs 120 sind
programmierbar, um die Breite des Datenworts zu steuern, die dieser
Schaltkreis 110 an die Matrix 100 anlegt. Die
jeder Schaltung 110 zugeordneten FCEs 120 können jegliche
der mehreren Wortlängen
auswählen,
wie ein Bit, zwei Bits, vier Bits, acht Bits oder 16 Bits. Wenn
die Vier-Bit-Option gewählt
wird, dann werden über
den zugeordneten Bus 80 vier Datensignale empfangen und
durch die zugeordnete Schaltung 110 weitergeleitet. In
der Tat gibt jede der Schaltungen 110 die empfangenen Daten
in mehreren parallelen Instanzen aus, d. h. so vielen Instanzen,
wie erforderlich sind, um Daten an alle der Spalten der Matrix 100 anzulegen.
Die Spaltenauswahlsignale, die jede Schaltung 110 ebenfalls ausgibt,
führen
die endgültige
Auswahl der Spalte(n) in Matrix 100 durch, die die Daten
tatsächlich
speichert bzw. speichern. Wenn die Ein-Bit-Option ausgewählt wird,
wird dieses eine Datenbit an alle 64 Spalten in der Matrix 100 angelegt,
aber nur einer Spalte wird es ermöglicht, dieses Datenbit tatsächlich zu
speichern. Wenn die Zwei-Bit-Option ausgewählt wird, werden diese beiden
Datenbits parallel an jede der 32 Gruppen der beiden Spalten in
Matrix 100 angelegt, aber nur einer dieser 32 Gruppen wird
es in der Tat ermöglicht,
jene Daten zu speichern. Wenn die Vier-Bit-Option ausgewählt wird,
werden diese vier Datenbits an jede der 16 Gruppen der vier Spalten
in Matrix 100 angelegt, aber wiederum nur einer dieser
16 Gruppen wird es in der Tat ermöglicht, die Daten zu speichern.
-
Das
oben beschriebene Merkmal der variablen Breite ermöglicht die
Verwendung der Matrix 100 zur effektiven Bereitstellung
von Speichern mit jeglichen aus einem weiten Bereich von Breiten
und Tiefen, wie 4K×1,
2K×2,
1K×4,
512×8
oder 256×16,
sowie Untergruppen dieser Tiefen, wie 2K×1, 1K×2, 512×4 oder 256×8. Wenn die volle Kapazität der Matrix 100 nicht
von einer der Schaltungen 110 verwendet wird, steht der
Rest der Matrix zur Verwendung durch die andere Schaltung 110 zur
Verfügung. Wenn
die Schaltung 110-1 beispielsweise nur die Hälfte der
Matrix 100 verwendet (z. B. zur Bereitstellung eines Speichers,
der 2K×1,
1K×2,
512×4
oder 256×8
ist), steht der Rest der Matrix 100 zur Verwendung durch
die Schaltung 110-2 zur Verfügung, um effektiv einen weiteren
unabhängig
verwendbaren Speicher zu liefern (der wiederum irgendeiner von 2K×1, 1K×2, 512×4 oder
256×8
sein kann). Die in den vorangehenden Sätzen angegebenen Speichergrößen sind
lediglich Beispiele, und es sind in gleicher Weise viele andere
Speichergrößen möglich.
-
Es
ist aus dem Vorhergehenden erkennbar, daß die Ausgabesignale 112 von
jeder der Schaltungen 110 sowohl die Spaltenauswahl- als
auch die Datensignale umfaßt.
Es ist auch zu erkennen, daß jede der
Schaltungen 110 diese Signale an alle der Spalten in der
Matrix 100 anlegt.
-
Der
Speicherbereich 40 umfaßt ferner zwei unabhängige Logikschaltungen 130-1 und 130-2 zur Auswahl
der Schreibreihe. Jede der Logikschaltungen 130-1 und 130-2 zur
Auswahl der Schreibreihe empfängt
jeweils eine von zwei Gruppen von Signalen 80-1 und 80-2 von
der Verbindungsschaltung 50/60/70/usw.. Die an jede der
Schaltungen 130 angelegten Signale 80 sind Reihenadress-Signale,
die der empfangenden Schaltung 130 die Auswahl ermöglichen,
welche Reihe in der Matrix 100 Daten schreibt (d. h. speichert),
die aus der jeweiligen der Logikschaltungen 110 zur Auswahl
der Schreibspalte empfangen wurden. Schaltung 130-1 wählt insbesondere
die Reihe in Matrix 100, die die durch Schaltung 110-1 (wobei
die Spaltenauswahl auch von Schaltung 110-1 bereitgestellt
wird) an der Matrix angelegten Daten speichert, und Schaltung 130-2 wählt die
Reihe in der Matrix 100, die die durch Schaltung 110-2 (wobei
die Spaltenauswahl auch von Schaltung 110-2 bereitgestellt
wird) an der Matrix angelegten Daten speichert. Die Reihenauswahl-Ausgabesignale
von jeder der Schaltungen 130-1 und 130-2 werden über Drähte 132-1 beziehungsweise 132-2 an
alle Reihen der Matrix 100 angelegt. (Der Einfachheit halber
geht die vorliegende Diskussion davon aus, daß jede der Schaltungen 130 nur
eine Reihe in der Matrix 100 zur Zeit auswählen kann.
Dies ist der Betriebsmodus, der zur Bereitstellung von RAM verwendet
wird. In dieser Beschreibung werden nachfolgend andere Modi, wie
CAM und p-Term-Logikmodus, als mögliche
Erweiterungen des RAM-Modus betrachtet.)
-
Der
Speicherbereich 40 umfaßt ferner zwei unabhängige Logikschaltungen 140-1 und 140-2 zur Auswahl
der Lesereihe. Jede der Logikschaltungen 140-1 und 14-2 zur
Auswahl der Lesereihe empfängt jeweils
eine von zwei Gruppen von Signalen 80-1 und 80-2 von
der Verbindungsschaltung 50/60/70/usw.. (Obwohl mehrere
verschiedene Schaltungen (z. B. 110-1, 130-1, 140-1 und 150-1)
gezeigt sind, die mit der gleichen Bezugsziffer (z. B. 80-1)
bezeichnete Signale empfangen, sei darauf hingewiesen, daß jede dieser
Schaltungen eine jeweilige unterschiedliche Teilmenge der Menge
der Signale empfangen kann, die durch jene Bezugsziffer bezeichnet
wird.) Die an jede der Schaltungen 140-1 und 140-2 angelegten Signale
sind Reihenadress-Signale,
die der empfangenden Schaltung 140 die Auswahl ermöglichen, welche
Reihe in Matrix 100 Daten an die jeweilige zugeordnete
Logikschaltung 150-1 und 150-2 zur Auswahl der
Lesespalte ausgibt (nachfolgend detaillierter erörtert). Die Daten in der Reihe,
die durch die Ausgabesignale 142-1 von Schaltung 140-1 ausgewählt werden,
werden beispielsweise über
Drähte 148-1 an
Schaltung 150-1 angelegt. Die Daten in der Reihe, die durch
die Ausgabesignale 142-2 von Schaltung 140-2 ausgewählt werden,
werden in ähnlicher
Weise über
Drähte 148-2 an
Schaltung 150-2 angelegt. (Der Einfachheit halber geht
die vorliegende Erörterung
wiederum davon aus, daß jede
der Schaltungen 140 nur eine Reihe zur Zeit auswählen kann,
wie es für
den grundlegenden ROM- oder RAM-Betrieb geeignet ist. Andere Modi,
in denen jede der Schaltungen 140 mehrere Reihen parallel auswählen kann
(z. B. zur Unterstützung
von CAM- oder p-Term-Logikoperationen)
werden in dieser Beschreibung zu einem späteren Zeitpunkt erwähnt).
-
Die
letzten Hauptkomponenten des Speicherbereichs 40 sind zwei
unabhängige
Logikschaltungen 150-1 und 150-2 zur Auswahl der
Lesespalte. In gewisser Hinsicht führen Schaltungen 150 eine
Aufgabe durch, die die Umkehrung der von Schaltungen 120 durchgeführten Aufgabe
ist. Jede der Schaltungen 150-1 und 150-2 wird
teilweise durch die jeweiligen FCEs 160-1 und 160-2 gesteuert,
um jegliche der mehreren Datenwortlängen auszuwählen, ähnlich jenen, die durch FCEs 120 auswählbar sind.
Jede der Schaltungen 150-1 und 150-2 wird ferner
durch die jeweiligen Leseadress-Signale 80-1 und 80-2 gesteuert,
um auszuwählen,
aus welcher Spalte/welchen Spalten in der Matrix 100 diese Schaltung
Daten ausgibt. Die Datenausgabe durch jede der Schaltungen 150-1 und 150-2 wird
mittels der Busse 90-1 beziehungsweise 90-2 an
Verbindungsschaltung 50/60/70/usw. angelegt. Jeder der Busse 90 umfaßt in der
Regel mehrere parallele Datendrähte,
wie in dem Datenabschnitt der mit Elementen 110 verbundenen
Busse 80. Die Anzahl der Drähte in jedem Bus 90 ist
die Breite des Busses und ein Maß für die Kapazität jenes
Busses und des zugeordneten Lese-Ports. Jeder Bus 90 kann
beispielsweise 16 parallele Datendrähte umfassen, obwohl nicht
in allen Fällen
alle dieser Drähte
verwendet werden können.
-
Wie
bereits erwähnt,
zeigt 3 eine beispielhafte Ausführungsform einer repräsentativen Speicherzelle 200 in
der Matrix 100. Die Datenausgabesignale von Schaltung 110-1 in 2 (für die Spalte
in Matrix 100, die die Speicherzelle 200 umfaßt, gezeigt
in 3) werden in wahrer beziehungsweise komplementärer Form
an die beiden Leiter 112-1D in 3 angelegt,
die jene Spalte bedienen (d. h. sich entlang dieser erstrecken).
In ähnlicher
Weise wird das Spaltenauswahl-Ausgabesignal von Schaltung 110-1 für die Spalte,
die die abgebildete Speicherzelle 200 umfaßt, an den
Leiter 112-1S angelegt, der sich entlang jener Spalte erstreckt. Ähnliche
Leiter 112-2D und 112-2S werden für die Daten-
und Spaltenauswahl-Ausgabesignale der Schaltung 110-2 für die Spalte
bereitgestellt, die die abgebildete Speicherzelle 200 umfaßt.
-
Das
Reihenauswahl-Ausgabesignal von Schaltung 130-1 in 2 (für die Reihe,
die die abgebildete Speicherzelle 200 umfaßt) wird
an den Leiter 132-1 in 3 angelegt,
der jene Reihe bedient (d. h. sich entlang dieser erstreckt). In ähnlicher
Weise wird das Reihenauswahl- Ausgabesignal
von der Schaltung 130-2 für die Reihe, die die abgebildete Speicherzelle 200 umfaßt, in 3 an
den Leiter 132-2 angelegt. Das Reihenauswahl-Ausgabesignal von
Schaltung 140-1 für
die Reihe, die die abgebildete Speicherzelle 200 umfaßt, wird
in 3 an den Leiter 142-1 angelegt, und das
entsprechende Ausgabesignal von Schaltung 140-2 wird in 3 an
den Leiter 142-2 angelegt.
-
Die
Signale an den beiden Drähten 148-1 in 3 (wobei
sich die Drähte
entlang der gesamten Spalte erstrecken, die die abgebildete Speicherzelle 200 umfaßt) werden
an den Abschnitt der Schaltung 150-1 in 2 angelegt,
der jene Spalte bedient. Die Signale an den beiden Drähten 148-2 in 3 werden
in ähnlicher
Weise an den Abschnitt der Schaltung 150-2 angelegt, der
genau jene Spalte bedient.
-
Über entweder
Schaltungen 110-1 und 130-1 oder Schaltungen 110-2 und 130-2 können Daten
in Speicherzelle 200 geschrieben werden. Um beispielsweise
unter Verwendung von Schaltungen 110-1 und 130-1 Daten
in eine Zelle 200 zu schreiben, legt der Schaltkreis 110-1 die
zu schreibenden Daten in wahrer und komplementärer Form an zwei Drähte 112-1D an.
(Es kommt nicht darauf an, welcher Draht 112-1D die wahre
Form der Daten empfängt
und welcher Draht 112-1D die komplementäre Form der Daten empfängt, solange
eine konsistente (oder wenigstens bekannte) Polarität verwendet wird).
Die Schaltung 110-1 legt zudem ein Gate-Einschaltsignal
an einen Draht 112-1S an, und die Schaltung 130-1 legt
ein Gate-Einschaltsignal an einen Draht 132-1 an. Die im
vorhergehenden Satz genannten Gate-Einschaltsignale schalten alle
der Transistoren 210-1, 212-1, 220-1 und 222-1 an.
Mindestens ein Paar von Transistoren 210-2/212-2 oder 220-2/222-2 ist
abgeschaltet, weil die Schaltungen 110-2 und 130-2 nicht
gleichzeitig beide dieselbe Reihe und Spalte auswählen, die
durch die Schaltungen 110-1 und 130-1 ausgewählt werden.
Weil die Transistoren 210-1, 212-1, 220-1 und 222-1 alle
angeschaltet sind, ist der Inverter 230 zwischen den Drähten 112-1D für ein wahres
und komplementäres
Datensignal angeschlossen. Der Inverter 230, der verglichen
mit dem Inverter 240 relativ stark ist, wird daher dazu
gebracht, das Inverse der Datensignale an dem linken der Datendrähte 112-1D auszugeben. Der
Inverter 240 ist nicht stark genug, um den Inverter 230 daran
zu hindern, den Status möglicherweise als
Antwort auf diesen äußeren Reiz
zu ändern,
ist jedoch ausreichend stark, um den Inverter 230 in einem
beliebigen Status zu halten, in dem er sich befindet, wenn der äußere Reiz
entfernt wird. Eine Speicherzelle 200 (prinzipiell sind
Inverter 230 und 240 in einer geschlossenen (oder
Rückkopplungs)-Schleifenreihe
verbunden) speichert demnach die Daten, die von Schaltung 110-1 an
jene Speicherzelle angelegt werden.
-
Alternativ
kann eine Speicherzelle 200 Daten von der Schaltung 110-2 mit
Hilfe der Reihenauswahl der Schaltung 130-2 speichern.
In diesem Fall werden die Daten in wahrer und komplementärer Form an
Drähte 112-2D angelegt.
An die Drähte 112-2S und 132-2 werden
Gate-Einschaltsignale
angelegt. Diese Gate-Einschaltsignale schalten alle der Transistoren 210-2, 212-2, 220-2 und 222-2 ein.
Mindestens ein Paar von Transistoren 210-1/212-1 oder 220-1/222-1 ist
gleichzeitig durch die Signale der Schaltungen 110-1 und 130-1 abgeschaltet.
Das Einschalten aller Transistoren 210-2, 212-2, 220-2 und 222-2 verbindet
den Inverter 230 zwischen den Drähten 112-2D, wodurch
ein Inverterpaar 230 und 240 die Datenausgabe
von Schaltung 110-2 empfangen und speichern kann.
-
Die
in der Speicherzelle 200 gespeicherten Daten können von
einer oder beiden der Schaltungen 150-1 und 150-2 durch
Verwendung der Schaltungen 140-1 und/oder 140-2 ausgelesen
werden. Damit die Schaltung 150-1 die Daten auslesen kann,
legt die Schaltung 140-1 ein Gate-Einschaltsignal an den Draht 142-1 an.
Dies schaltet den Transistor 260-1 in 3 an.
Wenn das Ausgabesignal des Inverters 230 auch ein Gate-Einschaltsignal
ist (Annahme, daß es
eine logische 1 ist), wird den Transistor 250-1 ebenfalls
angeschaltet. Wenn beide Transistoren 250-1 und 260-1 angeschaltet
sind, wird ein Kurzschluss zwischen den Drähten 148-1 erzeugt
(die normalerweise auf jeweils unterschiedliche Signalpegel oder
Potentiale gesetzt oder vorgespannt sind). Dieser Kurzschlusszustand
wird durch die Schaltung 150-1 als Angabe detektiert, daß die Speicherzelle 200 eine
logische 1 ausgibt. Wenn das Ausgabesignal des Inverters 230 die
entgegengesetzte Polarität hat
(Annahme, daß es
eine logische 0 ist), wird der Transistor 250-1 nicht angeschaltet,
die Drähte 148-1 werden
nicht miteinander kurzgeschlossen, und die Schaltung 150-1 detektiert
dies als Angabe, daß die Speicherzelle 200 eine
logische 0 ausgibt.
-
Damit
die Schaltung 150-2 die Speicherzelle 200 auslesen
kann, legt die Schaltung 140-2 ein Gate-Einschaltsignal
an den Draht 142-2 an. Dies schaltet den Transistor 260-2 an.
Wenn das Ausgabesignal des Invertes 230 auch ein Gate-Einschaltsignal
ist, wird der Transistor 250-2 ebenfalls angeschaltet.
Dies schließt
einen Kurzschluss zwischen den Drähten 148-2 (die normalerweise
auf jeweils unterschiedliche Signalpegel oder Potentiale gesetzt oder
vorgespannt sind). Dieser Kurzschlusszustand wird durch die Schaltung 150-2 als
Angabe detektiert, daß Speicherzelle 200 Logisch 1 ausgibt.
Wenn andererseits der Inverter 230 eine logische 0 ausgibt, wird
der Transistor 250-2 nicht angeschaltet, die Drähte 148-2 werden
nicht kurzgeschlossen, und die Schaltung 150-2 detektiert
dies als Angabe, daß die Speicherzelle 200 eine
logische 0 ausgibt.
-
Es
sei darauf hingewiesen, daß,
obwohl eine spezielle Speicherzelle 200 zu irgendeiner
gegebenen Zeit nur von entweder der Schaltungen 110-1/130-1 oder
der Schaltung 110-2/130-2 beschrieben werden kann,
jede Speicherzelle 200 gleichzeitig von beiden Schaltungen 140-1/150-1 und Schaltungen 140-2/150-2 gelesen
werden kann, falls dies gewünscht
ist.
-
Weil
alle Spalten und alle Reihen der Speicherzellenmatrix 100 sowohl
den Schaltungen 110-1/130-1/140-1/150-1 als
auch den Schaltungen 110-2/130-2/140-2/150-2 zur
Verfügung
stehen, kann die Ausnutzung der Kapazität der Matrix 100 auf
viele verschiedene Weisen zwischen diesen beiden Schaltungsgruppen
zugewiesen werden. Die Zuweisung wird durch die Programmierung der
FCEs 120 und 160 und durch die Weise gesteuert,
nach der die Matrix 100 mittels Schaltungen 110, 130, 140 und 160 adressiert
wird.
-
Zusätzlich zu
einer flexiblerer Zuweisung der Kapazität der Speicherzellenmatrix 100 ermöglichen die
hier gezeigten und beschriebenen Schaltungen die Verwendung des
Speichers nach beliebigen von mehreren unterschiedlichen Weisen,
wie z.B. den Folgenden:
- 1. Vier-Port-Speicher
mit zwei Schreib-Ports und zwei Lese-Ports;
- 2. Drei-Port-Speicher mit zwei Schreib-Ports und einem Lese-Port
oder einem Schreib-Port und zwei Lese-Ports;
- 3. Echter Dual-Port-Speicher mit zwei Ports, die sowohl lesen
als auch schreiben können;
- 4. Zwei unabhängige
Original-Dual-Port-Speicher mit einem Schreib-Port und einem Lese-Port;
- 5. Zwei unabhängige
Ein-Port-Speichern mit einem Port, der sowohl lesen als auch schreiben kann;
und
- 6. Zwei unabhängige
ROMs.
-
Die
hier gezeigte und beschriebene Speicherschaltung kann man sich somit
als bis zu vier Ports umfassend vorstellen, d. h. zwei Schreib-Ports (umfassend
Schaltungen 110-1/130-1 und Schaltungen 110-2/130-2)
und zwei Lese-Ports (umfassend Schaltungen 140-1/150-1 und
Schaltungen 140-2/150-2). Der in der unmittelbar
vorangehenden Liste genannte Vier-Port-Betrieb ist der einzige aufgeführte Modus,
der alle vier dieser Ports unabhängig
verwendet. Die anderen oben aufgeführten Modi werden implementiert,
indem verschiedene der Ports miteinander verknüpft werden. 4 zeigt
die Speicherzellmatrix 100 mit Lese- und Schreib-Schaltung 110/130/140/150,
die auf die vier oben genannten "Ports" abstrahiert werden.
-
Das
Aspektverhältnis
für jeden
der oben genannten Ports kann unabhängig konfiguriert werden. Wenn
wir beispielsweise annehmen, daß die
Gesamtkapazität
der Speicherzellmatrix 4K-Bit ist, kann jeder Port unabhängig als
4K×1,
2K×2,
1K×4,
512×8, oder
256×16
konfiguriert werden, wenn er als Einzelblock betrieben wird. Wenn
die Matrix 100 alternativ als zwei gänzlich oder teilweise unabhängige Speicherblöcke verwendet
wird, kann jeder Port unabhängig
auf verschiedene Untergruppen der obigen Möglichkeiten konfiguriert werden,
wie 2K×1,
1K×2, 512×4, 256×8 oder
128×16.
Die Grenze zwischen beliebigen dieser zwei unabhängig verwendbaren Abschnitten
der Matrix 100 ist effektiv beweglich, so daß ein Abschnitt
größer als
der andere sein kann. Die Matrix 100 kann beispielsweise
zwei unabhängige
256×8-Abschnitte
oder einen 448×8-
und einen 32×16-Abschnitt
unterbringen. Im letzteren Fall werden die Reihen 1–56 zur
Implementierung von 448×8 verwendet,
und die Reihen 57–64
werden zur Implementierung von 32×16 verwendet. Die beiden Abschnitte
können
zudem in unterschiedlichen Modi wie beschrieben operieren. Der 448×8-Abschnitt
kann beispielsweise ein Ein-Port-Speicher sein, während der
32×16-Abschnitt
ein First-In/First-Out-("FIFO")-Speicher sein kann. 5 stellt
dieses letzte Beispiel dar.
-
Es
ist mit der oben beschriebenen beweglichen Grenze zwischen zwei
verwendbaren Abschnitten der Speicherzellmatrix 100 leicht
möglich, über eine
Ausgabebusbreite zu verfügen,
die kein ganzzahliges Vielfaches von zwei ist. Beispielsweise kann in
einer 4K Matrix 100 ein 455×9 Speicher implementiert werden.
Dies kann wie folgt durchgeführt
werden: Die Reihen 1–56
werden von einem ersten Port verwendet, um 448×8 zu implementieren. Die Reihen 58–64 werden
von dem zweiten Port verwendet, um 448×1 zu implementieren. Dadurch
bleibt Reihe 57 übrig,
die von den beiden Ports gemeinsam genutzt werden kann, um die letzten
7×8 für den ersten
Port und 1×8
für den
zweiten Port mit einem Reserve-Bit zu implementieren. Ohne die oben
beschriebene Vier-Port-Fähigkeit
kann in einer 4K Dual-Port-Matrix nur ein 256×9-Speicher implementiert werden.
-
Das
in dem unmittelbar vorangehenden Absatz erörterte Beispiel ist eine Veranschaulichung des
Punkts, daß die
beiden Schreib-Ports und/oder die beiden Lese-Ports verknüpft oder
zusammen (d. h. parallel) betrieben werden können, um effektiv Schreib-
und/oder Lese-Ports mit unterschiedlichen Breiten zu liefern, als
normalerweise mit der Verwendung von nur einem oder dem anderen
der beiden Schreib- und Lese-Ports verbunden sind (oder in einigen
Fällen
sogar möglich
sind). Um diesen Punkt weiter zu veranschaulichen, ist es, wenn
die maximale Breite jedes separaten Schreib- oder Lese-Ports 16
Bit ist (z. B. weil jeder mit einem Element 110/150 verbundene
Bus 80/90 ein Maximum von 16 parallelen Datendrähten hat,
und weil jedes Element 110/150 eine maximale "×16"-Option hat), dennoch möglich, paralleles
Schreiben und/oder Lesen von längeren
Worten als 16 Bit durchzuführen
(z. B. 20 Bit, 24 Bit oder bis zu 32 Bit). Um beispielsweise 32 Bit
parallel zu schreiben, werden beide Elemente 110 (mit den
zugehörigen
FCEs 120) auf den "×16"-Modus programmiert.
Die Hälfte
der 32 Bit, die parallel geschrieben werden sollen, werden durch
Bus 80-1 an Element 110-1 angelegt, während die
andere Hälfte
dieser 1432 Bits über
Bus 80-2 an Element 110-2 angelegt wird. Die an
Elemente 110-1/130-1 angelegten Adress-Signale
unterscheiden sich natürlich
in ausreichendem Maße
von den an Elemente 110-2/130-2 angelegten Adress-Signalen,
so daß die 32
Bits alle in unterschiedliche Speicherzellen in Matrix 100 geschrieben
werden. Um das 32-Bit-Beispiel fortzuführen, werden zum parallelen
Lesen von 32 Bit beide Elemente 150 (unter Verwendung von
FCEs 160) auf den "×16"-Modus programmiert.
Unter Verwendung von ausreichend verschiedenen Adress-Signalen, die auf
der einen Seite an Elemente 140-1/150-1 und auf
der anderen Seite an Elemente 140-2/150-2 angelegt
werden, werden 16 Bit über Element 150-1 und
Bus 90-1 aus Matrix 100 ausgelesen, und (parallel)
werden weitere 16 Bit über
Element 150-2 und Bus 90-2 aus Matrix 100 ausgelesen. Indem
in der durch dieses Beispiel veranschaulichten Weise effektiv zwei
Schreib-Ports und/oder zwei Lese-Ports kombiniert werden, können breitere Schreib- und/oder Lese-Ports
(d. h. Ports mit höherer Kapazität) bereitgestellt
werden.
-
Um
die konfliktfreie Verwendung von zwei Speicherabschnitten zu erleichtern,
können
alle Eingaben 80 an einem Speicherbereich 40 (oder
mindestens alle Adress-Signaleingaben) mit programmierbarer Inversion
versehen werden, z. B. unter Verwendung der programmierbaren Inversions-Schaltung 300 wie
derjenigen, die in 6 gezeigt ist. In 6 wird
das Signal auf einem eingehenden Draht 80 (an der linken
Seite) direkt auf einen Eingabeanschluss von PLC 320 (z.
B. einen Multiplexer) gelegt. Das eingehende Signal wird über den
Inverter 310 auch an den anderen Eingabeanschluss von PLC 320 angelegt.
Der PLC ist von FCE 330 programmierbar, um eines seiner
beiden Eingabesignale über
den ausgehenden Draht 80 (an seiner rechten Seite) auszugeben.
Demnach kann das Signal des ausgehenden Drahts 80 entweder
die wahre oder die komplementäre
Version des eingehenden Signals an Draht 80 sein. Mit der
Bereitstellung dieser programmierbaren Inversion ist keine externe
Adressverschiebung erforderlich, um den Adressraumkonflikt zwischen
zwei Ports zu lösen.
Beide Ports können beispielsweise
extern von dem niedrigstwertigen Bit ("LSB")
aufwärts
zählen,
der zweite Port-Adressbus wird jedoch invertiert, so daß der zweite
Port von der Adresse des höchstwertigen
Bits abwärts
zählt.
Solange der Gesamtspeicherraum weniger als oder gleich 4 Kbit ist,
gibt es zwischen den beiden Speichern keinen Konflikt.
-
Es
sei in Bezug auf den ROM-Betrieb darauf hingewiesen, daß die gesamte
Vorrichtung 10 (einschließlich Matrix 100)
zusätzlich
zu den Schaltungen 110 und 130 für die RAM-Programmierung der Speicherzellmatrix 100 während der
normalen Logikoperation von Vorrichtung 10 während der
Anfangskonfiguration der Vorrichtung in der konventionellen Weise
programmierbar ist, die in keiner der Figuren gezeigt ist. Bei der
typischen Verwendung von Matrix 100 als ROM werden die
ROM-Daten während
jener Anfangskonfiguration von Vorrichtung 10 in Matrix 100 gespeichert.
Während
der normalen Logikoperation von Vorrichtung 10 können die
ROM-Daten danach aus der Matrix 100 unter Verwendung der Schaltungen 140 und 150 ausgelesen
werden, wie zuvor in dieser Beschreibung für RAM-Daten beschrieben wurde.
Außer
daß die
Daten ROM-Daten sind und daher nicht durch Verwendung der Schreib-Ports verändert werden,
kann der ROM-Betrieb in anderen Worten dieselbe Flexibilität haben, wie
oben für
den RAM-Betrieb (speziell das Lesen des RAMs) beschrieben ist.
-
Der
Speicherbereich
40 kann auch so ausgestattet sein, daß andere
Betriebsmodi als die oben beschriebenen RAM- und ROM-Modi unterstützt werden.
Der Speicherbereich
40 kann beispielsweise auch so ausgestattet
sein, daß eine
p-Term-Logik (wie beispielsweise in
US-A-6,020,759 von
Heile gezeigt ist), und/oder ein Assoziativspeicher ("CAM") bereitgestellt
wird (wie beispielsweise in US-Patentanmeldung Nr. 09/292,448, eingereicht
am 15. April 1999 von Heile, und US-Patentanmeldung Nr. 09/389,995,
eingereicht am 2. September 1999 von Heile, gezeigt ist). Damit
die Schaltung nicht unnötig kompliziert
wird, verwenden andere Modi, wie p-Term und CAM, vorzugsweise nicht die
echte Vier-Port-Fähigkeit
von Speicherbereich
40. Stattdessen wird in diesen anderen
Modi ein Speicherbereich
40 als zwei unabhängige 2
Kbit-Speicherblöcke ohne
effektiv bewegliche Grenze zwischen diesen beiden Blöcken betrieben.
-
7 stellt
eine erfindungsgemäße programmierbare
Logikvorrichtung 10 in einem Datenverarbeitungssystem 1002 dar.
Das Datenverarbeitungssystem 1002 kann eine oder mehrere
der folgenden Komponenten umfassen: einen Prozessor 1004;
einen Speicher 1006; eine I/O-Schaltung 1008 und Peripheriegeräte 1010.
Diese Komponenten werden durch einen Systembus 1020 gekoppelt
und befinden sich als Bestückung
auf einer Leiterplatte 1030, die in einem Endanwendersystem 1040 enthalten
ist.
-
Das
System 1002 kann in vielen verschiedenen Anwendungen verwendet
werden, wie als Computernetzwerk, Datennetzwerk, Instrumentierung,
Videoverarbeitung, Digitalsignalverarbeitung oder jede andere Anwendung,
in der der Vorteil der Verwendung programmierbarer oder umprogrammierbarer Logik
erwünscht
ist. Die programmierbare Logikvorrichtung 10 kann zur Durchführung einer
Vielfalt von unterschiedlichen Logikfunktionen verwendet werden.
Die programmierbare Logikvorrichtung 10 kann beispielsweise
als Prozessor oder Controller konfiguriert werden, der mit einem
Prozessor 1004 zusammenarbeitet. Die programmierbare Logikvorrichtung 10 kann
auch in einem Zuteiler verwendet werden, um den Zugriff auf eine
gemeinsam genutzte Ressource in dem System 1002 zuzuteilen.
In einem anderen Beispiel kann die programmierbare Logikvorrichtung 10 als
Schnittstelle zwischen Prozessor 1004 und einer der anderen
Komponenten in dem System 1002 konfiguriert werden. Es
sei darauf hingewiesen, daß das
System 1002 lediglich beispielhaft ist, und daß der wahre
Bereich und Geist der Erfindung durch die folgenden Ansprüche wiedergegeben
werden soll.
-
Es
können
verschiedene Technologien zur Implementierung der programmierbaren
Logikvorrichtungen
10 mit den Merkmalen dieser Erfindung sowie
verschiedene Komponenten dieser Vorrichtungen verwendet werden (z.
B. die oben beschriebenen PLCs und die FCEs, die die PLCs steuern).
Jede PLC kann beispielsweise ein relativ einfacher programmierbarer
Verbinder sein, wie ein Schalter oder mehrere Schalter, um irgendeine
von mehreren Eingaben mit einer Ausgabe zu verbinden. Alternativ kann
jede PLC ein etwas komplexeres Element sein, das Logik durchführen kann
(z. B. durch logisches Kombinieren von mehreren seiner Eingaben)
sowie eine Verbindung herstellen kann. Im letzteren Fall kann jede
PLC beispielsweise Produkttermlogik sein, die Funktionen wie AND,
NAND, OR oder NOR implementiert. Beispiele für Komponenten, die zur Implementierung
von PLCs geeignet sind, sind EPROMs, EEPROMs, Schalttransistoren,
Transmissionsgitter, Anti-Fuse, Laser-Fuse, Metallbedarfsleitungen,
usw. Wie gesagt können
die verschiedenen Komponenten von PLCs durch verschiedene programmierbare Funktionssteuerungselemente
("FCEs") gesteuert werden.
(Bei bestimmten PLC-Implementierungen (z.
B. Fuse-Komponenten und Metallbedarfsleitungen) sind keine separaten
FCE-Vorrichtungen erforderlich.) FCEs können auch auf beliebige von
mehreren unterschiedlichen Weisen implementiert werden. FCEs können beispielsweise
SRAMs, DRAMs, First-In-First-Out-("FIFO")-Speicher, EPROMs,
EEPROMs, Funktionssteuerungsregister (z. B. wie in
US-A-3,473,160 von Wahlstrom),
ferroelektrische Speicher, Fuse-Komponenten, Antifuse-Komponenten oder
dergleichen sein. Es ist aus den verschiedenen zuvor genannten Beispielen
ersichtlich, daß diese
Erfindung sowohl auf nur einmalig programmierbare als auch auf umprogrammierbare
Vorrichtungen anwendbar ist.
-
Es
sei darauf hingewiesen, daß das
Gesagte die Prinzipien dieser Erfindung lediglich veranschaulicht,
und daß Fachleute
verschiedene Modifikationen vornehmen können. Die Anzahl der verschiedenen
Typen von Ressourcen auf einer Vorrichtung 10 kann sich
beispielsweise von den Anzahlen unterscheiden, die in den abgebildeten
und beschriebenen beispielhaften Ausführungsformen vorliegen. Dies
gilt für
solche Parameter wie die Anzahlen der Reihen und Spalten der verschiedenen
Schaltungstypen, die Anzahlen der verschiedenen Typen der Verbindungsleiter,
die Anzahlen und Größen der PLCs,
die zur Herstellung von Verbindungen zwischen verschiedenen Typen
von Verbindungsleitern bereitgestellt werden, usw. Es sei auch darauf
hingewiesen, daß verschiedene
Richtungs- und Orientierungsbegriffe, wie "vertikal" und "horizontal", "links" und "rechts", "oben" und "unten", "Reihe" und "Spalte" und dergleichen
hier nur der Bequemlichkeit halber verwendet werden, und daß durch
die Verwendung dieser Worte keine festgelegten oder absoluten Richtungs-
oder Orientierungseinschränkungen
beabsichtigt sind. Die erfindungsgemäßen Vorrichtungen können beispielsweise
jede gewünschte
Orientierung haben. Bei Umorientierung müssen möglicherweise zu ihrer Beschreibung
andere Richtungs- oder Orientierungsbegriffe verwendet werden, diese ändern ihre
grundlegende Natur jedoch nicht, wie innerhalb des Schutzumfangs
dieser Erfindung. Wenn keine zwei Schreib-Ports erforderlich sind,
kann die Schaltung für
einen der beiden Schreib-Ports gewünschtenfalls wegfallen. Wenn keine
zwei Lese-Ports erforderlich sind, kann die Schaltung für einen
der beiden Lese-Ports gewünschtenfalls
alternativ wegfallen.