PatentDe  


Dokumentenidentifikation DE68929518T2 09.06.2005
EP-Veröffentlichungsnummer 0000651343
Titel Verfahren zur Verwendung einer elektronisch wiederkonfigurierbaren Gatterfeld-Logik und dadurch hergestelltes Gerät
Anmelder Quickturn Design Systems, Inc., Mountain View, Calif., US
Erfinder Butts, Michael R., Portland, OR 97212, US;
Batcheller, Jon A., Newberg, OR 97132, US
Vertreter Patent- und Rechtsanwälte Bardehle, Pagenberg, Dost, Altenburg, Geissler, 81679 München
DE-Aktenzeichen 68929518
Vertragsstaaten AT, BE, CH, DE, FR, GB, IT, LI, LU, NL, SE
Sprache des Dokument EN
EP-Anmeldetag 04.10.1989
EP-Aktenzeichen 941152720
EP-Offenlegungsdatum 03.05.1995
EP date of grant 28.04.2004
Veröffentlichungstag im Patentblatt 09.06.2005
IPC-Hauptklasse G06F 17/60

Beschreibung[de]
Gebiet der Erfindung

Die vorliegende Erfindung betrifft die Verwendung von elektronisch rekonfigurierbaren Gatterfeld-Logikelementen (ERCGAs) und insbesondere ein Verfahren, das das Verbinden einer Vielzahl derartiger Logikelemente und das Konvertieren von elektronischen Darstellungen großer digitaler Netzwerke in eine zeitweilig tatsächlich arbeitende Hardware unter Verwendung der miteinander verbundenen Logikelemente für den Zweck der Simulation, des Prototypenbaus, der Ausführung und/oder der Berechnung umfasst.

Hintergrund und Zusammenfassung der Erfindung

Zum Zwecke der Vereinfachung der Erklärung wird in der vorliegenden Anmeldung die Erfindung als RealizerTM-System bezeichnet, da das Lexikon einen bestimmten beschreibenden Namen für ein System, wie es im Folgenden beschrieben wird, nicht enthält.

Das Realizer-System umfasst eine Hardware und eine Software, die die Darstellungen großer digitaler logischer Netzwerke in zeitweise tatsächlich arbeitende Hardware umwandelt zum Zwecke der Simulation, der Erstellung von Prototypen, der Ausführung und der Berechnung. (Ein digitales logisches Netzwerk wird als „groß" bezeichnet, wenn es zu viele logische Funktionen enthält, um in einigen wenigen der größten verfügbaren konfigurierbaren logischen Bauelementen enthalten zu sein.)

Die nachfolgenden Diskussionen werden durch einen kurzen Überblick der relevanten Terminologie deutlicher, wie sie typischerweise (aber nicht ausschließlich) verwendet wird.

Etwas zu „realisieren" heißt, es real oder tatsächlich zu erzeugen. Das Realisieren des ganzen oder eines Teiles eines digitalen logischen Netzwerkes oder Entwurfs besteht darin, eine tatsächliche Betriebsform herbeizuführen, ohne es dauerhaft aufzubauen.

Ein „Eingabeentwurf" ist die Darstellung des digitalen logischen Netzwerks, das realisiert werden soll. Er beinhaltet sowohl Grundelemente, die Kombinationslogik und Speicher darstellen, als auch Instrumente oder vom Anwender zugelieferte tatsächliche Bauelemente und Netze, die Verbindungen unter Eingabe- und Ausgabepins der Grundelemente darstellen.

Das „Konfigurieren" eines logischen Chips oder eines Verbindungschips ist das Herbeiführen, dass seine internen logischen Funktionen und/oder Verbindungen in einer besonderen Weise angeordnet sind. Das Konfigurieren eines Realizer-Systems für einen Eingabeentwurf ist das Herbeiführen der Anordnung seiner internen logischen Funktionen und Verbindungen entsprechend dem Eingabeentwurf.

Das „Konvertieren" eines Entwurfs ist das Umwandeln seiner Darstellung in eine Datei von Konfigurationsdaten, die bei einer direkten Verwendung zur Konfiguration der Realizer-Hardware die Verwirklichung des Entwurfs herbeiführen.

Das „Betreiben" eines Entwurfes ist das Herbeiführen des tatsächlichen Arbeitens der Realizer-Hardware, die gemäß den Darstellungen des Eingabeentwurfs konfiguriert ist.

Eine „Verbindung" ist ein rekonfigurierbares Mittel zum Weiterleiten von logischen Signalen zwischen einer großen Anzahl von I/O-Pins (Eingabe-/Ausgabepins) eines Chips so als ob die Pins über elektrische Leitungen verbunden wären.

Ein „Pfad" ist eine der eingebauten Verbindungsleitungen zwischen einem Logikchip und einem Kreuzschienen-Chip in einer partiellen Kreuzschienenverbindung oder zwischen Kreuzschienen-Chips in einer Hierarchie von partiellen Kreuzschienen.

Eine „Pfadnummer" gibt einen speziellen Pfad aus der Vielzahl von Pfaden an, die ein Paar von Chips miteinander verbinden können.

Ein „ERCGA" ist ein elektronisch rekonfigurierbares Gatterfeld, d. h. eine Sammlung von Kombinationslogik und Eingabe-/Ausgabeverbindungen (und optional Speicher), dessen Funktionen und Verbindungen viele Male ausschließlich durch die Anwendung von elektronischen Signalen konfiguriert und rekonfiguriert werden können.

Ein „Logikchip" ist ein ERCGA, der dazu verwendet wird, um die Kombinationslogik, den Speicher und die Verbindungen eines Eingabeentwurfs in dem Realizer-System zu verwirklichen.

Ein „L-Chip" ist ein Logikchip oder ein Speichermodul oder ein vom Anwender geliefertes Modul, das anstelle eines Logikchips installiert wird.

Ein „Verbindungschip" ist ein elektronisch rekonfigurierbares Bauelement, das beliebige Verbindungen zwischen seinen I/O-Pins implementieren kann.

Ein „Routing-Chip" ist ein Verbindungschip, der in einer direkten oder einer Kanalrouten-Verbindung verwendet wird.

Ein „Kreuzschienen-Chip" ist ein Verbindungschip, der in einer Kreuzschiene oder in einer partiellen Kreuzschienenverbindung verwendet wird.

Ein „X-Chip" ist ein Kreuzschienen-Chip in der partiellen Kreuzschiene, der L-Chips miteinander verbindet. Ein „Y-Chip" ist ein Kreuzschienen-Chip auf der zweiten Ebene einer hierarchischen partiellen Kreuzschienenverbindung, der X-Chips miteinander verbindet. Ein „Z-Chip" ist ein Kreuzschienen-Chip auf der dritten Ebene der hierarchischen Kreuzschienenverbindung, der Y-Chips miteinander verbindet.

Eine „Schaltkarte" ist ein gedruckter Schaltungsträger, der Logikchips und Verbindungschips trägt. Eine „Box" ist eine physikalische Umhüllung wie z. B. ein Baugruppenrahmen, die eine oder mehrere Schaltkarten enthält. Ein „Rack" ist eine physikalische Umhüllung, die eine oder mehrere Boxen enthält.

Eine „System-Ebenenverbindung" ist eine Verbindung, die Bauelemente miteinander verbindet, die größer sind als einzelne Chips, wie z. B. Schaltkarten, Boxen, Racks, usw.

Ein „logisches Zellenfeld" (logic cell array, „LCA") ist ein besonderes Beispiel eines ERCGA, das von Xilinx, Inc. und anderen hergestellt wird und in der bevorzugten Ausführungsform verwendet wird.

Ein „konfigurierbarer Logikblock" (configurable logic block, „CLB") ist ein kleiner Block von konfigurierbarer Logik und Flip-Flops, die die Kombinationslogik und den Speicher in einem LCA darstellen.

Ein „Entwurfsspeicher" ist ein Speicherbauelement, das eine Speicherfunktion verwirklicht, die in dem Eingabeentwurf spezifiziert ist.

Ein „Vektorspeicher" ist ein Speicherbauelement, das dazu verwendet wird, eine große Menge von Stimulus-Signalen zu erzeugen und/oder eine große Menge von Antwortsignalen eines verwirklichten Entwurfs in dem Realizer-System aufzunehmen.

Ein „Stimulator" ist ein Bauelement im Realizer-System, das dazu verwendet wird, um Stimulus-Signale zu einer einzelnen Eingabe eines verwirklichten Entwurfs zu erzeugen. Ein „Abtaster" ist ein Bauelement im Realizer-System, das dazu verwendet wird, um Antwortsignale von einem individuellen Ausgang eines verwirklichten Entwurfs aufzunehmen.

Ein „Host-Computer" ist ein konventionelles Computersystem, das mit der Host-Interface-Hardware des Realizer-Systems verbunden ist, und das die Konfiguration und den Betrieb der Realizer-Hardware steuert.

Ein „EDA-System" ist ein elektronisches Entwurfsautomatisierungssystem, d. h. ein System von rechnergestützten Werkzeugen, die zur Erzeugung, zum Editieren und zum Analysieren von elektronischen Entwürfen verwendet werden. Das Host-EDA-System erzeugt bei den meisten Anwendungen des Realizer-Systems die Datei des Eingabeentwurfs.

Wenn ein rekonfigurierbares Gatterfeld mit einer ausreichenden Kapazität für einen einzelnen großen Entwurf verfügbar wäre, wäre ein Großteil der Realizer-Technologie nicht notwendig. Dies wird jedoch aus zwei Gründen niemals der Fall sein.

Erstens können ERCGAs nicht eine so große logische Kapazität haben wie eine nicht-rekonfigurierbare integrierte Schaltung derselben physikalischen Größe, die mit derselben Herstellungstechnologie erzeugt worden ist. Die Möglichkeiten zur Rekonfigurierbarkeit erfordern einen erheblichen Raum auf dem Chip. Ein ERCGA muss Schalttransistoren haben, um Signale und Speichertransistoren zu steuern, diese Schalter zu kontrollieren, während ein nicht-rekonfigurierbarer Chip einfach eine Leiterbahn hat und diese Transistoren als Logik verwenden kann. Die Regelmäßigkeit, die für einen rekonfigurierbaren Chip benötigt wird, bedeutet ferner, dass einige der Ressourcen bei tatsächlichen Entwürfen unverwendet bleiben, da die Anordnung und das Routen von regelmäßigen logischen Strukturen nie dazu in der Lage sind, 100% der verfügbaren Gatter zu verwenden. Die Kombination dieser Faktoren führt dazu, dass ERCGAs etwa ein Zehntel der logischen Kapazität von nicht-konfigurierbaren Chips haben. Bei der gegenwärtig tatsächlichen Praxis ist die höchste Gatterkapazität, die für ein ERCGA angegeben wird, 9000 Gatter (Xilinx XC3090). Gegenwärtige, halb-maßangefertigte, integrierte Schaltkreise, die mit derselben Technologie hergestellt werden, bieten eine logische Kapazität von mehr als 100.000 Gattern (Motorola).

Zweitens ist es gut bekannt, dass tatsächliche digitale Systeme aus vielen integrierten Schaltkreisen gebaut werden, typischerweise 10 bis 100 oder mehr, die häufig auf vielen gedruckten Schaltkarten angeordnet sind. Wenn ein ERCGA so viel logische Kapazität wie der größte integrierte Schaltkreis hätte, würde es immer noch viele solcher Chips benötigen, um die meisten digitalen Systeme zu verwirklichen. Da er diese Kapazität jedoch nicht hat, sind noch mehr erforderlich.

Damit ein Realizer-System auch nur eine logische Kapazität eines einzigen großen Chip hat, sollte es daher viele ERCGAs enthalten, in der Größenordnung von zehn. Um eine Kapazität eines Systems aus solchen Chips zu haben, sind ERCGAs in der Größenordnung von hundert erforderlich. Dabei ist zu beachten, dass dies unabhängig von den speziellen Herstellungsmöglichkeiten gilt. Wenn ein Herstellungsprozeß die Kapazität von ERCGAs verdoppeln kann durch das Verdoppeln der Anzahl von Transistoren per Chip, werden sich die Kapazitäten von nicht-konfigurierbaren Chips und damit die gesamte Entwurfsgröße ebenfalls verdoppeln.

Aus diesen Gründen ist es für den Aufbau eines verwendbaren Realizer-Systems notwendig, in der Lage zu sein, hunderte von ERCGAs auf eine elektronisch rekonfigurierbare Weise miteinander zu verbinden und Entwürfe in Konfigurationen für Hunderte von ERCGAs zu konvertieren. Die Erfindung betrifft nicht die Technologie irgendeines ERCGAs selbst, sondern lediglich die Verfahren zum Aufbau eines Realizer-Systems aus vielen ERCGAs.

Die ERCGA-Technologie zeigt nicht, wie ein Realizer-System aufzubauen ist, da die Probleme unterschiedlich sind. Die ERCGA-Technologie zum rekonfigurierbaren Verbinden von logischen Elementen, die alle Teil eines IC-Chips sind, ist nicht auf die Verbindung von vielen ERCGA-Chips anwendbar. ERCGA-Verbindungen werden einfach durch Schalttransistoren hergestellt, die Signale in eine Richtung leiten. Da innerhalb eines Chips keine Grenzen vorhanden sind, gibt es eine große Anzahl von verfügbaren Pfaden für die Verbindung. Da der Chip klein ist, sind die Signalverzögerungen klein. Das Verbinden von vielen ERCGAs ist ein anderes Problem, da IC-Package-Pins und gedruckte Schaltkarten involviert sind. Die begrenzte Anzahl der zur Verfügung stehenden Pins bedeutet eine begrenzte Anzahl von Pfaden für die Verbindungen. Das Aussenden von Signalen auf die und von den Chips muss über aktive (d. h. verstärkende) Pin-Puffer erfolgen, die Signale nur in eine Richtung senden können. Diese Puffer und die Leiterbahnen auf den Schaltkarten fügen Verzögerungen hinzu, die eine Größenordnung größer sind als die Verzögerung innerhalb eines Chips. Die Verbindungstechnologie des Realizer-Systems löst diese Probleme auf eine völlig andere Weise als ein ERCGA.

Schließlich ist die Notwendigkeit, einen Entwurf in Konfigurationen von vielen Chips zu konvertieren, durch die ERCGA-Technologie nicht berührt. Die Verbindung des Realizer-Systems ist vollständig unterschiedlich von der Verbindung innerhalb eines ERCGAs und es ist eine vollständig verschiedene Methode zum Festlegen und Konfigurieren der Verbindung erforderlich.

ERCGAs werden aus der schnellsten und dichtesten Siliziumtechnologie hergestellt, die zu einem bestimmten Zeitpunkt vorhanden ist (1989 werden Xilinx XC3000 LCAs in 1 Micron SRAM-Technologie hergestellt). Dies ist dieselbe Technologie wie die schnellsten und dichtesten Systeme, die realisiert werden sollen. Da ERCGAs allgemein verwendbar sind und rekonfigurierbare Verbindungen haben, sind sie immer um einen gewissen Faktor weniger dicht als Gatterfelder und maßangefertigte Chips derselben Generation. Realizer-Systeme wiederholen die Unterstützung von Allgemeinheit und Rekonfigurierbarkeit oberhalb der ERCGA-Ebene.

Ein Realizer-System ist daher immer um einen bestimmten Faktor, ungefähr eine Größenordnung, weniger dicht als die dichtesten Systeme derselben Generation. Realizer-Systeme auf der Schaltkartenebene realisieren Gatterfelder, Realizer-Systeme auf der Boxebene realisieren Schaltkarten und große maßangefertigte Chips und Realizer-Systeme auf der Rackebene realisieren Boxen.

Die Architekturen der Entwürfe werden durch die Art und Weise der Packung erheblich beeinflusst. Die I/O-Pinbreite: Bei dem VLSI-Chiplevel sind 100 I/O-Pins leicht herzustellen, 200 Pins sind schwieriger herzustellen, aber nicht unüblich, und 400 Pins sind fast noch nie berichtet worden. Auf der Schaltkartenebene verdoppeln sich diese Zahlen ungefähr. Logische Dichten: Schaltkarten nehmen häufig 5 VLSI-Chips auf, 10 sind möglich, und 20 sind unüblich, einfach aufgrund der Tatsache, dass praktikable Schaltkarten auf maximal etwa 200 Quadratzoll begrenzt sind. Boxen enthalten 10 bis 20 Schaltkarten, selten 40. Verbindungsdichten: Module können reichlich auf Chips und Karten verbunden sein, da mehrere Ebenen der zweidimensionalen Verdrahtung verfügbar sind, aber weniger auf der Boxebene und darüber, da die Rückseiten im Wesentlichen eindimensional sind.

Diese Packungsrestriktionen haben einen starken Einfluss auf die Systemarchitekturen, die in effektiven Realizer-Systemen beachtet werden sollten. Aufgrund der geringeren Dichte in einem Realizer-System wird ein einzelner Logikchip üblicherweise nur ein Modul in dem verwirklichten Entwurf realisieren. Ein Logikchip-Komplex auf einer einzelnen Schaltkarte wird einen VLSI-Chip realisieren oder zwei, eine Box von Realizerschaltkarten wird ein einzelne Schaltkarte in dem Entwurf realisieren und ein Rack von Boxen wird eine Box von Schaltkarten des Entwurfs realisieren.

Der logische und der Verbindungskomplex eines Realizer-Systems auf der Schaltkartenebene muss daher ebensoviel logische und Verbindungskapazität sowie I/O-Pinbreite haben, wie der VLSI-Chip des Entwurfs. Die Box des Realizer-Systems benötigt ebensoviel wie die Schaltkarte des Designs und das Rack des Realizer-Systems benötigt ebensoviel wie die Box des Entwurfs.

Das nächstkommende Stand-der-Technik-Dokument GB-A-2 180 382 bezieht sich auf integrierte Halbleiterschaltkreise (Chips) mit konfigurierbaren und rekonfigurierbaren Schaltkreisfeldern, sowie ein bestimmtes System, welches diese verwendet. Die in diesem Dokument offenbarten integrierten Halbleiterschaltkreise umfassen eine Vielzahl von Logikschaltkreisen an separaten Stellen auf demselben Siliziumchip und ein begrenztes Signalübersetzungssystem zwischen Eingängen und Ausgängen derselben Logikschaltkreise, die für direkte Verbindungspfade zwischen jedem der Logikschaltkreise und nur ein paar anderen der Logikschaltkreise sorgen, wobei diese Verbindungspfade gemäß ihrem Leitungszustand wählbar sind. Indirekte Verbindungen zu weiteren der Logikschaltkreise sind einem oder mehreren anderen der Logikschaltkreise auf dem selben Chip zugänglich. Dasselbe Dokument offenbart auch eine Mehrfach-Chip-System mit einer Vielzahl dieser rekonfigurierbaren Logikchips. Jeder rekonfigurierbare Logikchip hat normalerweise ein damit verbundenes RAM. Die rekonfigurierbaren Logikchips sind mittels Eingabe-/Ausgabevorkehrungen miteinander verbunden und es ist für Eingabedaten von einer Quelle über ein Bussystem und für Ausgabedaten an ein Verwendungsmittel über ein anderes Bussystem gesorgt. Das Dokument offenbart, dass dieses System für serielle Verarbeitung verwendet wird, wo die Chips unterschiedlich konfiguriert sind, und für parallele Verarbeitung, wo die Chips ähnlich konfiguriert sind, und für verschiedene Kombinationen serieller und paralleler Verarbeitung. Somit ist das in diesem Dokument offenbarte Mehrfach-Chip-System eine Datenverarbeitungsvorrichtung zum Ausführen eines Computerprogramms, wie z. B. eines Simulationsprogramms. Dieses Dokument lehrt weder die Implementierung eines "Eingabe-Designs", wie hierin offenbart, noch schlägt es sie vor.

In Verbindung mit dem in diesem Dokument offenbarten Mehrfach-Chip-System wird weiter erwähnt, dass einige der rekonfigurierbaren Chips, die das Mehrfach-Chip-System bilden, "zumindest teilweise einfach zur Signalübertragung zwischen Eingabe-/Ausgabevorrichtungen hiervon verwendet werden können". Diese Aussage (und das Dokument) lehrt weder eine Vielzahl von reprogrammierbaren Verbindungsgeräten, von denen jedes reprogrammierbare Verbindungsgerät Eingabe-/Ausgabeterminals und eine interne Schaltung aufweist, die reprogrammierbar konfiguriert werden kann, um Verbindungen zwischen ausgewählten Eingabe-/Ausgabeterminals (vgl. Merkmal b des Anspruchs 1) zu schaffen, noch schlägt es dies vor, denn es beschreibt nur, Signale "zwischen Eingabe-/Ausgabevorkehrungen" desselben Chips zu übertragen. Des Weiteren lehrt das Dokument weder das Vorsehen eines Satzes von feststehenden elektrischen Leitern, die die programmierbaren Eingabe-/Ausgabeterminals auf den reprogrammierbaren Logikgeräten mit den Eingabe-/Ausgabeterminals auf den reprogrammierbaren Verbindungsgeräten verbinden, indem jedes der reprogrammierbaren Verbindungsgeräte mit zumindest einem aber nicht allen programmierbaren Eingabe-/Ausgabeterminals auf jedem der reprogrammierbaren Logikgeräte verbunden ist (vgl. Merkmal c des Anspruchs 1), noch schlägt es dies vor, da es das Trennen von Logikchips und Verbindungschips weder lehrt noch vorschlägt. Des Weiteren sind die angeblichen "Durchlaufchips" nicht mit allen rekonfigurierbaren Chips verbunden, die das Mehrfach-Chip-System bilden. Zusätzlich lehrt dieses Dokument weder irgendeine Kreuzschienenverbindungsarchitektur, wie die in der vorliegenden Anmeldung offenbarte, noch schlägt es eine solche vor. Dieses Dokument bietet auch keinerlei Lehren oder Vorschläge für die Art, wie das "Eingabe-Design" zur Implementierung in den integrierten Schaltkreise zu partitionieren ist.

Aus dem Stand-der-Technik-Dokument IEEE International Solid-State Circuits Conference, 1987, USA, Seiten 276–277 und 425 ist ein dynamisch rekonfigurierbarer Verbindungschip bekannt, der in Simultanverarbeitungscomputersystemen nützlich ist. Ein rekonfigurierbares Netzwerk auf der Basis solch eines Verbindungschips ist essentiell für Systeme mit systolischen Feldern, Vektorverarbeitung oder Vektorrechner-Verarbeitung. Der beschriebene Schnittstellenchip ist für das dynamische Rekonfigurieren des Datenflusses und Sequenzieren der Verarbeitungselemente eines Berechnungssystems optimiert. Mit dem beschriebenen rekonfigurierbaren Verbindungschip ist es möglich, den Datenfluss und die Sequenzierung zu optimieren, die erforderlich sind, um jeden in einer Systemanwendung ausgeführten Algorithmus zu berechnen.

Angesichts des Vorangehenden ist es die Aufgabe der vorliegenden Erfindung, ein elektrisch rekonfigurierbares Hardware-Emulationssystem zu schaffen, einschließlich eines elektrisch rekonfigurierbaren Logikbauteils, zum Implementieren elektronischer Repräsentationen von großen digitalen Logiknetzwerken in reprogrammierbare Hardwaresysteme.

Diese Aufgabe wird durch ein elektrisch rekonfigurierbares Hardware-Emulationssystem einschließlich eines elektrisch rekonfigurierbaren Logikbauteils gemäß Anspruch 1 gelöst.

Kurze Beschreibung der Zeichnungen

1 ist ein schematisches Blockdiagramm eines Realizer-Hardware-Systems.

2 ist ein schematisches Blockdiagramm eines direkten Verbindungssystems.

3 ist ein schematisches Blockdiagramm eines Kanalrouten-Verbindungssystems.

4 ist ein schematisches Blockdiagramm eines Kreuzschienen-Verbindungssystems.

5 ist ein schematisches Blockdiagramm eines Kreuzschienen-Netzverbindungssystems.

6 ist ein schematisches Blockdiagramm eines einfachen spezifizierten Beispiels eines partiellen Kreuzschienen-Verbindungssystems.

7 ist ein schematisches Blockdiagramm eines partiellen Kreuzschienen-Verbindungssystems.

8a und 8b illustrieren einen Unterschied in der Breite des Kreuzschienen-Chips.

9 ist ein schematisches Blockdiagramm eines Tri-State-Netzes.

10 ist ein schematisches Blockdiagramm eines Produktsummenäquivalentes des Tri-State-Netzes aus 9.

11a und 11b sind schematische Blockdiagramme von „floating low" und „floating high" Produktsummen-Netzwerken.

12 ist ein schematisches Blockdiagramm von Treibern und Empfängern, die zur Minimierung von Verbindungen gesammelt werden.

13 ist ein schematisches Blockdiagramm einer Konfiguration zum logischen Summieren.

14 ist ein schematisches Blockdiagramm einer Konfiguration zum Kreuzschienensummieren.

15 ist ein schematisches Blockdiagramm einer Konfiguration zum bidirektionalen Kreuzschienensummieren.

16 ist ein schematisches Blockdiagramm einer Konfiguration eines bidirektionalen Kreuzschienen-Tri-State.

17 ist ein schematisches Blockdiagramm, das die Off-Board-Verbindungen einer partiellen Kreuzschiene zeigt.

18 ist ein schematisches Blockdiagramm einer partiellen Kreuzschienenverbindung auf Y-Ebene.

19 ist ein schematisches Blockdiagramm einer bidirektionalen Bussystem-Ebenen-Verbindung.

20 ist ein schematisches Blockdiagramm, das acht Karten auf einer gemeinsamen Busverbindung zeigt.

21 ist ein schematisches Blockdiagramm, das die Hierarchie von zwei Busebenen zeigt.

22 ist ein schematisches Blockdiagramm, das die maximale Busverbindungshierarchie zeigt.

23 ist ein schematisches Blockdiagramm einer allgemeinen Speichermodularchitektur.

24 ist ein schematisches Blockdiagramm eines Speicheradress-Logikchips.

25 ist ein schematisches Blockdiagramm eines Speicherdaten-Logikchips, der einen gemeinsamen I/O verwendet.

26 ist ein schematisches Blockdiagramm eines Speicherdaten-Logikchips, der separate I/O verwendet.

27 ist ein schematisches Blockdiagramm, das mehrere RAMs auf einem Datenbit zeigt.

28 ist ein schematisches Blockdiagramm einer bevorzugten Ausführungsform eines Speichermoduls.

29 ist ein schematisches Blockdiagramm eines Stimulus-Vektorspeichers.

30 ist eines schematisches Blockdiagramm eines Antwort-Vektorspeichers.

31 ist ein schematisches Blockdiagramm eines Vektorspeichers zum Stimulieren und zum Antworten.

32 ist ein schematisches Blockdiagramm einer bevorzugten Ausführungsform eines Vektorspeicher-Adresschips.

33 ist ein schematisches Blockdiagramm einer bevorzugten Ausführungsform eines Vektorspeicher-Datenchips.

34 ist ein schematisches Blockdiagramm eines Random-Access-Stimulators.

35 ist ein schematisches Blockdiagramm eines Rand-sensitiven Stimulators.

36 ist ein schematisches Blockdiagramm von Abtastern (bzw. Samplern).

37 ist ein schematisches Blockdiagramm von Änderung detektierenden Abtastern.

38 ist ein schematisches Blockdiagramm einer Modularchitektur eines vom Anwender gelieferten Bauelements.

39 ist ein schematisches Blockdiagramm einer bevorzugten Ausführungsform eines USDM mit installierten Bauelementen.

40 ist ein schematisches Blockdiagramm einer Konfigurationsgruppe.

41 ist ein schematisches Blockdiagramm einer Host-Interface-Architektur.

42 illustriert RBus Lese- und Schreibzyklen.

43 ist ein schematisches Blockdiagramm eines Konversionssystems für Realizer-Entwürfe.

44a und 44b illustrieren die Entwurfsdatenstruktur, die in der vorliegenden Erfindung verwendet wird.

45a, 45b und 45c illustrieren die Konversion von Grundelementen, die in der vorliegenden Erfindung verwendet wird.

46 illustriert das Verschieben eines Grundelementes in ein Cluster.

47a, 47b und 47c illustrieren eine einfache Netzverbindung.

48a, 48b und 48c illustrieren eine Tri-State-Netzverbindung.

49 ist ein schematisches Blockdiagramm eines Realizer-Logik-Simulationssystems.

50a bis c illustrieren schematisch die Konfiguration des Realizer-Systems einer Multi-State-Logik.

51a bis b illustrieren schematisch ein Beispiel einer verzögerungsabhängigen Funktionalität.

52a bis c illustrieren schematisch ein Beispiel einer Verzögerungskonfiguration.

53a bis c illustrieren schematisch eine tatsächliche Verzögerungskonfiguration.

54 ist ein schematisches Blockdiagramm von einem Realizer-Fehler-Simulationssystem.

55 ist ein schematisches Blockdiagramm eines Realizer-Logik-Simulator-Evaluationssystem.

56 ist ein schematisches Blockdiagramm eines Realizer-Systems zum Prototypenbau.

57 illustriert ein digitales Computerbeispiel eines Realizer-Systems zum Prototypenbau.

58 ist ein schematisches Blockdiagramm einer virtuellen Logik-Analysator-Konfiguration.

59 ist ein schematisches Blockdiagramm eines Realizer-Herstellungssystems.

60 ist ein schematisches Blockdiagramm eines Realizer-Berechnungssystems.

61a bis c illustrieren die allgemeine Architektur der bevorzugten Ausführungsformen inklusive der hierarchischen Verbindung von logischen Schaltkarten, Boxen und Racks.

61a bis b zeigen die physikalische Konstruktion einer Schaltkartenbox und einer Z-Level-Box.

DETAILLIERTE BESCHREIBUNG Inhalt
  • 1. Realizer-Hardware-System
  • 1.1 Logik- und Verbindungschip-Technologie
  • 1.2 Verbindungsarchitektur
  • 1.2.1 Nächste-Nachbarn-Verbindungen
  • 1.2.2 Kreuzschienenverbindungen
  • 1.2.3 Verbindende Tri-State-Netze
  • 1.2.4 System-Ebenenverbindung
  • 1.3 Elemente für Sonderzwecke
  • 1.3.1 Entwurfsspeicher
  • 1.3.2 Stimulation/Antwort
  • 1.3.3 Vom Anwender gelieferte Bauelemente
  • 1.4 Konfiguration
  • 1.5 Host-Interface
  • 2. Realizer-Entwurfs-Konvertierungssystem
  • 2.1 Entwurfsleser
  • 2.2 Grundelemente-Konversion
  • 2.3 Partitionierung
  • 2.4 Netzlisting und Verbindung
  • 3. Realizer-Anwendungen
  • 3.1 Realizer-Logik-Simulationssysteme
  • 3.1.1 Logische Simulation eines Stimulations- und Antwort-Translationssystems
  • 3.1.2 Logische Simulation eines Betriebskernes
  • 3.1.3 Die Verwendung des Realizer-Logik-Simulationssystems
  • 3.1.4 Die Realisation von mehr als zwei Zuständen
  • 3.1.5 Die Realizer-Darstellung einer Verzögerung
  • 3.1.6 Das Transferieren des Zustandes einer Realizer-Simulation in eine andere Simulation
  • 3.2 Das Realizer-Fehler-Simulationssystem
  • 3.3 Das Realizer-Evaluationssystem für den Logik-Simulator
  • 3.4 Das Realizer-System zum Herstellen von Prototypen
  • 3.4.1 Realisierte virtuelle Instrumente
  • 3.5 Das Realizer-Ausführungssystem
  • 3.6 Das Realizer-Herstellungssystem
  • 3.7 Das Realizer-Berechnungssystem
  • 4. Die bevorzugte Ausführungsform
  • 4.1 Hardware
  • 4.2 Software
1. Das Realizer-Hardwaresystem

Das Realizer-Hardwaresystem (1) besteht aus:

  • 1) einem Satz von L-Chips, bestehend aus:
  • 1) zumindest zwei Logikchips (normalerweise zehn oder hunderte).
  • 2) optional einem oder mehreren Elemente für Sonderzwecke, wie z. B. Speichermodule oder vom Anwender gelieferte Module.
  • 2) einer konfigurierbaren Verbindung, die mit allen verbindbaren I/O-Pins der L-Chips verbunden ist.
  • 3) einem Host-Interface, das mit dem Host-Computer, dem Konfigurationssystem und mit allen Bauelementen verbunden ist, die durch den Host zur Datenein-/Ausgabe oder Steuerung verwendet werden können.
  • 4) einem Konfigurationssystem, das mit dem Host-Interface und mit allen konfigurierbaren L-Chips und Verbindungsbauelementen verbunden ist.

Diese Hardware ist normalerweise in der Form von logischen Karten, Boxen, und Racks gepackt und ist mit dem Host-Computer verbunden und wird unter dessen Steuerung betrieben.

1.1 Logik- und Verbindungschip-Technologie 1.1.1 Logikchip-Bauelemente

Damit ein Bauelement als Realizer-Logikchip verwendet werden kann, sollte es ein elektronisch rekonfigurierbares Gatterfeld sein (ERCGA):

  • 1) Es sollte die Fähigkeit haben, entsprechend einem beliebigen digitalen logischen Netzwerk, das aus Kombinationslogik (und optional aus Speicher) besteht und Kapazitätsbegrenzungen unterworfen ist, konfiguriert zu werden.
  • 2) Es sollte elektronisch rekonfigurierbar sein, indem seine Funktion und seine internen Verbindungen elektronisch viele Male konfiguriert werden können, um vielen verschiedenen logischen Netzwerken zu entsprechen.
  • 3) Es sollte in der Lage sein, I/O-Pins frei mit dem digitalen Netzwerk zu verbinden, unabhängig von dem speziellen Netzwerk oder welche I/O-Pins spezifiziert sind, um der partiellen Kreuzschienenverbindung oder der direkten Verbindung des Realizer-Systems zu ermöglichen, Logikchips erfolgreich miteinander zu verbinden.

Ein Beispiel eines rekonfigurierbaren Logikchips, der für Logikchips geeignet ist, ist das logische Zellenfeld (LCA) („The Programmable Gate Array Handbook", Xilinx, Inc., San Jose, CA, 1989). Es wird von Xilinx Inc. und anderen hergestellt. Dieser Chip besteht aus einem regelmäßigen zweidimensionalen Feld von konfigurierbaren Logikblocks (CLBs), die von rekonfigurierbaren I/O-Blocks (IOBs) umgeben sind und durch Verdrahtungssegmente verbunden sind, die in Reihen und Spalten unter den CLBs und IOBs angeordnet sind. Jeder CLB hat eine kleine Anzahl von Eingängen, ein Kombinations-Logik-Netzwerk mit vielen Eingängen, dessen logische Funktion rekonfiguriert werden kann, einen oder mehrere Flip-Flops, und einen oder mehrere Ausgänge, die durch rekonfigurierbare Verbindungen innerhalb des CLB miteinander verbunden werden können. Jeder IOB kann rekonfiguriert werden, um ein Eingangs- oder Ausgangspuffer für den Chip zu sein, und ist mit einem externen I/O-Pin verbunden. Die Verdrahtungsabschnitte können mit CLBs, IOBs und miteinander verbunden werden, um über rekonfigurierbare Schalttransistoren und Verbindungsmatrizen Verbindungen zwischen diesen zu schaffen. Alle rekonfigurierbaren Eigenschaften werden durch Bits in einem seriellen Schieberegister auf dem Chip gesteuert. Das LCA wird so vollständig durch Schieben in dem „Konfigurationsbitmuster" konfiguriert, was zwischen 10 und 100 Millisekunden dauert. Die LCAs der Xilinx 2000 und 3000 Serie haben zwischen 64 und 320 CLBs, wobei zwischen 56 und 144 IOBs für die Verwendung zur Verfügung stehen.

Das LCA-Netzlisten-Konversionswerkzeug (unten beschrieben) bildet die Logik auf CLBs ab, um die Verbindungen zwischen CLBs und IOBs zu optimieren. Die Konfigurierbarkeit der Verbindung zwischen CLBs und den I/O-Pins gibt dem LCA die Fähigkeit, I/O-Pins frei mit dem digitalen Netzwerk zu verbinden, unabhängig von dem jeweiligen Netzwerk oder davon, welche I/O-Pins spezifiziert sind. Die bevorzugte Implementierung des Realizer-Systems verwendet LCA-Bauelemente für seine Logikchips.

Ein anderer Typ von ERCGA, der als Logikchip geeignet ist, ist der ERA (electrically reconfigurable array) oder das elektronisch rekonfigurierbare Feld. Ein kommerziell erhältliches Beispiel ist der Plessey ERA60K-Typ. Er wird durch das Laden eines Konfigurationsbitmusters in einen RAM des Bauteils konfiguriert. Der ERA ist als ein Feld von NAND-Gattern mit zwei Eingängen organisiert, von denen jedes unabhängig mit anderen verbunden werden kann gemäß der Werte in dem RAM, wodurch die Eingangsverbindungen der Gatter zu einer Serie von Verbindungspfaden umgeschaltet werden. Der ERA60100 hat ungefähr 10.000 NAND-Gatter. I/O-Zellen an der Peripherie des Feldes werden dazu verwendet, Gatter-Ein- und/oder -Ausgänge mit externen I/O-Pins zu verbinden. Das ERA-Netzlisten-Konversionswerkzeug bildet Logik auf die Gatter ab, um die Verbindungen zwischen ihnen zu optimieren und erzeugt eine Konfigurationsbitmusterdatei, wie unten beschrieben. Die Konfigurierbarkeit der Verbindung zwischen Gattern und den I/O-Zellen gibt dem ERA die Fähigkeit, I/O-Pins mit dem digitalen Netzwerk frei zu verbinden, unabhängig von dem speziellen Netzwerk oder davon, welche I/O-Pins spezifiziert sind.

Ein weiterer Typ von rekonfigurierbarem Logikchip, der als Logikchip verwendet werden könnte, ist der EEPLD (electrically erasable programmable logic device) oder elektrisch löschbarer programmierbarer Logikbaustein („GAL Handbook", Lattice Semiconductor Corp., Portland, OR, 1986). Ein kommerzielles Beispiel ist der Lattice Generic Array Logik (GAL). Er wird durch das Laden eines Bitmusters in den Teil konfiguriert, der die Logik konfiguriert. Der GAL ist als ein Produktsummen-Feld organisiert mit Ausgangs-Flip-Flops und ist daher weniger allgemein konfigurierbar als das Xilinx LCA. Er bietet die Freiheit der Verbindung von I/O-Pins und Logik nur unter allen Eingangspins und unter allen Ausgangspins, so dass er das Erfordernis teilweise erfüllt. Er ist mit 10 bis 20 I/O-Pins kleiner. Er kann jedoch als ein Realizer-Logikchip verwendet werden.

Zusätzliche Details über programmierbare Logikchips können in den US-Patenten 4,642,487; 4,700,187; 4,706,216; 4,722,084; 4,724,307; 4,758,985; 4,768,196 und 4,786,904 gefunden werden, deren Offenbarungen hier durch Bezugnahme mit einbezogen werden.

1.1.2 Verbindungschip-Bauelemente

Verbindungschips umfassen Kreuzschienen-Chips, die in vollen und partiellen Kreuzschienenverbindungen verwendet werden, und Routing-Chips, die in direkten und Kanalrouten-Verbindungen verwendet werden. Damit ein Bauelement als Realizer-Verbindungschip verwendet werden kann, sollte es:

  • 1) die Fähigkeit haben, viele logische Verbindungen zwischen beliebig ausgewählten Gruppen von I/O-Pins gleichzeitig herzustellen. wobei jede Verbindung logische Signale von ihren I/O-Eingangspins empfängt und diese Signale an ihre(n) I/O-Ausgangspin(s) weiterleitet.
  • 2) elektronisch rekonfigurierbar sein, d. h. seine Verbindung elektronisch definiert sein und redefiniert werden können, um vielen verschiedenen Entwürfen zu entsprechen.
  • 3) in der Lage sein, Summierungsgatter zu implementieren, wenn eine Kreuzschienen-Summierungstechnik verwendet wird, um Tri-State-Netze in der partiellen Kreuzschienenverbindung zu verbinden. (Falls nicht, werden andere Tri-State-Techniken verwendet, wie in dem Tri-State-Abschnitt diskutiert.)

Die ERCGA-Bauelemente, die oben diskutiert worden sind, d. h. das LCA, das ERA und das EEPLD erfüllen diese Anforderungen, so dass sie als Verbindungschips verwendet werden können. Obwohl wenig oder keine Logik in den Verbindungschips verwendet wird, umfasst die Fähigkeit, in nahezu irgendein digitales Netzwerk konfiguriert zu werden, die Fähigkeit, Daten direkt von Eingangsan Ausgangspins weiterzuleiten. Das LCA wird in der bevorzugten Implementierung des Realizer-Systems für Kreuzschienen-Chips verwendet.

Kreuzschienen-Schalterbauelemente, wie z. B. der TI 74AS8840 digitale Kreuzschienenschalter (SN74AS8840 Datenblatt, Texas Instruments, Dallas, TX, 1987) oder das Kreuzpunkt-Schalterbauelement, das im Allgemeinen in Telefonschaltern verwendet wird, können als Verbindungschips verwendet werden. Sie bieten jedoch eine Geschwindigkeit der Rekonfiguration an, die vergleichbar mit der Geschwindigkeit der Datenübertragung ist, da sie für Anwendungen vorgesehen sind, bei denen sich die Konfiguration dynamisch während des Betriebs ändert. Dies ist viel schneller als die Konfigurationsgeschwindigkeit der ERCGA-Bauelemente. Entsprechend haben solche Bauelemente höhere Preise und niedrigere Kapazitäten als die ERCGAs und sind daher weniger wünschenswert als Realizer-Verbindungschips.

1.1.3 ERCGA-Konfigurations-Software

Die Konfigurationsbitmuster, die in ein ERCGA geladen werden, um seine Logik gemäß den Spezifikationen eines Anwenders zu konfigurieren, sind für den Anwender zu unpraktisch, um von diesem selbst erzeugt zu werden. Hersteller von ERCGA-Bauelementen bieten daher üblicherweise Netzlisten-Konversions-Software-Werkzeuge an, die die logischen Spezifikationen, die in einer Netzlisten-Datei enthalten sind, in eine Konfigurationsbit-Musterdatei konvertieren.

Das Realizer-Entwurfs-Konversionssystem verwendet die Netzlisten-Konversions-Werkzeuge, die von dem/den ERCGA-Händler(n) zur Verfügung gestellt werden. Sobald das Realizer-System den Entwurf eingelesen, konvertiert, in Logikchips partitioniert hat und die Verbindung bestimmt hat, erzeugt es Netzlisten für jeden Logik- und Verbindungschip in der Realizer-Hardware. Die Netzlisten-Datei ist eine Liste aller Grundelemente (Gatter, Flip-Flop und I/O-Puffer) und ihrer Verbindungen, die in einem einzelnen Logik- oder Verbindungschip konfiguriert werden sollen.

Das Realizer-Entwurfs-Konversionssystem wendet die ERCGA-Netzlisten-Konversions-Werkzeuge auf jede Netzlisten-Datei an, um eine Konfigurationsdatei für jeden Chip zu erhalten. Wenn verschiedene Bauelemente für die Logikchips und die Verbindungschips verwendet werden, wird in jedem Fall das geeignete Werkzeug verwendet. Die Konfigurationsdatei enthält das binäre Bitmuster, das, sobald es in den ERCGA geladen worden ist, ihn gemäß der Spezifikationen in der Netzlisten-Datei konfiguriert. Es sammelt daraufhin diese Dateien in einer einzigen binären Datei, die permanent gespeichert wird und dazu verwendet wird, um das Realizer-System für den Entwurf vor dem Betrieb zu konfigurieren. Das Realizer-Entwurfs-Konversionssystems entspricht den Formaten der Netzliste und der Konfigurationsdatei, die durch den ERCGA-Anbieter für sein Werkzeug definiert worden sind.

1.1.4 Netzlisten-Konversionswerkzeuge

Da die bevorzugte Implementierung des Realizer-Systems LCAs als Logik- und Kreuzschienen-Chips verwendet, wird hier das Xilinx LCA Netzlisten-Konversionswerkzeug und sein Dateiformat beschrieben. Andere ERCGA-Netzlisten-Konversionswerkzeuge werden ähnliche Charakteristika und Formate haben.

Xilinx LCA Netzlisten-Konversionswerkzeug (XACT) nimmt die Beschreibung eines logischen Netzwerks in Netzlistenform und bildet automatisch die logischen Elemente in CLBs ab. Dieses Abbilden wird auf eine optimale Weise in Bezug auf die I/O-Pin-Anordnung durchgeführt, um die internen Verbindungen zu erleichtern. Daraufhin arbeitet das Werkzeug aus, wie die interne Verbindung des Logikchips konfiguriert werden soll und erzeugt als Ausgangsergebnis eine Konfigurationsdatei. Das LCA-Netzlisten-Konversionswerkzeug konvertiert lediglich einzelne LCAs und versagt, wenn das logisch Netzwerk zu groß ist, um in einen einzelnen LCA zu passen.

Die Xilinx LCA Netzlisten-Datei wird XNF-Datei genannt. Es ist eine ASCII-Textdatei, die einen Satz von Anweisungen in der XNF-Datei für jedes Grundelement enthält, die den Typ des Grundelements spezifizieren, die Pins und die Namen der Netze, die mit diesen Pins verbunden werden. Es ist zu beachten, dass diese Netze Verbindungen in der LCA-Netzliste sind, die LCA-Grundelemente miteinander verbindet, nicht die Netze des Eingabeentwurfs. Einige Netze in der XNF-Datei entsprechen direkt den Netzen des Eingabeentwurfs als ein Ergebnis der Entwurfskonversion, andere tun dies nicht.

Beispielsweise sind dies die Grundelemente-Anweisungen der XNF-Datei, die ein 2-Eingang-XOR-Gatter spezifizieren, mit dem Namen „I_1781", dessen Eingangspins mit Netzen mit dem Namen „DATA0" und „INVERT" verbunden sind und deren Ausgangspin mit einem Netz verbunden ist mit dem Namen „RESULT":

SYM, I_1781, XOR

PIN,O,O,RESULT

PIN,1,I,DATA0

PIN,0,1,INVERT

END

Eingangs- und Ausgangs-I/O-Pin-Puffer (IBUF für Eingang und OBUF für Ausgang) werden auf eine ähnliche Weise spezifiziert mit dem Zusatz einer Anweisung zum Spezifizieren des I/O-Pins. Dies sind die Grundelemente-Anweisungen für den OBUF, der das Netz „RESULT" auf den I/O-Pin „P57" leitet über ein Netz mit dem Namen „RESULT_D":

SYN,1A_1266,OBUF

PIN,O,O,RESULT_D

PIN,I,I,RESULT

END

EXT,RESULT_D,O,,LOC=P57

Die Xilinx-LCAKonfigurationsdatei wird als RBT-Datei bezeichnet. Es ist eine ASCII-Textdatei, die einige Kopfanweisungen enthält, die den Teil, der konfiguriert werden soll, identifiziert und eine Abfolge von Nullen und Einsen, die das binäre Bitmuster spezifizieren, das dazu verwendet wird, das Bauteil für den Betrieb zu konfigurieren.

1.2 Die Verbindungsarchitektur

Da in der Praxis viele Logikchips verwendet werden müssen, um einen großen Eingabeentwurf zu realisieren, sind die Logikchips in einem Realizer-System mit einer rekonfigurierbaren Verbindung verbunden, die es ermöglicht, Signale in dem Entwurf zwischen den verschiedenen Logikchips zu leiten, wie dies benötigt wird. Die Verbindung besteht aus einer Kombination von elektrischen Verbindungen und/oder Verbindungschips. Um einen großen Entwurf mit dem Realizer-System zu realisieren, müssen durch die Verbindung hunderte von Logikchips mit insgesamt zehntausenden von I/O-Pins bedient werden.

Eine Verbindung sollte in wirtschaftlicher Weise vergrößerbar sein, wenn die Systemgröße wächst, sollte leicht und zuverlässig konfigurierbar sein für eine große Vielzahl von Eingabeentwürfen und schnell sein, indem die Verzögerung zwischen den Logikchips minimiert wird. Da die durchschnittliche Anzahl der Pins pro Netz in realen Entwürfen eine kleine Zahl ist, die unabhängig von der Entwurfsgröße ist, sollten die Größe und die Kosten einer guten Verbindung direkt in dem Maße zunehmen wie die Gesamtanzahl der Pins der Logikchips, die verbunden werden sollen, zunimmt. Bei einer gegebenen Logikchip-Kapazität wird die Anzahl der Logikchips und damit die Anzahl der Logikchip-Pins direkt in dem Maße zunehmen wie die Entwurfskapazität zunimmt. Die Größe und die Kosten einer guten Verbindung sollten sich daher direkt mit der Designgröße ändern.

Zwei Klassen von Verbindungsarchitekturen werden beschrieben: Nächste-Nachbar-Verbindungen werden im ersten Abschnitt beschrieben und Kreuzschienenverbindungen werden im folgenden Abschnitt beschrieben. Nächste-Nachbar-Verbindungen werden mit Logikchips organisiert, wobei die Verbindung vermischt und auf einer Oberfläche von zwei, drei oder mehr Dimensionen angeordnet ist. Sie erstrecken sich in einer Reihen- und Spalten-Organisation eines Gatterfeld-Chips oder einer gedruckten Schaltkarte in der Organisation der Logikchips. Ihre Konfiguration wird für einen gegebenen Eingabeentwurf durch einen Anordnungs- und Routing-Vorgang bestimmt, ähnlich dem, der verwendet wird, wenn Chips und Boards entwickelt werden. Kreuzschienenverbindungen unterscheiden sich von den Logikchips, die verbunden werden. Sie basieren auf der Viele-Eingänge-zu-viele-Ausgänge-Organisation von Kreuzschienen, die in der Kommunikation und beim Rechnen verwendet werden und ihre Konfiguration wird in einer tabellenartigen Weise bestimmt.

Nächste-Nachbar-Verbindungen wachsen in ihrer Größe direkt mit der Logikkapazität, wenn jedoch die Routing-Pfade verstopft werden, werden große Verbindungen langsam und das Bestimmen der Konfiguration wird schwierig und unzuverlässig. Reine Kreuzschienen sind sehr schnell aufgrund ihrer Direktheit und sehr leicht zu konfigurieren aufgrund ihrer Regelmäßigkeit, sie wachsen jedoch sehr schnell auf eine nicht mehr praktikable Größe. Die partielle Kreuzschienenverbindung erhält zum großen Teil die Direktheit und Regelmäßigkeit der reinen Kreuzschiene aufrecht, sie wächst jedoch nur proportional zur Entwurfskapazität und ist damit eine idealer Realizer-Verbindung. Während praktikable Realizer-Systeme unter der Verwendung der anderen gezeigten Verbindungen möglich sind, wird in der bevorzugten Implementierung die partielle Kreuzschiene verwendet und ihre Verwendung wird für den Rest dieser Offenbarung angenommen.

1.2.1 Nächste-Nachbar-Verbindung 1.2.2.1 Direkte Verbindungen

Bei der direkten Verbindung sind alle Logikchips direkt miteinander verbunden in einem gleichmäßigen Feld ohne die Verwendung von Verbindungschips. Die Verbindung besteht nur aus elektrischen Verbindungen unter den Logikchips. Viele verschiedene Muster zum Verbinden von Logikchips sind möglich. Im allgemeinen werden die Pins eines Logikchips in Gruppen aufgeteilt. Jede Gruppe von Pins wird dann mit der entsprechenden Gruppe von Pins eines anderen Logikchips verbunden, usw., für alle Logikchips. Jeder Logikchip ist nur mit einer Teilmenge von allen Logikchips verbunden, nämlich mit denen, die seine nächsten Nachbarn sind, in einem physikalischen Sinne oder zumindest im Sinne der Topologie des Feldes.

Alle Eingabe-Entwurfsnetze, die Logik auf mehr als einem Logikchip verbinden, verbinden entweder direkt, wenn alle diese Logikchips direkt miteinander verbunden sind, oder sie werden durch eine Serie von anderen Logikchips geführt, wobei diese anderen Logikchips die Funktion von Verbindungschips übernehmen, indem sie die logischen Signale von einem I/O-Pin zu einem anderen weiterleiten, ohne eine Verbindung zu irgendeiner auf diesem Chip realisierten Logik. Daher wird ein gegebener Logikchip gemäß seinem Anteil an der Entwurfslogik konfiguriert zuzüglich einiger Verbindungssignale, die von einem Chip zu einem anderen durchlaufen. Nicht-logische Chip-Ressourcen, die keine Verbindungsfunktionen erfüllen können, werden mit besonderen Pins des Logikchips am Rand des Feldes verbunden oder tangential mit Pins, die ebenfalls Logikchips miteinander verbinden.

In einem besonderen Beispiel, das in 2 gezeigt ist, sind die Logikchips in einem zweidimensionalen Gitter aus Reihen und Spalten angeordnet, wobei jeder Chip vier Gruppen von Pins hat, die mit den benachbarten Logikchips, Norden, Süden, Osten und Westen verbunden sind, mit einem Speicher, I/O und vom Anwender gelieferten Bauelementen, die am Rand verbunden sind.

Diese Verbindung kann in mehrere Dimensionen erweitert werden jenseits dieses zweidimensionalen Beispiels. Wenn im allgemeinen „n" die Anzahl der Dimensionen sind, werden die Pins des Logikchips in 2*n Gruppen aufgeteilt. Jeder Logikchip ist mit 2*n anderen Logikchips auf eine regelmäßige Weise verbunden. Eine weitere Variation ist ähnlich, aber die Größen der Pingruppen sind nicht gleich. In Abhängigkeit von der Anzahl der Logikchips und der Anzahl von Pins auf jedem Logikchip wird eine Dimension und ein Satz von Pingruppengrößen gewählt, um die Anzahl der Logikchips, die zwischen irgendwelchen zwei Logikchips liegen, zu minimieren und gleichzeitig genug Verbindungen zwischen jedem direkt benachbarten Paar von Chips zu erzeugen, um Netze zu ermöglichen, die nur diese zwei Chips umfassen. Die Bestimmung, wie die Logikchips zur Verbindung konfiguriert werden, wird zusammen mit der Bestimmung ausgeführt, wie die Chips für die Logik konfiguriert werden. Zur Konfiguration der Logikchips werden die folgenden Schritte durchgeführt:

  • 1) Das Konvertieren der Entwurfslogik in eine Logikchip-Grundelementeform wie im Abschnitt über die Grundelementekonversion beschrieben.
  • 2) Partitionierung und Anordnung der logischen Grundelemente auf den Logikchips. Zusätzlich zum Partitionieren des Entwurfs in Subnetzwerke, die jeweils in die Logikkapazität eines Logikchips passen, sollten die Subnetzwerke in Bezug aufeinander so angeordnet werden, so dass die Menge der benötigten Verbindungen minimieren wird. Standard-Partitionierungs- und Anordnungs-Werkzeugverfahren, wie sie z. B. beim automatischen Partitionieren in einem Gatterfeld oder einem Standard-Zellenchip verwendet werden und ein Anordnungswerkzeug („Gate Station Reference Manual", Mentor Graphics Corp., 1987) werden dazu verwendet, um zu bestimmen, wie die logischen Grundelemente den Logikchips zugeordnet werden, um die Verbindung herzustellen. Da dies ein wohlbekanntes Verfahren ist, wird es hier nicht weiter beschrieben.
  • 3) Routen der Verbindungen unter den Logikchips, d. h. das Zuordnen der Verbindungen an spezielle Logikchips und I/O-Pin-Verbindungen, unter der Verwendung von Standard-Routing-Werkzeugverfahren, wie sie z. B. in einem automatischen Routing-Werkzeug in einem Gatterfeld oder Standard-Zellenchip verwendet werden („Gate Station Reference Manual", Mentor Graphics Corp., 1987), um festzulegen, wie die Chips konfiguriert werden, um die Verbindung zu erzeugen. Da dies ebenfalls ein wohlbekanntes Verfahren ist, wird es hier nicht weiter beschrieben mit der Ausnahme seiner Anwendung auf das Verbindungsproblem. Das Feld von Logikchips wird mit demselben Verfahren behandelt wie ein großes einzelnes Gatterfeld oder ein Standard-Zellenchip, wobei jedes partitionierte Logik-Subnetzwerk einem großen Gatterfeld-Logikmakro entspricht und wobei die verbundenen I/O-Pins eines Logikchips die Verdrahtungskanäle, die zum Routen zur Verfügung stehen, definieren. Insbesondere gibt es so viele Kanäle in jeder Routing-Richtung wie Pins in jeder Gruppe von I/O-Pins von verbundenen Logikchips. Da es viele Möglichkeiten zur Verbindung durch die Logikchips gibt, ist das Routing nicht auf die Verwendung der gleichen Kanäle an jedem Ende begrenzt, auf dieselbe Weise wie wenn viele Routing-Lagen die Kanalbegrenzung in einem Gatterfeld aufheben.
  • 4) Wenn es nicht möglich ist, eine Verbindung herzustellen aufgrund von Routing-Verstopfung (dem Nicht-Zuverfügungstehen von Routing-Kanälen an einem Punkt während des Routing-Vorgangs) wird der Entwurf repartitioniert und/oder erneut angeordnet unter Verwendung von angepassten Kriterien, um die Verstopfung aufzuheben und die Verbindung wird erneut versucht.
  • 5) Konvertieren der Spezifikationen, deren Netze welche Kanäle belegen, in Netzlisten-Dateien für die einzelnen Logikchips und die speziellen Pin-Zuordnungen für die Signale der Logikchips, gemäß der Entsprechung zwischen speziellen Routing-Kanälen und I/O-Pins. Ausgabe dieser Spezifikationen in der Form von I/O-Pin-Spezifikationen und internen Logikchip-Verbindungen zusammen mit der Spezifikation der logischen Grundelemente an die Netzlisten-Datei für jeden logischen Chip.
  • 6) Verwendung der Netzlisten-Konversions-Werkzeuge für die Logikchips, um Konfigurationsdateien für jeden Logikchip zu erzeugen, und Kombination dieser Dateien in die endgültige Realizer-Konfigurationsdatei für den Eingabeentwurf.

1.2.1.2 Kanal-Routen-Verbindungen

Die Kanal-Routen-Verbindung ist eine Abwandlung der direkten Verbindung, wobei die Chips aufgeteilt werden in einige, die nicht für Logik verwendet werden, sondern nur für das Erzeugen der Verbindungen bestimmt sind, und damit Verbindungschips werden, und andere, die ausschließlich für die Logik verwendet werden und damit Logikchips bleiben. Insbesondere werden die Logikchips nicht direkt miteinander verbunden, sondern statt dessen nur mit Verbindungschips verbunden. In anderer Hinsicht wird die Kanal-Routen-Verbindung entsprechend der direkten Verbindungsmethode zusammengestellt. Netze, die mehr als einen logischen Chip umfassen, werden durch die Konfiguration einer Serie von Verbindungschips verbunden, die Routing-Chips genannt werden und die mit diesen Logikchips und miteinander verbunden sind, so dass die logischen Verbindungen zwischen den I/O-Pins der Logikchips erzeugt werden. Sie werden daher als konfigurierbare „Schaltkarte" verwendet.

Ein Beispiel einer Kanal-Routen-Verbindung ist zweidimensional, die Logikchips sind reihen- und spaltenartig angeordnet und vollkommen von Routing-Chips umgeben, wie in 3 gezeigt. Das Feld besteht aus Reihen, die ausschließlich aus Routing-Chips bestehen, abwechselnd mit Reihen, die aus alternierenden Logik- und Routing-Chips bestehen. Auf diese Weise gibt es ununterbrochene Reihen und Spalten von Routing-Chips, die die Logikchips umgeben. Die Pins von jedem Chip werden in vier Gruppen oder Ränder aufgeteilt, die „Norden, Osten, Süden und Westen" genannt werden. Die Pins von jedem Chip sind mit den vier nächsten Nachbarn auf eine gitterähnliche Art und Weise verbunden: Die Nord-Pins mit den Süd-Pins des nördlichen Nachbarn, die östlichen Pins mit den westlichen Pins des östlichen Nachbarn usw.

Dieses Modell kann in mehrere Dimensionen erweitert werden jenseits des zweidimensionalen Beispieles, das oben angegeben ist. Wenn „n" die Anzahl der Dimensionen bezeichnet, werden die Pins von jedem Logikchip in 2*n Gruppen aufgeteilt. Jeder Logikchip ist mit 2*n Nachbarn verbunden. Im Zentrum des Feldes gibt es (2**n – 1) Routing-Chips für jeden Logikchip.

Generalisierungen dieses Kanal-Routen-Modells werden ebenfalls verwendet, die auf der Unterscheidung zwischen Logik- und Routing-Chips basieren. Die Pins der Logikchips können in irgendeine Anzahl von Gruppen aufgeteilt werden. Die Pins der Routing-Chips können in irgendeine Anzahl von Gruppen aufgeteilt werden, die nicht die gleiche Anzahl sein muss wie die der Logikchip-Gruppen. Die Logikchips und Routing-Chips müssen nicht die gleiche Anzahl von Pins haben. Diese Veränderungen werden angewendet, solange sie in einem regelmäßigen Feld von Logik- und Routing-Chips resultieren und ein gegebener Logikchip nur mit einer begrenzten Anzahl von seinem nächsten Nachbarn verbunden ist.

Die Festlegung, wie die Verbindungschips konfiguriert werden, wird gemeinsam mit der Festlegung durchgeführt, wie die Logikchips konfiguriert werden, mit demselben Verfahren, das für die direkte Verbindung verwendet wird, mit der Ausnahme, dass die Verbindungen zwischen Logikchips nur durch Verbindungschips und nicht durch Logikchips geführt werden.

Ein logisches Signal eines Netzes läuft durch so viele Routing-Chips, wie benötigt werden, um die Verbindung zu vervollständigen. Da jeder Routing-Chip das Fortschreiten des Signals verzögert, wird die Signalverzögerungszeit um so größer je mehr Routing-Chips ein Signal passieren muss. Im allgemeinen ist es wünschenswert, den logischen Entwurf zu partitionieren und die Partitionen so auf den einzelnen Logikchips anzuordnen, um die Routing-Anforderungen zu minimieren. Wenn es aufgrund von Routing-Verstopfung nicht möglich ist, eine Verbindung herzustellen, wird der Entwurf repartitioniert und/oder erneut angeordnet unter der Verwendung von angepassten Kriterien, um die Verstopfung aufzuheben und die Verbindung wird erneut versucht. Dieser Zyklus wird solange wiederholt, wie es erforderlich ist, um zu einem Erfolg zu kommen.

1.2.2 Kreuzschienenverbindungen 1.2.2.1 Volle Kreuzschienenverbindungen

Die Kreuzschiene ist eine Verbindungsarchitektur, die ohne Einschränkung irgendeinen Pin mit einem beliebigen anderen Pin oder Pins verbinden kann. Sie ist weit verbreitet zur Kommunikation von Nachrichten in schaltenden Netzwerken in Computern und Kommunikationsbauelementen. Eine Verbindung, die als eine völlige Kreuzschiene organisiert ist und mit allen Logikchip-Pins verbunden ist und in der Lage ist, in eine beliebige Kombination von Pin-Verbindungen konfiguriert zu werden, erzielt die Verbindung direkt für einen beliebigen Eingabeentwurf und eine Logikchip-Partitionierung, da sie direkt dazu in der Lage ist, jeden Pin mit jedem anderen zu verbinden.

Leider gibt es kein praktikables einzelnes Bauelement, das eine Anzahl von Logikchips miteinander verbinden kann. Die logische Karte der bevorzugten Ausführungsform hat beispielsweise 14 Logikchips mit jeweils 128 zu verbindenden Pins, d. h. einer Gesamtheit von 1.792 Pins, weit jenseits der Fähigkeit eines einzelnen praktikablen Chips. Es ist möglich, Kreuzschienen aus einer Anzahl von praktikablen Verbindungschips zu konstruieren, Bauteilen, die konfiguriert werden können, um beliebige Verbindungen unter ihren I/O-Pins zu implementieren. Im Zusammenhang mit Kreuzschienenverbindungen werden sie auch Kreuzschienen-Chips genannt.

Ein generelles Verfahren zum Konstruieren einer Kreuzschienenverbindung aus praktikablen Kreuzschienen-Chips besteht darin, einen Kreuzschienen-Chip zu verwenden, um einen Logikchip-Pin mit so viel anderen Logikchip-Pins zu verbinden, wie der Kreuzschienen-Chip Pins hat. 4 zeigt ein Beispiel, das der Klarheit wegen extrem vereinfacht worden ist. Vier Logikchips, jeweils mit 8 Pins, sollen miteinander verbunden werden. Kreuzschienen-Chips mit jeweils neun Pins werden dazu verwendet. Die am weitesten links angeordnete Spalte aus drei Kreuzschienen-Chips verbindet den Pin H des Logikchip 4 mit den Pins der Logikchips 1, 2 und 3. Die nächste Spalte verbindet Pin G usw. bis Pin A von Logikchip 4. Es besteht keine Notwendigkeit den Pin eines Logikchips mit den anderen Pins desselben Logikchips zu verbinden, da sie intern miteinander verbunden sind. Die nächsten acht Spalten von Verbindungschips verbinden den Logikchip 3 mit den Logikchips 1 und 2. Der Logikchip 4 ist nicht mit umfasst, da seine Pins mit den Pins des Logikchip 3 durch die ersten acht Spalten von Kreuzschienen-Chips verbunden sind. Die letzten acht Spalten verbinden die Logikchips 1 und 2. Insgesamt werden 48 Kreuzschienen-Chips verwendet.

Zwei Netze eines Eingabeentwurfs sind verbunden dargestellt. Netz A wird durch den Logikchip 1, Pin D ausgesendet und durch den Logikchip 4, Pin B empfangen. Der Kreuzschienen-Chip mit der Markierung 1 ist derjenige, der diese beiden Pins miteinander verbindet, so dass er konfiguriert wird, um vom Chip 1, Pin D Signale zu empfangen und das, was er empfängt, an Pin B auf Chip 4 zu treiben, wodurch die logische Verbindung erzeugt wird. Das Netz B wird durch Pin F auf Chip 2 angetrieben und durch den Pin G, Chip 3 und Pin G auf Chip 4 empfangen. Der Kreuzschienen-Chip 2 erzeugt die erste Verbindung und der Kreuzschienen-Chip 3 die zweite.

Im Allgemeinen kann die Anzahl der benötigten Kreuzschienen-Chip vorhergesagt werden. Wenn es L Logikchips gibt mit jeweils P1 Pins und Kreuzschienen-Chips, die jeweils einen Logikchip-Pin mit allen anderen möglichen Logikchip-Pins verbinden und jeweils Px Pins haben, gilt:

  • 1) Ein Pin des Logikchip 1 muss mit (L – 1)P1 Pins der Logikchips 2 bis L verbunden werden. Dies benötigt (L – 1)P1/(Px – 1) Kreuzschienen-Chips. Das Verbinden aller Pins benötigt (L – 1)P12/(Px – 1) Krezschienen-Chips.
  • 2) Jeder Pin des Logikchip 2 muss mit (L – 2)P1 Pins auf den Logikchips 3 bis L verbunden werden. Dies benötigt (L – 2)P12/(Px – 1) Kreuzschienen-Chips.
  • 3) Jeder Pin des Logikchip L – 1 muss mit P1 Pins des Logikchips L verbunden werden. Dies benötigt P12/(Px – 1) Kreuzschienen-Chips.
  • 4) X = (L – 1)P12/(Px – 1) + (L – 2)P12/(Px – 1) + ... + P12/(Px – 1) = (L2 – L)P12/2(Px – 1).

Die Anzahl der Kreuzschienen-Chips, X, wächst mit dem Quadrat der Anzahl der Logikchips mal dem Quadrat der Anzahl der Pins pro Logikchip. Eine Kreuzschienenverbindung für die logische Karte der bevorzugten Ausführungsform (14 Logikchips mit jeweils 128 Pins) würde 11648 Kreuzschienen-Chips mit jeweils 129 Pins benötigen oder 23296 Kreuzschienen-Chips mit jeweils 65 Pins. Kreuzschienenverbindungen sind unpraktisch groß und teuer für irgendein verwendbares Realizer-System.

1.2.2.2 Volle Kreuzschienen-Netzverbindung

Die Größe einer Kreuzschienenverbindung kann durch die Erkenntnis reduziert werden, dass die Anzahl der Entwurfsnetze, die miteinander verbunden werden sollen, niemals die Hälfte der Gesamtanzahl der Logikchip-Pins überschreiten kann. Eine Kreuzschienen-Netzverbindung besteht logisch aus zwei Kreuzschienen, von denen jede alle Logikchip-Pins mit einem Satz von Verbindungen verbindet, die Verbindungsnetze genannt werden (Interconnect Nets, ICNs), deren Anzahl die Hälfte der Gesamtanzahl der Logikchip-Pins beträgt. Da ein Kreuzschienen-Chip, der einen Satz von Logikchip-Pins mit einem Satz von ICNs verbindet, auch von diesen zurück zu diesen Pins verbinden kann (was auf der allgemeinen Verwendbarkeit der Verbindungschips beruht) wird diese Verbindung mit Kreuzschienen-Chips aufgebaut, die jeweils einen Satz von Logikchip-Pins mit einem Satz von ICNs verbinden.

5 zeigt ein Beispiel, das dieselben vier logischen Chips wie 4 verbindet. Es werden Kreuzschienen-Chips mit jeweils acht Pins verwendet und es gibt 16 ICNs. Jeder der 32 Kreuzschienen-Chips verbindet vier Logikchip-Pins mit vier ICNs. Das Netz A ist durch den Kreuzschienen-Chip 1 verbunden, der konfiguriert ist, um vom Pin D des Chip 1 zu empfangen und das, was er empfangen hat, an ein ICN zu treiben und durch Kreuzschienen-Chip 2, der konfiguriert ist, um das ICN zu empfangen und an Pin B, Chip 4 zu treiben, wodurch die logische Verbindung hergestellt wird. Das Netz B wird durch Chip 2, Pin F geleitet, das mit einem anderen ICN über den Kreuzschienen-Chip 3 verbunden ist und wird vom Chip 3, Pin G empfangen über den Kreuzschienen-Chip 4 und über den Pin G, Chip 4 über den Kreuzschienenchip 5.

Eine Kreuzschienen-Netzverbindung für die logische Karte der bevorzugten Ausführungsform (14 Logikchips mit jeweils 128 Pins) würde 392 Kreuzschienen-Chips mit jeweils 128 Pins umfassen, oder 1568 Kreuzschienen-Chips mit jeweils 64 Pins. Die Kreuzschienen-Netzverbindung benutzt weniger Kreuzschienen-Chips als die reine Kreuzschiene. Ihre Größe nimmt zu wie das Produkt der Logikchips und der Gesamtanzahl der Logikchip-Pins, was dem Quadrat der Anzahl der Logikchips entspricht. Dies ist besser als die reine Kreuzschiene, aber immer noch nicht die gewünschte direkte Proportionalität.

1.2.2.3 Partielle Kreuzschienenverbindung

Der Logikchip selbst kann zusätzliche Freiheitsgrade bieten, die Kreuzschienen nicht ausnutzen, da er die Fähigkeit hat, jeden beliebigen seiner I/O-Pins für einen gegebenen Eingang oder Ausgang des logischen Netzwerks, für das er konfiguriert wird, zu konfigurieren, unabhängig von dem speziellen Netzwerk. Diese Freiheit erlaubt die Möglichkeit der partiellen Kreuzschienenverbindung, was der Grund dafür ist, dass sie in der Definition des Logikchips spezifiziert ist.

Bei der partiellen Kreuzschienenverbindung werden die I/O-Pins von jedem Logikchip in geeignete Teilmengen aufgeteilt, wobei dieselbe Aufteilung für jeden Logikchip verwendet wird. Die Pins von jedem Kreuzschienen-Chip werden mit derselben Teilmenge von Pins von jedem von allen Logikchips verbunden. Der Kreuzschienen-Chip „n" wird daher mit der Teilmenge „n" der Pins von jedem Logikchip verbunden. Es werden so viele Kreuzschienen-Chips verwendet, wie es Teilmengen gibt und jeder Kreuzschienen-Chip hat so viele Pins wie die Anzahl der Pins in der Teilmenge mal der Anzahl der Logikchips beträgt. Jedes Paar von Logikchip/Kreuzschienen-Chip wird mit so vielen Drähten verbunden, Pfade genannt, wie Pins in jeder Teilmenge vorhanden sind.

Da jeder Kreuzschienen-Chip mit der gleichen Teilmenge von Pins auf jedem Logikchip verbunden ist, kann eine Verbindung von einem I/O-Pin in einer Teilmenge von Pins auf einem Logikchip zu einem anderen I/O-Pin in einer anderen Teilmenge von Pins auf einem anderen Logikchip nicht konfiguriert werden. Dies wird durch das Verbinden von jedem Netz unter Verwendung von I/O-Pins aus der gleichen Teilmenge von Pins auf jedem der zu verbindenden Logikchips und durch das entsprechende Konfigurieren der Logikchips vermieden. Da der Logikchip zur Verwendung konfiguriert werden kann, kann irgendein Pin der Logik zugeordnet werden, die in einem Logikchip konfiguriert ist, der mit einem Netz verbunden ist. Ein I/O-Pin ist genauso gut wie jeder andere.

Der allgemeine Aufbau ist in 6 dargestellt. Jede Linie, die einen Logikchip und einen Kreuzschienen-Chip in dieser Figur verbindet, stellt eine Teilmenge der Logikchip-Pins dar. Jeder Kreuzschienen-Chip ist mit einer Teilmenge von Pins von jedem Logikchip verbunden. Umgekehrt impliziert dies, dass jeder Logikchip mit einer Teilmenge von Pins auf jedem Kreuzschienen-Chip verbunden ist. Die Anzahl der Kreuzschienen-Chips muss nicht der Anzahl der Logikchips gleich sein, wie es in diesen Beispielen zufällig der Fall ist. In der bevorzugten Implementierung ist es nicht der Fall.

7 zeigt ein Beispiel, wobei zum Verbinden derselben vier Logikchips wie in den 1 oder 2 vier Kreuzschienen-Chips mit jeweils acht Pins verwendet werden. Jeder Kreuzschienen-Chip ist mit denselben zwei Pins von jedem Logikchip verbunden. Der Kreuzschienen-Chip 1 ist mit den Pins A und B von jedem Logikchip 1 bis 4 verbunden. Der Kreuzschienen-Chip 2 ist mit allen Pins C und D, Chip 3 mit allen Pins E und F und Chip 4 mit allen Pins G und H verbunden.

Ein Entwurfsnetz A wurde in den vorangegangenen Beispielen von Pin B des Logikchips 4 aufgenommen, aber es gibt keinen Kreuzschienen-Chip oder Chips, die dies mit dem Treiber auf Pin D des Logikchips 1 verbinden können. Da irgendein I/O-Pin der Logik, die im Logikchip 4 konfiguriert ist, zugeordnet werden kann, der das Netz A aufnimmt, ist Pin C genauso gut wie Pin B, der dann für ein anderes Netz verwendet werden kann. Entsprechend wird das Netz A statt dessen durch den Pin C aufgenommen und die Verbindung wird durch das Konfigurieren des Kreuzschienen-Chips 2 erzeugt. Ein Entwurfsnetz B wird durch den Chip 3 empfangen, Pin G, und durch Chip 4, Pin G, aber es gibt keinen Kreuzschienen-Chip oder Chips, die dies mit dem Treiber auf Pin F des Logikchips 2 verbinden können. Das Netz B wird statt dessen durch den Pin H getrieben und die Verbindung wird durch die Konfigurierung des Kreuzschienen-Chips 4 hergestellt.

Die partielle Kreuzschienenverbindung wird in der bevorzugten Ausführungsform verwendet. Die logische Karte der bevorzugten Ausführungsform besteht aus 14 Logikchips, jeder mit 128 Pins, die durch 32 Kreuzschienen-Chips mit jeweils 56 Pins verbunden sind. Die Pins der Logikchips sind in 32 geeignete Teilmengen von jeweils vier Pins aufgeteilt und die Pins von jedem Kreuzschienen-Chip sind in 14 Teilmengen von jeweils vier Pins aufgeteilt. Jedes Paar von Logikchip/Kreuzschienen-Chip ist über vier Pfade miteinander verbunden, so wie der Kreuzschienen-Chip „n" mit der Teilmenge „n" der Pins von jedem Logikchip verbunden ist.

Die partielle Kreuzschiene verwendet die geringste Anzahl von Kreuzschienen-Chips von allen Kreuzschienenverbindungen. Ihre Größe nimmt direkt mit der Gesamtanzahl der Pins der Logikchips zu. Dies ist direkt mit der Anzahl der Logikchips und damit mit der Logikkapazität verbunden, was das gewünschte Resultat ist. Sie ist schnell, indem alle Verbindungen nur durch einen Verbindungschip führen. Sie ist vergleichsweise einfach zu verwenden, da sie regelmäßig ist, ihre Pfade können in einer Tabelle dargestellt werden und das Bestimmen, wie eine spezielle Verbindung hergestellt werden kann, besteht lediglich darin, die Tabelle für das Beste zur Verfügung stehende Paar von Pfaden zu durchsuchen.

1.2.2.4 Kapazität der partiellen Kreuzschienenverbindung

Partielle Kreuzschienenverbindungen können nicht so viele Netze handhaben wie volle Kreuzschienenverbindungen. Die partielle Kreuzschienenverbindung wird dabei versagen, ein Netz zu verbinden, wenn die einzigen I/O-Pins, die nicht bereits für andere Netze auf dem Quell-Logikchip verwendet werden, zu Kreuzschienen-Chips gehen, deren Pfade zum Ziel-Logikchip bereits voll sind. Das Ziel kann zur Verfügung stehende Pins haben, aber in solch einem Fall gehen sie zu anderen Kreuzschienen mit vollen Quellen-Pins und es gibt keine Möglichkeit von einer dieser Kreuzschienen zu der ersten zu gelangen.

Die Kapazität einer partiellen Kreuzschienenverbindung hängt von ihrer Architektur ab. In einem logischen Extrem gäbe es nur eine einzige Logikchip-Pin-Teilmenge und eine Kreuzschiene würde alle Pins bedienen. Solch eine Anordnung hat die größte Fähigkeit zur Verbindung, aber es ist die impraktikable volle Kreuzschiene. Im anderen logischen Extrem ist die Größe der Teilmenge 1, und es gibt so viele Kreuzschienen-Chips wie Pins auf einem Logikchip. Damit wird die geringste Fähigkeit zur Verbindung von allen partiellen Kreuzschienen erreicht, aber diese Fähigkeit kann immer noch ausreichend sein. Dazwischen liegen Architekturen, bei denen jeder Kreuzschienen-Chip zwei, drei oder mehr Pins von jedem Logikchip bedient. Die Fähigkeit zur Verbindung nimmt zu in dem Maße wie die Anzahl der Kreuzschienen-Chips abnimmt und die Pinanzahl pro Kreuzschienen-Chip zunimmt.

Diese Variation ergibt sich aus der bereits zuvor bemerkten Tatsache, dass es freie Logikchip-Pins geben kann, die nicht verbunden werden können, da sie von verschiedenen Kreuzschienen-Chips bedient werden. Je weniger und breiter die Kreuzschienen-Chips sind, desto seltener wird dies auftreten. Die volle Kreuzschiene kann per Definition alle Pins in jedem Muster verbinden.

Als ein einfaches Beispiel des Unterschiedes wird angenommen, dass drei Logikchips vorhanden sind, die als 1, 2 und 3 nummeriert sind mit jeweils drei Pins, und dass es vier Netze A, B, C und D gibt. Netz A verbindet die Logikchips 1 und 2, B verbindet 1 und 3, C verbindet 2 und 3 und D verbindet die Logikchips 1 und 2. In den 8a und 8b werden die Pins von jedem Logikchip als eine Reihe von Zellen gezeigt und jeder Kreuzschienen-Chip bedeckt so viele Spalten wie die Anzahl der Pins, die er bedient.

Im ersten Fall (8a) verwenden wir drei Kreuzschienen-Chips, die als 1, 2 und 3 numeriert sind, die jeweils ein Pin breit sind. Jeder Kreuzschienen-Chip kann nur ein Netz aufnehmen. Kreuzschienen-Chip 1 ist programmiert, um das Netz A zu verbinden, Kreuzschienen-Chip 2 verbindet das Netz B und Kreuzschienen-Chip 3 verbindet das Netz C. Das Netz D wird unverbunden gelassen, obwohl genügend freie Logikchip-Pins zur Verfügung stehen. Im zweiten Fall (8b) wird eine volle Kreuzschiene, die drei Pin breit ist, verwendet anstelle der Kreuzschienen-Chips 1, 2 und 3 und das Netz D kann verbunden werden.

Über die Anzahl der Eingabe-Entwurfsnetze, die durch verschiedene partielle Kreuzschienen-Verbindungsarchitekturen verbunden werden können, sind analytische Überlegungen und Computer-Modellierungen durchgeführt worden. Die Ergebnisse zeigen an, dass eine schmale partielle Kreuzschiene fast genauso effektiv ist wie eine breite oder sogar eine volle Kreuzschiene. Beispielsweise zeigte die Verbindung, die auf dem Logikkarte der bevorzugten Ausführungsform (14 128-Pin-Logikchips, 32 56 Pin-Kreuzschienen-Chips) eine Verbindungskapazität von 98% von einer vollen Kreuzschiene.

Es ist extrem außergewöhnlich für einen tatsächlichen Eingabeentwurf, die maximal erhältliche Anzahl von Multi-Logikchip-Netzen und logischen Chip-Pins zu verlangen, wie es bei der Modellierung angenommen wurde. Tatsächliche Entwürfe werden fast immer weniger Netze als die maximale Anzahl haben und weniger als die durchschnittliche Anzahl von Netzen, die durch die partielle Kreuzschienen in dem obigen Modell verbunden sind, üblicherweise erheblich weniger. Dies wird sichergestellt durch die Verwendung eines kleinen Teils von mehreren Logikchip-Pins und Verbindungschips als absolut notwendig wären, um die Logikkapazität zu unterstützen, wodurch sichergestellt wird, dass tatsächliche Entwürfe fast immer durch eine schmale partielle Kreuzschiene verbunden werden können.

Schmale Kreuzschienen-Chips sind viel kleiner und daher auf den Pin bezogenweniger teuer als breite. Da sie fast genauso viel Verbindungsmöglichkeiten anbieten, werden sie bevorzugt.

1.2.3 Tri-State-Netzverbindungen

Ein wichtiger Unterschied zwischen einer aktiven Verbindung, wie beispielsweise der partiellen Kreuzschienenverbindung, und einer passiven Verbindung, wie z. B. einer tatsächlichen Verdrahtung ist, dass die aktive Verbindung unidirektional ist. Jede Verbindung besteht tatsächlich aus einer Serie von Treibern und Empfängern an den Chipgrenzen, die durch Metall und Leiterbahnen verbunden sind. Normale Netze haben einen einzelnen Treiber und können mit festen Treibern und Einpfängern in der aktiven Verbindung implementiert werden. Einige Netze in tatsächlichen Entwürfen sind Tri-State-Netze mit mehreren Tri-State-Treibern, wie in 9 gezeigt.

Zu jedem Zeitpunkt ist maximal ein Treiber aktiv und die anderen stellen eine hohe Impedanz für das Netz dar. Alle Empfänger sehen den gleichen logischen Pegel zu allen Zeiten. (Unter der Vernachlässigung von Verzögerungen bei dem Voranschreiten.)

1.2.3.1 Die Summe der Produkte ersetzt ein Tri-State-Netz

Wenn das gesamte Netz in den gleichen Logikchip partitioniert ist, kann das Netzwerk durch eine Zwei-Zustand-Produktsumme oder einen Multiplexer äquivalent, wie in 10 gezeigt, ersetzt werden.

Wenn keine aktiven Enable-Signale vorhanden sind, wird das Netzwerk ein logisches Low ausgeben. Tri-State-Netze werden häufig passiv hochgezogen. Wenn es notwendig ist, wird die Produktsumme dazu veranlasst, ein logisches Hoch auszugeben, wenn kein Enable-Signal vorliegt, durch das Invertieren des Dateneingangs auf jedes AND und das Invertieren des Ausgangs des abschließenden Summierungsgatters. Wenn mehr als ein Enable-Signal aktiv ist, ist das Ergebnis die Summe (OR) aller Eingänge. Dies ist akzeptabel, da das Verhalten eines tatsächlichen Tri-State-Treibers undefiniert ist, wenn mehr als ein Treiber mit verschiedenen Daten freigegeben ist. Die 11a und 11b zeigen beide Typen von Netzwerken: „Floating low" und „Floating high".

Der Teil zur Konversion der Grundelemente des Entwurfs-Konversionssystems des Realizer-Systems führt die Summen- oder Produktsubstitution aus, da der Xilinx LCA, der für die Logik und Kreuzschienen-Chips in der bevorzugten Implementierung verwendet wird, Tri-State-Treiben nicht gleichmäßig in allen Netzen unterstützt. Tri-State-Treiber stehen an allen I/O-Pins am Rand des LCA zur Verfügung. Eine begrenzte Anzahl von Tri-State-Treibern ist innerhalb der XC3000 Serien LCAs verfügbar, jedoch nur auf einer kleinen Anzahl von internen Verbindungen, die auf dem Chip verteilt sind, von denen jede nur eine einzelne Reihe von CLBs bedient. Das Abbilden von Tri-State-Netzen auf diese Verbindungen würde eine weitere Beschränkung der Partitionierung hinzufügen und könnte die Freiheit der Anordnung der CLBs auf den LCAs beschränken. Gleichzeitig sind Tri-State-Verbindungen mit einer kleinen Anzahl von Treibern pro Netz in einigen Gatterfeld-Bibliothekszellen üblich. Entsprechend wird die Produktsummensubstitution durchgeführt, wenn möglich, um diese Komplexitäten zu vermeiden.

Wenn ein Tri-State-Netz auf mehr als einen Logikchip durch das Partionieren des Entwurfs in mehrere Logikchips aufgeteilt worden ist, werden Produktsummen lokal dazu verwendet, um die Verbindung jedes Logikchips mit dem Netz auf einen einzelnen Treiber und/oder Empfänger an der Grenze des Logikchips zu reduzieren. 12 zeigt zwei Treiber und zwei Empfänger, die gemeinsam gesammelt werden. Die zwei Treiber werden durch eine lokale Produktsumme gesammelt, die daraufhin zu der Gesamtproduktsumme beiträgt und benötigt daher nur eine einzelne Treiberverbindung. In ähnlicher Weise wird eine einzelne Empfängerverbindung auf zwei Empfänger verteilt.

Daraufhin kommt die aktive Verbindung ins Spiel. Bei einem gegebenen Punkt entlang eines Tri-State-Netzes hängt die „Richtung" des Treibens davon ab, welcher Treiber aktiv ist. Während dies für eine passive Verbindung keinen Unterschied darstellt, muss eine aktive Verbindung organisiert werden, um aktiv in den richtigen Richtungen zu treiben und zu empfangen. Es gibt mehrere Konfigurationen, die dies in einer partiellen Kreuzschienenverbindung erreichen.

1.2.3.2 Die Konfiguration des logischen Summierens

Drei Konfigurationen basieren auf dem Reduzieren des Netzes auf eine Produktsumme. Die Konfiguration der logischen Summierung plaziert das summierende OR-Gatter in einem der betroffenen Logikchips, wie in 13 gezeigt.

Die AND-Gatter, die die Produkte erzeugen, werden in den Treiber-Logikchips verteilt, von denen jeder einen Ausgangspin benötigt. Jeder empfangende Logikchip benötigt einen Eingangspin und der summierende Logikchip, der ein Spezialfall ist, benötigt einen Eingangspin für jeden anderen Treiber und einen Ausgangspin. Diese Verbindungen sind alle unidirektional, und umfassen ein OBUF/IBUF-Paar über jede Chipgrenze hinweg. Da die Pinkosten für Treiber höher sind, sollte ein Treiber-Logikchip als summierender Chip gewählt werden.

Der Klarheit wegen sind in diesen Figuren nicht alle LCA-Grundelemente gezeigt. Der tatsächliche Pfad von einem Treiber-Eingangspin bis zu einem empfangenden Ausgangspin umfasst einen CLB und ein OBUF auf dem Treiber, ein IBUF/OBUF auf der Kreuzschiene, einen IBUF, ein CLB und einen OBUF auf dem summierenden Chip, einen weiteren IBUF/OBUF auf der Kreuzschiene und einen IBUF auf dem Empfänger. Wenn wir die Kreuzschienen-IBUF-Verzögerung Ix, die logische CLB-Verzögerung C1, etc., bezeichnen, ergibt sich die Gesamtverzögerung des Datenpfads zu C1 + O1 + Ix + Ox + I1 + C1 + O1 + Ix + Ox + I1. In einem Spezialfall, wenn der Logikchip ein XC3090-70 ist, und der Kreuzschienen-Chip ein XC2018-70 ist, ist die maximale Gesamtverzögerung 82 ns, zuzüglich interner LCA-Verbindungsverzögerung. Dieselbe Verzögerung gilt für das Enable-Signal.

Wenn ein n-Bit-Bus verbunden werden soll, werden alle Enable-Signale die gleichen für jedes Bit des Bus sein. In dieser besonderen Konfiguration sind die Produktgatter in den Treiber-Logikchips, die Enable-Signale bleiben im Inneren, und die für den Bus benötigten Pins sind gerade n-fach die für ein Bit.

1.2.3.3 Die Konfiguration des Kreuzschienen-Summierens

Bei der Konfiguration des Kreuzschienen-Summierens wird das summierende OR-Gatter auf dem Kreuzschienen-Chip angeordnet unter der Verwendung der Tatsache, dass die Kreuzschienen-Chips in einigen Ausführungsformen mit ERCGAs implementiert werden, wie z. B. LCAs, die Logik zur Verfügung stellen, wie in 14 gezeigt.

Jeder Logikchip benötigt einen Pin, wenn er ein Treiber ist, und/oder einen Pin, wenn er ein Empfänger ist. Der Kreuzschienen-Chip muss einen oder mehrere logische Elemente für das Summierungsgatter haben. Die Kreuzschienen-Summierung weicht von der Praxis, alle Logik in den Logikchips anzuordnen und keine Logik in den Verbindungschips anzuordnen, ab. Es ist jedoch eine wichtige Unterscheidung, dass die Logik, die in dem Kreuzschienen-Chip angeordnet wird, nicht ein Teil der realisierten Entwurfslogik ist. Es ist lediglich Logik, die dazu dient, die Verbindungsfunktionalität eines Tri-State-Netzes zu erzeugen.

Diese Konfiguration verwendet weniger Pins als die vorangegangene, wenn mehr als zwei Treiber-Logikchips vorhanden sind. Ein n-Bit-Bus benötigt n mal so viele Pins. Die Gesamtverzögerung wird reduziert: C1 + O1 + Ix + Cx + Ox + I1, oder maximal 51 ns. Das Enable-Signal hat dieselbe Verzögerung.

1.2.3.4 Die Konfiguration des bi-direktionalen Kreuzschienen-Summierens

Das Summierungsgatter auf dem Kreuzschienen-Chip wird in der bi-direktionalen Kreuzschienen-Summierungs-Konfiguration über bi-direktionale Verbindungen erreicht, wie in 15 gezeigt.

AND-Gatter, die nur den freigegebenen Pfad zum OR-Gatter erlauben, sind auf dem Kreuzschienen-Chip vorgesehen, um Latch-Up-Pfade zu blockieren. Ein Logikchip braucht einen Pin, wenn er nur ein Empfänger ist, und zwei Pins, wenn er ein Treiber oder beides ist, einen für das Signal selbst, und einen für den Enable-Ausgang, der von dem Kreuzschienen-Chip verwendet wird. Eine reduzierte Verbindung ist für Busse mit mehreren Bits möglich, durch die Verwendung eines einzelnen Enable für mehr als ein Bit. Wenn mehr als ein Bit des Busses über denselben Kreuzschienen-Chip verbunden wird, muss nur eine Gruppe von Enable-Signalen an diesen Chip geliefert werden. Die Gesamtverzögerung des Datenpfades ist Ox + Ix + Cx + Ox + I1, oder 42 ns in der bevorzugten LCA-Ausführungsform. Ein zusätzliches Cx (10 ns) kann hinzugefügt werden, wenn die Produktsumme mehr als ein CLB benötigt. Die Enable-Verzögerung wird von der Enable-Verzögerung für die OBUFZ, E1, anstelle der Ausgangsverzögerung O1 abhängen.

1.2.3.5 Bidirektionale Kreuzschienen-Tri-State-Konfiguration

Es ist zu beachten, dass alle bisher spezifizierten Konfigurationen mit identischer Hardware verwendet werden können. Lediglich die Anordnung der Grundelemente und die Verbindung variieren. Wenn der Kreuzschienen-Chip schließlich einen internen Tri-State unterstützt, verdoppelt die bidirektionale Kreuzschienen-Tri-State-Konfiguration das tatsächliche Tri-State-Netz innerhalb des Kreuzschienen-Chip, wie in 16 gezeigt.

Jeder tatsächliche Tri-State-Treiber eines Logikchips wird auf dem Bus des Kreuzschienen-Chips wiederholt und sollte durch eine Verbindung für das Enable-Signal begleitet werden. Der Bus des Kreuzschienen-Chips wird zurückgeleitet, wenn der Treiber nicht freigegeben ist. Wenn der LCA als ein Kreuzschienen-Chip verwendet wird, werden seine internen Tri-State-Verbindungen, die bereits oben beschrieben worden sind, verwendet. Insbesondere gibt es ein IBUF/OBUFZ-Paar an der Grenze des Logikchips, ein anderes IBUF/OBUFZ-Paar für jeden Logikchip an der Grenze des Verbindungschips, und ein TBUF für jeden Logikchip, der die interne Tri-State-Leitung treibt. Jedes Enable-Signal passiert einen OBUF und einen IBUF. Die Gesamtverzögerung für den freigegebenen Datenpfad beträgt O1 + Ix + Tx + Ox + I1 oder 39 ns (XC3030-70 LCA-Kreuzschiene), und die gesamte Enable-Verzögerung ist O1 + Ix + TEx + Ox + I1, oder 45 ns.

Wie zuvor, muss nur eine Gruppe von Enable-Signalen an einen Chip geliefert werden, wenn mehr als ein Bit des Busses über denselben Kreuzschienen-Chip verbunden ist.

Diese Konfiguration erfordert, dass der Kreuzschienen-Chip ein LCA oder ein solcher ERCGA ist, der interne Tri-State-Fähigkeiten hat, und diese Konfiguration unterliegt der Verfügbarkeit dieser internen Verbindungen. Insbesondere die XC2000-Serien LCAs haben keinen internen Tri-State, während es die XC3000 haben. Der XC3030 hat 80 I/O-Pins, 100 CLBs, und 20 Tri-State-treibbare interne "long lines". Daher kann ein Maximum von 20 solcher Tri-State-Netze durch einen Verbindungschip in dieser Konfiguration verbunden werden. Dies könnte eine Verbindungsbegrenzung darstellen, jedoch nur für einen kleinen Anteil der Fälle, unter der Berücksichtigung des I/O-Pin-Limits. Der XC3030 ist derzeit doppelt so teuer wie der XC2018.

Wenn die Hardware die Verwendung der Tri-State-Konfiguration erlaubt, sind andere Hardware-Konfigurationen nicht ausgeschlossen, und können ebenso verwendet werden.

1.2.3.6 Zusammenfassung aller Konfigurationen

Die folgende Übersicht fasst die Konfigurationen zusammen:

Verzögerung

unter der Annahme von LCA-Kreuzschienen-Chips: +LCA-Verbindung, 70 MHz LCA-Chip-Geschwindigkeit
Resourcen pro Chip

d = Anzahl der Treiber

Die Konfiguration des logischen Summierens ist deutlich weniger effektiv. Das Kreuzschienen-Summieren ist viel schneller und benutzt weniger Pins, und ist fast genauso einfach. Das bi-direktionale Kreuzschienen-Summieren ist noch etwas schneller und bietet die Möglichkeit einer reduzierten Pin-Zahl für bi-direktionale Busse, ist jedoch komplexer und stellt höhere Anforderungen an die begrenzten Logik-Ressourcen in den Kreuzschienen-Chips. Die Tri-State-Konfiguration bietet ähnliche Pin-Zahlen und Verzögerungen, benötigt jedoch teurere Kreuzschienen-Chips.

1.2.3.7 Vergleich von einfachen und bi-direktionalen Kreuzschienen-Summierungs-Konfigurationen

Es ist sinnvoll, die Charakteristika der effizientesten Konfigurationen zu testen. Die folgende Darstellung zeigt die Anzahl der Kreuzschienen-CLBs, und der Kreuzschienen-CLB-Verzögerung, die auftreten, wenn die einfachen und bidirektionalen Kreuzschienen-Summierungs-Konfigurationen verwendet werden, um eine große Anzahl von bi-direktionalen Netzen zu verwenden, und wenn LCAs als Kreuzschienen-Chips verwendet werden. Dabei wird angenommen, dass XC2018-70 Kreuzschienen-Chips verwendet werden, die 72 I/O-Pins und 100 CLBs zur Verfügung stellen. Jeder CLB unterstützt bis zu 4 Eingängen und bis zu 2 Ausgängen. Von jedem Logikchip wird angenommen, dass er eine bidirektionale Verbindung mit dem Netz hat, ohne das Teilen eines Enables, so dass jeder Testfall alle 72 I/O-Pins in dem Kreuzschienen-Chip verwendet.

Die bi-direktionale Kreuzschienen-Summierungs-Konfiguration verwendet bis zu 2,5 mal soviele CLBs, wodurch die Möglichkeit, dass der Kreuzschienen-Chip nicht routet, oder, dass die internen Verbindungsverzögerungen höher sind, erhöht wird, obwohl die Konfiguration weit unterhalb der 100 zur Verfügung stehenden CLBs bleibt. Dafür ordnet die uni-direktionale Konfiguration mehr Gatter auf den Logikchips an, obwohl die Logikchips in einer besseren Position sind, um zusätzliche Gatter zu handhaben. Die bi-direktionale Konfiguration bringt häufiger zusätzliche Cx-Verzögerungen mit sich, die ihren Geschwindigkeitsvorteil ausgleichen kann. Die bevorzugte Ausführungsform des Realizer-Systems verwendet die Kreuzschienen-Summierungs-Konfiguration für alle Tri-State-Netze.

1.2.4 Verbindung auf Systemebene

Die natürliche Art und Weise zum Packen eines Satzes von Logikchips, die durch Kreuzschienen-Chips verbunden sind, ist die Anordnung auf einer einzigen Schaltkarte. Wenn ein System zu groß ist, um auf eine einzige Karte zu passen, müssen die Karten auf irgendeine Weise mit einer Systemebenen-Verbindung verbunden sein. Es ist wegen der sehr breiten Verteilung der Pfade unpraktisch, eine einzige partielle Kreuzschienen-Verbindung und ihre Logikchips über mehr als eine Karte zu verteilen. Beispielsweise sei ein Komplex von 32 128-Pin-Logikchips und 64-Pin-Kreuzschienen-Chips angenommen, der auf zwei Karten verteilt werden soll, mit 16 Logikchips und 32 Kreuzschienen auf jeder Karte. Wenn der Schnitt zwischen den Logikchips und den Kreuzschienen-Chips durchgeführt würde, würden alle 4096 Verbindungspfade zwischen Logikchips und Verbindungschips durch ein Paar von Rückebenen-Verbindern laufen müssen. Wenn der Schnitt auf andere Weise "in der Mitte" durchgeführt würde, mit 16 Logikchips und 32 Verbindungschips auf jeder Karte, dann würden alle Pfade die Logikchips auf der Karte 1 mit Kreuzschienen auf der Karte 2 verbinden (16 Logikchips × 64 Pins = 1024), und umgekehrt (weitere 1024, insgesamt 2048) müßten kreuzen.

Eine weitere Begrenzung besteht darin, dass solch eine einzelne Verbindung nicht erweiterbar ist. Jeder Kreuzschienen-Chip hat per Definition Verbindungen mit allen Logikchips. Sobald er für eine spezielle Anzahl von Logikchips konfiguriert ist, können nicht zusätzliche hinzugefügt werden.

Statt dessen wird der größte Komplex von Logik- und Kreuzschienen-Chips, der zusammen auf eine Schaltkarte gepackt werden kann, im Gebrauch als ein Modul verwendet, dass als eine logische Karte bezeichnet wird, und mehrere von diesen logischen Karten werden durch eine Systemebenen-Verbindung miteinander verbunden. Um Pfade zur Verbindung von Netzen zu schaffen, die sich über mehr als eine Karte erstrecken, werden zusätzliche Off-Board-Verbindungen zu zusätzlichen I/O-Pins von jedem Kreuzschienen-Chip auf jeder logischen Karte hergestellt, wodurch I/O-Pins für die logische Karte erzeugt werden (17). Die I/O-Pins eines Kreuzschienen-Chips, die zur Verbindung mit I/O-Pins der logischen Karte verwendet werden, sind unterschiedlich von denen, die zur Verbindung mit den I/O-Pins der Logikchips der Karte verwendet werden.

1.2.4.1 Partielle Kreuzschienen-Systemebenen-Verbindungen

Ein Mittel zum Verbinden von logischen Karten besteht darin, die partielle Kreuzschienen-Verbindung hierarchisch erneut zu verwenden, indem jede Karte behandelt wird, als ob sie ein Logikchip wäre, und indem die I/O-Pins der Karte verbunden werden, unter der Verwendung eines weiteren Satzes von Kreuzschienen-Chips. Diese partielle Kreuzschiene verbindet alle Karten in einer Box. Eine dritte Verbindung wird dann wiederum zur Verbindung von allen Boxen in einem Rack, etc. verwendet. Die Anwendung des gleichen Verbindungsverfahrens hat den Vorteil von konzeptioneller Einfachkeit und Gleichförmigkeit mit der Verbindung auf der Ebene einer Karte.

Zur Unterscheidung unter den Kreuzschienen-Chips in einem Realizer-System wird die partielle Kreuzschienen-Verbindung, die Logikchips verbindet, X-Ebenenverbindung genannt, und ihre Kreuzschienen-Chips werden XChips genannt. Die Verbindung, die logische Karten verbindet, wird Y-Level-Verbindung genannt, und ihre Kreuzschienen-Chips werden YChips genannt. In der X-Ebenenverbindung werden die I/O-Pins von jeder Logikkarte in geeignete Teilmengen aufgeteilt, wobei dieselbe Aufteilung für jede Logikkarte verwendet wird. Die Pins von jedem YChip sind mit derselben Teilmenge von Pins von jeder Logikkarte verbunden. Es werden so viele YChips verwendet, wie es Teilmengen gibt, und jeder YChip hat so viele Pins wie die Anzahl der Pins in der Teilmenge mal der Anzahl der logischen Karten.

In ähnlicher Weise werden zusätzliche Off-Box-Verbindungen mit zusätzlichen I/O-Pins von jedem der YChips hergestellt, zur Erzeugung von I/O-Pins einer Box, die alle in geeignete Teilmengen aufgeteilt werden, unter der Verwendung derselben Aufteilung in jeder Box (18). Die Pins von jedem ZChip sind mit der gleichen Teilmenge von Pins von jeder Box verbunden. Es werden so viele ZChips verwendet, wie es Teilmengen gibt, und jeder ZChip hat so viele Pins wie die Anzahl der Pins in der Teilmenge mal die Anzahl der Boxen. Dieses Verfahren zum Erzeugen von zusätzlichen Ebenen von partiellen Kreuzschienen-Verbindungen kann soweit wie benötigt fortgesetzt werden.

Wenn der Eingabeentwurf partitioniert wird, bildet die begrenzte Anzahl der I/O-Pins einer Karte durch die Netze, die sich von und zu einer Karte erstrecken, eine Begrenzung, die beachtet wird, ebenso wie ein Logikchip eine begrenzte Anzahl von I/O-Pins hat. In einem Realizer-System mit mehreren Boxen wird die begrenzte Anzahl der I/O-Pins einer Box beachtet, usw.. Die Symmetrie der Verbindung bedeutet, dass eine Optimierung der Anordnung über Chips, Karten oder Kartenrahmen, nicht notwendig ist, soweit nicht besondere Einrichtungen, wie z. B. Entwurfs-Speicher betroffen sind.

Bi-direktionale Netze und Busse werden unter der Verwendung einer der Methoden, die in dem Tri-State-Abschnitt diskutiert worden sind, implementiert, wie z. B. dem Kreuzschienen-Summierungs-Verfahren, angewendet auf jede Ebene der Verbindungshierarchie, über die sich das Netz erstreckt.

Ein spezielles Beispiel ist die bevorzugte Ausführungsform:

  • – Die partielle Kreuzschienenverbindung wird hierarchisch auf drei Ebenen über das gesamte Hardwaresystem verwendet.
  • – Alle logischen Karten bestehen aus bis zu 14 Logikchips, mit jeweils 128 verbundenen I/O-Pins, und einer X-Ebenen partiellen Kreuzschiene, bestehend aus 32 XChips. Jeder XChip hat vier Pfade zu einem der 14 LChips (insgesamt 56) und acht Pfade zu jedem der zwei YChips, mit insgesamt 512 Logikkarten-I/O-Pins pro Karte.
  • – Eine Box enthält ein bis acht Karten mit jeweils 512 verbundenen I/O-Pins und einer Y-Ebenen partiellen Kreuzschiene, die aus 64 YChips besteht.

    Jeder YChip hat acht Pfade zu einem XChip auf jeder Karte über die I/O-Pins der logischen Karte und acht Pfade zu einem ZChip, insgesamt also 512 Box-I/O-Pins pro Box.
  • – Ein Rack enthält eine bis acht Boxen mit jeweils 512 verbundenen I/O-Pins und eine Z-Ebenen partiellen Kreuzschiene, die aus 64 ZChips besteht.

    Jeder ZChip hat acht Pfade zu einem YChip in jeder Box über die Box-I/O-Pins.

1.2.4.2 Bi-direktionale Bus-Systemebenen-Verbindungen

Die Praxis von Computer-Hardware wendet ein anderes Verfahren zur Systemebenen-Verbindungen von logischen Karten an unter der Verwendung einer Rückebene von bi-direktionalen Bussen. Jede Logikkarte hat wie zuvor I/O-Pins und ein I/O-Pin von jedem Board ist mit ähnlichen I/O-Pins von allen anderen Boards in der Box durch eine Busverdrahtung verbunden (19).

Einige I/O-Pins der logischen Karte werden verschwendet, d. h. sie sind nicht in der Lage, Entwurfsnetze zu verbinden, da die Verwendung einer Busverdrahtung zum Verbinden eines Entwurfsnetzes die Verwendung der Pins, die mit dieser Verdrahtung verbunden sind, auf allen anderen Karten blockiert, die an den Bus angeschlossen sind. Die maximale Anzahl von Entwurfsnetzen, die verbunden werden können, ist gleich der Busleitungen, die der Anzahl von I/O-Pins pro Karte entspricht. Angenommen, in einem speziellen Beispiel sind acht Karten an einen gemeinsamen Verbindungsbus angeschlossen, mit 512 Busleitungen, die die 512 I/O-Pins von jeder Karte verbinden (20).

Unter der Annahme von verschiedenen Verteilungen von 2, 3, 4, 5, 6, 7 und 8-Kartennetzen zeigt die Analyse, dass, während die durchschnittliche Anzahl der Netze, mit denen jede Karte verbunden ist, in jedem Fall 512 ist, die Karten und der Bus bis zu 1166 Pin breit sein sollten, um alle Netze zu ermöglichen. Dies kann zum Teil gemildert werden, indem die Anzahl der Karten auf einer einzelnen Rückebene gering gehalten wird. Die Maximalanzahl der Karten, die durch einen Satz von bi-direktionalen Bussen verbunden wird, ist jedoch begrenzt. Um größere Systeme effizienter aufzunehmen, werden Gruppen von Bussen hierarchisch miteinander verbunden.

Das erste Beispiel, das in 21 gezeigt ist, hat zwei Sätze von Bussen, X0 und X1, die jeweils vier Karten verbinden. Die X-Ebenen-Busse sind durch einen anderen Bus Y miteinander verbunden. Jede Leitung in einem X-Bus kann mit ihrem Gegenstück in Y durch einen rekonfigurierbaren, bi-direktionalen Transceiver verbunden werden, dessen Konfiguration bestimmt, ob die X- und Y-Drähte isoliert sind, X zu Y treibt oder Y zu X. Wenn ein Netz nur die linke Gruppe von Karten verbindet oder die rechte Gruppe von Karten, wird nur einer der beiden X-Ebenen-Busse verwendet. Wenn Karten auf beiden Seiten betroffen sind, dann wird eine Leitung sowohl in X0 als auch in X1 verwendet und diese Leitungen werden durch eine Leitung in Y miteinander verbunden über die Transceiver. Jede Karte sollte so viele I/O-Pins haben wie die Breite von einem der X-Ebenen-Busse.

Wenn die Verbindung durch Y bi-direktional ist, d. h. entweder von X0 oder X1 getrieben werden kann, sollte ein zusätzliches Signal von X0 und X1 geführt werden, um die Transceiverrichtungen dynamisch zu kontrollieren.

Diese Verbindung ist analysiert worden, um ihre Fähigkeit zur Verbindung von Netzen zwischen Karten zu zeigen, wobei dieselben Annahmen der Netz-Pinzahlen und der I/O-Pinzahlen wie oben gemacht werden. Während das Einzel-Ebenen-Verfahren dieselbe Breite wie die Gesamtanzahl von allen Netzen benötigt, verringert die Aufteilung in zwei die maximal benötigte Breite um 10 bis 15%.

Die maximale Hierarchie hat lediglich zwei Karten oder Gruppen von Karten pro Bus (22).

Bi-direktionale Busverbindungen sind einfach und leicht zu bauen. Sie sind jedoch teuer, da eine große Anzahl der I/O-Pins einer logischen Karte verschwendet werden durch die Verbindung mit den Netzen auf anderen Karten. Es zeigt sich, dass das Einführen von Hierarchie und kurzen Rückseiten zur Verhinderung dieses Problems einen geringen Einfluss hat. Zusätzlich hebt das Einführen von bidirektionalen Transceivern einen Geschwindigkeits- und Kostenvorteil auf, den die Einebenen-Rückseite-Busverbindung über eine partielle Kreuzschiene hat. Entsprechend werden partielle Kreuzschienen in der Systemebenen-Verbindung der bevorzugten Ausführungsform verwendet.

1.3 Elemente für Sonderzwecke

Elemente für Sonderzwecke sind Hardware-Elemente, die zur Realisierung des Eingabeentwurfs beitragen und die an Orten von LChips auf der Logikkarte der bevorzugten Ausführungsform installiert sind, die jedoch nicht Gatter für Kombinationslogik oder Flip-Flops sind, die in Logikchips konfiguriert werden.

1.3.1 Entwurfsspeicher

Die meisten Eingabeentwürfe umfassen Speicher. Es wäre ideal, wenn Logikchips Speicher umfassen würden. Heute verfügbare Logikchip-Bauelemente tun dies jedoch nicht und selbst, wenn sie es tun würden, bestünde immer noch ein Bedarf für Hauptspeicher im Megabyte-Bereich, der niemals in einem Logikchip erwartet würde. Entwurfsspeicherbauelemente sind daher im Realizer-System enthalten.

1.3.1.1 Architektur des Entwurfs-Speichers

Die Architektur eines Entwurfs-Speichermoduls wird aus den folgenden Anforderungen abgeleitet:

  • a) Da sie ein Teil des Entwurfs ist, sollte sie frei mit anderen Komponenten verbunden werden können.
  • b) Um eine erfolgreiche Verbindung zu ermöglichen, sollte die Architektur beim Zuweisen von Daten, Adressen und Kontroll-Ein- und Ausgängen an Verbindungspfade Freiheit erlauben.
  • c) Eine Vielzahl von Konfigurationen, die einen oder mehrere Entwurfsspeicher ermöglichen mit umterschiedlichen Kapazitäten und Bitbreiten und entweder gemeinsamem oder separatem I/O sollte zur Verfügung stehen.
  • d) Sie sollte durch das Host-Interface zugänglich sein, um eine Fehlersuch-Wechselwirkung (Debugger-Typ) mit dem Entwurf zu ermöglichen.
  • e) Sie sollte statisch, nicht dynamisch sein, so dass der Entwurf willkürlich gestoppt, gestartet oder mit einer beliebigen Taktgeschwindigkeit ausgeführt werden kann.

Die allgemeine Architektur eines Speichermoduls, das diese Anforderungen erfüllt, ist in 23 gezeigt.

Um die Verbindbarkeit mit dem Entwurf zu unterstützen und für die Flexibilität der physikalischen Zusammensetzung des Realizer-Systems ist das Speichermodul konstruiert, um in den Sockel eines LChips gesteckt zu werden und dadurch mit derselben Verbindung und den anderen Pins verbunden zu werden, wie der Logikchip, den es ersetzt. Es werden so viele Module wie benötigt installiert.

RAM-Chips werden nicht direkt mit der Verbindung verbunden, im Wesentlichen, da ihre Daten, Adress- und Kontrollfunktionen an speziellen Pins fixiert sind. Da der Erfolg der partiellen Kreuzschienenverbindung von der Fähigkeit der Logikchips abhängt, interne Verbindungen frei I/O-Pins zuordnen zu können, sollten Nicht-Logik-Chip-Bauelemente, die an der Stelle eines Logikchips installiert werden, eine ähnliche Fähigkeit haben. Um dies zu erreichen und um andere logische Funktionen in dem Speichermodul zu schaffen, werden in dem Speichermodul Logikchips installiert, die die RAM-Chips mit den Kreuzschienen-XChips verbinden.

Sie sind konfiguriert, um spezielle RAM-Pins mit beliebig gewählten XChip-Pins zu verbinden unter der Verwendung derselben L-X-Pfade, die von dem Logikchip verwendet werden, dessen Platz das Speichermodul eingenommen hat. Mehr als ein Logikchip wird pro Modul verwendet, aufgrund der großen Anzahl von RAM-Pins und L-X-Pfaden, die miteinander verbunden werden sollen.

Eine zusätzliche Funktion der Logikchip des Speichermoduls besteht darin, Konfigurabilität und Zugriffsmöglichkeiten für den Host zur Verfügung zu stellen.

Adressen, Daten und Kontrollpfade werden durch die Logikchips konfiguriert, um die RAM-Chips in einer Vielzahl von Kapazitäten, Bitbreiten und Eingangs/Ausgangsstrukturen zu verbinden. Das Speichermodul kann konfiguriert werden als ein großer Speicher oder mehrere kleine. Durch das Verbinden von jedem dieser Logikchips mit dem Host-Interface-Bus und durch das Konfigurieren der Bus-Interface-Logik in ihnen wird eine Funktionalität realisiert, die es dem Host-Prozessor ermöglicht, auf die RAMs beliebig zuzugreifen, so dass ein Hostcomputerprogramm des Anwenders, wie zum Beispiel ein Debugger Inhalte des Speichers überwachen und modifizieren kann. Beispiele von diesen logischen Strukturen sind unten gezeigt.

Der dichteste und billigste zur Verfügung stehende statische Speicher, der die Timing-Anforderungen von verwirklichten Entwürfen erfüllt, wird für den Entwurfsspeicher verwendet. In der bevorzugten Ausführungsform ist dieses Bauelement der 32K mal 8 Bit CMOS SRAM, wie zum Beispiel der Fujitsu MB84256. Er ist mit Geschwindigkeiten bis zu 50 ns erhältlich. Viel schnellere Bauelemente bieten abnehmende Gegenleistungen, da die Verzögerungen der Kreuzschienen-Chips des Realizer-Systems beginnen zu überwiegen.

Dynamische Speicherbauelemente werden nicht verwendet, da sie regelmäßig aufgefrischt werden müssen, was Probleme in dem Realizer-System darstellen würde. Wenn der Eingabeentwurf dynamischen Speicher benötigt, enthält er vermutlich Auffrischungslogik. Da jedoch der realisierte Entwurf nicht mit 100% der Entwurfsgeschwindigkeit arbeitet, könnte es nicht erfolgreich sein, den Entwurf das Auffrischen durchführen zu lassen. Tatsächlich ist es wünschenswert, den Betrieb des Entwurfes vollständig anzuhalten beim Debuggen. Oder der Entwurf ist Teil eines Systems, das zur Auffrischung von einem anderen Element abhängt, das nicht in dem Eingabeentwurf enthalten ist. Schließlich, wenn der Entwurf statischen Speicher benötigt, würde das Auffrischen eines dynamischen Entwurfsspeichers unpraktisch sein. Ein statischer Speicher kann dynamischen Speicher realisieren in dem Entwurf, indem die Wiederauffrischungszyklen ignoriert werden können. Der Entwurfsspeicher wird daher mit statischen Bauelementen implementiert.

1.3.1.2 Verwendung von Logikchips zur Verbindung von RAMs mit der Kreuzschiene

Idealerweise würde ein einzelner Logikchip dazu verwendet, um RAMs mit der X-Ebenen-Kreuzschiene zu verbinden mit genügend Pins, um alle RAM-Signal-Pins, ebenso wie alle L-X-Verbindungspfade zu verbinden. Praktische Realizer-System-Speichermodule benötigen viel zu viele Pins für einen einzigen Logikchip. Beispielsweise werden 2 Bänke von acht 32K mal 8 Bits RAMs in einem Modul mit 128 L-X-Pfaden verwendet. Jede RAM-Bank würde 15 Adress-Pins, 8 Schreib-Enable-Pins und 64 Daten-Pins enthalten. Zwei Bänke und die L-X-Pfade würden 302 Pins benötigen, zuzüglich der Pins für den Host-Interface-Bus. Dies übertrifft die Pin-Anzahl von zur Verfügung stehenden Logikchips um einen Faktor zwei. Mehr als ein Logikchip muss verwendet werden. Die hier beschriebene Architektur verwendet eine Anzahl von kleinen Logikchips, denen spezialisierte Funktionen gegeben sind, einige für die Adressierung und die Steuerung, andere für die Datenpfade.

1.3.1.2.1 Speicheradress-Logikchips

Adressen und Kontroll-Logikchips werden mit "MA0" und "MA1" in 23 markiert. Die RAMs sind in Bänke aufgeteilt, von denen jede durch einen MA-Chip kontrolliert wird. Es gibt ebenso viele MA-Chips wie die maximale Anzahl von separaten Entwurfsspeichern, die durch das Modul realisiert werden können. Jeder hat seinen eigenen Satz von L-X-Pfaden zu der Kreuzschiene, ebenso viele Pfade wie für die Adress- und Steuerleitungen einer Bank benötigt werden. MA0 und MA1 verwenden getrennte Sätze von Pfaden. Beispielsweise erlauben zwei MA-Chips, die jeweils mit der Hälfte der RAMs verbunden sind, zwei unabhängige Speicher zu realisieren. Wenn ein größerer Speicher realisiert werden soll, werden die Adress- und Kontrollnetze mit MA-Chips verbunden unter der Verwendung von beiden Sätzen von L-X-Pfaden. Jeder MA-Chip steuert den Adresseingang von allen RAMs in seiner Bank, die miteinander verbunden sind, in einem einzigen Bus. Jeder MA-Chip kontrolliert individuell die Kontrolleingänge der RAMs, um zu ermöglichen, dass Daten nur in die adressierten RAM(s) geschrieben werden. Schließlich ist jeder MA-Chip mit dem Host-Interface-Bus verbunden für eine Zugriffsmöglichkeit und mit einem Kontrollbus für alle Logikchips dieses Speichermoduls.

24 zeigt detaillierter, wie ein MA-Chip mit der X-Ebenen Kreuzschiene und mit den RAM-Chips verbunden ist. Der MA-Chip ist gemäß der Logik und der gezeigten Datenpfade konfiguriert. Die volle Adresse erreicht den MA-Chip von der Kreuzschiene. Normalerweise (wenn das Bus-Interface inaktiv ist), wird ein Teil der Adressierungs-Bits, die der Anzahl der RAM-Adressen-Bits entsprechen, weitergeleitet, um den RAM in der Bank, die durch diesen MA-Chip gesteuert wird, zu adressieren. Die anderen Adressen-Bits sind die Decoderlogik des Entwurfs, die die Schreib-Enable-Signale für jeden RAM steuert. Diese Logik wird gemäß der Konfiguration konfiguriert, die für diesen Entwurfsspeicher benötigt wird. Wenn beispielsweise der Entwurfsspeicher dieselbe Bitbreite hat wie einer der RAMs, wird, wenn der Entwurf sein Schreib-Enable erklärt, nur ein einzelnes RAM-Schreib-Enable erklärt werden, gemäß der Adressierungs-Bits. Wenn der Entwurfsspeicher doppelt so breit ist wie ein Chip, wird ein Paar von RAM-Schreib-Enables erklärt werden, und so weiter.

Wenn ein Entwurfsspeicher mit mehr als einem Schreib-Enable gewünscht ist, das jeweils eine Teilmenge der Speicherdaten-Pfadbreite kontrolliert, können verschiedene Entwurfsnetze des Schreib-Enables verwendet werden, von denen jedes in der oben beschriebenen Weise arbeitet mit einer passenden Konfiguration der Decoder-Logik in den MA- und MD-Chips. Dies ist Gegenstand der Verfügbarkeit von L-X-Pfaden in den MA-Chip und Kontrollbuspfaden in die MD-Chips.

Die Bus-Interface-Logik ermöglicht dem Host, auf diesen RAM über den Host-Interface-Bus zuzugreifen. Wenn dieser Satz von RAMs durch den Bus adressiert wird, schaltet das Bus-Interface den Adress-Multiplexer ("mux") darauf um, die RAMs mit ihrer Adresse zu adressieren. Wenn der Host auf einen der RAMs schreibt, sendet die Bus-Interface-Logik ein Signal an die Decoder-Logik, das die Adressierungs-Bits, die die RAMs nicht treiben, benutzt, um das geeignete RAM-Schreib-Enable zu setzen.

Schließlich werden einige Signale benötigt, um die Datenpfade in die MD-Chips zu steuern. Da die MD-Chips nicht alle mit den gleichen L-X-Pfaden wie die MA-Chip(s) verbunden sind, kann es sein, dass sie keinen Zugriff auf die Adressen- und Kontrollsignale des Entwurfs haben. Ein Kontrollbus ist mit allen MA- und MD-Chips verbunden, um zu ermöglichen, dass diese Signale und Bus-Interface-Kontrollsignale an die MD-Chips gesandt werden.

1.3.1.2.2 Speicherdatenpfad-Logikchips

MD-Chips handhaben die Datenpfade gemäß einer Bit-weisen Organisation. Multi-Bit-Bus-Datenpfade werden in dem Realizer-System verbunden, indem sie Bit-weise über die Kreuzschiene verteilt werden. Die Busse werden über die XChips verteilt, mit einem oder zwei Bits pro Chip. Die MD-Chips werden in einzelne Bits aufgeteilt, um die Verbindung dieser Busse zu erleichtern. Jeder MD-Chip ist mit demselben Bit oder denselben Bits von jedem RAM in allen Bänken verbunden und mit einer Teilmenge der Xchips. Das Zusammenbringen aller gleichartiger RAM-Bits in dem MD-Chip ermöglicht Flexibilität bei der Konfiguration von Entwurfsspeichern mit verschiedenen Bitbreiten und -größen. Entwurfsspeicher werden in verschiedenen Vielfachen der RAM-Breite realisiert durch die passende Konfigurierung der Logik und der Datenpfade in den MD-Chips.

Wenn "n" MD-Chips und "M"-XChips vorhanden sind, ist jeder MD-Chip mit M/n verschiedenen XChips verbunden. Jedes Datenbit benötigt zwei L-X-Pfade:

entweder einen DI- und einen DO-Pfad für getrennte I/O-Konfigurationen oder den Summeneingang und das Summenergebnis für gemeinsame I/O-bidirektionale Konfigurationen, aufgrund der Kreuzschiene-Summierungs-Verbindungskonfiguration. Daher hat jeder MD-Chip zumindest 2·M/n L-X-Pfade. Zusätzliche Pfade können darüber hinaus hinzugefügt werden und können mit den L-X-Pfaden des MA-Chips überlappen. Die Anzahl der MD-Chips, RAMs und RAM-Bitbreiten werden ausgewählt, um diese Beschränkungen und Kapazitätsbeschränkungen zu erfüllen, um effizient die Anzahl der Pins in den Logikchips, die für die MD-Chips verwendet werden, zu verwenden und um gerade herauszukommen.

Der statische RAM-Chip des Industriestandards hat eine gemeinsame I/O-Struktur mit bi-direktionalen Daten-Pins (DQ bezeichnet), die für die Dateneingabe und eine Tri-State-Datenausgabe verwendet werden. Er hat Adresseneingangs-PINs (ADDR) und ein Schreib-Enable-Pin (WE). Die Ausgang-Enable-Pins und Chipauswahl-Pins sind in dieser Implementierung dauerhaft freigeschaltet, so dass die Ausgangs-Pins durch die Schreibfreigabe kontrolliert werden. Bei einer Sperrung liest der RAM und die adressierten Daten werden auf den DQ-Pins ausgegeben. Wenn das Schreib-Enable gesetzt ist, werden Daten auf den DQ-Pins empfangen. Auf der Abfallflanke des Setzens werden die Daten in den Adressenort geschrieben. Das Standardbauelement verlangt lediglich Daten beim Aufbau der Abfallflanke des Schreib-Enable und erfordert null Haltezeit, so dass die Schreib-Enable-Kontrolle der Datenpfade akzeptabel ist.

Wenn der Entwurfsspeicher ein gemeinsames I/O verlangt, das heißt ein Tri-State-Netz in dem Entwurf, das unter Verwendung der Kreuzschienen-Summierungskonfiguration realisiert wird, gilt folgendes: die Treiber-Pins sind separat durch ihre Enable-Signale gesteuert und werden in ein summierendes OR-Gatter gesammelt, das die empfangenen Pins treibt. Die RAM DQ-Daten-Pins sind durch Logik und durch Datenpfade miteinander verbunden, die in den MD-Chips, wie in 25 gezeigt, konfiguriert sind (ein Bit, Bit "n" ist dargestellt, andere sind ähnlich).

Jeder MD-Chip (MD "n" gezeigt) wird konfiguriert mit einem Enable-Gatter, das ein Summierungsgatter in dem XChip treibt, ebenso wie ein LChip ein Enable-Gatter hat, das ein Summierungsgatter in dem XChip treibt, wenn es einen Tri-State-Treiber hat. Wenn die Eingabenetze des Entwurfsspeichers einen freigeschalteten Ausgang haben und das Schreiben gesperrt ist, steuert die Logik den Ausgang des RAMs in das Summierungsgatter und sperrt den empfangenen Treiber. Andernfalls wird der Netzwert von dem Summierungsgatter in den RAM getrieben und ermöglicht das Schreiben, wenn das Schreib-Enable gesetzt ist. Es ist zu beachten, dass die Signale des Schreib-Enables und des Ausgang-Enables des Entwurfes vom MA-Chip kommen (über den Kontrollbus), wie oben diskutiert. Die Bus-Interface-Logik ist nicht gezeigt.

Wenn der Entwurfsspeicher separaten I/O benötigt, wird er vom gemeinsamen I/O des SRAMs, wie in 26 gezeigt, extrahiert. Der Datenausgang spiegelt immer den Zustand des SRAM-Daten-Pins wieder, wenn das Ausgang-Enable gesetzt ist. Wenn das Schreib-Enable gesetzt ist, werden die Daten auf die DQ-Pins des SRAM getrieben.

Die obigen Figuren zeigen nur einen RAM, der mit einem Entwurfs-Datenbit verbunden ist. Häufig wird es mehrere geben, wenn die Anzahl der Orte in dem Entwurfsspeicher ein Vielfaches der Größe eines einzelnen RAM-Chips ist. In solchen Fällen wird der MD-Chip konfiguriert, wie in 27 dargestellt.

Ein DQ-Pin von jedem der verschiedenen RAMs ist mit diesem MD-Chip verbunden. Niedrige Adressen-Bits und die Entwurf- und Bus-Interface-Kontrollsignale werden auf die MD-Chips über den Kontrollbus vom MA-Chip übertragen. Beim Lesen wählen die niedrigen Bits der Adresse einen der RAM DQ-Ausgänge über einen Multiplexer aus. Der gewählte Ausgang wird durch das Ausgangs-Enable des Entwurfs gesteuert, um den Datenausgang des Entwurfsspeichers zu bilden, wie in dem vorangegangenen Fall. Wenn der Entwurf sein Schreib-Enable setzt, werden die Daten auf einen der RAM DQ-Eingänge getrieben, in dem ein Treiber freigegeben wird. Die Decodierlogik, die von den niedrigen Adress-Bits und dem Schreib-Enable-Signal des Entwurfs getrieben wird, wählt den geeigneten Treiber, der getrieben werden soll, aus. Es ist darauf hinzuweisen, dass das Schreib-Enable des RAM-Chips durch den MA-Chip getrieben wird.

27 zeigt eine separate I/O-Konfiguration. Eine gemeinsame I/O-Konfiguration wäre ähnlich, wobei die Dateneingabe durch das Kreuzschienen-Summierungsgatter getrieben würde und die Datenausgabe durch das Ausgangs-Enable und das Schreib-Enable gesteuert würde und durch das Treiben eines Summierungs-Gatter-Eingangs, wie in 25.

Wenn das Host-Interface auf diesen Speicher über den Host-Interface-Bus zugreift, erzeugt die in dem MA-Chip konfigurierte Logik Steuersignale für einen Buszugang, die vom MA über den Kontrollbus transportiert werden. Wenn der Bus liest, treibt ein Bus-Lese-Enable die Daten, die von dem adressierten RAM durch den Multiplexer ausgewählt worden sind, auf das Host-Interface-Bus-Datenbit, das diesem MD-Chip entspricht. Wenn der Bus schreibt, werden Daten von dem Busdaten-Bit auf die Treiber durch einen anderen Multiplexer umgeschaltet. Es wird auf den DQ-Pin des ausgewählten RAMs durch denselben Prozeß getrieben, wie das normale Schreiben.

Es ist zu beachten, dass diese Diskussion MD-Chip-Konfigurationen mit einem einzelnen Daten-Bit aus einer einzigen Datenpfadbreite des Entwurfsspeichers gezeigt hat. Wenn durch die Konfiguration des Entwurfsspeichers und die Anzahl der MD- und RAM-Chips in dem Modul es notwendig ist, kann mehr als ein Datenbit in jedem MD-Chip erscheinen, indem einfach die Datenpfade geeignet vervielfacht werden. Zusätzlich kann mehr als ein Entwurfsspeicher implementiert werden unter der Verwendung eines gemeinsamen Satzes von MD-Chips, indem die obigen Datenpfade und Kontrolleitungen vervielfacht werden, um mehrere Speicher zu implementieren.

Da einige L-X-Pfade in das Speichermodul nur mit MA-Chips verbunden sind und einige nur mit MD-Chips verbunden sind, wird der Entwurfs-Konversions-Verbindungsvorgang so aufgebaut, um nur Netze untereinander zu verbinden, die mit Entwurfsspeichern unter der Verwendung von geeigneten L-X-Pfaden verbunden sind.

1.3.1.3 Entwurfskonversion für Entwurfsspeicher

Entwurfsspeicher werden in dem Eingabeentwurf spezifiziert durch die Verwendung von RAM-Grundelementen des Entwurfsspeichers, die einer der verfügbaren Konfigurationen in der ursprünglichen Entwurfsdatei entsprechen. Das Verfahren zur Entwurfskonversion basiert auf einem Satz von vordefinierten partiellen Netzlistendateien, jeweils für einen der Logikchips des Speichermoduls mit Befehlen für die gesamte Logik und alle Datenpfade, die konfiguriert werden sollen für die spezifizierte besondere Speicherkonfiguration, wie oben gezeigt.

Die vordefinierten Dateien sind komplett mit Ausnahme der Spezifikationen der I/O-Pinnummern für die I/O-Pins des Moduls, die dazu verwendet werden, um die Adresse des Entwurfsspeichers, die Daten und Steuerverbindungen mit der Verbindung zu verbinden. Das Verfahren ist wie folgt:

Normale Verfahren werden für die Entwurfskonversion verwendet, wie im Abschnitt Entwurfskonversion beschrieben, mit den besonderen Ausnahmen für den Entwurfsspeicher wie folgt:

  • – Der Entwurfsleser liest die Speicher-Grundelemente für den spezifizierten Vektor-Speicher in seine Entwurfs-Datenstruktur. Die Daten, die spezifizieren, welche Konfiguration zu verwenden ist, werden im Datenstruktureintrag für den Speicher gespeichert.
  • – Die Konversionsstufe überprüft, dass die Konfiguration zur Verfügung steht und die Pins korrekt der Konfiguration entsprechen.
  • – Der Partitionierer wird durch den Anwender angewiesen, auf welchen L-Chip-Positionen auf welchen Karten Speicher-Module installiert sind. Auf der Grundlage von diesen Daten wählt er ein Speicher-Modul für den Speicher gemäß seines normalen Partitionierungs-Algorithmus aus. Alternativ dazu kann der Anwender den Speicher einem besonderem Modul zuweisen, indem er diesen Daten die Grundelemente in der ursprünglichen Entwurfsdatei zuweist, die durch den Entwurfsleser in dem Grundelementeeintrag des Speichers mit eingeschlossen sind.
  • – Der Verbinder weist daraufhin Netze und Pins, die mit dem Speicher verbunden sind, spezifischen L-X-Verbindungspfaden zu. Er tut dieses unter den Beschränkungen, dass die Adressen- und Kontrollnetze nur bestimmten Pfaden zugeordnet werden, die mit dem MA-Chip verbunden sind und dass Datennetze nur Pfaden zugeordnet werden können, die mit dem MD-Chip verbunden sind. Diese Begrenzungen werden während des Verbindens angewandt, wenn die Fähigkeit jedes Satzes von Verbindungs-Chips festgestellt wird, das Netz zu verbinden, wobei solche Netze zurückgewiesen werden und solche Pfade nicht verwendet werden, die nicht mit dem benötigten MA- oder MD-Chip verbunden sind.
  • – Wenn die Netzlistendateien für jeden Logikchip im Realizer-System ausgeschrieben werden, wird jede Netzverbindung des Entwurfsspeichers aufgelistetdurch:
  • 1) Festlegen, welcher MA oder MD mit dem Pfad, der für das Grundelement durch den Verbindungsvorgang ausgewählt worden ist, verbunden ist
  • 2) Ableiten der Nummer des I/O-Pins des Logikchips aus der Pfadnummer und der MA/MD-Chip-Nummer unter Verwendung einer Prozedur, die ähnlich ist zu der beschriebenen zum Ableiten der gewöhnlichen I/O-Pinnummern der Logikchips.
  • 3) Auswahl einer vordefinierten Adressen-, Daten- oder Steuerverbindung von den Verbindungen in diesem MA/MD-Chip, die bisher noch nicht anderen Netzen zugewiesen worden sind.
  • 4) Anhängen eines Befehls an die Netzlistendatei für diesen Logikchip, der spezifiziert, dass die I/O-Pinnummer des Logikchips für die Verbindung zu der vordefinierten Entwurfsspeicherverbindung verwendet wird.
  • – Die Netzlistendateien werden in Konfigurations-Bitmuster verarbeitet durch das Netzlisten-Konversionswerkzeug und in die Logikchips geladen, genauso wie die Netzlistendateien für LChips und XChips.

1.3.1.4 Ein spezieller Speichermodulentwurf

28 zeigt den Entwurf des Speichermoduls, der in der bevorzugten Ausführungsform verwendet wird. Es ist zu beachten, dass er gemäß der oben beschriebenen und in 23 gezeigten Organisation aufgebaut ist. Er ist entworfen, um in einen LChip-Sockel anstelle eines XC3090 LCA-Logikchips gesteckt zu werden. Es gibt daher 128 L-X-Pfade, 4 Pfade zu jedem der 32 XChips.

32K mal 8 Bit statischer RAM-Chips mit gemeinsamen I/O werden in zwei Bänken mit jeweils 8 RAMs verwendet. Jede Bank hat ihren eigenen MA-Chip, einen XC2018 LCA. Jeder MA-Chip steuert seine RAMs mit 15 Adresspfaden und 8 Schreib-Enables. Er ist mit dem für alle MA- und MD-Chips in dem Modul gemeinsamen Kontrollbus und mit dem Host-Interface-Bus verbunden. Die übrigen Pins sind mit der Kreuzschiene verbunden. 28 L-X-Pfade, von denen jeder sich zu einem verschiedenen XChip erstreckt, sind vorhanden. MA-Chip 0 verwendet einen Satz von Pfaden, Pfad 0, und MA1 verwendet Pfad 1, und erlaubt dadurch getrennte Adress- und Steuernetze für zwei unabhängige Entwurf-RAMs. Nur aufgrund der PIN-Beschränkungen in dem XC2018 werden weniger als die vollen 32 L-X-Pfade verbunden. Während der Entwurfskonversion werden die Pfadelemente, die den fehlenden L-X-Pfaden auf diesem Modul entsprechen, in der Verbindungs-L-X-Pfadtabelle als nicht zur Verfügung stehend markiert, so dass keine Netze durch sie verbunden werden.

Acht MD-Chips, alle XC2018 LCAs werden verwendet. Da es 32 XChips gibt, ist jeder MD-Chip mit 32/8 = 4 verschiedenen XChips verbunden (entsprechend dem oben beschriebenen Verfahren). Jeder Chip hat 2·M/n = 8 Pfade, die für die Daten-Bits des Entwurfsspeichers verwendet werden, zwei für jeden XChip. Für jeden XChip sind zusätzlich zwei Pfade vorgesehen, die ermöglichen, dass das Modul als ein 128 Bit-Vektor-Speicher verwendet wird, wie unten diskutiert.

Der Host-Interface-Bus, der in der bevorzugten Ausführungsform implementiert ist, wird als RBUS bezeichnet, und ist mit allen LChip-Positionen über zusätzliche Pins verbunden und wird in dem Host-Interface-Abschnitt beschrieben.

Fünf verschiedene Entwurfsspeicherkonfigurationen stehen in diesem Modul zur Verfügung. In der folgenden Übersicht und in 28 bezeichnet "Pfad 0" einen Satz von L-X-Pfaden, einen von jedem XChip, "Pfad 1" bezeichnet einen anderen Satz, usw. • 1 Speicher, 512K mal 8: 19 Adressen und 2 Steuerungen (WE, OE) über die L-X-Pfade 0 & 1 (verdoppelt um sowohl MA0 als auch MA1 zu erreichen),

16 Daten (DI/DO oder Treiber/Empfänger) über die L-X-Pfade 2 & 3.

Jeder MD-Chip hat ein Daten-Bit, verbunden mit 16 RAMs.
• 1 Speicher, 256K mal 16: 18 Adressen und 2 Steuerungen über die L-X-Pfade 0 & 1,

32 Daten über L-X-Pfade 2 und 3.

Jeder MD-Chip hat zwei Daten-Bits, jeweils verbunden mit 8 RAMs.
• 1 Speicher, 128K mal 32: 17 Adressen und 2 Steuerungen über L-X-Pfade 0 und 1

64 Daten über L-X-Pfade 2 und 3.

Jeder MD-Chip hat vier Daten-Bits, von denen jeder mit 4 RAMs verbunden ist.
• 2 Speicher, 256K mal 8: jeder hat 18 Adressen und 2 Steuerungen über L-X-Pfad 0 für einen Speicher (MA0) und Pfad 1 für den anderen (MA1).

Jeder hat 16 Daten über die Pfade 2 und 3.

Jeder MD-Chip hat ein Daten-Bit, das mit 8 RAMs verbunden ist für jeden Speicher.
• 2 Speicher, 128K mal 16: jeder hat 17 Adressen und 2 Steuerungen über den L-X-Pfad 0 für einen Speicher und Pfad 1 für den anderen, jeder hat 32 Datenleitungen über die Pfade 2 und 3.

Jeder MD-Chip hat zwei Daten-Bits, die mit 4 RAMs verbunden sind, für jeden Speicher.

Der Kontrollbus besteht aus 12 Pfaden, die mit allen MA- und MD-Chips gemeinsam verbunden sind. 12 Pfade werden benötigt, um die maximale Kontroll-Konfiguration zu unterstützen, die aus 3 Adress-Bits, den Schreib- und Output-Enable-Signalen des Entwurfs, für jeden der zwei 256K mal 8 Bit-Entwurfs-Speichern besteht, zuzüglich der Bus-Schreib-Enable- und Bus-Lese-Enable-Signale.

1.3.2 Stimulation und Antwort

Viele Verwendungen des Realizer-Systems hängen davon ab, dass der Hostcomputer Stimulations-Signale an den Entwurf aussendet, und Antwort-Signale vom Entwurf aufnimmt. Wenn dies in einer Batch-Form durchgeführt wird, d. h. dass gleichzeitig große Mengen von Signalen ausgesendet und empfangen werden, werden Vektor-Speicher verwendet. Wenn nur ein Signal zu einem Zeitpunkt ausgesendet wird, werden Stimulatoren und Abtaster verwendet.

1.3.2.1 Vektor-Speicher zum Liefern von Stimulation

Es ist manchmal nötig, einen kontinuierlichen und wiederholbaren Fluss von Stimulationen an einen Satz von Netzen in dem realisierten Entwurf zu liefern, zur sich mit hoher Geschwindigkeit wiederholenden Anwendung von Test-Vektoren, beispielsweise in einer Stimulationsanwendung. Dies geschieht in dem ein Speicher mit den Netzen in dem realisierten Entwurf verbunden wird, die Stimulations-Vektoren von dem Hostcomputer in den Speicher geschrieben werden, und schließlich der Speicher einmal oder mehrfach ausgelesen wird, um die Stimulation an den Entwurf zu schicken. Da eine kontinuierliche lineare Serie von Speicherorten ausgelesen wird, wird der Adressenstrom durch einen binären Zähler geliefert. 29 zeigt ein Mittel zum Erzeugen eines solchen Stimulations-Vektor-Speichers.

Ein regelmäßiges Takt-Signal, ECLK, steuert den Vorgang. ECLK arbeitet in einem Zyklus, d. h. in einem hohen und einem niedrigen Zustand, einmal für jeden Stimulations-Vektor. Ein binärer Zähler liefert die Sequenz der Adressen. Wenn das ECLK hoch gebracht wird, zählt der Zähler hoch bis zur Adresse des nächsten Stimulations-Vektors, der von dem RAM während des ECLK-Zykklus gelesen wird. Wenn das ECLK das nächste mal hoch gebracht wird, wird der gerade gelesene Stimulations-Vektor-Wert in einen D-Flip-Flop getaktet. Durch den Ausgang des Flip-Flops wird das Netz mit dem Stimulations-Vektor-Wert stimuliert. Der Flip-Flop liefert einen klaren Übergänge zwischen Vektoren, was notwendig ist, da der RAM-Ausgang während des Lese-Zyklus fluktuieren kann, bevor er sich auf den korrekten Wert stabilisiert. Dieser Vorgang wird wiederholt, um die Serie von Stimulations-Vektoren dem realisierten Entwurf zu präsentieren.

Diese Struktur wird wiederholt um Stimulation an viele Netze zu liefern. Das Interface für den Hostcomputer, das dazu verwendet wird, um die Stimulations-Vektoren in den/die RAM(s) zu schreiben, ist der Klarheit wegen nicht dargestellt, wird jedoch in den zitierten detaillierteren Figuren weiter unten gezeigt.

1.3.2.2 Vektor-Speicher zum Aufnehmen der Antwort

In entsprechender Weise besteht eine Art des Aufnehmens einer Antwort von dem realisierten Entwurf darin, einen kontinuierlichen Strom von Abtastungen oder Vektoren von einem Satz von Netzen aufzunehmen, wie ein Logik-Analysator von einem tatsächlichen Hardware-Bauelement. Dies geschieht, in dem ein Speicher mit Netzen in dem realisierten Entwurf verbunden wird, sequentielle Vektoren von den Netzen in den Speicher geschrieben werden, wenn der realisierte Entwurf betrieben wird, und schließlich die aufgenommenen Antwort-Vektoren zurück in den Hostcomputer zur Analyse gelesen werden. Da eine kontinuierliche lineare Serie von Speicherorten ausgelesen wird, wird der Adressenstrom von einem binären Zähler wie oben geliefert. 30 zeigt ein Mittel zum Erzeugen solch eines Antwort-Vektor-Speichers.

Wie beim Stimulations-Mechanismus steuert ein Taktsignal, ECLK, den Vorgang. Das ECLK wird zyklisch betrieben, einmal für jeden Antwort-Vektor. Der binäre Zähler liefert die Sequenz der Adressen. Wenn der ECLK hoch gebracht wird, zählt der Zähler hoch bis zur Adresse des nächsten Vektors. Wenn der ECLK niedrig gemacht wird, wird der Antwort-Vektor durch den Tri-State-Treiber auf den RAM DQ-Daten-Pin gegeben, und der RAM wird freigeschaltet zum Schreiben. Wenn der ECLK wieder hoch gebracht wird, wird der Wert in Speicherstelle geschrieben, das RAM-Schreib-Enable und das Tri-State-Treiber-Enable werden gesperrt, und der Zähler schreitet fort zur Adresse für den nächsten Vektor. Dieser Vorgang wird wiederholt, um die Serie von Antwort-Vektoren von dem realisierten Entwurf aufzunehmen.

Diese Struktur wird wiederholt, um Stimulation an viele Netze zu liefern. Das Interface für den Hostcomputer, das dazu verwendet wird, um die Stimulations-Vektoren in den/die RAM(s) zu schreiben, ist der Klarheit wegen nicht dargestellt, ist jedoch in den weiter unten zitierten detaillierten Figuren gezeigt.

Typischerweise wird der realisierte Entwurf auch stimuliert um diese Antworten zu erzeugen. Wenn die Stimulation von einem Stimulations-Vektor-Speicher kommt, werden beide Vektor-Speicher das gleiche ECLK-Signal verwenden. Das ECLK-Signal sollte lang genug hoch sein, damit die neue Adresse vom Zähler geliefert wird, der RAM adressiert wird, die Daten gelesen werden, und an die Stimulations D-Flip-Flop-Eingänge geliefert werden. Es sollte daraufhin lang genug niedrig sein, damit die Stimulation auf den realisierten Entwurf einwirken kann, und damit sich alle Anworten auf diese Einwirkung stabilisieren, und damit diese Anworten in den RAM geschrieben werden. Wenn die Stimulation von wo anders kommt, sollte das ECLK-Signal des Antwort-Vektor-Speichers mit dem realisierten Entwurf synchronisiert werden, um die Antwort-Netze korrekt abzutasten.

1.3.2.3 Vektor-Speicher zur Stimulation und Antwort

Es ist möglich, die Merkmale der Stimulation und Antwort-Vektor-Speicher, die oben definiert worden sind, in einem Stimulation- und Antwort-Vektor-Speicher-System zu kombinieren, wie in 31 dargestellt. RAM-Bits können frei entweder Stimulation oder Antwort zugeordnet werden, selbst wenn sie auf demselben RAM-Bauelement vorhanden sind, da die Stimulations-Lesefunktion stattfindet, wenn der ECLK hoch ist, und die Antwort-Lesefunktion folgt wenn der ECLK niedrig ist. Indem sowohl der Tri-State-Antwort-Treiber als auch der Stimulations D-Flip-Flop-Eingang mit demselben RAM DQ-Daten-Pin verbunden werden, kann ein Bit sowohl für die Stimulation als auch für die Antwort verwendet werden. Ein wichtiger Unterschied zwischen dem einfachen Stimulations-Vektor-Speicher und dem kombinierten Stimulation/Antwort-Vektor-Speicher besteht darin, dass der Stimulations-Vektor nur einmal aus dem Speicher ausgelesen werden kann, da an jede Speicherstelle während der niedrigen Hälfte des ECLK-Zyklus geschrieben wird, selbst wenn das RAM-Bit nur zur Stimulation verwendet wird. Dies kann nur verhindert werden, wenn alle Bits eines RAM-Chips für die Stimulation verwendet werden, und das Schreib-Enable nicht durch den ECLK gesetzt ist.

Die vorangegangenen Figuren zeigen die Realisierung von Vektor-Speichern im allgemeinen. Zusätzlich zeigen die gepunkteten Linien wie die logischen Funktionen des Vektor-Speichers durch die Konfiguration von Logikchips ("MA-Chip" und "MD"n"") realisiert werden können, die in passender Weise mit den RAM-Chips und mit der Realizer-Verbindung (XChips) verbunden sind.

Vektor-Speicher und die Konversion von Stimulation von Software in elektrischer Form und zurück, ist detailliert im U.S.Patent 4,744,084 beschrieben, dessen Offenbarung hiermit durch Referenz mit aufgenommen ist.

1.3.2.4 Vektor-Speicher zur Fehler-Simulation

Das Realizer-Fehler-Simulations-System wird in dem Abschnitt zu diesem Thema diskutiert. Bei der Fehler-Simulation wird die Antwort nicht in Vektor-Speichern aufgenommen, sondern wird statt dessen mit vorbestimmten Antworten von guten Schaltungen verglichen, durch ein Fehler-Antort-Vektor-Speicher. Dabei handelt es sich um denselben einfachen Stimulations-Vektor-Speicher, wie oben gezeigt, mit den folgenden Zusätzen: anstatt das Netz mit den Flip-Flop-Ausgängen der MD-Chips zu treiben, werden die Ausgänge gegen die Werte des Netzes durch ein XOR-Gatter verglichen. Das XOR-Gatter ist mit einem gesetzten Flip-Flop verbunden, der von dem ECLK getaktet wird, so dass, falls es einen hohen Wert annimmt, der ein Unterschied zwischen dem Netz und dem Speicher anzeigt, der Flip-Flop gesetzt wird. Dieses gesetzte Flip-Flop kann vom Host durch das Host-Interface ausgelesen werden, um zu sehen, ob ein Unterschied detektiert worden ist.

1.2.3.5 Verbinden von Vektor-Speicher mit dem realisierten Entwurf

Viele Wege zum Verbinden des Vektor-Speichers mit dem realisierten Entwurf sind möglich. Realizer-Systeme können gebaut werden, bei denen der Vektor-Speicher direkt mit einem oder mehreren Logikchips verbunden ist, und/oder mit einem oder allen der Verbindungspfade verbunden ist. Beispielsweise können Vektor-Speicher auf der logischen Karte zusammen mit den LChips und XChips installiert werden, und mit den X-Y-Pfaden verbunden werden, die die Karte verlassen. Eine andere Möglichkeit ist es, Vektor-Speicher auf der YChip-Karte der Y-Ebenen-Kreuzschiene zu installieren, die mit den X-Y- und Y-Z-Pfaden verbunden ist.

Eine andere Technik besteht darin, den Vektor-Speicher am Ort eines LChips zu installieren, anstelle eines logischen Chips, und verbunden mit den L-X-Pfaden die den LChip-Platz bedienen. In diesem Fall, sind diese L-X-Pfade nur zwischen dem Vektor-Speicher. und dem XChip verbunden. Die Verbindung zu Netzen in dem realisierten Entwurf wird durch das Konfigurieren der XChips erreicht, um den Vektor-Speicher mit den Netzen zu verbinden, wenn sie sich durch die X-Ebenen-Verbindung erstrecken. Das Ersetzen von Logikchips mit Vektor-Speicher-Modulen kann auf eine modulare Art und Weise durchgeführt werden, und ermöglicht, die Realizer-Hardware mit so viel oder wenig Vektor-Speichern zu konfgurieren wie notwendig. Da die Realizer-Entwurf-Speichermodule auch anstelle von einem oder mehreren Logikchips an LChip-Orten installiert werden, ermöglicht die Verwendung dieser Technik, dass die gemeinsamen Hardware-Speichermodule als ein Entwurf-Speichermodul oder als ein Vektor-Speicher-Modul verwendet werden. Die Funktionswahl wird durch das Konfigurieren der Logikchips in dem Speichermodul und der geeigneten Realizer-System-Verbindungen durchgeführt. Dies ist die Vektor-Speicher-Architektur, die in der bevorzugten Ausführungsform verwendet wird.

1.3.2.6 Eine spezifische Konstruktion des Vektor-Speichers

In der bevorzugten Ausführungsform wird ein gemeinsames Speicher-Modul sowohl für Entwurfs-Speicher- als auch Vektor-Speicher-Anwendungen verwendet. Seine allgemeine Architektur und Konstruktion werden in dem Abschnitt über Entwurfs-Speicher diskutiert, und werden hier nicht diskutiert werden. Die Details, wie das Modul zur Anwendung als Vektor-Speicher konfiguriert wird, folgen.

Die folgenden zwei Figuren zeigen die Art, wie Logik in den MA- und MD-Chips für einen kombinierten Stimulations/Antwort-Vektor-Speicher konfiguriert werden, mit einem vollen Lese/Schreib-Zugriff über das Host-Interface. Wenn das Host-Interface inaktiv ist, findet der Gesamtbetrieb, gemäß der gleichen Techniken statt, wie in den vereinfachten obigen Beispielen gezeigt worden sind.

In 32 wird das ECLK-Signal, das durch den Host über das Host-Interface erzeugt wird, über die Verbindung mit dem/den MA-Chip(s) verbunden. Es taktet den Adresszähler, der dafür in jedem MA-Chip konfiguriert ist. Da es mehr als einen MA-Chip in einem Modul gibt, die jeweils eine Teilmenge der RAMs steuern, hat jeder MA-Chip eine eigene Kopie des Vektor-Speicher-Adresszählers. Da alle Zähler die gleichen Kontrollsignale erhalten (ECLK und das Reset-Signal vom Bus-Interface) werden sie alle die gleiche Adresse ausgeben. Normalerweise (wenn das Bus-Interface inaktiv ist), wird die Adresse vom Zähler ausgegeben, um die RAMs zu adressieren. Wenn das ECLK-Signal niedrig ist (die Antwort-Schreibphase), setzt die Decoder-Logik alle RAM-Schreib-Enables, wie in den vorherigen Beispielen. Das ECLK-Signal wird ebenfalls auf den Kontroll-Bus gelegt, um die Logik auf den MD-Chips zu treiben.

Die MD-Logik behandelt die Stimulation und Antwort-Vektor-Werte selbst (33). Normalerweise (wenn das Bus-Interface inaktiv ist), lesen die RAMs, wenn das ECLK-Signal hoch ist, die Stimulations-Vektor-Werte und wenn das ECLK-Signal fällt, werden sie in Flip-Flops getaktet, einer für jedes Netz das stimuliert werden soll (einer gezeigt), wie oben. Die Stimulation wird dann auf die Netze über die XChips der Verbindung geleitet. Wenn das ECLK-Signal niedrig ist, werden alle Tri-State-Enables (e0, e1 .. eN) gesetzt, um die Antwort-Werte die von den Netzen über die Verbindung kommen (zwei dargestellt), auf die RAM-DQ-Daten-Pins über die Muliplexer zu treiben.

Wenn der Hostcomputer auf diesen Speicher über den Host-Interface-Bus zugreift (insbesondere den RBus, in der bevorzugten Ausführungsform), wird die Bus-Interface-Logik, die in jedem MA-Chip konfiguriert ist, aktiv. Sie schaltet den Adressen-Multiplexer (mux) so, dass der Bus die RAMs adressiert. Wenn der Bus-Zyklus in die RAMs schreiben soll, verwendet die Decoder-Logik die Adressierungs-Bits, um zu dekodieren in welchen RAM geschrieben werden soll, und setzt die geeigneten Schreib-Enable-Signale. Die Adressierungs-Bits, die benötigt werden, um die RAMs auszuwählen und die Schreib- und Lese-Kontroll-Signale werden ebenfalls an die MD-Chips über den Kontrollbus geleitet. Auf den MD-Chips sperrt die Decoder-Logik, wenn der Bus einen Lesezyklus ausführt, alle Tri-State-RAM DQ-Pin-Treiber, verwendet die Adressierungs-Bits, um durch den Lese-Multiplexer den DQ-Datenausgang des adressierten RAMs auszuwählen, und das Bus-Lese-Enable-Signal treibt den Datenwert auf die Host-Interface-Bus-Datenleitung für dieses Bit. Während eines Bus-Schreibzyklus, verwendet die Decoder-Logik den Schreib-Multiplexer, um den Datenwert auszuwählen, der von der Host-Interface-Bus-Datenlinie hereinkommt anstelle der Antwort-gebenden Netze, und setzt den Tri-State-RAM-DQ-Treiber für den adressierten RAM und treibt dadurch die Daten auf den RAM-Eingang.

1.3.2.7 Entwurfs-Konversion und die Spezifizierung von Vektor-Speichern

Um zu spezifizieren, dass ein Netz mit einem Vektor-Speicher verbunden werden soll, und ob die Verbindung für eine Stimulation oder eine Antwort ist, markiert der Anwender das Netz mit einer speziellen Eigenschaft in dem Eingabeentwurf, zum Spezifizieren eines speziellen Vektor-Speichers. Das Entwurfs-Konversions-Verfahren basiert auf einem Satz von vordefinierten partiellen Netzlisten-Dateien, eine für jeden Logikchip des Moduls, mit Anweisungen für Vektor-Speicher-Stimulation- und Antwort-Verbindungen, Vektor-Speicher-Daten-Pfaden und Kontrollogik, und Bus-Interface-Logik, wie oben gezeigt.

Dieses Verfahren nimmt an, dass das ERCGA-Netzlisten-Konversions-Werkzeug Logik und Verbindungen für Grundelemente und Netze in der Netzlisten-Datei nicht konfiguriert, die nicht sinnvoll verbunden sind, wie z. B. Eingänge, die nicht mit irgendwelchen Ausgängen oder I/O-Pins verbunden sind, und Ausgänge die nicht mit irgendwelchen Eingängen oder I/O-Pins verbunden sind. Für jedes Vektor-Speicher-Bit ist Logik für eine Stimulations-Verbindung und eine Antwort-Verbindung vorgesehen. Nur diejenigen, für die Verbindungen an die Netzliste geschickt werden, werden tatsächlich konfiguriert werden; die anderen werden dies nicht, da sie in der Netzliste nicht sinnvoll verbunden sind.

Die vordefinierten Dateien sind vollständig mit Ausnahme der Spezifizierungen der I/O-Pinnummer für die I/O-Pins des Moduls, die dazu verwendet werden, die Vektor-Speicher-Stimulation und Antwort-Verbindungen mit der Verbindung zu verbinden. Die Anzahl der Stimulations- und Antwort-Verbindungen in jeder Datei, wird dadurch bestimmt, wie viele I/O-Pins in dem Logikchip der Datei zur Verfügung stehen, und dadurch wieviel Logik jeder Chip und das Modul als Ganzes aufnehmen kann. Das Verfahren folgt:

  • – Normale Verfahren zur Entwurfs-Konversion werden, wie in dem Abschnitt über die Entwurfs-Konversion beschrieben, verwendet, mit besonderen Ausnahmen für Vektor-Speicher, wie folgt: der Entwurfs-Leser liest die Eigenschaftinformation aus der Eingabeentwurfs-Datei zum Identifizieren der Netze, die für Vektor-Speicher-Verbindungen markiert sind, und setzt eine oder mehrere Vektor-Speicher-Grundelemente, die mit den Netzen, aber nicht mit der Bus-Interface-Logik verbunden sind in seine Entwurfs-Daten-Struktur. Er erzeugt ferner das ECLK-Netz, das mit dem Taktgeber des Host-Interface verbunden ist und mit allen Grundelementen des Vektor-Speichers.
  • – Dem Partitionierer wird durch den Anwender mitgeteilt, welche L-Chip-Postionen auf welchen Karten installierte Speichermodule haben. Auf der Grundlagen von diesen Daten partitioniert er die Grundelemente des Vektor-Speichers in die Speichermodule auf die übliche Weise.
  • – Der Verbinder behandelt die Grundelemente des Vektor-Speichers identisch wie andere Grundelemente der Logikchips, indem er die L-X-Pfade festlegt, die sie mit anderen Grundelementen auf ihren Netzen verbinden.
  • – Wenn die Netzlistendateien für jeden Logikchip in dem Realizer-System ausgeschrieben werden, wird jede Vektor-Speicher-Netzverbindung aufgelistet durch:
  • 1) Festlegen, welcher Logikchip mit dem Pfad verbunden ist, der für die Grundelemente durch die Verbindungsprozedur ausgewählt ist.
  • 2) Ableiten der Logikchip-I/O-Pinnummer aus der Pfadnummer und der Nummer des logischen Chips unter der Verwendung einer Prozedur ähnlich der, die beschrieben worden ist zum Ableiten der gewöhnlichen Logikchip-I/O-Pinnummern.
  • 3) Auswählen einer vordefinierten Stimulations- oder Antwort-Vektor-Speicherverbindung aus denen dieses Logikchips, die bisher noch nicht anderen Netzen zugeordnet worden sind.
  • 4) Anhängen eines Befehls an die Netzlistendatei für diesen Logikchip zum Spezifizieren, dass diese Logikchip-I/O-Pinnummer zur Verbindung mit der vordefinierten Vektor-Speicherverbindung verwendet wird.
  • – Das Entwurfskonversionssystem gibt ferner eine Korrespondenz-Tabellendatei heraus, die die Namen der Netze mit den Vektor-Speichern und den Vektor-Speicherbitpositionen in Verbindung setzt, zur Verwendung während des Betriebs.
  • – Das ERCGA-Netzlisten-Konversionswerkzeug konfiguriert nur die Logik und Verbindungen für die Vektor-Speicherstimulation und Antworteingänge, die verwendet werden.

1.3.2.8 Stimulatoren

Ein Stimulator ist ein einzelnes Bit eines Speichers, das durch den Hostcomputer gesteuert wird und ein Netz in dem Entwurf treibt. Es wird vom Host dazu verwendet, Eingangssignale für den Entwurf zu erzeugen.

Es gibt zwei Typen von Stimulatoren: Direktzugriffsstimulatoren und Flankensensitive Stimulatoren. Der Direktzugriffsstimulator ist einfach ein Flip-Flop, dessen Ausgang das Entwurfsnetz treibt, in das Daten bei Anforderungen durch den Host geladen werden können, über den Host-Interface-Bus. Er wird zur Stimulation von Netzen verwendet, die ihren Wert in bezug auf andere stimulierte Netze zu irgendeinem Zeitpunkt ändern können, ohne den Betrieb eines Entwurfs zu verändern. Ein Beispiel eines solchen Netzes ist der Dateneingang für ein Register. Jeder Stimulator hat eine eindeutige Busadresse und wenn der Host Daten auf diese Adresse schreibt, bringt die Bus-Interface-Logik die Daten auf den D-Eingang und betreibt zyklisch den Taktgeber des Stimulator-Flip-Flops (34).

Der Flanken-sensitive Stimulator wird zur Stimulation von Netzen verwendet, deren Veränderungen für einen korrekten Betrieb eines Entwurfes synchron mit anderen solchen Netzen sein müssen, beispielsweise die Takteingänge für Register. Ein zweiter Flip-Flop wird zwischen dem Ausgang eines Direktzugriffsstimulators und dem Entwurfsnetz angeordnet. Alle diese Flip-Flops in einer Gruppe von Stimulatoren, die synchronisiert werden müssen, sind mit einem gemeinsamen Taktgeber verbunden. Um einen neuen Satz von Netzwerten einzugeben, lädt der Host neue Werte in den ersten Flip-Flop von jedem Stimulator über den Host-Interface-Bus in irgendeiner Reihenfolge, wie oben. Wenn die neuen Werte auf den Entwurf angewendet werden sollen, betreibt der Host zyklisch den gemeinsamen Synchronisationstaktgeber und lädt dadurch gleichzeitig alle Werte in die zweiten Flip-Flops und treibt dadurch alle Netze gleichzeitig (35).

1.3.2.9 Abtaster

Ein Abtaster ist ein einzelnes Bit des Speichers, das durch den Hostcomputer gesteuert wird und ein Netz in dem Entwurf aufnimmt. Es wird durch den Host dazu verwendet, um Ausgangssignale von dem Entwurf aufzusammeln.

Die einfachste Form eines Antasters ist ein Flip-Flop, der das Entwurfsnetz auf seinem D-Eingang aufnimmt und der getaktet werden kann und bei einer Aufforderung durch den Host gelesen werden kann, über den Host-Interface-Bus und die Bus-Interface-Logik. Üblicherweise sind viele Abtaster mit einem gemeinsamen Abtast-Taktgeber verbunden. Die Datenausgänge der Abtaster haben eindeutige Busadressen, ebenso wie der Ausgang des Abtast-Taktgebers. Der Host betreibt den Taktgeber zyklisch, um eine Gruppe von Abtastungen durchzuführen und liest daraufhin einen nach dem anderen der abgetasteten Datenwerte (36).

Um die benötigte Menge von Host-I/O zu verringern, wird optional ein zweiter Flip-Flop hinzugefügt, um einen Veränderungs-detektierenden Abtaster zu erzeugen. Dieser zweite Flip-Flop ist mit demselben Taktgeber verbunden wie der abtastende Flip-Flop und sein Eingang ist mit dem Ausgang des Abtasters verbunden. Als Ergebnis enthält er die Werte, die der Abtaster vor dem letzten Taktzyklus hatte. Die beiden Flip-Flop-Ausgänge werden durch ein XOR-Gatter verglichen, das einen hohen Wert ausgibt, wenn die beiden Flip-Flops sich unterscheiden aufgrund eines Wertes in dem abgetasteten Wert. Alle XOR-Ausgänge von einer Gruppe von Abtastern werden durch ein OR-Gatter summiert, das vom Host gelesen werden kann. Nachdem die Netze durch das zyklische Betreiben des Abtast-Taktgebers wie oben abgetastet worden sind, überprüft der Host diesen OR-Gatter "Veränderungs"-Wert zuerst, um zu sehen, ob irgendwelche Werte in der Gruppe sich verändert haben. Falls dies nicht der Fall ist, muss er keinen dieser Abtastwerte auslesen (37).

1.3.2.10 Entwurfskonversion und die Spezifizierung von Stimulatoren und Abtastern

Die Abtaster- und Stimulator-Flip-Flops, logischen Gatter und die Bus-Interface-Logik werden in den Logikchips des Realizer-Systems verwirklicht. Um zu spezifizieren, dass ein Netz mit einem Abtaster oder einem Stimulator verbunden werden soll, markiert der Anwender das Netz mit einer speziellen Eigenschaft in dem Eingabeentwurf, in dem er den spezifischen Typ des Stimulators oder Abtasters und eine Gruppenidentifizierung spezifiziert. Ein generelles Verfahren für das Softwaresystem der Entwurfskonversion, das zur Konfiguration der Stimulatoren und Abtaster verwendet wird und zur Verbindung mit dem Rest des Entwurfs und mit dem Bus-Interface ist wie folgt aufgebaut:

Normale Verfahren werden für die Entwurfskonversion verwendet, wie in den Abschnitten zu Entwurfskonversion beschrieben, mit den folgenden besonderen Ausnahmen für Stimulatoren und Abtaster:

  • – Der Entwurfsleser liest die Eigenschaftsinformation aus der Eingabeentwurfsdatei, die die Netze identifiziert, die für Stimulatoren und/oder Abtaster markiert worden sind und stellt die Grundelemente der Stimulatoren und Abtaster, die mit den Netzen, jedoch nicht mit der Bus-Interface-Logik verbunden sind, in seine Entwurfsdatenstruktur.
  • – Der Systempartitionierer hat eine Datenbank darüber, wie vielen Gattenäquivalenten jedes solches Grundelement in einem Logikchip entspricht. Er hat ferner Zahlen über die Gatteräquivalente für die Bus-Interface-Logik. Basierend auf diesen Daten weist er die Stimulatoren und Abtaster Logikchips gemäß seinem normalen Partitionier-Algorithmus zu, mit der zusätzlichen Bedingung, dass er das Logik-Kapazitätslimit um die Größe der Bus-Interface-Logik verringert, um die Tatsache zu berücksichtigen, dass jeder Logikchip mit einem oder mehreren Stimulatoren und/oder Abtastern einen Bus-Interface-Logik-Block haben muss.
  • – Der Verbinder behandelt die Stimulator- und Abtaster-Grundelemente identisch wie andere Grundelemente.
  • – Wenn die Netzlistendateien für jeden Logikchip in dem Realizer-System ausgeschrieben werden, wird jedes Abtaster- oder Stimulator-Grundelement durch die folgende Prozedur aufgelistet:
  • 1) Die Grundelemente-Anweisungen für die Gatter und/oder Flip-Flops, die den Abtaster oder Stimulator bilden, werden an die Netzlistendatei für den Logikchip gesandt, in den sie partitioniert worden sind. Netznamen werden für die zusätzlichen Netze über das Netz, das abgetastet oder stimuliert wird, aus seinem Namen abgeleitet gemäß einem Verfahren, ähnlich dem, das für die Verbindung von Grundelementen beschrieben worden ist.
  • 2) Wenn dies der erste Stimulator oder Abtaster ist, der in dieser speziellen Logikchip-Datei aufgelistet wird, wird ein vordefinierter Netzlistendatei-Abschnitt für das Businterface verwendet, um die Grundelemente und Netze auszugeben, die das Bus-Interface auf dem Logikchip konfigurieren.

Die Netzverbindungen des Bus-Interface, die nur einmal pro Interface verwendet werden, werden mit Standardnamen versehen, die in diesem Dateiabschnitt definiert sind. Diejenigen, die mit der Stimulator- oder Abtasterlogik verbunden sind, erhalten abgeleitete Netznamen, die mit den Namen koordiniert sind, die bei der Ausgabe der Grundelemente in Schritt 1 verwendet worden sind.

Ein einfacheres, jedoch weniger allgemeines Verfahren realisiert Stimulatoren und Abtaster nur in den Logikchips eines Speichermoduls oder in vom Anwender gelieferten Bauelement-Modulen. Dieses Verfahren nimmt an, dass das ERCGA-Netzlisten-Konversionswerkzeug Logik und Verbindung für Grundelemente und Netze in der Netzlistendatei nicht konfiguriert, wenn sie nicht sinnvoll verbunden sind, wie zum Beispiel, wenn sie nicht mit irgendwelchen Ausgängen verbunden sind oder wenn I/O-Pins und Ausgänge nicht mit irgendwelchen Eingängen oder I/O-Pins verbunden sind. Es basiert auf einem Satz von vordefinierten partiellen Netzlistendateien, jede für einen Logikchip des Moduls, mit den folgenden Anweisungen:

  • 1) Eine Anzahl von Flanken-sensitiven Stimulatoren, die alle mit einem gemeinsam "synchronisierten Taktgeber" verbunden sind.
  • 2) Eine Anzahl von veränderungs-detektierenden Abtastern, die alle mit dem gleichen "Abtast-Taktgeber" verbunden sind.
  • 3) Bus-Interface-Logik für alles obige.

Die vordefinierten Dateien sind vollständig mit Ausnahme der Spezifikationen der I/O-Pinnummern für die I/O-Pins des Moduls, die dazu verwendet werden, die Abtaster und Stimulatoren mit der Verbindung zu verbinden. Der Kontrollbus wird dazu verwendet, um die gemeinsamen Signale unter den Logikchips zu verteilen, wie zum Beispiel den Synchronisations- und den Abtast-Taktgeber. Die Anzahl der Stimulatoren und Abtaster in jeder Datei wird dadurch bestimmt, wie viele I/O-Pins in dem Logikchip der Datei zur Verfügung stehen und wie viel Logik jeder Chip und das Modul als ganzes aufnehmen kann. Das Verfahren ist wie folgt:

Normale Verfahren werden zur Konversion des Entwurfs verwendet, wie in den Abschnitten über Entwurfs-Konversion beschrieben, mit besonderen Ausnahmen für Stimulatoren und Abtaster, wie folgt:

  • – Der Entwurfsleser liest die Eigenschaftsinformation aus der Eingabeentwurfsdatei, die Netze identifiziert, die für Stimulatoren und/oder Abtaster markiert sind und stellt die Stimulator- und Abtaster-Grundelemente, die mit den Netzen verbunden sind, jedoch nicht mit der Bus-Interface-Logik in seine Entwurfsdatenstruktur.
  • – Dem Partitionierer wird durch den Anwender mitgeteilt, auf welchen L-Chip-Postitionen auf welchen Karten Speichermodule und vom Anwender gelieferte Bauelementmodule installiert sind. Basierend auf diesen Daten weist er zuerst die Speicher- und USD-Grundelemente zu, partitioniert daraufhin die Stimulator- und Abtaster-Grundelemente in die verbleibenden Module gemäß seines normalen Partitionier-Algorithmus bis zur Grenze der zur Verfügung stehenden Anzahl pro Modul.
  • – Der Verbinder behandelt die Stimulator- und Abtaster-Grundelemente identisch wie andere Grundelemente von Logikchips, indem er die L-X-Pfade bestimmt, die sie mit anderen Grundelementen auf ihren Netzen verbinden.
  • – Wenn die Netzlistendateien für jeden Logikchip in dem Realizer-System ausgeschrieben werden, wird jedes Abtaster- oder Stimulator-Grundelement aufgelistet, indem:
  • 1) Festgelegt wird, welcher Logikchip mit dem Pfad verbunden ist, der von dem Verbindungsvorgang für das Grundelement ausgewählt worden ist.
  • 2) Ableiten der Logikchip-I/O-Pinnummer aus der Pfadnummer und der Logikchip-Nummer unter der Verwendung einer Prozedur, die ähnlich ist wie die, die für das Ableiten von gewöhnlichen Logikchip-I/O-Pinnummern verwendet wird.
  • 3) Auswahl eines vordefinierten Stimulators/Abtasters aus denen dieses Logikchips, die bisher noch keinem anderen Netz zugeordnet worden sind.
  • 4) Anhängen eines Befehls an die Netzlistendatei für diesen Logikchip, zum Spezifizieren, dass diese Logikchip-I/O-Pinnummer zum Verbinden des vordefinierten Abtasters/Stimulators verwendet wird.
  • – Das ERCGA-Netzlisten-Konversionswerkzeug konfiguriert nur die Logik und Verbindungen für die Stimulatoren/Abtaster und die entsprechende Bus-Interface-Logik, die verwendet werden.

Bei beiden Verfahren gibt das Entwurfs-Konversionssystem auch eine Korrespondenz-Tabellendatei heraus, die die Netznamen mit speziellen Stimulatoren und Abtastern und entsprechenden Adressen auf dem Host-Interface-Bus in Beziehung setzt zur Verwendung während des Betriebs.

1.3.3 Vom Anwender gelieferte Bauelemente

Da der Eingabeentwurf durch eine tatsächlich arbeitende Hardware realisiert wird in der Form von konfigurierten Logik- und Verbindungschips, ist es praktisch und wünschenswert, andere tatsächliche Hardware-Bauelemente mit dem Realizer-System zu verbinden. Dies können irgendwelche Bauelemente mit digitalen Ein- und Ausgängen sein, wie zum Beispiel ein Mikroprozessor oder andere VSLI-IC-Chips, Digital-Analog-Konverter, Anzeigebauelemente, Eingabetastaturen und Schalter, Speicherbauelemente, Computereingabe-/ausgabe-Busse, etc. Sie können ferner Teil von digitalen Systemen, wie zum Beispiel einer Schaltkarte oder größeren Komponenten sein, von denen der realisierte Entwurf einen Teil darstellt.

Diese Bauelemente stellen den Teil des zu realisierenden Eingabeentwurfs dar, der nicht durch die Logikgatter, Flip-Flops und Speicher des Realizer-Systems implementiert werden kann, entweder aus physikalischen Gründen, wie zum Beispiel einer Anzeige, oder aufgrund von des Mangels an Realizer-System-Ressourcen, wie zum Beispiel ein Massenspeicherbauelement oder, da die logische Beschreibung nicht zur Verfügung steht, wie zum Beispiel ein Standard-Mikroprozessor. Alternativ dazu können sie Bauelemente darstellen, die der Anwender nicht mit den Ressourcen des Realizer-Systems realisieren möchte, wie zum Beispiel ein halb-maßangefertigter Gatterfeld-Chip, der hergestellt worden ist und von dem bekannt ist, dass er korrekt funktioniert, da es nicht notwendig ist, Ressourcen des Realizer-Systems zu verbrauchen, um ihn zu implementieren oder, weil der Anwender testen möchte, ob der realisierte Teil des Entwurfs korrekt mit ihm zusammenarbeitet. Da diese Bauelemente nicht Teil des gesamten Realizer-Systems sind, sondern statt dessen durch den Anwender gemäß der Anforderungen seines Entwurfs geliefert werden, werden diese Bauelemente vom Anwender gelieferte Bauelemente (user supplied devices, USD) genannt.

Es gibt eine solche Vielzahl von möglichen USDs, so dass es sinnvoll ist, ein Realizer-System mit Standardmitteln auszustatten, damit ein Anwender solche Bauelemente mit der Hardware des Realizer-Systems verbinden kann. Dieses Mittel ist das Modul für vom Anwender gelieferte Bauelemente (user supplied device module, USDM).

1.3.3.1 Das Modul für vom Anwender gelieferte Bauelemente

Das Modul für vom Anwender gelieferte Bauelemente hat die folgenden Aufgaben:

  • 1) Es stellt ein Mittel zur Verfügung zur physikalischen Verbindung von vom Anwender gelieferten Hardware-Bauelementen.
  • 2) Es schafft Verbindungen zwischen den USDs und den Logikchips und/oder den Verbindungschips des Realizer-Systems. Da die USDs in dem Entwurf Aufgaben übernehmen, ähnlich denen der Logikchips, ist es sinnvoll, USDMs auf dieselbe Art wie Logikchips zu verbinden.
  • 3) Es ermöglicht, USD-Pins freien Verbindungs-Pins zuzuordnen, ebenso wie es die Logikchips tun, die normalerweise am Ort der LChips installiert sind.

Da es Fähigkeiten zur Verfügung stellen sollte, die dem ähnlich sind, was ein Speichermodul für seine RAM-Chips leistet, ist die Architektur des USDM ähnlich der eines Speichermoduls. 38 zeigt die USDM-Architektur. Die Bauelemente werden in dem Installationsbereich für vom Anwender gelieferte Bauelemente installiert, das einen Bereich auf der gedruckten USDM-Schaltkarte sein kann, eine lösbare Tochterkarte, die in das USDM gesteckt wird, oder ein anderer Bereich, der über Kabel verbunden ist in einer Weise, wie sie üblich bei Mikroprozessor-Simulationsinstrumenten ist. Ein Terminalblock ermöglicht elektrische Verbindungen zwischen den Bauelementeeingangs- und -ausgangs-Pins und den USDM-Logikchips über einen Connector, eine Anschlußleiste, einen Satz von Kontakten einer gedruckten Schaltkarte oder anderer solcher Mittel. Das USDM kann ferner elektrische Energie für die Bauelemente liefern. Ein oder mehrere Bauelemente können installiert werden, je nachdem, wie die physikalische und die Kapazität der Anschlußblock-Pins es erlaubt. Alternativ dazu können Bauelemente über eine Verkabelung oder Repeater-Bauelemente in üblicher Weise auch entfernt verbunden werden.

Jeder MA- und MD-Logikchip hat einige I/O-Pins, die mit dem Anschlußblock verbunden sind und einige, die mit der Verbindung verbunden sind. Diese Chips sind mit der Verbindung auf dieselbe Weise verbunden, wie sie für die Logikchips für die Adressen und Datenpfade des Speichermoduls beschrieben worden sind. Optional können sie auch mit dem Host-Interface-Bus und/oder einem gemeinsamen Steuerbus für ähnliche Zwecke wie ihre gezeigte Verwendung in Speichermodulen verbunden werden.

Die USD-Adress- und Datenbusse sind normal mit den MD-Chips in einer Weise verbunden, so dass die Busdaten-Bits über die MD-Chips verteilt werden und damit über die Verbindung. Die MA-Chips werden für die USD-Kontrolleitung verwendet und optional für die USD-Adressleitung. Die Figur zeigt drei verbundene hypothetische Anwenderbauelemente, um die verschiedenen Möglichkeiten zu illustrieren. Die Daten- und Adressbusse von USD0 sind über die MD-Chips verbunden und ihre Kontrolleitungen A, B und C über MA0. USD1 hat drei Datenbusse, die mit den MD-Chips verbunden sind und Adress- und Steuerverbindungen über die beiden MA-Chips. USD2 verwendet MA1 zum Adressieren und die MD-Chips für die Daten. In einem besonderen Fall können Realizer-Systemanwender ihre USDs in einer für ihre Konstruktion und Verwendung geeigneten Weise verbinden.

Bidirektionale USD-Verbindungen werden auf dieselbe Art und Weise verbunden wie die bidirektionalen RAM DQ-Pins in einem Speichermodul MD-Chip, wie in dem entsprechenden Abschnitt gezeigt. Ein Unterschied liegt in der Anforderung, dass ein Netz in dem Eingabeentwurf als die Ausgang-Enable-Steuerung spezifiziert werden sollte. Dieses Netz wird mit der Verbindungslogik auf dieselbe Art wie das "Entwurfsausgang-Enable" verbunden, wie es in den 25 und 26 des Speichermoduls gezeigt ist, um die bidirektionalen Treiber des MD-Chips zu steuern. Wenn ein passendes Ausgang-Enable-Steuernetz normalerweise nicht in dem Eingabeentwurf vorhanden ist, sollte der Anwender eines erzeugen.

1.3.3.2 Bevorzugte Ausführungsform eines USDM

In der bevorzugten Ausführungsform, die in der 39 gezeigt ist, ist das USDM identisch zu einem Realizer-Speichermodul, wobei ein Bereich zum Installieren von USD den Platz der RAM-Chips einnimmt. Jeder der acht MD-Chips ist mit bis zu 16 USD-Pins verbunden und jeder der zwei MA-Chips ist mit bis zu 23 USD-Pins verbunden.

Die Figur zeigt zwei tatsächlich installierte VLSI-Bauelemente, einen Motorola MC68020 32-Bit Mikroprozessor ("MC68020 32-Bit Microprocessor User's Manual", Motorola, Inc. Phoenix, 1984) und einen Motorola MC 68881 Floating Point-Coprocessor ("MC68881 Floating Point Coprocessor User's Manual", Motorola, Inc., Phoenix, 1985). Diese Bauelemente sind gute Beispiele für USD, da sie häufig in digitalen Systemkonstruktionen verwendet werden und da ihre logische Netzwerkdarstellung dem Anwender nicht zur Verfügung steht. Sie haben die folgenden Eingangs-/Ausgangs-Pins, deren Details in den Referenzen gefunden werden können: MC68020 Daten: D31–D0, bidirektional.

Ausgang-Enable-Bedingung: Wenn R/W "schreiben" anzeigt und DBEN wahr ist, treiben die D31–D0 die Ausgänge, ansonsten nehmen sie Eingänge auf.
Adressen: A31–A0, Ausgang. Kontrolleingänge: CLK, DSACK0, DSACK1, AVEC, CDIS, IPL0–IPL2, BR, BGACK, RESET, HALT, BERR. Kontrollausgänge: R/W, IPEND, BG, DS, DBEN, AS, RMC, OCS, ECS, SIZ0, SIZ1, FC0–FC2.
MC68881 Daten: D31–D0, bidirektional.

Ausgang-Enable-Bedingung: Wenn R/W "lesen" anzeigt und DSACK0 und/oder DSACK1 wahr ist, treiben die D31–D0 die Ausgänge, anderenfalls nehmen sie Eingänge auf.
Adressen: A4–A0, Ausgang. Kontrolleingänge: CLK, SIZE, RESET, AS, R/W, DS, CS. Kontrollausgänge: DSACK0, DSACK1.

Die Daten- und Adressbusse werden durch die MD-Chips miteinander verbunden. Die Bus-Datenbits werden, wie dargestellt, über die Kreuzschiene verteilt, um die Verbindung zu erleichtern, wie in dem Abschnitt über die Speicherdatenpfade diskutiert. Die Steuersignale werden durch die MA-Chips verbunden.

Die Ausgang-Enable-Steuersignale werden durch eine spezielle Logik erzeugt, die mit den Kontrollsignalen, wie oben spezifiziert, verbunden ist, und die durch den Anwender im Eingabeentwurf mitumfasst sind und in den L-Chips zusammen mit dem Rest des Entwurfes realisiert werden. Da jeder MD-Chip mit einem verschiedenen Satz von L-X-Pfaden verbunden ist und da die Ausgang-Enable-Steuerungen üblicherweise für einen gesamten Bus gemeinsam sind, verbindet das Entwurfskonversionssystem diese Netze mit einem der MA-Chips und konfiguriert die MA- und MD-Chips, um den USDM-Kontrollbus zu verwenden, um die Netze mit den MD- und MA-Chips zu verbinden, die damit verbunden werden müssen.

1.3.3.3 Entwurfskonversion für vom Anwender gelieferte Bauelemente

Ein USD wird im Eingabeentwurf durch ein spezielles Grundelement dargestellt. Es trägt Eigenschaftsdaten, die eine USD-Spezifizierungs-Datei identifizieren, die vom Anwender erzeugt worden ist. Diese Datei gibt an, an welchem L-Chip-Ort das USDM mit diesem Bauelement installiert ist und listet die I/O-Pins des USD auf unter der Verwendung der Pin-Namen, die in dem Grundelement für das USD im Eingabeentwurf verwendet worden sind. Für jeden Pin listet diese Datei den Logikchip des USDM auf und die Pin-Nummer, mit der dieser Pin verbunden ist, und ob der Pin eine Eingabe oder eine Ausgabe ist oder bidirektional. Wenn er bidirektional ist, wird ferner der Name des Ausgang-Enable-Kontrollnetzes im Eingabeentwurf aufgelistet.

Das Softwaresystem zur Entwurfskonversion erzeugt die Netzlisten-Datei, die das USDM konfiguriert und mit dem Rest des Entwurfs verbindet. Normale Verfahren werden dazu benutzt, mit den folgenden Ausnahmen für die USDs:

  • – Der Entwurfsleser liest das USD-Grundelement in seine Entwurfs-Datenstruktur. Er verwendet die Dateieigenschaft, um in der USD-Spezifikations-Datei zu lesen und speichert die Information, die mit dem Grundelemente-Eintrag verbunden ist, zur späteren Verwendung. Dem Grundelemente-Eintrag wird ein zusätzlicher Pin gegeben, der mit jedem verschiedenen Ausgang-Enable-Steuernetz verbunden ist.
  • – Die Konversionsstufe überprüft, dass die Konfiguration zur Verfügung steht und die Pins der Konfiguration korrekt entsprechen.
  • – Der Systempartitionierer ordnet das USD dem L-Chip-Ort zu, der in der USD-Spezifizierungs-Datei angegeben ist.
  • – Der Verbinder weist Netzen, die mit den USD-Pins verbunden sind, spezifischen L-X-Verbindungspfaden zu. Er tut dies mit der Begrenzung, dass die Netze, die mit den USD-Pins verwendet worden sind, nur Pfaden zugeordnet werden können, die mit den MA- oder MD-Chips verbunden sind, die in der USD-Spezifizierungs-Datei angegeben sind und mit der weiteren Beschränkung, dass Enable-Steuernetz-Pins nur Pfaden zugeordnet werden können, die mit einem MA-Chip verbunden sind.
  • – Um die Netzlisten-Dateien für ein USDM auszugeben, werden die folgenden Schritte durchgeführt:

    Für jedes Ausgang-Enable-Steuernetz, das den/die USD(s) auf diesem USDM kontrolliert: Grundelemente an die Netzlisten-Datei für die MA-Chips dieses Netzes ausgeben für:

    Einen Eingabepuffer, der den L-X-Pfad aufnimmt, der für dieses Netz verwendet wird und der den Eingang eines Ausgangspuffers treibt, der eine Kontrollbusleitung trägt, die diesem Netz zugeordnet worden ist.

    Für jedes Netz, das mit dem/den USD(s) auf diesem USDM verbunden ist:

    Wenn es einen USD-Eingangs-Pin treibt, ausgeben von Grundelemente an die Netzlisten-Datei für den Logikchip dieses Pins für:

    Einen Eingangspuffer zum Aufnehmen eines Pfades, der für dieses Netz verwendet wird, der den Eingang eines Ausgangspuffers treibt, der den Anschlussblock-Pin treibt, der für diesen USD-Pin verwendet wird.

    Wenn das Netz einen USD-Ausgangs-Pin aufnimmt, ausgeben eines Grundelements für die Netzlisten-Datei dieses Pins des Logikchips für:

    Einen Ausgangspuffer für den Treiberpfad, der für dieses Netz verwendet wird, der den Ausgang eines Eingangspuffers aufnimmt, der den Anschlussblock-Pin aufnimmt, der für diesen USD-Pin verwendet wird.

    Wenn das Netz mit einem bidirektionalen USD-Pin verbunden ist, ausgeben von Grundelemente für die Netzliste des Logikchips dieses Pins für:

    Einen Eingangspuffer für den aufnehmenden Pfad, der für dieses Netz verwendet wird, der den Dateneingang eines Tri-State-Ausgangspuffers treibt, der wiederum den Anschlußblock-Pin treibt, der für diesen USD-Pin verwendet wird.

    Einen Ausgangspuffer für den Treiberpfad, der für dieses Netz verwendet wird, der den Ausgang eines AND-Gatters mit zwei Eingängen aufnimmt, wobei ein Eingang durch einen Eingangspuffer getrieben wird, der den Anschlußblock-Pin aufnimmt, der für diesen USD-Pin verwendet wird.

    Ein Eingangspuffer von der Kontrollbusleitung, die dem Ausgangs-Enable-Kontrollnetz dieses Pins zugeordnet ist, und die den Enable-Eingang des Tri-State-Ausgangspuffers und den anderen Eingang des AND-Gatters treibt.

1.4 Konfiguration

Wie in dem Abschnitt über die Logikchip- und Verbindungs-Chip-Technologie beschrieben, werden die Konfigurations-Bit-Muster für jeden Chip durch das ERCGA-Netzlisten-Konversionswerkzeug erzeugt. Die letzte Stufe des Realizer-Entwurfs-Konversionssystems sammelt die Daten aus den Konfigurations-Dateien, die für alle Chips erzeugt worden sind, in eine einzelne binäre Konfigurations-Datei für den Entwurf, die dauerhaft in dem Host-Computer gespeichert ist.

Vor jeder Verwendung des Realizer-Systems werden seine Logik- und Verbindungschips für den zu verwendenden Entwurf konfiguriert, indem die Daten aus der Konfigurations-Datei gelesen werden, in die Realizer-Hardware über das Host-Interface übertragen werden und in die Chips geladen werden. Die Konfigurationsverbindungen werden zwischen dem Host-Interface und allen Logik- und Verbindungschips in dem System geschaffen. Sobald die Chips konfiguriert sind, entspricht die Gesamtheit aller ihrer logischen Funktionen und Verbindungen dem Eingabeentwurf und der Betrieb des Entwurfs kann beginnen.

In der bevorzugten Ausführungsform werden Xilinx LCAs als Logik- und Kreuzschienen-Chips verwendet. Der LCA wird konfiguriert, indem ein Bit nach dem anderen seines binären Konfigurationsmusters in das serielle Schieberegister des Konfigurationsspeichers des LCA geladen wird. Jedes Bit wird an den Konfigurationsdateneingang (DIN) angelegt und durch einen Zyklus des Konfigurationstaktgebers (CCLK) geladen.

Da ein System insgesamt bis zu 3520 Logikchips und Kreuzschienen-Chips haben kann, wird keine eindeutige Konfigurationsverbindung zwischen jedem LCA und dem Host-Interface erzeugt. Statt dessen gibt es einen Konfigurationsbus, der aus einem Mehrbit-Datenpfad und einem Konfigurationstaktgeber besteht, der mit allen Karten verbunden ist, die LCAs enthalten. Die Logik- und Kreuzschienen-Chips werden zum Zwecke der Konfiguration gruppiert, wobei so viele Chips in einer Gruppe sind wie Bits in dem Datenpfad. Alle Chips in einer Gruppe werden parallel konfiguriert.

Wie in 40 gezeigt, ist der Konfigurations-Dateneingang von jedem LCA in einer Gruppe mit einem unterschiedlichen Bit des Busdatenpfades verbunden. Ein Konfigurationskontroll-Logikblock ist für jede Gruppe mit dem Host-Interface-Bus, dem Bus-Konfigurations-Taktgeber und den Taktgeber-Eingängen von allen LCAs in der Gruppe verbunden. Diese Kontroll-Logikblöcke werden durch Befehle des Hosts über den Host-Interface-Bus selektiv freigeschaltet, damit nur die Gruppe der LCAs, für die die Daten auf dem Bus bestimmt sind, die Taktgebersignale empfängt und konfiguriert wird.

Dies ist der Vorgang, mit dem der Host-Computer das Realizer-System konfiguriert. Die Steuervorgänge und Datenübertragung werden alle über das Host-Interface ausgeführt:

Um alle Logik- und Verbindungschips zu konfigurieren:

Für jede Konfigurationsgruppe:

Anweisung an den Kontrollblock, den Konfigurationstaktgeber an die Chips dieser Gruppe zu leiten.

Für so viele Zyklen wie Konfigurations-Bits in einem LCA vorhanden sind:

Laden eines Konfigurations-Bits durch jeden Chip in dieser Gruppe auf den Busdatenpfad.

Betreiben eines Zyklus des Buskonfigurationstaktgebers.

Nächster Zyklus.

Anweisung an die Kontrollogik für diese Gruppe, den Konfigurationstaktgeber nicht länger weiterzuleiten.

Nächste Gruppe.

1.5 Host-Interface

Das Realizer-System arbeitet als ein Peripheriebauelement unter der Steuerung des Host-Computers. Der Host-Computer konfiguriert die Logik- und die Verbindungschips des Realizer-Systems entsprechend einem Entwurf unter der Verwendung der Konfigurations-Bitmuster, die in der Entwurfs-Konfigurations-Datei gespeichert sind. Er steuert den nachfolgenden Betrieb des Entwurfs durch die Kontrolle der externen Reset- und Taktsignale. Der Host interagiert daraufhin mit dem Entwurf durch das Steuern von Stimulatoren, Abtastern und Vektorspeichern und durch das Lesen und Schreiben der Inhalte von Vektor und Entwurfsspeichern. Der Host-Computer führt all dieses über das Host-Interface des Realizer-Systems aus, das die Host-Interface- und Konfigurationsbusse des Realizer-Systems steuert.

1.5.1 Die Architektur des Host-Interface

Das Host-Interface des Realizer-Systems ist konventionell aufgebaut (41). Es besteht aus dem Host-Interface-Buscontroller, dem Konfigurations-Buscontroller, dem Takterzeuger und dem Reset-Controller, die jeweils unten beschrieben sind. Das Interface ist auf einer Karte oder mehreren Karten in dem Hardwaregehäuse des Realizers aufgebaut und mit dem I/O-Bus des Host-Computers über ein Kabel und eine Interfacekarte verbunden. Die Host-Interface-Kontrollfunktionen werden entweder in den Adressbereich des Speichers des Host-Computers abgebildet oder in den Eingang/Ausgangbus-Bereich, entsprechend der Anforderungen des speziellen Computers.

1.5.2 Host-Interface-Bus

Der Host-Interface-Bus ist mit den I/O-Pins von einigen oder allen regelmäßigen Logikchips und Speichermodul-Logikchips im Realizer-System verbunden. Er hat einen Adressenbereich, dem Kontroll- und Datenzugriffsfunktionen des Realizer-Systems zugeordnet sind. Der Host ist der einzige Busmaster und gibt adressierte Lese- und Schreibbefehle auf den Bus über den Host-Interface-Buscontroller aus, der die Daten zwischen den Funktionen des Realizer-Systems und dem Host transferiert.

Host-Interface-Kontroll-Logikblöcke werden in die Haupt-Logikchips und Speichermodul-Logikchips programmiert, um zu ermöglichen, dass die Funktionen des Realizer-Systems über diesen Bus kontrolliert werden. Spezielle Beispiele von Funktionen, die durch diesen Bus kontrolliert werden, sind Abtaster, Stimulatoren, das Adressieren von Vektorspeicher, der Betrieb, der Host-Datenzugriff und der Host-Datenzugriff auf den Entwurfsspeicher. Da diese Kontrollblöcke alle in Logikchips programmiert werden, sind ihre speziellen Funktionen und Anordnungen in dem Adressraum des Busses durch das Programmieren der Logikchips definiert und können daher geändert werden, um besonderen Anforderungen eines gegebenen Entwurfs oder eines Betriebsmodus zu entsprechen.

Die besondere Konstruktion des Host-Interface-Busses hängt von der Datenzugriffsgeschwindigkeit und dem zur Verfügungstehen von Hardware-Pins einer speziellen Implementierung des Realizer-Systems ab. In der bevorzugten Ausführungsform ist ein 11-Pin-Host-Interface-Bus, der RBus bezeichnet wird, mit speziellen I/O-Pins auf allen L-Chips verbunden. Seine Hardware hat acht bidirektionale Leitungen, die für die Daten und Adressen verwendet werden, einen Taktgeber und zwei Steuerleitungen. Der RBus hat einen 32-Bit Adressenraum und eine Datenbreite von acht Bit, die es dem Host ermöglicht, acht Datenbits zu oder aus bis zu vier Milliarden eindeutigen Orten zu schreiben oder zu lesen. Er ist über den Host-Computer über ein Adressenregister verbunden, ein Datenregister und ein Kontrollregister, die der Host-Interface-Bus auf konventionelle Weise im Speicher oder Eingangs-/Ausgangsbereich des Host-Computers erscheinen läßt.

Beispiele der Funktionen, die mit dem RBus verbunden sind, sind:

  • 1) Eine Gruppe von acht Abtastern, deren Abtast-Taktgeber zyklisch betrieben wird, wenn über dem RBus an einem Ort geschrieben wird und dessen abgetastete Datenwerte von einem anderen RBus-Ort gelesen werden, entsprechend der Befehle des Hosts.
  • 2) Eine Gruppe von acht Direktzugriffs-Stimulatoren, deren Datenwerte verändert werden, wenn der Host an einen speziellen RBus-Ort schreibt.
  • 3) Ein Entwurfsspeicher, dessen gesamte Speicherorte auf eindeutige RBus-Orte abgebildet werden. Ein RBus-Lese- oder Schreibvorgang in diesen Adressenraum verursacht, dass der adressierte Entwurfsspeicherort vom Host gelesen oder beschrieben wird und erzeugt dadurch den Datenzugriff für den Host.

Andere solche Funktionen sind einfach vorstellbar.

Der Betrieb des RBus ist in 42 gezeigt. Um einen Ort auszulesen, lädt das Programm, das auf dem Host-Computer läuft, der das Realizer-System betreibt, die Adresse in das Adressenregister des Host-Interface-Bus, und setzt das "Lese"-Befehl-Bit in dem Host-Interface-Bus-Kontrollregister. Der Host-Interface-Bus-Controller betreibt daraufhin einen RBus-Lesezyklus. Die Adresse wird an die RBus-Datenleitung acht Bit-weise präsentiert, jeweils begleitet durch einen Zyklus des RBus-Taktgebers. Während des ersten Zyklus setzt der Buscontroller die "Synchronisations"-RBus-Kontrolleitung, um anzeigen, dass ein RBus-Zyklus beginnt. Daraufhin wird die "Lese"-RBus-Kontrolleitung und der RBus-Taktgeber fünfmal zyklisch betrieben, um den Lesevorgang des Bus-Interface-Kontroll-Logikblock, der adressiert worden ist, zu vollenden. Der RBus-Taktgeber wird ein sechstes Mal zyklisch betrieben, währenddessen der adressierte Bus-Interface-Kontroll-Logikblock die gelesenen Daten auf die acht RBus-Datenleitungen treibt. Der Buscontroller nimmt diese Daten auf, lädt sie in das Host-Interface-Bus-Datenregister und setzt das "Abschluß"-Befehlsbit im Host-Interface-Bus-Kontrollregister. Das Host-Programm erkennt, dass das "Abschluß"-Bit gesetzt worden ist, liest die Daten und löscht das "Abschluß"-Bit.

Das Schreiben an einen Ort ist ähnlich mit der Ausnahme, dass das Host-Programm das "Schreib"-Befehlsbit setzt und die zu schreibenden Daten in das Host-Interface-Datenregister lädt, der Buscontroller nicht die "Lese"-RBus-Kontrolleitung im fünften Taktzyklus setzt, dass der Buscontroller die Daten im sechsten Taktzyklus auf die RBus-Datenleitung treibt, wo sie von dem adressierten Bus-Interface-Kontroll-Logikblock aufgenommen werden.

Der Bus-Interface-Kontroll-Logikblock, der in einen Logikchip konfiguriert wird, besteht aus einer Maschine mit endlich vielen Zuständen und Datenpfaden, die den RBus mit kontrollierter Funktion verbinden, in einer völlig konventionellen Art und Weise gemäß des oben beschriebenen Betriebs.

1.5.3 Der Konfigurationsbus

Der Konfigurationsbus und seine Verwendung und Betrieb wird in dem Konfigurationsabschnitt betrieben. Er wird durch den Host-Computer über das Host-Interface gesteuert. Er ist mit dem Host-Computer über ein Daten- und ein Kontrollregister verbunden, die die Host-Interface-Hardware im Speicher oder Eingabe/Ausgabebereich des Host-Computers auf konventionelle Weise erscheinen läßt. Daten, die durch das Konfigurationsprogramm, das auf dem Host-Computer läuft, in das Konfigurations-Bus-Datenregister geladen wurden, werden auf den Konfigurations-Bus-Datenpfad getrieben. Wenn der Host-Computer in das Konfigurations-Bus-Kontrollregister schreibt, betreibt die Host-Interface-Hardware den Konfigurations-Bus-Taktgeber über einen Zyklus.

1.5.4 Der Reset-Controller und der Taktgenerator

Der Reset-Controller des Realizer-Systems erzeugt zwei Reset-Signale. Das System-Reset-Signal ist mit den Reset-Eingangs-Bit von allen Logik- und Verbindungschips verbunden. Wenn das Reset-Signal durch den Host gesetzt wird, werden alle Chips in ihren Reset-Mode gebracht, um bereit zu sein für die Konfiguration.

Ein oder mehrere programmierbare Taktsignal-Generatoren mit konventionellem Aufbau verteilen ihre Ausgangssignale an einen I/O-Pin von allen L-Chips. Der Host steuert seine Ausgangsfrequenz und kann das Anhalten des zyklischen Betriebs, einen einzelnen Zyklus, eine bestimmte Anzahl von Zyklen, kontinuierliche Zyklen usw. verursachen. Er wird als ein Taktgenerator für die in dem Realizer-System implementierten Entwürfe verwendet und das Steuern der Taktsignale ist ein Mittel zum Steuern des Entwurfsbetriebs. Das Entwurfs-Reset-Signal ist mit einem I/O-Pin von allen L-Chips verbunden. Es wird als ein Mittel zum Zurücksetzen des Entwurfs verwendet, das in dem Realizer-System implementiert ist.

Diese Signale stehen zur Verfügung für eine Verbindung mit dem in dem Realizer-System implementierten Entwurf. Ein Netz in dem Eingabeentwurf wird als System-Reset oder als ein Taktgeber bezeichnet, indem ihm eine spezielle Eigenschaft in der Eingabeentwurfs-Datei zugewiesen wird. Der Entwurfsleser erkennt diese Eigenschaft und markiert das Netz als ein Reset- oder Taktgebernetz in der Entwurfsdatenstruktur. Der Verbindungs- und Netzlistenteil des Entwurfskonversionssystems weist dieses Netz den I/O-Pins zu, die mit dem Entwurfs-Reset-Signal oder Taktgebersignal in der Hardware verbunden sind.

2. Das Realizer-Entwurfskonversionssystem

Das Realizer-Entwurfskonversionssystem besteht aus dem Entwurfsleser, dem Grundelementekonvertierer, dem Partitionierer und dem System zum Erzeugen der Netzlisten und Verbindung, dem ERCGA-Netzlisten-Konversionswerkzeug und dem Konfigurations-Datei-Sammler (43). Das System verwendet die Eingabeentwurfs-Datei als Eingabe und erzeugt eine Konfigurations-Datei und eine Korrespondenz-Tabellen-Datei als Ausgang, die von verschiedenen Anwendungen verwendet werden, um die Realizer-Hardware zu konfigurieren und anzuwenden.

Um einen Eingabeentwurf zu konvertieren, werden die folgenden Schritte durchgeführt:

  • 1) Lesen des Entwurfs in die Speicherdatenstruktur mit dem Entwurfsleser.
  • 2) Konvertieren der Grundelemente in der Entwurfsdatenstruktur aus Host-EDA-System-spezifischen Grundelementen in Grundelementen der Logikchips, die an die Netzlisten-Dateien ausgegeben werden, in einer mit dem ERCGA-Netzlisten-Konversionswerkzeug kompatiblen Weise.
  • 3) Verwendung des Partitionierers um festzulegen, in welchen Logikchip jedes Grundelement konvertiert wird.
  • 4) Verwendung des Systems zur Erstellung der Netzlisten und der Verbindung, um für jeden Logik- und Verbindungs-Chip in dem Realizer-Hardwaresystem Netzlisten-Dateien zu erzeugen.
  • 5) Wiederholte Verwendung des ERCGA-Netzlisten-Konversionswerkzeugs zum Konvertieren von jeder Netzlisten-Datei in eine entsprechende Konfigurations-Datei.
  • 6) Verwendung des Konfigurations-Datei-Sammlers, der ein einfaches Verfahren darstellt, zum Aufsammeln der Konfigurationsdaten aus der Konfigurations-Datei für jeden Logik- und Verbindungs-Chip in eine einzige Konfigurations-Datei für diesen Entwurf, die dazu verwendet wird, die Realizer-Hardware zu konfigurieren.

Das hier beschriebene Verfahren zur Entwurfskonversion bezieht sich auf das Konvertieren der Kombinations-Logikgatter und Flip-Flops im Eingabeentwurf mit den angegebenen Ausnahmen. Variationen dieses Verfahrens können dazu verwendet werden, um Grundelemente für Spezialzwecke zu konvertieren. Diese Variationen sind in den entsprechenden Abschnitten beschrieben.

2.1 Der Entwurfsleser

Der Entwurfsleser liest die Eingabeentwurfs-Datei und baut die entsprechende Entwurfsdatenstruktur.

2.1.1 Anforderungen an die Eingabeentwurfs-Datei

Die Eingabeentwurfs-Datei, die durch das Host-EDA-System erzeugt wird, enthält Beschreibungen der Grundelemente und ihrer Eingangs- und Ausgangs-Pins und der Netze, die zwei oder mehr Pins miteinander und mit Eingabe- und Ausgabeanschlüssen des Entwurfs verbinden. Es enthält ferner Informationen mit Bezug auf die Grundelemente, Pins und Netze, wie zum Beispiel Namen etc..

Die Eingabeentwurfs-Datei sollte in einer Grundelementeform vorliegen, um von dem Realizer-Entwurfskonversionssystem gelesen zu werden. Ein "Grundelement" ist ein logisches Basiselement, wie zum Beispiel ein Gatter, ein Flip-Flop oder ein Speicher. Strukturen auf einer höheren Ebene, die durch den Entwerfenden spezifiziert worden sein können und die durch Grundelemente definiert sind, sollten durch das EDA-System in ihre konstituierenden Grundelemente aufgelöst werden, bevor die Eingabeentwurfs-Datei durch das Realizersystem gelesen wird. Ein Beispiel für einen Satz von Grundelementen, die in einem Eingabeentwurf erlaubt sind, ist die folgende Teilmenge von Mentor Graphics QuickSim Grundelementen, die von der bevorzugten Ausführungsform gelesen werden:

  • • Einfache Gatter (BUF, INV, AND, OR, NAND, NOR, XOR, XNOR) mit bis zu 25 Eingängen.
  • • Spezielle Gatter (DEL, ein Verzögerungselement; RES, ein Widerstand; NULL, ein offener Schaltkreis).
  • • Ein unidirektionales Transfergatter (XFER), das ein Tri-State-Ausgang ist.
  • • Speicherbauelemente (LATCH, ein Pegel-empfindlicher Flip-Flop oder REG, ein getackteter Flip-Flop).
  • • Speicherbauelemente (RAM oder ROM).

2.1.2 Entwurfsdatenstruktur

Der Entwurfsleser bildet die Entwurfsdatenstruktur, die dazu verwendet wird, die Grundelemente in eine Form zu konvertieren, die zum Bilden der Netzlisten für die Logikchips geeignet ist, um die Grundelemente in Partitionen der Größe eines Logikchips zu partitionieren, und festzulegen, wie die Logikchips miteinander verbunden werden und die schließlich in die Netzlisten-Dateien für jeden Logikchip des Realizers ausgelesen werden. Die Datenstruktur besteht aus einem Eintrag für jedes Grundelement, jeden Pin und jedes Netz in dem Entwurf. Jeder Eintrag enthält Daten über seine Einheit und Verbindungen (d. h. Zeiger) zu anderen Einträgen gemäß ihrer Beziehung.

  • • Ein "Grundelement" ist ein logisches Basiselement, wie zum Beispiel ein Gatter, ein Flip-Flop oder ein Speicher.
  • • Jedes Grundelement wird durch einen Grundelementeeintrag dargestellt, der Daten über das Grundelement enthält, wie zum Beispiel seinen Typ und ein Objekt identifiziert, und enthält Verweise auf andere Grundelemente.
  • • Grundelementeeinträge befinden sich in einer Liste mit zweifachen Verweisen.
  • • Ein "Pin" ist eine Eingangs- oder Ausgangsverbindung für ein Grundelement.
  • • Die Pins der Grundelemente werden durch eine Serie von Pin-Einträgen dargestellt, die benachbart zu dem Grundelementeeintrag angeordnet sind und die Daten über den Pin enthalten, wie zum Beispiel seinen Namen, ob er invertiert ist, seinen Ausgangstreiber, etc.
  • • Jedes Grundelement hat nur einen Ausgangs-Pin, der einer der Pin-Einträge sein kann.
  • • Ein "Netz" ist eine Sammlung von Pins, die miteinander verbunden sind.
  • • Jedes Netz wird durch einen Netzeintrag dargestellt, der Daten über das Netz enthält, wie zum Beispiel seine Objektidentifizierung und der Verweise auf andere Netze enthält.
  • • Netzeinträge sind in einer Liste mit doppelten Verweisen.
  • • Die Pins eines Netzes sind in einer zirkularen Liste mit Einzelverweisen.
  • • Jeder Pin-Eintrag hat einen Verweis auf seinen Netzeintrag.
  • • Jeder Netzeintrag hat einen Verweis auf einen von seinen Pins.

44a zeigt ein einfaches Beispiel eines Schaltkreisnetzwerkes und 44b zeigt, wie es mit der Entwurfsdatenstruktur dargestellt würde.

2.1.3 Das Verfahren des Entwurfslesers

Der Zweck des Entwurfslesers ist es, den zu realisierenden Entwurf in der Eingabeentwurfs-Datei zu lesen und die entsprechende Entwurfsdatenstruktur aufzubauen. Diese Beschreibung betrifft eine Entwurfs-Datei von Mentor Graphics; andere sind ähnlich. Die Entwurfs-Datei hat einen Eintrag, der eine Instanz genannt wird, für jedes Grundelement in dem Entwurf. Die Eigenschaften sind Informationen über spezielle Aspekte des Grundelementes, die der Instanz in der Entwurfs-Datei hinzugefügt werden. Die Namen in den Klammern, die jedem Schritt folgen, sind die Namen der in der bevorzugten Ausführungsform tatsächlich verwendeten Routinen.

  • 1) Erzeuge einen Eintrag für ein Grundelement und seine Pins in der im Speicher befindlichen Datenstruktur für jedes Grundelement in der Entwurfs-Datei wie folgt:

    Für jede Instanz eines Grundelementes in der Entwurfs-Datei:

    Lies, was für ein Typ das Grundelement ist. (get_dfi_model_type)

    Nimm, falls vorhanden, die Information über die vom Anwender definierte Anordnung dieses Grundelementes aus der "L-Chip"-Eigenschaft; Verwende das Entwurfs-Datei-Interface, um nach höheren, keine Grundelemente bildende, Instanzen zu suchen, die dieses Grundelement enthalten, um dort ebenfalls nach der Eigenschaft zu suchen (get_dfi_1-Chip).

    Für jeden Pin der Instanz:

    Sammle alle Eigenschaften, wie zum Beispiel den Pinnamen, die auf dem Pin sind. (get_dfi_pin_info).

    Nächster Pin.

    Weise einen Eintrag in der im Speicher befindlichen Entwurfsdatenstruktur diesem Grundelement und seinen Pins zu (alloc_prim_and_pins) und trage den Grundelementeeintrag ein.

    Für jeden Pin:

    Trage den Pin-Eintrag ein. (Beachte die Identifizierungsnummer des verbundenen Netzobjektes in der Entwurfs-Datei, unter Mitverfolgung der maximalen Identifizierungsnummer.)

    Nächster Pin.

    Nächste Instanz in der Entwurfs-Datei.

    Weise eine Tabelle von Zeigern (net_table) den Pineinträgen zu (Pin-Pointer), eine für jedes mögliche Netz, die durch eine Objekt-ID-Nummer indiziert sind, mit dem Anfangswert NULL. Setze die Größe der Tabelle fest gemäß der maximalen ID-Nummer, die oben gefunden worden ist.
  • 2) Verbinde die Pin-Einträge von jedem Netz in eine zirkular verbundene Liste für jedes Netz wie folgt:

    Für jeden Grundelementeeintrag in der im Speicher befindlichen Datenstruktur:

    Für jeden Pineintrag:

    "id" ist die Identifizierungsnummer des verbundenen Netzobjekts für diesen Pin.

    Wenn net_table[id] einen Pinzeiger hat, der nicht NULL ist, kopiere ihn in den "next_pin"-Verweis dieses Pineintrages.

    Setze den Pinzeiger auf diesen Pin in die net_table[id].

    Nächster Pin.

    Nächstes Grundelement.
  • 3) Erzeuge einen Netzeintrag für jedes Netz wie folgt:

    Für jeden Pinzeiger in der net_table:

    Weise einen Netzeintrag zu.

    Verbinde ihn mit einem Hinweis auf den Pin, auf den der Pinzeiger zeigt. Nimm die Information über dieses Netz aus dem Entwurfs-Datei-Interface durch die Adressierung mit seiner Objektidentifizierungsnummer (dfi_$get_net, get_dfi_net_info).

    Für jeden Pin in der zirkularen Liste der Pineinträge für dieses Netz:

    Lass ihn auf diesen Netzeintrag zeigen.

    Nächster Pin.

    Schließe die zirkulare Liste: Verbinde den letzten Pin mit dem ersten.

    Nächster Pinzeiger.

    Gib den Speicherbereich für die Netztabelle frei.
  • 4) Die im Speicher befindliche Entwurfsdatenstruktur ist jetzt vollständig und stellt alle Daten über den zu realisierenden Entwurf dar, die von den späteren Stufen des Entwurfskonversionsvorgangs benötigt werden.

2.2 Grundelementkonvertierer

Der Zweck der Grundelementkonversion ist es, die Grundelemente in der Entwurfsdatenstruktur von Host-spezifischen Grundelementen, wie zum Beispiel den Mentor Graphics QuickSim-Grundelementen in Logikchip-spezifische Grundelemente zu konvertieren, die an die Netzlisten-Dateien ausgegeben werden können in einer mit dem ERCGA-Netzlisten-Konvertierungswerkzeug kompatiblen Weise. Einige dieser Konversionen sind einfach und direkt und umfassen lediglich eine Ersetzung eines Grundelemententyps und Pin-Namens. Andere Konversionen sind komplexer. Spezielle Referenzen werden weiter unten auf die bevorzugte Ausführungsform gemacht, die Mentor Graphics QuickSim Host-spezifische Grundelemente verwendet, wie sie in der Mentor Graphics Eingabeentwurfs-Datei gefunden werden und die Xilinx LCA Logikchip-spezifische Grundelemente verwendet.

Wenn ein Gatter in dem Entwurf mehr Eingänge hat, als in den Logikchip-spezifischen Gatter-Grundelementen erlaubt ist, wird es durch ein Netzwerk von Gattern mit äquivalenter Funktionalität ersetzt, die jeweils eine akzeptable Anzahl von Eingängen haben. Zur Durchführung von einer solchen Ersetzung werden die Grundelemente und Pineinträge für das Gatter entfernt und Grundelemente und Pineinträge für die neuen Gatter und die Netzeinträge für das neue Netz innerhalb des Netzwerkes hinzugefügt, und mit den Pin- und Netzeinträgen für die Pins und Netze verbunden, die mit dem ersetzten Gatter verbunden sind (45a).

Wenn ein Flip-Flop in dem Entwurf Funktionen hat, die in den Logikchip-spezifischen Flip-Flop-Grundelementen nicht zur Verfügung stehen, wird es durch ein Netzwerk von Gattern mit äquivalenter Funktionalität ersetzt. Zuerst wird das Netzwerk analysiert, um zu überprüfen, ob die Funktion mit einem Netz verknüpft ist, das nicht immer einen konstanten Wert annimmt. Wenn beispielsweise das Host-spezifische Grundelement REG sowohl mit direkten Setz- und direkten Lösch-Eingängen verwendet wird, die mit aktiven Netzen verbunden sind, die nicht immer einen konstanten Wert annehmen, wird das Grundelement in der im Speicher befindlichen Entwurfsdatenstruktur mit einem Netzwerk aus Gattern ersetzt, ähnlich denen, die in dem 7474 TTL Flip-Flop-Logikteil verwendet werden, und die wie benötigt funktionieren. Wenn jedoch der direkt gesetzte Eingang mit einem Netz verbunden ist, das immer eine logische Null ist, wie zum Beispiel das Grundnetz oder auch ein AND-gatter, bei dem ein Eingang mit einem Grundnetz verbunden ist, wird nur das direkte Löschen tatsächlich benötigt und das Logikchip-D-Flip-Flop-Grundelement wird statt dessen ersetzt.

Ein S_RAM-Grundelement ist ein Direkt-Zugriffsspeicher, mit Adresseneingängen, einem bidirektionalen Datenport, einer Lesefreigabe und einer Schreibfreigabe. RAM-Grundelemente werden auf ein oder mehrere Realizer-Entwurfsspeichermodule abgebildet. Die Grundelemente-Konversionssoftware konvertiert den S_RAM in eine oder mehrere X_RAM-Grundelemente, die direkt mit den zur Verfügung stehenden Entwurfsspeicherkonfigurationen übereinstimmen. Ein S_ROM (read-only memory)-Grundelement entspricht einem S_RAM mit Ausnahme des Fehlens der Freigabeeingänge und dem Zusatz einer Datei, die den ROM-Inhalt enthält. Es wird in ein oder mehrere X_ROM-Grundelemente konvertiert, die direkt den Entwurfsspeicherkonfigurationen entsprechen. Ein X_ROM hat einen Lesefreigabeeingang, aber keine Schreib-Freigabe. Der Pfadname für die Inhalts-Datei und ihr Ort in Bezug auf den ursprünglichen S_ROM wird mit jedem X_ROM-Grundelement gespeichert. Wenn die Realizer-Hardware mit diesem Entwurf konfiguriert wird, wird der Pfadname durch das Konfigurationssystem dazu verwendet, um die X_ROM-Inhalte herbeizubringen und sie in den Entwurfsspeicher über das Host-Interface zu laden. S_RAMs mit getrennten Eingangs- und Ausgangsdatenports würden ähnlich behandelt, sie sind jedoch nicht in dem Mentor Graphics QuickSim-Grundelemente-Satz enthalten.

Die Pins und Netze in dem ursprünglichen Design können Initialisierungseigenschaften haben oder "Inits", um zu spezifizieren, dass sie Anfangswerte haben sollen, in manchen Fällen dauerhaft. Lediglich die dauerhaften Inits mit bekanntem Wert (null oder eins) werden von dem Realizer-System beachtet und sie verursachen, dass der Pin oder das Netz mit der geeigneten "Erde" (d. h. logisch Null) oder "vcc" (d. h. logisch Eins) Netz verbunden werden. In dem speziellen Mentor Graphics-Fall:

  • • T-, X-, R- und Z-Inits werden ignoriert:

    Nur 0SF (=0 =0S) oder 1SF (=1 =1S) werden berücksichtigt.
  • • 0SF oder 1SF auf einem Netz oder einem Ausgangs-Pin eines Netzes macht es zum Teil eines Erde- oder vcc-Netzes.
  • • 0SF oder 1SF auf einem Eingabe-Pin sorgt dafür, dass der Pin getrennt wird und mit dem Grund- oder dem vcc-Netz verbunden wird.

Ausgangs-Pins können in dem ursprünglichen Entwurf verschiedene Treiberstärken mit sich bringen, um den Typ der Ausgangsstruktur, die durch einen Simulator simuliert werden soll, darzustellen. Das Realizer-System berücksichtigt diese Stärken in gewissem Ausmaß bei der Grundelementekonversion. Wenn ein Ausgang markiert ist, keine Treiberstärke zu haben, wenn er hoch ist und eine starke Treiberstärke zu haben, wenn er niedrig ist, wird er als ein offener Kollektor bezeichnet und es ist zulässig, dass er mit anderen ähnlichen Ausgängen verbunden wird und mit einem Widerstand, um das zu bilden, was Logikkonstrukteure ein "Wired-and"-Netz bezeichnen (45b). Entsprechend wird ein Ausgang, der keine Treiberstärke für den niedrigen Zustand hat und eine starke Treiberstärke für den hohen Zustand als ein offener Emitter bezeichnet und wird dazu verwendet, um ein "Wired-or"-Netz zu bilden. Schließlich hat ein XFER Grundelemente-Ausgangs-Pin keine Treiberstärke, wenn er nicht freigeschaltet ist und kann mit einem anderen XFER-Ausgang verdrahtet werden und einem Widerstand, um ein "Tri-State"-Netz zu bilden (45c). Alle diese Strukturen werden durch das Grundelemente-Konversionssystem erkannt und in das logische Netzwerk einer Produktsumme konvertiert mit äquivalenter Funktionalität, wie in dem Abschnitt über Tri-State-Netze diskutiert. Im spezifischen Mentor Graphics-Fall:

  • • Die X-Zustand-Treiberstärke wird ignoriert.
  • • Einer oder mehrere XFER-Ausgänge können zu einem Netz verbunden werden, aber keine anderen Ausgänge können damit verbunden werden. Eine Ausnahme ist, dass ein RES (Widerstand), dessen Eingangs-Pin mit den Erde- oder vcc-Netzen verbunden ist, ebenfalls verbunden werden kann. Wenn kein XFER freigeschaltet ist, wird der Netzwert eine logische Null sein, außer ein RES ist mit einem vcc-Netz verbunden, in diesem Fall wird der Netzwert eine logische Eins sein. Wenn mehr als ein XFER freigeschaltet ist, wird das Ergebnis ein logisches OR sein.
  • • OC/OE-Ausgänge (SZ/ZS) können nur Netze treiben, die mit ähnlichen Treibern getrieben werden. OC-Netze nehmen einen hohen Zustand an, wenn sie nicht angetrieben sind, OE-Netze nehmen einen niedrigen Zustand an, unabhängig davon, ob ein RES verbunden ist.
  • • Grundelemente mit RZ-, ZR-, RS-, SR- oder ZZ-Ausgangstreibern werden ohne Fehler eliminiert.
  • • Die folgenden Ausgangsnetzwerkbedingungen erzeugen fatale Fehler: mehr als ein starker Treiber, ein starker Treiber und ein Widerstand, mehr als ein Widerstand, XFER & starker Treiber, XFER & SZ, XFER & ZS, SZ oder ZS ohne Widerstand, SZ oder ZS mit starkem Treiber, SZ & ZS.

Die spezifischen Vorgänge, die durchgeführt werden, um Grundelemente in der bevorzugten Ausführungsform mit einem Mentor Graphics Host und Xilinx LCAs zu konvertieren, sind wie folgt (der Name einer Subroutine folgt jeder Kopfzeile):

  • 1) Anfängliche Konversion der Host-spezifischen Grundelemente in LCA-Grundelemente (convert_s_to_x). Host-spezifische Grundelemente stammen aus dem Mentor Graphics QuickSim-Satz, der oben spezifiziert worden ist und werden mit einem "S_"-Präfix bezeichnet. LCA-spezifische Grundelemente stammen aus der Xilinx.xnf-Spezifizierung und werden mit einem "X_"-Präfix bezeichnet.

    Für jedes Grundelement:

    Wenn S_INV, ersetze durch X_INV, ersetze die Pin-Namen.

    Wenn S_BUF, ersetze mit X_BUF, ersetze die Pin-Namen.

    Wenn S_RES, ersetze durch X_BUF, RR-Treiber, ersetze die Pin-Namen.

    Wenn S_DEL, verschmelze die Ein- & Ausgangsnetze miteinander.

    Wenn S_AND, S_NAND, S_OR, S_NOR, S_XOR, S_XNOR, ersetze mit X_AND, X_NAND, X_OR; X_NOR, X_XOR, X_XNOR, ersetze die Pin-Namen.

    (Wenn > 25 Pins, Fehler.)

    Wenn S_REG, ersetze durch X_DFF, ersetze die Pin-Namen.

    Wenn S_LATCH, ersetze durch X_DLAT, ersetze die Pin-Namen.

    Wenn S_XFER, lasse es für später.

    Wenn S_NULL, lösche es.

    Wenn S_RAM oder S_ROM, lasse es für später.

    Nächstes Grundelement.
  • 2) Verarbeitung von "Inits" (get_inits). Zwei Netze in der im Speicher befindlichen Entwurfs-Datenstruktur sind besonders: "gnd" (d. h. logisch Null) und "vcc" (d. h. logisch Eins).

    Für jedes Netz:

    Wenn die Initialisierungseigenschaft des Netzes 0SF ist,

    wenn das gnd-Netz noch nicht gefunden worden ist, ist es das, nächstes Netz.

    anderenfalls verschmelze dieses Netz mit dem gnd-Netz, nächstes Netz.

    Wenn die Initialisierungseigenschaft des Netzes 1SF ist,

    wenn das vcc-Netz noch nicht gefunden worden ist, ist es das, nächstes Netz.

    sonst verschmelze dieses Netz mit dem vcc-Netz, nächstes Netz.

    Für jeden Ausgangs-Pin:

    Wenn die Anfangseigenschaft 0SF ist, wenn das gnd-Netz noch nicht gefunden worden ist, ist es das, nächstes Netz.

    Anderenfalls verschmelze dieses Netz mit dem gnd-Netz, nächstes Netz.

    Wenn die Anfangseigenschaft des Pins 1SF ist:

    Wenn das vcc-Netz noch nicht gefunden worden ist, ist es das, nächstes Netz.

    Anderenfalls verschmelze dieses Netz mit dem vcc-Netz, nächstes Netz.

    Nächster Pin.

    Nächstes Netz.

    Für jedes Netz:

    Bringe die Pin-Einträge in eine Liste.

    Für jeden Eingangs-Pin:

    Wenn die Anfangseigenschaft des Pins 0SF ist und es nicht das gnd-Netz ist, trenne den Pin von diesem Netz, und verbinde ihn mit dem gnd-Netz.

    Wenn die Anfangseigenschaft des Pins 1SF ist und das Netz nicht das vcc-Netz ist, trenne den Pin von diesem Netz und verbinde ihn mit dem vcc-Netz.

    Nächster Pin.

    Nächstes Netz.
  • 3) Überprüfe alle Ausgangs-Pins, um Grundelemente zu entfernen mit (für das Realizer-System) ineffektiven Treiberstärken, und entferne XFERs, die immer freigeschaltet oder gesperrt sind (clear_drives).

    Für jedes Grundelement:

    Wenn der Ausgangs-Pin keinen Treiber hat, SS, RR, SZ oder ZS, nächstes Grundelement.

    Wenn er RZ, ZR, RS, SR oder ZZ hat, trenne und eliminiere ihn.

    Wenn er ein S_XFER ist:

    Wenn der E0-(Enable-)Pin konstant niedrig ist, lösche das Grundelement.

    Wenn der E0-Pin konstant hoch ist, setze ein BUF.

    Nächstes Grundelement.
  • 4) Aussieben unzulässiger Mehr-Ausgangsverbindungen und Identifizieren und Konvertieren von "wired-or", "wired-and" und Tri-State-Netzen und ihren Treibern (wired_nets).

    Für jedes Netz:

    Bringe die Pin-Einträge in eine Liste.

    Zähle die XFER-Ausgangs-Pins, Eingangs-Pins und non-XFER-Ausgangs-Pins mit einem starken Treiber, einem Widerstand, SZ (open-coll.) oder ZS (open-emitter).

    Wenn nur ein Ausgangs-Pin vorhanden ist, der einen starken oder keinen starken Treiber hat, nächstes Netz.

    Wenn ein oder mehrere Widerstände verbunden sind, stelle sicher, dass sie alle entweder mit einem "vcc"-Netz verbunden sind (pullup) oder mit einem "gnd"-Netz (pulldown) und behalte, welche womit verbunden sind.

    Fehler und Ende, falls:

    > 1 stark, > 1 Widerstand,

    XFER & stark, XFER & SZ, XFER & ZS,

    SZ oder ZS mit keinem Widerstand, SZ oder ZS mit stark, SZ & ZS.

    Wenn 1 stark und 1 Widerstand, lösche das Grundelement mit dem Widerstandstreiber.

    Wenn > 1 SZ: (open-collector wired-and)

    Für jeden Ausgangs-Pin:

    Wenn Widerstand: sicherstellen, dass es ein pullup ist und dann löschen

    Anderenfalls trenne den Pin, mache den Pintreiber stark, erzeuge ein X_INV, verbinde seinen Eingang mit dem Ausgang und seinen Ausgang mit dem Netz.

    Nächster Pin.

    Markiere das Netz als ein "floating-high" Tri-State-Netz, so dass der Verbinder es mit OR/NOR-Gattern konfiguriert.

    Wenn > 1 ZS: (open-emitter wired-or)

    Für jeden Ausgangs-Pin:

    Falls Widerstand: stelle sicher, dass es ein pulldown ist, lösche ihn.

    Anderenfalls mache den Treiber des Pins stark.

    Nächster Pin.

    Markiere das Netz als ein "floating-low" Tri-State-Netz, so dass der Verbinder es mit OR-Gattern konfiguriert.

    Wenn > 0 XFERs und entweder kein Widerstand oder pulldown: (tristate "floating-low")

    Für jedes S_XFER:

    Verändere S_XFER in ein X_AND, wobei XFER_E0 (oder ENA) AND I0 wird und XFER_I0 AND 11 wird.

    Nächstes S_XFER.

    Lösche alle Widerstands-Grundelemente.

    Markiere das Netz als ein "floating-low" Tri-State-Netz, so dass der Verbinder es mit OR-Gattern konfiguriert.

    Wenn > 0 XFERs und pullup: (tri-state "floating high")

    Wenn 1 S_XFER Grundelement:

    Verändere S_XFER in ein X_NAND, wobei XFER E0 (oder ENA) ein NAND I0 und XFER I0 ein NAND 11 wird, invertiert.

    Wenn > 1 S_XFER Grundelement:

    Für jedes S_XFER:

    Verändere es in ein X_AND, wobei XFER E0 (oder ENA) ein AND I0 und XFER I0 ein AND I1 wird, invertiert.

    Nächstes S_XFER:

    Lösche die Widerstands-Grundelemente.

    Markiere das Netz "floating-high" Tri-State-Netz, so dass der Verbinder es mit OR/NOR-Gattern konfiguriert.

    Nächstes Netz.
  • 5) Ersetze alle Gatter mit mehr Eingängen als in den LCA-spezifischen Gatter-Grundelementen erlaubt ist, mit einem Netzwerk aus Gattern mit äquivalenter Funktionalität, von denen jedes eine akzeptable Anzahl von Eingängen hat (wide_gates)

    Für jedes Grundelement:

    Wenn es ein Gatter ist & und die Anzahl der Eingänge > 5 ist & (unter der Annahme, dass XC3000-Logikchips verwendet werden) die Anzahl der Eingänge ≤ 25 ist:

    Erzeuge ein abschließendes Ausgangsgatter desselben Typs.

    Verbinde seinen Ausgang mit dem ursprünglichen Ausgang & kopiere die Eigenschaften.

    Für jedes kleinere benötigte Eingangsgatter:

    Weise es zu (Verwende AND für AND oder NAND-Originale, etc.)

    Verbinde seinen Ausgang mit einem abschließenden Gattereingang.

    Verbinde seine Eingänge mit tatsächlichen Eingängen.

    Nächstes Gatter.

    Lösche das ursprüngliche breite Gatter.

    Nächstes Grundelement.
  • 6) Prüfe auf Flip-Flop-Funktionalität und ersetze bei Bedarf, um LCA-Beschränkungen zu entsprechen. Wenn die XC3000-Familie verwendet wird, können die Flip-Flops ein direktes Löschen, aber nicht ein direktes Setzen haben und auch nicht beides. Da alle S_DFFs, die hereinkommen, Pins zum Setzen und Löschen haben, sollten die Grundelemente davon ersetzt werden, da es weniger Pins haben wird. Latches sollten durch äquivalente Gatternetzwerke ersetzt werden, da der XC3000 keine Latches unterstützt. (flops_for_3K)

    Für jedes Grundelement:

    Wenn es ein DLAT oder ein DFF ist:

    Behalte es und trenne jeden Pin.

    Finde heraus, ob SD und RD konstant niedrig sind durch das Überprüfen ihrer Netze, um herauszufinden, ob sie Erdnetze oder vcc-Netze sind, entweder direkt oder indirekt über Gatter.

    Wenn es ein DLAT ist:

    Baue ein Netzwerk oder Gatter ein, um das Latch zu konfigurieren, inklusive der Gatter für SD und/oder RD, nur falls benötigt.

    Lösche das ursprüngliche Grundelement und die Pineinträge.

    Falls es ein DFF ist:

    Wenn SD konstant niedrig ist, Erzeuge ein X_DFF ohne SD und verbinde es.

    Anderenfalls, falls RD niedrig ist, aber kein SD ist, erzeuge ein X_DFF mit X_INVs auf dem Eingang und dem Ausgang und verbinde es, indem Du den RD-Pin des X_DFFs mit dem SD-Netz verbindest.

    Anderenfalls baue ein Netzwerk aus sechs 3-in NANDs und 2 INVs ein, die ein DFF konfigurieren mit Setzen & Löschen wie ein TTL 7474.

    Lösche das ursprüngliche Grundelement.

    Nächstes Grundelement.
  • 7) Konvertiere S_RAMs und S_ROMs in X_RAMs und X_ROMs.

    Für jedes Grundelement:

    Wenn es ein S_RAM oder ein S_ROM ist:

    Stelle seine Höhe fest (die Anzahl der Wörter) durch das Zählen der Adress-Pins (Höhe = 2 hoch der Anzahl der Pins) und seine Breite, die gleich der Anzahl der Daten-Pins ist.

    Für jede zur Verfügung stehende Entwurfspeicherkonfiguration:

    Teile die S_RAM/ROM-Höhe durch die Entwurfspeicherhöhe, um die Anzahl der Reihen der benötigten Module zu bekommen.

    Teile die S_RAM/ROM-Breite durch die Entwurfsspeicherbreite, um die Anzahl der benötigten Modulspalten zu erhalten.

    Die Gesamtanzahl der benötigten Module für diese Konfiguration sind die Reihen mal der Anzahl der Spalten.

    Nächste Konfiguration.

    Wähle die Konfiguration aus, die die kleinste Anzahl Module benötigt.

    Wenn mehr als eine Reihe von Modulen benötigt wird, erzeuge Grundelemente und Netze für einen Decoder, mit einem Ausgang für jede Reihe von Modulen und mit Eingängen, die mit Adressnetzen hoher Ordnung verbunden sind.

    Für jede Reihe:

    (X_RAM only) Erzeuge ein AND-Gatter zur Reihen-Schreibfreigabe mit zwei Eingängen, den Decoderausgang für diese Reihe und die

    S_RAM-Schreibfreigabe.

    Erzeuge ein AND-Gatter für die Reihen-Schreibfreigabe mit zwei Eingängen, dem Decoderausgang für diese Reihe und der S_RAM-Lesefreigabe.

    Nächste Reihe.

    Für jede Reihe von Modulen:

    Für jede Spalte:

    Erzeuge ein X_RAM/ROM-Grundelement und speichere seine Konfiguration.

    Wenn es ein X_ROM ist, speichere seinen Dateinamen und die Anzahl der Reihen und Spalten.

    Verbinde seine Lese- und Schreibfreigabe-Pins mit den Lese- und Schreibe-(X_RAM only)-Freigabe-Pins für diese Reihe (oder den S_RAM-Freigabe(n), falls nur eine Reihe vorhanden ist).

    Verbinde seine Adressen-Pins mit den Adressennetzen niedriger Ordnung.

    Verbinde seine Daten-Pins mit dem Satz von Daten-Pins, die dieser Spalte entsprechen.

    Nächste Spalte.

    Nächste Reihe.

    Lösche das ursprüngliche S_RAM/ROM-Grundelement.

    Nächstes Grundelement.

2.3 Der Partitionierer

Die Realizer-Hardware besteht aus einer Hierarchie von Einheiten und Untereinheiten: Karten, die Logikchips enthalten, Boxen, die Karten enthalten, Racks, die Boxen enthalten, und so weiter. Jede Einheit hat ihre eigene Kapazität für Logik und für Verbindungen mit anderen Einheiten. Die zu realisierenden Entwürfe werden partitioniert (d. h. aufgeteilt) in mehrere Cluster von Grundelementen gemäß dieser Hierarchie. Es gibt einen Satz von Partitionen für Boxen, mit Größen entsprechend den Logik- und Verbindungskapazitäten jeder Box. Jede dieser Partitionen ist in Subpartitionen aufgeteilt für die Karten und so weiter bis zu den Partitionen, die klein genug sind, um in einen einzelnen logischen Chip programmiert zu werden. Dasselbe Partitionierverfahren wird auf jeder Ebene der Hierarchie angewendet.

Die Ziele des Partitionierens sind:

  • 1) Jedes Grundelement soll einer Box, einer Karte und einem Logikchip zugeordnet werden.
  • 2) Die Anzahl der Netze, die mit einer Partition verbunden sind, soll unter der Verbindungsfähigkeit der Einheit liegen (Box, Karte oder Logikchip).
  • 3) Die Menge an Logik, die von der Partition verwendet wird, soll innerhalb der Grenzen der Einheit liegen, und
  • 4) Die Gesamtanzahl der Partitionen und damit der verwendeten Einheiten soll minimiert werden.

2.3.1 Partionierverfahren

Das hier beschriebene bevorzugte Partitionierverfahren basiert auf dem Vorgang des Zusammenclusterns von logischen Grundelementen, die sowohl in hohem Maße miteinander verbunden sind als auch eine minimale Anzahl von "Schnittnetzen" haben (Verbindungen zu Grundelementen außerhalb des Clusters). Jedes Cluster ist eine Partition, die einer Box, einer Karte oder einem L-Chip entspricht. Der Prozeß basiert auf einem früheren Partitionsverfahren von Palesko und Akers (Chet A. Palesko, Lex A. Akers, "Logic Partitioning for Minimizing Gate Arrays", IEEE Trans. on CAD, Nr. 2, S. 117–121, April 1983) mit wesentlichen Verbesserungen, wie unten beschrieben.

Es gibt ein "Null-Cluster", das aus den Grundelementen besteht, die bisher noch nicht einem Cluster zugeordnet worden sind und das anfangs alle Grundelemente enthält. Jedes Cluster wird gebildet, indem zuerst ein Ausgangsgrundelement aus dem Null-Cluster ausgewählt wird und indem wiederholt der "Vorteil" von allen Null-Cluster-Grundelementen berechnet wird und indem das Grundelement mit dem größten Vorteil gewählt wird. Je größer der Vorteil eines Grundelementes ist, desto besser ist es geeignet, in das Logik-Cluster verschoben zu werden.

2.3.2 Die Vorteilsfunktion

Der Vorteil basiert zum Teil darauf, wie die Anzahl der Schnittnetze dieses Clusters sich ändern würde, wenn dieses Grundelement in das Cluster bewegt würde. Die Gesamtzahl der Schnittnetze eines Clusters muss gezählt werden, um sie unterhalb der maximalen Verbindungsfähigkeiten der Einheit zu halten. Jedes Netz, das einen Pin des Grundelementes enthält, wird aufgesucht und entweder als ein "eingeschlossenes" Netz, ein "Mehrfachschnitt"-Netz oder ein "Einzelschnitt"-Netz klassifiziert, unter der Annahme, dass das Grundelement in das Cluster verschoben würde. Ein Schnittnetz wäre ein Einzelschnittnetz, wenn eine und nur eine Verbindung innerhalb des Clusters wäre und ein Mehrschnittnetz, wenn mehr als eine Verbindung innerhalb des Clusters wäre. Ein eingeschlossenes Netz ist ein Netz, das komplett innerhalb des Clusters enthalten wäre.

46 zeigt ein Cluster und fünf Grundelemente. Die durch drei Netze, S, M und E, verbunden sind. Die Figur zeigt ferner, was passieren würde, wenn das schattierte Grundelement in den Cluster verschoben würde. Das Netz S würde ein Einzelschnittnetz sein, das die Schnittnetzzahl des Clusters um eins erhöht. Das Netz E würde eingeschlossen werden, und dadurch die Schnittnetzzahl um eins reduzieren. Netz M würde ein Mehrschnittnetz sein und dadurch die Schnittnetzzahl des Clusters weder erhöhen noch erniedrigen und würde daher nicht betrachtet werden. Die Veränderung der Clusternetze ist der Unterschied zwischen den Einzelschnittnetzen und den eingeschlossenen Netzen:

Veränderung in Clusterschnitten = Einzelschnittnetze – eingeschlossene Netze. Die bevorzugte Vorteilsfunktion quantifiziert jedes Grundelement, um festzustellen, welches die beste Auswahl wäre, wenn es in den Cluster verschoben würde. Die beste Wahl ist das am engsten verbundene Grundelement mit der größten Anzahl von Pins. Die Funktion basiert auf der anfänglichen Partitionsvorteilfunktion von Palesko und Akers:

Wenn die Veränderung in Clusterschnitten > 0 ist:

Vorteil = die Anzahl der Pins des Grundelementes/Veränderung in Clusterschnitten.

Anderenfalls:

Vorteilfunktion = (–(Veränderungen in Clusterschnitten) 100) + 100 + Anzahl der Pins des Grundelementes.

Wenn das Verschieben dieses Grundelementes in den Cluster die Anzahl der Clusterschnitte erhöht, dann ist es umso besser, je mehr Pins das Grundelement hat und je weniger Schnittnetze es hinzufügt. Wenn es die Clusterschnitte reduziert, dann wird das Ausmaß der Reduktion durch 100 vergrößert und 100 wird hinzugefügt, um sicherzustellen, dass dieser Vorteilswert größer ist als der Wert von einem Grundelement, das die Schnitte nicht reduziert. Die Anzahl der Pins wird hinzugefügt, um gleiche Clusterschnittabnahmen zu verhindern, wobei Grundelemente mit mehr Pins bevorzugt werden.

Die Verbesserung, die in dem bevorzugten Verfahren verwendet wird, besteht darin, einen Pinanzahlterm zum Verhältnis aus Pinanzahl hinzuzufügen, wenn eine Zunahme der Clusterschnitte vorliegt. Diese Veränderung begünstigt die ursprüngliche Ausgangsauswahl durch die Auswahl von Grundelementen mit größeren Pinanzahlen, wenn ihre Verhältnisse gleich sind. Das Verhältnis wird mit zehn multipliziert, so dass es über die Pinanzahl alleine dominiert. Dies ist die bevorzugte Vorteilsfunktion:

Wenn die Veränderunge in Clusterschnitten > 0 ist:

Vorteil = ((10 Anzahl der Pins des Grundelementes)/Veränderungen in Clusterschnitten) + Anzahl der Pins des Grundelementes.

Anderenfalls:

Vorteil = (–(Veränderung in Clusterschnitten) 1000) + 100 + Anzahl der Pins des Grundelementes.

2.3.3 Der Aufbau von Clustern

Anfänglich sind alle Grundelemente in einem Null-Cluster angeordnet. Der Anwender kann Grundelemente in spezifischen Clustern vorplazieren durch das Zufügen von Eigenschaften in dem Eingabeentwurf, um den L-Chip, die Karte etc. der Wahl anzuzeigen. Diese vorplazierten Grundelemente dienen daraufhin als Ausgangsplazierungen zur Cluster-Bildung. Dies ermöglicht dem Anwender, Timing-sensitive oder andere Grundelemente mit hoher Priorität zu gruppieren und verändert die Partitionergebnisse, indem andere Grundelemente zusammengebracht werden, die mit den Grundelementen mit der hohen Priorität dicht verbunden sind.

Bei Beginn von jedem neuen Cluster wird der Vorteil von jedem unplazierten Grundelement für das neue Cluster berechnet und im Eintrag des Grundelementes gespeichert. Wenn es keine Voranordnungen gibt, wird das Grundelement mit dem maximalen Vorteil (d. h. das Grundelement mit dem höchsten Vorteilswert) als das ursprüngliche Ausgangsgrundelement für das Cluster verwendet.

Nachdem jedes Grundelement mit dem maximalen Vorteil in den Cluster verschoben worden ist, werden nur die Vorteile der Grundelemente erneut berechnet, die einen Pin in einem derselben Netze haben wie das verschobene Grundelement. Da die anderen Grundelemente durch die Verschiebung nicht betroffen waren, bleiben ihre Vorteile für den Cluster unverändert. Daraufhin wird das Grundelement mit dem neuen maximalen Vorteil in den Cluster verschoben, und so weiter, bis der Cluster voll ist.

Die Feststellung, wann der Cluster voll ist, hängt sowohl von der Logikkapazität als auch von den Verbindungen ab (d. h. den Cluster-Schnittnetzen). Wenn ein Grundelement in den Cluster verschoben wird, wird es immer die Anzahl der Gatter in dem Cluster erhöhen. Es wird jedoch nicht immer die Anzahl der Schnittnetze erhöhen; es kann sie auch verringern. Es ist möglich, dass ein Cluster ein lokales Maximum an der Grenze seiner Verbindungen erreicht und immer noch Logikkapazität für zusätzliche Grundelemente hat, die die Anzahl der Schnittnetze verringern.

Wenn das Verfahren von Palesko und Akers die Grenze der Verbindungen erreicht, erlaubt es, dass Grundelemente mit weniger als maximalem Vorteil in den Cluster verschoben werden, wenn sie nicht die logische Kapazität oder die Verbindungsgrenzen überschreiten, aber es erlaubt nicht, dass Grundelemente jenseits eines lokalen Verbindungsmaximums in den Cluster verschoben werden. Das hier beschriebene Verfahren ist insoweit verbessert, dass es beides erlaubt:

Es gibt ein Feld von Markern, einen für jede mögliche Verschiebung. Die Grundelemente werden nacheinander in den Cluster verschoben. Nach jeder Verschiebung wird die Anzahl der Cluster-Schnittnetze überprüft. Wenn die Anzahl unterhalb der maximal zur Verfügung stehenden Verbindungskapazität der Einheit liegt, wird der Schritt als möglich für die Verbindung markiert. Wenn die Grenze der maximalen Logikkapazität erreicht ist, werden, wenn die letzte Verschiebung nicht als für die Verbindung möglich markiert worden ist, die Verschiebungen rückgängig gemacht, bis die letzte verbindbare Verschiebung gefunden wird.

Um eine Einheit (Rack, Box oder Karte) in Untereinheiten (Boxen, Karten oder L-Chips) zu partitionieren:

Verschiebe alle Grundelemente, die nicht vorangeordnet sind, in den Null-Cluster. Für jeden Cluster:

Berechne und speichere den Vorteil für jedes Grundelement des Null-Clusters.

Setze den Bewegungszähler auf null.

Solange die Anzahl der Cluster-Grundelemente < der maximalen logischen Kapazität ist

Erhöhe den Bewegungszähler.

Verschiebe das Grundelement mit dem maximalen Vorteil in den Cluster.

Speichere, welches Grundelement bei der Verschiebung [Verschiebungszähler] verschoben worden ist.

Wenn die Anzahl der Clusterschnittnetze < maximale Verbindungskapazität, markiere die Verschiebung [Verschiebungszähler] = OK.

Anderenfalls markiere Verschiebung [Verschiebungszähler] = NOT OK.

Berechne den Vorteil von Grundelementen in Netzen, die mit diesem Netz verbunden sind.

Nächste Iteration.

Während die Verschiebung [Verschiebungszähler] = NOT OK:

Verschiebe das Grundelement, das in der Verschiebung [Verschiebungszähler] gespeichert ist, aus dem Cluster.

Verringere den Verschiebungszähler.

Nächste Iteration.

Nächstes Cluster.

Der Partitionierungsvorgang wird fortgesetzt, bis alle Grundelemente erfolgreich innerhalb der Cluster angeordnet sind oder bis alle Cluster voll sind und der Vorgang fehlschlägt.

Zum Partitionieren des gesamten Entwurfs in der bevorzugten Ausführungsform:

Partitioniere in Boxen auf der Rack-Ebene, ein Cluster für jede Box unter der Verwendung der maximalen logischen Kapazität = die gesamte Box und der maximalen Verbindungskapazität = Y-Z-Pfade pro Box.

Für jedes Box-Cluster:

Partitioniere in Karten auf der Boxebene, ein Cluster für jede Karte, unter der Verwendung; der maximalen Logikkapazität = die gesamte Karte und der maximalen Verbindungskapazität = X-Y-Pfade pro Karte.

Nächstes Box-Cluster.

Für jedes Karten-Cluster:

Partioniere in L-Chips auf der Kartenebene, ein Cluster für jeden L-Chip, unter der Verwendung der maximalen Logikkapazität = L-Chip und der maximalen Verbindungskapazität = L-X-Pfade pro L-Chip.

Nächstes Karten-Cluster.

2.3.4 Kapazitätsgrenzen

Die Definition der Grenze der maximalen Logikkapazität, die in diesem Verfahren verwendet wird, hängt von den Charakteristika der verwendeten Logikchips ab. Wenn Xilinx LCAs als Logikchips verwendet werden, basieren sie auf konfigurierbaren Logikblocks (CLBs). Jeder CLB kann viele Gatter und Flip-Flops implementieren. Wieviele, hängt von den Gatter- und Flip-Flop-Funktionen ab, wieviele von ihnen vorhanden sind und wieviele Pins sie haben und wie sie miteinander verbunden sind. Wenn der Entwurf vor dem Partitionieren in CLB-Form konvertiert worden ist, dann sind die CLBs die partitionierten Grundelemente und die Grenze der Logikkapazität basiert auf der Anzahl von CLBs in dem LCA. Anderenfalls sind die Gatter die partitionierten Grundelemente und die Grenze basiert auf der Anzahl von Gattern, von der erwartet wird, dass sie in ein LCA passt. Die Gatter werden in dem Maße gewichtet, wie sie Kapazität verbrauchen, um die Partitionierungsergebnisse zu verbessern.

Die für den Aufbau der Cluster verwendeten Grenzen müssen nicht alle die gleichen sein. Wenn es unterschiedliche Logik- und Verbindungskapazitätscharakteristika unter den Einheiten gibt, werden die geeigneten Grenzen für den Aufbau der Cluster in diesen Einheiten verwendet.

2.3.5 Realizer-Partitionieren

Das Ergebnis des Partitionierungsvorgangs ist ein aus drei Zahlen bestehender Ort, Box/Karte/Chip, für jedes Grundelement in dem Entwurf, der im Grundelementeintrag in der Entwurfsdatenstruktur gespeichert wird. Dies ermöglicht das Aufspüren jedes Grundelementes eines Netzes in dem Entwurf über die L-Chips, Karten und Boxen hinweg. Das Timing eines Netzes kann abgeschätzt werden durch das Aufspüren eines Netzes im System und das Aufsummieren der Verzögerungen durch die Verbindungs-Kreuzschienen-Chips und die Logikchips.

Während der Verbindungsphase wird die Netzliste gemäß der Gesamtanzahl von verschiedenen Box/Karte/Chip-Grundelementekombinationen geordnet, die in dem Netz enthalten sind. Daraufhin erfolgt die Verbindung vom am meisten komplexen Netz zum am wenigsten komplexen Netz.

Da die Grundelemente eines Netzes und der Netzeintrag Information enthalten, die das Netz auf die L-Chips und die Verbindungschips abbilden, müssen schließlich lokale schematische Logikänderungen nicht repartitioniert werden und nur die Chips, die die veränderten Netze enthalten, müssen aktualisiert werden. Daraus resultiert die Fähigkeit zur inkrementellen Veränderung des Entwurfs, ohne den Entwurf repartitionieren zu müssen.

2.4 Das Netzlisting und das Verbindungssystem

Es ist das Ziel des Realizer-Netzsystems und Verbindungs-Konversionssystems, für jeden Logik- und Kreuzschienen-Chip im Realizer-System Netzlisten-Dateien zu erzeugen, die dazu verwendet werden, die Realizer-Hardware entsprechend dem Eingabeentwurf zu konfigurieren. Die Festlegung, wie die Netzlisten für die partielle Kreuzschienenverbindung erzeugt werden, wird als ein integraler Bestandteil dieses dreistufigen Prozesses ausgeführt. Stufe 1: Für alle Grundelemente in der Entwurfsdatenstruktur werden Grundelement nach Grundelement Befehle an die Netzlisten-Dateien der Logikchips ausgegeben. Stufe 2: Die Befehle für Summierungsgatter für Tri-State-Netze, die vollständig innerhalb eines einzelnen Logikchips enthalten sind, werden Netz nach Netz ausgegeben. Stufe 3: Netzlisten für Verbindungen von Netzen, die sich zwischen mehr als einem Logikchip erstrecken, werden erzeugt. Die Befehle für alle Verbindungspuffer für dieses Netz auf allen Chips und für die Summierungsgatter für dieses Netz in dem Kreuzschienen-Chip werden Schnittnetz nach Schnittnetz ausgegeben. Die Festlegung, wie genau das Netz verbunden werden soll, wird als ein Teil dieses Vorgangs durchgeführt, der selbst vier Stufen hat: Stufe 3a: Es wird ein Baum konstruiert, der zeigt, wie sich das Netz über jede Kreuzschiene erstreckt und wo sich Logikchiptreiber und Empfänger befinden. Stufe 3b: Jeder Satz von Kreuzschienen-Chips wird nach seiner Fähigkeit, das Netz zu verbinden, beurteilt. Stufe 3c: Der beste Satz von Kreuzschienen-Chips zur Verbindung dieses Netzes wird ausgewählt. Stufe 3d: Basierend auf der getroffenen Auswahl und der Baumstruktur werden die Netzlisten für die Verbindung erzeugt, indem Befehle für die Puffer und die Summierungsgatter an die Netzlisten-Dateien der Logik- und Kreuzschienen-Chips ausgegeben werden.

Dieser Abschnitt besteht aus der Diskussion von Techniken, die auf jeder Stufe verwendet werden mit einer nachfolgenden detaillierten Definition des gesamten Verbindungs- und Netzlisting-Vorgangs und zwei detaillierten Beispielnetzen.

2.4.1 Einfache und Tri-State-Netz-Verbindungsstrukturen

Simple Netze sind Netze, die nur einen Treiber haben. Der Quellen-L-Chip, der den Treiber enthält, treibt das Signal in der Hierarchie nach oben zu dem Verbindungs-Chip, der alle Empfänger umfasst. Die Pfade zum Treiben der Empfänger sind weiter unten in der Hierarchie verbunden, um alle empfangenen L-Chips zu treiben. 47, die im Detail diskutiert wird, zeigt die Verbindung für ein einfaches Netz.

Ein Tri-State-Netz ist ein Netz, das durch zwei oder mehr Tri-State, Open-Collector oder Open-Emitter-Treiber getrieben wird. Es wird in der Entwurfsdatenstruktur als ein einzelnes Netz mit zwei oder mehreren Treibern (Ausgangs-Pins) dargestellt, von denen jeder eines der AND-Gatter ist, in die die Treiber transformiert worden sind während der Grundelementekonversion oder mit einem oder mehreren Empfängern (Eingangs-Pins). "Floating low"-Netze, die den Wert Null annehmen, wenn keine Treiber freigeschaltet sind, werden durch AND-Gatter realisiert, die ein oder mehrere summierende OR-Gatter treiben. "Floating high"-Gatter haben invertierte Dateneingänge auf den AND-Gattern und das abschließende summierende Gatter ist ein NOR. Dieselbe Topologie und dasselbe Basisverfahren wird in beiden Fällen angewendet.

Tri-State-Netze werden als eine Produktsumme mit normalen ein-direktionalen Verbindungen und ein oder mehreren summierenden OR-Gattern implementiert. Die Treiber werden in summierenden OR-Gattern gesammelt, wenn ihre Pfade beim Aufstieg in der Verbindungshierarchie von X zu Z konvergieren. Der Ausgang des summierenden OR-Gatters auf der höchsten Ebene ist der wahre Wert des logischen Netzes, seine Quelle, die in der Verbindungshierarchie nach unten verbunden ist, um alle Empfänger zu treiben. Daher werden einige Typpaare (L-X, XY und/oder Y-Z) zwei Pfade benötigen, einen für den Treiber in den/das summierende OR-Gatter und einen anderen für die Weiterleitung des Ergebnisses an die Empfänger. 48, die weiter unten im Detail diskutiert wird, zeigt die Verbindung für ein Tri-State-Netz.

2.4.2 Bezeichnungen

Verbindungen innerhalb eines Logikchips sind in der Netzlisten-Datei durch die Verwendung von Netzen mit eindeutigen Namen definiert. Diese Netze sollten nicht mit Netzen in der Entwurfsdatenstruktur durcheinandergebracht werden. Jedes Entwurfsnetz wird sein Gegenstück in den Netzlisten-Dateien der Logikchips haben und die gleichen tatsächlichen Netznamen, die in der Eingabeentwurfs-Datei verwendet werden, werden in den Netzlisten-Dateien verwendet. Netzen, die während der Grundelementekonversion zu der Entwurfsdatenstruktur hinzugefügt werden, werden künstlich erzeugte Namen gegeben.

Netze, die in der Entwurfsdatenstruktur nicht auftauchen, werden an Netzlisten-Dateien von Logikchips und Verbindungschips ausgegeben, um die Verbindung zu spezifizieren. Die Netze zwischen den I/O-Puffern und den I/O-Pins der Logik- oder Kreuzschienen-Chips, die Netze zwischen den AND-Gattern und den Summierungsgatter(n) der Tri-State-Produktsummen und die Netze, die sich entlang der Verbindung erstrecken, wenn eine Kreuzschienensummierung verwendet wird, stehen alle mit einem einzigen Netz in dem Entwurf in Beziehung, sind jedoch unterschiedliche Netze in den Netzlisten-Dateien. Variationen des tatsächlichen Netznamens werden verwendet, wenn die Verbindungs-Grundelemente an die Netzlisten-Dateien ausgegeben werden, um unterschiedliche Netznamen für jede von diesen Verbindungsfunktionen zu schaffen.

Die folgende Darstellung listet die Verwendung von jeder Namensvariation auf. Namen mit nur einer Verwendung pro Chipebene sind für Netze zwischen einem I/O-Puffer und seinem Pin. Sie werden entsprechend dem Chip am anderen Ende der Verbindung numeriert, um Eindeutigkeit zu erzeugen. Namen mit mehr als einer Verwendung pro Chipebene definieren interne Kreuzschienen-Chipverbindungen. Dies ist nur ein Beispiel von vielen möglichen Bezeichnungssystemen. Der Buchstabe "N" wird anstelle des tatsächlichen Netznamens in der Abbildung verwendet. Wenn beispielsweise das verbundene Netz "Enable" genannt würde, würde das Netz zwischen dem Eingangspuffer, der eine Eingabe vom Logikchip 6 und dessen I/O-Pin empfängt, bezeichnet als "ENABLE_D_6".

2.4.3 Stufe 1: Erzeugen der Netzlisten für die logischen Grundelemente

Die Befehle für die Netzlisten-Dateien der Logikchips werden ein Grundelement nach dem anderen für alle logischen Grundelemente in der Entwurfsdatenstruktur ausgegeben. Die Namen der Netze, die die Pins der Grundelemente verbinden, werden vergeben, um mit den Namen, die zur Verbindung der Puffer in Stufe 3d, unten, verwendet werden, übereinzustimmen.

Die Eingangs-Pins werden mit ihren wahren Netznamen verbunden, wenn die Quelle für das Netz im selben Logikchip ist, was immer für eingeschlossene Netze der Fall ist (Netze, die nicht geschnitten sind) und für den treibenden L-Chip von Schnittnetzen. Wenn dieser L-Chip nicht die Quelle ist, werden die Eingangs-Pins mit den Eingangspuffern der Mutterempfänger verbunden. Ausgangs-Pins werden mit ihren wahren Netznamen verbunden, außer wenn sie mit einem Summierungsgatter auf dem Logikchip verbunden werden. In diesem Fall werden Variationen des eindeutigen Netznamens verwendet.

2.4.4 Stufe 2: Erzeugen der Netzlisten für Logikchip-Summierungsgatter

Die Befehle für die Summierungsgatter von Tri-State-Netzen, die vollständig innerhalb eines einzelnen Logikchip enthalten sind, werden Netz nach Netz ausgegeben. Die Eingänge werden verbunden unter der Verwendung der Netznamenvariationen, die oben erwähnt sind und der Ausgang treibt den wahren Netznamen. Der geeignete Ausgangssinn (OR oder NOR) wird verwendet, je nach dem, ob das Netz "floating high" oder nicht ist.

2.4.5 Stufe 3: Festlegen und Erzeugen der Netzlisten von Schnittnetz-Verbindungen

Für die Verbindungen von Netzen, die sich über mehr als einen Logikchip erstrecken (Schnittnetze) werden Netzlisten erzeugt. Die Schnittnetze werden nacheinander verarbeitet durch die Abfolgen der Stufen 3a, 3b und 3c für jedes Schnittnetz.

2.4.5.1 Stufe 3a: Aufbau des Verbindungsbaums

Eine temporäre Baumdatenstruktur wird aufgebaut, um den Verbindungsprozeß zu führen. Er stellt die Struktur des Netzes dar, indem er die L-Chips zeigt, die Grundelemente in diesem Netz haben, die X, Y und Z-Chips, die ihre Verbindung implementieren und die Verbindungsanforderung von jedem Chip.

Jeder Knoten auf jeder Ebene des Baumes entspricht einem Logik- oder Verbindungs-Chip des Systems. Er hat Äste zu den Tochterknoten unterhalb von ihm und speichert Daten über den Knoten und den Verbindungspfad zu seiner Mutter wie folgt:

Jeder L-Chip in dem Netz wird durch einen einzigen Knoten in dem Baum dargestellt, unabhängig davon, wieviele Grundelemente er auf dem Netz hat.

Jeder Knoten hat die folgenden Einträge: Chipnummer: Welcher L-Chip auf der Karte, welche Karte auf der Box oder welche Box in dem Rack. Anfangswert NULL. D- und R-Zählwerte: Anzahl der Treiber (D) und Empfänger (R), die für diesen Knotenpfad benötigt werden. Anfangs null. D- und R-Pfad: Welche Pfadnummer (von den mehreren zur Verfügung stehenden für jeden L-X, X-Y oder Y-Z-Pfad) wird für den Treiber verwendet, damit der Treiber im Baum aufsteigen kann von diesem Knoten und der Empfänger herunterkommen kann. Anfangs NULL. Spitzensumme: Markiert als wahr, wenn dieser Knoten das Summierungsgatter hat, das alle Treiber unter ihm enthält. Dies wird dazu verwendet, um das letzte Gatter in einer Multigatter-Produktsumme zu steuern, so dass der "floating high"-Fall seine Ausgangsinversion erhält. Ursprünglich falsch.

Wenn ein Netz nicht mehrere Boxen umfasst, hat der Root-Knoten einen Nulleintrag und nur einen Knoten auf der ersten Ebene. Wenn ein Netz nicht mehrere Karten umfasst, wird der Knoten auf der ersten Ebene einen Nulleintrag haben und nur einen Knoten auf der zweiten Ebene. Wenn ein Netz nicht mehrere L-Chips umfasst, benötigt es keine Verbindung und wird keinen Baum haben.

Der Baum wird aufgebaut durch das Scannen des Netzes in der Entwurfsdatenstruktur gemäß der Orte der Grundelemente, die durch den Partitionierer zugewiesen worden sind. Wenn ein Netz nicht mehr als eine Box oder eine Karte umfasst, werden die Knoten für die nicht benötigten Kreuzschienenebenen mit null markiert. Daraufhin wird die Anzahl der Treiberausgänge und Empfängereingänge auf jedem L-Chip gezählt und in den L-Chip-Knoten gespeichert, um die Verbindungsanforderungen des L-Chips zu identifizieren. Die Anzahl der L-Chips, die Treiber haben und die Anzahl derer, die Empfänger haben, wird für jeden X-Chip-Knoten gezählt, um zu identifizieren, welche Verbindung von jedem X-Chip zur Verfügung gestellt werden muss. Entsprechend werden die treibenden und empfangenden X-Chips für jedes Y-Chip gezählt und die Y-Chips für den Z-Chip.

Schließlich wird der Baum analysiert, um den Punkt festzulegen, von dem der wahre Wert des Netzes, seine Quelle, an die Empfänger getrieben wird. Bei einfachen Netzen ist die Quelle einer der L-Chips. Es kann ein Kreuzschienen-Chip für ein Tri-State-Netz sein, da die Kreuzschienensummation verwendet wird. Normalerweise, wenn ein Kreuzschienen-Chip Empfänger unter seinen Tochter-Chips hat, wird in der Netzliste eingetragen, den wahren Wert von Mutter-Chip auf der höheren Ebene herunterzuleiten. Wenn jedoch ein Chip oder der Chip unter ihm in der Hierarchie die Quelle hat, dann empfängt er den wahren Wert von sich selbst oder von unten. Um dies zu erreichen, werden die Kreuzschienenknoten gescannt und wenn ein Knoten oder ein Nachkomme die Quelle ist, wird seine Empfängerzahl auf null gesetzt.

2.4.5.2 Stufe 3b: Bestimmen der Fähigkeit jedes Satzes zur Verbindung

Da jeder Z-Chip mit den gleichen Y-Chips in jeder Box verbunden ist und jeder Y-Chip mit den gleichen X-Chips auf jeder Karte verbunden ist, bilden die verbundenen X-, Y- und Z-Chips einen Satz. In der bevorzugten Ausführungsform des Realizer-Systems gibt es 64 Sätze, von denen jeder aus 1 Z-Chip, 8 Y-Chips, einem in jeder Box, besteht, die Y-Z-Pfade zum Z-Chip haben und 64 X-Chips, einen auf jeder Karte, die X-Y-Pfade zu jedem Y-Chip haben. Jedes Paar von Sätzen hat die gleichen X-Chips in diesem Fall. Dies ist jedoch akzeptabel, da nur ein Set ausgewählt wird, um das Netz zu verbinden.

Jedes Paar von verbundenen Chips, wie zum Beispiel ein L-Chip und ein X-Chip wird durch eine Gruppe von Leitungen verbunden, die Pfade genannt werden. Die Pfade in jeder Kreuzschiene werden in einer Pfadtabelle aufgelistet. Die L-X-Pfadtabelle hat ein Element für jeden Pfad in jeder L-X-Kreuzschiene im gesamten System. Für jede Karte in jeder Box gibt es eine L-X-Kreuzschiene und für jede Kreuzschiene gibt es einen Satz von Pfaden für jeden L-Chip und jeden X-Chip. Die L-X-Pfadtabelle hat daher fünf Dimensionen: LX[Box][Karte][L-Chip][X-Chip][Pfad]. Entsprechend gibt es eine X-Y-Pfadtabelle: XY[Box][Karte][Y-Chip][Pfad] und eine Y-Z-Pfadtabelle: YZ[Box][Z-Chip][Pfad]. Jedes Element in der Tabelle wird mit "frei" oder "verwendet" durch den Verbindungsvorgang markiert. Ein Tabellenelement ist verwendet, wenn sein Pfad durch den I/O-Pin eines Eingangs- oder Ausgangspuffers verwendet wird, der an eine Netzlisten-Datei ausgegeben worden ist.

Die Fähigkeit jedes Satzes, das Netz zu verbinden, wird durch das Aufsammeln der freien Pfadzahlen für jeden zu verbindenden Pfad bestimmt. Als erstes werden die Y-Z-Pfade zwischen Y-Chips in Boxen und den Z-Chips berücksichtigt. Für jede Box in dem Netz wird die Anzahl der freien Pfade in der Y-Z-Pfadtabelle für den Z-Chip und den Y-Chip dieser Box in diesem Satz gezählt und gespeichert. Als zweites werden die X-Y-Pfade zwischen X-Chips auf Karten und Y-Chips in Boxen betrachtet: Für jede Karte in dem Netz wird die Anzahl der freien Pfade in der X-Y-Pfadtabelle für den Y-Chip dieser Box und den X-Chip dieser Karte in diesem Satz gezählt und gespeichert. Als drittes werden die L-X-Pfade zwischen L-Chips und X-Chips auf den Karten berücksichtigt: Für jeden Logikchip in dem Netz wird die Anzahl der freien Pfade in der L-X-Pfadtabelle für diesen L-Chip und für den X-Chip dieser Karte in diesem Satz gezählt und gespeichert. Falls an irgendeiner Stelle nicht genug freie Pfade vorhanden sind, um die Verbindung durchzuführen, wird dieser Satz als Fehlschlag markiert und der Vorgang schreitet mit dem nächsten Satz fort.

Das Ergebnis ist eine Sammlung von Pfadanzahlen für jeden Pfad in der Verbindung, für jeden Satz von Kreuzschienen-Chips, die erfolgreich die Verbindung herstellen können.

2.4.5.3 Stufe 3c: Auswahl des Satzes

Da viele Sätze in der Lage sein können, das Netz zu verbinden, wird ein Satz ausgewählt, um einen Ausgewogenheit der verwendeten Pfade zu erhalten. Dies stellt sicher, dass die volle Fähigkeit der Verbindung ausgenutzt wird.

Eine einfache Technik zur Auswahl der Sätze würde darin bestehen, den Satz auszuwählen mit der größten Gesamtpfadanzahl. Dies ignoriert jedoch lokale Bedingungen. Es ist besser, den Satz auszuwählen, der die größte minimale Pfadzahl unter den Pfadzahlen auf allen Ebenen hat. Beispielsweise seien zwei Sätze mit diesen Pfadzahlen angenommen:

Satz A hat die größte Gesamtanzahl (23 gegenüber 21), aber die Auswahl dieses Satzes würde bedeuten, dass der letzte zur Verfügung stehende L-X-Pfad von einem L-Chip-X-Chip-Paar verwendet würde. Satz B hat das größte Minimum (3 gegenüber 1) und würde kein L-Chip-X-Chip-Paar ausschließen. Im Fall von gleichen Werten lasse ein Minimum von jedem Satz außer Betracht und wähle den Satz aus mit dem größten verbleibenden Minimum, und so weiter, bis ein Satz ausgewählt ist. Wenn alle Sätze tatsächlich gleich sind (wie es der Fall für das erste Netz ist), wähle irgendeines aus. Dies ist das verwendete Verfahren. Eine Spezialbetrachtung wird angewendet, wenn ein Satz für ein Tri-State-Netz betrachtet wird. Da einige Paare der Chips zwei Pfade haben müssen, die für dasselbe Netz verwendet werden, einen für einen Eingang, der in der Hierarchie nach oben bis zum Summierungsgatter verläuft und der andere, der den tatsächlichen Wert wieder nach unten zurückbringt, muss der ausgewählte Satz zumindest zwei freie Pfade für diese Fälle haben. Solch ein Fall wird detektiert, wenn der Knoten am Baum des Pfades (d. h. der X-Chip-Knoten für einen L-X-Pfad etc.) von null verschiedene D- und R-Zählwerte hat und ein Mutter, die nicht null ist.

2.4.5.4 Stufe 3d: Erzeugen der Netzlisten für die Verbindung

Bei einer gegebenen Auswahl eines Satzes und einer gegebenen Baumstruktur wird die Netzliste für die Verbindung erzeugt, indem Befehle für die Puffer und die Summierungsgatter an die Logik- und Verbindungs-Chip-Netzlisten-Dateien ausgegeben werden. Dies wird Ebene nach Ebene durchgeführt, zuerst die Logikchips, dann X, Y und Z-Chips. Die Verbindungen von jedem Chip und die Richtungen werden bestimmt, indem die Daten in dem Baum verwendet werden. Jede Verbindung wird in eine Netzlisten-Datei eingetragen, indem die Befehle für die Puffer der Verbindungen und für die Netze an eine Netzlisten-Datei ausgegeben werden. Die Verbindungen eines Chips an Tochterchips (falls vorhanden) werden zuerst in die Netzlisten-Dateien eingetragen. Jeder Tochterchip wird wiederum berücksichtigt. Wenn der Baum zeigt, dass er diesen Chip treibt, wird ein Eingabepuffer in die Netzlisten-Datei eingetragen unter der Verwendung der Nummer des Pins, der mit dem Treiber des Tochterchips verbunden ist. Wenn dieser Chip mehr als einen Treiber hat, werden unterschiedliche Netznamen für jeden verwendet, so dass sie durch das später in der Netzlisten-Datei aufgeführte Summierungsgatter aufgesammelt werden können. Wenn der Baum zeigt, dass die Tochter diesen Chip empfängt, wird ein Ausgangspuffer in der Netzlisten-Datei hinzugefügt, unter der Verwendung der Nummer des Pins, der mit dem Empfänger des Tochterchips verbunden ist. Wenn dieser Chip selbst ein Empfänger von seinem Mutterchip ist, wird ein anderer Netzname verwendet, damit er mit dem Mutterempfänger in Verbindung steht.

Wenn dieser Chip mehr als einen Treiber unter seinen Töchtern hat, wird das Summierungsgatter der Netzlisten-Datei hinzugefügt und dadurch mit den Treibernetzen, die oben definiert worden sind, verbunden. Schließlich werden die Verbindungen zu dem Mutter-Chip (falls vorhanden) in der Netzlisten-Datei hinzugefügt. Wenn dieser Chip oder irgendein Nachfolger einen Treiber hat, wird ein Verbindungspfad für den Treiber vom Pfadtabelleneintrag für dieses Paar von Chips entnommen und der Satz, der ausgewählt worden ist, und ein Ausgangspuffer wird in die Netzlisten-Datei eingetragen, um den mutter-Chip über den gerade entnommenen Pfad zu treiben. Wenn dieser Chip ein Empfänger vom Mutter-Chip ist, wird ein Pfad aus der Pfadtabelle entnommen und ein Eingangspuffer, der diesen Pfad verwendet, wird in die Netzlisten-Datei eingetragen.

2.4.6 Detaillierte Definition des Vorgangs zur Verbindung und zur Erstellung der Netzlisten-Dateien. Zunächst einige allgemeine Definitionen:

Es gibt vier Klassen von Netzen: Einfach eingeschlossen: Das Netz hat einen Treiber, alle Grundelemente befinden sich auf den gleichen L-Chip. Einfaches Schnittnetz: Das Netz hat einen Treiber, die Grundelemente befinden sich in mehreren L-Chips. Tri-State eingeschlossen: Das Netz hat mehr als einen Treiber, alle Grundelemente befinden sich auf demselben L-Chip. Tri-State-Schnittnetz: Das Netz hat mehr als einen Treiber, die Grundelemente befinden sich auf mehreren L-Chips.

Die "Quelle" eines Netzes ist der Chip, der seinen aktuellen logischen Wert treibt:

Für einfache Netze ist dies der L-Chip, der den Treiber hat.

Für ein Tri-State-Netz, ist es der Chip, der das oberste Summierungsgatter hat.

Um die Quelle zu bestimmen:

Scanne das Netz, um zu sehen, wo sich die Ausgangs-Pins befinden.

Wenn sie sich alle auf dem gleichen L-Chip befinden, ist dies die Quelle.

Andernfalls, wenn sie alle auf der gleichen Karte sind, ist es der X-Chip auf dieser Karte.

Andernfalls, wenn sie alle in der gleichen Box sind, ist es der Y-Chip in dieser Box.

Andernfalls ist es der Z-Chip.

Eine Ausgangs-Pin-Indexnummer gibt an, welcher Ausgangs-Pin es in der zirkularen Liste der Pins seines Netzes ist, beginnend von dem Pin, auf den der Netzeintrag zeigt und durch Abzählen von Null beginnend.

Stufe 1: Ausgabe aller Grundelemente in der Entwurfsdatenstruktur

Für jeden L-Chip in der Entwurfsdatenstruktur:

Öffne die Netzlisten-Datei dieses L-Chips, wenn sie nicht bereits offen ist.

Für jedes Grundelement auf diesem L-Chip:

Gib die Kopfbefehlszeile für das Grundelement an die Datei aus:

Für jeden Pin dieses Grundelements:

Nimm den Namen des verbundenen Netzes (unter Verwendung der Identifizierung des Objekts des Netzes, um ihn aus der Eingabeentwurfsdatei zu erhalten) und Bezeichne ihn "N".

Falls es sich um ein Input-Pin handelt:

Wenn dieser L-Chip die Quelle des Netzes hat, gib einen Befehl aus für einen Eingangs-Pin, der mit dem Netz "N" verbunden ist.

Andernfalls gib einen Eingangs-Pin-Befehl an das Netz "N_R" aus.

Andernfalls (falls es sich um einen Ausgangs-Pin handelt):

Nimm die Indexnummer dieses Ausgangs-Pins und bezeichne sie "p".

Wenn es ein einfaches Netz ist, gib Pin auf Netz "N" aus.

Wenn es ein Tri-State eingeschlossenes Netz ist, gib Pin auf Netz "N_OR_p"aus.

Wenn es ein Tri-State-Schnittnetz ist:

Falls dies der einzige Ausgang auf diesem Netz auf diesem L-Chip ist, gib Pin auf Netz "N" aus.

Andernfalls gib Pin auf Netz "N_OR_p" aus.

Nächster Pin

Nächstes Grundelement

Nächster L-Chip.

Stufe 2: Gib alle Summierungsgatter für eingeschlossene Netze aus

Für jedes eingeschlossene Tri-State-Netz:

Nimm den Namen dieses Netzes und bezeichne es mit "N".

Öffne die Netzlisten-Datei dieses L-Chip, wenn sie nicht bereits offen ist.

Zähle, wieviele Ausgänge sich auf dem Netz befinden und bezeichne dies mit "i".

Gib Befehle aus für ein Gatter mit "i"-Eingängen:

NOR, falls dieses Netz auf "floating-high" ist, andernfalls OR,

wobei die Eingänge mit den Netzen "N_OR_j" verbunden sind, (für alle j von 0 bis i – 1)

und wobei der Ausgang mit "N" verbunden ist.

Nächstes Netz.

Stufe 3: Gib die Puffer aus, die die Schnittnetze verbinden und gib die Summierungsgatter aller Schnittnetze aus

Markiere alle Elemente von allen Verbindungspfadtabellen als "frei".

Für jedes Schnittnetz (einfach oder Tri-State).

Wähle Schnittnetze in der Reihenfolge der Hierarchie aus, zuerst Multi-Boxnetze, etc. und innerhalb dieser Reihenfolge die größten zuerst:

Stufe 3A: Baue den Baum auf

Für jedes Grundelement des Netzes:

Wenn es keinen Baumknoten für die Box dieses Grundelementes gibt, füge einen hinzu.

Wenn es keinen Baumknoten für die Karte dieses Grundelementes in dieser Box gibt, füge einen hinzu.

Wenn es keinen Baumknoten für den L-Chip dieses Grundelementes auf dieser Karte in dieser Box gibt, füge einen hinzu.

Wenn die Netzverbindung dieses Grundelementes ein Ausgangs-Pin ist (d. h. treibend), erhöhe den D-Zählwert an diesem Knoten des L-Chips.

Andernfalls, wenn dieser L-Chip nicht die Quelle für dieses Netz ist, erhöhe den R-Zählwert auf dem Knoten dieses L-Chips.

Nächstes Grundelement.

Nachdem alle Grundelemente dieses Netzes in dem Baum dargestellt sind, markiere den Y-Chipknoten NULL, wenn es nur einen X-Chipknoten gibt (d. h. das Netz bleibt auf der Karte).

Wenn es nur einen Y-Chipknoten gibt, Markiere den Z-Chipknoten mit NULL. (Das Netz bleibt innerhalb der Box).

Für jede Kreuzschienenebene die nicht NULL ist, zuerst X-Chip, dann Y-Chip, dann Z-Chip:

Für jeden Knoten auf dieser Ebene:

D = die Anzahl der Tochter-Knoten, die D-Zählwerte ungleich Null haben,

R = die Anzahl der Tochter-Knoten, die R-Zählwerte haben, die ungleich Null sind.

Wenn dieser Knoten oder ein Nachkomme die Quelle dieses Netzes ist, setze R von diesem Knoten auf 0.

Wenn dieser Knoten die Quelle ist und das Netz ein Tri-State-Netz ist, setze sein "top sum" Flag auf wahr.

Nächster Knoten.

Nächste Ebene.

Stufe 3B: Bestimme die Fähigkeit zur Verbindung von jedem Satz

Für jeden Satz: Bestimme seine Fähigkeit zur Verbindung durch das Aufsammeln der Pfadzähler für jeden Pfad, der verbunden werden soll:

Weise Speicherplatz für die Pfadzähler dieses Satzes zu:

Y-Z-Pfadzähler: einen für jede Box,

X-Y-Pfadzähler: einen für jede Karte,

L-X-Pfadzähler: einen für jeden L-Chip.

Falls es nur eine Box in diesem Netz gibt (eine Z-Ebenenverbindung wird nicht benötigt):

Lasse einen Null Y-Z-Pfadzähler für diese Box.

Andernfalls:

Für jede Box:

Zähle die Anzahl der freien Pfade in dem Pfadfeld YZ [diese Box] [dieser Satz] [Pfade].

Wenn der Baumknoten dieser Box eine Mutter hat, die nicht NULL sind, und D > 0 ist und R > 0 ist:

Dieser Pfad der Box ist "doppelt": er hat sowohl einen Treiber als auch einen Empfänger.

Wenn weniger als zwei freie Pfade vorhanden sind, kann dieser Satz dieses Netz nicht verbinden.

Andernfalls, wenn keine Pfade vorhanden sind, kann dieser Satz dieses Netz nicht verbinden.

Wenn dieser Satz nicht verbinden kann, markiere ihn als unverwendbar und fahre mit dem nächsten Satz fort.

Andernfalls Speichere das Gesamte als die Y-Z-Pfadzahl für diese Box.

Wenn es nur eine Karte in diesem Netz gibt (eine Y-Z-Verbindung wird dann nicht benötigt):

Belasse den X-Y Pfadzähler auf Null für diese Karte:

Andernfalls:

Für jede Karte:

Zähle die Anzahl der freien Pfade in dem Pfadfeld XY [diese Box] [diese Karte] [dieser Satz] [Pfade]

Wenn dieser Pfad "doppelt" ist und < zwei Paare vorhanden sind, oder wenn keine Pfade vorhanden sind, kann dieser Satz dieses Netz nicht verbinden:

Markiere diesen Satz als nicht verwendbar, und fahre mit dem nächsten Satz fort.

Andernfalls speichere die Gesamtheit als den X-Y-Pfadzähler für diese Karte.

Für jeden L-Chip:

Zähle die Anzahl der freien Pfade in dem Pfadfeld LX [diese Box] [diese Karte] [dieser L-Chip] [dieser Satz] [Pfade].

Wenn dieser Pfad "doppelt" ist, und weniger als zwei Pfade vorhanden sind, oder wenn keine Pfade vorhanden sind, kann dieser Satz nicht dieses Netz verbinden: Markiere diesen Satz als nicht verwendbar und fahre mit dem nächsten Satz fort.

Andernfalls Speichere die Gesamtheit als die L-X Pfadzahl für diesen L-Chip.

Nächster L-Chip auf dieser Karte:

Nächste Karte in dieser Box.

Nächste Box.

Nächster Satz.

Stufe 3C: Auswahl des Satzes

Für jeden Satz, der das Netz verbinden kann:

Finde den minimalen Pfadzähler unter allen Pfadzählern für diesen Satz. Nächster Satz.

Finde den größten von allen diesen minimalen Pfadzählern.

Eliminiere von der Betrachtung alle Sätze mit Pfadzählern, die kleiner sind als das größte Minimum.

Wenn kein Satz übrig ist, dann kann dieses Netz nicht verbunden werden.

Wenn ein Satz übrig ist, dann ist dieser Satz für dieses Netz ausgewählt worden.

Wenn mehr als ein Satz übrig ist,

finde das nächste größte Minimum unter allen minimalen Pfadzählern.

eliminiere aus der Betrachtung alle Sätze mit Pfadzählern, die kleiner sind.

Wiederhole dies, bis entweder ein Satz übrig ist oder alle übrigen Sätze die gleichen Pfadzähler haben.

Wähle irgendeines von den übrigen Sätzen für dieses Netz aus.

Gib den Speicherbereich für die Pfadzähler für alle diese Sätze frei.

Stufe 3D: Erzeuge die Netzlisten-Dateien für die Verbindung Definitionen der weiter unten verwendeten Prozeduren

Um einen Treiber-(oder Empfänger-)Pfad zu bekommen und zu reservieren:

  • 1) Wähle einen Pfad von einem freien Element in der Pfadtabelle für diese Ebene aus, die Chipnummer dieses Knotens, und die Chipnummer des Mutter-Knotens.
  • 2) Markiere das Element der Pfadtabelle als verwendet.
  • 3) Speichere, welcher Pfad als Pfadnummer in dem Treiber (oder Empfänger)-Pfadnummerneintrag für diesen Knoten verwendet worden ist.

Um eine I/O Pin-Nummer abzuleiten:

  • 1) Bestimme die Identitäten der Chips von diesem Knoten und der Chips des Tochterknotens (oder der Chips des Mutter-Knotens, je nach Fall) aus den Chipnummern der beiden Knoten und der Satznummer. Dies identifiziert den speziellen betroffenen Pfad (wie z. B. L4–X5, oder Karte 3–Y7).
  • 2) Erinnere Dich daran, dass die Pfadnummer einen der verschiedenen Pfade bezeichnet, die ein Paar von Chips miteinander verbinden. Bei gegebenem Chip, Pfad und Pfadnummer, lies die Pin-Nummer, die diesen Pfad verbindet, aus der Tabelle, die die I/O Pin-Nummerninformation enthält.

Um einen Puffer (Eingang oder Ausgang) unter der Verwendung eines Pfades auszugeben:

  • 1) Nimm die Pfadnummer dieses Knotens oder wenn ein Tochter-Pfad spezifiziert ist, nimm ihn vom Tochter-Knoten. Nimm die Treiber- oder Empfängerpfadnummer wie angewiesen.
  • 2) Leite die I/O Pin-Nummer dieses Puffers ab unter der Verwendung der Pfadnummer.
  • 3) Gib Grundelement-Befehle an die Netzlisten-Datei für den Chip dieses Knotens heraus, entsprechend, ob es ein Eingangs- oder ein Ausgangspuffer ist, unter Verwendung der Eingangs- und Ausgangsnetznamen, wie angewiesen, und unter der Verwendung der abgeleiteten Pin-Nummern für seinen I/O Pin.

Prozedur zum Erzeugen der Netzlisten-Datei der Verbindung:

Nimm den Namen dieses Netzes, bezeichne es mit "N".

Für jede Ebene, die nicht NULL ist, zuerst L-Chip, dann X-Chip, dann Y-Chip und Z-Chip:

Für jeden Knoten auf dieser Ebene über den gesamten Baum:

Öffne die Netzlisten-Datei für den Chip dieses Knotens, wenn sie nicht bereits geöffnet ist.

Wenn die Ebene X, Y oder Z ist: für jeden Tochterknoten unter diesem Knoten:

Setze einen Zähler "i" auf Null.

Wenn das D der Tochter > 0 ist: (die Tochter ist Treiber)

Wenn das D dieses Knotens = 1 ist:

Gib einen Eingangspuffer aus, von "N_D_c" bis "N", (wobei "c" die Nummer des Tochterknotens ist) unter der Verwendung des Pfades des Treibers der Tochter.

Andernfalls, wenn das D dieses Knotens > 1 ist:

Gib einen Eingangspuffer von "N_D_c" bis "N_OR_i" aus unter Verwendung des Treiberpfades der Tochter, und erhöhe "i".

Wenn das R des Kindes > 0 ist: (die Tochter ist Empfänger)

Wenn das D dieses Knotens > 0 ist und das R dieses Knotens = 0 ist:

Gib einen Ausgangspuffer von "N" bis "N_R_c" aus unter Verwendung des Empfängerpfades des Kindes.

Andernfalls:

Gib einen Ausgangpuffer von "N_R" bis "N_R_c" unter Verwendung des Empfängerpfades der Tochter aus.

Nächster Kinderknoten.

wenn das D dieses Knotens > 1 ist: (der Knoten hat ein Summierungsgatter)

Gib ein Gatter mit "i" Eingangen aus:

NOR, wenn dieses Netz auf "floating-high" ist, und wenn das "top sum"-Flag dieses Knotens wahr ist. Andernfalls ein OR,

wobei die Eingänge auf "N_OR_j" verbunden sind (für alle j von 0 bis i – 1),

und die Ausgänge mit "N" verbunden sind.

Wenn das D dieses Knotens > 0 ist und eine Mutter hat, die nicht NULL ist: (der Knoten ist Treiber)

Nimm und Reserviere einen Treiberpfad.

Gib einen Ausgangsfpuffer von "N" bis "N_D" aus, unter Verwendung des Treiberpfades.

Wenn das R dieses Knotens > 0 ist: (der Knoten ist Empfänger)

Nimm und reserviere einen Empfängerpfad.

Gib einen Eingangspuffer für "N_P" bis "N_R" aus, unter Verwendung des Empfängerpfades.

Nächster Knoten auf dieser Ebene

Nächste Ebene.

Nächstes Schnittnetz.

Schließe alle offenen Netzlisten-Dateien.

2.4.7 Zwei Beispielnetze

47a zeigt den ursprünglichen Eingabeentwurf für ein einfaches Netz, mit Namen "BX" mit einem Treiber und drei Empfängern, das zwei Logikchips auf einer Karte und einen Logikchip auf einer anderen Karte in derselben Box umfasst.

Der Verbindungsbaum, der durch Stufe 3a für dieses Netz gebaut wird, ist in 47b gezeigt. Es ist zu beachten, dass es dort einen Knoten für jeden Logikchip, jede Karte und einen für die Box gibt. Die Logikchipknoten entsprechen den spezifischen Logikchips. Die Kartenknoten entsprechen den X-Chips, einem auf jeder Karte und der Boxknoten entspricht einem Y-Chip. Ein Z-Chip wird für dieses Netz nicht benötigt. Welche X und Y-Chips genau verwendet werden hängt davon ab, welcher Satz gewählt wird, und ist in dem Baum nicht gezeigt. Die D und R Werte werden bei jedem Knoten gezeigt. Es ist zu beachten, dass L0 das D = 0 hat, obwohl es ein Empfänger ist, da es der Quellknoten für dieses Netz ist und den Wert nicht von oben empfangen muss, wie andere. Der Knoten für Karte 2 zeigt, dass sein R-Zählwert anfangs eins war, aufgrund der Zählung des Empfängers von L4, jedoch auf Null gesetzt wurde, da die Quelle ein Nachkomme ist. Ähnliches gilt für den Box-Knoten.

Die tatsächlichen Gatter und Puffer, die an die Netzlisten-Dateien für jeden Logik- und Kreuzschienenchip ausgegeben werden und wie sie miteinander verbunden sind, ist in 47c gezeigt. "IBUF" und "OBUF" bedeuten Eingangs- und Ausgangspuffer. Die ausgegebenen Netznamen sind mit ihren Netzen gezeigt. Es ist zu beachten wie die Struktur der tatsächlichen Verbindung die Struktur des Baumes und der D und R Zählwerte in jedem Knoten widerspiegelt.

48a zeigt den ursprünglichen Eingabeentwurf für ein Tri-State-Netz, mit Namen "EX", mit drei Tri-State-Treibern die zwei Logikchips auf einer Karte und ein Logikchip auf einer anderen Karte in derselben Box und mit sechs Empfängern die vier L-Chips auf drei Karten in zwei Boxen umfaßen.

Der Verbindungsbaum, der durch Stufe 3a für dieses Netz gebaut wird, ist in 48b gezeigt. Da dieses Netz Boxen umfasst, wird die Z-Ebenenkreuzschiene verwendet. Es ist zu beachten, dass der Knoten von Karte 2 D = 2 hat, da er zwei der Tri-State-Treiber hat, so dass der X-Chip ein Summierungsgatter haben wird, das die Terme von den L-Chips auf der Karte 2 aufsammelt. Dasselbe gilt für den Knoten der Box 2, der die Quelle des Netzes ist und mit "top sum" markiert ist. Ihr Y-Chip wird das höchste Summierungsgatter haben, das die Terme von den Karten 2 und 3 aufsammelt. Dieser Knoten und sein Z-Elternknoten enthalten die Quelle, so dass ihre R-Zählwerte auf Null gesetzt wurden.

Die tatsächlichen Gatter und Puffer die an die Netzlisten-Datei für jeden Logik- und Verbindungs-Chip ausgegeben werden ist ebenso wie ihre Verbindung in 48c gezeigt. Es ist zu beachten wie alle Tri-State-Treiber in AND-Gatter durch die Entwurfskonversion konvertiert werden. Diese Ausgänge werden durch die Summierungsgatter auf den X und Y Ebenen aufgesammelt. Die empfangenden Eingänge werden von diesem "top sum"-Knoten, dem Y-Chip in Box 2 getrieben. Die Empfänger in Box 2 werden über Pfade, die zurück nach unten über die Verbindung kommen, getrieben. Die Empfänger in Box 6 werden über den Z-Ebenen Verbindungs-Chip getrieben.

3. Realizer-System-Anwendungen 3.1 Realizer-Logik-Simulations-System

Ein Logiksimulator ist ein System das in Hardware oder Software implementiert ist, und das ein Eingabeentwurf, einen Satz von Stimulation für den Entwurf, und eine Anweisung zur Simulation für eine Zeitperiode empfängt, und das einen Satz von Antworten erzeugt, die Antworten vorhersagen die eine tatsächliche Implementierung des Eingabeentwurfs bei derselben Stimulation erzeugen würde. Die Stimulation und die Antworten bestehen aus logischen Zustandsänderungen von spezifizierten Entwurfnetzen zu spezifizierten Zeiten. Eine wichtige Eigenschaft ist, dass der Simulatoranwender nur die Beschreibung eines Entwurfs in der Form einer Eingabe-Entwurfsdatei liefert, so dass der Entwurf verändert werden kann und innerhalb von kurzer Zeit resimuliert werden kann.

Es ist die gängige Praxis eines Softwarelogik-Entwurfssimulator, ein Computer-Softwareprogramm zu verwenden, das einen sequentiellen Algorithmus ausführt, der den Betrieb des Entwurfs vorhersagt ("An Introduction to Digital Simulation", Mentor Graphics Corp., Beaverton Oregon, 1989). Entweder werden Ereignisgetriebene oder compilierte Code-Algorithmen, die wohlbekannt sind, verwendet. Die gegenwärtige Praxis eines Hardwarelogik-Entwurfssimulators ist es, Hardware zu bauen, die dieselben ereignis-getriebenen oder aus compiliertem Code bestehenden sequentiellen Algorithmen ausführt, die in Software-Simulatoren verwendet werden. Die Hartware bekommt ihren Performance-Vorteil lediglich durch das Ausnützen von Parallelismen in dem Algorithmus und/oder durch das direkte Implementieren von speziellen algorithmischen Operationen, die für eine Ausführungs-Software auf einem Mehrzweck-Computer nicht möglich sind. Gegenwärtige Hardwarelogik-Simulatoren arbeiten durch das Ausführen eines sequentiellen Algorithmus, der die Antworten des Eingabeentwurfs vorhersagt.

Ein neues Mittel zum Bau eines Logik-Simulators basiert auf dem Realizer-System. Das Realizer-Logik-Simulator-System empfängt einen Eingabeentwurf, den es in eine Konfiguration der Logik- und Verbindungschips der Realizer Hardware konvertiert, unter Verwendung des Realizer-Entwurfs-Konversions-Systems. Es nimmt einen Stimulationssatz für den Entwurf und eine Anweisung zum Simulieren über einen Zeitraum hinweg auf, wendet diese Stimulation auf den realisierten Entwurf über Vektor-Speicher an, und sammelt einen Antwortsatz vom realisierten Entwurf über Verctor-Speicher auf. Die Antworten entsprechen denen, die eine tatsächliche Implementierung des Eingabeentwurfs bei derselben Stimulation produzieren würde, da die Antwort auf die Stimulation einer tatsächlichen Hardware-Realisierung des Entwurfs beobachtet wird.

Dies unterscheidet sich fundamental von allen gegenwärtigen Logik-Simulations-Systemen dadurch, dass diese einen sequentiellen Algorithmus ausführen, der die Entwurfsantworten auf eine Stimulation vorhersagt, während der Realizer-Logik-Simulator eine tatsächliche Realisierung des Entwurfs betreibt, um die Antworten des Entwurfs auf die Stimulation zu bestimmen. Der primäre Vorteil besteht darin, dass der realisierte Entwurf die Antworten um viele Größenordnungen schneller erzeugt als ein sequentieller Algorithmus Antworten vorhersagen kann.

Das Realizer-Logik-Simulations-System besteht aus dem Realizer-Entwurfs-Konversions-System (an anderer Stelle beschrieben), der Logik-Simulator-Stimulation, und dem Antwort-Übertragungs-System, und dem Logik-Simulator-Betriebskern, zusammen mit dem Realizer-Hardware-System und dem Host-Computer (49).

3.1.1 Logik-Simulator-Stimulation und Antwortübertragungs-System

Dieses System konvertiert eine von einem Anwender erzeugte Stimulations-Ereignis-Eingabedatei in eine binäre Datei, die Stimulationsdaten enthält, die direkt in den Vektor-Speicher geladen werden können, und konvertiert die Antworten aus der Datei, die die binären Antwortdaten enthält, die aus den Vektor-Speichern gelesen worden sind, in eine von einem Anwender lesbare Antwort-Ereignis-Ausgangsdatei. Die Stimulations- und Antwortereignisse bestehen aus einem Netznamen, einer Zeit und einem neuen Netz-Zustandswert. Die Konversion findet zwischen Netznamen und Vektor-Speicherbits statt und zwischen "real time"-Simulation und Vektor-Speicherorten. Die Zeitkonversion wird durchgeführt, indem jede eindeutige Zeit mit Stimulationsereignissen auf einen Vektor-Speicherort abgebildet wird, und indem von den Antwortereignissen an diesem Vektor-Speicherort berichtet wird, dass sie zu dieser Zeit stattgefunden haben.

In der bevorzugten Ausführungsform ist die Stimulations-Eingabe-Ereignisdatei und die Antwort-Ausgangs-Ereignisdatei eine Mentor Graphics Protokolldatei ("QuickSim Family Reference Manual", Mentor Graphics Corp., Beaverton, Oregon, 1989), d. h. Textdateien, die eine Abfolge von Zeiten, Netznamen und neuen Netzwerten enthalten. Die Stimulations-Eingangs-Ereignisdatei wird erzeugt und die Antwort-Ausgangs-Ereignisdatei interpretiert durch das Batch-Simulations-Interface-Werkzeug in dem EDA-System. In der bevorzugten Ausführungsform ist dieses Werkzeug das Mentor Graphics RSIM-Werkzeug.

Diese Beschreibung nimmt an, dass alle Grundelemente mit null Verzögerung simuliert werden, wie später in diesem Abschnitt diskutiert. Um die Stimulations-Ereignis-Eingangsdatei in eine binäre Stimulationsdatei zu konvertieren:

  • 1) Lies die Stimulations-Eingangs-Ereignisdatei. Ordne die Stimulationsereignisse nach der Zunahme der Zeit und bestimme, wie viele verschiedene Zeiten Ereignisse haben.
  • 2) Lies die Korrespondenztabellen für jeden Vektor-Speicher in diesem Entwurf, die vom Entwurfs-Konversions-System erzeugt worden sind.
  • 3) Jeder Vektor-Speicherort wird einer Zeit entsprechen, die ein oder mehrere Stimulationsereignisse hat. Wenn nicht genügend Vektor-Speicherorte für alle verschiedenen Stimulations-Ereigniszeitpunkte vorhanden sind, dann wiederhole Schritt 5 und 6 so häufig wie nötig, und erzeuge genügend binäre Stimulationsdateien für alle diese Zeiten, wobei jede Datei eine Stimulation enthält, die in den Speicher passt.
  • 4) Weise Speicherplatz für die Vektor-Felder "V0", "V1", etc. zu, die jeweils in ihrer Anzahl von Orten und ihrer Netzbreite einem Vektor-Speicher entsprechen, der in dem Entwurf, der simuliert werden soll, verwendet wird. Weise Speicher für ein Zeitfeld "T" zu, mit derselben Länge wie ein Vektor-Feld. Weise "letzter Vektor" Puffer "B0", "B1", etc., einen für jeden Vektor-Speicher zu, die jeweils so breit sind wie ihre Netze breit sind, und initialisiere sie auf null.
  • 5) Setze einen Vektor-Feld-Indexzähler "v" auf null.

    Für jede Zeit, die einen oder mehrere Stimulationsereignisse hat, nimm den frühesten zuerst:

    Schreibe den Inhalt von jedem B0, B1, etc. in V0[v], V1[v], etc.

    Für jedes Stimulationsereignis zu diesem Zeitpunkt:

    Suche den Vektor-Speicher "n" und die Vektor-Speicher-Bitposition "i" für dieses Netz auf, unter der Verwendung des Korrespondenz-Tabelleneintrags für das Netz dieses Ereignisses.

    Schreibe den neuen Wert für dieses Ereignis in Vn[v] Bit i, & Bn Bit i.

    Nächstes Ereignis.

    Schreibe den Inhalt von jedem V0[v], V1[v] etc. in B0, B1, etc.

    Speichere diese Zeit in T[v],

    Erhöhe v.

    Nächste Zeit mit einem Stimulationsereignis.
  • 6) Schreibe die Vektor-Felder V0, V1 etc., das Zeitfeld T und den Zykluszähler "v" in die binäre Stimulationsdatei.

Um die binäre Antwortdatei in eine Antwort-Ereignis-Ausgangdatei zu konvertieren:

  • 1) Lies die Vektor-Felder V0, V1, etc. das Zeitfeld T und den Zykluszähler "v" aus der binären Antwortdatei. Jeder Vektor-Speicherort entspricht einer Zeit mit einem oder mehreren Stimulationsereignissen. Wenn nicht genug Vektor-Speicherorte für alle verschiedenen Stimulations-Ereigniszeiten vorhanden waren, dann wiederhole die Schritte 1–4 so häufig wie nötig, und lies alle binären Antwortdateien in diese Felder.
  • 2) Lies die Korrespondenztabellen für jeden Vektor-Speicher in diesem Entwurf, die durch das Entwurfs-Konversions-System erzeugt worden sind.
  • 3) Weise "letzter Vektor"-Puffer, "B0", "B1", etc. jeweils einem Vektor-Speicher zu, jeweils so breit wie sein Netz breit ist, und setze sie auf null.
  • 4) Setzte den Vektor-Feld-Indexzähler "v" auf null.

    Für jeden Ort in den Vektor-Speichern:

    Vergleiche V0[v] mit B0, V1[v] mit B1, etc.

    Für jeden Unterschied zwischen einem Bit in Vn[v] und Bn:

    Suche den Namen des Netzes auf, der dem Vektor-Speicher dieses Bits entspricht und die Bitposition des Vektor-Speichers, unter der Verwendung der Korrespondenztabelle für diesen Speicher.

    Schreibe ein neues Antwort-Ereignis in die Ausgangsdatei unter der Verwendung des Netznamens, des neuen Bitwertes und der Zeit T[v].

    Nächstes Ereignis.

    Schreibe die Inhalte von jedem V0[v], V1[v] etc. in B0, B1, etc.

    Erhöhe v.

    Nächster Ort.

3.1.2 Der Logik-Simulator-Betriebskern

Der Betriebskern konfiguriert das Realizer-System für den zu simulierenden Entwurf wendet die Stimulation an, und sammelt die Antwort auf. Er wird auf dem Host-Computer ausgeführt. Er konfiguriert die Logik- und Verbindungschips, liest und schreibt Vektor- und Entwurfs-Speicher und steuert Taktgeber und Reset-Erzeuger über das Host-Interface, wie in den entsprechenden Abschnitten beschrieben.

Um die Simulation zu betreiben:

  • 1) Lies die Enwurfskonfigurationsdatei und verwende sie, um alle Logik- und Verbindungschips des Realizer-Systems zu konfigurieren, wie im Konfigurationsabschnitt beschrieben. Lies die anfänglichen Entwurfs-Speicherdaten auf Dateien und schreibe sie in die Entwurfs-Speicher.
  • 2) Lies die binäre Stimulationsdatei. Speichere die Vektor-Felder-Inhalte in den entsprechenden Vektor-Speichern über das Host-Interface. Lies das Zeitfeld T und den Taktzähler "v".
  • 3) Lösche alle Vektor-Speicher-Zähler in den Vektor-Speicher-Modulen. Betreibe einen Takt des Entwurfsreset-Generators, um den realisierten Entwurf zu initialisieren.
  • 4) Setze den ECLK Taktgeber des Netzes für "v" Takte. Dies verursacht, dass die Vektor-Speicher ihre Stimulationsdaten ausgeben, und damit den realisierten Entwurf gemäß dieser Stimulation betreiben, und es verursacht, dass die Vektor-Speicher die Antwortdaten aufsammeln, wie in dem Stimulation/Antwortabschnitt beschrieben.
  • 5) Lies den Inhalt des Vektor-Speichers und speichere ihn mit dem Zeitfeld " T" und dem Taktzähler "v" in der binären Antwortdatei.
  • 6) Wenn aufgrund von nicht ausreichender Vektor-Speicherkapazität mehr als eine Stimulationsdatei vorhanden ist, wiederhole die Schritte 25 für jede Datei.
  • 7) Speichere die Entwurf-Speicherinhalte in Dateien zur Untersuchung durch den Anwender.

3.1.3 Die Verwendung des Realizer-Logik-Simulations-System

Um einen Eingabeentwurf mit dem Realizer-Logik-Simulator zu simulieren:

  • 1) Bereite einen Eingabeentwurf vor unter der Verwendung des Entwurfs-Erzeugungs-Werkzeuges des EDA-Systems, indem Netze, die stimuliert werden sollen, markiert werden, und Netze, von denen eine Antwort aufgesammelt werden soll, mit Eigenschaften markiert werden, die die Verbindungen zum Vektor-Speicher anzeigen. Bereite Ausgangs-Entwurfs-Speicherdaten-Dateien, falls benötigt, vor. Bereite die Stimulations-Ereignis-Eingabedatei vor, unter der Verwendung des Batch-Simulations-Interface-Werkzeugs des EDA-Systems.
  • 2) Konvertiere den Eingabeentwurf mit dem Realizer-Entwurfs-Konversions-System zum Erzeugen einer Konfigurations-Datei und einer Vektor-Speicher-Netzkorrespondenz-Tabellendatei.
  • 3) Führe das Stimulations- und Antwortübertragungs-System aus zum Konvertieren der Stimulations-Ereignis-Eingabedatei in eine oder mehrere binäre Stimulations-Dateien.
  • 4) Führe den Betriebskern aus, der die Stimulation durchführt, und die binäre(n) Antwort-Datei(en) erzeugt.
  • 5) Führe das Stimulations- und Antwortübertragungs-System aus zum Konvertieren der binären Antwort-Datei(en) in die Antwort-Ereignis-Ausgangs-Datei.
  • 6) Interpretiere die Antwort-Ereignis-Ausgangs-Datei unter Verwendung des Batch-Stimulations-Interface-Werkzeugs des EDA-Systems.
  • 7) Führe die notwendigen Veränderungen in dem Eingabeentwurf durch, den ursprünglichen Entwurf-Speicherdateien und/oder den Stimulations-Ereigniseingabedateien entsprechend den Ergebnissen der Simulation, und wiederhole die Schritte 26, wie benötigt.

Eine interaktive Variation des Realizer-Logik-Simulations-Systems verwendet Stimulatoren zur Stimulation und Abtaster für die Antwort. Die Zusammenstellung und der Betrieb sind ähnlich mit der Ausnahme, dass ein interaktives Stimulations-Interface-Werkzeug verwendet wird, anstelle des Batch-Stimulations-Interfacer-Werkzeugs, das mit dem Stimulations- und Antwortübertragungs-System direkt kommuniziert, anstelle über Dateien zu kommunizieren, und das Stimulations- und Antwortübertragungs-System kommuniziert direkt mit dem Betriebskern, anstatt über Dateien zu kommunizieren, wobei das interaktive Stimulations-Interface-Werkzeug und der Betriebskern gleichzeitig arbeiten. Jeder Zeitschritt mit Ereignissen wird auf einen "sync-Taktgeber"-Takt der flankensensitiven Stimulatoren abegebildet, anstelle eines Ortes des Vektor-Speichers.

3.1.4 Realisierung von mehr als zwei logischen Zuständen.

Es ist praktisch, direkt zwei logische Zustände in einem Realizer-System zu realisieren: logisch hoch (H) oder wahr, und logisch niedrig (L) oder falsch, indem jedes Netz im Eingabeentwurf mit einem einzelnen Signal im dem Realizer-System realisiert wird.

Manchmal ist es wünschenswert, mehr als zwei Zustände eines logischen Signals in einer Logik-Simulations-Umgebung darzustellen. Beispielsweise kann ein dritter Zustand "unbekannt (X)" dazu verwendet werden, um nicht initialisierte logische Variablen oder eine zweideutige Logik-Situation darzustellen. Ein Hoch-Impedanz-Zustand (Z) kann bei der Realisierung von über Verdrahtung verbundenen Bussen sinnvoll sein, wie z. B. Tri-State-Bussen.

Hoch-Impedanz-Zustände können in einigen Ausführungsformen des Realizer-Systems direkt realisiert werden. Wenn beispielsweise ein Tri-State-Bus in dem Entwurf benötigt wird, kann er durch einen Tri-State-Bus im Realizer-System realisiert werden, so lange wie die Logikchips und irgendwelche benötigte Verbindungen die Fähigkeit haben, dass die Tri-State-Busmöglichkeiten auf ihnen konfiguriert werden. Alternativ dazu werden beliebige Logik-Zustände durch das Kodieren von einem Netz in mehr als ein Signal wie folgt realisiert: die Anzahl der zu realisierenden Zustände wird festgestellt. Die Anzahl der binären Bits, die benötigt werden, um in minimaler Weise alle Zustände eindeutig zu kodieren, wird festgestellt, und mit "n" bezeichnet. Ein Netz in dem Entwurf wird durch "n" tatsächliche binäre logische Signale realisiert. Wenn beispielsweise 3 Zustände (H, L, X) benötigt werden, werden zwei tatsächliche binäre Signale verwendet, um ein einzelnes Entwurfsnetz in dem Realizer-System zu realisieren. Diese Transformation wird während der Grundelemente-Konversions-Stufe durchgeführt, und diese neuen binären Signale werden in die Entwurfs-Datenstruktur eingebaut, und ersetzen das ursprüngliche Entwurfsnetz.

Ferner werden logische Grundelemente in den Entwurf durch logische Netzwerke realisiert, die gemäß der Multizustands-Logikfunktion arbeiten. Wenn beispielsweise 3 Zustände (H = hoch, L = niedrig, X = unbekannt) verwendet werden, wird ein AND-Gatter in dem Entwurf mit zwei Eingängen durch ein logisches Netzwerk realisiert, das gemäß der 3-Zustands-AND-Funktion (50a) arbeitet. Die Logikfunktion arbeitet, als ob sie in einem 3-Zustands-Simulator wäre, wobei der X-Zustand am Ausgang erzeugt wird, wenn beide Eingänge X sind und kein Eingang L ist (50b). Dieses Netzwerk hat zwei 2-Biteingänge und einen 2-Bitausgang (50c).

Diese Vielzustands-Realisierungs-Technik kann im gesamten Eingabeentwurf verwendet werden oder nur in Teilen des Entwurfs, wie es durch die Anforderungen der Entwurfsanalyse verlangt wird. Netze, die in mehr als zwei Zuständen simuliert werden sollen, werden entsprechend in der Eingabeentwurfs-Datei markiert, der Entwurfsleser notiert dies in der Entwurfs-Datenstruktur, und der Grundelemente-Konvertierer führt die obige Ersetzung eines Netzwerks für Grundelemente und mehrere Netze für eins durch. Wenn ein logisches Grundelement eine Mischung aus Zwei-Zustand und Mehr-als-Zwei-Zustand-Netzverbindungen hat, wird ein logisches Netzwerk, das gemäß der Netzanforderungen arbeitet, verwendet. Ansonsten arbeitet die Simulation wie oben beschrieben.

3.1.5 Die Realizer-Darstellung von Verzögerung

Die Zeitverzögerung für ein Signal, das ein Logikelement passiert, wird auf viele Arten in modernen Logik-Simulatoren modelliert. Da die Logik in den Logikchips des Realizers tatsächlicher Hardware ist, können ihre Verzögerungseigenschaften nicht mit vollständiger Genauigkeit definiert werden, so dass Logikverzögerung nicht direkt modelliert werden kann. Sie wird durch die Verwendung von Spezialmethoden in dem Simulator-Betriebsprogramm modelliert, und/oder durch das Einfügen von besonderen Logikfunktionen zum Modellieren von Verzögerung, während des Entwurfs-Konversions-Vorgangs. Verzögerung kann in einer realisierten Simulation als eine Null-Verzögerung, eine Einheits-Verzögerung oder eine tatsächliche Verzögerung modelliert werden. Die Wahl wird durch den Anwender getroffen und im Realizer-Logik-Simulations-System spezifiziert.

3.1.5.1 Null-Verzögerung

Null-Verzögerung bedeutet, dass die Simulation arbeitet ohne die Modellierung von Realzeit-Verzögerung, indem sie sie behandelt, als ob sie null wäre. Wenn beispielsweise ein Stimulations-Ereignis zu einer Zeit "t" an einem Eingang erfolgt, der direkt über Kombinationslogik mit einem Ausgang verbunden ist, wird das Antwort-Ereignis auf diesem Ausgang berichtet, als ob es zur Zeit "t" stattgefunden hat.

Für Null-Verzögerung werden durch das Entwurfs-Konversions-System keine zusätzlichen Logikfunktionen eingefügt. Die Stimulation arbeitet gemäß des in der obigen Hauptdiskussion des Realizer-Logik-Systems beschriebenen Verfahrens.

3.1.5.2 Verzögerungsabhängige Funktionalität

Wenn es eine verzögerungsabhängige Funktionalität in dem Entwurf gibt, treten Komplikationen auf. Das Null-Verzögerungs-Timing-Modell versagt in diesem Fall. Wenn eine geschlossene Schleifenfunktionalität vorliegt, d. h. eine asynchrone Rückkopplung wie in kreuzverbundenen Gattern, kann dort ein impliziter Speicher vorhanden sein. Die Funktionalität des Speichers kann von den relativen Verzögerungen abhängen. Die andere Form von verzögerungsabhängiger Funktionalität besteht darin, wenn Verzögerung in einer offenen Schleifenfunktion verwendet wird. Ein Beispiel dafür ist ein Exklusiv-oder-Gatter, mit einem Verzögerungselement, das über seine Eingänge verbunden ist (51a). Der Exklusiv-oder-Ausgang ist hoch während der Zeit, die von einem Signal benötigt wird, um durch das Verzögerungselement zu wandern. Jeder Übergang, der an dieses Netzwerk angelegt wird, wird einen Puls am Ausgang hervorrufen (51b).

Da die tatsächlichen Verzögerungen der Realizer-Logik ungleich null sind, arbeitet eine verzögerungsabhängige Funktionalität, die selbst nicht direkt kontrolliert werden kann, in den meisten Fällen einer geschlossenen Schleife korrekt, wie z. B. kreuzverbundenen Gattern und in einigen Fällen einer offenen Schleife.

Ein Anwender kann jedoch Sicherheit verlangen, dass ein realisierter Entwurf wie beabsichtigt arbeitet. Moderne Timing-Analyse-Werkzeuge finden und berichten automatisch das Auftreten von asynchroner Rückkopplung, und detektieren verzögerungsabhängiges Verhalten von offenen Schleifen. Das Realizer-Entwurfs-Konversions-System führt eine Timing-Analyse durch, wenn sie vom Anwender verlangt wird, durch, dass sie ein Timing-Analyse-Werkzeug verwendet. Die bevorzugte Ausführungsform verwendet das Mentor Graphics QuickPath timing analysis-Werkzeug ("QuickPath User's Manual", Mentor Graphics Corp., Beaverton, Oregon, 1989). Da der Betrieb und die Fähigkeiten von solchen Werkzeugen wohlbekannt sind, werden sie hier nicht weiter beschrieben. Die Analyse arbeitet nach dem folgenden Verfahren:

  • 1) Als Teil des Entwurfs-Konversions-Vorgangs erzeugt das ERCGA-Netzlisten-Konversions-Werkzeug Abschätzungen der internen Verbindungen und logischen Verzögerungen, die an Berichtsdateien ausgegeben werden.
  • 2) Nachdem alle Netzlisten konvertiert worden sind, lies die Daten aus den Berichtsdateien und gib sie in die Entwurfs-Datenstruktur ein, wobei jede Verzögerungsschätzung ihrem Grundelement oder Netz zugeordnet wird.
  • 3) Schreibe die Entwurfs-Datenstruktur in eine Entwurfs-Datei aus.
  • 4) Wende das Timing-Analyse-Werkzeug auf die Entwurfs-Datei an. Berichte irgendwelche möglichen Anomalien, die durch den Timing-Analysator entdeckt worden sind, an den Anwender, der die Eingabeentwurfs-Datei entsprechend evaluieren und modifizieren wird.

3.1.5.3 Einheitsverzögerung

Ein Einheitsverzögerungs-Modell ist ein Modell, bei dem jedes logische Grundelement mit einer Verzögerung von einer Einheit modelliert wird. Solch eine Modellierung wird häufig bei Entwürfen verwendet, die ein verzögerungsabhängiges Verhalten haben, um einen korrekten Betrieb sicherzustellen. Der Anwender spezifiziert Grundelemente für eine Einheitsverzögerung, die mit Grundelementen mit Null Verzögerung gemischt werden können, indem die geeigneten Eigenschaften den Grundelementen in der Eingabeentwurfs-Datei hinzugefügt werden.

Das Einheitsverzögerungs-Modellieren wird automatisch realisiert, indem ein Flip-Flop an den Ausgang von jedem Einheitsverzögerungs-Logikelement hinzugefügt wird. Diese Flip-Flops werden mit einem gemeinsamen Taktgeber verbunden, der durch einen zweiten Takterzeuger einmal für jede Zeiteinheit in der Simulation getaktet wird. Diese Flip-Flops und ihr "Zeittakt"-Netz werden zu der Entwurfs-Datenstruktur durch den Grundelemente-Konversionsprozeß hinzugefügt. Ein Beispiel für ein logisches Entwurfsnetzwerk, das mit Einheitsverzögerung simuliert wird, ist der Flip-Flop aus kreuzverbundenen Gattern (52a). Jedes Gatter wird mit einem Einheitsverzögerungs-Flip-Flop an seinem Ausgang konfiguriert (52b). Der resultierende Betrieb bei einem kontinuierlichen Zeittakt und Eingangssignalen ist der eines Flip-Flops mit Einheitsverzögerungs-Gattern (52c).

Der Realizer-Logik-Simulator für eine Einheitsverzögerungs-Simulation arbeitet gemäß der gleichen Verfahren wie für Null-Verzögerung, mit den folgenden Variationen:

  • – Der Anwender spezifiziert, wieviel Zeit einer Einheit entspricht.
  • – Die Stimulations- und Antwortzeiten werden auf vom Anwender spezifizierte Vielfache "M" der Zeiteinheit begrenzt.
  • – Jeder Vektor-Speicherort entspricht M-Zeiteinheiten, unabhängig davon, ob irgendwelche Stimulations-Ereignisse zu dieser Zeit vorliegen.
  • – Das Stimulations- und Antwortübertragungs-System verwendet diese Spezifizierungen, um gemäß dieser Korrespondenz, Ereignisse und Vektor-Speicherorte aufeinander abzubilden.
  • – Entsprechend wird eine Zeit ohne Stimulations-Ereignis durch einen Vektor-Speicherort dargestellt, dessen Inhalt identisch mit dem vorangehenden Ort ist.
  • – Der Betriebskern setzt die Frequenz des "Zeittakt"-Taktgebers auf M mal die Frequenz des ECLK und spezifiziert, dass sie synchron zueinander arbeiten. Während des Betriebes gibt es alle M-Zeiteinheiten ein ECLK-Signal und damit einen Satz von Stimulation und Antwort.

3.1.5.4 Reale Verzögerung

Reale Verzögerung oder Verzögerung mit variablen Zeiteinheiten wird durch die Verwendung von speziellen Hardware-Konstruktionen in den Logikchips realisiert, die automatisch in die Entwurfs-Datenstruktur für jedes Real-Verzögerungs-Logikelement während der Entwurfs-Konversion eingefügt werden. Dabei gibt es verschiedene Techniken:

Ein serielles Schieberegister wird in Serie mit jedem Ausgang eines logischen Grundelementes konfiguriert. Seine Länge wird entsprechend der Anzahl von Verzögerungseinheiten, die in dem jeweiligen Fall benötigt werden, konfiguriert. Alle Schieberegister werden durch einen gemeinsamen "Zeittakt" getaktet, der pro Zeiteinheit einen Takt durchläuft. Dadurch wirkt das Schieberegister als eine "n"-Einheiten-Reale-Verzögerung, wobei "n" die Länge des Registers bezeichnet (53a, gewählt über einen Multiplexer entsprechend dem Wert in dem Verzögerungsregister).

Alternativ dazu wird eine Maschine mit endlich vielen Zuständen (finite-statemachine, FSM) und ein Zähler mit Speicher für eine oder mehrere Startzählwerten in Serie mit jedem Ausgang eines logischen Grundelementes konfiguriert (53b). Die FSM detektiert Ausgangs-Zustandsübergänge des logischen Grundelementes. Für jeden Zustands-Übergang wird der Zähler durch die FSM mit der Startzählwert geladen, der für die besondere Art von Zustandsübergang, die sich ereignet hat (aufsteigend oder fallend) geeignet ist. Alle Zähler werden durch einen gemeinsamen "Zeittakt" getaktet, der jeweils einen Takt für eine Zeiteinheit durchläuft. Wenn der Zähler Null erreicht, wird der Zustandsübergang des Ausgangs durch die FSM an den verzögerten Ausgang zur Weiterleitung an die mit ihm verbundenen Eingänge geleitet (vergleiche 53c).

Bei beiden Techniken ist der Betrieb des Simulators identisch zu der obigen Einheits-Verzögerungs-Methode. Der einzige Unterschied ist, dass die Logikelemente mehr als eine Einheit an Verzögerung zeigen, aufgrund der obigen Strukturen.

3.1.6 Transferieren eines Zustandes von einem Realizer-Simulator in einen anderen Simulator

Das Realizer-Logik-Simulations-System hat die Vorteile der extremen Geschwindigkeit und damit der Fähigkeit, Größenordnungen mehr an Testzyklen zu verarbeiten als Software oder andere ereignisgetriebene Simulatoren. Es hat die Nachteile, dass Verzögerungen und andere zeitbezogene Details nicht dargestellt werden können, und dass nicht alle Knoten in dem Design beobachtet werden können. Konventionelle ereignisgetriebene Software-Simulatoren können Vorteile der Detaildarstellung und des Zugriffs auf alle Netzwerkknoten zur Stimulation und Beobachtung haben. Da sie jedoch so langsam sind, ist es nicht praktisch, den simulierten Entwurf in einen Fehlerzustand zu bringen, der viele Millionen und Milliarden von Zyklen entfernt vom Anfangszustand ist. Das Herausfinden des Fehlerzustandes kann in der Praxis unmöglich sein.

Wenn ein Realizer-System aus Logikchips (wie z. B. den Xilinx LCAs) aufgebaut ist, die die Fähigkeit haben, ihren internen Zustand auszulesen, d. h. die Werte der internen Flip-Flops und der Ausgänge der Logikgatter, kann eine realisierte Simulation angehalten werden, und der Zustand des gesamten Entwurfs ausgelesen werden. Ein Realizer-Logik-Simulator und ein anderer Simulator werden verbunden, um zu erlauben, dass der Zustand des simulierten Entwurfs (d. h. die Werte von allen internen Speichern in dem Entwurf und alle Eingänge des Entwurfs) vom einen auf den anderen transferiert werden, gemäß dem folgenden Verfahren:

  • 1) Der gleiche Entwurf wird in beide Simulatoren geladen.
  • 2) Der Entwurf in dem Realizer-Logik-Simulator wird für eine bestimmte Anzahl von Takten simuliert, wie z. B. der Anzahl von Takten, die es benötigt, um den Entwurf in einen Zustand zu bringen, der kurz vor einem Fehler ist, oder bis ein anderer Zustand auftritt, der im Detail untersucht werden soll.
  • 3) Zu diesem Zeitpunkt werden die Stimulationstaktgeber angehalten und der gesamte Zustand des Entwurfs wird aus den Logikchips ausgelesen.
  • 4) Der Entwurf, der in einem anderen Simulator dargestellt ist, wird dann initialisiert, um mit dem Zustand, der aus dem Realizer-basierten Simulator ausgelesen worden ist, übereinzustimmen.
  • 5) Die Simulation schreitet in dem anderen Simulator fort.

Auf diese Art wird die extreme Geschwindigkeit des Realizer-Logik-Simulators dazu verwendet, um Fehler aufzudecken, die auf andere Art zu lange benötigten, um entdeckt zu werden. Daraufhin kann die Detailliertheit und die Durchsichtigkeit eines anderen Simulators dazu verwendet werden, den Grund des Fehlers zu analysieren.

3.2 Das Realizer-Fehler-Simulations-System

Fehlersimulation ist eine Abwandlung von Logiksimulation, die dazu verwendet worden ist, um Test-Vektoren zu entwickeln und zu qualifizieren, d. h. Sätze von Stimulationen, die dazu verwendet werden, um die Richtigkeit eines Entwurfes, typischerweise eines integrierten Schaltkreises, zu überprüfen, nachdem er hergestellt worden ist. Eine fehlerhafte Version des Anwenderentwurfs wird simuliert unter der Verwendung einer Test-Vektor-Stimulation und mit der guten Version verglichen, um zu sehen, ob die Test-Vektor-Stimulation irgendeine andere Antwort hervorruft als die Antwort der guten Version. Falls dies der Fall ist, ist bewiesen, dass die Test-Vektor-Stimulation die Detektion dieses Fehlers hervorrufen kann. Dieses wird für eine Menge von Fehlern wiederholt. Das Ziel ist, einen Satz von Test-Vektoren zu entwickeln, die so viele Fehler wie möglich detektieren. Normalerweise werden zwei Fehler für jedes Netz in dem Eingabeentwurf simuliert, einer, bei dem das Netz konstant niedrig ist, genannt "stuck-at-low" und einen "stuck-at-high". Da Eingabeentwürfe üblicherweise tausende von Netzen haben, und tausende von Test-Vektoren, und die Fehler-Simulation für jede neue Version der Test-Vektoren wiederholt wird, ist dies eine sehr zeitaufwendige Aufgabe.

Ein neues Mittel zum Aufbau eines Fehler-Simulators basiert auf dem Realizer-System. Das Realizer-Logik-Simulator-Verfahren wird mit Veränderungen zur Fehler-Simulation verwendet. Die serielle Fehler-Simulations-Technik ("Quick-Sim Family Reference Manual", Mentor Graphics Corp., Beaverton, Oregon, 1989) wird dabei verwendet:

für jeden Fehler:

  • 1) Modifiziere den realisierten Entwurf, um einen Fehler einzuführen.
  • 2) Betreibe den Entwurf mit der Stimulation und vergleiche die Antworten mit denen eines guten Entwurfs, und markiere alle Unterschiede.
  • 3) Entferne den Fehler und speichere, ob es einen Unterschied für diesen Fehler gab.

Der Unterschied zu allen gegenwärtigen Fehler-Simulations-Systemen besteht darin, dass sie sequentielle Algorithmen ausführen, die die fehlerhaften Antworten des Entwurfs auf die Stimulation vorhersagen, während der Realizer-Fehler-Simulator eine tatsächliche Realisierung des fehlerhaften Entwurfs betreibt, um die Antworten des Entwurfs auf die Stimulation zu bestimmen. Der primäre Vorteil liegt darin, dass der realisierte Entwurf die Antworten um viele Größenordnungen schneller erzeugt, als ein sequentieller Entwurf Antworten vorhersagen kann.

Fehler werden direkt in den Entwurf eingeführt, wie er in den Realizer-Logik- und Verbindungschips konfiguriert ist. Um einen Fehler in ein Eingabeentwurfs-Netz einzuführen:

Wenn das Netz in dem Eingabeentwurf ein korrespondierendes Netz in den Logikchips hat:

Rekonfiguriere jeden Logikchip, der mit dem Netz verbunden ist, mit einer fehlerhaften Konfiguration, die identisch mit der ursprünglichen Konfiguration ist, mit der Ausnahme, dass die Eingänge zu dem Netz mit einem konstanten Hoch oder einem konstanten Tief, entsprechend dem Fehler verbunden sind.

Falls nicht, wurde es in eine Logikchip-Funktion subsummiert:

Rekonfiguriere den Logikchip mit einer fehlerhaften Konfiguration, die identisch zu der Originalkonfiguration ist, mit der Ausnahme, dass die Logikfunktion die das Netz subsummiert, konfiguriert wird, um zu arbeiten, als ob das Netz konstant hoch oder niedrig wäre, entsprechend dem Fehler.

Um den Fehler zu entfernen, rekonfiguriere die Chips mit ihren Originalkonfigurationen.

Der Realizer-Fehler-Simulator ist im Wesentlichen ähnlich dem Realizer-Logik-Simulator mit den folgenden Unterschieden (54):

Er hat einen Fehlerkonfigurierer, der ein zusätzlicher Teil des Entwurfs-Konversions-Systems, über das des Logik-Simulators hinaus ist. Er erzeugt Konfigurations-Dateiunterschiede für jeden Fehler wie folgt:

  • 1) Baue temporär den Fehler in die Entwurfs-Datenstruktur ein.
  • 2) Stelle fest, welche Logikchips durch den Fehlerentwurf verändert werden.
  • 3) Gebe Netzlisten-Dateien für die betroffenen Logikchips aus.
  • 4) Erzeuge Konfigurations-Dateien für die betroffenen Logikchips mit dem ERCGA-Netzlisten-Konversions-Werkzeug.
  • 5) Vergleiche die fehlerhaften Konfigurationsdateien mit den ursprünglichen, und speichere lediglich die Unterschiede in der Konfigurations-Unterschiedsdatei.

Anstatt Antwort-Vektor-Speicher auf Antwortnetzen zu konfigurieren, konfiguriert der Entwurfs-Konvertierer fehlerhafte Antwort-Vektor-Speicher. Wie in dem Stimulation/Antwortabschnitt beschrieben, vergleichen diese das Antwortnetz mit den guten Werten, die im Speicher gespeichert sind, und setzen einen Flip-Flop, wenn ein Unterschied detektiert worden ist.

Der Betriebskern arbeitet unterschiedlich für die Fehlersimulation. Um die Feh-ler-Simulation zu betreiben (mit null Verzögerung gezeigt, für Einheits- oder reale Verzögerung ähnlich):

  • 1) Lies die Entwurfskonfigurations-Datei und verwende sie, um alle Realizer-Logik- und Verbindungschips zu konfigurieren, wie in dem Abschnitt über die Konfiguration beschrieben. Lies die anfänglichen Entwurfsspeicherdaten aus Dateien und schreibe sie in die Entwurfsspeicher. Lies die Konfigurations-Unterschieds-Datei.
  • 2) Lies die binäre Stimulations-Datei. Speichere die Vektorfelderinhalte in den entsprechenden Vektorstimulationsspeichern über das Host-Interface. Lies das Zeitfeld "T" und den Taktzähler "v". Lies die binäre Antwort-Datei des guten Schaltkreises. Speichere die Inhalte der Vektorfelder in den entsprechenden Vektorspeichern für die Fehlerantwort.
  • 3) Erzeuge die Fehler-Konfigurations-Dateien für die durch den ersten Fehler betroffenen Logikchips unter Verwendung der Konfigurationsunterschiede für diesen Fehler und verwende sie, um die Logikchips für diesen Fehler zu konfigurieren.
  • 4) Lösche alle Vektorspeicherzähler und Unterschiedsdetektions-Flip-Flops in den Vektorspeichermodulen. Takte den Entwurfs-Reset-Generator, um den realisierten Entwurf zu initialisieren.
  • 5) Setze den ECLK-Taktgeber des Netzes für "v"-Takt. Dies verursacht, dass die Stimulations-Vektorspeicher ihre Stimulationsdaten ausgeben, den realisierten Entwurf gemäß dieser Stimulation betreiben und verursacht, dass die Vektorspeicher der Fehlerantwort die Antwortdaten mit dem guten Schaltkreis vergleichen.
  • 6) Überprüfe die Detektions-Flip-Flops der Fehlerantwort und speichere, ob ein Unterschied für diesen Fehler aufgetreten ist.
  • 7) Stelle die Originalkonfigurationen der verfälschten Logikchips wieder her.
  • 8) Wiederhole die Schritte 37 für jeden übrigen Fehler.

3.3 Realizer-Logiksimulator-Evaluationssystem

Die meisten gegenwärtigen konventionellen Simulatoren in modernen EDA-Systemen arbeiten entweder gemäß wohlbekannter sequentieller Algorithmen, die als Ereignis-getrieben bezeichnet werden oder gemäß einer Kompilier-Code-Simulation ("An Introduction to Digital Simulation", Mentor Graphics Corporation, Beaverton, Oregon, 1989). Jedes Grundelement in dem Eingabeentwurf wird für jeden Zeitschritt "evaluiert", indem für ein Netz, das einen Eingangs-Pin des Grundelementes treibt, ein Ereignis stattfindet, d. h, eine Veränderung des Zustands im ersten Algorithmus oder für alle Zeitschritte im zweiten. Eine Evaluation eines Grundelementes ist der Vorgang des Bestimmens der/des neuen Ausgangswertes) als eine Folge des neuen Eingangswertes. Dies geschieht viele Male während einer Simulation. Normalerweise werden nur kleine Grundelemente, wie zum Beispiel Gatter, bei einem Vorgang evaluiert unter der Verwendung von Tabellen oder anderen direkten Techniken. Große logische Netzwerke werden üblicherweise als eine Zusammenstellung von kleinen Grundelementen und Netzen simuliert. Viele zeitaufwendige interne Evaluationen werden für jede Evaluation eines großen Netzwerkes benötigt.

Ein Logiksimulator, außerhalb des Realizer-Systems, der einen sequentiellen Simulationsalgorithmus ausführt, wird mit dem Realizer-Logiksimulator-Evaluationssystem verbunden, das die Realizer-Hardware dazu verwendet, um ein oder mehrere logische Netzwerke mit einer algorithmischen Simulation zu evaluieren. Jedes große logische Netzwerk, das durch das Realizer-System evaluiert werden soll, wird als ein einzelnes Grundelement in dem externen Logiksimulator dargestellt. Der Vorteil liegt in der Geschwindigkeit, da das realisierte Grundelement nahezu sofort evaluiert wird. Die Größe des logischen Netzwerks, das durch das Realizer-System evaluiert wird, ist lediglich durch die Logikkapazität des Realizers begrenzt und umfasst den gesamten Eingabeentwurf.

Das Realizer-Logik-Simulationssystem besteht aus dem Realizer-Entwurfs-Konversionssystem (an anderer Stelle beschrieben) und dem Realizer-Logik-Simulationsevaluator, zusammen mit dem Realizer-Hardware-System und dem Host-Computer (55). Es ist mit einem externen Logiksimulator verbunden, der einen sequentiellen Simulationsalgorithmus betreibt.

Um logische Netzwerke für die Evaluation durch das Realizer-Logik-Simulations-Evaluationssystem vorzubereiten:

  • 1) Setze die logischen Netzwerke, die durch das Realizer-System evaluiert werden sollen, als ein Eingabeentwurf auf dem EDA-System zusammen.
  • 2) Weise den Eingangs- und Ausgangsnetzen von jedem logischen Netzwerk Eigenschaften zu, die spezifizieren, dass sie durch Stimulatoren bzw. Abtaster angetrieben werden.
  • 3) Konvertiere den Eingabeentwurf unter Verwendung des Realizer-Entwurfskonversionssystems auf die normale Art und erzeuge Konfigurations- und Korrespondenz-Tabellen-Dateien für diese Sammlung von logischen Netzwerken.

Um die Simulation durchzuführen, betreibe gemeinsam den externen Logiksimulator, der den Simulationsalgorithmus ausführt, und den Realizer-Logik-Simulationsevaluator entsprechend dem folgenden Verfahren:

  • 1) Organisiere die Datenstrukturen des externen Simulators, so dass es ein einzelnes Grundelement für jedes logische Netzwerk gibt, das durch das Realizer-System evaluiert werden soll.
  • 2) Lies die Korrespondenz-Tabellen-Datei des Entwurfes und ordne Eingänge und Ausgänge der Grundelemente ihren entsprechenden Stimulatoren und Abtastern und ihren Adressen auf dem Realizer-Host-Interface-Bus zu.
  • 3) Lies die Konfigurations-Datei des Entwurfs und verwende sie, um alle Realizer-Logik- und Verbindungschips zu konfigurieren wie im Abschnitt über die Konfiguration beschrieben. Lies die ursprünglichen Entwurfsspeicherdaten aus Dateien und schreibe sie in die Entwurfsspeicher. Takte den Entwurf-Reset-Generator, um die realisierten logischen Netzwerke zu initialisieren.
  • 4) Initialisiere alle Stimulatoren mit Anfangswerten.
  • 5) Betreibe den Simulationsalgorithmus in dem externen Logiksimulator.

Der Simulationsalgorithmus verwendet diese Methode, um Realizer-basierte Grundelemente zu evaluieren:

  • 1) Transferiere die Werte für alle Eingänge für dieses Grundelement bei diesem Simulationszeitschritt an den Realizer-Logik-Simulationsevaluator und weise ihn an, die Werte in die entsprechenden Stimulatoren zu laden.
  • 2) Weise den Realizer-Logik-Simulationsevaluator an, alle Ausgangsabtaster für dieses Grundelement zu überprüfen und irgendwelche Veränderungen als Ausgänge zurück an den Simulationsalgorithmus zu transferieren.
  • 6) Schaffe die Möglichkeit, dass das Anwender-Interface-System des externen Logiksimulators auf die Inhalte der Entwurfsspeicher über das Host-Interface zugreifen kann zur Untersuchung durch den Anwender und zur Modifizierung vor, während oder nach der Simulation.

Wenn der Simulationsalgorithmus in der Software ausgeführt wird, wird er auf dem Realizer-Host-Computer ausgeführt und er verwendet das Host-Interface, um auf Stimulatoren, Abtaster und den Entwurfsspeicher zuzugreifen.

Wenn der Simulationsalgorithmus in der Hardware ausgeführt wird, verwendet er Kommunikationsverbindungen zu dem Host-Computer, um auf Stimulatoren, Abtaster und den Entwurfsspeicher zuzugreifen.

Eine Variation für Hardware-Simulationssysteme verwendet eine direkte Verbindung zwischen der Simulatorhardware und den vom Anwender gelieferten Bauelementen (USD-Modulen) des Realizers. Das Verfahren ist wie oben mit diesen Unterschieden:

  • 1) Anstatt des Spezifizierens von Stimulatoren und Abtastern für die Eingänge und Ausgänge der Grundelemente im Eingabeentwurf, verbinde sie mit einem USD-Grundelement, das der Evaluationseinheit des Hardware-Simulators entspricht.
  • 2) Verbinde elektrisch die Evaluationseinheit des Hardware-Simulators mit dem USDM des Realizers.
  • 3) Wenn Eingabeereignisse geschehen, wende neue Werte auf das realisierte Grundelement durch eine direkte Verbindung an und sammle die Ausgangsantworten durch die direkte Verbindung anstatt über den Host. Dadurch ergeben sich noch höhere Evaluationsgeschwindigkeiten.

3.4 Das Realizer-System zum Prototypenbau

Wenn ein Eingabeentwurf realisiert wird, kann er direkt betrieben werden als eine Prototyprealisierung des Entwurfs. Obwohl die Timing-Verzögerungen des Realizer-Systems im allgemeinen nicht mit denen der endgültigen Hardware-Realisierung übereinstimmen und daher der Prototyp nicht mit der vollen Entwurfsgeschwindigkeit arbeitet, erlaubt der Realizer-basierte Prototyp einen tatsächlichen, fast realzeitartigen Betrieb des Entwurfs. Der realisierte Entwurf wird durch Taktgeber des Realizers, Stimulatoren, die vom Host gesteuert werden, tatsächliche, vom Anwender gelieferte Hardwarebauelemente, realisierte virtuelle Instrumente (weiter unten beschrieben) stimuliert und/oder selbst durch interne Logik und/oder Entwurfsspeicherinhalte stimuliert. Das Betriebsverhalten des Entwurfs wird überwacht und über Abtaster, die durch den Host gesteuert werden, tatsächliche vom Anwender gelieferte Hardwarebauelemente, realisierte virtuelle Instrumente und/oder durch das Betrachten der Inhalte des Entwurfsspeichers analysiert. Der Konstrukteur interagiert direkt mit dem Entwurf wie in einer "Benchtop"-Umgebung.

Das Realizer-System zum Prototypenbau besteht aus dem Entwurfskonversionssystem (an anderer Stelle beschrieben) und dem Operator zum Prototypenbau, zusammen mit dem Hardwaresystem des Realizers und dem Host-Computer (56).

Der Operator zum Prototypenbau konfiguriert das Realizer-System für den Entwurf der betrieben werden soll und unterstützt die interaktive Stimulation und Antwort des realisierten Entwurfs. Er läuft auf dem Host-Computer und antwortet auf Anwenderbefehle entweder direkt oder über ein Steuerprogramm, das ebenfalls auf dem Host-Computer läuft.

Um den realisierten Entwurf zu betreiben:

  • 1) Lies die Entwurfskonfigurations-Datei und verwende sie, um alle Realizer-Logik- und Verbindungschips zu konfigurieren, wie in dem Abschnitt über die Konfiguration beschrieben. Lies die anfänglichen Entwurfsspeicherdaten aus vom Anwender gelieferten Dateien und schreibe sie in die Entwurfsspeicher. Lies die Korrespondenz-Tabellen-Datei und etabliere Korrespondenzen zwischen den Netznamen des Entwurfs und Stimulatoren und Abtastern und ihren Host-Interface-Bus-Adressen.
  • 2) Takte den Entwurfs-Reset-Generators, um den realisierten Entwurf zu initialisieren.
  • 3) Erzeuge kontinuierlich auf Anforderung die folgenden Vorgänge:
  • – Servicebefehle des Anwenders zur Steuerung der Takt- und Reset-Generatoren.
  • – Servicebefehle des Anwenders, um die Ausgangsstimulations-Datenwerte zu verändern unter Verwendung der Korrespondenztabelle, um die vom Anwender gelieferten Netznamen mit dem korrespondierenden Stimulator in Beziehung zu setzen.
  • – Servicebefehle vom Anwender, um die Dateneingangswerte der Abtaster anzuzeigen unter Verwendung der Korrespondenztabelle, um die vom Anwender gelieferten Netznamen mit den korrespondierenden Abtastern in Beziehung zu setzen.
  • – Servicebefehle vom Anwender zum Lesen und zum Schreiben von Orten in den Entwurfsspeichermodulen. Stelle sicher, dass der Entwurf nicht arbeitet durch das Überprüfen, dass die Taktgeneratoren angehalten sind vor dem Zugriff auf den Entwurfsspeicher, um einen unzulässigen Entwurfsspeicherbetrieb zu vermeiden. Weise den Anwender darauf hin, wenn der Entwurf nicht angehalten ist.

Um das Realizer-System zum Prototypenbau zu verwenden:

  • 1) Bereite den Eingabeentwurf in dem Host-EDA-System vor.
  • 2) Markiere Entwurfsnetze, die mit Stimulatoren, Abtaster und Takt- oder Reset-Generatoren verbunden werden sollen.
  • 3) Füge Entwurfs-Grundelemente, Netze und Verbindungen für Design-Netze für irgendwelche virtuellen Instrumente, die verwendet werden sollen, hinzu (siehe unten).
  • 4) Konvertiere den Eingabeentwurf mit dem Realizer-Entwurfskonversionssystem zum Erzeugen einer Konfigurations-Datei für den Entwurf.
  • 5) Betreibe den Entwurf mit dem Realizer-Operator zum Prototypenbau.

In einem in 57 gezeigten speziellen Beispiel ist der Entwurf eines digitalen Computers mit dem Realizer-System zum Prototypenbau realisiert. Der Anwender verwendet das Host-EDA-System, um den Entwurf für die Logik des Computers und den Speicher in einer Eingabeentwurfs-Datei darzustellen, die der Anwender in eine Konfigurations-Datei mit dem Realizer-Entwurfskonversionssytem konvertiert. Steuereingänge und Anzeigeausgänge auf der Vorderseite, die mit tatsächlichen Steuerschaltern und Anzeigen in einer realen Implementierung verbunden sind, werden in dem Eingabeentwurf spezifiziert, um mit Stimulatoren und Abtastern unter der Kontrolle des Anwenders über den Operator zum Prototypenbau verbunden zu werden. Das Eingangssignal des Taktgebers des Computers wird spezifiziert, um durch den Taktgenerator des Realizers erzeugt zu werden.

Um den Prototyp-Computer zu betreiben, läßt der Anwender den Realizer-Prototyp-Operator laufen, um das Realizer-System gemäß dem Entwurf des Computers zu konfigurieren. Der Anwender lädt bei Beginn des Betriebes über den Prototyp-Operator den Computer-Programmcode, der auf dem realisierten Computerentwurf ausgeführt werden soll und seine Anfangsdaten in den Entwurfsspeicher. Wenn der Anwender den Taktgeber freigibt, arbeitet der Computerentwurf tatsächlich mit den konfigurierten Logik- und Verbindungschips der Realizer-Hardware und führt Programmbefehle aus, die er aus dem Entwurfsspeicher gelesen hat und liest und schreibt Daten im Entwurfsspeicher. Der Anwender betreibt die Steuereingänge an der Vorderseite und liest die Anzeigeausgänge während des Betriebs über den Zugang des Prototyp-Operators auf die entsprechenden Stimulatoren und Abtaster. Die Ergebnisse werden aus dem Speicher durch den Anwender über den Prototyp-Operator gelesen, nach Abschluß des Programms. Der Anwender analysiert die Ergebnisse, um festzustellen, ob der Entwurf korrekt ist, d. h. ob er gemäß den Vorstellungen des Anwenders arbeitet. Wenn dies nicht der Fall ist, aufgrund irgendeines Entwurfsfehlers im Eingangsentwurf korrigiert der Anwender den Fehler unter Verwendung des Host-EDA-Systems und wiederholt den Vorgang des Prototyp-Baus.

3.4.1 Realisierte virtuelle Instrumente

Wenn Stimulations- und/oder Analyseinstrumente beim Debuggen des Prototyps benötigt werden, werden konventionelle Instrumente, wie zum Beispiel Logikanalysatoren direkt mit dem realisierten Entwurf über das Modul für vom Anwender gelieferte Bauelemente verbunden. Um ein reales Instrument zu verbinden, füge ein Grundelement hinzu, welches das Instrument-USD in dem Eingabeentwurf darstellt, das mit den Entwurfsnetzen, die mit dem Instrument verbunden werden sollen, verbunden ist. Ferner erzeuge eine USD-Spezifizierungs-Datei, die die USD-Verbindungen definiert. Daraufhin verbinde das Instrument direkt mit dem USDM, konvertiere und betreibe den realisierten Entwurf wie oben.

Zusätzliche "virtuelle Instrumente" bestehen aus Grundelementen und Netzen, die dem Entwurf in der Eingabeentwurfs-Datei hinzugefügt werden und gemeinsam mit dem Entwurf realisiert werden. Ein Logikanalysator ist beispielsweise ein gut bekanntes Instrument, das einen Satz von logischen Signalen überwacht und, wenn diese Signale eine bestimmte Triggerbedingung erfüllen, einen Satz von analysierten Signalen kontinuierlich abtastet und ihre Werte in einem Speicher aufhebt, der daraufhin zur Analyse ausgelesen wird. 58 zeigt die Konfiguration eines virtuellen logischen Analysators, der aus einem Antwort-Vektorspeicher besteht, einem Bedingungs-Detektor, der aus logischen Grundelementen besteht, einem oder mehreren Stimulatoren und Abtastern und anderen logischen Grundelementen.

Um einen virtuellen logischen Analysator mit einem Entwurf zu realisieren und zu verwenden:

  • 1) Füge die Grundelemente für diese Komponenten zusätzlich zu dem Entwurf der Eingabeentwurfs-Datei zu, verbunden wie gezeigt. Insbesondere verbinde die Eingänge des Antwort-Vektorspeichers mit den Entwurfsnetzen, die analysiert werden sollen, verbinde die Eingänge des Bedingungsdetektors mit den Entwurfsnetzen, die für die Triggerbedingung überwacht werden sollen und spezifiziere die Detektorlogik der Bedingung, entsprechend der Bedingung, die detektiert werden soll.
  • 2) Konvertiere die Eingabe-Entwurfs-Datei in eine Konfigurations-Datei entsprechend dem normalen Vorgang.
  • 3) Konfiguriere den Entwurf in dem Realizer-System zum Prototypenbau.
  • 4) Betreibe das "Reset"-Signal über seinen Stimulator für einen Takt und setze die Stimulation, die benötigt wird, damit der realisierte Entwurf den Betrieb beginnt.
  • 5) Überwache den "getriggerten" Abtaster. Wenn der Abtaster zeigt, dass das "getriggerte" Signal wahr ist, sammelt der Logikanalysator analysierte Signaldaten auf.
  • 6) Lies diese Daten aus dem Antwort-Vektorspeicher des Logikanalysators über das Host-Interface. Zeige die Daten an und analysiere sie unter der Verwendung von einem gewöhnlichen Computer-Debugger-Programm oder ähnlichem.

Dies ist nur ein Beispiel, das zeigt, dass virtuelle Stimulations- oder Analyseinstrumentierung mit einem Entwurf im Realizer-System realisiert wird. Es ist zu beachten, dass die Instrumentierungskonzepte selbst, wie zum Beispiel das Konzept des logischen Analysators nicht neu sind. Ein neues Element ist die Realisierung der Instrumentierung zusammen mit dem Eingabeentwurf in einem Realizer-System.

3.5 Das Realizer-Ausführungssystem

Das Realizer-Ausführungssystem wird dazu verwendet, um Hardware-Funktionen auszuführen, die in den Eingabeentwurfs-Dateien spezifiziert sind, die noch nicht konstruiert sind oder die niemals in permanenter Hardware konstruiert werden sollen. Es gibt mehrere Vorteile, die durch ein solches Verfahren erreicht werden:

Realisierte Entwürfe werden zur Softwareentwicklung oder anderen Zwecken während der Zeit verwendet, während der die permanente Hardware konstruiert wird. Dieses ermöglicht, dass die Softwareentwicklung beispielsweise voranschreitet während der Herstellung, so dass sie von Fehlern befreit wird und zur Verwendung zur Verfügung steht, wenn die permanente Hardware fertig ist.

Das Realizer-Ausführungssystem wirkt als ein universelles Hardwarebauelement und wird für viele verschiedene austauschbare Funktionen wie benötigt verwendet. Wenn eine spezielle Funktion benötigt wird, wird die Konfiguration und andere Dateien für dieses Hardware-System (sobald es vom Realizer-Entwurfskonversionssystem realisiert worden ist) durch den Host-Computer aus dem Speicher abgerufen, das Realizer-System wird entsprechend dieses Entwurfes konfiguriert und die Funktion wird ausgeführt. Beispielsweise wird in einer elektronischen Konstruktionsumgebung das Realizer-Ausführungssystem dazu verwendet, um Funktionen eines Hardware-Beschleunigers für die Logiksimulation auszuführen, eines Hardware-Beschleunigers für das Routing oder eines Hardware-Graphikprozessors, wie benötigt. In einer Digital-Signal-Verarbeitungsumgebung wird das Realizer-Ausführungssystem dazu verwendet, Funktionen eines Echtzeit-Spektrumanalysators oder eines Spezial-Effekt-Synthesizers auszuführen, wie benötigt.

Das Realizer-Ausführungssystem ist dasselbe System wie das Realizer-System zum Prototypenbau mit der Ausnahme, dass:

  • 1) Die Instrumentierung zur Analyse wird nicht verwendet, da der Eingabeentwurf als korrekt angesehen wird. Stimulatoren, Abtaster und Entwurfsspeicherzugriff werden nur dazu verwendet, die Ausführungsfunktion und die Eingabe und Ausgabe der Daten zu steuern.
  • 2) Ein Controller, der für die besondere ausgeführte Funktion spezialisiert ist, kann erzeugt und verwendet werden, um den Realizer-Prototyping-Operator zu steuern, um der ausführenden Funktion eine Eingabe/Ausgabe und ein Kontroll-Interface zu geben, das für die Verwendung der Funktion geeignet ist.

3.6 Das Realizer-Produktionssystem

Eine Variation des Realizer-Entwurfskonversionssystems wird dazu verwendet, um automatisch eine permanente nicht konfigurierbare Implementierung des Eingabeentwurfs zu erzeugen. Diese permanente Implementierung verwendet denselben Typ und dieselbe Anzahl von Realizer-Logikchips, wie sie für den realisierten Entwurf konfiguriert würden. Das Realizer-Produktionssystem verwendet sein ERCGA-Netzlisten-Konversionswerkzeug, um permanent nicht konfigurierbare Logikbauelemente zu konfigurieren, die in ihrer Funktion äquivalent zu den ERCGA-Logikchips sind und treibt ein automatisches Anordnungs- und Routine-Werkzeug für eine gedruckte Schaltkarte (printed circuit board, PCB) ("Getting Started with Board Station", "Layout User's Manual", Mentor Graphics Corp., Beaverton, Oregon, 1989) mit den Spezifikationen der Logikchip-Verbindungen, um das PCB herzustellen, das dauerhaft solche nicht konfigurierbaren Logikbauelemente verbindet.

In der bevorzugten Ausführungsform werden LCAs als die ERCGA-Logikchips verwendet. Die LCA-Hersteller liefern ein nicht konfigurierbares Logikbauelement, das in seiner Funktion äquivalent zum LCA ist, in der Form eines LCA-Chips, der mit einem Konfigurations-PROM-Speicher-Chip verbunden ist ("The Programmable Gate Array Data Book", Xilinx, Inc. San Jose, 1989). Das LCA-Netzlisten-Konversionswerkzeug erzeugt die binäre Datei, die dazu verwendet wird, den PROM zu programmieren und der LCA enthält Logik, die verursacht, dass es sich automatisch bei der Zuführung von Energie unter Verwendung des PROM, wenn er vorhanden ist, konfiguriert.

Das Realizer-Produktionssystem besteht aus demselben Entwurfsleser, Grundelementekonvertierer und Partionierer, der im Realizer-Entwurfs-Konversionssystem (RDCS) verwendet wird, einer Verbindung und einem System zur Erzeugung von Netzlisten und einem ERCGA-Netzlisten-Konversionswerkzeug, die Variationen sind derjenigen in dem RDCS, das beschrieben worden ist, und einem automatischen PCB-Anordnungs- und Routing-werkzeug (59). Es umfasst nicht das Realizer-Hardware-System oder den Host-Computer. Es liest die Eingabeentwurfs-Datei und eine PCB-Spezifizierungs-Datei. Es arbeitet mit dem folgenden Verfahren:

  • 1) Verwende den Entwurfsleser, um die Eingabeentwurfs-Datei zu lesen und erzeuge die Entwurfsdatenstruktur.
  • 2) Verwende den Grundelementekonverter, um die Entwurfsdatenstruktur in Logikchip-Grundelemente zu konvertieren.
  • 3) Verwende den Partitionierer, um die Grundelemente spezifischen Logikchips zuzuweisen.
  • 4) Verwende das System zur Verbindung und zur Erzeugung der Netzlisten, um Netzlisten-Dateien für die Logikchips zu erzeugen. Anstelle des Erzeugens von Netzlisten-Dateien für die Verbindungschips, gib eine Liste der Schnittnetze und ihrer Logikchip I/O-Pin-Verbindungen an eine einzelne Verbindungs-Datei aus in einer Form, die für das automatische PCB-Anordnungs- und Routingwerkzeug akzeptabel ist.
  • 5) Verwende das ERCGA-Netzlisten-Konversionswerkzeug, um binäre Konfigurations-Dateien für jeden Logikchip in der Form zu erzeugen, die für die Konfiguration von äquivalenten nicht konfigurierbaren Logikbauelementen geeignet ist.
  • 6) Verwende das automatische PCB-Anordnungs- und Routingwerkzeug, das die Verbindungs-Datei und die PCB-Spezifizierungs-Datei liest (die physikalische Information enthält, die nicht direkt mit dem Logikentwurf in Beziehung steht, wie zum Beispiel die PCB-Dimensionen, die Verbindungsanforderungen etc.) und die PCB-Herstellungsdaten-Datei erzeugt.

Der Anwender des Realizer-Herstellungssystem verwendet daraufhin die PCB-Herstellungsdaten-Datei, um PCBs herzustellen, unter der Verwendung der binären Konfigurations-Dateien, um die nicht rekonfigurierbaren Logikbauelemente zu konfigurieren und baut die Bauelemente und die PCBs zusammen, um fertige Implementierungen des Eingabeentwurfs zu produzieren.

Das Neue beim Realizer-Herstellungssystem ist nicht die Verwendung von nicht konfigurierbaren Gatterfeld-Chips, die in ihrer Funktion äquivalent zu ERCGAs in einer permanenten Hardware-Implementierung sind, was allgemeine Praxis ist, statt dessen ist ein Aspekt der Neuheit die Fähigkeit dieses Systems, ein digitales System von beliebiger Größe (nicht begrenzt auf die Kapazität eines IC-Chips) zu nehmen, das in der generischen Grundelemente-Logikform in einer Eingabeentwurfs-Datei ausgedrückt ist (nicht in der Logikbibliothek eines speziellen Herstellers) und automatisch eine permanente Hardware-Implementierung zu erzeugen.

3.7 Das Realizer-Berechnungssystem

Das Realizer-Hardwaresystem kann gemäß dem Verhalten konfiguriert werden, das in einem Eingabeprogramm spezifiziert ist, das in einer höheren Computersprache, wie zum Beispiel Pascal geschrieben ist und dazu verwendet werden, um Berechnungsfunktionen gemäß dieses Programms auszuführen, ebenso wie ein vielseitig verwendbarer Computer mit einem gespeicherten Programm dies kann. Dies wird erreicht durch die Verwendung eines auf hoher Ebene arbeitenden Entwurfs-Synthese-Compilers, um das Computerprogramm in digitale logische Form zu konvertieren, dargestellt in einer Eingabeentwurfs-Datei, um daraufhin den Entwurf auf der Realizer-Hardware zu realisieren und zu betreiben.

Dieses Verfahren ist ein fundamental neues Mittel des Berechnens. Vom Standpunkt des Berechnens her ist die Realizer-Hardware ein hochparalleler Datenprozessor, dessen datenverarbeitenden Elemente die Logikfunktionen und Speicher-Bauelemente in den Realizer-Logikchips, die Verbindungschips und die Elemente für Sonderzwecke sind. Dieser Datenprozessor arbeitet nicht nach der Berechnungsmethode von gespeicherten Computerprogrammen der sequentiellen Befehlsausführung. Er arbeitet gemäß der Datenpfade, funktionellen Einheiten und Kontrollstrukturen der Maschine mit endlich vielen Zuständen, die in die Realizer-Hardware konfiguriert worden sind und die gemäß dem Verhalten, das in dem Eingabeprogramm spezifiziert worden ist. Der Vorteil ist der einer höheren Rechengeschwindigkeit als sie mit dem Berechnen gemäß eines sequentiellen gespeicherten Programms möglich ist.

Das illustrierte Realizer-Berechnungssystem besteht aus dem Realizer-Berechnungscompiler, dem Realizer-Entwurfskonversionssystem und dem Realizer-Berechnungsoperator, zusammen mit dem Realizer-Hardwaresystem und dem Host-Computer (60). Es ist zu beachten, dass der Host-Computer nur als ein Mittel zum Ausführen des Realizer-Berechnungsoperators verwendet wird, nicht zum Ausführen der Berechnungsfunktionen, die in dem Eingabeprogramm spezifiziert sind. Andere Mittel zum Ausführen des Realizer-Berechnungsoperators können natürlich ebenso verwendet werden.

3.7.1 Der Realizer-Berechnungscompiler

Der Realizer-Berechnungscompiler konvertiert eine Eingabe-Programm-Datei, die in einer Computer-Hochsprache unter der Verwendung eines Texteditors geschrieben worden ist, in eine Eingabeentwurfs-Datei. Er besteht aus einem Entwurfs-Synthese-Compiler, einem Logik-Synthese-Compiler und einer Funktionseinheiten-Bibliothek.

Der Design-Synthese-Compiler ist ein Werkzeug, von dem mehrere Beispiele vor kurzem entwickelt worden sind ("Tutorial on High-Level Synthesis", McFarland, Parker and Camposano, Proceedings of the 25th Design Automation Conference, ACM and IEEE, 1988), der eine Beschreibung eines Systems von Controllern von Maschinen mit endlicher Anzahl von Zuständen und Datenpfaden aufbaut, bestehend aus funktionellen Einheiten, Datenein- und Ausgängen und Busverbindungen, die entsprechend dem Verhalten arbeiten, das in einer üblichen Prozedur orientierten Computersprache spezifiziert ist. Ein Beispiel eines tatsächlichen Entwurfs-Synthese-Compilers ist "Flamel", dessen Verfahren im Detail beschrieben ist in "Flamel": A High-Level Hardware Compiler", Howard Trikey, IEEE Transactions on Computer-Aided Design, Band CAD-6, Nr. 2, März 1987. Als Zitat aus dieser Referenz: "

"Die Eingabe für Flamel ist ein Pascal-Programm."

"Der Anwender liefert ein Pascal-Programm, zusammen mit Ausführungsfrequenzzählern für eine typische Ausführung des Eingabeprogramms. Die andere Anwendereingabe ist eine Zahl, die ungefähr angibt, wieviel Hardware erlaubt ist. Die Ausgabe ist ein Entwurf für Hardware, die dieselbe Funktion wie das Pascal-Programm durchführt."

"Das allgemeine Modell für einen Schaltkreis, das von Flamel hergestellt wird, ist das einer synchronen digitalen Maschine, die aus einem Datenpfad und einem Controller besteht. Der Datenpfad besteht aus funktionalen Einheiten (ALUs, Addierer, Register, I/O-Anschlüssen, etc.), verbunden mit Bussen. Der Controller ist eine Maschine mit endlich vielen Zuständen."

"Gewöhnliche Pascal-Programme werden dazu verwendet, um das Verhalten, das von der Hardware verlangt wird, zu definieren. Es ist die Aufgabe von Flamel Parallelitäten in dem Programm zu finden, so dass es eine schnell laufende Implementierung herstellen kann, die vom Anwender angegebene Kostengrenzen einhält."

"Eine Implementierung von Flamel wurde abgeschlossen. Die Ausgabe ist die Beschreibung eines Datenpfades und eines Controllers. Bei einer Serie von Tests erzeugt Flamel Implementierungen von Programmen, die zwischen 22 und 200 mal schneller laufen als ein MC68000 (Mikrocomputer), der die gleichen Programm ausführt, wenn die Taktzyklen gleich sind."

Die "vom Anwender angegebene Kostengrenze"-Eingabe wird in diesem Entwurfs-Synthese-Compiler durch den Anwender oder durch das Realizer-Berechnungssystem geliefert, entsprechend der Kapazität des Realizer-Hardwaresystems, das verwendet werden soll. Die Ausgabe des Entwurf-Synthese-Compilers ist eine intermediäre Darstellungs-Datei, die Beschreibungen des Datenpfads und des Controllers enthält.

Die Funktionseinheit-Bibliothek ist ein Satz von vordefinierten Beschreibungen von Funktionseinheiten, eine für jeden Typ von Funktionseinheit, die durch den Entwurfs-Synthese-Compiler erzeugt werden. Diese Beschreibungen spezifizieren Logik und Grundelemente für vom Anwender gelieferte Bauelemente (usersupplied device, USD) und ihre Netzverbindungen, die den Anforderungen für die Grundelemente eines Eingabeentwurfs für einen Realizer entsprechen. USD-Grundelemente werden optional dazu verwendet, um Grundelemente mit höherer Leistung oder Kapazität zu schaffen, als mit den Logikchips und Entwurfsspeichern realisiert werden können. Wenn beispielsweise schnelle VLSI-Gleitkomma-Multiplizierer als USDs installiert werden, wird die Funktionseinheit-Bibliothek eine Beschreibung für die funktionale Einheit des Gleitkomma-Multiplizierers enthalten, die dieses USD-Grundelement spezifiziert.

Der Logik-Synthese-Compiler konvertiert die Beschreibung der Datenpfade und die Controller der Maschine mit endlich vielen Zuständen in eine Darstellung von logischen Grundelementen und Verbindungsnetzen in einer Eingabeentwurfs-Datei. Er enthält ein Synthesewerkzeug für Maschinen mit endlich vielen Zuständen, das kommerziell erhältlich ist von der Mentor Graphics Corporation, VLSI Technology Inc., Synopsis Inc. und anderen ("Logic Synthesis speeds ASIC Design", A. J. de Geus, IEEE Spectrum, August 1989) oder er wird gemäß Verfahren entwickelt, die in der Literatur beschrieben sind ("The Implementation of a State Machine Compiler", C. Kingsley, Proceedings of the 24th Design Automation Conference, ACM and IEEE, 1981"; "A State Machine Synthesizer", D. Brown, Proceedings of the 18th Design Automation Conference, ACM and IEEE, 1981; "An Overview of Logic Synthesis Systems", L. Trevillyan, Proceedings of the 24th Design Automation Conference, ACM and IEEE, 1987). Er arbeitet entsprechend dem folgenden Verfahren:

  • 1) Lies die intermediäre Dateidarstellung, die den Datenpfad und die Controllerbeschreibung hat, in die Datenstrukturen.
  • 2) Konvertiere jede Beschreibung einer funktionalen Datenpfadeinheit in Logik und USD-Grundelemente und Netze entsprechend den Beschreibungen in der funktionellen Einheiten-Bibliothek.
  • 3) Erzeuge Entwurfsspeicher-Grundelemente für jeden Dateneingang und -ausgang zu und von den Datenpfaden.
  • 4) Verwende das Synthesetool für die Maschine mit endlich vielen Zuständen, um die Beschreibung des Controllers der Maschine mit endlich vielen Zuständen in logische Grundelemente und ihre Netzverbindungen.
  • 5) Erzeuge Stimulations- und Abtaster-Grundelemente für den "Start"-Eingang und die "Beschäftigt"- und "Fertig"-Ausgänge zu und von den Controllern der Maschine mit endlich vielen Zuständen.
  • 6) Spezifiziere, dass das Taktgebernetz durch einen Taktgenerator des Realizers getrieben wird.
  • 7) Gib die Grundelemente und Netze an die Eingabeentwurfs-Datei aus.

3.7.2 Der Realizer-Berechnungsoperator

Der Realizer-Berechnungsoperator konfiguriert das Realizer-System und ruft die Ausführung der realisierten Berechnungsfunktion hervor, die ursprünglich in dem Eingabeprogramm spezifiziert worden ist. Der Realizer-Berechnungsoperator liest in der Konfigurations-Datei und der Korrespondenz-Tabellen-Datei, die durch die Entwurfskonversion erzeugt worden sind und er liest eine vom Anwender gelieferte Datei von Eingangsdaten für die Berechnungsfunktion und schreibt eine Datei mit Ausgangsdaten der Berechnungsfunktion.

Um die realisierte Berechnungsfunktion zu betreiben:

  • 1) Lies die Entwurfs-Konfigurations-Datei und verwende sie, um alle Realizer-Logik- und Verbindungs-Chip zu konfigurieren, wie in dem Konfigurationsabschnitt beschrieben.
  • 2) Lies die Eingangsdaten-Datei und schreibe ihre Daten in den/die Entwurfssspeicher für die Eingangsdaten. Lösche den Entwurfsspeicher für die Ausgangsdaten.
  • 3) Lies die Korrespondenz-Tabellen-Datei und stelle die Korrespondenzen zwischen den Steuereingängen und -ausgängen und den Stimulatoren und Abtastern und ihren Host-Interface-Busadressen fest.
  • 4) Gib den Taktgenerator frei und setze den "Start"-Steuereingang über seinen Stimulator zum Starten des Betriebs.
  • 5) Überwache den "Fertig"-Kontrollausgang und wenn er den Wert wahr animm, lies die Daten aus dem Entwurfsspeicher für den Ausgang und schreibe sie in die Ausgangsdaten-Datei.

Um das Realizer-Berechnungssystem zu verwenden:

  • 1) Bereite das Eingabeprogramm und die Eingabedaten-Datei vor unter der Verwendung eines Texteditors oder anderer Mittel.
  • 2) Verwende den Realizer-Berechnungscompiler, um die Eingabeentwurfs-Datei zu erzeugen.
  • 3) Verwende das Realizer-Entwurfskonversionssystem, das auf normale Weise arbeitet, wie an anderem Ort beschrieben, um die Konfiguration und die Korrespondenz-Tabellen-Dateien zu erzeugen.
  • 4) Verwende den Realizer-Berechnungsoperator, um die Berechnungsfunktionen tatsächlich auszuführen.
  • 5) Lies die durch die realisierte Berechnungsfunktion berechneten Daten aus der Ausgangsdatei aus.

4. Bevorzugte Ausführungsform

Die bevorzugte Ausführungsform, auf die in dieser Offenbarung Bezug genommen wird, hat die folgenden Eigenschaften:

4.1 Hardware

Die partielle Kreuzschienenverbindung wird hierarchisch auf drei Ebenen über das gesamte Hardwaresystem hinweg verwendet. Die 61ac zeigen den allgemeinen Aufbau der Logikkarten, Boxen und Racks, die hierarchisch miteinander verbunden sind. Die 62ab zeigen die physikalische Konstruktion der Karten, Boxen und des Racks.

Logikkarten (61a):

  • – Jede Logikkarte besteht aus 14 L-Chips, die durch 32 X-Ebenen-Kreuzschienen-Chips miteinander verbunden sind.
  • – Jeder L-Chip hat 128 I/O-Pins pro Chip, die mit der partiellen Kreuzschiene der X-Ebene verbunden sind, 4 Verbindungen zu jedem der 32 X-Chips. 14 zusätzliche I/O-Pins werden verwendet; 11 sind mit dem RBus verbunden, einer ist mit jedem der beiden Taktsignale verbunden, und einer ist mit dem Entwurf-Reset-Signal verbunden. Xilinx XC3090 LCAs werden als Logikchips verwendet.
  • – Jeder X-Chip hat 56 I/O-Pins, die mit den Logikchips verbunden sind, 4 Verbindungen zu jedem der 14 L-Chips. Er hat 8 zusätzliche I/O-Pin-Verbindungen zu jedem der zwei Y-Chips. Xilinx XC2018 LCAs werden als X-Chips verwendet.
  • – Jede Logikkarte hat 512 Rückebenen I/O-Pins für X-Y-Pfade. Sie hat ferner Verbindungen für den RBus und den Konfigurationsbus.

Boxen (61B):

  • – Jede Box besteht aus einer bis acht Karten, die durch 64 Y-Ebenen-Kreuzschienen-Chips miteinander verbunden sind.
  • – Jeder Y-Chip hat 64 I/-Pins, die mit den Logikkarten verbunden sind, acht Verbindungen zu einem X-Chip auf jeder Karte. Er hat zusätzliche I/O-Verbindungen zu einem Z-Chip. Xilinx XC2018 LCAs werden als Y-Chips verwendet.
  • – Die 64 Y-Chips sind auf 8 Y-Chip-Karten befestigt, von denen jede 512 I/O-Pins für X-Y-Pfade hat. Die 8 Y-Chip-Karten und 8 Logikkarten sind durch Leitungen in der X-Y-Pfad-Rückebene der Box miteinander verbunden.
  • – Jede Y-Chip-Karte hat ferner 64 I/O-Pins an einem Kabelverbinder für seine Y-Z-Pfade. Jede Box hat 8 solcher Verbinder. Diese Verbindungen werden in ein einzelnes Y-Z-Pfad-Kabel mit 512 Leitungen von jeder Box gesammelt. Sie hat ferner Verbindungen für den Konfigurationsbus.
  • 62a zeigt die physikalische Konstruktion der X-Y-Pfad-Rückebene mit einem Host-Interface, 8 Logikkarten und 8 Y-Chip-Karten, mit dem Y-Z-Pfad-Kabel.

Racks (61c)

  • – Jedes Rack besteht aus einer bis acht Boxen, die durch 64 Z-Ebenen-Kreuzschienen-Chips miteinander verbunden sind.
  • – Jeder Z-Chip hat 64 I/O-Pins, die mit den Boxen verbunden sind, 8 Verbindungen zu einem Y-Chip in jeder Box. Xilinx XC2018 LCAs werden als Z-Chips verwendet.
  • – Die Boxen eines Racks sind durch eine zusätzliche Box mit Verbindungen zu den Y-Z-Pfad-Kabeln von jeder Box anstelle der Logikkarten miteinander verbunden. Die physikalische Konstruktion dieser Z-Ebenen-Box ist in 62b gezeigt. Die 64 Z-Chips sind auf 8 Z-Chip-Karten befestigt, von denen jede 512 Rückebenen I/O-Pins für Y-Z-Pfade hat. Die 8 Z-Chip-Karten und die 8 Y-Z-Pfad-Kabelverbinder sind durch Leitungen in einer Y-Z-Pfad-Rückebene miteinander verbunden.

Speichermodule, die jeweils aus 16 RAM-Chips und 10 LCAs bestehen, wie in dem Abschnitt über Speicher beschrieben, sind anstelle von Logikchip-LCAs installiert, wo sie benötigt sind. Sie werden als Entwurfsspeicher, Vektorspeicher, Stimulatoren und Abtaster verwendet, wie in dem Abschnitt über Stimulation und Antwort beschrieben.

Vom Anwender gelieferte Hardware-Bauelementemodule, die jeweils aus 10 LCAs bestehen, wie in dem Abschnitt über dieses Thema beschrieben, werden anstelle von Logikchip-LCAs installiert, wo sie benötigt werden.

Eine Box enthält ferner die Host-Interface-Karte, die eine Kabelverbindung zu einer I/O-Interface-Karte in dem Host-Computer hat. Sie steuert den Host-Interface-Bus, genannt RBus, der mit allen Chiporten und mit dem Konfigurationskontroll-Logikblock auf jeder Logikkarte, Y-Chip-Karte und Z-Chip-Karte für alle Kontroll- und Datentransferfunktionen verbunden ist. Der RBus besteht aus einem acht Bit-Datenpfad, einem Taktgeber und zwei Steuerleitungen, wie in dem entsprechenden Abschnitt beschrieben. Die Host-Interface-Karte hat ebenfalls den Konfigurationsbus-Controller, zwei Taktgeneratoren und den Reset-Controller.

Der Konfigurationsbus mit einem 16 Bit-Datenpfad verbindet alle Logik- und Kreuzschienen-Chips mit dem Host-Interface für alle Konfigurationsfunktionen. Die 14 L-Chips von jeder Karte befinden sich in einer Konfigurationsgruppe und die 32 X-Chips einer Karte sind in zwei Gruppen aufgeteilt. Die 8 Y-Chip-Karten in jeder Box sind jeweils in einer Gruppe, ebenso wie jede der 8 Z-Chips-Karten.

4.2 Software

Das Entwurfskonversionssystem besteht aus den folgenden Modulen, von denen jedes in dem Abschnitt zu diesem Thema beschrieben ist:

  • – Der Entwurfsleser liest die Mentor Graphics-Entwurfsdateien, die QuickSim logische Grundelemente enthalten.
  • – Der Grundelemente-Konvertierer, der QuickSim-Grundelemente in Xilinx LCA-Grundelemente konvertiert. Tri-State und Wired-Netz-Treiber werden entsprechend der Kreuzschienen-Summierungskonfiguration konvertiert, die in dem Tri-State-Abschnitt beschrieben worden ist.
  • – Der Partitionierer, basierend auf der Cluster-Aufbautechnik, die in seinem Abschnitt beschrieben worden ist.
  • – Das System zur Verbindung und zum Erzeugen der Netzlisten, das die drei Ebenen der partiellen Kreuzschiene verbindet und eine Netzlisten-Datei im XNF-Format für jeden Logik- und Verbindungs-Chip in dem System ausgibt.
  • – Xilinx LCA-Netzlisten-Konversionswerkzeug, das aus XNF2LCA, APR und Makebits besteht.
  • – Der Konfigurationsdateien-Sammler

Anwendungen:

  • – Das Realizer-Logik-Simulationssystem, basierend auf Mentor Graphics Protokolldateien und unter der Verwendung des RSIM Batch Simulations-Interface-Werkzeugs.
  • – Das Realizer-Fehlersimulationssystem, basierend auf Mentor Graphics Protokolldateien und unter der Verwendung des RSIM Batch Simulations-Interface-Werkzeugs.
  • – Das Realizer-Logik-Simulator-Evaluationssystem, das als ein Evaluator für Mentor Graphics QuickSim Logiksimulator wirkt.
  • – Das Realizer-System zum Bau von Prototypen, mit dem realisierten virtuellen Instrument, das aus einem Logikanalysator besteht.
  • – Das Realizer-Ausführungssystem.
  • – Das Realizer-Herstellungssystem unter der Verwendung des Mentor Graphics Board Station-Werkzeugs zum automatischen PCB-Anordnen und Routen.
  • – Das Realizer-Berechnungssystem, das die Sprache Pascal, das Flamel-Entwurf-Synthese-Compilers und das Mentor Graphics Design, Knowledge and Logic Consultant FSM und Logik-Synthese-Werkzeuge benutzt.

Nachdem die Prinzipien unserer Erfindung beschrieben und illustriert worden sind unter Bezug auf eine bevorzugte Ausführungsform, wird deutlich, dass die Erfindung in ihrer Anordnung und im Detail modifiziert werden kann, ohne von diesen Prinzipien abzuweichen. Während zum Beispiel beschrieben worden ist, dass die Erfindung bevorzugt in Verbindung mit einer Vielzahl von elektronischen Entwurfs-Automatisierungswerkzeugen von Mentor Graphics funktioniert, erkennt man, dass die Erfindung mit einer Vielzahl von anderen Automatisierungswerkzeugen ähnlich verwendet werden kann.

Angesichts der großen Vielzahl an Formen, in die die Prinzipien unserer Erfindung gebracht werden können, sollte bedacht werden, dass die detaillierte Ausführungsform nur als Illustration gedacht ist und nicht als die Reichweite unserer Erfindung einschränkend gesehen werden soll.


Anspruch[de]
  1. Ein elektrisch rekonfigurierbares Hardwareemulationssystem mit einer elektrisch rekonfigurierbaren Logikanordnung, die mit einem Schaltkreisentwurf konfiguriert werden kann in Antwort auf die Eingabe von Schaltkreisinformation, wobei die elektrisch rekonfigurierbare Logikanordnung aufweist:

    a) eine Mehrzahl von reprogrammierbaren Logikvorrichtungen, wobei jede der reprogrammierbaren Logikvorrichtungen eine interne Schaltkreisanordnung aufweist, die reprogrammierbar konfiguriert werden kann, um funktionale Elemente bereitzustellen, ausgewählt aus einer Gruppe, die zumindest kombinatorische Logikelemente und Speicherelemente umfasst, wobei jede der reprogrammierbaren Logikvorrichtungen ferner programmierbare Eingabe-/Ausgabeterminals aufweist, die reprogrammierbar mit ausgewählten der funktionalen Elemente verbunden werden können, die in die reprogrammierbaren Logikvorrichtungen konfiguriert werden;

    b) eine Mehrzahl von reprogrammierbaren Verbindungsvorrichtungen, wobei jede der reprogrammierbaren Verbindungsvorrichtungen Eingabe-/Ausgabeterminals aufweist und eine interne Schaltkreisanordnung, die reprogrammierbar konfiguriert werden kann, um Verbindungen zwischen ausgewählten der Eingabe-/Ausgabeterminals bereitzustellen; und

    c) einen Satz von festen elektrischen Leitern, die die programmierbaren Eingabe-/Ausgabeterminals auf den reprogrammierbaren Logikvorrichtungen mit den Eingabe-/Ausgabeterminals auf den reprogrammierbaren Verbindungsvorrichtungen verbinden, so dass jede der reprogrammierbaren Verbindungsvorrichtungen zu einem aber nicht allen der programmierbaren Eingabe-/Ausgabeterminals von jedem der reprogrammierbaren Logikvorrichtungen verbunden ist.
  2. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach Anspruch 1, wobei die reprogrammierbaren Logikvorrichtungen programmierbare Gatterarrays aufweisen.
  3. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach Anspruch 1 oder 2, wobei die reprogrammierbaren Logikvorrichtungen FPGAs aufweisen.
  4. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach einem der vorangehenden Ansprüche, wobei die reprogrammierbaren Verbindungsvorrichtungen programmierbare Gatterarrays aufweisen.
  5. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach einem der vorangehenden Ansprüche, wobei die reprogrammierbaren Verbindungsvorrichtungen FPGAs aufweisen.
  6. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach einem der vorangegangenen Ansprüche, wobei die reprogrammierbaren Eingabe-/Ausgabeterminals auf jeder der reprogrammierbaren Logikvorrichtungen in Gruppen von programmierbaren Eingabe-/Ausgabeterminals unterteilt sind, wobei die Anzahl der Gruppen der Anzahl der reprogrammierbaren Verbindungsvorrichtungen in der Mehrzahl von reprogrammierbaren Verbindungsvorrichtungen gleicht und wobei die Gruppen von programmierbaren Eingabe-/Ausgabeterminals mit einer der Mehrzahl von reprogrammierbaren Verbindungsvorrichtungen verbunden sind.
  7. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach einem der vorangegangenen Ansprüche, ferner aufweisend eine Logikstruktur, die eine Mehrzahl von programmierbaren Testleitern aufweist, die elektrisch mit einem oder mehreren der programmierbaren Eingabe-/Ausgabeterminals auf ausgewählten reprogrammierbaren Logikvorrichtungen verbunden sind, um Signale zu empfangen, die den Ausgangszustand von zumindest einem der funktionalen Elemente in den ausgewählten reprogrammierbaren Logikvorrichtungen anzeigen.
  8. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach einem der vorangegangenen Ansprüche, ferner aufweisend eine Mehrzahl von Takt-Leitern, die mit zumindest einigen der reprogrammierbaren Logikvorrichtungen verbunden sind.
  9. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach Anspruch 8, wobei die reprogrammierbaren Logikvorrichtungen zusätzliche Eingabe-/Ausgabeterminals aufweisen und wobei die Mehrzahl von Takt-Leitern Taktleitungen aufweisen, die mit den zusätzlichen Eingabe-/Ausgabeterminals verbunden sind und Taktsignale übertragen, die innerhalb des elektrisch rekonfigurierbaren Hardwareemulationssystems erzeugt werden.
  10. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach Anspruch 8 oder 9, ferner aufweisend einen programmierbaren Takterzeugungsschaltkreis, der Taktsignale an die Mehrzahl von Takt-Leitern liefert zur Verteilung an zumindest eine der reprogrammierbaren Logikvorrichtungen.
  11. Ein elektrisch rekonfigurierbares Hardwareemulationssystem nach einem der vorangegangenen Ansprüche, ferner aufweisend eine Schnittstellenstruktur mit zumindest einer programmierbaren Vorrichtung, die geeignet ist, um Signalpfade für Signale bereitzustellen, die Information zu und von ausgewähltem der funktionalen Elemente in den reprogrammierbaren Logikvorrichtungen übertragen.
Es folgen 51 Blatt Zeichnungen






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com