-
Die vorliegende Erfindung betrifft ein Verfahren zum Generieren einer FPGA-Implementierung basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung, umfassend die Schritte Synthese einer Netzliste aus dem FPGA-Design, und Erzeugen der FPGA-Implementierung aus der Netzliste, wobei das Verfahren ein Suchen einer ähnlichen FPGA-Implementierung umfasst, und der Schritt des Erzeugens der FPGA-Implementierung aus der Netzliste unter Verwendung der ähnlichen FPGA-Implementierung erfolgt.
-
Weiterhin betrifft die Erfindung ein Verfahren zum Generieren eines Bitstroms basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung, umfassend die obigen Schritte zum Generieren einer FPGA-Implementierung basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung, und ein Erzeugen des Bitstroms aus der generierten FPGA-Implementierung.
-
Derartige Verfahren werden verwendet, um Code für FPGAs (Field Programmable Gate Array) zu erzeugen. FPGAs sind integrierte Schaltkreise, in welchen eine logische Schaltung geladen werden kann. Eine Programmierung umfasst dabei im Gegensatz zur klassischen Programmierung in einer bekannten Programmiersprache weniger eine Vorgabe zeitlicher Abläufe, sondern eine Definition einer gewünschten Schaltungsstruktur.
-
Ein FPGA-Design zur Definition der gewünschten Schaltungsstruktur wird dabei typischerweise als graphisches FPGA-Modell erzeugt, das in eine Hardwarebeschreibungssprache, beispielsweise VHDL, übersetzt wird. Prinzipiell kann das FPGA-Design auch unmittelbar in der Hardwarebeschreibungssprache erzeugt werden.
-
Das FPGA-Design wird dann in einem Syntheseschritt von einer entsprechenden Software zunächst in eine Netzliste übersetzt, welche vorgibt, wie einzelne logische Elemente im FPGA verschaltet werden sollen. Man spricht daher auch von der Konfiguration eines FPGA. Die Netzliste mit den logischen Elementen und deren Verschaltung wird zur weiteren Verwendung gespeichert.
-
Daran schließt sich ein Schritt zur Erzeugung der FPGA-Implementierung an. Dieser Schritt wird üblicherweise als „Place and Route“ bezeichnet. Dabei werden die in der Netzliste gespeicherten logischen Elemente für das FPGA platziert (Place) und miteinander gemäß der Netzliste verbunden (Route). Das Ergebnis ist die FPGA-Implementierung.
-
Im Anschluss wird aus der FPGA-Implementierung ein Bitstrom erzeugt, der auf das FPGA übertragen wird, um in diesem eine gewünschte Funktion zu implementieren.
-
Die vorgenannten Schritte werden oft als „Build“ zusammengefasst.
-
Dabei gibt es heutzutage einfach zu handhabende Tools, die beispielsweise eine abstrahierende FPGA Entwicklungsumgebung für Kunden bereitstellen, so dass die Kunden auch ohne detaillierte Kenntnisse über FPGAs und Toolflows eigene Hardware entwickeln können. Die Kunden können dadurch FPGA-Designs erstellen, implementieren und auf einer entsprechenden FPGA-Hardware, dem FPGA, betreiben. Regelmäßige Änderungen am FPGA-Modell mit einem anschließendem Re-Build sind natürlicher Bestandteil eines solchen Entwicklungsprozesses, z.B. beim Rapid Control Prototyping.
-
Ein Problem dabei besteht in oft sehr langen Build-Zeiten, die auch für ein Re-Build eines FPGAs bei einer auch nur geringfügigen Änderung des FPGA-Modells erforderlich sein können. Die Build-Zeiten liegen dabei oft im Bereich von Stunden. Da die FPGAs immer komplexer werden und mehr Ressourcen in der Form von Registern, Logik, DSP Blöcken, oder Speicher bereitstellen, erhöhen sich die Build-Zeiten immer weiter. Dies kann nur teilweise durch Verbesserungen von Algorithmen und schnellere Rechner zur Durchführung des Builds kompensiert werden. Ein besonders zeitaufwändiger Schritt ist dabei meistens das Platzieren und Verbinden.
-
In aktuellen FPGA-Tools gibt es zwei Ansätze, um die Build-Zeiten zu reduzieren. Beide Ansätze basieren darauf, dass unveränderte Regionen/Komponenten einer bereits erfolgreich erzeugten FPGA-Implementierung wiederverwendet werden. Bei dem ersten Ansatz wird jeder Komponente eine (rechteckige) Region im FPGA zugeordnet. Wenn eine Komponente verändert wird, wird die Region mit dieser Komponente neu implementiert, während der Rest der FPGA-Implementierung unverändert bleibt und wiederverwendet werden kann. Bei dem zweiten Ansatz, der hier als inkrementeller Build bezeichnet wird, sind keine vordefinierten Regionen erforderlich. Es wird zur Implementierung eine bereits implementierte FPGA-Implementierung als Referenz angegeben. Wenn die Übereinstimmung groß ist, können viele Platzierungen und Verdrahtungen automatisch übernommen werden, und die Zeit für das Erzeugen der FPGA-Implementierung wird reduziert.
-
Dabei kann es vorteilhaft sein, wenn eine FPGA-Implementierung bereits von Anfang an so erzeugt wird, dass einzelne Module bzw. Teilimplementierungen wiederverwendet werden können. Dieser Ansatz verfolgt eine automatische Modularisierung des FPGA-Modells. Auf dieser Modulbasis kann ein Floorplanning erfolgen, d.h. eine Unterteilung in Regionen. Wenn für die einzelnen Module noch Reserven vorgesehen sind, können Änderungen des FPGA-Modells auf die einzelnen Module beschränkt bleiben.
-
Außerdem sind Verfahren für ein Re-Planning bekannt. Wenn ein Kunde Änderungen an seinem FPGA-Modell vorgenommen hat, wird das letzte Buildergebnis verwendet. Darauf basierend werden veränderte Module einzeln gebaut und anschließend im Gesamtbuild ausgetauscht. Für den Fall, dass mehrere Module betroffen sind, können Buildzeiten dadurch reduziert werden, wenn der Build für die geänderten Module auf unterschiedlichen Rechnern erfolgt. Es wird also ein paralleler Build der geänderten Module durchgeführt. Dabei kann eine Versionierung von verschiedenen Versionen von Modulen vorgesehen sein, um eine Wiederverwendung zu erleichtern.
-
Auch wenn diese Verfahren die Build-zeiten bereits reduzieren können, besteht noch weiteres Verbesserungspotential. So ergeben sich beispielsweise bei einer feingranularen Modularisierung ein großer Verschnitt und ein erhöhtes Risiko von Timing Verletzungen, da nicht über Modulgrenzen hinweg optimiert werden kann und für die Module jeweils ein großzügiger Bereich mit entsprechenden Reserven vorgesehen werden muss. Außerdem lässt sich das Verfahren nur mit großen Implementierungsaufwänden in der Produktentwicklung umsetzen.
-
Um eine Ähnlichkeit zweier Designs festzustellen, wird von aktuellen Synthesetools eine Referenz-Netzliste mit der neu zu platzierenden und zu routenden Netzliste verglichen. Der Vergleich basiert dabei ausschließlich auf einem Namensvergleich von Netzlistenpfadnamen. Dies ist problematisch, da es bei abstrahierenden High-Level FPGA Design Tools wie Xilinx Vivado System Generator, Xilinx Vivado HLS, Xilinx Vivado SDSoC üblich ist, eine schnelle Umbenennung und Umorganisation identischer FPGA Komponenten vorzunehmen, z.B. in Subsysteme. Dadurch ergeben sich automatisch neue Netzlistenpfade auch für eigentlich identische Komponenten. Die Umbenennung kann von den aktuellen Synthesetools nicht erkannt werden.
-
Ausgehend von dem oben genannten Stand der Technik liegt der Erfindung somit die Aufgabe zugrunde, ein Verfahren zum Generieren einer FPGA-Implementierung basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung sowie ein Verfahren zum Generieren eines Bitstroms basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung der oben genannten Art anzugeben, die ein einfaches und effizientes Erzeugen einer FFGA Implementierung ermöglichen, insbesondere unter Verwendung von bereits existierenden, ähnlichen FPGA-Implementierungen.
-
Die Lösung der Aufgabe erfolgt erfindungsgemäß durch die Merkmale der unabhängigen Ansprüche. Vorteilhafte Ausgestaltungen der Erfindung sind in den Unteransprüchen angegeben.
-
Erfindungsgemäß ist somit ein Verfahren zum Generieren einer FPGA-Implementierung basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung vorgesehen, umfassend die Schritte Synthese einer Netzliste aus dem FPGA-Design, und Erzeugen der FPGA-Implementierung aus der Netzliste, wobei das Verfahren ein Suchen einer ähnlichen FPGA-Implementierung umfasst, der Schritt des Erzeugens der FPGA-Implementierung aus der Netzliste unter Verwendung der ähnlichen FPGA-Implementierung erfolgt, das Verfahren einen Schritt zum Erzeugen einer Graphen-basierten Repräsentation basierend auf dem FPGA-Design umfasst, und der Schritt des Suchens einer ähnlichen FPGA-Implementierung ein Vergleichen der Graphen-basierten Repräsentation des FPGA-Designs mit einer Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung umfasst.
-
Erfindungsgemäß ist weiterhin ein Verfahren zum Generieren eines Bitstroms basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung vorgesehen, umfassend die obigen Schritte zum Generieren einer FPGA-Implementierung basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung, und ein Erzeugen des Bitstroms aus der generierten FPGA-Implementierung.
-
Grundidee der vorliegenden Erfindung ist es also, Ähnlichkeiten eines aktuellen FPGA-Modells zu anderen, beispielsweise vorherigen FPGA-Modellen aufzufinden und zur Durchführung einer effizienten Erzeugung der FPGA-Implementierung zu verwenden. Darauf basierend wird eine inkrementelle Erzeugung der aktuellen FPGA-Implementierung durchgeführt, die auf wenigstens einer bestehenden, ähnlichen FPGA-Implementierung basiert. Die ähnliche FPGA-Implementierung oder zumindest ähnliche Teile davon werden dann verwendet, um die aktuelle FPGA-Implementierung zu erzeugen. Da das Platzieren und Routen der FPGA Logik zum Erzeugen der FPGA-Implementierung üblicherweise die meiste Zeit des FPGA Builds beansprucht, ist dadurch insgesamt eine Reduktion der Zeitdauer zum Erzeugen des FPGA-Build zu erzielen.
-
Das FPGA-Design wird typischerweise als graphisches FPGA-Modell erzeugt, das in eine Hardwarebeschreibungssprache übersetzt wird. Prinzipiell kann das FPGA-Design auch unmittelbar in der Hardwarebeschreibungssprache erzeugt werden. Als Hardwarebeschreibungssprache ist beispielsweise VHDL bekannt. VHDL ist als Very High Speed Integrated Circuit Hardware Description Language (auch VHSIC Hardware Description Language) bekannt.
-
Das FPGA-Design wird dann in einem Syntheseschritt von einer entsprechenden Software zunächst in eine Netzliste übersetzt, welche vorgibt, wie einzelne logische Elemente im FPGA verschaltet werden sollen. Man spricht daher auch von der Konfiguration eines FPGA. Die Netzliste mit den logischen Elementen und deren Verschaltung wird zur weiteren Verwendung gespeichert.
-
Daran schließt sich ein Schritt zur Erzeugung der FPGA-Implementierung an. Dieser Schritt wird üblicherweise als „Place and Route“ bezeichnet. Dabei werden die in der Netzliste gespeicherten logischen Elemente für das FPGA platziert (Place) und miteinander gemäß der Netzliste verbunden (Route). Das Ergebnis ist die FPGA-Implementierung.
-
Im Anschluss wird aus der FPGA-Implementierung ein Bitstrom erzeugt, der auf das FPGA übertragen wird, um in diesem eine gewünschte Funktion zu implementieren.
-
Die vorgenannten Schritte werden oft als „Build“ zusammengefasst.
-
Vorzugsweise wird eine synthetisierte Netzliste als ein Artefakt des jeweiligen FPGA-Modells in einer Datenbank archiviert, um bei einem folgenden Build die entsprechende FPGA-Implementierung ggf. als Referenz zum Suchen einer ähnlichen FPGA-Implementierung verwenden zu können. Auch kann bereits während der Synthese nach einer möglichst ähnlichen FPGA-Implementierung als Referenz gesucht werden. Dazu wird zunächst die Graphen-basierte Repräsentation basierend auf dem FPGA-Design erstellt und mit Graphen von bereits zuvor implementierten FPGA-Designs verglichen.
-
Die Erstellung des Graphen der zumindest einen ähnlichen FPGA-Implementierung erfolgt dabei typischerweise während eines entsprechenden Builds der ähnlichen FPGA-Implementierung. Dies bedeutet, dass die ähnlichen FPGA-Implementierungen konventionell oder auch nach dem hier angegebenen Verfahren ausgehend von einem entsprechenden FPGA-Design erzeugt werden. Die Graphen dieser FPGA-Implementierungen werden dann ebenfalls basierend auf dem jeweiligen FPGA-Design erzeugt.
-
Insgesamt kann das Verfahren einfach implementiert werden, wobei verschiedene Schritte parallel ausgeführt werden können. So können Ressourcen effizient genutzt werden. Es kann dabei eine ähnlichste FPGA-Implementierung ausgewählt werden, oder es wird eine Mindestähnlichkeit vorausgesetzt, um eine ähnliche FPGA-Implementierung als Basis für das FPGA-Design zu verwenden. Ist eine ausreichende Ähnlichkeit gegeben, kann eine entsprechende FPGA-Implementierung als Referenz verwendet werden. Sind noch weitere FPGA-Designs vorhanden, die noch nicht auf Ähnlichkeit untersucht wurden, kann die Suche der ähnlichen oder ähnlichsten FPGA-Implementierung mit diesen FPGA-Designs fortgesetzt werden.
-
Beim Erstellen des Graphen aus dem FPGA-Design werden Blöcke des FPGA-Models zu Knoten und Signallinien werden zu Kanten transformiert. Das Verfahren ist hierarchisch anwendbar. Graphische Subsysteme können entweder für eine erste schnelle Abschätzung als Block interpretiert, oder beliebig tief bis komplett de-hierarchisiert werden. Eine Transformationsfunktion kann es beispielsweise erlauben, FPGA-Modelle u.a. bis auf ihre Basisblöcke unter Berücksichtigung von virtuellen Verbindungen (Goto/From, DataStoreRead/DataStoreMemory/DataStoreWrite, Triggerports, Actionports, ...) zu de-hierarchisieren, und einen gerichteten Graphen daraus zu erzeugen. Dabei kann das FPGA-Modell nicht nur aus einem zusammenhängenden Graphen bestehen, sondern eine Mehrzahl separater Graphen umfassen. Solche getrennten Graphen ergeben sich beispielsweise, wenn voneinander unabhängige Teilfunktionalitäten in einem FPGA-Design implementiert werden.
-
Das Vergleichen der Graphen-basierten Repräsentation des FPGA-Designs mit einer Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung erfolgt basierend auf einem Algorithmus zur Ähnlichkeitsanalyse von Graphen. Auf Basis eines Maßes der Ähnlichkeit zwischen je zwei Knoten zweier Graphen können bekannte Algorithmen angewendet werden. Ein Maß der Ähnlichkeit zweier Knoten wird anhand des Grades der Übereinstimmung von einem Block-/Netzlistenpfad (auch partiell), einem Block-/Netzlistentyp (z.B. add, multiply), und Block-/Netzlistenparameter/- attribute (z.B. Bitbreite, Binärpunktposition) bestimmt.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das FPGA-Design eine Teilimplementierung, das Suchen einer ähnlichen FPGA-Implementierung umfasst ein Suchen einer ähnlichen Teilimplementierung, und der Schritt des Erzeugens der FPGA-Implementierung erfolgt unter Verwendung der ähnlichen Teilimplementierung. Das Problem der Ähnlichkeitssuche kann somit auf verschiedene Teilprobleme heruntergebrochen werden, indem die Ähnlichkeit für diese Teilimplementierungen ermittelt und verglichen wird.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Suchen einer ähnlichen FPGA-Implementierung ein Suchen einer ähnlichen FPGA-Implementierung in einer Datenbank vorheriger FPGA-Implementierungen. In der Datenbank können beispielsweise alle FPGA-Implementierungen gespeichert werden, um diese für eine spätere Verwendung bereitzustellen. Die Datenbank umfasst dabei vorzugsweise FPGA-Implementierungen, die im Rahmen eines Projekts erzeugt wurden, da so von einer erhöhten Wahrscheinlichkeit für eine ähnliche FPGA-Implementierung ausgegangen werden kann. Somit kann eine Suche einer ähnlichen FPGA-Implementierung vom Umfang beschränkt werden.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Verfahren einen Schritt zum Identifizieren von einem geänderten Teilbereich des FPGA-Designs, die Synthese einer Netzliste umfasst die Synthese der Netzliste aus dem geänderten Teilbereich des FPGA-Designs, und das Erzeugen einer FPGA-Implementierung umfasst ein Erzeugen der FPGA-Implementierung für die Netzliste des geänderten Teilbereichs des FPGA-Designs. Das Erstellen einer neuen FPGA-Implementierung kann somit von Beginn an auf geänderte Teilbereiche des FPGA-Designs beschränkt werden. Es werden vorzugsweise Blöcke des FPGA-Designs betrachtet, für welche die FPGA-Implementierung individuell neu durchgeführt werden kann.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Verfahren einen Schritt zum Bestimmen eines Maßes einer Ähnlichkeit zwischen der Graphen-basierten Repräsentation des FPGA-Designs und der Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung, und das Verfahren umfasst einen konventionellen Schritt zum Erzeugen der FPGA-Implementierung aus der Netzliste ohne Verwendung einer ähnlichen FPGA-Implementierung, wenn das Maß der Ähnlichkeit unter einem Grenzwert liegt. Wurde also eine geeignete ähnliche FPGA-Implementierung als Referenz gefunden, kann diese während der Erzeugung der aktuellen FPGA-Implementierung herangezogen werden. Andernfalls muss das FPGA-Modell komplett neu implementiert werden. Je eher im Vorfeld erkannt wird, dass es keine sinnvolle FPGA-Implementierung als Referenz gibt, deren Maß der Ähnlichkeit über dem Grenzwert liegt, desto weniger Ressourcen sind für die Suche der ähnlichen FPGA-Implementierung erforderlich. Dadurch kann mit dem normalen Build gegenüber einem inkrementellen Build mit stark unterschiedlichen FPGA-Modellen, wenn also das Maß der Ähnlichkeit unter dem Grenzwert liegt, die Zeit für den Build reduziert werden. Der Grenzwert liegt vorzugsweise bei einer Ähnlichkeit von 75%. Weiter bevorzugt liegt der Grenzwert bei einer Ähnlichkeit von 85%, noch weiter bevorzugt bei 90%.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst der Schritt des Vergleichens der Graphen-basierten Repräsentation des FPGA-Designs mit der Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung ein Lösen eines linearen Optimierungsproblems, bei dem zu jedem Knoten in einem Graph der ähnlichste Knoten in einem anderen Graph identifiziert wird, ohne dass ein Knoten doppelt zugeordnet wird. Es wird ein als „Ungarische Methode“ nach Kuhn bekanntes Verfahren angewendet. Die Ungarische Methode dient zur Lösung des linearen Optimierungsproblems, zu jedem Knoten eines Graphen den ähnlichsten Knoten in einem anderen Graphen zu finden, ohne einen Knoten doppelt zuzuordnen. Die Methode maximiert die Gesamtähnlichkeit. Nachbarschaftsbeziehungen können allerdings als Maß für die Ähnlichkeit von zwei Blöcken mit einfließen. Das Verfahren wird prinzipiell ohne Berücksichtigung von Nachbarschaftsbeziehungen durchgeführt.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Verfahren einen Schritt zum Bestimmen einer Ähnlichkeit eines Knotens der Graphen-basierten Repräsentation des FPGA-Designs mit einem Knoten der Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung mit einem Bestimmen einer Übereinstimmung von Differenzierungspunkten. Die Differenzierungspunkte umfassen beispielsweise einen Block-/Netzlistenpfad (auch partiell), einen Block-/Netzlistentyp, beispielsweise Addieren/Multiplizieren, Block-/Netzlistenparameter, z.B. Bitbreite, Binärpunktposition.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst der Schritt des Bestimmens einer Übereinstimmung von Differenzierungspunkten eine Gewichtung der Differenzierungspunkte. Durch die Gewichtung können die Differenzierungspunkte unterschiedlich stark berücksichtigt werden.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Verfahren einen zusätzlichen Schritt zum Durchführen einer Ähnlichkeitsanalyse einer Mehrzahl in der Datenbank enthaltenen Graphen und ein Speichern der errechneten Ähnlichkeiten in einem Ähnlichkeitsdiagramm oder einer Ähnlichkeitsmatrix. Solche Ähnlichkeiten, die bei der Ähnlichkeitsanalyse aufgefunden werden, können somit gespeichert werden, um eine zukünftige Suche einer ähnlichen FPGA-Implementierung durch ein Vergleichen der Graphen-basierten Repräsentation des FPGA-Designs mit einer Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung zu erleichtern. Die errechneten Ähnlichkeiten betreffen hier Ähnlichkeiten, die bei der Suche der ähnlichen FPGA-Implementierung ermittelt werden.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Verfahren einen zusätzlichen Schritt zum Errechnen von Ähnlichkeiten von Beziehungen zwischen den in der Datenbank enthaltenen Graphen. Es kann somit beispielsweise eine Art „Hashing“ durchgeführt werden, indem die Graphen oder Teilgraphen vorab analysiert werden, und eine Struktur davon erfasst und gespeichert wird. Die Struktur kann beispielsweise als ein sogenannter Hash-Wert gespeichert werden. Bei einem nachfolgenden Vergleich von Ähnlichkeiten von Graphen kann dieser Vergleich somit basierend auf den errechneten Ähnlichkeiten von Beziehungen durchgeführt werden, wodurch das Suchen einer ähnlichen FPGA-Implementierung durch ein Vergleichen der Graphen-basierten Repräsentation des FPGA-Designs mit einer Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung durch die Struktur erleichtert wird. Der Schritt des Errechnens von Ähnlichkeiten von Beziehungen zwischen den in der Datenbank enthaltenen Graphen ist mit einem großen Rechenaufwand verbunden und sollte in Phasen erfolgen, in denen freie Ressourcen genutzt werden können, beispielsweise während einer Modellierungsphase des Entwicklers, in der bei geringer Rechenlast das FPGA-Design erzeugt wird. Es wird vorzugsweise ein Similaritätsgraph aus mehreren FPGA-Modellen erstellt, der Ergebnisse von Ähnlichkeitsanalysen zwischen allen miteinander verglichenen FPGA-Modellen speichert. Untersuchte Ähnlichkeiten zwischen zwei FPGA-Modellen sind als Kante zwischen den entsprechenden zwei Knoten beispielsweise mit einem Gewicht als Maß der Ähnlichkeit angegeben. Bei einem vollvermaschten Similaritätsgraphen ist die Ähnlichkeit eines jeden FPGA-Modells mit jedem anderen FPGA-Modell angegeben. Ein vollständiger Similaritätsgraph ermöglicht es, einen idealen Startpunkt für einen inkrementellen FPGA Build zu finden. Die Vervollständigung kann auf verschiedene Arten erreicht werden. Als erste Variante können nach einer Brute-Force-Methode fehlende Kanten zur Vollvermaschung des Similaritätsgraphen durch weitere Ähnlichkeitsanalysen ergänzt werden. Dies führt, wie bereits ausgeführt wurde, zu einem großen Bedarf an Rechenleistung und kann daher beispielsweise während einer Erstellung des FPGA-Designs bei geringer CPU Last beispielswese im Hintergrund erfolgen. Die zweite Variante basiert auf einer effizienten Berechnungsreihenfolge vorhandener FPGA-Implementierungen. Dabei wird eine Ähnlichkeit zwischen zwei Knoten auf Basis vorhandener Kanten, wo sich potentiell hohe Ähnlichkeiten befinden können, abgeschätzt, um für diese vorrangig eine Ähnlichkeitsanalyse durchzuführen. Dadurch kann die Vermaschung des Similaritätsgraphen weiter vervollständigt werden. Es kann beispielsweise ein Wahrscheinlichkeitsansatz verwendet werden. Dabei multiplizieren sich Ähnlichkeiten analog zu Wahrscheinlichkeiten entlang eines Weges über vorhandene Kanten: Weg 2-1-4 = 45% x 85% = 38%. Gemäß einer dritten Variante wird die Ähnlichkeit zwischen zwei Knoten auf Basis vorhandener Kanten mit den Ansätzen aus Variante 2 abgeschätzt. Eine exakte Ähnlichkeit der FPGA-Designs wird bei diesem Ansatz nicht analysiert.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst das Verfahren einen zusätzlichen Schritt zum vorherigen Ermitteln von zu erwartenden hohen Ähnlichkeiten von noch nicht bestimmten Beziehungen anhand bereits bestimmter Ähnlichkeiten. Je eher im Vorfeld erkannt wird, welche ähnliche FPGA-Implementierung als Referenz verwendet werden kann, oder ob einen ähnliche FPGA-Implementierung als Referenz verwendet werden kann, desto effizienter kann das Verfahren durchgeführt werden.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst der Schritt des Vergleichens der Graphen-basierten Repräsentation des FPGA-Designs mit einer Graphen-basierten Repräsentation der zumindest einen ähnlichen FPGA-Implementierung ein Nachbar-Matching zur Berücksichtigung von Nachbarschaftsbeziehungen. Ein solches Verfahren ist beispielsweise als „Measuring Similarity of Graph Nodes by Neighbor Matching“ nach Nikolic bekannt. Eine Ähnlichkeit wird hier als Similarität zwischen zwei Graphen ermittelt und ergibt sich durch Summation von Knotenähnlichkeiten von optimalen Knotenkorrespondenzen der Optimierung dividiert durch eine Anzahl der Knoten.
-
In vorteilhafter Ausgestaltung der Erfindung umfasst der Schritt des Erzeugens einer Graphen-basierten Repräsentation basierend auf dem FPGA-Design eine De-Hierarchisierung des FPGA-Designs unter Berücksichtigung von virtuellen Verbindungen und ein Anwenden einer Transformationsfunktion basierend auf der De-Hierarchisierung des FPGA-Designs. In hierarchischen Subsystemen können diese entweder für eine erste schnelle Abschätzung als Block interpretiert, oder beliebig tief bis komplett de-hierarchisiert werden. Die Transformation ist erforderlich, um virtuelle Verbindungen und Abhängigkeiten der hierarchischen Blöcke zu erfassen und korrekt anzuwenden bei einer Verwendung solcher Blöcke als Basis zur Erstellung der FPGA-Implementierung.
-
Die virtuellen Verbindungen können beispielsweise Verbindungen wie Goto/From, DataStoreRead/DataStoreMemory/DataStoreWrite, Triggerports, Actionports, oder ähnliche umfassen.
-
Nachfolgend wird die Erfindung unter Bezugnahme auf die anliegende Zeichnung anhand bevorzugter Ausführungsformen näher erläutert.
-
Es zeigen
- 1 ein Ablaufdiagram zur Durchführung eines Verfahrens zum Generieren einer FPGA-Implementierung und eines Bitstroms aus der FPGA-Implementierung basierend auf einem FPGA-Design gemäß einer ersten, bevorzugten Ausführungsform,
- 2 eine Detailansicht des Ablaufdiagrams aus 1 zur Erzeugung der FPGA-Implementierung und eines Bitstroms in Übereinstimmung mit der ersten Ausführungsform,
- 3 eine Detailansicht des Ablaufdiagrams aus 1 zum Befüllen der Datenbank mit Artefakten in Übereinstimmung mit der ersten Ausführungsform,
- 4 eine Detailansicht des Ablaufdiagrams aus 1 zum Ermitteln eines ähnlichen FPGA-Designs in Übereinstimmung mit der ersten Ausführungsform,
- 5 eine schematische Darstellung eines Similaritätsgraphen mit einer Mehrzahl Kanten zwischen seinen Knoten 34 als erstes Beispiel in Übereinstimmung mit der ersten Ausführungsform,
- 6 eine schematische Darstellung eines Similaritätsgraphen, bei dem zwischen allen Knoten eine Kante ausgebildet ist, als zweites Beispiel in Übereinstimmung mit der ersten Ausführungsform,
- 7 eine schematische Darstellung eines Similaritätsgraphen, bei dem zwischen allen Knoten eine Kante ausgebildet ist, wobei nicht explizit ermittelte Ähnlichkeiten zwischen Knoten basierend auf bestimmten Ähnlichkeiten zwischen Knoten ermittelt werden, als drittes Beispiel in Übereinstimmung mit der ersten Ausführungsform,
- 8 eine schematische Darstellung eines beispielhaften Modell-Graphen in Übereinstimmung mit der ersten Ausführungsform, und
- 9 eine schematische Darstellung von zwei Ähnlichkeitsmatrixen zwischen Knoten von zwei Modell-Graphen mit einer linken Abbildung ohne „Neighbor Matching“ und einer rechten Abbildung mit „Neighbor Matching“ in Übereinstimmung mit der ersten Ausführungsform.
-
Die 1 bis 4 illustrieren ein Verfahren zum Generieren einer FPGA-Implementierung und eines Bitstroms aus der FPGA-Implementierung basierend auf einem FPGA-Design als FPGA-Modell und/oder einer Hardwarebeschreibung.
-
Als Ausgangsbasis des Verfahrens wird hier ein FPGA-Design 10 als graphisches FPGA-Modell erzeugt und bereitgestellt. Das FPGA-Modell wird dann in eine Hardwarebeschreibungssprache, die hier beispielsweise VHDL (Very High Speed Integrated Circuit Hardware Description Language) ist, übersetzt.
-
Davon ausgehend kann ein Build gestartet werden, der zunächst die nachfolgend im Detail beschrieben Schritte S100, S110 und S120 umfasst.
-
In Schritt S100 erfolgt eine Synthese einer Netzliste 12 aus dem FPGA-Design 10. Die Netzliste 12 umfasst logische Elemente sowie deren Verschaltung, wie in dem FPGA-Design 10 angegeben.
-
In Schritt S110 wird aus der Netzliste 12 eine FPGA-Implementierung 14 erzeugt. Dieser Schritt wird üblicherweise als „Place and Route“ bezeichnet. Dabei werden die in der Netzliste 12 gespeicherten logischen Elemente für das FPGA platziert (Place) und miteinander gemäß der Netzliste 12 verbunden (Route). Das Ergebnis ist die FPGA-Implementierung 14. Details zu Schritt S110 werden untenstehend erläutert.
-
In Schritt S120 wird aus der generierten FPGA-Implementierung 14 ein Bitstrom 16 zum Übertragen auf einen FPGA und zur Verwendung mit dem FPGA erzeugt.
-
Wie in 4 im Detail dargestellt ist, werden Schritte S140 bis S180 zum Ermitteln eines ähnlichen FPGA-Designs parallel zu den vorherigen Schritten, insbesondere parallel zu Schritt S100 durchgeführt.
-
Somit wird aus dem FPGA-Design 10 in einem Schritt S140 ein Modell-Graph 24 als Graphen-basierte Repräsentation basierend aus dem FPGA-Design 10 erzeugt. Beim Erstellen des Modell-Graphen 24 aus dem FPGA-Design 10 werden Blöcke des FPGA-Models 10 zu Knoten und Signallinien werden zu Kanten transformiert. Ein Modell-Graph 24 ist beispielhaft in 8 dargestellt, wobei dort mehrere unabhängige Modell-Graphen 24 gemeinsam implementiert und dargestellt sind. Dabei können graphische Subsysteme für eine erste schnelle Abschätzung als Block interpretiert werden, oder sie können beliebig tief bis komplett de-hierarchisiert werden. Eine Transformationsfunktion kann es beispielsweise erlauben, FPGA-Modelle u.a. bis auf ihre Basisblöcke unter Berücksichtigung von virtuellen Verbindungen (Goto/From, DataStoreRead/DataStoreMemory/DataStoreWrite, Triggerports, Actionports, ...) zu de-hierarchisieren, und einen gerichteten Graphen daraus zu erzeugen. Im Zuge der De-Hierarchisierung des FPGA-Designs 10 werden virtuelle Verbindungen berücksichtigt, und es wird eine Transformationsfunktion basierend auf der De-Hierarchisierung des FPGA-Designs 10 angewendet.
-
In einem Schritt S150 wird die Ähnlichkeit des Modell-Graphen 24 mit einem Modell-Graphen 24 aus einer Datenbank 22 verglichen. Der Modell-Graph 24 aus der Datenbank 22 ist eine Graphen-basierte Repräsentation einer vorherigen FPGA-Implementierung 14.
-
Dabei wird zunächst ein Vergleich des Modell-Graphen 24 des aktuellen FPGA-Designs 10 mit dem Modell-Graphen 24 der vorherigen FPGA-Implementierung 14 aus der Datenbank 22 basierend auf einem Algorithmus zur Ähnlichkeitsanalyse von Graphen durchgeführt. Auf Basis eines Maßes der Ähnlichkeit zwischen je zwei Knoten 34 zweier Modell-Graphen 24 wird ein Maß der Ähnlichkeit der Knoten 34 anhand des Grades der Übereinstimmung von einem Block-/Netzlistenpfad (auch partiell), einem Block-/Netzlistentyp (z.B. add, multiply), und Block-/Netzlistenparameter/-attribute (z.B. Bitbreite, Binärpunktposition) bestimmt.
-
Das Vergleichen umfasst weiterhin ein Lösen eines linearen Optimierungsproblems, bei dem zu jedem Knoten 34 in einem Modell-Graphen 24 der ähnlichste Knoten 34 in einem anderen Modell-Graphen 24 identifiziert wird, ohne dass ein Knoten 34 doppelt zugeordnet wird. Dies ist als „Ungarische Methode“ nach Kuhn prinzipiell bekannt.
-
Das Vergleichen des Modell-Graphen 24 des aktuellen FPGA-Designs 10 mit dem Modell-Graphen 24 der FPGA-Implementierung 14 aus der Datenbank 22 umfasst weiterhin ein Nachbar-Matching zur Berücksichtigung von Nachbarschaftsbeziehungen. Ein solches Verfahren ist beispielsweise als „Measuring Similarity of Graph Nodes by Neighbor Matching“ nach Nikolic bekannt. In 9 sind diesbezüglich zwei Ähnlichkeitsmatrixen zwischen Knoten 34 von zwei Modell-Graphen 24 dargestellt. In einer linken Abbildung von 9 ist die Ähnlichkeitsmatrix ohne „Neighbor Matching“ und in einer rechten Abbildung mit „Neighbor Matching“ dargestellt.
-
Eine Ähnlichkeit eines Knotens 34 des Modell-Graphen 24 des aktuellen FPGA-Designs 10 eines Knotens 34 des Modell-Graphen 24 der FPGA-Implementierung 14 aus der Datenbank 22 wird dabei basierend auf einer Übereinstimmung von Differenzierungspunkten ermittelt. Die Differenzierungspunkte umfassen beispielsweise einen Block-/Netzlistenpfad, einen Block-/Netzlistentyp, beispielsweise addieren/multiplizieren, Block-/Netzlistenparameter, z.B. Bitbreite, Binärpunktposition. Vorliegend erfolgt eine Gewichtung der Differenzierungspunkte.
-
Ausgehend von dem so bestimmten Maß für die Ähnlichkeit der beiden Modell-Graphen 24 wird nunmehr überprüft, ob die Ähnlichkeit des Modell-Graphen 24 des aktuellen FPGA-Designs 10 mit dem Modell-Graphen 24 der FPGA-Implementierung 14 aus der Datenbank 22 höher ist, als eine Ähnlichkeit des Modell-Graphen 24 des aktuellen FPGA-Designs 10 mit einem besten Modell-Graphen 24 aus der Datenbank 22. Wenn der Modell-Graph 24 aus der Datenbank 22 der erste Modell-Graph 24 ist, für den die Ähnlichkeit mit dem Modell-Graphen 24 des aktuellen FPGA-Designs 10 ermittelt wurde, wird der Modell-Graph 24 aus der Datenbank 22 als bester Modell-Graph 24 oder Referenz 26 übernommen. Andernfalls wird die Referenz 26 nur geändert, wenn der Modell-Graphen 24 aus der Datenbank 22 eine höhere Ähnlichkeit aufweist, als die bisherige Referenz 26. Dies erfolgt - wenn anwendbar - in Schritt S160. Das Verfahren kehrt dann zu Schritt S150 zurück, wenn in der Datenbank 22 noch weitere Modell-Graphen 24 zum Vergleich enthalten sind. Auch wird überprüft, ob die Synthese aus Schritt S100 schon beendet ist. Der Vergleich wird nur in Schritt S150 fortgesetzt, wenn die Synthese aus Schritt S100 noch nicht abgeschlossen ist.
-
Wenn also Synthese aus Schritt S100 abgeschlossen ist, oder in der Datenbank 22 keine weiteren Modell-Graphen 24 zum Vergleich enthalten sind, wird das Maß der Ähnlichkeit der aktuellen Referenz 26 mit einem Grenzwert verglichen. Wenn das Maß der Ähnlichkeit größer als der Grenzwert ist, wird in Schritt S170 der entsprechende Modell-Graph 24 als Referenz 26 zur Erzeugung der FPGA-Implementierung 14 in Schritt S110 bereitgestellt. Andernfalls wird dieser Teil des Verfahrens in Schritt S180 ohne Ergebnis abgebrochen. Der Grenzwert liegt hier beispielhaft bei einer Ähnlichkeit von 90%.
-
Das Erzeugen der FPGA-Implementierung 14 in Schritt S110 wird folgendermaßen durchgeführt. Zunächst wird überprüft, ob durch Schritt S170 eine ähnliche FPGA-Implementierung 14 basierend auf dem Modell-Graphen 24 ermittelt und bereitgestellt wurde. Ist dies nicht der Fall, wird in Schritt S200 ein normales, konventionelles Platzieren und Verbinden durchgeführt, um die FPGA-Implementierung 14 zu erstellen. Andernfalls wird das Verfahren mit Schritt S210 fortgesetzt.
-
In Schritt S210 wird für die Referenz die FPGA-Implementierung 14 aus der Datenbank 22 geladen. In Schritt S220 erfolgt dann eine inkrementelles Platzieren und Verbinden basierend auf der FPGA-Implementierung 14 aus der Datenbank 22.
-
Die Datenbank 22 wird wie in 3 dargestellt befüllt. In Schritt S130 werden jeweils die Netzliste 12 des aktuellen FPGA-Designs 10, der dazugehörige Modell-Graph 24 und die erzeugte FPGA-Implementierung 14 als Artefakt 20 des FPGA-Modells 10 in der Datenbank 22 gespeichert. Jedes FPGA-Design 10 bildet somit automatisch ein Artefakt 20 in der Datenbank 22 für einen späteren Vergleich für ein dann neueres FPGA-Design 10.
-
Als hier nicht dargestellter Hintergrundschritt werden zusätzlich Ähnlichkeiten von Beziehungen zwischen den in der Datenbank 22 enthaltenen Modell-Graphen 24 berechnet. Der Schritt des Errechnens der Ähnlichkeiten von Beziehungen zwischen den Modell-Graphen 24 der in der Datenbank 22 enthaltenen Artefakte 20 erfolgt dabei in Phasen, in denen freie Ressourcen genutzt werden können. Es wird ein Similaritätsgraph 30 aus mehreren FPGA-Modellen 10 erstellt. Verschiedene Similaritätsgraphen 30 sind in den 5 bis 7 dargestellt. Dabei sind untersuchte Ähnlichkeiten zwischen zwei FPGA-Modellen 10 als Kante 32 zwischen den entsprechenden zwei Knoten 34, die FPGA-Modelle 10 repräsentieren, und mit einem Gewicht 36 als Maß der Ähnlichkeit angegeben. Der Similaritätsgraph 30 wird auch als Ähnlichkeitsdiagramm bezeichnet.
-
Dabei zeigt der Similaritätsgraph 30 in 5 lediglich Kanten 32 zwischen wenigen Knoten 34, während die Similaritätsgraphen 30 in den 6 und 7 vollständige Similaritätsgraphen 30 sind. Ausgehend von bereits ermittelten Ähnlichkeiten zwischen Knoten 34, die als Kanten 32 mit durchgezogener Linie dargestellt sind, werden die Gewichte 36 zusätzlicher Kanten 38, die als gestrichelte Linie dargestellt sind, ermittelt. Die Vervollständigung kann auf verschiedene Arten erreicht werden. Dazu werden nach einer Brute-Force-Methode die Gewicht 36 der zusätzlichen Kanten 38 zur Vollvermaschung des Similaritätsgraphen 30 sukzessive durch weitere Ähnlichkeitsanalysen ergänzt.
-
7 zeigt eine Variante zur Vervollständigung des dortigen Similaritätsgraphen 30 basierend auf einer effizienten Berechnungsreihenfolge vorhandener Kanten 32 von FPGA-Designs 10. Dabei wird eine Ähnlichkeit zwischen zwei Knoten 34 auf Basis der vorhandenen Kanten 32, wo sich potentiell hohe Ähnlichkeiten befinden können, abgeschätzt, um für diese vorrangig eine Ähnlichkeitsanalyse durchzuführen. Somit können die zusätzlichen Kanten 38 durch eine Multiplikation der Gewichte 36 der vorhandenen Kanten 32 abgeschätzt werden. Dies erfolgt in 7 beispielhaft für eine zusätzliche Kante 38 zwischen den mit ,2' und ,4` gekennzeichneten Knoten 34, indem die Ähnlichkeiten entlang der gepunkteten Pfeile 40 multipliziert werden, um die Ähnlichkeit zwischen den beiden Knoten 34 abzuschätzen. Ausgehend davon können Gewichte 36 für Kanten 32 mit einer hohen ermittelten Ähnlichkeit primär bestimmt werden.
-
Basierend auf den Similaritätsgraphen 30 kann der Vergleich in Schritt S150 vereinfacht und beschleunigt werden.
-
Bezugszeichenliste
-
FPGA-Design |
10 |
Netzliste |
12 |
FPGA-Implementierung |
14 |
Bitstrom |
16 |
Artefakt |
20 |
Datenbank |
22 |
Modell-Graph |
24 |
Referenz |
26 |
Similaritätsgraph, Ähnlichkeitsdiagramm |
30 |
Kante |
32 |
Knoten |
34 |
Gewicht |
36 |
zusätzliche Kante |
38 |
gepunkteter Pfeil |
40 |