DE102020130212A1 - Verfahren zum deterministischen Clustering und Packing für Random-Logik auf programmierbaren integrierten Schaltungen - Google Patents

Verfahren zum deterministischen Clustering und Packing für Random-Logik auf programmierbaren integrierten Schaltungen Download PDF

Info

Publication number
DE102020130212A1
DE102020130212A1 DE102020130212.6A DE102020130212A DE102020130212A1 DE 102020130212 A1 DE102020130212 A1 DE 102020130212A1 DE 102020130212 A DE102020130212 A DE 102020130212A DE 102020130212 A1 DE102020130212 A1 DE 102020130212A1
Authority
DE
Germany
Prior art keywords
logic
solution
design
placement
location
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102020130212.6A
Other languages
English (en)
Inventor
Gregg William Baeckler
Martin Langhammer
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102020130212A1 publication Critical patent/DE102020130212A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/392Floor-planning or layout, e.g. partitioning or placement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • G06F30/343Logical level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • G06F30/347Physical level, e.g. placement or routing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/394Routing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/31Design entry, e.g. editors specifically adapted for circuit design

Abstract

Verfahren und Vorrichtungen zum Erhöhen der Random-Logik-Nutzung auf einer programmierbaren Einrichtung werden bereitgestellt. Obwohl sie nicht vollständig homogen ist, weist die programmierbare Einrichtung viele Komponenten auf, die mehrmals in einem Array wiederholt werden. Um Verbesserung der Wiederholbarkeit und des Packings zu unterstützen, können computerunterstützte Entwurfswerkzeuge zum Kompilieren eines Schaltungsentwurfs für die programmierbare Einrichtung zuerst eine Synthesezellen-Verbindungsliste mit stabiler Benennung sperren, Positionslösungsdateien (Dateien mit gewünschter Clustering-Granularität zum Stabilisieren der Performanz und Reduzieren von Kompilierungszeiten) für ausgewählte interessierende Bereiche auf der programmierbaren Einrichtung erstellen und einen endgültigen Entwurf nur mit den besten Lösungen zusammenstellen, von denen einige von einer Position zu einer anderen importiert werden können. Einen Entwurf auf diese Weise zu kompilieren, kann helfen, die Random-Logik-Nutzung über 85 % hinaus zu verbessern, während die Performanz der Schaltung um 20 % oder mehr verbessert wird.

Description

  • Hintergrund
  • Diese Erfindung bezieht sich im Allgemeinen auf integrierte Schaltungen und insbesondere auf Wege zum Verbessern der Konstruktion und der Geschwindigkeit programmierbarer integrierter Schaltungen.
  • Programmierbare integrierte Schaltungen, wie zum Beispiel programmierbare Logikeinrichtungen (Programmable Logic Devices, PLDs), enthalten einen konfigurierbaren Logikschaltkreis, der Lookup-Tabellen (LUTs) und Logik auf Addiererbasis aufweist, die dazu entworfen sind, einem Anwender zu gestatten, den Schaltkreis an die besonderen Bedürfnisse des Anwenders anzupassen. Diese konfigurierbare Logik, die Logikgatter, Multiplexer oder sogar Zustandsmaschinen implementieren kann, wird manchmal als „Random-Logik“ bezeichnet.
  • Neben der Random-Logik können PLDs auch Arithmetiklogik enthalten, wie zum Beispiel Addierer, Multiplizierer und Skalarproduktschaltungen. Es sind Verfahren entwickelt worden, um die Nutzung der Arithmetiklogik auf einer PLD von typischerweise 70 % auf nahe 99 % zu erhöhen. Solche Verfahren sind allerdings nicht auf Random-Logik anwendbar. Als ein Ergebnis ist die Nutzung der Einrichtung für Random-Logik typischerweise bei ungefähr 85 % ausgeschöpft. Jedes zusätzliche „Packing“ von Random-Logik über diese Grenze hinaus würde die Performanz der Einrichtung verringern, die ebenfalls von einem Kompilieren zum nächsten variiert, auch wenn nur eine geringe Änderung an der Konstruktion vorliegt. Mit anderen Worten: Die Geschwindigkeit ist nicht deterministisch, und es ist viel nutzlose Chip-Fläche vorhanden.
  • In diesem Kontext entstehen die hier beschriebenen Ausführungsformen.
  • Figurenliste
    • Die 1 ist eine grafische Darstellung einer veranschaulichenden programmierbaren integrierten Schaltung gemäß einer Ausführungsform.
    • Die 2 ist eine grafische Darstellung eines veranschaulichenden programmierbaren Logikblocks gemäß einer Ausführungsform.
    • Die 3 ist eine grafische Darstellung, die zeigt, wie eine programmierbare integrierte Schaltung mehrere Soft-Prozessoren gemäß einer Ausführungsform enthalten kann.
    • Die 4 ist eine grafische Darstellung eines veranschaulichenden Schaltungsentwurfssystems, das verwendet werden kann, um integrierte Schaltungen zu entwerfen, gemäß einer Ausführungsform.
    • Die 5 ist eine grafische Darstellung von veranschaulichenden computerunterstützten Entwurfs (Computer-Aided Design, CAD)-Werkzeugen, die in einem Schaltungsentwurfssystem verwendet werden können, gemäß einer Ausführungsform.
    • Die 6 ist ein Flussdiagramm veranschaulichender Schritte zum Sperren von Zellnamen in einer Syntheseverbindungsliste gemäß einer Ausführungsform.
    • Die 7 ist ein Flussdiagramm veranschaulichender Schritte zum Ermitteln von Positionslösungs (LOCSOL)-Dateien zur Verwendung beim Erstellen von vollständigen Entwurfsnebenbedingungen gemäß einer Ausführungsform.
    • Die 8 ist eine grafische Darstellung einer veranschaulichenden Positionslösungsdatei für einen Soft-Prozessorkern gemäß einer Ausführungsform.
    • Die 9 ist ein Flussdiagramm veranschaulichender Schritte zum Erstellen eines wiederholten Arrays des gleichen Schaltungsblocks durch Zusammenstellen eines Mosaiks aus besten Lösungen aus vorherigen Probeläufen gemäß einer Ausführungsform.
    • Die 10A ist eine grafische Darstellung, die zeigt, wie eine Zellposition horizontal gespiegelt werden kann, gemäß einer Ausführungsform.
    • Die 10B ist eine grafische Darstellung, die zeigt, wie eine Zellposition vertikal gespiegelt werden kann, gemäß einer Ausführungsform.
    • Die 11 ist ein Flussdiagramm veranschaulichender Schritte zum Generieren einer Syntheseverbindungsliste, die auf dem LAB-Level gesperrt ist, gemäß einer Ausführungsform.
  • Ausführliche Beschreibung
  • Die vorliegenden Ausführungsformen beziehen sich auf ein Verfahren zum Erreichen von deterministischem Clustering und Packing von Random-Logik-Schaltkreisen auf einer programmierbaren integrierten Schaltung, wie zum Beispiel einer programmierbaren Logikeinrichtung (PLD) oder einem Field Programmable Gate Array (FPGA). Es werden Verfahren beschrieben, die die Nutzung der Random-Logik von 85 % auf mehr als 90 % oder mehr als 95 % erhöhen können, während die Gesamtperformanz der Einrichtung um 20 % oder mehr verstärkt wird. Fachleute werden anerkennen, dass die vorliegenden beispielhaften Ausführungsformen ohne einige oder alle dieser spezifischen Details umgesetzt werden können. In anderen Beispielen sind allgemein bekannte Operationen nicht ausführlich beschrieben worden, um die vorliegende Erfindung nicht unnötig unverständlich zu machen.
  • In Anbetracht des Vorgenannten: Die 1 ist eine grafische Darstellung einer programmierbaren integrierten Schaltung 10, die Arithmetiklogik und Random-Logik enthält. Wie in der 1 gezeigt wird, kann die programmierbare Logikeinrichtung 10 ein zweidimensionales Array aus Funktionsblöcken enthalten, zu denen Logik-Array-Blöcke (LABs) 11 und andere Funktionsblöcke zählen, wie zum Beispiel Direktzugriffsspeicher (Random Access Memory, RAM)-Blöcke 13 und spezialisierte Verarbeitungsblöcke, wie zum Beispiel Digitalsignal-Verarbeitungs (Digital Signal Processing, DSP)-Blöcke 12, die teilweise oder vollständig festverdrahtet sind, um eine oder mehrere spezifische Aufgaben durchzuführen, wie zum Beispiel mathematische/arithmetische Operationen.
  • Funktionsblöcke, wie zum Beispiel die LABs 11, können kleinere programmierbare Bereiche (z. B. Logikelemente, konfigurierbare Logikblöcke oder adaptive Logikmodule) enthalten, die Eingangssignale empfangen und kundenspezifische Funktionen auf den Eingangssignalen durchführen, um Ausgangssignale zu produzieren. Die Einrichtung 10 kann des Weiteren programmierbare Routing-Strukturen enthalten, die verwendet werden, um die LABs 11 mit den RAM-Blöcken 13 und den DSP-Blöcken 12 zu verbinden. Die Kombination der programmierbaren Logik und der Routing-Strukturen wird manchmal als „weiche“ Logik bezeichnet, wohingegen die DSP-Blöcke manchmal als „harte“ Logik bezeichnet werden. Der Typ der harten Logik auf der Einrichtung 10 ist nicht auf DSP-Blöcke beschränkt und kann andere Typen harter Logik enthalten. Addierer/Subtrahierer, Multiplizierer, Skalarprodukt-Berechnungsschaltungen und andere Arithmetikschaltungen, die als Teil eines DSP-Blocks 12 gebildet sein können oder nicht, können manchmal zusammengenommen als „Arithmetiklogik“ bezeichnet werden.
  • Die programmierbare Logikeinrichtung 10 kann programmierbare Speicherelemente zum Konfigurieren der weichen Logik enthalten. Speicherelemente können mit Konfigurationsdaten (auch Programmierdaten genannt) unter Verwendung der Eingangs-/Ausgangs-Elemente (Input/Output Elements, IOEs) 16 geladen werden. Sobald sie geladen sind, stellen die Speicherelemente entsprechende statische Steuersignale bereit, die die Operation eines oder mehrerer LABs 11, der programmierbaren Routing-Strukturen und optional der DSPs 12 oder der RAMs 13 steuern. In einem typischen Szenario werden die Ausgänge der geladenen Speicherelemente an die Gates von Metalloxid-Halbleiter-Transistoren (z. B. Durchgangstransistoren) angelegt, um gewisse Transistoren ein- oder auszuschalten und dadurch die Logik im Funktionsblock einschließlich der Routing-Pfade zu konfigurieren. Zu programmierbaren Logikschaltungselementen, die auf diese Weise gesteuert werden können, zählen Teile von Multiplexern (z. B. Multiplexer, die zum Bilden von Routing-Pfaden in Verbindungsschaltungen verwendet werden), Lookup-Tabellen, Logik-Arrays, AND-, OR-, NAND und NOR-Logikgatter, Durchgangsgatter usw. Die Logikgatter und Multiplexer, die Teil der weichen Logik sind, konfigurierbare Zustandsmaschinen oder alle allgemeinen Logikkomponenten, die keinen einzelnen dedizierter Zweck auf der Einrichtung 10 aufweisen, können zusammengenommen als „Random-Logik“ bezeichnet werden.
  • Die Speicherelemente können irgendwelche geeigneten flüchtigen und/oder nichtflüchtigen Speicherstrukturen aufweisen, wie zum Beispiel Direktzugriffspeicher (RAM)-Zellen, Fuses, Antifuses, programmierbare Nur-Lese-Speicher-Speicherzellen, maskenprogrammierte und laserprogrammierte Strukturen, mechanische Speichereinrichtungen (z. B. einschließlich örtlich festgelegter mechanischer Resonatoren), mechanisch betätigtes RAM (Mechanical Operated RAM, MORAM), programmierbare Metallisierungszellen (Programmable Metallization Cells, PMCs), Conductive-Bridging RAM (CBRAM), resistive Speicherelemente, Kombinationen dieser Strukturen usw. Weil die Speicherelemente während der Programmierung mit Konfigurationsdaten geladen werden, werden die Speicherelemente manchmal als Konfigurationsspeicher, Konfigurations-RAM (Configuration RAM, CRAM), Konfigurationsspeicherelemente oder programmierbare Speicherelemente bezeichnet.
  • Zusätzlich kann die programmierbare Logikeinrichtung 10 Eingangs-/Ausgangs-Elemente (IOEs) 16 verwenden, um Signale aus der Einrichtung 10 wegzuschicken und Signale aus anderen Einrichtungen zu empfangen. Die Eingangs-/Ausgangs-Elemente 16 können parallele Eingangs-/Ausgangs-Schaltkreise, serielle Transceiver-Schaltkreise, Differentialempfänger und -senderschaltkreise oder andere Schaltkreise enthalten, die verwendet werden, um eine integrierte Schaltung mit einer anderen integrierten Schaltung zu verbinden. Wie gezeigt wird, können die Eingangs-/Ausgangs-Elemente 16 um den Randbereich des Chips positioniert werden. Falls gewünscht, kann die programmierbare Logikeinrichtung Eingangs-/Ausgangs-Elemente 16 aufweisen, die in anderer Weise angeordnet sind.
  • Die Routing-Strukturen (manchmal als programmierbarer Verbindungsschaltkreis bezeichnet) auf der PLD 10 können in der Form von vertikalen Routing-Kanälen 14 (d. h. Verbindungen, die auf einer vertikalen Achse der PLD 10 gebildet sind) und horizontalen Routing-Kanälen 15 (d. h. Verbindungen, die auf einer horizontalen Achse der PLD 10 gebildet sind) bereitgestellt werden, wobei jeder Routing-Kanal wenigstens eine Bahn enthält, um wenigstens eine Ader zu routen. Falls gewünscht, können die Routing-Adern kürzer als die Gesamtlänge des Routing-Kanals sein. Eine Ader der Länge L kann sich über L Funktionsblöcke erstrecken. Zum Beispiel kann sich eine Länge von vier Adern über vier Funktionsblöcke erstrecken. Die Länge von vier Adern in einem horizontalen Routing-Kanal kann als „H4“ Adern bezeichnet werden, wohingegen die Länge von vier Adern in einem vertikalen Routing-Kanal als „V4“ Adern bezeichnet werden kann.
  • Des Weiteren versteht es sich, dass die Ausführungsformen in jeder integrierten Schaltung implementiert werden können. Falls gewünscht, können die Funktionsblöcke solch einer integrierten Schaltung in mehreren Leveln oder Schichten angeordnet werden, in denen mehrere Funktionsblöcke verbunden sind, um noch größere Blöcke zu bilden. Andere Einrichtungsanordnungen können Funktionsblöcke verwenden, die nicht in Zeilen und Spalten angeordnet sind.
  • Ein veranschaulichender programmierbarer Logikbereich 11, der eine Gruppe mehrerer kleinerer Logikbereiche 34 enthält, wird in der 2 gezeigt. Der programmierbare Logikbereich 11, der manchmal als ein Logik-Array-Block (LAB) bezeichnet wird, kann den verknüpften Eingangsauswahlschaltkreis 36 und den Ausgangsauswahl- und Treiberschaltkreis 38 aufweisen. Der Eingangsauswahlschaltkreis 36 und der Ausgangsauswahl- und Treiberschaltkreis 38 können als Teil der Routing-Pfade 14 und 15 oder als Teil der Eingangs-Ausgangs-Schaltungen, wie zum Beispiel der Eingangs-Ausgangs-Schaltungen 12 der 1, gebildet sein.
  • Der Eingangsauswahlschaltkreis 36 kann Eingangssignale über einen ersten Satz von horizontalen Verbindungen 15-1 und einem ersten Satz von vertikalen Verbindungen 14-1 empfangen. Zum Beispiel können die Verbindungen 15-1 dem programmierbaren Logikblock 11 Eingangssignale von anderen programmierbaren Logikblöcken 11 in der gleichen Zeile oder von den Eingangs-/Ausgangs-Pins 16 bereitstellen, wohingegen die Verbindungen 14-1 dem programmierbaren Logikblock 11 Eingangssignale aus anderen Logikblöcken 11 in der gleichen Spalte oder aus den Pins 16 bereitstellen können. Der Eingangsauswahlschaltkreis 36 kann (z. B. durch Programmieren von CRAM-Bits, die mit dem Eingangsauswahlschaltkreis 36 verknüpft sind) dazu konfiguriert werden, eines oder mehrere der Eingangssignale zum Bereitstellen für den programmierbaren Logikblock 11 auszuwählen.
  • Wie in der 2 gezeigt wird, kann der LAB 11 kleinere Bereiche programmierbarer Logik 34 enthalten. Die kleineren programmierbaren Logikbereiche 34 in jedem programmierbaren Logikbereich 11 werden manchmal als „adaptive Logikmodule“ (Adaptive Logic Modules, ALMs), „Logikelemente“ oder „Logikzellen“ bezeichnet. Die Logikzellen 34 können die Eingangssignale empfangen, die vom Eingangsauswahlschaltkreis 36 ausgewählt werden, und können kundenspezifische Funktionen auf den Eingangssignalen durchführen, um Ausgangssignale zu produzieren. Die von jeder Logikzelle 34 empfangenen Eingangssignale können sich mit Eingangssignalbereichen überlappen, die von anderen Logikzellen 34 empfangen werden (z. B. können einige der Eingangssignale, die von einer ersten Logikzelle 34 empfangen werden, auch von einer zweiten Logikzelle 34 empfangen werden). Innerhalb eines Logikblocks 11 kann es irgendeine geeignete Anzahl an Logikzellen 34 geben. Im Allgemeinen kann jede Logikzelle oder jedes ALM 34 ein natives Element auf der Einrichtung 10 sein, die eine Gruppe von Lookup-Tabellen (LUT)-Schaltungen und verknüpften Registern enthält, die zusammengenommen dazu konfiguriert werden können, Logikgatter oder sogar Arithmetikschaltungen zu implementieren.
  • Die Ausgangssignale können dem Ausgangsauswahl- und Treiberschaltkreis 38 über Ausgangspfade 40 bereitgestellt werden. Der Ausgangsauswahl- und Treiberschaltkreis 38 kann Ausgangssignale über die Pfade 40 empfangen und dazu konfiguriert werden, die Ausgangssignale einem zweiten Satz von horizontalen Verbindungen 15-2 und einem zweiten Satz von vertikalen Verbindungen 14-2 bereitzustellen.
  • Falls gewünscht, kann der Ausgangsauswahlschaltkreis 38 dazu konfiguriert werden, eine oder mehrere Verbindungen 15-2 oder 14-2 zu trennen (z. B. indem kein Ausgangssignal bereitgestellt wird oder indem ein hochohmiger Ausgang bereitgestellt wird). Falls gewünscht, kann der Ausgangsauswahlschaltkreis 38 dazu konfiguriert werden, mehreren Verbindungen ein gegebenes Ausgangssignal bereitzustellen. Es kann zum Beispiel erwünscht sein, ein Ausgangssignal von einer gegebenen Logikzelle 34 zu zwei unterschiedlichen Bereichen auf der integrierten Schaltung 10 zu routen. In diesem Szenario kann der Ausgangsauswahl- und Treiberschaltkreis 38 das Ausgangssignal zwei unterschiedlichen Verbindungen unterschiedlicher Länge bereitstellen.
  • In einigen Anordnungen kann der Eingangsauswahlschaltkreis 36 LAB-Eingangsmultiplexer (LAB Input Multiplexers, LIMs) enthalten, die verwendet werden können, um Signale aus einem horizontalen Kanal, einem vertikalen Kanal und lokalen Ausgängen aus einer oder mehreren Logikzellen 34 auszuwählen und einen Satz von LAB-Leitungen zu treiben. Der Eingangsauswahlschaltkreis 36 kann auch Logikelement-Eingangsmultiplexer (Logic Element Input Multiplexers, LEIMs) enthalten, die verwendet werden können, um Signale aus irgendeinem Satz von LAB-Leitungen auszuwählen und die ausgewählten Signale zu den Logikzellen 34 zu treiben. Der Ausgangsauswahlschaltkreis 38 kann Treibereingangsmultiplexer (Driver Input Multiplexers, DIMs) enthalten, die verwendet werden können, um Signale aus einem horizontalen Kanal, einem vertikalen Kanal und lokalen Ausgängen aus einem oder mehreren Logikelementen auszuwählen und Adern, die von diesem Logikblock 11 ausgehen, anzusteuern und zu anderen Logikblöcken 11 zu routen.
  • Die 3 ist eine grafische Darstellung, die zeigt, wie die programmierbare integrierte Schaltung 10 (z. B. ein Field Programmable Gate Array oder FPGA) mehrere Soft-Prozessoren 300 gemäß einer Ausführungsform enthalten kann. Jeder Soft-Prozessor 300 (manchmal als ein Soft-Kern-Mikroprozessor oder ein Soft-Prozessorkern bezeichnet) kann ein programmierbarer/rekonfigurierbarer Mikroprozessorkern sein, der unter Verwendung von Logiksynthese im Ganzen implementiert werden kann. Ein Beispiel für den Soft-Prozessor 300 kann die Nios®-Familie von Soft-Prozessoren sein, die von der Intel Corporation entwickelt werden.
  • Wie in der 3 gezeigt wird, kann jeder Soft-Prozessor 300 mehrere LABs 11 und einen oder mehrere verknüpfte RAM-Blöcke 13' enthalten. Der RAM-Block 13' kann ein Einzel- oder Mehr-Port-Synchron-Direktzugriffsspeicher (RAM)-Block sein, der zum Speichern von Prozessor-Code, Implementieren von Lookup-Schemata oder Implementieren von Anwendungen mit großem Speicher verwendet werden kann. Das Beispiel der 3, in dem das FPGA 10 vier Soft-Prozessoren 300 enthält und bei dem jeder Soft-Prozessor 300 2 LABs 11 und einen RAM-Block 13' enthält, ist lediglich veranschaulichend. Im Allgemeinen kann die Einrichtung 10 irgendeine geeignete Anzahl von Soft-Prozessoren 300 enthalten (z. B. mehrere Zehn, Hunderte oder sogar Tausende von Soft-Prozessoren), und jeder Soft-Prozessor 300 kann wenigstens zwei LABs, wenigstens vier LABs, wenigstens acht LABs, mehr als 10 LABs und irgendeine geeignete Anzahl von verknüpften RAM-Blöcken enthalten, von denen jeder die Kapazität aufweist, Tausende oder Millionen von Datenbits zu speichern.
  • Die programmierbare integrierte Schaltungseinrichtung 10 kann unter Verwendung eines Schaltungsentwurfssystems entworfen werden. Ein veranschaulichendes Schaltungsentwurfssystem 400 wird in der 4 gezeigt. Das Schaltungsentwurfssystem 400 kann auf einer integrierten Schaltungsentwurfsvorrichtung implementiert sein. Zum Beispiel kann das System 400 auf einem oder mehreren Prozessoren verwendet werden, wie zum Beispiel Personal Computers, Workstations usw. Der/die Prozessor(en) können unter Verwendung eines Netzwerks (z. B. eines lokalen oder Weitverkehrsnetzwerks) verknüpft sein. Der Speicher in diesen Computern oder externer Speicher und Speichereinrichtungen, wie zum Beispiel interne und/oder externe Festplatten oder nichtflüchtige computerlesbare Speichermedien können verwendet werden, um Anweisungen und Daten zu speichern.
  • Software-basierte Komponenten, wie zum Beispiel computerunterstützte Entwurfswerkzeuge 420 und Datenbanken 430, befinden sich auf dem System 400. Während des Betriebs läuft ausführbare Software, wie zum Beispiel die Software der computerunterstützten Entwurfswerkzeuge 420, auf dem/den Prozessor(en) des Systems 400. Die Datenbanken 430 werden verwendet, um Daten zum Betrieb des Systems 400 zu speichern. Die Software kann manchmal als Software-Code, Daten, Programmanweisungen, Anweisungen, Script oder Code bezeichnet werden. Zu den nichtflüchtigen computerlesbaren Speichermedien können Computer-Speicher-Chips, nichtflüchtiger Speicher, wie zum Beispiel nichtflüchtiger Direktzugriffsspeicher (Non-Volatile Random-Access Memory, NVRAM), eine oder mehrere Festplatten (z. B. magnetische Festplatten oder Solid-State-Drives), eines oder mehrere auswechselbare Flash-Laufwerke oder andere auswechselbare Medien, Compact Discs (CDs), Digital Versatile Discs (DVDs), Blu-Ray Discs (BDs), andere optische Medien und Floppy-Disketten, Bänder oder irgendwelche anderen geeigneten Speichereinrichtung(en) zählen. Auf den nichtflüchtigen computerlesbaren Speichermedien gespeicherte Software kann auf dem System 400 ausgeführt werden. Wenn die Software des Systems 400 installiert ist, weist der Speicher des Systems 400 Anweisungen und Daten auf, die bewirken, dass die Rechenvorrichtung im System 400 verschiedene Verfahren (Prozesse) ausführt. Die Rechenvorrichtung ist, wenn sie diese Prozesse durchführt, dazu konfiguriert, die Funktionen des Schaltungsentwurfssystems 400 zu implementieren.
  • Die computerunterstützten Entwurfs (CAD)-Werkzeuge 420, von denen manchmal einige oder alle zusammengenommen als ein CAD-Werkzeug, ein Schaltungsentwurfswerkzeug oder ein elektronisches Entwurfsautomatisierungs (Electronic Design Automation, EDA)-Werkzeug bezeichnet werden, können von einem einzigen Anbieter oder von mehreren Anbietern bereitgestellt werden. Die Werkzeuge 420 können als eines oder mehrere Werkzeugpakete (z. B. ein Compiler-Paket zum Durchführen von Aufgaben, die mit dem Implementieren eines Schaltungsentwurfs in einer programmierbaren Logikeinrichtung verknüpft sind) und/oder als eine oder mehrere separate Software-Komponenten (Werkzeuge) bereitgestellt werden. Zu den Datenbank(en) 430 können eine oder mehrere Datenbanken zählen, auf die nur von einem speziellen Werkzeug oder Werkzeugen zugegriffen wird, und zu ihnen können eine oder mehrere gemeinsam genutzte Datenbanken zählen. Auf die gemeinsam genutzten Datenbanken kann von mehreren Werkzeugen zugegriffen werden. Zum Beispiel kann ein erstes Werkzeug Daten für ein zweites Werkzeug in einer gemeinsam genutzten Datenbank speichern. Das zweite Werkzeug kann auf die gemeinsam genutzte Datenbank zugreifen, um die vom ersten Werkzeug gespeicherten Daten abzurufen. Dies gestattet einem Werkzeug, Informationen an ein anderes Werkzeug weiterzugeben. Werkzeuge können, falls gewünscht, auch Informationen zwischen einander weitergeben, ohne Informationen in einer gemeinsam genutzten Datenbank zu speichern.
  • Veranschaulichende computerunterstützte Entwurfswerkzeuge 520, die in einem Schaltungsentwurfssystem, wie zum Beispiel dem Schaltungsentwurfssystem 400 der 4, verwendet werden können, werden in der 5 gezeigt. Der Entwurfsprozess kann mit der Formulierung von funktionalen Spezifikationen des integrierten Schaltungsentwurfs beginnen (z. B. einer Funktions- oder Verhaltensbeschreibung des integrierten Schaltungsentwurfs). Ein Schaltungsentwickler kann die funktionale Operation eines gewünschten Schaltungsentwurfs unter Verwendung der Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 spezifizieren. Die Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 können Werkzeuge, wie zum Beispiel ein Entwurfs- und Nebenbedingungs-Eingabehilfsmittel 566 und einen Entwurfs-Editor 568, enthalten. Die Entwurfs- und Nebenbedingungs-Eingabehilfsmittel, wie zum Beispiel das Hilfsmittel 566, können verwendet werden, um einen Schaltungsentwickler dabei zu unterstützen, einen gewünschten Entwurf aus einer Bibliothek vorhandener Schaltungsentwürfe zu positionieren, und kann für den Schaltungsentwickler Computerunterstützung zum Eingeben (Spezifizieren) des gewünschten Schaltungsentwurfs bereitstellen.
  • Als ein Beispiel: Das Entwurfs- und Nebenbedingungs-Eingabehilfsmittel 566 kann verwendet werden, um Optionsbildschirme für einen Anwender darzustellen. Der Anwender kann auf Optionen auf dem Bildschirm klicken, um auszuwählen, ob die Schaltung, die entworfen wird, gewisse Merkmale aufweisen sollte. Der Entwurfs-Editor 568 kann verwendet werden, um einen Entwurf einzugeben (z. B. durch Eingeben von Codezeilen in Hardware-Beschreibungssprache), kann verwendet werden, um einen Entwurf, der aus einer Bibliothek ermittelt worden ist, zu editieren (z. B. unter Verwendung eines Entwurfs- und Nebenbedingungs-Eingabehilfsmittels), oder kann einen Anwender beim Auswählen und Editieren von geeigneten vorgepackten Code/Entwürfen unterstützen.
  • Die Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 können verwendet werden, um einem Schaltungsentwickler zu gestatten, einen gewünschten Schaltungsentwurf unter Verwendung irgendeines geeigneten Formats bereitzustellen. Zum Beispiel können die Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 Werkzeuge enthalten, die dem Schaltungsentwickler gestatten, einen Schaltungsentwurf unter Verwendung von Wahrheitstabellen einzugeben. Wahrheitstabellen können unter Verwendung von Textdateien oder Zeitdiagrammen spezifiziert werden und können aus einer Bibliothek importiert werden. Schaltungs-Entwurfs- und Nebenbedingungs-Eingabe über Wahrheitstabellen kann für einen Abschnitt einer großen Schaltung oder für eine ganze Schaltung verwendet werden.
  • Als ein anderes Beispiel können die Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 ein Schemaerfassungswerkzeug enthalten. Ein Schemaerfassungswerkzeug kann gestatten, dass der Schaltungsentwickler integrierte Schaltungsentwürfe anhand von Bestandteilen, wie zum Beispiel Logikgattern und Gruppen von Logikgattern, visuell konstruiert. Bibliotheken mit bereits vorhandenen integrierten Schaltungsentwürfen können verwendet werden, um zu gestatten, dass ein gewünschter Abschnitt eines Entwurfs mit den Schemaerfassungswerkzeugen importiert wird.
  • Falls gewünscht, können die Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 gestatten, dass der Schaltungsentwickler dem Schaltungsentwurfssystem 400 einen Schaltungsentwurf unter Verwendung einer Hardware-Beschreibungssprache bereitstellt, wie zum Beispiel der Verilog-Hardware-Beschreibungssprache (Verilog HDL), der Very High Speed Integrated Circuit Hardware Description Language (VHDL), der SystemVerilog oder einer Schaltungsbeschreibungssprache auf höherem Level, wie zum Beispiel OpenCL oder Systeme, um einige zu nennen. Der Entwickler des integrierten Schaltungsentwurfs kann den Schaltungsentwurf durch Schreiben von Code in Hardware-Beschreibungssprache mit dem Editor 568 eingeben. Code-Blöcke können aus vom Anwender gepflegten oder kommerziellen Bibliotheken importiert werden, falls gewünscht.
  • Nachdem der Entwurf unter Verwendung der Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 eingegeben worden ist, können die Verhaltenssimulationswerkzeuge 572 verwendet werden, um die funktionale Performanz des Schaltungsentwurfs zu simulieren. Falls die funktionale Performanz des Entwurfs unvollständig oder unrichtig ist, kann der Schaltungsentwickler Änderungen am Schaltungsentwurf unter Verwendung der Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 vornehmen. Die funktionale Operation des neuen Schaltungsentwurfs kann unter Verwendung von Verhaltenssimulationswerkzeugen 572 überprüft werden, bevor die Syntheseoperationen unter Verwendung der Werkzeuge 574 durchgeführt worden sind. Simulationswerkzeuge, wie zum Beispiel die Verhaltenssimulationswerkzeuge 572, können auch auf anderen Stufen im Entwurfsablauf verwendet werden, falls gewünscht (z. B. nach der Logiksynthese). Die Ausgabe der Verhaltenssimulationswerkzeuge 572 kann dem Schaltungsentwickler in irgendeinem geeigneten Format bereitgestellt werden (z. B. Wahrheitstabellen, Zeitdiagramme usw.).
  • Sobald die funktionale Operation des Schaltungsentwurfs als einwandfrei bestimmt worden ist, können die Logiksynthese- und Optimierungswerkzeuge 574 eine Verbindungsliste auf Gatterlevel des Schaltungsentwurfs generieren, zum Beispiel unter Verwendung von Gattern aus einer speziellen Bibliothek, die zu einem angestrebten Prozess gehört, der von einer Foundry unterstützt wird, die zum Produzieren der integrierten Schaltung ausgewählt worden ist. Alternativ können die Logiksynthese- und -optimierungswerkzeuge 574 eine Verbindungsliste auf Gatterlevel des Schaltungsentwurfs unter Verwendung von Gattern einer angestrebten programmierbaren Logikeinrichtung generieren (d. h. in den Logik- und Verbindungsressourcen eines speziellen programmierbaren Logikeinrichtungsprodukts oder einer speziellen programmierbaren Logikeinrichtungsproduktfamilie) .
  • Die Logiksynthese- und Optimierungswerkzeuge 574 können den Entwurf optimieren, indem sie geeignete Auswahl von Hardware treffen, um unterschiedliche Logikfunktionen im Schaltungsentwurf auf Basis der Schaltungsentwurfsdaten und der Nebenbedingungsdaten, die vom Logikentwickler unter Verwendung der Werkzeuge 564 eingegeben worden sind, zu implementieren. Als ein Beispiel: Die Logiksynthese- und -optimierungswerkzeuge 574 können Mehr-Level-Logikoptimierung und Technologie-Mapping auf Basis der Länge eines Kombinationspfads zwischen Registern im Schaltungsentwurf und entsprechenden zeitlichen Nebenbedingungen, die vom Logikentwickler unter Verwendung der Werkzeuge 564 eingegeben worden sind, durchführen.
  • Nach der Logiksynthese und -optimierung unter Verwendung der Werkzeuge 574 kann das Schaltungsentwurfssystem Werkzeuge, wie zum Beispiel Platzierungs-, Routing- und physische Synthese-Werkzeuge 576, verwenden, um physische Entwurfsschritte durchzuführen (Layout-Syntheseoperationen). Die Werkzeuge 576 können verwendet werden, um zu bestimmen, wo jedes Gatter der Verbindungsliste auf Gatterlevel zu platzieren ist, die von den Werkzeugen 574 produziert wird. Falls zum Beispiel zwei Zähler miteinander interagieren, können die Werkzeuge 576 diese Zähler in benachbarten Bereichen positionieren, um Verbindungsverzögerungen zu reduzieren oder zeitliche Anforderungen zu erfüllen, die die maximal zulässige Verbindungsverzögerung spezifizieren. Die Werkzeuge 576 erstellen ordentliche und effiziente Implementierungen der Schaltungsentwürfe für jede angestrebte integrierte Schaltung (z. B. für eine gegebene programmierbare integrierte Schaltung, wie zum Beispiel ein Field Programmable Gate Array (FPGA)).
  • Werkzeuge, wie zum Beispiel die Werkzeuge 574 und 576, können Teil eines Compiler-Pakets sein (z. B. Teil eines Pakets aus Compiler-Werkzeugen, das von einem Anbieter programmierbarer Logikeinrichtungen bereitgestellt wird). In gewissen Ausführungsformen können Werkzeuge, wie zum Beispiel die Werkzeuge 574, 576 und 578, auch Zeitanalysewerkzeuge enthalten, wie zum Beispiel Zeitschätzer. Dies gestattet den Werkzeugen 574 und 576, Anforderungen an die Performanz (z. B. zeitliche Anforderungen) vor der eigentlichen Produktion der integrierten Schaltung zu erfüllen.
  • Nachdem eine Implementierung des gewünschten Schaltungsentwurfs unter Verwendung der Werkzeuge 576 generiert worden ist, kann die Implementierung des Entwurfs unter Verwendung der Analysewerkzeuge 578 analysiert und geprüft werden. Zum Beispiel können die Analysewerkzeuge 578 Zeitanalysewerkzeuge, Leistungsanalysewerkzeuge oder Formalprüfwerkzeuge enthalten, um nur einige zu nennen.
  • Nachdem einwandfreie Optimierungsoperationen unter Verwendung der Werkzeuge 520 und abhängig von der Technologie der angestrebten integrierten Schaltung abgeschlossen worden sind, können die Werkzeuge 520 eine Layout-Beschreibung der integrierten Schaltung auf Maskenlevel oder Konfigurationsdaten zum Programmieren der programmierbaren Logikeinrichtung produzieren.
  • Wie oben im Abschnitt Hintergrund beschrieben worden ist, ist ein verbreitetes Problem beim Entwerfen eines FPGA, dass die meisten Entwürfe nicht in der Lage sind, alle Logikressourcen auf dem FPGA zu nutzen (d. h., es gibt eine Grenze, inwieweit der Entwurf die verfügbaren Logikressourcen „packen“ kann). Zum Beispiel packt Arithmetiklogik typischerweise bis zu 70 % aller verfügbaren Arithmetikressourcen, wohingegen Random-Logik bis zu 85 % aller verfügbaren Ressourcen packen kann. Weil das FPGA auf einer Funktionsbasis im Vergleich zu einer anwendungsspezifischen integrierten Schaltung (Application Specific Integrated Circuit, ASIC) sehr teuer ist, ist diese Ineffizienz teuer für den Anwender. Ein anderes Problem ist, dass der Prozentsatz der tatsächlichen Nutzung bis zu einem viel späteren Zeitpunkt im Entwurfszyklus unbekannt ist, was zu einem Szenario führen kann, in dem zunächst eine Einrichtung gewählt wird, nur um irgendwann einmal festzustellen, dass sie unzureichende Ressourcen aufweist. Außerdem sind die Entwürfe nicht deterministisch. Auch wenn die Gesamtentwurfsgröße von einem Kompilieren zum nächsten annähernd gleich sein kann, kann sich die Geschwindigkeit jedes kompilierten Entwurfs signifikant verändern (z. B. um mehr als 1 %, um mehr als 5 %, um mehr als 10 % usw.), sogar wenn sich nur ein kleiner Abschnitt des Entwurfs ändert.
  • Vor kurzem ist ein Verfahren, das Fraktalsynthese genannt wird, eingeführt worden, das eine Lösung für Arithmetikdatenpfade ermittelt. Dies erfolgt iterativ über mehrere Synthese- und Re-Synthese-Operationen, Clustering und Packing. Obwohl mehrere Wiederholungen benötigt werden, kann jede Wiederholung sehr schnell sein. Fraktalsynthese kann die Arithmetikdichte von 70 % auf bis zu 99 % erhöhen. Die Nutzung bzw. das Packing der Arithmetik auf diese Weise zu erhöhen, kann für rechenintensive Anwendungen, wie zum Beispiel künstliche Intelligenz (Artificial Intelligence, AI)-Netzwerke, sehr wichtig sein. Eine analoge Lösung wird zum Erhöhen des Packings von Random-Logik benötigt, jedoch stellt das Packing von Random-Logik ein ganz anderes technisches Problem mit einem ganz unterschiedlichen Lösungsraum dar. Ein mit dem Clustering und Packing während der Fraktalsynthese verknüpftes Problem stellt dar, dass es schwierig ist, eine globale Lösung zu ermitteln.
  • Gemäß einer Ausführungsform werden Verfahren bereitgestellt, um die Nutzungsdichte der Random-Logik zu erhöhen, während die Performanz der Einrichtung verbessert wird. Die Verfahren setzen voraus, dass das Ermitteln einer globalen Lösung oder Optimierung schwierig (oder unmöglich) ist. Stattdessen identifizieren die Verfahren zuerst eine relativ lokale Lösung und erweitern sie dann auf den Rest der Einrichtung. Ein kleinerer Suchraum bedeutet, dass in einigen Fällen bereits vorhandene Werkzeuge und Algorithmen wirksam eingesetzt werden können, um gute Lösungen zu ermitteln. Auf dem Einrichtungslevel muss der vorhandene Entwurfsablauf nicht modifiziert werden, jedoch können gute lokale Lösungen wiederverwendet oder an andere Positionen auf der Einrichtung importiert werden. Oftmals gibt es in einem Entwurf hierarchische Komponenten, die viele Male wiederholt/repliziert werden. Einfache Replikation einer kleinen festgelegten Fläche funktioniert allerdings nicht immer, weil ein FPGA nicht vollständig homogen ist (d. h. zwischen unterschiedlichen ähnlichen Schaltungsblöcken können zufällige oder unvorhersehbare Diskontinuitäten vorhanden sein).
  • In diesen Verfahren kann Folgendes einbezogen sein: (i) Sperren von Zellbenennung in einer Syntheseverbindungsliste, (ii) Ermitteln von Positionslösungsdateien nur für ausgewählte interessierende Bereiche, (iii) Zusammenfügen eines Entwurfs mit den besten Lösungen durch Importieren an kompatible Positionen, und/oder (iv) optionales Sperren der Positionslösungsdateien auf dem LAB-Level. Die 6 ist ein Flussdiagramm veranschaulichender Schritte zum Sperren aller Zellnamen in einer Syntheseverbindungsliste. Damit anschließende Positions- und Routing-Zuordnungen zuverlässig ihre Ziele ermitteln, müssen Zellnamen (z. B. Namen oder Kennungen für die Logikzellen 34 in der 2) vorhersagbar und eindeutig sein. Durch Sperren von Zellen auf einem gewissen Format kann auch jede Redundanz oder nicht verwendeter Teil der Zelle gesperrt werden. Diese Gesamtredundanz kann auf einem höheren Level behandelt werden, das nicht Gegenstand dieser Offenbarung ist.
  • Wie in der 6 gezeigt wird, kann ein Schaltungsentwickler zuerst eine Entwurfsspezifikation 600 für die CAD-Werkzeuge bereitstellen (z. B. für die CAD-Werkzeuge 420 in der 4 oder die CAD-Werkzeuge 520 in der 5). Die Entwurfsspezifikation 600 kann im Allgemeinen eine Verhaltensbeschreibung sein, die in der Form eines Anwendungs-Codes bereitgestellt wird (z. B. C-Code, C++-Code, SystemC-Code, OpenCL-Code usw.).
    In einigen Szenarien kann die Entwurfsspezifikation in der Form einer Registertransferlevel (Register Transfer Level, RTL)-Beschreibung 604 bereitgestellt werden.
  • Die RTL-Beschreibung kann irgendeine Form der Beschreibung von Schaltungsfunktionen auf dem Registertransferlevel aufweisen. Zum Beispiel kann die RTL-Beschreibung unter Verwendung einer Hardware-Beschreibungssprache bereitgestellt werden, wie zum Beispiel der Verilog-Hardware-Beschreibungssprache (Verilog HDL oder Verilog), der SystemVerilog-Hardware-Beschreibungssprache (SystemVerilog HDL oder SystemVerilog) oder der Very High Speed Integrated Circuit Hardware Description Language
    (VHDL).
  • Im Allgemeinen kann die Verhaltensentwurfsspezifikation 600 zeitlich nicht festgelegten oder teilweise zeitlich nicht festgelegten Funktions-Code enthalten (d. h. der Anwendungs-Code beschreibt kein Hardware-Verhalten je Zyklus), wohingegen die RTL-Beschreibung 604 eine vollständig zeitlich festgelegte Entwurfsbeschreibung Zyklus für Zyklus enthalten kann, die das Verhalten der Schaltung je Zyklus auf dem Registertransferlevel aufführt. Die Entwurfsspezifikation 600 oder die RTL-Beschreibung 604 können ebenfalls Zielkriterien enthalten, wie zum Beispiel den Flächenverbrauch, die Leistungsaufnahme, die Verzögerungsminimierung, die Taktfrequenzoptimierung oder irgendeine Kombination davon. Die Optimierungsnebenbedingungen und Zielkriterien können zusammengenommen als „Nebenbedingungen“ bezeichnet werden. Diese Nebenbedingungen können für einzelne Datenpfade, Abschnitte einzelner Datenpfade, Abschnitte eines Entwurfs oder für den gesamten Entwurf bereitgestellt werden. Zum Beispiel können die Nebenbedingungen mit der Entwurfsspezifikation 600, der RTL-Beschreibung 604 (z. B. als ein Pragma oder als eine Assertion), in einer Nebenbedingungsdatei oder durch Eingabe des Anwenders (z. B. unter Verwendung der Entwurfs- und Nebenbedingungs-Eingabewerkzeuge 564 der 5) bereitgestellt werden, um einige zu nennen.
  • Im Schritt 602 kann Verhaltenssynthese (manchmal auch als algorithmische Synthese bezeichnet) durchgeführt werden, um die Verhaltensbeschreibung 600 in eine RTL-Beschreibung 604 umzuwandeln. Der Schritt 602 kann übersprungen werden, falls die Entwurfsspezifikation bereits in Form einer RTL-Beschreibung bereitgestellt wird.
  • Im Schritt 606 können die Entwurfswerkzeuge zur Standalone-Kompilierung um die gewünschte(n) Komponente(n) eine „Hülle“ oder „Grenze“ ziehen. Als ein Beispiel: Eine Grenze kann um einen Soft-Prozessorkern gezogen werden (siehe z. B. den Soft-Prozessor 300 in der 3). Diese Hülle kann zum Beispiel durch ein Syntheseattribut ausgewählt werden. Die Logiksynthesewerkzeuge (z. B. die Werkzeuge 574 in der 5) können die Komponente herausziehen und automatisch virtuelle Eingangs-Ausgangs (E/A)-Pins um sie herum generieren. Bei Werkzeugen, bei denen virtuelle Pins fehlen, kann stattdessen ein Opfer-Registerring verwendet werden, um den Kern physisch vom E/A zu trennen. Verfahren, bei denen eine Hülle um einen Soft-Prozessor konstruiert wird, werden hier manchmal als ein Beispiel beschrieben. Dies ist allerdings lediglich veranschaulichend. Falls gewünscht, können Hüllen oder Grenzen um irgendeine oder eine Gruppe von Standalone-Logikkomponenten konstruiert werden, wie zum Beispiel um einen LAB, eine Logikzelle oder ein ALM, einen Abschnitt einer Logikzelle, wie zum Beispiel eine oder mehrere LUTs, eines oder mehrere Register, eines oder mehrere Logikgatter oder irgendeine gewünschte Ansammlung von Logikschaltungen.
  • Im Schritt 608 können die Entwurfswerkzeuge Ausgrenzungen aus der Hülle herauslösen. Zum Beispiel können Speicherschaltungen, E/A-Schaltungen, wie zum Beispiel Phasenregelkreise und Serialisierer-/Deserialisierer-Schaltungen, DSP-Blöcke und/oder andere Typen von Nicht-Random-Logik-Schaltungen, die mit der eingehüllten Logikkomponente funktional inkompatibel sind oder die sehr unterschiedliche Simulationskonstrukte aufweisen, aus der Hülle ausgegrenzt werden.
  • Im Schritt 610 können die Logiksynthesewerkzeuge die RTL-Beschreibung mit den Hüllen und Ausgrenzungen empfangen und Logiksynthese durchführen (d. h. einen ersten Schritt des Kompilierungsprozesses), um eine entsprechende Technologiezellen-Verbindungsliste 612 zu produzieren. Die Verbindungsliste 612 spezifiziert den Entwurf hinsichtlich der Logik (ALM)-Zellen, die der native Logikbaustein eines FPGAs sind und synonym mit „Technologiezellen“ sind. Weil die ALM-Logikzellen (z. B. die Zellen 34 der 2) die nativen Elemente zum Implementieren von Logikgattern sind, wird die Technologiezellen-Verbindungsliste 612 manchmal als eine Verbindungsliste auf Gatterlevel bezeichnet.
  • Die Technologiezellen-Verbindungsliste 612 kann zum Zwecke der Aufnahme durch Simulationswerkzeuge an eine Verilog-Ausgabe (Verilog Output, VO)-Simulationsverbindungsliste 614 (als ein Beispiel) oder ein anderes geeignetes Format entladen werden. Die VO-Simulationsverbindungsliste 614 ist eine Zellverbindungsliste im Verilog-Format, jedoch mit einigen Annotationen zum Zellverhalten und Namen, die im Simulatordialekt vorliegen. Die Verbindungsliste 614 benötigt keine weitere Umformung für die Simulation.
  • Die Umformung 616 kann nötig sein, um die Verbindungsliste 614 in ein Format zurückzuwandeln, das zum Wiedereintritt in die Logiksynthese geeignet ist, jetzt allerdings mit stabiler Zellbenennung über die gesamte Verbindungsliste. Die Umformung kann eine Vielzahl von speziellen Zeichen und Parameterausdrücken, die simulationsspezifisch, jedoch ungeeignet zur Rückkehr zur Synthese sind, löschen, entfernen oder vereinfachen. Die Umformung 616 wird eine entsprechende editierbare strukturelle Verilog-Verbindungsliste 618 mit stabiler Zellbenennung produzieren, die für die Synthese geeignet ist. An diesem Punkt werden sich die Zellnamen nicht mehr ändern (d. h. die Zellnamen werden von Synthese zu Synthese konsistent bleiben) und sind jeweils für den Entwickler eindeutig identifizierbar.
  • Sobald die strukturelle Syntheseverbindungsliste 618 mit stabiler Benennung gesperrt worden ist, kann die Verbindungsliste 618 rückannotiert werden, um die Position einer Logikkomponente, das Routing, die Pin-Zuordnung usw. zu sperren. Konventionelle Rückannotation wird auf den gesamten Schaltungsentwurf angewendet, was für die iterative Packing-Methodik nicht zweckdienlich ist. Zusätzlich zur Rückannotation des gesamten Entwurfs werden möglicherweise nur ausgewählte interessierende Bereiche/Flächen, die von den in Verbindung mit der 6 beschriebenen Grenzen oder Hüllen umrissen werden, aus der Verbindungsliste extrahiert, so dass mehrere oder viele parallele Rückannotationslösungen aus der Verbindungsliste herausgezogen werden können. Diese begrenzten Annotationen können in einer Datei gespeichert werden, die hier manchmal als eine „Positionslösungs“ (oder LOCSOL)-Datei bezeichnet wird.
  • Die 7 ist ein Flussdiagramm veranschaulichender Schritte zum Ermitteln von Positionslösungs (LOCSOL)-Dateien zur Verwendung beim Erstellen von vollständigen Entwurfsnebenbedingungen. Im Schritt 702 können die Entwurfswerkzeuge, wie zum Beispiel die Werkzeuge 576 der 5, eine Clustering genannte Prozedur durchführen, die ganze und fraktionierte Logikzellen 34 in LABs zusammenstellt, und dann werden die Werkzeuge 576 die LABs gemäß verschiedenen Kostenfunktionen platzieren und routen (d. h. ein zweiter Schritt des Kompilierungsprozesses), um eine gewünschte endgültige Platzierung zu erstellen. Viele unterschiedliche Keime können verwendet werden, um N entsprechende einwandfreie oder Kandidaten-Platzierungsergebnisse zu erstellen (z. B. Platzierung #1, Platzierung #2, ..., Platzierung #N).
  • Im Schritt 704 können die Entwurfswerkzeuge die Platzierungsdetails und den Zeitbericht für den gesamten Entwurf für jede der N guten Platzierungen zurückannotieren. Im Schritt 706 kann ein separates Such-Hilfsprogramm in den Entwurfswerkzeugen verwendet werden, um die Positions- und Routing-Nebenbedingungen nur für die ausgewählten Zellnamen (die vorher unter Verwendung der in der 6 gezeigten Schritte gesperrt worden sein sollten) in den interessierenden „eingehüllten“ Bereichen zu suchen und zu identifizieren und um diese Zuordnungen in eine entsprechende LOCSOL-Datei zu schreiben. Mit anderen Worten: Eine LOCSOL-Datei kann ein vorheriges Platzierungs- und Routing-Ergebnis für den/die begrenzten interessierenden Abschnitt(e) speichern. Es kann eine LOCSOL-Datei für jeden interessierenden Bereich vorhanden sein (siehe z. B. LOCSOL-Datei #1, LOCSOL-Datei #2, ..., LOCSOL-Datei #M usw.).
  • Im Schritt 708 können die LOCSOL-Dateien in einer Datenbank gespeichert werden (siehe z. B. die Datenbank 430 in der 4), und die Entwurfswerkzeuge können diese LOCSOL-Dateien kontinuierlich überwachen, um Gelegenheiten zur Optimierung zu identifizieren. Wenn zum Beispiel die Entwurfswerkzeuge nach einer Lösung mit besseren Flächeneinsparungen suchen, werden die Werkzeuge prüfen, ob die zuletzt generierte LOCSOL-Datei weniger Cluster als das beste gespeicherte Ergebnis in der Datenbank aufweist.
  • Im Schritt 710 können die Entwurfswerkzeuge die LOCSOL-Dateien aus der Datenbank lesen und sie zusammenfügen, um vollständige Entwurfsnebenbedingungen für das nächste Kompilieren zu erstellen (z. B. für die nächste Logiksynthese und Platzierungs- und Routing-Operationen), unter der Annahme, dass ein Array vieler ähnlicher Blöcke benötigt wird.
  • Die 8 ist eine grafische Darstellung einer veranschaulichenden LOCSOL-Datei 800 für einen Soft-Prozessorkern gemäß einer Ausführungsform. Mit anderen Worten: Der interessierende Bereich wird durch die Grenzen eines Soft-Prozessors umrissen. Wie in der 8 gezeigt wird, listet der Abschnitt 802 eine zeitliche Schlupfgröße auf (d. h. eine Größe der zeitlichen Reserve), der Abschnitt 804 listet Positionsnebenbedingungen auf, und der Abschnitt 806 listet Routing-Nebenbedingungen auf.
  • Zum Beispiel ordnet die erste Positionsnebenbedingung im Abschnitt 804 eine Flipflop (FF)-Schaltung mit dem Namen „nios_0|_ext_addr_r_0“ (siehe Bezeichner 810) an der Position (X = 190, Y = 9) zu (siehe Bezeichner 812). Als ein anderes Beispiel ordnen die zweiten Positionsnebenbedingungen ein anderes FF mit dem Namen „nios_0|_ext_addr_r_1“ an der Position (X = 190,
    Y = 10) zu. Im Gegensatz dazu spezifiziert die erste Routing-Nebenbedingung im Abschnitt 806, wie ein Signal mit dem Namen „nios_0_sched0_storing“ an einem Ausgangs-Port des LAB an der Position (X = 190, Y = 13) auf dem Port C0_7 entsteht, damit dieses Signal an eine Ziel-Technologiezelle mit dem Namen „_sched0_i147“ abgegeben wird, während zusätzlich andere Zellen in diesem Ziel-LAB angesteuert werden. Obwohl dieses Beispiel eine relativ kurze Routing-Verbindung veranschaulicht, kann jeder Routing-Pfad in der programmierbaren Einrichtung unter Verwendung eines solchen Formats beschrieben werden.
  • Das Beispiel der 8, in dem die LOCSOL-Datei 800 mit einem gegebenen Soft-Prozessor verknüpft ist, ist lediglich veranschaulichend und soll nicht den Schutzbereich der vorliegenden Ausführungsformen beschränken. Falls gewünscht, kann eine LOCSOL-Datei auf anderen Granularitätsleveln generiert werden, wie zum Beispiel für einen gegebenen LAB, eine gegebene ALM-Logikzelle, irgendeine geeignete Ansammlung von LABs, irgendeine geeignete Ansammlung von Logikzellen, irgendeine Ansammlung von Soft-Prozessoren oder irgendeine Gruppe von Random-Logikelementen.
  • Die 9 ist ein Flussdiagramm veranschaulichender Schritte zum Erstellen eines wiederholten Arrays des gleichen Schaltungsblocks durch Zusammenstellen eines Mosaiks aus besten Lösungen aus vorherigen Probeläufen gemäß einer Ausführungsform. Im Schritt 900 können die Entwurfswerkzeuge einen Entwurf synthetisieren, um eine strukturelle Verilog-Verbindungsliste mit stabilisierter/vorhersagbarer Zellbenennung zu erstellen (z. B. unter Verwendung der beispielhaften Schritte der 6).
  • Im Schritt 902 können die Platzierungs- und Routing-Werkzeuge N randomisierte Platzierungs- und Routing-Probeläufe für den vollständigen Entwurf durchführen und LOCSOL-Dateien für jedes interessierende Logikschaltungselement (z. B. für einen oder mehrere bezeichnete Soft-Prozessoren auf der programmierbaren integrierten Schaltung) unter Verwendung der beispielhaften Schritte 702 - 708 der 7 extrahieren.
  • Im Schritt 904 können die Entwurfswerkzeuge die wünschenswerteste Lösung oder Subsatz von Lösungen für irgendein gegebenes Logikschaltungselement identifizieren. Im Subschritt 910 können die Entwurfswerkzeuge alle kompatiblen (d. h. vollständig kompatiblen oder teilweise kompatiblen) Lösungen spezifizieren, wenn versucht wird, eine Lösung an eine andere Position zu importieren. Wie oben beschrieben wird, sind die FPGA-Logikstrukturen in etwa regelmäßig, jedoch nicht vollständig homogen. In einigen Fällen ist es möglich, eine gewünschte Lösung an einer Position aufzunehmen und sie an eine andere Position zu importieren. Dies kann einbeziehen, die X-Y-Koordinaten um einen festgelegten Offset zu ändern, die Zellnamen für die neue Instanz zu editieren (z. B. kann nios_0 im Beispiel der 8 zu nios 3 werden) und auch auf Fehler zu prüfen.
  • Es gibt mehrere Möglichkeiten, wenn versucht wird, eine Lösung zu einer anderen Position zu bewegen. Falls die Lösung vollständig kompatibel ist, können die Zellposition und die Routing-Nebenbedingungen mit geeigneten X-Y-Offsets importiert werden. Das Verlagern einer Positionslösung auf eine andere XY-Position kann einbeziehen, den vorher stabilisierten Namen der Positionslösung, die verlagert wird, zu kopieren und umzubenennen. Zum Beispiel kann ein vorher stabilisierter Name eines Soft-Prozessors zu einem neuen stabilisierten Namen editiert/umbenannt werden, wenn er an eine andere Position importiert wird. Falls ein direktes Importieren nicht möglich ist, gibt es Wege, die Zuordnungen anzupassen, so dass die Lösung passen wird. Falls die Lösung zum Beispiel nur teilweise kompatibel ist, können die Zellpositionen importiert werden, jedoch sind die Routing-Nebenbedingungen möglicherweise nicht zur Wiederverwendung geeignet. Ein anderer Typ von teilweiser Kompatibilität liegt vor, wenn nur einige Zellpositionen importiert werden können, andere jedoch nicht. Die 10A veranschaulicht noch einen anderen Typ Kompatibilität, bei dem Zellpositionen mit negierten X-Koordinaten importiert werden können (siehe, wie die Lösung horizontal gespiegelt wird). Die 10B veranschaulicht noch einen anderen Typ Kompatibilität, bei dem Zellpositionen mit negierten Y-Koordinaten importiert werden können (siehe, wie die Lösung vertikal gespiegelt wird). Ein Import ist unmöglich, wenn die Lösung an der neuen Position vollständig inkompatibel ist.
  • Im Allgemeinen kann nur die wünschenswerteste Lösung oder Subsatz von Lösungen für irgendein gegebenes Logikelement beibehalten werden. Somit können die Entwurfswerkzeuge im Subschritt 912 prüfen, um zu erkennen, ob eine Lösung bei einer kompatiblen (d. h. vollständig kompatiblen oder teilweise kompatiblen) Position der besten Lösung an der aktuellen Position überlegen ist. Falls die Lösung an der kompatiblen Position der besten Lösung an der aktuellen Position tatsächlich überlegen ist, wird die bessere Lösung an der kompatiblen Position an die aktuelle Position importiert, um eine Verbesserung der Performanz zu erreichen (Subschritt 914). Dieser Prozess kann helfen, eine Geschwindigkeitssteigerung von 20 % oder mehr bei gewissen rechenintensiven Anwendungen zu erreichen.
  • In gewissen Situationen kann eine spezielle Lösung inkompatibel mit den umgebenden benachbarten Komponenten sein. Zum Beispiel wollen zwei physisch nahe Lösungen möglicherweise die gleichen Routing-Ressourcen verwenden und werden daher miteinander kollidieren. In solchen Szenarien kann eine der Lösungen „freigegeben“ und unter Verwendung anderer Routing-Ressourcen umgeleitet werden.
  • Im Schritt 906 können die Entwurfswerkzeuge dann ein Mosaik oder eine Ansammlung bester Lösungen aus allen vorherigen Platzierungs-/Routing-Läufen zusammenstellen, um neue Positions- und Routing-Nebenbedingungen auf dem obersten Level zu ermitteln, und dann erneut kompilieren, um die „besten“ Ergebnisse zu erhalten. Dies erfolgt, indem nur die wünschenswerteste Lösung für jedes interessierende Schaltungselement unter Verwendung des im Schritt 904 erklärten Prozesses beibehalten wird. Es werde zum Beispiel ein Szenario betrachtet, bei dem ein FPGA 400 Soft-Prozessoren aufweist und die Entwurfswerkzeuge 10 Platzierungs-/Routing-Probeläufe (N = 10) durchführen. Es werde angenommen, dass der Soft-Prozessor #135 inkompatibel mit den übrigen 399 Soft-Prozessoren ist, dass jedoch die Soft-Prozessoren #201 - #400 alle miteinander kompatibel sind. In diesem Szenario werden die Entwurfswerkzeuge eine „beste von 10“-Lösung für den Soft-Prozessor #135 identifizieren, werden jedoch eine „beste von 2000“-Lösung (d. h. 10 * 200) für die Soft-Prozessoren #201 - #400 identifizieren.
  • Gemäß einer anderen geeigneten Ausführungsform, die nicht mit den in Verbindung mit den 6 - 10 beschriebenen Ausführungsformen wechselseitig exklusiv ist, können die Positionslösungs (LOCSOL)-Dateien auf dem LAB-Level gesperrt werden, so dass die LABs nicht von den Werkzeugen aufgeteilt werden können. Das Gruppieren von Logikzellen in LAB-Cluster wird helfen, die LAB-Fläche festzulegen, die Performanz des LAB zu stabilisieren, weil das FPGA voll wird (z. B. im Packing-Bereich von 80 % bis 100 %), und Kompilierungszeiten erheblich zu reduzieren, was auf die Reduzierung des Suchraums zurückzuführen ist.
  • Im Allgemeinen gibt es zwei Weisen, eine Technologiezelle (d. h. eine ALM-Logikzelle) in Verilog auszudrücken. Ein älteres „What You See Is What You Get“ (WYSIWIG)-Zellverbindungslistenformat drückt ein ALM entweder als eine LUT-Ausgabe oder als ein einzelnes Arithmetik-Bit aus, was typischerweise unter Verwendung von einem oder zwei WYSIWYG-Gattern dargestellt wird. Es gibt auch einige amorphe Funktionen, die in der Logikzelle ausgedrückt werden können, die in den abstrakten Hälften nicht auszudrücken sind. WYSIWYG-Zellen können manchmal als logische/abstrakte Instanzen betrachtet werden und werden der Überprüfung und Minimierung unterzogen, falls die logische Bedeutung redundant oder irgendwie überflüssig ist. In dem Szenario, in dem ein ALM nur einen oberen halben Abschnitt verwendet, kann das WYSIWYG-Format zum Beispiel so interpretieren, dass die Zelle eine abstrakte obere oder untere Hälfte mit „No Comment“ auf der benachbarten Hälfte aufweist.
  • Ein relativ neueres Format (manchmal als „Big What You See“ oder BigWYS-Zellverbindungslistenformat bezeichnet) spezifiziert die volle Konnektivität der Logikzelle, einschließlich der beiden logischen Kombinationshälften (oder Bits der Arithmetikkomponenten) und der verknüpften Register, die genauen Details der Eingangsauswahl (z. B. um zu unterscheiden, welche Signale auf welchen physischen Eingangs-Ports eingehen) und/oder sogar die Übertragungskette. Die BigWYS-Zelle kann verwendet werden, um physische Verbindungen auszudrücken, die durch normale Synthese nicht erreicht werden können, deren Semantiken nicht durch die Software hinterfragt oder ausgewertet werden, sondern die vielmehr verwendet werden, um die relative Platzierung von Ziel-Logikzellen zu erzwingen. Im Vergleich zu WYSIWYG-Zellen sind BigWYS-Zellen weniger flexibel/abstrakt, sondern sind relativ detaillierter/konkreter in Bezug auf die Platzierung und das Routing der verschiedenen Komponenten in der Logikzelle. Obwohl beide Formate verwendet und auf einer Zellenbasis vermischt werden können, können BigWYS-Zellen für den Zweck der Reproduktion von Ergebnissen, die von Kompilieren zu Kompilieren vorhersagbarer sind, technisch von Vorteil sein.
  • Die 11 ist ein Flussdiagramm veranschaulichender Schritte zum Generieren einer solchen BigWYS-Syntheseverbindungsliste, die auf dem LAB-Level gesperrt ist, was auf einer Kombination von Synthesetechnologie-Mapping- und Clustering-Operationen beruht. Die Entwurfswerkzeuge können zuerst eine strukturelle Verilog-Verbindungsliste 618 mit stabiler Zellbenennung, die eine WYSIWYG-Zellverbindungsliste ist, und LOCSOL-Dateien, die auf den LAB-Levelgrenzen gesperrt sind, abrufen. Im Schritt 1102 können die Entwurfswerkzeuge die LAB-Positionsinformationen in den LOCSOL-Dateien verwenden, um die strukturelle Verbindungsliste 618 in einem physischen Gitter anzuordnen, um ein physisches Layout-Bild zu generieren.
  • Im Schritt 1104 können die Entwurfswerkzeuge dann die Routing-Nebenbedingungsinformationen in den LOCSOL-Dateien verwenden, um die Logikzelleingänge und -ausgänge zu ändern, damit sie auf korrekten physischen E/A-Pins liegen. Zum Beispiel kann ein logisches AND-Gatter mit 3 Eingängen die Ports A, B und C verwenden, wobei die endgültige physische Implementierung tatsächlich die Ports B, C und D verwendet, anstatt den Port A für eine benachbarte Zelle verfügbar zu machen. In dieser Umformung kann das Neuanordnen der Funktion, die in der Konfigurationsmaske der Logikzellen gespeichert ist, ebenso wie ihrer Konnektivität einbezogen sein.
  • Im Schritt 1106 können irgendwelche benachbarten halben ALM-Zellen und verknüpften Register mit den verwendeten Logikzellen zusammengeführt werden, was weitere Umformung der Maske einbeziehen kann. Im Schritt 1108 können zusätzliche Platzhalterzellen für alle nicht verwendeten Logikzellen im LAB eingefügt werden. Das Einfügen von nicht belegten Platzhalterzellen wird auf diese Weise verhindern, dass irgendeine andere Funktion diese Lücke besetzt/stiehlt, und kann daher helfen, die Wiederholbarkeit des LAB zu verbessern. Mit anderen Worten: Dieses Verfahren priorisiert zwar die Fähigkeit, die Lösung präzise zu wiederholen, beseitigt jedoch alles, was auf dieser Stufe nicht verwendet wird, um sie zu einem monolithischen Modul zu machen, das nicht in der Lage ist, irgendwann einmal eine falsche Bahn einzuschlagen.
  • Im Schritt 1110 können die Entwurfswerkzeuge eine Platzhalter-Übertragungskette erstellen, die die unterschiedlichen Logikzellen mit dem LAB verbindet, oder können die Übertragungskette vervollständigen, falls bereits eine Teilkette vorhanden ist. Jede eingefügte Platzhalterzelle wird Platzhalter-Bits auf die Übertragungskette ausgeben, ohne die Gesamtfunktionalität zu ändern.
  • Das Durchführen dieser Schritte wird eine strukturelle Verilog (optional, BigWYS)-Verbindungsliste 618' ergeben, die auf dem LAB-Level geclustert ist. Falls gewünscht, kann der WYSIWYG-Schaltkreis des LAB frei mit amorpher Logik vermischt werden. Das Platzierungs- und Routing-Verhalten eines Logikabschnitts, der eine oder mehrere LAB-WYSIWYG-Ketten enthält, die auf diese Weise konstruiert sind, kann hinsichtlich Platzierung und Routing äquivalent zu einem vollständigen Addierer-LAB sein. Es ist keine spezielle Behandlung in den Synthese- oder Simulationsabläufen erforderlich. Die einzige Änderung besteht darin, dass jetzt eine gewünschte Clustering-Lösung für den LAB in allen zukünftigen Platzierungs- und Routing-Lösungen erforderlich ist.
  • Obwohl die Verfahren der Operationen in einer spezifischen Reihenfolge beschrieben worden sind, versteht es sich, dass andere Operationen zwischen beschriebenen Operationen durchgeführt werden können, dass beschriebene Operationen angepasst werden können, so dass sie zu etwas anderen Zeitpunkten auftreten, oder dass beschriebene Operationen in einem System verteilt sein können, was das Auftreten der Verarbeitungsoperationen in verschiedenen, mit der Verarbeitung verknüpften Intervallen gestattet, solange die Verarbeitung der überlagerten Operationen in einer gewünschten Weise durchgeführt wird.
  • Die Ausführungsformen sind bisher in Bezug auf integrierte Schaltungen beschrieben worden. Die hier beschriebenen Verfahren und Vorrichtungen können in jede geeignete Schaltung integriert sein. Zum Beispiel können sie in zahlreiche Einrichtungstypen integriert sein, wie zum Beispiel programmierbare Logikeinrichtungen, anwendungsspezifische Standardprodukte (Application Specific Standard Products, ASSPs) und anwendungsspezifische integrierte Schaltungen (ASICs), Mikrocontroller, Mikroprozessoren, zentrale Recheneinheiten (Central Processing Units, CPUs), Grafikverarbeitungseinheiten (Graphics Processing Units, GPUs) usw. Zu Beispielen für programmierbare Logikeinrichtungen zählen programmierbare Array-Logiken (Programmable Arrays Logic, PALs), programmierbare Logik-Arrays (Programmable Logic Arrays, PLAs), Field Programmable Logic Arrays (FPLAs), elektrisch programmierbare Logikeinrichtungen (Electrically Programmable Logic Devices, EPLDs), elektrisch löschbare programmierbare Logikeinrichtungen (Electrically Erasable Programmable Logic Devices, EEPLDs), Logikzellen-Arrays (Logic Cell Arrays, LCAs), Complex Programmable Logic Devices (CPLDs) und Field Programmable Gate Arrays (FPGAs), um einige zu nennen.
  • Die hier in einer oder mehreren Ausführungsformen beschriebene programmierbare Logikeinrichtung kann Teil eines Datenverarbeitungssystems sein, das eine oder mehrere der folgenden Komponenten enthält: einen Prozessor; Speicher; E/A-Schaltkreise; und Peripherieeinrichtungen. Die Datenverarbeitung kann in einer großen Vielzahl von Anwendungen verwendet werden, wie zum Beispiel bei der Computervernetzung, Datenvernetzung, Instrumentierung, Videoverarbeitung, der digitalen Signalverarbeitung oder jeder geeigneten anderen Anwendung, bei der der Vorteil, programmierbare oder reprogrammierbare Logik zu verwenden, gewünscht ist. Die programmierbare Logikeinrichtung kann verwendet werden, um eine Vielzahl von unterschiedlichen Logikfunktionen durchzuführen. Zum Beispiel kann die programmierbare Logikeinrichtung als ein Prozessor oder Controller konfiguriert werden, der zusammen mit einem Systemprozessor arbeitet. Die programmierbare Logikeinrichtung kann auch als ein Arbiter zum Arbitrieren des Zugriffs auf eine gemeinsam genutzte Ressource im Datenverarbeitungssystem verwendet werden. In noch einem anderen Beispiel kann die programmierbare Logikeinrichtung als eine Schnittstelle zwischen einem Prozessor und einer der anderen Komponenten im System konfiguriert werden.
  • Beispiele:
  • Die folgenden Beispiele betreffen weitere Ausführungsformen.
  • Das Beispiel 1 ist ein Verfahren des Bildens einer integrierten Schaltung, das Folgendes umfasst: eine Registertransferlevel (RTL)-Beschreibung zu ermitteln; Hüllen nur um ausgewählte interessierende Logikkomponenten in der RTL-Beschreibung hinzuzufügen; die RTL-Beschreibung zu verwenden, um eine entsprechende Syntheseverbindungsliste zu generieren; Platzierung und Routing auf der Syntheseverbindungsliste durchzuführen, um mehrere Kandidatenplatzierungen zu generieren; Positions- und Routing-Nebenbedingungen des gesamten Entwurfs für jede der mehreren Kandidatenplatzierungen zurückzuannotieren; Positionslösungsdateien durch Suchen und Identifizieren der Positions- und Routing-Nebenbedingungen, die nur mit den ausgewählten Logikkomponenten verknüpft sind, die durch die hinzugefügten Hüllen umrissen sind, zu generieren; und beste Lösungen aus den Positionslösungsdateien zu identifizieren; und die integrierte Schaltung auf Basis der besten Lösungen zu konfigurieren.
  • Das Beispiel 2 ist das Verfahren des Beispiels 1, wobei die Syntheseverbindungsliste optional von Kompilieren zu Kompilieren stabile Zellbenennung aufweist.
  • Das Beispiel 3 ist das Verfahren irgendeines der Beispiele 1 - 2, wobei das Hinzufügen der Hüllen nur um die ausgewählten interessierenden Logikkomponenten optional umfasst, eine Hülle um jeden interessierenden Soft-Prozessor oder um jeden interessierenden Logik-Array-Block in der RTL-Beschreibung zu bilden.
  • Das Beispiel 4 ist das Verfahren irgendeines der Beispiele 1 - 3, wobei das Hinzufügen der Hüllen um nur die ausgewählten interessierenden Logikkomponenten optional umfasst, virtuelle Eingangs-Ausgangs-Pins oder Opfer-Registerringe um wenigstens einige der ausgewählten interessierenden Logikkomponenten zu generieren.
  • Das Beispiel 5 ist das Verfahren irgendeines der Beispiele 1 - 4, das optional des Weiteren umfasst: Nicht-Random-Logik-Komponenten aus den Hüllen auszugrenzen.
  • Das Beispiel 6 ist das Verfahren des Beispiels 5, wobei das Ausgrenzen der Nicht-Random-Logik-Komponenten aus den Hüllen optional umfasst, Speicherschaltungen und Eingangs-Ausgangs-Schaltungen aus den Hüllen auszugrenzen.
  • Das Beispiel 7 ist das Verfahren irgendeines der Beispiele 1 - 6, das optional des Weiteren umfasst: Logiksynthese auf der RTL-Beschreibung durchzuführen, um eine Technologiezellenverbindungsliste zu generieren; und die Technologiezellenverbindungsliste zu verwenden, um eine Simulationsverbindungsliste zu generieren, die zum Durchführen von Simulationen geeignet ist.
  • Das Beispiel 8 ist das Verfahren des Beispiels 7, das optional des Weiteren umfasst: die Simulationsverbindungsliste in die Syntheseverbindungsliste umzuformen.
  • Das Beispiel 9 ist das Verfahren irgendeines der Beispiele 1 - 8, das optional des Weiteren umfasst: die Positionslösungsdateien in einer Datenbank zu speichern, während auf Optimierungsgelegenheiten überwacht wird.
  • Das Beispiel 10 ist das Verfahren des Beispiels 9, das optional des Weiteren umfasst: die Positionslösungsdateien aus der Datenbank zu lesen und nur die besten Lösungen aus den Positionslösungsdateien zusammenzufügen, um vollständige Entwurfsnebenbedingungen für das nächste Kompilieren zu ermitteln.
  • Das Beispiel 11 ist das Verfahren irgendeines der Beispiele 1 - 10, wobei das Identifizieren der besten Lösungen aus den Positionslösungsdateien optional umfasst, kompatible Lösungen zu identifizieren, die an eine andere Position auf der integrierten Schaltung importiert werden können.
  • Das Beispiel 12 ist das Verfahren des Beispiels 11, wobei das Identifizieren der besten Lösungen aus den Positionslösungsdateien des Weiteren optional umfasst, die kompatiblen Lösungen zu vergleichen, die mit den unterschiedlichen Positionen verknüpft sind.
  • Das Beispiel 13 ist das Verfahren des Beispiels 12, das optional des Weiteren umfasst: als Reaktion auf das Bestimmen, dass eine kompatible Lösung an einer anderen Position der Lösung an einer gegebenen Position überlegen ist, die kompatible Lösung von der anderen Position an die gegebene Position zu importieren, um eine Verbesserung der Performanz zu erhalten.
  • Das Beispiel 14 ist ein Verfahren des Implementierens einer integrierten Schaltung, das Folgendes umfasst: Probe-Platzierungs- und Routing-Operationen durchzuführen, um wenigstens eine erste Kandidaten-Platzierungslösung für eine erste Position auf der integrierten Schaltung und eine zweite Kandidaten-Platzierungslösung für eine zweite Position auf der integrierten Schaltung, die sich von der ersten Position unterscheidet, zu ermitteln; zu bestimmen, ob die erste Kandidaten-Platzierungslösung für die erste Position auf der integrierten Schaltung kompatibel mit der zweiten Position auf der integrierten Schaltung ist; als Reaktion auf das Bestimmen, dass die erste Kandidaten-Platzierungslösung mit der zweiten Position kompatibel ist, zu bestimmen, ob die erste Kandidaten-Platzierungslösung der zweiten Kandidaten-Platzierungslösung überlegen ist; und als Reaktion auf das Bestimmen, dass die erste Kandidaten-Platzierungslösung der zweiten Kandidaten-Platzierungslösung überlegen ist, die erste Kandidaten-Platzierungslösung an die zweite Position zu importieren, um eine Verbesserung der Performanz für die integrierte Schaltung zu erhalten.
  • Das Beispiel 15 ist das Verfahren des Beispiels 14, das optional des Weiteren umfasst: vorhersagbare Zellnamen in der ersten und der zweiten Kandidaten-Platzierungslösung aufrechtzuerhalten.
  • Das Beispiel 16 ist das Verfahren des Beispiels 15, wobei das Importieren der ersten Kandidaten-Platzierungslösung an die zweite Position optional umfasst, Platzierungs- und Routing-Nebenbedingungen mit geeigneten Positions-Offsets zu importieren.
  • Das Beispiel 17 ist das Verfahren irgendeines der Beispiele 15 - 16, wobei das Importieren der ersten Kandidaten-Platzierungslösung an die zweite Position optional umfasst, wenigstens zum Teil die vorhersagbaren Zellnamen in der ersten Kandidaten-Platzierungslösung umzubenennen.
  • Das Beispiel 18 ist das Verfahren irgendeines der Beispiele 14 - 17, wobei das Importieren der ersten Kandidaten-Platzierungslösung an die zweite Position optional umfasst, die erste Kandidaten-Platzierungslösung horizontal oder vertikal zu spiegeln.
  • Das Beispiel 19 ist ein Verfahren des Entwurfs einer integrierten Schaltung, das Folgendes umfasst: Platzierung und Routing durchzuführen, um ein Platzierungsergebnis zu generieren; Positions- und Routing-Nebenbedingungen des gesamten Entwurfs für das Platzierungsergebnis zurückzuannotieren; eine Positionslösungsdatei durch Extrahieren nur eines Subsatzes der rückannotierten Positions- und Routing-Nebenbedingungen zu generieren; und die Positionslösungsdatei auf Logikblock-Clustern zu sperren, um die Performanz zu stabilisieren und die Kompilierungszeit zu reduzieren.
  • Das Beispiel 20 ist das Verfahren des Beispiels 19, wobei ein Logikblock optional mehrere Logikzellen umfasst und wobei das Sperren der Positionslösungsdatei auf den Logikblock-Clustern optional umfasst, benachbarte halbe Logikzellen zusammenzuführen.
  • Das Beispiel 21 ist das Verfahren irgendeines der Beispiele 19 - 20, wobei ein Logikblock optional mehrere Logikzellen umfasst und wobei das Sperren der Positionslösungsdatei auf den Logikblock-Clustern optional umfasst, Platzhalter-Logikzellen einzufügen.
  • Das Beispiel 22 ist das Verfahren irgendeines der Beispiele 19 - 21, wobei ein Logikblock optional mehrere Logikzellen umfasst und wobei das Sperren der Positionslösungsdatei auf den Logikblock-Clustern optional umfasst, eine Platzhalter-Übertragungskette einzufügen, um die mehreren Logikzellen zu verbinden.
  • Das vorher Genannte ist lediglich veranschaulichend für die Prinzipien dieser Erfindung, und verschiedene Modifikationen können von Fachleuten vorgenommen werden. Die vorher genannten Ausführungsformen können einzeln oder in irgendeiner Kombination implementiert werden.

Claims (25)

  1. Verfahren zum Bilden einer integrierten Schaltung, das Folgendes umfasst: Ermitteln einer Registertransferlevel (RTL)-Beschreibung; Hinzufügen von Hüllen nur um ausgewählte interessierende Logikkomponenten in der RTL-Beschreibung; Verwenden der RTL-Beschreibung, um eine entsprechende Syntheseverbindungsliste zu generieren; Durchführen von Platzieren und Routing auf der Syntheseverbindungsliste, um mehrere Kandidatenplatzierungen zu generieren; Rückannotieren der Positions- und Routing-Nebenbedingungen des gesamten Entwurfs für jede der mehreren Kandidatenplatzierungen; Generieren von Positionslösungsdateien durch Suchen und Identifizieren der Positions- und Routing-Nebenbedingungen, die nur mit den ausgewählten Logikkomponenten verknüpft sind, die durch die hinzugefügten Hüllen umrissen sind; Identifizieren von besten Lösungen aus den Positionslösungsdateien; und Konfigurieren der integrierten Schaltung auf Basis der besten Lösungen.
  2. Verfahren nach Anspruch 1, wobei die Syntheseverbindungsliste von Kompilieren zu Kompilieren stabile Zellbenennung aufweist.
  3. Verfahren nach einem der Ansprüche 1-2, wobei das Hinzufügen der Hüllen nur um die ausgewählten interessierenden Logikkomponenten das Bilden einer Hülle um jeden interessierenden Soft-Prozessor oder um jeden interessierenden Logik-Array-Block in der RTL-Beschreibung umfasst.
  4. Verfahren nach einem der Ansprüche 1-3, wobei das Hinzufügen der Hüllen um nur die ausgewählten interessierenden Logikkomponenten das Generieren von virtuellen Eingangs-Ausgangs-Pins oder Opfer-Registerringen um wenigstens einige der ausgewählten interessierenden Logikkomponenten umfasst.
  5. Verfahren nach einem der Ansprüche 1-4, das des Weiteren Folgendes umfasst: Ausgrenzen von Nicht-Random-Logik-Komponenten aus den Hüllen.
  6. Verfahren nach Anspruch 5, wobei das Ausgrenzen der Nicht-Random-Logik-Komponenten aus den Hüllen das Ausgrenzen von Speicherschaltungen und Eingangs-Ausgangs-Schaltungen aus den Hüllen umfasst.
  7. Verfahren nach einem der Ansprüche 1-6, das des Weiteren Folgendes umfasst: Durchführen von Logiksynthese auf der RTL-Beschreibung, um eine Technologiezellenverbindungsliste zu generieren; und Verwenden der Technologiezellenverbindungsliste, um eine Simulationsverbindungsliste zu generieren, die zum Durchführen von Simulationen geeignet ist.
  8. Verfahren nach Anspruch 7, das des Weiteren Folgendes umfasst: Umformen der Simulationsverbindungsliste in die Syntheseverbindungsliste.
  9. Verfahren nach einem der Ansprüche 1-8, das des Weiteren Folgendes umfasst: Speichern der Positionslösungsdateien in einer Datenbank, während auf Optimierungsgelegenheiten überwacht wird.
  10. Verfahren nach Anspruch 9, das des Weiteren Folgendes umfasst: Lesen der Positionslösungsdateien aus der Datenbank und Zusammenfügen nur der besten Lösungen aus den Positionslösungsdateien, um vollständige Entwurfsnebenbedingungen für das nächste Kompilieren zu ermitteln.
  11. Verfahren nach einem der Ansprüche 1-10, wobei das Identifizieren der besten Lösungen aus den Positionslösungsdateien Identifizieren von kompatiblen Lösungen umfasst, die an eine andere Position der integrierten Schaltung importiert werden können.
  12. Verfahren nach Anspruch 11, wobei das Identifizieren der besten Lösungen aus den Positionslösungsdateien des Weiteren Vergleichen der kompatiblen Lösungen umfasst, die mit den unterschiedlichen Positionen verknüpft sind.
  13. Verfahren nach Anspruch 12, das des Weiteren Folgendes umfasst: als Reaktion auf das Bestimmen, dass eine kompatible Lösung an einer anderen Position der Lösung an einer gegebenen Position überlegen ist, Importieren der kompatiblen Lösung von der anderen Position an die gegebene Position, um eine Verbesserung der Performanz zu erhalten.
  14. Verfahren des Implementierens einer integrierten Schaltung, das Folgendes umfasst: Durchführen von Probe-Platzierungs- und Routing-Operationen, um wenigstens eine erste Kandidaten-Platzierungslösung für eine erste Position auf der integrierten Schaltung und eine zweite Kandidaten-Platzierungslösung für eine zweite Position auf der integrierten Schaltung, die sich von der ersten Position unterscheidet, zu ermitteln; Bestimmen, ob die erste Kandidaten-Platzierungslösung für die erste Position auf der integrierten Schaltung kompatibel mit der zweiten Position auf der integrierten Schaltung ist; als Reaktion auf das Bestimmen, dass die erste Kandidaten-Platzierungslösung mit der zweiten Position kompatibel ist, Bestimmen, ob die erste Kandidaten-Platzierungslösung der zweiten Kandidaten-Platzierungslösung überlegen ist; und als Reaktion auf das Bestimmen, dass die erste Kandidaten-Platzierungslösung der zweiten Kandidaten-Platzierungslösung überlegen ist, die erste Kandidaten-Platzierungslösung an die zweite Position zu importieren, um eine Verbesserung der Performanz für die integrierte Schaltung zu erhalten.
  15. Verfahren nach Anspruch 14, das des Weiteren Folgendes umfasst: Aufrechterhalten von vorhersagbaren Zellnamen in der ersten und der zweiten Kandidaten-Platzierungslösung.
  16. Verfahren nach Anspruch 15, wobei das Importieren der ersten Kandidaten-Platzierungslösung an die zweite Position Importieren von Platzierungs- und Routing-Nebenbedingungen mit geeigneten Positions-Offsets umfasst.
  17. Verfahren nach einem der Ansprüche 15-16, wobei das Importieren der ersten Kandidaten-Platzierungslösung an die zweite Position das wenigstens teilweise Umbenennen der vorhersagbaren Zellnamen in der ersten Kandidaten-Platzierungslösung umfasst.
  18. Verfahren nach einem der Ansprüche 14-17, wobei das Importieren der ersten Kandidaten-Platzierungslösung an die zweite Position horizontales oder vertikales Spiegeln der ersten Kandidaten-Platzierungslösung umfasst.
  19. Verfahren zum Entwurf einer integrierten Schaltung, das Folgendes umfasst: Durchführen von Platzieren und Routing, um ein Platzierungsergebnis zu generieren; Rückannotieren von Positions- und Routing-Nebenbedingungen des gesamten Entwurfs für das Platzierungs ergebnis; Generieren einer Positionslösungsdatei durch Extrahieren nur eines Subsatzes der rückannotierten Positions- und Routing-Nebenbedingungen; und Sperren der Positionslösungsdatei auf Logikblock-Clustern, um die Performanz zu stabilisieren und die Kompilierungszeit zu reduzieren.
  20. Verfahren nach Anspruch 19, wobei ein Logikblock mehrere Logikzellen umfasst und wobei das Sperren der Positionslösungsdatei auf den Logikblock-Clustern das Zusammenführen benachbarter halber Logikzellen umfasst.
  21. Verfahren nach Anspruch 19, wobei ein Logikblock mehrere Logikzellen umfasst und wobei das Sperren der Positionslösungsdatei auf den Logikblock-Clustern das Einfügen von Platzhalter-Logikzellen umfasst.
  22. Verfahren nach Anspruch 19, wobei ein Logikblock mehrere Logikzellen umfasst und wobei das Sperren der Positionslösungsdatei auf den Logikblock-Clustern das Einfügen einer Platzhalter-Übertragungskette umfasst, um die mehreren Logikzellen zu verbinden.
  23. Nichtflüchtiges computerlesbares Speichermedium, das Anweisungen für Folgendes umfasst: Ermitteln einer Registertransferlevel (RTL)-Beschreibung; Hinzufügen von Hüllen nur um ausgewählte interessierende Logikkomponenten in der RTL-Beschreibung; Verwenden der RTL-Beschreibung, um eine entsprechende Syntheseverbindungsliste zu generieren; Durchführen von Platzieren und Routing auf der Syntheseverbindungsliste, um mehrere Kandidatenplatzierungen zu generieren; Annotieren der Positions- und Routing-Nebenbedingungen des gesamten Entwurfs für jede der mehreren Kandidatenplatzierungen; und Generieren von Positionslösungsdateien durch Suchen und Identifizieren der Positions- und Routing-Nebenbedingungen, die nur mit den ausgewählten Logikkomponenten verknüpft sind, die durch die hinzugefügten Hüllen umrissen sind.
  24. Nichtflüchtiges computerlesbares Speichermedium nach Anspruch 23, das des Weiteren Anweisungen zum Identifizieren von besten Lösungen aus den Positionslösungsdateien umfasst.
  25. Nichtflüchtiges computerlesbares Speichermedium nach Anspruch 24, das des Weiteren Anweisungen zum Konfigurieren einer programmierbaren integrierten Schaltung unter Verwendung der besten Lösungen umfasst.
DE102020130212.6A 2019-12-19 2020-11-16 Verfahren zum deterministischen Clustering und Packing für Random-Logik auf programmierbaren integrierten Schaltungen Pending DE102020130212A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/720,346 2019-12-19
US16/720,346 US11301611B2 (en) 2019-12-19 2019-12-19 Deterministic clustering and packing method for random logic on programmable integrated circuits

Publications (1)

Publication Number Publication Date
DE102020130212A1 true DE102020130212A1 (de) 2021-06-24

Family

ID=70280724

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020130212.6A Pending DE102020130212A1 (de) 2019-12-19 2020-11-16 Verfahren zum deterministischen Clustering und Packing für Random-Logik auf programmierbaren integrierten Schaltungen

Country Status (2)

Country Link
US (1) US11301611B2 (de)
DE (1) DE102020130212A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114239459B (zh) * 2022-02-23 2022-04-29 苏州浪潮智能科技有限公司 Fpga原型设计文件的处理方法、装置、设备及介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5995730A (en) * 1997-05-23 1999-11-30 Lsi Logic Corporation Method for generating format-independent electronic circuit representations
US6263483B1 (en) 1998-02-20 2001-07-17 Lsi Logic Corporation Method of accessing the generic netlist created by synopsys design compilier
US6292931B1 (en) 1998-02-20 2001-09-18 Lsi Logic Corporation RTL analysis tool
US6295636B1 (en) 1998-02-20 2001-09-25 Lsi Logic Corporation RTL analysis for improved logic synthesis
US6957403B2 (en) 2001-03-30 2005-10-18 Syntest Technologies, Inc. Computer-aided design system to automate scan synthesis at register-transfer level
US6665851B1 (en) * 2001-12-04 2003-12-16 Synopsys, Inc. Quick placement of electronic circuits using orthogonal one dimensional placements
US7082584B2 (en) 2003-04-30 2006-07-25 Lsi Logic Corporation Automated analysis of RTL code containing ASIC vendor rules
US7380223B2 (en) 2005-10-24 2008-05-27 Lsi Corporation Method and system for converting netlist of integrated circuit between libraries
CA2648896A1 (en) 2006-04-19 2007-11-01 Queen's University At Kingston A hybrid nanotube/cmos dynamically reconfigurable architecture and an integrated design optimization method and system therefor
US8448122B1 (en) * 2009-04-01 2013-05-21 Xilinx, Inc. Implementing sub-circuits with predictable behavior within a circuit design
US10318686B2 (en) * 2016-10-11 2019-06-11 Intel Corporation Methods for reducing delay on integrated circuits by identifying candidate placement locations in a leveled graph

Also Published As

Publication number Publication date
US20200125780A1 (en) 2020-04-23
US11301611B2 (en) 2022-04-12

Similar Documents

Publication Publication Date Title
DE68929518T2 (de) Verfahren zur Verwendung einer elektronisch wiederkonfigurierbaren Gatterfeld-Logik und dadurch hergestelltes Gerät
US6339836B1 (en) Automated design partitioning
DE60128014T2 (de) Intelligenter Prüfadapter
US5526276A (en) Select set-based technology mapping method and apparatus
US5448493A (en) Structure and method for manually controlling automatic configuration in an integrated circuit logic block array
US10387603B2 (en) Incremental register retiming of an integrated circuit design
DE102020115968A1 (de) Systeme und verfahren für multi-bit-speicher mit eingebetteter logik
US9811621B2 (en) Implementing integrated circuit designs using depopulation and repopulation operations
US8769450B1 (en) Synthesis flow for formal verification
DE102013103806B4 (de) Verschieben von Zellengrenzen beim Layout eines Halbleiterbauteils
US8037448B2 (en) Language and templates for use in the design of semiconductor products
US6108494A (en) Optimizing runtime communication processing between simulators
US20220414304A1 (en) Apparatus and method for mapping foundational components during design porting from one process technology to another process technology
US8924913B1 (en) Schematic display of connectivity in an integrated circuit design
US9529947B1 (en) Register retiming and verification of an integrated circuit design
DE102020130212A1 (de) Verfahren zum deterministischen Clustering und Packing für Random-Logik auf programmierbaren integrierten Schaltungen
DE102018102292A1 (de) Verfahren und Vorrichtung zur automatischen Implementierung eines kompensierenden Rücksetzens für neugetaktete Schaltungen
US10169518B1 (en) Methods for delaying register reset for retimed circuits
US8504953B2 (en) Schematic generation visualization aid for netlists comprising analog circuits
CN102385648B (zh) 一种芯片设计中减少拥塞的方法和系统
DE112013005831T5 (de) Netzlistenabstraktion
US20180349544A1 (en) Methods for performing register retiming with hybrid initial states
US9626218B1 (en) Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory
KR20230109649A (ko) 폴리-비트 셀들
DE102022121035A1 (de) Vollständige die- und- partielle die-tape-outs aus einem gemeinsamen design