-
HINTERGRUND
DER ERFINDUNG
-
1. Gebiet
der Erfindung
-
Die vorliegende Erfindung betrifft
Entwürfe
integrierter Schaltungen. Insbesondere betrifft die vorliegende
Erfindung den Entwurf eines Verteilsystems für Taktsignale in einer integrierten
Schaltung.
-
2. Beschreibung der verwandten
Technik
-
"Taktversatz" ist ein Maß der Unsicherheit
bei den Ankunftszeiten eines Taktsignalübergangs an unterschiedlichen
Stellen einer synchronen logischen Schaltung, wie beispielsweise
eines Mikroprozessors. Taktversatze sind unerwünscht, da sie die Betriebsfrequenz,
die von der logischen Schaltung erreicht werden kann, negativ beeinflussen
können.
Folglich sollten Taktversatze minimiert werden. Ein Taktversatz
kann beispielsweise aufgrund von RC-Verzögerungen in den Verbindungsleitungen
zwischen Schaltungselementen, Fehlanpassungen in den kapazitiven
Lasten, mit denen die Taktpuffer beaufschlagt werden, und Fehlanpassungen
der Treibergrößen in den
die Taktsignale verteilenden Taktpuffern auftreten.
-
Beim Stand der Technik wird das Taktverteilsystem
(d. h. das Platzieren von Taktpuffern und das Führen von Taktsignalen) in einem
vollständig
den Kundenwünschen
angepassten Mikroprozessor häufig
per Hand konfiguriert, um Taktversatze zu minimieren. Ein solches
Verfahren ist ganz eindeutig zeitaufwendig.
-
Mit wachsender Komplexität von Mikroprozessoren
sind Mikroprozessorkonzeptionen "halb
den Kundenwünschen
angepasst" worden.
Bei einer halb den Kundenwünschen
angepassten Konzeption werden Bausteine, wie beispielsweise Makros
(z. B. regelmäßig platzierte
Speicherzellen), in Arrays angeordnete logische Elemente (z. B.
Elemente in Datenwegen und Registerdateien) und Standardzellen (z.
B. Randomlogik), verwendet. Solche Bausteine werden typischerweise
mit automatischen Tools entwickelt, wie beispielsweise logischer
Synthese, automatischen Platzier- und Führungs-Tools, die bewirken,
dass die Konzeptionsaufgabe in hohem Maße automatisiert und effizient
ausgeführt
wird. Da jedoch die Konzeptionsaufgaben automatisiert sind, ist
die Konfiguration des Taktverteilsystems per Hand sehr komplex und
unpraktisch geworden.
-
Bei der Taktverteilung bei einer
halb den Kundenwünschen
angepassten Konzeption muss die Art der unterschiedlichen Bausteine
in der Schaltung berücksichtigt
werden. Beispielsweise kann der Konstrukteur innerhalb eines den
Kundenwünschen
angepassten Makroblocks immer noch jeden Transistor sorgfältig platzieren,
die Leitungen für
die Taktsignale führen
und, falls erforderlich, die Taktsignale sorgfältig Puffern. Bei einer solchen
Konzeption kann der Konstrukteur einen "Null-Versatz"-Punkt spezifizieren, der typischerweise
ein Eingabepunkt des Taktsignals in das Makro ist. Da der Konstrukteur
die Kontrolle über
die Platzierung und Führung
der Taktsignale behält,
können
Taktversatze innerhalb eines den Kundenwünschen angepassten Makroblocks
normalerweise durch Konzeptionsentscheidungen gesteuert werden.
-
In Arrays angeordnete logische Elemente,
die sehr regelmäßig angeordnet
sind und eingebaute geplante Verdrahtungsstellen aufweisen, ermöglichen
eine disziplinierte Taktsignal-Verteilstrategie, da die gesamte
Taktlast für
das Array und geeignete Platzierungen von Taktpuffern ziemlich akkurat
bestimmt werden können.
Häufig
werden solche in Arrays angeordnete logische Elemente jedoch von
automatischen Tools platziert und geführt. Solche Tools müssen zur
Erreichung der gewünschten
Führung
von Taktsignalen sorgfältig geleitet
werden.
-
Logische Schaltungen, die aus Standardzellen
aufgebaut sind, gehören
hinsichtlich der Führung
von Taktsignalen zu der problematischsten Kategorie von Schaltungen.
Standardzellenkonzeptionen werden primär unter Anwendung eines logischen
Synthese-Tools erzeugt. Bei einer solchen Konzeption versieht der Konstrukteur
das logische Synthese-Tool mit einem Satz logischer Gleichungen,
die die gewünschte
logische Schaltung funktionell ausdrücken. Das Synthese-Tool erzeugt
dann die Implementierung der logischen Schaltung, wobei Schaltungselemente
(z. B. logische Gatter) aus einer Standardzellen-Bibliothek ausgewählt werden.
Verschiedene Optimierungstechniken werden typischerweise zum Erreichen
solcher Ziele wie hoher Zellendichte und Gatterminimierung angewandt.
Somit besitzt der Konstrukteur normalerweise kein akkurates Mittel
zum Vorhersagen der Größen und
Positionen der von den Taktsignalen angesteuerten kapazitiven Lasten,
so dass die Anzahl von zum angemessenen Ansteuern dieser kapazitiven
Lasten benötigten
Taktpuffern und ihre optimalen Platzierungen nicht im voraus bekannt
sind. Ferner erzeugt selbst bei einer geringfügigen Modifizierung der Schaltung
das logische Synthese-Tool häufig
eine radikal andere Schaltungstopologie für die Schaltung, so dass bei
jeder Modifizierung ein anderes Taktverteilnetz erforderlich sein
kann.
-
Da Makros und in Arrays angeordnete
logische und Standardzellen häufig
in einer halb den Kundenwünschen
angepassten Schaltung, wie beispielsweise einer in einen Mikroprozessor
integrierten Schaltung, anzutreffen sind, ist es wünschenswert,
ein automatisches Konzeptions-Tool zur Hand zu haben, das beim Platzieren
von Taktpuffern und Führen
von Taktsignalen die unterschiedlichen Arten von Bausteinen berücksichtigt,
um einen minimalen Taktversatz in der integrierten Schaltung zu
erreichen.
-
Blair G M: "SKEW-FREE CLOCK DISTRIBUTION FOR STANDARD-CELL
VLSI DESIGNS"; IEEE Proceedings-G.
Electronic Circuits and Systems, Vol. 139, Nr. 2, 1. April 1992,
S. 265–267
beschreibt ein Verfahren zum Reduzieren von Taktversatz in einer
Standardzellenkonzeption.
-
Die vorliegende Erfindung bietet
ein Verfahren zum Zuweisen von Taktpuffern und zum Führen von Taktsignalen
zu verschiedenen Regionen einer integrierten Schaltung mit minimalem
Taktversatz. Endungsgemäß wird ein
vor-zugewiesener Taktpufferbereich jeder der verschiedenen Regionen
der integrierten Schaltung zugeordnet, in der die logische Schaltung
durch Reihen von Standardzellen implementiert ist. Für jedes zu
führende
Taktsignal und für
jede Reihe von Standardzellen werden dann folgende Schritte durchgeführt: (a) Identifizieren
derjenigen Standardzellen, die das Taktsignal empfangen, (b) Zuordnen
einer Eingangskapazität zu
jeder identifizierten Standardzelle, (c) für jede identifizierte Standardzelle
Ableiten einer der identifizierten Standardzelle zugeordneten Leitungskapazität durch
Schätzen
der Leitungslänge,
die benötigt
wird, um das Taktsignal von dem zugewiesenen Pufferbereich elektrisch
mit der identifizierten Standardzelle zu koppeln, und (d) Ableiten
einer Reihenkapazität
durch Summieren sämtlicher
Eingangskapazitäten
und Leitungskapazitäten
innerhalb der Standardzellenreihe. Das Verfahren umfasst ferner
das Auswählen
jeder Standardzellenreihe in einer vorbestimmten Reihenfolge und
für die
ausgewählte
Standardzellenreihe das Durchführen
folgender Schritte: (a) Bestimmen einer Fensterkapazität durch
Summieren der Reihenkapazitäten
für ausgewählte Standardzellenreihen,
die den ausgewählten
Standardzellenreihen benachbart sind, (b) Bestimmen einer Anzahl
von Taktpuffern zum Zuweisen zu der ausgewählten Standardzellenreihe durch
Dividieren der Fensterkapazität
durch die bevorzugte Last und eine von der Anzahl der benachbarten
Standardzellenreihen abgeleiteten Anzahl und (c) Platzieren der
Anzahl von Taktpuffern innerhalb des zugewiesenen Pufferbereichs.
-
Das erfindungsgemäße Verfahren kann in Zusammenhang
mit einem Gleitfenster durchgeführt
werden, welches sich von einer einer Seite des Bereichs am nächsten liegenden
Seite zu der gegenüberliegenden Seite
des Bereichs bewegt. Bei dieser Vorgehensweise ist eine vorbestimmte
Anzahl von einander benachbarten Standardzellenreihen in dem Gleitfenster
für jede
Standardzellenreihe enthalten, für
die die Platzierung eines Taktpuffers in Betracht ge zogen wird.
Die Ausgangsanschlüsse
der Taktpuffer sind vorzugsweise durch orthogonal zu den Standardzellenreihen
verlaufende Leitungen gekoppelt. Bei einer Ausführungsform wird die Reihenkapazität unter
Berücksichtigung
der Kapazität
pro Reihe der Koppelleitungen berechnet.
-
Das Verfahren ist auch auf integrierte
Schaltungen anwendbar, die einen zweiten Bereich aufweisen, der
durch in Arrays angeordnete logische Elemente oder Makros implementiert
ist. In einem solchen Bereich, in dem Standardzellen nicht unbedingt
enthalten sein müssen,
wird mittels eines erfindungsgemäßen Verfahrens
wie zuvor ein zugewiesener Pufferbereich zugeordnet und umfasst
das Verfahren für
jede das Taktsignal empfangende logische Schaltung, unabhängig davon,
ob die logische Schaltung aus Makros oder in Arrays angeordneten
logischen Elementen aufgebaut ist, folgende Schritte: (a) Schätzen einer
dem Taktsignal zugewiesenen Eingangskapazität und (b) Schätzen einer
Leitungskapazität
der logischen Schaltung anhand der Leitungslänge, die benötigt wird,
um das Taktsignal von dem zugewiesenen Pufferbereich mit der logischen Schaltung
zu koppeln. In einer solchen Region werden die Puffer anhand der
Summe der Eingangskapazitäten sämtlicher
logischen Schaltungen und der geschätzten Leitungskapazitäten zum
Verbinden der Taktpuffer mit den logischen Schaltungen und Dividieren
dieser Summe durch die bevorzugte Last zugewiesen. Durch Vorsehen
unterschiedlicher Vorgehensweisen zum Puffern von Zuweisungen für unterschiedliche
Regionen der aufgebauten Schaltung unter Verwendung unterschiedlicher
Bausteine, z. B. Makros, in Arrays angeordneter logischer Elemente
und Standardzellen, bei dem Verfahren ermöglicht die vorliegende Erfindung
eine im wesentlichen gleiche Belastung der Taktpuffer in jeder Region,
so dass der Taktversatz unabhängig
von der in jeder Region angewandten Baustein-Technologie gleichförmig sein
kann.
-
Das Verfahren kann zum Aufbau eines
hierarchischen Taktverteilsystems angewandt werden, bei dem die
Taktpuffer in den unterschiedlichen zugewiesenen Pufferbereichen
auf dem Chip von einem Satz Taktpuffer einer höheren Ebene angesteuert werden,
wobei die Taktpuffer der höheren
Ebene einem zugewiesenen Pufferbereich einer zweiten Ebene zugewiesen
werden. Die Anzahl von einem solchen zugewiesenen Pufferbereich
einer zweiten Ebene zugewiesenen Taktpuffern wird durch die Anzahl
von anzusteuernden Taktpuffern einer niedrigeren Ebene dividiert
durch die bevorzugte Last berechnet.
-
Die Ebenen des hierarchischen Verteilsystems
sind zum Minimieren eines Taktversatzes vorzugsweise miteinander
gekoppelt. Ferner werden, wenn die Taktsignale einen Betriebstakt
und einen oder mehrere Prüftakte
enthalten, die Betriebstakte zwischen den Prüftakten geführt, um von den Signalleitungen
isoliert zu sein, die aktiv sind, wenn der Betriebstakt ebenfalls
aktiv ist, wodurch Rauschen in der Schaltung minimiert wird.
-
Die vorliegende Erfindung wird anhand
der nachstehenden detaillierten Beschreibung und der diese begleitenden
Zeichnungen besser verständlich.
Es zeigen beispielhaft:
-
1 ein
erfindungsgemäßes Taktverteilsystem 100,
das auf einer integrierten Schaltung 101 implementiert
ist;
-
2 ein
Ablaufdiagramm 200 mit Darstellung des Steuerungsablaufs
eines ClockRoute2-Programms, das eine Ausführungsform der vorliegenden
Erfindung ist;
-
3 ein
Verfahren zum Anwenden des ClockRoute2-Programms in Zusammenhang
mit einer Standardzellenkonzeption.
-
Die beschriebene Ausführungsform
bietet ein Verfahren und ein automatisches Tool zum (i) Analysieren
einer logischen Schaltung, die mittels einer beliebigen Kombination
aus den Kundenwünschen
angepassten Makros, in Arrays angeordneten logischen Elementen und
Standardzellen implementiert worden ist, um die zu erwartenden kapazitiven
Lasten der Taktsignale zu schätzen,
(ii) Bestimmen der Anzahl von Taktpuffern, die zum Ansteuern dieser
kapazitiven Lasten erforderlich sind, um Taktversatze zu minimieren,
und (iii) Bewirken der Platzierungen solcher Taktpuffer und Führen ihrer
Ausgangssignale durch die logische Schaltung. Bei der beschriebenen
Ausführungsform
wird eine Hierarchie von Taktpuffern zum Bereitstellen eines Verteilsystems
für Taktsignale
verwendet.
-
1 zeigt
eine Ausführungsform
der vorliegenden Erfindung in Form eines Verteilsystems 100,
das in eine integrierte Schaltung 101 implementiert ist.
Gemäß 1 weist die integrierte
Schaltung 101 eine PLL-Schaltung 102 auf, die
ein Taktsignal "CLK_IN" auf einer Metallspur 151 erzeugt.
Die Metallspur 151 ist mit Taktpuffern 103 gekoppelt.
Obwohl dies nicht gezeigt ist, empfängt die PLL-Schaltung 102 ein
externes Referenztaktsignal als Zeitbasis. Die Taktpuffer 103 erzeugen
zusammen ein verstärktes
Signal "CLK0" auf einer Metallspur 152,
die orthogonal zu der Metallspur 151 verläuft. Das
Signal CLK0 ist über
die Metallspur 152 mit Taktpuffern 104-1, 104-2 und 104-3 gekoppelt.
Die Taktpuffer 104-1, 104-2 und 104-3 erzeugen
wiederum ein verstärktes
Ausgangssignal "CLK1" auf Metallspuren 156, 155 und 153,
die von der Metallspur 154 kurzgeschlossen oder einem Gridding
unterzogen werden. Das Gridding macht es möglich, dass die Signalwellenfront
eines Taktsignals "CLK1" an sämtlichen
Empfangsstellen des Signals so gleichförmig wie möglich ist, wodurch ein Taktversatz
minimiert wird. Zu diesem Zweck werden die Taktpuffer 104-1 bis 104-3 vorzugsweise hinsichtlich
ihrer Ansteuerungscharakteristiken einander angepasst. Das Verwenden
einer großen
Anzahl kleiner identischer Taktpuffer ist eine Ausführungsform
des Verfahrens zum Erreichen einer Gleichförmigkeit. Der Einfachheit halber
werden die Taktpuffer 104-1 bis 104-3 als "Puffer der Ebene
1" bezeichnet. Die
Metallspuren 153–156 koppeln
das Taktsignal "CLK1" mit Taktpuffern 105-1 bis 105-6.
Die Taktpuffer 105-1 bis 105-6 erzeugen zusammen
ein verstärktes
Ausgangssignal "CLK2" auf Metallspuren 159 bis 162,
die von Metallspuren 157–158, welche orthogonal
zu den Metallspuren 159–162 verlaufen, kurzgeschlossen
oder einem Gridding unterzogen werden, um einen einzigen elektrischen
Schaltungspunkt zu bilden. Die Taktpuffer 105-1 bis 105-6 werden
als "Puffer der
Ebene 2" bezeichnet.
Schließlich
wird das Taktsignal CLK2 zwecks Verteilung an sämtliche getaktete Elemente
der integrierten Schaltung 101, z. B. Flipflops, Register
und Zähler, über die
Metallspuren 157–162 mit
Taktpuffern 106-1 bis 106-7 ("Puffer der Ebene 3") gekoppelt. Jeder Puffer der Ebene
3 ist für
das Treiben des Taktsignals zu getakteten Elementen innerhalb seines
jeweiligen spezifisch zugeordneten Bereichs der integrierten Schaltung 101 verantwortlich.
Bei dieser Ausführungsform
werden die Taktpuffer sämtlicher
Ebenen einem Gridding unterzogen, obwohl dies nicht erforderlich
ist. Bei einigen Anwendungen kann das Gridding auf der niedrigsten
Ebene ausreichen, um die gewünschte
Gleichförmigkeit
der Wellenfront an den getakteten Elementen zu erzielen. Obwohl 1 vier Taktpuffer-Ebenen
zeigt, nämlich
ein Puffer der Ebene 0 (d. h. Taktpuffer 103), Puffer der
Ebene 1, Puffer der Ebene 2 und Puffer der Ebene 3, kann innerhalb des
Umfangs der Erfindung eine beliebige Anzahl von Taktpuffer-Ebenen
implementiert werden.
-
Das Taktverteilsystem 100 kann
unter Anwendung eines erfindungsgemäßen Verfahrens realisiert werden,
welches nachstehend beschrieben wird. Dieses Verfahren kann in ein
Computerprogramm implementiert werden, damit es mit herkömmlichen
computergestützten
Konzeptions-Tools, wie beispielsweise logischen Synthese-Tools und
Zellen-Platzier- und Führungs-Tools,
kompatibel ist. Eine Ausführungsform
der vorliegenden Erfindung wird in Zusammenhang mit einem CockRoute2-Programm
beschrieben, das in der Beschreibungssprache "Perl" implementiert
ist. Die Sprache Perl ist Fachleuten auf dem Sachgebiet bekannt. Perl-Übersetzer
sind in vielen Computern zu finden, bei denen ein Unix-Betriebssystem
implementiert ist. Das Unix-Betriebssystem ist Fachleuten auf dem
Sachgebiet ebenfalls bekannt.
-
Das ClockRoute2-Programm kann in
Zusammenhang mit einem herkömmlichen
automatischen Führungs-Tool,
wie beispielsweise Cell3 von Cadence Design Systems, Inc., San Jose,
CA, verwendet werden. 3 zeigt
beispielsweise die Anwendung des Programms ClockRoute2 in den Konzeptionsaktivitäten einer integrierten
Schaltung, die Standardzellen aufweist. Als erstes wird in einem
Lageplanungs-Schritt 301 die "nutzbare Siliziumfläche" der integrierten Schaltung in eine
Anzahl von Regionen unterteilt, von denen jede einen vor-zugewiesenen
Taktpufferbereich aufweist. Das Unterteilen der in tegrierten Schaltung
in Regionen wird häufig
sowohl von der erforderlichen Funktionalität als auch von der angewandten
Technik bestimmt. Beispielsweise kann eine Region einem auf dem
Chip untergebrachten Speicher-Array zugeordnet sein, das getrennt
von einer anderen Speicherregion für die Steuerlogik zu betrachten
ist, da eine Speicherschaltung häufig
mittels eines den Kundenwünschen
angepassten Makros implementiert wird und die Steuerlogik normalerweise
mittels Standardzellen implementiert wird. Bei diesem Ausführungsbeispiel
umfasst der Lageplanungs-Schritt 301 ferner das Zuordnen
eines Raums zum Führen
breiter Metallspuren zwecks Führung
von Ausgangssignalen der Puffer der Ebene 2 und Verbindung der Eingangs-
und Ausgangsanschlüsse
der Puffer der Ebene 3. Bei dem vorliegenden Ausführungsbeispiel
werden sämtliche
Taktsignale unter Verwendung zweier Metallisierungsebenen, die als "M4" und "M5" bezeichnet werden,
geführt.
Typischerweise müssen
solche Metallisierungsebenen in orthogonalen Richtungen geführt werden.
Der Einfachheit halber wird die Richtung entlang den Spuren in M4
als "horizontal" und die Richtung
entlang den Spuren in M5 als "vertikal" bezeichnet. Bei
dieser Ausführungsform
werden breite M4-Spuren zum Führen
von Signalen zwischen den Puffern der Ebene 2 und den Puffern der
Ebene 3 verwendet. Die Eingangs- und Ausgangsanschlüsse der
Puffer der Ebene 3 sind über
M5-Metallspuren miteinander verbunden.
-
Nachdem in den Lageplanungs-Schritt 301 die
integrierte Schaltung in geeigneter Weise unterteilt worden ist,
läuft in
Schritt 302 ein Platzierungs-Programm zum Platzieren von
Standardzellen in geeigneten Regionen, die in dem Lageplanungs-Schritt 301 zugeordnet
worden sind. Vor dem Führen
von Signalen zwischen den platzierten Standardzellen wird das ClockRoute2-Programm
in Schritt 303 aufgerufen, um für jede Region die Anzahl von
tatsächlich
benötigten
Taktpuffern zu berechnen und diese zu platzieren. Wie nachstehend
beschrieben, platziert das ClockRoute2-Programm ferner Leitungen
zum Verbinden der platzierten Puffer der Ebene 2 und Puffer der
Ebene 3 mit den geplanten M4- und M5-Spuren, die in dem Lageplanungs-Schritt 301 bereitgestellt
worden sind. In Schritt 303 werden ferner M4-Spuren von
den geplanten M5-Spuren getakteten Elementen der im Platzierungs-Schritt 302 platzierten
Stellen zugewiesen. Da das ClockRoute2-Programm M4- und M5-Spuren zuweist, bevor
ein Router Signale zwischen den Standardzellen führt, erhalten Taktsignale Vorrang
bei der Verwendung der Führungs-Resourcen
der integrierten Schaltung.
-
In Schritt 304 wird ein
Führungs-Tool
(z. B. Cell3) aufgerufen, um Signale automatisch zwischen den Standardzellen
und den Taktpuffern zu führen.
Der Konstrukteur kann dann das Ergebnis der Führung auswerten. Falls weitere
Modifikationen erforderlich sind, wie es manchmal der Fall ist,
z. B. wenn bestimmten Signalen ein zusätzliches Erfordernis auferlegt
werden muss, können
die Schritte 302–304 wiederholt
werden, bis ein zufriedenstellendes Führungs-Ergebnis erzielt worden
ist.
-
Das ClockRoute2-Programm empfängt drei
Eingabedateien: (i) eine Steuerdatei, die Eingangssteuerdaten zu
dem ClockRoute2-Programm liefert, (ii) eine "def"-Datei,
die die Positionen von Anschlussstiften, Durchkontakten, Komponenten
und Netzen in der Konzeption auflistet, einschließlich deren
Platzierstellen und Zellentypen, und (iii) eine "Verilog"-Datei, die die Netzliste der in der "def"-Datei beschriebenen
Konzeption liefert. Die Verilog-Datei wird in der Beschreibungssprache
der "Verilog"-Hardware erstellt,
die Fachleuten auf dem Sachgebiet ebenfalls bekannt ist. Die Verilog-Eingangsdatei
enthält
Dummy-Taktpufferzellen.
Wie oben beschrieben, werden bei der vorliegenden Erfindung diese
Dummy-Taktpufferzellen durch das Instantiieren von echten Taktpufferzellen
unter Anwendung des ClockRoute2-Programms ersetzt, und zwar entsprechend der
geschätzten
Leitungs- und Zellenkapazitäten,
die von den Taktpuffern angesteuert werden müssen.
-
Das ClockRoute2-Programm erstellt
drei Ausgangsdateien: (i) eine Protokolldatei, in der über Fehler und
Summenstatistiken sowie Leistungsziffern, wie beispielsweise die
Anzahl von platzierten Puffern und die von diesen Puffern angesteuerte
mittlere Kapazität,
berichtet wird; (ii) eine modifizierte "Verilog"-Datei, die die echten Taktpuffer enthält, durch
welche das ClockRoute2-Programm
die Dummy-Taktpufferzellen in der Verilog-Eingangsdatei ersetzt; (iii)
eine "Addwire"-Datei, die Addwire-Anweisungen
zum Befehlen der Führung
sowohl der Taktsignale von den echten Taktpuffern zu den instantiierten
Zellen der "def"-Datei als auch der
Metallspuren zu Gridding-Zwecken durch das Führungs-Tool Cell3 auflistet;
und (iv) eine modifizierte "def"-Datei, die die Positionen
der hinzugefügten
Taktpuffer und Durchkontakte enthält. Die Addwire-Datei ist in
einem Format erstellt, das von dem Führungs-Tool Cell3 verstanden
wird. Selbstverständlich
ist ein Fachmann auf dem Sachgebiet in der Lage, anhand dieser detaillierten
Beschreibung das ClockRoute2-Programm derart zu modifizieren, dass
dieses die Eingangsdateien in einer andern herkömmlichen Hardware-Beschreibungssprachformaten
akzeptiert, um mit einem beliebigen herkömmlichen Führungs-Tool zu arbeiten, und
Ausgangsdateien in anderen herkömmlichen
Hardware-Beschreibungssprachformaten zu erstellen.
-
2 zeigt
ein Ablaufdiagramm 200 mit Darstellung des Steuerungsablaufs
des ClockRoute2-Programms. Bei diesem Ausführungsbeispiel werden zwecks
Konzentration auf die vorliegende Erfindung nur zwei Ebenen der
Taktpufferung (Puffer der Ebene 2 und Puffer der Ebene 3) beschrieben.
Es ist für
Fachleute auf dem Sachgebiet anhand dieses erläuternden Ausführungsbeispiels
des ClockRoute2-Programms jedoch offensichtlich, dass zusätzliche
Ebenen der Taktpufferung unter Anwendung des hier beschriebenen
Prinzips bereitgestellt werden können.
-
Gemäß 2 analysiert das ClockRoute2-Programm
in Schritt 201 die Eingangs-Steuerdatei. Die Steuerdatei
wird von der ReadControlFile-Subroutine gelesen. Die ReadControlFile-Subroutine
unterstützt zwei
Arten von Anweisungen: (a) globale und (b) taktregionale. Globale
Anweisungen sind auf die Gesamtkonzeption anwendbar. Taktregionale
Anweisungen sind nur innerhalb eines definierten "Kästchens" oder einer definierten "Taktregion" anwendbar. Die verschiedenen
Arten von definierten Taktregionen werden nachfolgend beschrieben.
Die unterstützte
globale Anweisung umfasst folgende Anweisungen: "Techfile", "Parmfile", "Buffer", "ClockDriveMult", "Grid", "RowHeight", "RowLookahead", "M4Cap", "M4Mult", "M5Cap", "M5Mult", "M5Width", "Orien tation", "L2Master", "L3Master", "BufCap", "AllowClock", "DeleteCells", "BlockedCell", "M5Offset", "Addwire", "C4Row", "M5Row". Taktregionale Anweisungen
werden zusammen mit jeder von "ClockBox"-, "SPBox"- und "L2Box"-Anweisungen definierten
Taktregion festgelegt. Die "ClockBox"-Anweisung wird normalerweise
zum Definieren von Taktregionen für Standardzellenblöcke verwendet.
Die "SPBox"-Anweisung wird typischerweise
zum Führen
von Taktsignalen in in Arrays angeordneten logischen Blöcken verwendet.
Taktregionen einer höheren
Ebene werden von der "L2Box"-Anweisung definiert.
Innerhalb einer von ClockBox definierten Region werden die folgenden
Anweisungen unterstützt: "Buf", "NumBuf", "NoBuffer", "Load", "RowPreWire", "NoWire", "RowStrapToEdge", "NoStrap", "RightStrap" und "LeftStrap". Innerhalb einer von
SPBox definierten Taktregion ("speziellen
Region) wird die "Place"-Anweisung unterstützt. Innerhalb
der von der "L2Box"-Anweisung definierten Taktregion (Region
der zweiten Ebene) werden die Anweisungen "Wireload", "Buf", "NumBuf" und "NumRow" unterstützt.
-
Die "TechFile"- und die "ParmFile"-Anweisungen beziehen sich auf eine
Technologie- bzw. eine Parameter-Datei. Die Technologie-Datei enthält die Kapazitäten pro
Längeneinheit
für Metallspuren
mit Mindestbreite in den Metallisierungsebenen. Eine Parameter-Datei
enthält
die Kapazitäten
für die
in der Datei spezifizierten Zellen. Typischerweise kann eine Anzahl
von Parameter-Dateien, jedoch nur eine Technologie-Datei vorgesehen
sein. In Schritt 202 ruft die Subroutine ReadControlFile
die Subroutine ReadTechFile zum Lesen der Technologie-Datei auf. Ähnlich ruft
die Subroutine ReadControlFile die Subroutine ReadParm zum Lesen einer
Parameter-Datei auf.
-
ReadControlFile initialisiert Parameter,
die bei einer nachfolgenden Kapazitätsschätzung und Taktsignalführung verwendet
werden, wenn sie die restlichen globalen Anweisungen in Schritt 203 liest.
Die Anweisung "Buffer" definiert den zu
verwendenden Taktpuffer. Die Anweisung "Buffer" empfängt den Namen der Pufferzelle,
die optimale Belastbarkeit, die Namen der Eingangs- und Ausgangssignale
in der Zellendefinition, die Eingangskapazität für die Zelle und weitere Dimensionsattribute
der Pufferzelle. Beispielsweise wird eine "Buffer"-Anweisung verwendet, um zu spezifizieren,
dass eine Pufferzelle "L3CKBUF" eine Datenbasis-Breiteneinheit
von 1800 und eine optimale Ansteuerungsleistung von 0,7 pF aufweist.
Die Anweisung "ClockDriveMult" ermöglicht es
dem ClockRoute2-Programm, zusammen mit einem spezifizierten Signal
einen spezifizierten Faktor zum Skalieren des optimalen Ansteuerungswert
der Pufferzelle zu verwenden, wenn die Pufferzelle zum Ansteuern
des spezifizierten Taktsignals verwendet wird. ClockDriveMult ist
beispielsweise bei einer Konzeption mit einer Abfrage-Testmöglichkeit
sinnvoll. Bei einer solchen Konzeption kann der Abfrage-Takt SC1, der
nur während
des Testens verwendet wird, um den Faktor 4 skaliert werden. Mit
anderen Worten: bei diesem Ausführungsbeispiel
hätte die
Pufferzelle L3CKBUF eine optimale Ansteuerungsleistung von 2,8 pF
für das
Taktsignal SC1 und 0,7 pF für
das Taktsignal PH1. Die ClockDriveMult-Anweisung spart Führungs-Resourcen
dadurch auf, dass sie es ermöglicht,
dass ausgewählte
Taktsignale mit einer höheren
Versatztoleranz angesteuert werden. Beispielsweise wird erwartet,
dass ein Taktsignal PH1 mit einer Taktrate von mehr als 150 MHz
arbeitet, wohingegen der Abfragetakt SC1 mit einer Rate von nur
10 MHz arbeiten und somit einen viel höheren Taktversatz tolerieren
kann.
-
Die Anweisungen "Grid" und "RowHeight" spezifizieren jeweils
den Abstand zwischen Gitterpunkten in Datenbank-Einheiten und die
Höhe einer
Standardzelle in dieser Konzeption ebenfalls in Datenbank-Einheiten.
Beispielsweise wird spezifiziert, dass Gitterpunkte um 180 Datenbank-Einheiten
voneinander beabstandet sind und jede Standardzelle 3240 Datenbank-Einheiten
groß ist.
Die Anweisung "RowLookahead" definiert ein "Window", das von einer Anzahl
von Standardzellenreihen spezifiziert ist, innerhalb derer das ClockRoute2-Programm bei der
Berechnung hinsichtlich der Zuweisungen echter Taktpuffer zu einem
vorgegebenen Zeitpunkt sämtliche
Kapazitäten
berücksichtigt,
denen ein Taktsignal begegnet. Die Steuerdatei spezifiziert beispielsweise
ein RowLookAhead von 2, das ein Fenster mit nur zwei Standardzellenreihen
repräsentiert,
oder 6560 Datenbank-Einheiten in den Y-Koordinaten.
-
Die Anweisungen "M4Cap", "M4Mult", MSCap", "M5Mult" definieren jeweils
die Kapazität
pro Längeneinheit
für eine
Metallspur mit Mindestbreite in M4, einen Multiplikator zum Skalieren
des Werts von M4Cap, die Kapazität
pro Längeneinheit
für eine
Metallspur mit Mindestbreite in M5 und einen Multiplikator zum Skalieren
des Werts von M5Cap. M4Mult und M5Mult werden erzeugt, damit Kapazitäten anhand
von Leitungen, deren Breite die Mindestbreite übersteigt, berechnet werden
können.
In dieser detaillierten Beschreibung sind die Ausdrücke "Leitung" und "Metallspur" austauschbar, solange
nicht ausdrücklich
etwas anderes angemerkt ist.
-
Die Anweisung "M5Width" spezifiziert die Breite einer M5-Verbindung,
die in Zusammenhang mit den Eingangs- und Ausgangssignalen eines
Taktpuffers verwendet wird. Beispielsweise wird eine M5-Breite von 260
Datenbank-Einheiten
spezifiziert. Die Anweisung "Orientation" definiert die Orientierung
der Taktpufferzelle relativ zu der Erdungsleitung der "unteren" Standardzellenreihe.
In dieser detaillierten Beschreibung beziehen sich die Ausdrücke "oberer" und "unterer" auf die größte Y-Koordinate
bzw. die kleinste Y-Koordinate.
Aktuelle unterstützte
Orientierungen sind (i) "N", die die Orientierung
einer Standardzelle relativ zu der Erdungsleitung auf dem Boden
ist, (ii) "S", die eine von der
X-Achse reflektierte "N"-Standardzelle ist,
(iii) "FN", die die von der
Y-Achse reflektierte "N"-Standardzelle ist,
und (iv) "FS", die die von der
Y-Achse reflektierte "S"-Standardzelle ist.
Sämtliche
Zellen in einer Standardzellenreihe, einschließlich einer Taktpufferzelle,
sollten die gleiche Orientierung haben. Bei einer falsch orientierten
Zelle besteht das Risiko des Kurzschlusses der Sammelleitungen.
-
Die "L2Master"- und "L3Master"-Anweisungen definieren die Namen der
Dummy-Taktpufferzellen für Puffer
der Ebene 2 bzw. Puffer der Ebene 3. Beispielsweise repräsentieren
Dummy-Pufferzellen "Buf_MASTER_CLK3", "Buf_MASTER_SC13" und "Buf_MASTER_SC23" vor-zugewiesene
Pufferbereiche zum Platzieren von Puffern der Ebene 3 der Taktsignale "PH1", "SC1" bzw. "SC2". Die "BufCap"-Anweisung spezifiziert
die Eingangskapazität,
die in Zusammenhang mit der Taktpufferzelle angewendet werden soll.
Die "AllowClock-Anweisung,
die die Namen eines Anschlussstifts und einer Zelle als Argumente
empfängt,
ermöglicht
es, dass ein Taktsignal mit dem spezifizierten Anschlussstift der
spezifizierten Zelle verbunden wird. Die "Delete Cells"-Anweisung löscht Zellen mit Namen, die
mit einem regulären
Ausdruck übereinstimmen,
aus der "def"-Datei (z. B. wird
der reguläre
Ausdruck "EROM_ROMBIST_SUB_297U1n" verwendet, wenn
n eine beliebige Ziffernkette ist). Die "BlockedCell"-Anweisung definiert eine Zelle für ein spezielles
Handling. Bei dieser Implementierung macht es das spezielle Handling
erforderlich, dass AddWire-Anweisungen auf den oberen oder den unteren
Teil der Zelle beschränkt
sind, und es verhindert das Führen
von (nachstehend beschriebenen) Verbindungen oder Vorverdrahtungen
innerhalb der Zelle (d. h. es erfolgt kein Führen von Taktsignalen über die
Zelle).
-
Die Anweisung "M5offset" definiert einen Wert, der verwendet
wird, wenn eine M5-Metallspur verschoben wird. Die Anweisung "AddWire" spezifiziert eine
hinzuzufügende
Leitung. "AddWire" kann entweder mit dem "viasat"- oder "noviasat"-Kennwort spezifiziert
werden, die sich beide innerhalb und außerhalb der Taktregion befinden.
Bei Spezifizierung mit dem "viasat"-Kennwort wird die
durch die AddWire-Anweisung hinzugefügte Leitung ebenfalls durch
Durchkontakte zu sämtlichen
Metallspuren kurzgeschlossen, welche die hinzugefügte Metallspur
kreuzt, die das gleiche Signal transportieren. Die "C4Row"-Anweisung definiert Reihen, bei denen
die M5-Leitungen eine Wendung beschreiben, um "C4-Pads" zu umgehen. C4-Pads sind spezielle Strukturen
in dieser Implementierung, die in M5 ausgebildet sind, damit die
integrierte Schaltung mit einem "Flip-Chip"-Paket verbondet
werden kann. C4-Pads sind weder erforderlich noch stehen sie in
Zusammenhang mit der Durchführung
der vorliegenden Erfindung. Somit können keine Verbindung oder
Vorverdrahtungen zu einer von der Anweisung "C4Row" spezifizierten Reihe hinzugefügt werden.
Die Anweisung "M4Row" definiert, an welcher
Stelle eine Verbindung von M4 (d. h. horizontal) mit den Positionen
der Eingangs- und Ausgangsanschlussstifte der Puffer der Ebene 2
auftritt. Die M4-Reihe ordnet ferner einen Taktsatz jeder Eingangs-
und Ausgangsanschlussstift-Position zu. Ein Taktsatz definiert die
vertikale Ordnung relativ zu einer Sammelleitung, in der die Taktsignale
in dem Taktsatz erscheinen sollen. Beispielsweise spezifiziert in
der Steuerdatei die M4Row-Anweisung M4-Verbindungen in Reihen 0
und 1 (d. h. 3240) für
die Eingangs- bzw. Ausgangsanschlüsse der Puffer der Ebene 2
mit einer Verschiebung von 720 für
den Eingangstaktsatz {SC1_1 PH1_1 SC2_1} und einer Verschiebung
von 945 für
den Ausgangstaktsatz {SC1_2, PH1_2, SC2_2}.
-
Bei Abschluss der Initialisierung
liest die ReadControlFile bei Schritt 204 (2) in den Taktregionen. Wie oben gesagt,
können
drei Arten von Taktregionen spezifiziert werden: ClockBox, SPBox
und L2box. Jede Art von Taktregion kann durch die Position spezifiziert
werden. Ferner kann eine SPBox durch den Positionsnamen spezifiziert
werden, wie bei dem Beispiel der Steuerdatei. 4 zeigt die Positionen der vier ClockBoxes
und einer L2Box. In dem Clock Route2-Programm wird jede Taktregion
durch einen Namen und ihre unteren linken und oberen rechten X-
und Y-Koordinaten spezifiziert. Somit erhält Clockbox ClockBox1 untere
linke Koordinaten von (0,0) und obere rechte Koordinaten (150000,
16200), was in 4 qualitativ
(d. h. nicht maßstabgetreu)
als Taktregion 401 gezeigt ist. Ähnlich sind ClockBox2, ClockBox3
und ClockBox4 in 4 als Taktregionen 402, 403 bzw. 404 gezeigt.
Wie spezifiziert, haben ClockBox1, ClockBox2 und ClockBox3 jeweils eine
Höhe von
fünf Standardzellenreihen.
L2Box1 mit unteren linken und oberen rechten Koordinaten (0,0) und (445680,
16200) überlappt
die Taktregionen 402, 403 und 404. Gemäß 4 sind M5-Metallspuren 451 und 452 in
der Taktregion 401 zum Verbinden der Eingangsanschlüsse PH1_2
und SC1_2 für
die Taktpuffer der Taktsignale PH1 und SC1 vorgesehen. Ähnlich sind
M5-Spuren 453 und 454 zum Verbinden der Ausgangsanschlüsse PH1
und SC1 der Taktpuffer der Signale PH1 und SC1 vorgesehen. Die M5-Spuren 451–454 werden von
der Anweisung "ClockWire" spezifiziert, die
für ein
spezifiziertes Taktsignal die mittleren X-Koordinaten der M5-Spuren
zum Verbinden der Eingangs- und Ausgangsanschlussstifte der Taktpuffer
definiert. Auf die gleiche Weise sind M5-Spuren 455–458, 459–462 zum
Verbinden der Eingangs- und Ausgangsanschlüsse der Taktpuffer der Taktregionen 402 und 403 vorgesehen.
In der Taktregion 401 repräsentiert der abgeschattete
Bereich 463 zwischen den M5- Spuren 452 und 453 den
vor-zugewiesenen Pufferbereich, d. h. Dummy-Pufferzellen, zum Platzieren
der Taktpuffer. Die Position des vor-zugewiesenen Pufferbereichs
wird von der "Buf"-Anweisung spezifiziert. Ähnlich repräsentieren
abgeschattete Bereiche 464 und 465 den vor-zugewiesenen
Pufferbereich für
die Taktregionen 402 und 403. Diese vor-zugewiesenen
Pufferbereiche sind in 4 zwar
zwischen den M5-Spuren in den Taktregionen 401 und 403 und
links von den M5-Spuren in der Taktregion 402 gezeigt,
sie können
jedoch an einer beliebigen Stelle innerhalb der Taktregion angeordnet
sein. Ein Bereich 466 ist der Bereich des vor-zugewiesenen
Pufferbereichs für
die Puffer der Ebene 2 von L2Box 12box1.
-
In einer ClockBox sind die Taktpufferreihen
in vertikalen Arrays angeordnet, wobei jede Reihe eine Anzahl von
von der "NumBuf"-Anweisung spezifizierten
Stellen bereitstellt. Wenn ein Puffer innerhalb der zugeordneten
Stelle platziert wird, wird der Eingangsanschlussstift der Taktpufferposition
dann über
eine M4-Spur mit der M5-Metallspur verbunden, die das Eingangstaktsignal
verbindet. Ähnlich
wird der Ausgangsanschlussstift der Taktpufferposition über eine
M4-Metallspur mit der entsprechenden M5-Metallspur des Ausgangstaktsignals
verbunden. Das tatsächliche
Anschließen
an die Eingangs- und
Ausgangsanschlussstifte erfolgt durch den Router, wie dem oben genannten
Platzier- und Führungs-Tool
Cell3.
-
Die "RowPreWire"-Anweisung befiehlt dem ClockRoute2-Programm,
eine Leitung zum Führen
eines spezifizierten Taktsignals in spezifizierten Reihen-Intervallen
zu platzieren. Von den "RowPreWire"-Anweisungen spezifizierte
Leitungen sind die zugelassenen M4-Leitungen zum Koppeln der von
den Ausgangsanschlüssen
der Taktpuffer angesteuerten M5-Spur und der von dem Taktsignal
angesteuerten getakteten Elemente. Beispielsweise spezifiziert in
der Steuerdatei die RowPreWire-Anweisung in Clockbox1 für das Taktsignal
PH1 eine M4-Leitung in jeder zweiten Reihe. Da jede Standardzellenreihe
18 Führungsspuren
bereitstellt, spezifiziert bei dieser Ausführungsform die Row PreWire-Anweisung
im wesentlichen, dass eine Spur pro 36 Spuren zum Führen des
Taktsignals PH1 verwendet wird. Wie oben gesagt, ist ein Gridding
der Taktsignale wünschenswert.
Das Gridding erfolgt durch die "RowStrapTo
Edge"-Anweisung,
die das periodische Reihenintervall spezifiziert, in dem M4-Leitungen, die zu
den Rändern
der Taktregion verlaufen, angeordnet sind. In ClockBox1 spezifiziert
die RowStrapToEdge-Anweisung, dass solche M4-Verbindungen, die über die
Taktregion verlaufen, alle vier Reihen vorgesehen sind. Durch Verlängern dieser
Verbindungen zu dem Rand der Taktregion und durch korrektes Spezifizieren
solcher M4-Verbindungen in benachbarten Taktregionen wird das gleiche
Taktsignal in unterschiedlichen Taktregionen verbunden.
-
Die Anweisungen "NoBuffer", "NoWire" und "NoStrap" spezifizieren jeweils
eine Stelle (NoBuffer) oder einen Bereich von Stellen (NoWire und
NoStrap), an/in der/dem kein Puffer, keine Leitung und keine Verbindung
platziert werden kann. Die Anweisung "LeftStrap" ("RightStrap") spezifiziert einen
Bereich von Y-Koordinaten, zwischen denen Verbindungen nur zu dem
linken (rechten) Rand von ClockBox verlaufen. "LeftStrap" und "RightStrap" sind sinnvolle Anweisungen, wenn eine
benachbarte Taktregion keine Verbindung zu dem an die aktuelle Taktregion
angrenzenden Rand bereitstellt, so dass es nicht erforderlich ist,
dass die aktuelle Taktregion eine M4-Verbindung zu diesem Rand herstellt.
Dabei verläuft
die M4-Spur soweit wie das zuletzt getaktete Element in der Reihe.
Die "Load"-Anweisung spezifiziert
die Eingangskapazität
eines Anschlussstifts an einer Position innerhalb der ClockBox.
Die Eingangskapazität
kann ein numerischer Wert in Picoferard oder der Name einer Parameterdatei
sein, in der der Eingangkapazitätswert
gespeichert ist. Die "Load"-Anweisung ist insbesondere sinnvoll
zum Erzeugen der Eingangskapazität
eines den Kundenwünschen
angepassten Makros.
-
Spezielle Taktregionen ("SPBoxes-2) können durch
Anwendung der "SPBox"-Anweisung entweder durch die Stelle
oder den Positionsnamen spezifiziert werden. Hinsichtlich einer
SPBox berechnet das ClockRoute2-Programm die erforderliche Anzahl
von Puffern und weist diese zu, erzeugt jedoch keine Führungs-
oder Verbindungsanweisungen für
das Führungs-Tool.
In einer SPBox behält
der Konstrukteur die Kontrolle über
die Konfiguration des Takt verteilsystems per Hand innerhalb der
SPBox. Selbstverständlich
kann der Anwender auch AddWire-Anweisungen aufnehmen, die entlang
dem Routen geführt
werden. Beispielsweise wird eine M3-Metallspur der Signalnetz-InEromBox hinzugefügt, die
zwischen Koordinaten (20200, 0) und (20, 200, 9720) verläuft. Die "Place"-Anweisung definiert
eine Stelle; an der ein Taktpuffer platziert wird.
-
Die "L2Box"-Anweisung definiert den Bereich, über den
Taktpuffer zum Ansteuern von Taktpuffern einer unteren Ebene zugewiesen
werden. Typischerweise spezifiziert der Konstrukteur mittel der "Buf"-Anweisung eine Dummy-Pufferzellenstelle
in der L2Box, die Anzahl von Reihen ("NumRow"-Anweisung) in der L2Box und die Anzahl
von Taktpuffern pro Reihe ("NumBuf"-Anweisung). Die
Kapazitäten
von M4-Spuren, die in dem Lageplanungs-Schritt bereitgestellt werden,
für die
Eingangs- und Ausgangsanschlüsse
von Puffern der Ebene 2 werden dem ClockRoute2-Programm mittels
der "WireLoad"-Anweisungen zur
Verfügung
gestellt.
-
Wenn die Subroutine ReadControlFile
die Steuerdatei liest, wird eine geeignete Wertüberprüfung durchgeführt. Beispielsweise
werden für
die "NoWire"-Anweisung die Y-Koordinaten-Argumente
im Vergleich mit dem Bereich der Y-Koordinate der ClockBox geprüft, um sicherzustellen,
dass die "NoWire"-Anweisung korrekt
innerhalb der Grenzen der ClockBox spezifiziert ist. Ferner werden
weitere sinnvolle Parameterwerte abgeleitet, wo dies sinnvoll ist.
Beispielsweise wird beim Definieren einer ClockBox die Anzahl von
Reihen innerhalb der Box anhand der Koordinaten-Argumente, die in
der ClockBox-Anweisung geliefert werden, und der anhand einer vorhergehenden
RowHeight-Anweisung
erhaltenen Reihenhöhe
berechnet.
-
Nach dem Lesen der Steuerdatei liest
das ClockRoute2-Programm in Schritt 205 die "def"-Datei. Wie oben
gesagt, listet die "def"-Datei die Positionen
von Anschlussstiften, Durchkontakten, Komponenten und Netzen in
der Konzeption auf, einschließlich
ihrer Platzierstellen und Zellentypen. Eine Liste von Komponenten ist
zwischen den Kennwörtern "COMPONENTS" und "END COM PONENTS" erstellt. Ähnlich sind
die Netze zwischen den Kennwörtern "NETS" und "END NETS" aufgeführt, wobei
die Liste von Positionen in jedem Signalnetz hinter "-" und dem Signalnamen aufgeführt ist.
Die "def"-Datei wird von der
Subroutine "ReadDef" gelesen. Die Subroutine
erzeugt bei den Schritten 206 und 207 Datenstrukturen
für die
Netze bzw. die Komponenten, wobei die Subroutinen ProcessClockNet,
ProcessSPNet und ProcessComponents aufgerufen werden.
-
Für
jede in einem Netz der "def"-Datei aufgelistete
Position wird ein Eintrag entweder in dem Array "OnNet" (für
ein Netz in einer ClockBox) oder dem Array "SPNet" (für
ein Netz in einer SPBox) erzeugt, damit diese einen Signalnamen
(d. h. den Name des Netzes) und den Namen des Anschlussstifts, dem
das Signal zugeordnet ist, enthält.
Wenn der Eintrag bereits existiert, d. h. die Position bereits in
einem früheren
Netz erschienen ist, werden der Signalname und der Name des Anschlussstifts
dem bestehenden Eintrag hinzugefügt.
Die Arrays OnNet und SPNet, die durch Zeichenfolgeoperationen in
den Subroutinen ProcessClockNet bzw. ProcessSPNet erzeugt worden
sind, werden durch den Positionsnamen angezeigt. Die Subroutine
ProcessComponents erzeugt drei Arrays für die Komponenten oder Positionen
der Konzeption: "Comp
Type", "CompX" und CompY". Jedes dieser Arrays
wird durch einen Positionsnamen angezeigt. Entsprechende Einträge von CompType,
CompX und CompY geben den Positionstyp und die untere linke X-Koordinate
und die Y-Koordinaten einer Position an. Die Subroutine ProcessComponents
prüft ferner
die Orientierung sämtlicher Zellen
und markiert diejenigen Zellen, die in einer BlockedCell-Anweisung
spezifiziert sind.
-
Bei Schritt 208 ruft das
ClockRoute2-Programm die Subroutine RemoveNon ClockedElems auf,
um die Dummy-Pufferzellen aus dem OnNet-Array zu entfernen und die
Positionen innerhalb sämtlicher
SPBoxes in Arrays "SPBox
Type" und "SPType" zu platzieren, die
sowohl durch den Positionsnamen als auch den Signalnamen angezeigt
sind. Das Array SPBoxType speichert den Namen der SPBox, und das
Array SPType verzeichnet den Positionstyp. Die Subroutine RemoveNonClockElems
erzeugt ferner ein Array AtY, von der Rei he (d. h. den Y-Koordinaten)
angezeigt wird, zum Speichern einer Liste von Positionen an jeder
Y-Position.
-
Bei Schritt 209 ruft das
ClockRoute2-Programm die Subroutinen ProcessStd CellRows, LimitWiresToAssignedRows
und AddStraps auf, um die bislang erzeugte Datenstruktur zu verarbeiten.
Die Subroutine ProcessStdCellRows erzeugt die Arrays ExtraLoadNet,
SPCAP, SPCount, RowMostX, RowGate, Row Device, BoxDevices und Wirelength.
ExtraLoadNet ist ein Array aus Signalnamen, die durch den Positionsnamen
und den Namen des Anschlussstifts angezeigt werden, für jede Position
und jeden Anschlussstift, für
welche(n) von einer "Load"-Anweisung eine Kapazität definiert
worden ist. Die Arrays SPCap und SPCount, die jeweils von einem
SPBox-Namen und einem Signalnamen angezeigt werden, sind Arrays
mit der Gesamtkapazität,
die diesem Signal in dieser SPBox zugeordnet ist, und der Anzahl
von Stiften, auf die die Kapazität
innerhalb dieser SPBox entfällt.
RowMostX, RowGate und RowDevices, die durch den Signalnamen, die
Reihennummer bzw. den ClockBox-Namen angezeigt sind, liefern für jede Reihe
(a) die Länge
der M4-Metallspur, die zum Führen
des Signals zu der am weitesten entfernten Zelle in der das Signal
empfangenden Reihe erforderlich ist, (b) die dem Signal zugeordnete
Gesamtkapazität
und (c) die Anzahl von diesem Signal zugeordneten Vorrichtungen.
Das Array BoxDevices, das durch den Signalnamen und eine Taktregion
angezeigt wird, enthält die
Gesamtzahl von dem Signal zugeordneten Vorrichtungen. Das Array
Wirelength, das durch eine Taktregion und einen Signalnamen angezeigt
wird, enthält
die dem Signal in jeder Taktregion zugeordnete Gesamtleitungslänge. Das
Array Wirelength wird diesmal dazu benutzt, für jede Reihe die Distanzen
zwischen den am weitesten entfernten getakteten Elementen, welche
das Taktsignal empfangen, anzugeben.
-
Zum Erzeugen der Arrays der Subroutine
ProcessStdCellRows durchläuft
die Subroutine ProcessStdCellRows das Array AtY in aufsteigender
Reihenordnung. Für
jede Liste von Positionen an jeder Y-Koordinate prüft die Subroutine
ProcessStdCellRow jede Position in aufsteigender X-Koordinatenordnung.
Für jeden
Anschlussstift in jeder Position wird der dem Anschlussstift zugeordnete Signalname
in das Array ExtraLoadNet eingegeben, wenn eine vorherige "Load"-Anweisung eine zusätzliche
Kapazität
für diesen
Positionstyp und Anschlussstift definiert. Wenn die Position in
einer SPBox enthalten ist, werden die SPCap- und SPCount-Arrays
aktualisiert, um den Kapazitätsbeitrag
der Position und die Anschlussstiftzählung in der SPBox aufzunehmen.
Für jede
Reihe und jeden Signalnamen führt
ProcessStdCell folgendes durch: (a) notiert in dem entsprechenden
Eintrag des Arrays RowMostX die X-Koordinate des in X-Richtung am
weitesten von der Dummy-Pufferzelle entfernten Anschlussstifts,
(b) akkumuliert in dem entsprechenden Eintrag des Arrays RowGate
die Gesamtkapazität
und (c) akkumuliert in dem entsprechenden Eintrag des Arrays RowDevices
die Anzahl von angetroffenen Anschlussstiften. Für jede Taktregion und jedes
Signal wird die Gesamtzahl von angetroffenen Anschlussstiften in
dem entsprechenden Eintrag des Arrays BoxDevices akkumuliert. Schließlich werden
für jede
Taktregion die jedem Signal zugeordneten Leitungslängen anhand
der Daten in dem Array RowMostX und dem Bereich der Taktregion berechnet.
-
Nach Beendigung der Subroutine ProcessStdCellRows
ruft das ClockRoute2-Programm
die Subroutine LimitWiresToAssignRows auf. Die Subroutine Limit
WiresToAssignRows entfernt für
jedes Signal jeder Taktregion Reihen, bei denen das Führen des
Signals durch eine "NoWire"-Anweisung, eine "C4Row"-Anweisung untersagt ist, oder die in
eine Reihe zwischen den zugelassenen M4-Leitungen in einer "RowPreWire"-Anweisung fallen.
In der Subroutine LimitWireToAssignedRows wird ein RowLeastX-Array, ähnlich dem RowMostX-Array, aktualisiert,
um die kleinste X-Koordinate jeder Leitung zu erzeugen. Das ClockRoute2-Programm
ruft dann die Subroutine AddStraps auf, um die Leitungen jedes Taktsignals
und jeder Taktregion durch Aktualisieren der entsprechenden Einträge in die
Arrays RowLeastX und RowMostX an jeder Reihe, in der eine RowStrapToEdge-,
LeftStrap- oder RightStap-Anweisung eine Verbindung definiert, zu
verbinden (d. h. die Leitungen zu Gridding-Zwecken zu verlängern).
-
Bei Schritt 210, d. h. nach
Abschluss der Ausführung
der Subroutine AddStraps, ruft das ClockRoute2-Programm die Subroutine
TotalCap auf, um die Gesamtkapazität in jeder jeder Taktregion
zugeordneten Reihe zu berechnen. Die Ergebnisse werden in einem
Array RowCap gespeichert, das durch die Taktregion, die Reihennummer
und das Signal angezeigt wird. Jeder Eintrag in dem Array RowCap
wird durch folgende Summierung erhalten: (a) der Kapazität in einem
entsprechenden Eintrag in RowGate, d. h. der dem Signal zugeordneten
Eingangskapazität,
(b) der Kapazität
pro Reihe der M5-Metallspur, d. h. der Kapazität pro Reihe der vertikalen
Metallspur am Ausgang der Taktpuffer, und der Gesamtkapazität der M4-Leitung,
die anhand der entsprechenden Einträge in den Arrays RowLeastX
und RowMostX errechnet worden ist. Der Kapazitätswert für jede Leitung wird durch Multiplizieren
ihrer Länge
mit ihrer Kapazität
pro Längeneinheit
erhalten, welche von der Technologie-Datei und den M4Mult- oder M5Mult-Anweisungen
zur Verfügung
gestellt wird. Schließlich
wird, wenn ein zusätzlicher
Lastwert von einer "Load"-Anweisung für diese
Taktregion definiert worden ist, für jedes Netz die zusätzliche
Last dem entsprechenden Eintrag des Arrays RowCap hinzugefügt.
-
An dieser Stelle wird für jede Taktregion
die Gesamtkapazität,
die jedes Taktsignal an jeder Reihe antrifft, in dem Array RowCap
zur Verfügung
gestellt. Das ClockRoute2-Programm ruft dann in Schritt
211 die
Subroutine Assign BuffersAndInputViasAndWires ("ABIVW") zum Zuweisen von Taktpuffern auf.
Die Subroutine ABIVW definiert ein Gleitfenster, das die Anzahl
von in der "RowLookAhead"-Anweisung definierten
Standardzellenreihen enthält.
In jeder Taktregion bestimmt die Subroutine ABIVW für jede Reihe,
an der ein Puffer hinzugefügt
werden kann, d. h. keine in einer C4Row-Anweisung spezifizierte
Reihe, eine Anzahl von hinzuzufügenden
Puffern anhand der folgenden Gleichung:
wobei (a) NumBuf die Anzahl
von der aktuellen Reihe hinzuzufügenden
Taktpuffern ist; (b) CurrCap die restliche Kapazität innerhalb
des Fensters für
dieses Signal ist; (c) ClkDrive die optimale Last für den Taktpuffer
ist; (d) Rows left die Anzahl von verbliebenen Reihen ist, für die Taktpuffer
hinzugefügt
werden können;
und (e) "int" die Funktion ist,
die eine echte Anzahl zu der größten ganzen
Zahl kürzt,
die kleiner ist als die echte Anzahl.
-
Bei der vorstehenden Gleichung wird
der Wert 0,5 hinzugefügt,
um sicherzustellen, dass ein Taktpuffer hinzugefügt wird, wenn mehr als die
Hälfte
eines Taktpuffers benötigt
wird. Somit ist bei diesem Verfahren die Anzahl von zugewiesenen
Taktpuffern so groß,
dass die auf jeden Taktpuffer wirkende mittlere Last in der gesamten
integrierten Schaltung im wesentlichen gleich (d. h. ungefähr die optimale
Last) ist. Durch Verwendung einer großen Anzahl von identisch dimensionierten
Taktpuffern wird bei der vorliegenden Erfindung ein Taktversatz
aufgrund von Vorrichtungs-Fehlausrichtung vermieden.
-
Die Taktpuffer werden horizontal
hinzugefügt.
Die Subroutine ABIVW prüft
dann, ob jeder Taktpuffer korrekt mit der M5-Leitung an dem Ausgangsanschluss
der Dummy-Pufferzelle verbunden ist. Wenn keine Verbindungsleitung
zum Verbinden mit der M5-Leitung vorhanden ist, wird eine neue M4-Leitung
zu Verbindungszwecken hinzugefügt.
Wenn eine M4-Leitung bereits vorhanden ist, jedoch nicht bis zu
einem oder mehreren der hinzugefügten
Taktpuffer verläuft,
wird eine zusätzliche
Länge der
M4-Metallspur in die M4-Verbindung aufgenommen. In beiden Fällen, d.
h. keine Verbindungsleitung oder eine inadäquate Verbindungsleitung, wird
die Gesamtkapazität
für das
Fenster unter Verwendung der zusätzlichen
Kapazität
in der neuen oder verlängerten
M4-Leitung neu berechnet. Die Anzahl von Taktpuffern, die der Reihe
hinzugefügt
werden müssen,
wird dann neu berechnet. Der Vorgang wird wiederholt, bis keine
neue Leitung oder Verlängerung
von dem zuletzt hinzugefügten
Puffer mehr benötigt
wird. Bei dieser Ausführungsform
wird mindestens ein Taktpuffer hinzugefügt, wenn entweder noch kein
Puffer in der aktuellen Taktregion vorhanden ist oder wenn die verbleibende
Kapazität
größer ist
als die optimale Last für
einen Taktpuffer. Die hinzugefügten
Taktpuffer werden dann in eine Netzlisten-Datenstruktur aufgenommen,
und zwar zum Vorhalten von Referenzen hinsichtlich dieser Taktpuffer
zum Ausgeben an die modifizierte Verilog-Datei in einem nachfolgenden
Schritt.
-
Die Subroutine ABIVW ruft dann die
Subroutine AddInputWiresAndVias auf. Die Subroutine AddInputWiresAndVias
erzeugt M4-Spuren zum Verbinden der Eingangsanschlüsse eines
Taktpuffers mit den von den Puffern der Ebene 2 angesteuerten M5-Verbindungen.
Bei dieser Ausführungsform
sind zwei Signalspuren sowohl am oberen als auch am unteren Teil
jeder Reihe vorgesehen, die beiden Sammelleitungen innerhalb dieser
außenliegenden
Spuren angeordnet und zehn Signalspuren zwischen den Sammelleitungen
vorgesehen. In M4-Reihen (d. h. Reihen, bei denen in dem Lageplanungs-Schritt
Metallspuren zum Verbinden von Puffern der Ebene 2 zugeordnet worden
sind) verlaufen die breiten M4-Verbindungen jedoch zwischen den
Sammelleitungen, so dass nur eine Spur zwischen den Sammelleitungen
unmittelbar unter der oberen Sammelleitung zur Verfügung steht.
Typischerweise weist die Subroutine AddInputWiresAndVias die mittlere
Spur zwischen den Leitungen dem ersten Taktsignal zu und weist dann
die Spuren über
und unter der mittleren Spur anderen Taktsignalen zu, und zwar alternierend
zwischen den Spuren über
und unter der mittleren Spur in einer Ordnung zunehmender Distanz
zu der mittleren Spur. In M4-Reihen werden die Taktsignale jedoch
in den beiden Spuren unter der unteren Sammelleitung geführt (die
Spuren über
der oberen und unmittelbar unter der oberen Sammelleitung sind für die Ausgangsleitung
der Taktpuffer der Ebene 3 reserviert). Die Subroutine AddInputWiresAndVias
platziert dann einen Durchkontakte zum Anschließen der M5-Verbindung an die
hinzugefügte M4-Leitung.
Da die Durchkontakte zwischen M4 und M5 jeweils breiter sind als
eine M4-Spur mit Mindestbreite, sehen bei dieser Ausführungsform
die Konzeptionsvorschriften zum Zwecke der Minimierung des Abstands zwischen
den Spuren vor, dass ein Durchkontakt in Abhängigkeit von der Spur, auf
der er sich befindet, nur die zugewiesene der beiden benachbarten
Spuren übergreift.
Beispielsweise übergreifen
die Durchkontakte auf der mittleren Spur und der zweiten Spur über der
mittleren Spur nur die dazwischenliegende Spur. Bei diesem Konzept
kann eine maximale Dichte von Spuren erreicht werden. Die Subroutine
AddIputWiresAndVias ruft ferner die Subroutine ProcessWires auf,
um die hinzugefügte
M4-Leitung mit einer zuvor hinzugefügten überlappenden M4-Leitung derselben
Spur zu vereinigen, wie z. B. eine M4-Leitung mit einem benachbarten Taktpuffer.
Die hinzugefügte
und verarbeitete Leitung wird dann in eine Leitungs-Datenstruktur
aufgenommen, die in einem nachfolgenden Schritt zur Ausgabe an die
Addwire-Datei verwendet wird. Das Fenster wird dann um eine Reihe
nach vorn bewegt, bis die gesamte Taktregion abgefragt worden ist.
Summarische Statistiken und Fehlerbedingungen, wenn z. B. mehr Taktpuffer
benötigt
werden als tatsächlich
Platz zur Verfügung
steht, werden für
jede Taktregion gemeldet. Die Subroutine ProcessPlaceElems wird
dann aufgerufen, um die durch die Place-Anweisung den SpBoxes hinzugefügten Taktpuffer
in die Netzlisten-Datenstruktur aufzunehmen.
-
Bei Schritt
212 weist das
ClockRoute2-Programm dann durch Aufrufen der Subroutine ProcessL2Buffers
Taktpuffer der zweiten Ebene und Taktsignale zu und führt diese.
Die Subroutine ProcessL2Buffers summiert für jede L2Box und ein einen
Puffer der Ebene drei ansteuerndes Taktsignal die Gesamtkapazität innerhalb
der diesem Taktsignal zugeordneten L2Box und platziert das Ergebnis
in ein Array L3Cap. Das Array L3Cap wird durch ein Ausgangstaktsignal
eines Taktpuffers der Ebene 2 angezeigt. Jedem Eintrag des Arrays
L3Cap (d. h. für
jedes Taktsignal) wird dann ein zusätzlicher Lastwert hinzugefügt, der
in einer "WireLoad"-Anweisung für dieses
Taktsignal spezifiziert ist. Die Anzahl von für dieses Taktsignal in dieser Taktregion
erforderlichen Taktpuffern wird dann durch Anwendung der folgenden
Gleichung errechnet:
wobei (a) L3NumBuf die Anzahl
von in der L2Box hinzuzufügenden
Taktpuffern ist; (b) L3Cap [Signal] die Gesamtkapazität für dieses
Taktsignal in dieser L2Box ist; und (c) die optimale Last die optimale
Last für
den Taktpuffer der Ebene 2 ist.
-
Die von ProcessL2Buffers hinzugefügten Puffer
werden dann zum nachfolgenden Ausgeben an die modifizierte Verilog-Datei
in die Netzlisten-Datenstruktur aufgenommen. Die Subroutine ProcessL2Buffer
ruft dann die Subroutine PlaceL2Wire auf, um M5-Leitungen zum Anschließen der
Eingangs- und Ausgangsanschlüsse
der hinzugefügten
Taktpuffer an die in dem Lageplanungs-Schritt bereitgestellten M4-Verbindungen zu
platzieren. Diese Leitungen werden von der Subroutine ProcessL2Wire
vereinigt, welche der oben beschriebenen Subroutine ProcessWire
im wesentlichen gleich ist. Die Durchkontakte zwischen den M4- und M5-Spuren
werden von der Subroutine AddL2Via hinzugefügt.
-
Das ClockRoute2-Programm ruft dann
in Schritt 213 die Subroutine Add OutputWiresAndVias auf,
um M4-Leitungen zum Anschließen
des Ausgangsanschlusses des Taktpuffers und der getakteten Elemente
an die M5-Verbindungen bereitzustellen. Die Operationen der Subroutine
AddOutputWiresAndVias ist derjenigen der oben beschriebenen Subroutine
AddInputWiresAndVias im wesentlichen gleich. Die Subroutine AddOutputWiresAndVias
ruft ebenfalls die Subroutine ProcessWire auf, um die neu hinzugefügten Leitungen
zu vereinigen. Diese Leitungen werden dann in die Leitungs-Datenstruktur
aufgenommen, um AddWire-Anweisungen für das Führungs-Tool in dem nachfolgenden
Führungs-Schritt
zu erzeugen.
-
Schließlich ruft in Schritt 214 das
ClockRoute2-Programm die Subroutinen WriteDef, WriteWire und WriteVerilog
auf, um die modifizierte "def"-Datei, die AddWire-Datei
bzw. die modifizierte Verilog-Datei zu erstellen.
-
Die vorstehende detaillierte Beschreibung
dient zur Erläuterung
der spezifischen Ausführungsformen der
vorliegenden Endung und darf nicht als Ein schränkung angesehen werden. Zahlreiche
Variationen und Modifikationen sind innerhalb des Umfangs der vorliegenden
Erfindung möglich.
Die vorliegende Erfindung wird durch die beiliegenden Ansprüche definiert.