-
Hintergrund
der Erfindung
-
Diese Erfindung betrifft die Technologie
programmierbarer Logikeinrichtungen und insbesondere Computersysteme,
in denen eine programmierbare Logik rekonfiguriert wird, um die
Fähigkeit
des Rechnersystems zur Behandlung einer gegebenen Anwendung zu optimieren.
-
Das einzige programmierbare Element
in einer herkömmlichen
Computerarchitektur ist der Mikroprozessor. Der Mikroprozessor wird
mit einem festen Befehlssatz hergestellt, der nicht kundenspezifisch
für bestimmte
Anwendungen angepaßt
werden kann. Der Mikroprozessor ist insofern flexibel, als er praktisch
jede beliebige softwareimplementierte Funktion einer Anwendung ausführen kann.
Die Ausführungsgeschwindigkeit
einer gegebenen Funktion ist jedoch im allgemeinen wesentlich kleiner,
wenn die Funktion zur Ausführung
auf einem Mikroprozessor implementiert ist. Das liegt daran, daß softwareimplementierte
Funktionen relativ komplex sein müssen, damit sie an den ursprünglichen
Befehlssatz des Mikroprozessors angepaßt sind.
-
Bei einer herkömmlichen Computerarchitektur
läuft die
Software typischerweise auf einem begrenzten Bereich von Plattformen.
Wenn ein Anwendungsingenieur sich dafür entscheidet, eine Anwendung
zu schreiben, die auf einem gegebenen Mikroprozessor laufen soll,
so ist der Befehlssatz, den der Anwendungsingenieur verwenden kann,
auf denjenigen begrenzt, der permanent im Mikroprozessor resident
ist. Der Anwendungsingenieur muß deshalb wählen, ob
eine Anwendung besser für
eine Hardwareplattform oder eine Softwareplattform geeignet ist.
Obgleich infolge der Inflexibilität und Ineffizienz von hardwarebasierten
Systemen häufig
Softwareplattformen bevorzugt sind, führt in vielen Fällen der ursprüngliche
Befehlssatz, der auf einem Mikroprozessor resident ist, zu einer
inadäquaten
Leistung für einen
bestimmten Typ von Softwareanwendungen. Zum Beispiel benötigen graphikintensive
Anwendungen gewöhnlich
Hardware, die speziell für
die besonderen graphischen Elemente der Anwendung geeignet ist,
wie z. B. 3D-Rendering. Um die Schwierigkeiten zu umgehen, die mit
der Programmierung für
eine Hardwareplattform zusammenhängen,
greifen Ingenieure auf Software zurück, die in vielen Fällen die Anwendungsgeschwindigkeit
beträchtlich
reduziert.
-
Kürzlich
ist das Konzept eines rekonfigurierbaren Computers vorgeschlagen
worden, das auf programmierbaren Logikeinrichtungen basiert. Zum Beispiel
wird ein solches System in EP-A-0 801 351 (International Computers
Limited) gezeigt, die eine integrierte Peripheriesteuerung mit rekonfigurierbaren
Schaltungen beschreibt. Ein solches System ist auch in WO 94/ 10627
(Giga Operations Corporation) gezeigt, die verteilte Verarbeitungseinheiten
mit reprogrammierbaren Schaltungen beschreibt. "Software Acceleration Using Programmable
Hardware Devices" (Edwards
M. D. et al., IEE Proceedings: Computers and Digital Techniques,
GB, IEE, Band 143, Nr. 1, 1996, Seiten 55–63, XP000554820 ISSN: 1350–2387) und
US-Patent Nr. 5 684 980 (Virtual Computer Corporation) zeigen außerdem programmierbare
Hardware, die dazu verwendet wird, hardwarebasierte Funktionen zu
implementieren. Das Ziel eines rekonfiguriebaren Computers ist es,
die Leistung gegenüber
einem herkömmlichen
Computer zu steigern, indem Parallelität und schnelle Ausführungszeiten
durch Verwendung von anpaßbarer Hardware
bereitgestellt werden. Erhöhte
Flexibilität kann
erreicht werden durch Verwendung programmierbarer Logikeinrichtungen,
weil die Logik solcher Einrichtungen rekonfiguriert werden kann,
indem neue Konfigurationsdaten in die Einrichtungen geladen werden.
Dies erlaubt es, dem rekonfigurierbaren Computer eine große Anzahl
von Befehlssätzen
zu geben, anstelle eines einzigen Befehlssatzes für einen
herkömmlichen
Computer. Eine größere Anzahl von
Funktionen kann durch Verwendung einer fes ten Menge an Hardware
bereitgestellt werden, wenn der Computer rekonfigurierbare Logik
benutzt.
-
Es ist eine Aufgabe der vorliegenden
Erfindung, verbesserte rekonfigurierbare Computer auf der Grundlage
von programmierbaren Logikeinrichtigungen zu schaffen, die reprogrammiert
werden können,
um die Fähigkeit
des Computers zur Handhabung einer gegebenen Anwendung zu optimieren.
-
Kurzdarstellung
der Erfindung
-
Diese und weitere Ziele der Erfindung
werden gelöst
in Übereinstimmung
mit den Prinzipien der vorliegenden Erfindung, wie beansprucht,
durch Bereitstellen eines rekonfigurierbaren Computersystems, das
auf programmierbarer Logik basiert.
-
Ein Anwendungsingenieur, der eine
Anwendung für
den rekonfigurierbaren Computer entwickelt, braucht sich nicht mit
den Eizelheiten darüber zu
befassen, welche Ressourcen auf diesem Computer verfügbar sind.
Es wird eine Hardwareabstraktion verwendet, die auf der Größe einer
einzigen programmierbaren Logikeinrichtung oder einer Teilmenge
einer programmierbaren Logikeinrichtung beruht. Wenn die Anwendung
kompiliert wird, werden die in Hardware implementierten Funktionen
der Anwendung in Blöcke
aufgeteilt, die Konfigurationsdaten enthalten, die die gleiche Größe wie eine
programmierbare Logikeinrichtung oder eine kleinere Größe haben.
-
Das rekonfigurierbare Computersystem
ist modular und skallierbar. Wenn weitere Hardwareressourcen hinzugefügt werden,
nimmt die Systemleistung zu. Es ist nicht notwendig, die Anwendung
zu rekompilieren, um die gesteigerte Leistung auszunutzen.
-
Das rekonfigurierbare Computersystem
erlaubt es, daß sowohl
Hardware- als auch Softwareimplementationen einer Funktion während der
Laufzeit gleichzeiitg existieren. Ein virtuelles Com puterbetriebssystem
wird dazu benutzt, je nach den während der
Laufzeit verfügbaren
Ressourcen auszuwählen, welche
Implementierungen laufen sollen. Es können Tools für die Softwareentwicklung
bereitgestellt werden, die es einem Anwendungsingenieur erlauben, eine
hohe Sprache zu verwenden, um sowohl eine Hardwareimplementierung
als auch eine Softwareimplementierung für eine Anwendung zu entwickeln, die
auf einem rekonfigurierbaren Computersystem mit programmierbaren
Logikressourcen ausgeführt werden
kann. Diese Tools können
einen Partitionierer einschließen,
der eine Spezifikation, die in einer Systementwicklungssprache geschrieben
ist, die aus Funktionen und Beschränkungen aufgebaut ist, automatisch
in Softwarefunktionen und Hardwarefunktionen partitioniert. Die
Softwarefunktionen und Hardwarefunktionen können in Stränge bzw. Konfigurationsdaten
für programmierbare
Logikressourcen kompiliert werden. Die Stränge (Threads) und Konfigurationsdatenkönnen von
dem virtuellen Computerbetriebssystem in Laufzeit benutzt werden,
um die Anwendung auszuführen.
-
Das rekonfigurierbare Computersystem
bietet einem Anwendungsingenieur Mechanismen zum Bestimmen der Leistungsanforderungen
für eine
Anwendung. Zum Beispiel kann eine Graphikanwendung einen bestimmten
Durchsatz erfordern, gegeben durch die Anzahl von Polygonen, die
pro Zeiteinheit auf einem Anzeigeschirm gezeichnet werden können. Wenn
es erforderlich ist, daß z.
B. eine Million Polygone pro Sekunde gezeichnet werden, kann der
Ingenieur in dem virtuellen Computersystem spezifizieren, daß die Funktion,
die das Polygon zeichnet, ihre Arbeit in einer Mikrosekunde ausführen muß.
-
Das virtuelle Computerbetriebssystem
hat die Fähigkeit,
die Leistung von Anwendungen, die in dem System laufen, (sowie ihre
individuellen Funktionen) zu überwachen,
und hat die Fähigkeit,
einer bestimmten Anwendung oder einer einzelnen Funktion mehr Ressourcen
neu zuzuweisen um sicherzustellen, daß sie ihre Leistungsanforderungen
erfüllt. Das
virtuelle Computerbetriebssystem kann auch bestimmen, ob die Softwarever sion
oder die Hardwareversion einer speziellen Funktion auszuführen ist,
je nach Leistung des Systems und der Zeit, in der die Funktion auszuführen ist.
Wenn z. B. die Funktion zum Zeichnen von Polygonen so diponiert
ist, daß sie läuft, während gleichzeitig
eine andere rechenintensive Anwendung ausgeführt wird, kann die von dem virtuellen
Computerbetriebssytem ausgeführte
dynamische Profilierung dies in Rechnung stellen, wenn sie die Ressourcenzuweisung
bestimmt und bestimmt, ob die Softwareversion der Funktion zum Polygonzeichnen
oder die Hardwareversion dieser Funktion verwendet werden soll.
-
Es wird ein virtuelles Computerbetriebssystem
geschaffen, das den programmierbaren Logikressourcen die Funktionen
der Anwendung zuweist. Das virtuelle Computerbetriebssystem kann
eine virtuelle Computer Kernel-Dienstkomponente einschließen. Die
virtuelle Computer Kernel-Dienstkomponente kann verschiedene Ressourcenmanager
umfassen, einschließlich
eines Managers für
virtuelle Logikressourcen.
-
Wenn ein bestimmtes rekonfigurierbares Computersystem
ein virtuelles Betriebssystem mit virtuellen Logikfähigkeiten
hat, kann während
der Laufzeit der virtuelle Logikmanager das Austauschen von programmierbaren
Logik-Konfigurationsdaten und von Information über den Anwendungszustand zwischen
programmierbaren Logikressourcen und einer sekundären Speichereinrichtung
steuern. Dies erlaubt es rekonfigurierbaren Computersystemen mit begrenzten
Ressourcen, komplexe Anwendungen zu implementieren.
-
Weitere Merkmale der Erfindung, ihre
Beschaffenheit und verschiedene Vorteile werden verdeutlicht durch
die nachstehende detaillierte Beschreibung der bevorzugten Ausführungsformen
anhand der beigefügten
Zeichnungen.
-
Kurzbeschreibung
der Zeichnungen
-
In 1 ist
ein Blockdiagramm eines Beispiels eines rekonfigurierbaren Computersystems gemäß der vorliegenden
Erfindung.
-
2 ist
ein Flußdiagramm
illustrativer Schritte in dem Boot-Prozeß eines rekonfigurierbaren
Computers gemäß der vorliegenden
Erfindung.
-
3 ist
ein Blockdiagramm von illustrativen Betriebssystem-Kernel-Diensten
für einen
rekonfigurierbaren Computer gemäß der vorliegenden
Erfindung.
-
4 ist
ein F1ußdiagramm
illustrativer Schritte, die von dem virtuellen Computerbetriebssystem
benutzt werden, um eine Funktion in einen rekonfigurierbaren Computer
gemäß der vorliegenden Erfindung
zu laden.
-
5A ist
eine Skizze, die zeigt, wie das virtuelle Computerbetriebssystem
in Übereinstimmung mit
der vorliegenden Erfindung eine Anwendung nehmen kann, die für Einheits-Hardware
ausgelegt ist, und den Funktionen der Anwendung eine oder mehrere
programmierbare Logikressourcen in dem Computersystem zuweisen kann.
-
5B ist
eine Skizze, die zeigt, wie eine programmierbare Logikressource
mehrfachen Funktionen in Übereinstimmung
mit der vorliegenden Erfindung zugewiesen werden kann.
-
6 ist
ein Blockdiagramm eines illustrativen Softwareentwicklungsflusses
für einen
rekonfigurierbaren Computer gemäß der vorliegenden
Erfindung.
-
7 ist
ein Blockdiagramm eines illustrativen vereinfachten Softwareentwicklungsflusses
für einen
rekonfigurierbaren Computer gemäß der vorliegenden
Erfindung.
-
Detaillierte
Beschreibung der bevorzugten Ausführungsformen
-
1 zeigt
auf einer hohen Ebene ein Schema eines illustrativen rekonfigurierbaren
Computersystems gemäß der vorliegenden
Erfindung. Die Hardwareressourcen in dem rekonfigurierbaren Computersystem 5 umfassen
eine zentrale Verarbeitungseinheit (CPU) 16, die in einer
programierbaren Logikeinrichtung implementiert sein kann, einen
eigentlichen Mikroprozessor oder eine Kombination solcher Elemente,
einen Speicher 12, Eingabe/Ausgabe-Einrichtungen (I/O) 18 (die
auf programmierbaren Logikeinrichtungen oder anderen geeigneten Einrichtungen
basieren können)
und ein Verbindungsnetzwerk 22.
-
Eine programmierbare Logikeinrichtung
umfaßt
typischerweise ein Feld von programmierbaren Logikbereichen, eine
Routing-Struktur,
Eingabe- und Ausgabebereiche, Speicherbereiche und einen Konfigurationsspeicher
(d. h. einen Speicher zur Speicherung der Konfigurationsdaten, die
zum Konfigurieren der Logikkomponenten in den programmierbaren Logikbereichen
benutzt werden). Die logischen Funktionen, die von einer programmierbaren
Logikeinrichtung ausgeführt
werden können,
sind bestimmt durch die Konfigurationsdaten, die im Konfigurationsspeicher
abgelgt sind, und die Verbindung des Konfigurationsspeichers mit
den Logikbereichen, der Routing-Struktur, den Eingabe- und Ausgabebereichen
und den Speicherbereichen. Der Konfigurationsspeicher kann z. B.
auf einem statischen RAM basieren, der, im Schaltkreis, im wesentlichen
beliebig oft beschrieben werden kann. Alternativ kann anstelle des
internen statischen RAM der programmierbaren Logikeinrichtung eine
Einrichtung wie etwa ein löschbarer
programmierbarer ROM (EPROM) außerhalb
der programmierbaren Logikeinrichtung als ein Konfigurationsspeicher
verwendet werden. Auf Wunsch kann irgendeine andere Speichereinrichtung benutzt
werden, die in der Lage ist, eine beträchtliche Anzahl von Malen beschrieben
zu werden. Die von einer programmierbaren Logikeinrichtung ausgeführte logische
Funktion kann deshalb oftmals im Schaltkreis (in-circuit) modifiziert
werden. Ein Beispiel für eine
geeignete Logikeinrichtung ist die Einrichtung FLEX EPF10K50 von
Altera Corporation, San Jose, Kalifornien. Dieser Typ programmierbarer
Logikeinrichtungen dient lediglich als Beispiel. Auf Wunsch kann
in dem System 5 irgendeine andere geeignete Art programmierbarer
Logikeinrichtungen verwendet werden. Auf Wunsch können die
programmierbaren Logikeinrichtungen eine Teilrekonfiguration des
Konfigurationsspeichers oder mehrerer Konfigurationsspeicher unterstützen.
-
Zum Speichern von Initialisierungsinformation
kann ein nichtflüchtiger
RAM 10 verwendet werden. Wenn die Spannung für ein rekonfigurierbares Computersystem
zum ersten Mal eingeschaltet wird, kann die Initialisierungsinformation
dazu benutzt werden, den Computer zu initialisieren. Dieser Prozeß ist als "Boot-Strapping" bekannt.
-
Die für Berechnungen benutzten Speichereinrichtungen
können
RAMs 12 sein. Diese können durch
statische oder dynamische integrierte Speicherschaltkreis-Technologie
gebildet werden. Die Wahl zwischen statischer oder dynamischer Speichertechnologie
kann von den gewünschten
Berechnungsfunktionen abhängen,
die von der Speichereinrichtung ausgeführt werden sollen. Statische
RAMs haben schnellere Zugriffszeiten als dynamsiche RAMs, benutzen
jedoch mehr Transistoren pro Speicherzelle und sind deshalb für eine äquivalente
Speicherdichte teurer in der Herstellung. Die Kombination aus Zugriffszeit,
Dichte und Kosten sind Faktoren bei der Bestimmung der bevorzugten
Speichertechnologie für
eine gegebene Berechnungsfunktion.
-
Das Verbindungsnetzwerk 22 kann
durch Drähte
(z. B. einen Bus) gebildet werden, die alle physikalischen Ressourcen
verbinden. Die Topologie des Verbindungsnetzwerkes kann auch durch
Verwendung von programmierbaren Logikeinrichungen oder durch Verwendung
von programmierbaren Verbindungseinrichtungen gebildet werden, die
eine dynamische Rekonfigurierung der Topologie erlauben können. Die
Topologie kann dann für
eine bestimmte Berechnungsfunktion opitmiert werden. Beispiele für potentielle
Netzwerktechnologien sind Gitter (mesh), Voll- oder Teil-Kreuzleitungen
(cross bar), cliques, hyper-cubes und verteilte oder shared-memory-Hierarchien.
-
Die I/O-Verbindungen 20 können durch Drähte gebildet
werden, die das rekonfigurierbare Rechnerfeld mit externen Einrichtungen
wie etwa einer Tastatur, einer visuellen Anzeige, Massenspeichern
wie einem Festplattenlaufwerk oder mit einem Computernetzwerk verbinden,
das andere rekonfigurierbare oder nichtrekonfigurierbare Computersysteme
umfaßt.
-
Auf Wunsch können programmierbare Logikeinrichtungen
dazu benutzt werden, kombinatorische oder sequenzielle Logikfunkfuntionen
für die
Logikeinrichtung 14, Mikroprozessorfunktionen für den Mikroprozessor 16 oder
I/O-Funktionen für
die I/O-Schnittstelle 18 zu
implementieren. Einige dieser Funktionen, etwa die Mikroprozessorfunktionen,
können
auf Wunsch in fester Hardware implementiert werden.
-
Bei der Erweiterung eines solchen
Systems können
mehr programmierbare Logikeinrichtungen hinzugefügt werden. Wenn programmierbare
Logikeinrichtungen zu dem System hinzugefügt werden, nimmt die Verarbeitungsleistung
zu. Skalierbarkeit und Modularität
erlauben es, daß eine
Zunahme der programmierbaren Loigkeinrichtungs-Ressourcen zu einer
erhöhten
Leistung des Systems führt.
-
Der Speicher 12 kann eine
Speicherhierarchie für
die Ausführung
von Anwendungen und Systemprogrammen und Daten un terstützen. Anwendungs-
und Systemprogramme können
Mikroprozessor-Code und Konfigurationsdaten für programmierbare Logikeinrichtungen
umfassen.
-
Eine programmierbare Logikeinrichtung kann
so konfiguriert werden, daß sie
eine anwendungsspezifische I/O-Einrichtung 18 bildet, die
nur für
die Dauer der Anwendung benötigt
wird. Diese Einrichtungen können
Protokolle verwenden, wie etwa Ethernet-Protokolle, SCSI-Protokolle
(small computer systems Interface), PCI-Protokolle (peripheral component
interconnect), Videotreiber-Protokolle und dergleichen.
-
Das Verbindungsnetzwerk 22 kann
dazu benutzt werden, die folgenden Funktionen bereitzustellen: einen
Konfigurationsbus für
programmierbare Logikeinrichtungen, einen Anwendungs-Speicherbus und
einen I/O-Bus. Jeder Bus kann unabhängig arbeiten. Der Konfigurationsbus
für programmierbare Logikeinrichtungen
kann dazu verwendet werden, jede programmierbare Logikeinrichtung
in dem System zu konfigurieren. Je nach Adressierungsmodus für die Konfiguration
der programmierbaren Logikeinrichtungen können diese Daten simultan an
eine Gruppe von programmierbaren Logikeinrichtungen oder an eine
individuelle programmierbare Logikeinrichtung gesendet werden. Der
Anwendungs-Speicherbus kann es dem System erlauben, mit dem Feld
der programmierbaren Logikeinrichtungen ein Speichersystem mit gemeinsamem
oder verteiltem Speicher zu bilden. Der I/O-Bus kann eine programmierbare
Logikeinrichtung mit einer externen I/O-Einrichtung verbinden.
-
Die Information in dem nichtflüchtigen
Speicher 10 kann dazu benutzt werden, das System zu booten,
wie in 2 gezeigt ist.
Wenn in Schritt 30 die Spannung für das System eingeschaltet
wird, enthalten weder die programmierbaren Logikeinrichtungen noch
die zur Berechnung benutzten RAMs 12 Information aus vorherigen
Konfigurationen. Der Zweck der im nichtflüchtigen Speicher 10 abgelegten Information
ist es, einen boot-strap-Manager zu laden (Schritt 32).
Der boot-strap-Mana ger kann seinerseits in Schritt 34 grundlegende
I/O-Dienste (BIOS) laden, in Schritt 36 ein Selbsttest-Diagnoseprogramm
bei Spannungseinschaltung laden und laufen lassen und in Schritt 38 einen
Betriebssystem-Kernel laden und laufen lassen.
-
Die im nichtflüchtigen Speicher 10 abgelegten
boot-strap-Befehle können
in Schritt 36 auf einer Berechnungsressource ausgeführt werden.
Diese Ressource kann ein spezieller Mikroprozessor, eine als Mikroprozessor
konfigurierte programmierbare Logikeinheit, eine Kombination aus
einem Mikroprozessor und einer teilweise als Mikroprozessor konfigurierten
programmierbaren Logikeinheit oder eine logische Schaltung einer
programmierbaren Logikeinrichtung sein. Wenn die Ressource ein spezieller Mikroprozessor
ist, enthält
der nichtflüchtige
Speicher 10 einfach die Mikroprozessorbefehle, die zur Vollendung
des bootstrap-Prozesses benötigt
werden. Wenn eine programmierbare Logikeinrichtung als Mikroprozessor
konfiguriert werden muß,
so kann der nichtflüchtige
Speicher 10 Konfigurationsdaten für die programmierbare Logikeinrichtung
und Mikroprozessorbefehle enthalten. Anderenfalls kann der nichtflüchtige Speicher 10 Konfigurationsdaten
für eine
programmierbare Logikeinrichtung für eine Logikschaltung enthalten,
die zum Abschluß des boot-strap-Prozesses
zusätzliche
Programmbefehle erfordern mag oder nicht.
-
Der letzte boot-strap-Prozeß ist das
Laden eines Betriebssystem-Kernels.
Die Ladeprozedur kann das Laden von Befehlen für einen Mikroprozessor enthalten,
der durch Verwendung einer programmierbaren Logikeinrichtung implementiert
ist, oder kann das Laden der Konfigurationsdaten für eine programmierbare
Logikeinrichtung beinhalten. Welche Anordnung auch immer benutzt
wird – Mikroprozessorenfehle
oder Logikschaltung mit oder ohne Befehle – kann das Betriebssystem als
das virtuelle Computerbetriebssystem (VC-OS) bezeichnet werden.
-
Illustrative Komponenten des virtuellen
Computerbetriebssystems sind in 3 gezeigt.
Das virtuelle Computerbetriebssys tem 40 nach 3 kann die grundlegenden
Dienste bereitstellen, die traditionelle Betriebssysteme hinsichtlich
des Laufzeitmanagements bieten. Außerdem unterstützt das
virtuelle Computerbetriebssytem Dienste für das System 5, die
sich auf die Verwendung von programmierbaren Logikressourcen beziehen.
-
Das virtuelle Computerbetriebssystem
umfaßt
Laufzeitmanagement-Tools, die sicherstellen, daß die Funktionen einer gegebenen
Anwendung ausgeführt
werden können.
Zum Beispiel stellen die Laufzeitmanagementfunktionen sicher, daß Funktions- und Zeitbeschränkungen
eingehalten werden, die auf der Ebene der Systemkonstruktion spezifiziert wurden.
-
Herkömmliche Betriebssysteme wie
etwa Microsoft Windows NT nehmen die Zeitplanung (Disposition) für Funktionen
vor, die auf den in herkömmlichen
Computersystemen verfügbaren
Ressourcen in Laufzeit auszuführen
sind. Die Ressourcen in solch einem herkömmlichen Computersystem sind
in Laufzeit je nach Anforderungen des Anwendungsprogrammms und Ressourcenverfügbarkeit
dynamisch zugewiesen. Jede Ressource hat einen Ressourcenmanager,
etwa einen Manager für
den virtuellen Speicher, der für
die Zuweisung des physikalischen Speichers verantwortlich ist. Die
gebräuchlichsten Ressourcenmanager
in herkömmlichen
Betriebssystemen sind ein Dateisystemmanager, ein Graphikmanager,
ein I/O-Manager (zur Handhabung des Zugriffs auf Massenspeicher
oder einfache I/O-Einrichtungen wie etwa eine Tastatur oder Maus),
ein Netzwerkmanager und ein Manager für virtuellen Speicher.
-
Gemäß der vorliegenden Erfindung
umfaßt das
virtuelle Computerbetriebssystem 40 eine Anwendungs-Schnittstelle
(VC-API) 44, die eine Schnittstelle zwischen dem virtuellen
Computerbetriebssystem 40 und Anwendungen bildet, die für das virtuelle
Computerbetriebssystem 40 geschrieben sind. Das virtuelle
Computerbetriebssystem 40 enthält auch Kernel-Dienste 42,
die Ressourcen-Managementfunktionen bereitstellen. Jede Ressource in
dem System kann einen Ressourcenmanageer haben. Zum Beispiel können Dateiressourcen
von dem Dateisystemmanager 46 gehandhabt werden. Graphikressourcen
können
vom Graphikmanager 47 gehandhabt werden, IO-Ressourcen
können
vom IO-Manager 48 gehandhabt werden, Netzwerkressourcen
können
vom Netzwerkmanager 50 gehandhabt werden, und Ressourcen
für virtuellen
Speicher können
vom Manager 52 für
virtuellen Speicher gehandhabt werden. Ein rekonfigurierbares Computersystem
kann eine virtuelle Logik haben, die von einem virtuellen Logikmanager 54 gemanagt
wird, der Anfragen behandelt, die von Anwendungen gemacht werden,
um auf die begrenzten programmierbaren Logikressourcen in dem System 5 zuzugreifen.
-
Herkömmliche Betriebssysteme sind
auf den virtuellen Speicher angewiesen, um Beschränkungen
beim begrenzten Zugriff auf RAM-Speicher zu überwinden. Der virtuelle Speicher
kann sekundäre Speichereinrichtungen
(etwa Festplattenlaufwerke) benutzen, um Laufzeitdaten temporär zu handhaben, die
andernfalls typischerweise in einer primären Speichereinrichtung (etwa
einem RAM) gespeichert würden.
Wenn Funktionen und Daten von einer Anwendung angefordert werden,
bestimmt das Betriebssystem, ob die angeforderten Daten zur Zeit
im virtuellen Speicher abgelegt sind, und wenn dies der Fall ist,
ersetzt es die Daten in dem physikalischen Speicher für andere
Anwendungen durch die Funktionen und Daten, die gegenwärtig vom
virtuellen Speicher angefordert werden.
-
Der virtuelle Logikmanager nach der
vorliegenden Erfindung ist jedoch für die Laufzeitzuweisung von
programmierbaren Logikeinrichtungen zuständig. Der virtuelle Logikmanager
erfüllt
die Laufzeitanforderungen von Anfragen von verschiedenen Anwendungen
für Funktionen,
die in programmierbarer Logik zu implementieren sind. Eine Anwendung kann
verlangen, daß mehr
Funktionen unter Verwendung programmierbarer Logikeinrichtungen
implementiert werden als programmierbare Logikeinrichtungen zur
Handhabung solcher Anforderungen vorhanden sind. Der virtuelle Logikmanager
muß deshalb
die Laufzeit umschaltung von Funktionen managen, die in programmierbare
Logik zu implementieren sind.
-
Herkömmliche virtuelle Speichermanager lassen
eine relativ kleine Menge an physikalischem Speicher für eine Anwendung
wie eine relativ große Menge
an logischem Speicher aussehen. Dies wird erreicht durch die Laufzeitumschaltung
von Speicherseiten in den und aus dem physikalischen Speicher zu
und von einem sekundären
Speicher (üblicherweise
einem lokalen Festplattenlaufwerk). Mit dem virtuellen Logikmanager 54 nach
der vorliegenden Erfindung kann man eine relativ kleine Menge an physikalischen
programmierbaren Logikeinrichtungen für eine Anwendung wie eine relativ
große
Menge an logischen programmierbaren Logikeinrichtungen aussehen
lassen. Dies wird dadurch erreicht, daß der virtuelle Logikmanager 54 dazu
benutzt wird, eine Laufzeitumschaltung von Konfigurationsdaten für programmierbare
Logikeinrichtungen und Zustandsinformationen in und aus dem Konfigurationsspeicher
für programmierbare
Logikeinrichtungen (d. h. dem Konfigurationsspeicher) zu und von
einer sekundären
Speichereinrichtung (üblicherweise
einem lokalen Festplattenlaufwerk) durchzuführen.
-
Der Prozeß des Ladens einer auszuführenden
Funktion in das System ist in 4 gezeigt.
Dieser Prozeß dient
dazu, die beste zu verwendende Implementierung der Funktion (entweder
Software oder Hardware) zu der Zeit auszuwählen, zu der die Funktion ausgeführt wird.
-
In Schritt 150 werden die
verfügbare
Hardware-Verarbeitungsbandbreite des Systems und die verfügbare Software-Verarbeitungsbandbreite
des Systems bestimmt. Die Software-Verarbeitungsbandbreite kann
aus der Zeitmenge berechnet werden, die sämtliche Mikroprozessoren in
dem System unbeschäftigt
sind und keine Funktionen ausführen. Die
Hardware-Verarbeitungsbandbreite kann berechnet werden anhand der
Anzahl von unbenutzten programmierbaren Logikressourcen in dem System zusammen
mit der Menge an Zeit, in der die benutzten programmierbaren Logikressourcen
keine Daten verarbeiten.
-
In Schritt 152 werden die
geforderte Hardware-Verarbeitungsbandbreite für die Funktion und die geforderte
Software-Verarbeitungsbandbreite für die Funktion bestimmt. Diese
Anforderungen können durch
den Anwendungsingenieur als eine absolute Anforderung spezifiziert
werden, oder sie können spezifiziert
werden anhand der Leistung des Systems, wenn eine kleine zusätzliche
Funktion ausgeführt
wird, die neben der auszuführenden
Funktion ausgeführt
wird. Diese kleine Funktion kann in Schritt 152 ausgeführt werden,
und die Leistung des Systems kann gemesssen werden.
-
In Schritt 154 wird entschieden,
ob die geforderte Software-Verarbeitungsbandbreite kleiner ist als
die in dem System verfügbare
Bandbreite. Wenn die geforderte Software-Verarbeitungsbandbreite kleiner
ist als die in dem System verfügbare
Bandbreite, so wird in Schritt 160 die Softwareimplementierung
in das System geladen, damit sie auf einem Mikroprozessor läuft. Diese
Wahl wird getroffen, weil die Softwareimplementierung weniger Systemressourcen
benötigt
als die Hardwareimplementierung.
-
Wenn die Software-Verarbeitungsbandbreite nicht
adäquat
ist, so wird in Schritt 156 die Hardwareimplementierung
bewertet. Wenn die verfügbare Hardware-Bandbreite
akzeptabel ist, wird in Schritt 162 die Funktion in das
System geladen, so daß sie direkt
auf einer programmierbaren Logikressource ausgeführt wird. Wenn in Schritt 156 festgestellt
wurde, daß die
verfügbare
Hardware-Bandbreite nicht akzeptabel ist, und wenn weiter in Schritt 158 festgestellt
wurde, daß die
Leistungsanforderung "hart" war, was bedeutet,
daß die
Leistungsanforderung erfüllt
werden muß,
so erhält
der Benutzer eine Fehlermeldung, und das Laden der Funktion (und
ihrer Mutter-Anmeldung) muß in
Schritt 164 abgebrochen werden. Wenn die Anforderung nicht "hart" war, wird die Funktion
in Schritt 162 dennoch geladen und läuft mit einem reduzierten Leistungsniveau.
-
Wenn eine Implementierung einer Funktion in
das System geladen worden ist (unter Verwendung üblicher Mittel zur Entscheidung,
welche Funktionen eine niedrigere Priorität haben, und mit Schließen dieser
Funktionen niedrigerer Priorität,
soweit nötig), wird
die Leistung der Funktion in dem System in Schritt 166 überwacht.
Die Priorität,
die der Funktion für
die Bandbreite des Systems gegeben wurde, wird proportional zu der
Differenz zwischen der geforderten Bandbreite und der tatsächlich realisierten
Bandbreite sein.
-
Wann immer eine neue Funktion durch
den Prioritätsmanagementprozeß für die Ressourcenzuweisung
vorgemerkt wird, besteht der erste von der Ressourcen-Zuweisungsroutine
des virtuellen Computerbetriebssystems ausgeführte Schritt darin, zu entscheiden,
ob eine Ressource vorhanden ist, die die Rahmenbedingungen dieser
Funktion erfüllen kann.
Wenn eine solche Ressource vorhanden ist, so wird die Ressource
der Funktion zugewiesen. Wenn nicht, muß unter Verwendung einer geeigneten
Ersatzpolitik ein geeigneter Kandidat in dem vorhandenen Pool physikalischer
Ressourcen gefunden werden. Wenn z. B. entschieden wird, daß nicht
genügend
programmierbare Logikressourcen verfügbar sind, um für die Ausführung einer
gegebenen Funktion einer Anwendung rekonfiguriert zu werden, kann das
virtuelle Computerbetriebssystem dazu benutzt werden, sicherzustellen,
daß die
gegebene Funktion mit Hilfe von Hardwareressourcen implementiert wird,
die nicht rekonfiguriert zu werden brauchen (z. B. einem spezialisierten
Mikroprozessor oder einer programmierbaren Logikeinrichtung, die
so konfiguriert ist, daß sie
als eine CPU arbeitet). Das virtuelle Computerbetriebssystem kann
sicherstellen, daß eine
geeignete Softwareversion der Funktion durch den Anwendungsingenieur
bereitgestellt wurde, bevor versucht wird, die Funktion auf einem
Mikroporzessor laufen zu lassen.
-
Vorbehaltlich von Beschränkungen
für die Funktion
umfassen geeignete Ersatzstrategien, die verwendet werden können, "first-in-first-out", "zuletzt benutzt" oder "am wenigsten häufig benutzt". Ein Extremfall
könnte
ein Austausch der ersten geeigneten Ressource auf Anfrage sein,
wenn das Laufzeitmanagement eine Funktion mit hoher Priorität detektiert, etwa
einen Echtzeitinterrupt-Handhabungsprozeß.
-
Im Hinblick auf die Ressourcenzuweisung und
Vormerkung schließt
das Laufzeit-Ressourcenmanagement von Betriebssystemen herkömmlicher Computerarchitekturen
die Verwendung verschiedener Techniken zur CPU-Disposition (scheduling)
ein. Wenn man ein Computersystem Anwendungen (wie auch einzelne
Funktionen unter derselben Anwendung) eine nach der anderen handhaben
läßt, kann dies
extrem ineffizient sein. Je nach der zu einer gegebenen Zeit bearbeiteten
Aufgabe können
Ressourcen überlastet
werden, während
andere unbenutzt bleiben. Das Resultat ist ein sehr langsamer Computer.
Als Antwort darauf wurde das Konzept der CPU-Disposition allmählich von
den meisten herkömmlichen
Betriebssystemen übernommen.
-
Die CPU-Disposition in herkömmlichen Computersystemen
umfaßt
die Zuweisung von Ressourcen und die Disposition der Reihenfolge,
in der alle Funktionen von dem System abgearbeitet werden. Das Ziel
der CPU-Disposition ist es, eine stabile Multitasking-Umgebung zu
erzeugen. Diese Umgebung wird erzeugt durch algorithmisches Zuweisen von
CPU-Ressourcen auf der Grundlage einer Kombination von Faktoren
wie etwa Prioritätsvergabe, Leerlauf
von Funktionen infolge von I/O-Verzögerungen oder irgendwelchen
anderen Faktoren, die dazu benutzt werden können, die Reihenfolge zu bestimmen,
in der Funktionen abgerarbeitet werden. Wenn z. B. ein Mikroprozessor
eine Funktion behandelt, die einen Punkt erreicht, an dem sie auf
eine Eingabe eines Benutzers warten muß, kann ein CPU-Dispositionsmerkmal
eines herkömmlichen
Betriebssystems einer anderen Funktion die Gelegenheit geben, die Ressourcen
des Mikroprozessors zu nutzen (wie auch andere verfügbare Systemres sourcen),
bis die Benutzereingabe verfügbar
ist. Wenn die Eingabe des Benutzers verfügbar ist, kann die erste Funktion die
Ressourcen wieder zurückerlangen,
die sie freigegeben hatte, als sie einen Leerlauf des Systems verursachte.
-
Gemäß der vorliegenden Erfindung übernimmt
in einem rekonfigurierbaren Computersystem, in dem programmierbare
Logikeinrichtungen entweder vollständig oder teilweise als einer
oder mehrere Mikroprozessoren konfiguriert sind, die Funktion eines
Dipositionssystems eine etwas andere Rolle als bei einem herkömmlichen
CPU-Dispositionssystem. Während
die herkömmliche
CPU-Disposition Mikroprozessorressourcen an Funktionen zuweist,
weist die Dispostion programmierbarer Logikeinrichtungen den Funktionen
programmierbare Logikressourcen (von denen es mehrere gegen kann)
zu. Die programmierbaren Logikressourcen müssen nicht notwendigerweise
als Mikroprozessoren programmiert sein, sondern können so
programmiert sein, daß sie irgendeine
gewünschte
Funktion ausführen,
z. B. I/O-Funktionen, Graphikfunktionen, Netzwerkfunktionen. Der
Zweck dieses Merkmals in einem Betriebssystems eines rekonfigurierbaren
Computers ist es, das Management von verschiedenen Aufgaben zu unterstützen, die
von einer Gruppe von programmierbaren Logikressourcen simultan bearbeitet
werden. Im Betriebssystem eines herkömmlichen Computers hat dagegen
ein CPU-Dispositionsmerkmal in erster Linie den Zweck, den Leerlauf
von Mikroprozessoren zu reduzieren, der durch die hohe Nachfrage
an Verarbeitungsleistung durch die verschiedenen zu einer gegebenen
Zeit aktiven Aufgaben entsteht.
-
Ein typisches Dispositionssystem
für einen rekonfigurierbaren
Computer kann ein Zeitmultiplex-System verwenden, bei dem Anwendungsfunktionen
programmierbaren Logikressourcen zugeordnet werden. Dies kann das
Umschalten zwischen verschiedenen Funktionen in bestimmten Zeitintervallen
beinhalten. Bemerkenswerte Ausnahmen umfassen Echtzeit-Interrupts
und I/ O-Funktionen.
-
Wenn in einem rekonfigurierbaren
Computersystem Ressourcen freiwerden und keine Funktionen für die sofortige
Zuweisung disponiert sind, so kann ein Vorholen von Funktionen dazu
beitragen, den Zeitaufwand zu minimieren, der mit dem Vorspann für die Konfiguration
der programmierbaren Logikressourcen zusammenhängt, da die programmierbaren
Logikressourcen mit den Konfigurationsdaten geladen werden können, bevor
die Funktion benötigt
wird.
-
Dieser Zeitaufwand, der mit dem Laden
einer programmierbaren Logikeinrichtung zusammenhängt, kann
bei zur Zeit verfügbaren
programmierbaren Logikeinrichtungen in der Größenorndnung von Millisekunden
liegen. Falls erwünscht,
kann die zum Konfigurieren einer programmierbaren Logikeinrichtung
benötigte
Zeit reduziert werden (z. B. in der Größenordnung von Nanosekunden),
indem vermehrt Pipelinetechnik und Parallelität auf der Einrichtung benutzt
wird.
-
Ein rekonfigurierbares Computersystem,
das auf einer Gruppe von programmierbaren Logikressourcen basiert,
hat daher den Vorteil, das es relativ große Verarbeitungsfähigkeiten
hat, weil die Anzahl der in dem System verwendeten programmierbaren Logikressourcen
relativ groß sein
kann. Wenn in einem rekonfigurierbaren System mehr Verarbeitungsleistung
benötigt
wird, braucht man lediglich mehr programmierbare Logikeinrichtungen
auf dem Verbindungsnetzwerk hinzuzufügen. Eine Anwendung braucht
nicht notwendigerweise recompiliert zu werden, nachdem mehr programmierbare
Logikeinrichtungen zu dem System hinzugefügt wurden, weil der Laufzetimanager
die neue Hardware automatisch detektiert und in die Laufzeit-Leistungsspezifikation
einbezieht. Alle diese Einrichtungen können dann mit Hilfe des virtuellen
Computerbetriebssystems kontrolliert und verfolgt werden.
-
Die vom Softwaredesigner festgelegten
minimalen und maximalen Leistungsziele einer Funktion können die
nächste
Funktion bestimmen, die für
die Ressourcenzuweisung zu disponieren ist.
-
Außerdem können auch die Prioritäten der augenblicklich
laufenden Funktionen zur Bestimmung der nächsten zu disponierenden Funktion
benutzt werden.
-
Ein weiteres Merkmal der vorliegenden
Erfindung ist die Möglichkeit,
die programmierbaren Logikeinrichtungen zu defragmentieren. In herkömmlichen
Computern können
Speichereinrichtungen wie etwa Plattenlaufwerke defragmentiert werden,
um die Probleme zu vermeiden, die auftreten, wenn Ressourcen auf
dem Laufwerk ständig
zugewiesen und entzogen werden. Ein Bereich des nicht zugewiesenen
Raumes auf einem herkömmlichen
Plattenlaufwerk ist möglicherweise
nicht groß genug,
um einer Funkton neu zugewiesen zu werden, die einen größeren zusammenhängenden
Raum benötigt.
Gemäß der vorliegenden
Erfindung kann die Defragmentierung der programmierbaren Logik dazu
benutzt werden, die partielle Konfiguration einer einzelnen programmierbaren
Logikeinrichtung zu defragmentieren. Dies ermöglicht es, daß viele
kleine präallozierte Bereiche
der programmierbaren Logik neu zugewiesen werden, um einen größeren Arbeitsbereich
der programmierbaren Logik verfügbar
zu machen. Dies umfaßt
die Neuzuweisung der Konfigurationsdaten für bestimmte Vermittler zu verschiedenen
Teilen der programmierbaren Logik zur Aufnahme der gewünschten
Funktionen der programmierbaren Logikeinrichtung.
-
Ein weiterer Aspekt der vorliegenden
Erfindung bezieht sich auf die Softwareentwicklung. Der Prozeß der Softwareentwicklung
ist ein kritischer Teil der Benutzung jedes Computersystems. Es
ist wichtig, Fähigkeiten
zu haben, komplexe Funktionen auszuführen und verwickelte Schnittstellen
zu erzeugen, über
die ein Benutzer mit dem Rechnersystem interagieren kann. Die meisten
herkömmlichen
Entwicklungstools umfassen hohe Programmiersprachen wie etwa JAVA,
C++, ADA, LISP, COBOL, VISUAL BASIC und andere. Um die Konsistenz
während
des Softwareentwicklungsprozesses aufrechtzuerhalten, können hohe
Sprachen für
das rekonfigurierbare Computersystem entwickelt wer den, indem die
Prinzipien der herkömmlichen
Programmierung hoher Sprachen benutzt werden.
-
Eine Anwendung umfaßt typischerweise
vielfältige
Funktionen. Zum Beispiel kann eine Graphikanwendung bestimmte Funktionen
zum Rendern von Oberflächen
und andere Funktionen zur Strahlenrückverfolgung benutzen. Das
virtuelle Computerbetriebssystem weist den Funktionen der Anwendung die
programmierbaren Logikeinrichtungen zu.
-
Es kann eine Einheits-Hardwareabstraktion benutzt
werden. Das heißt,
ein Anwendungsingenieur braucht sich nicht darum zu kümmern, wie
viele programmierbare Logikeinrichtungs-Ressourcen ein bestimmtes
System, auf dem die Anwendung läuft, hat.
Statt dessen kann eine Abstraktion gemacht werden, daß sämtliche
Ressourcen verfügbar
sind, vorbehaltlich eines minimalen Ressourcenbedarfs für wenigstens
eine programmierbare Logikeinrichtung.
-
Dies ist in 5A gezeigt. Hardwarefunktionen 181 werden
durch einen HDL-Compiler 180 auf der Grundlage einer Einheits-Hardwareabstraktion kompiliert
(d. h. die Annahme, daß die
Hardware-Beschreibungssprache für
die Anwendung in Blöcken von
Konfigurationsdaten kompiliert wird, die in einer programmierbaren
Logikressource oder einer Teilmenge einer programmierbaren Logikressource
implementiert werden, dargestellt als Hardwareeinheit 182).
Die Hardwareeinheit 182 kann z. B. eine einzige programmierbare
Logikeinrichtung oder ein Teil einer einzigen programmierbaren Logikeinrichtung sein.
Der HDL-Compiler 180 versorgt das virtuelle Computerbetriebssystem
(VC-OS) 184 mit Konfigurationsdaten in der Form von Blöcken von
Konfigurationsdaten, wobei jeder Block in eine Hardwareeinheit 182 paßt. VC-OS 184 weist
den Blöcken
(die Funktionen bilden, die ihrerseits die Anwendung bilden) nach
Bedarf programmierbare Logikeinrichtungs-Ressourcen zu.
-
In dem Beispiel nach 5A hat das VC-OS 184 dem Block 1 der
Anwendung eine programmierbare Logikressource 186, dem
Block 2 der Anwendung eine programmierbare Logikressource 188,
... und dem Block n der Anwendung eine programmierbare Logikressource 190 zugewiesen.
Logikressourcen wie etwa die Logikressourcen 186, 188, 190 können jeweils
auf einer einzigen programmierbaren Logikeinrichtung basieren, können jeweils
auf einen Teil einer programmierbaren Logikeinrichtung basieren, können jeweils
auf einer Kombination solcher Anordnungen von Einrichtungen basieren
oder können
jeweils auf irgendwelchen anderen geeigneten Logikressourcen basieren.
Der HDL-Compiler 180 kann Anwendung
auf der Grundlage einer konsistenten Einheites-Hardwareabstraktion
selbst dann compilieren, wenn die zuzuweisenden Ressourcen sich
von System zu System ändern
oder sich während
der Laufzeit in einem gegebenen System ändern. Der virtuelle Logikmanager
kann Blöcke
von Konfigurationsdaten in einer bestimmten programmierbaren Logikressource
austauschen, wenn diese Ressourcen begrenzt sind. Wie in 5B gezeigt ist, kann das VC-OS
außerdem
mehreren Blöcken
von Konfigurationsdaten eine programmierbare Logikeinrichtungs-Ressource
zuweisen.
-
Der Prozeß der Kompilierung einer Entwicklungsspezifikation
oder eines Algorithmus auf hoher Ebene und seiner Ausführung auf
einer rekonfigurierbaren Hardwarearchitektur ist detailliert in 6 dargestellt. Eine Spezifikation
(Algorithmus) 70, ein Satz von Beschränkungen 74 und eine
Ressourcenbibliothek 76 werden Software-Entwicklungstools 192 als Eingangsdaten
bereitgestellt. Die Spezifikation kann in einer Systementwicklungssprache
geschrieben werden. In der Spezifikation braucht der Anwendungsingenieur
nur eine Anwendung mit Hilfe der Tools zu schreiben, die von der
Systementwicklungssprache bereitgestellt werden. Der Anwendungsingenieur
braucht keine Software-Version und keine Hardware-Version der Funktionen
zu berücksichtigen,
die in der Systementwicklungssprache geschrieben sind. Ein Partitionierer 72 kann
dann die Spezifikation 79 in Softwarefunktionen 78 und
Hardwarefunktionen 80 partitionieren. Dies geschieht so, daß die Funktionen
vollständig
als Software laufen können
(z. B. auf einem Mikroprozessor), vollständig als Hardware laufen können (auf
einer programmierbaren Logikeinrichtung) oder in einer Kombination aus
beidem laufen können.
Für jede
Funktionspartition können
sowohl eine Softwareimplementierung als auch eine Hardwareimplementierung
erzeugt werden, weil die Entscheidung, eine bevorzugte Implementierung
der Partition laufen zu lassen, bis zur Laufzeit aufgeschoben werden
kann. Auf dem Code der Systementwicklungssprache kann auch ein Systementwicklungssprachen-Profilierer
laufen, um kritische Pfade zu ananlysieren und Partitionen zuzuweisen.
-
Die Partitionierungsphase muß möglicherweise
die Beschränkungen 74 berücksichtigen.
Es gibt zwei allgemeine Typen von Beschränkungen 74. Zunächst können die
Funktionsgrenzen der Spezifikation 70 in der Systementwicklungssprache
Zeitbeziehungen innerhalb von Funktionen haben, und es mag Gleichzeitigkeits-
oder Sequenzbeschränkungen
zwischen Funktionen geben. Zweitens können der Verwendung von Hardwareressourcen
in der Ressourcenbibliothek 76 Kostenfunktionen zugeordnet
sein. Die Ressourcenbibliothek 76 enthält Einzelheiten über jede
verfügbare
Hardwareressource (dies umfaßt
im allgemeinen Mikroprozessoren, Speicher und programmierbare Logikeinrichtungen). Diese
können
Berechnungsraten, Latenz und Ansprechzeiten einer Ressource oder
Kostenfunktionen der Zeit (üblicherweise
für Softwareimplementierungen),
des Platzes (üblicherweise
für Hardwareimplementierungen)
oder der Kommunikation (Overhead bei Platz und Zeit) umfassen.
-
Beschränkungen können als "harte" Beschränkungen definiert sein, die
erfüllt
werden müssen.
Ein Beispiel einer harten Beschränkung
ist eine Beschränkung,
die einen in Echtzeit auszuführenden I/O-
oder Interrupt-Prozeß betrifft.
Beschränkungen können auch
als "weiche" Beschränkungen
definiert sein. Ein Beispiel einer weichen Beschränkung ist eine
Beschränkung,
die sich auf arithmetische Funktionen in einem Rechenblatt be zieht.
Es ist nicht kritisch, daß diese
arithmetischen Funktionen innerhalb einer bestimmten Zeit ausgeführt werden,
doch je schneller diese Funktionen ausgeführt werden, desto zweckmäüßiger ist
dies für
die Benutzung der Anwendung.
-
Die Ressourcenbibliothek 76 beschreibt
Eigenschaften für
jeden Typ von Ressourcen. Zum Beispiel kann ein Mikroprozessor Eigenschaften
haben wie etwa einen bestimmten Befehlssatz und eine bestimmte Datenwegbreite,
ein Speicher kann eine bestimmte Datenwegbreite haben, und eine
programmierbare Logikeinrichtung kann eine bestimmte Logikkapazität und einen
I/ O-Zähler
haben. Das Partitionierungstool 72 berücksichtigt Eigenschaften aus der
Ressourcenbibliothek 76 und Beschränkungen 74, mag jedoch
nicht berücksichtigen,
wieviel Ressourcen es von jeder Ressource innerhalb eines gegebenen
Systems gibt. Es liegt in der Verantwortung des Laufzeit-Ressourcenmanagers,
die Funktionspartitionen je nach Bedarf von einer laufenden Anwendung
auf die verfügbaren
Hardwareressourcen abzubilden.
-
Nachdem die Spezifikation 70 in
der Systementwicklungssprache einmal in Softwarefunktionen 78 und
Hardwarefunktionen 80 partitioniert worden ist, können Schnittstellenfunktionen 86 synthetisiert werden,
um die Übergabe
von Parametern zwischen diesen Funktionen zu erlauben. Die Schnittstellenfunktionen 86 können Sofrwareverfahren
sein zum Schreiben von Parametern in Hardwarefunktionen 80,
die speicherabgebildet sind, oder dies könnte die Instanzierung einer
Festplatten-Schnittstellenschaltung in einer programmierbaren Logikeinrichtung
umfassen, um die Archivierung eines Dateisystems zu ermöglichen.
-
Es ist nicht nötig, sowohl eine Softwareversion
als auch eine Hardwareversion von allen Funktionen zu haben. Ein
Anwendungsingenieur kann alle Funktionen sowohl für Software
als auch für
Hardware schreiben, einige für
beide Versionen oder stets nur die eine oder die andere. Es kann
jedoch wünschenswert
sein, beide Versionen zu haben, damit das Betriebssystem Flexibilität bei der
Auswahl eines optimalen Satzes von Funktionen und Implementierungen
erhält.
-
Nach der Partitionierung in Funktionen
muß jede
Komponente in Software und Hardware auf die physikalische Implementierungstechnologie
abgebildet werden. Dies umfaßt
die Compilierung von Softwarefunktionen 78 in Threads 88 mit
Hilfe eines Compilers 82 für Sprachen auf hoher Ebene
und von Hardwarefunktionen 80 in Konfigurationsmuster 90 mit
Hilfe eines Compilers 84 für eine Hardware-Beschreibungssprache.
Verschiedene Optimierungs- und Reduktionstechniken können auf
dieser Stufe eingesetzt werden, etwa Propagation von Konstanten
(sowohl arithmetische als auch geometrische), Reduktion von Verknüpfungsstärken (Z.
B. a + a = 2*a -- dies würde
eine u. U. kostspielige Multiplikationsstufe entfernen), Pipelinetechnik
oder Ressourcensharing.
-
Das letzlich ausführbare Codebild (erzeugt von
einem Linker 92, der Software- und Hardwarefunktionen und
Parameteradressen auflöst)
umfaßt eine
Hauptfunktion und dynamisch verknüpfte Funktionen, die alle in
Software oder Hardware oder einer Kombination von beidem ausgeführt werden
können. Diese
Funktionen und die von dem Partitionierer 72 der Systementwicklungssprache
erzeugten Beschränkungen 74 sind
Eingänge
in das virtuelle Computerbetriebssystem 94.
-
Alternativ kann ein Benutzer den
Entwicklungsfluß vereinfachen,
indem er die Spezifikation manuell in Softwarekomponenten und Hardwarekomponenten
partitioniert, wie in 7 gezeigt
ist. Dieser Flug würde
keine funktionellen Zeitbeschränkungen
annehmen (weil er nicht in der Systementwicklungssprache geschrieben
ist). Gewünschtenfalls
können
Beschränkungen
in Betracht gezogen werden. Der Hauptfluß der Steuerung kann auf einem
Mikroprozessor 130 (oder einer programmierbaren Logikeinrichtung,
die als Mikroprozessor programmiert ist) ausgeführt werden, der Funktionen aufrufen
kann, die in der programmierbaren Logik 132 residieren.
-
Algorithmusfunktionen, die endweder
auf einen Mikroprozessor 130 oder auf eine programmierbaren
Logikeinrichtung 132 zielen, können in einer hohen Sprache 114 geschrieben
und für
die Funktionen, die in einer programmierbaren Logikeinrichtung 132 zu
implementieren sind, mit Hilfe eines Compilers 118, der
von einer hohen Sprache in eine Hardwarebeschreibungssprache compiliert,
in die Hardwarebeschreibungssprache übersetzt werden. Schnittstellenfunktionen,
die zur Übergabe
von Parametern zwischen den Software- und Hardwarefunktionen notwendig
sind, werden ebenfalls in der hohen Sprache spezifiziert.
-
Der Compiler 116 für die hohe
Sprache compiliert die Softwarefunktionen 110 und erzeugt Threads 122,
die im Linker 124 mit den Konfigurationsdaten 126 aus
dem Maschinensprachen-Compiler 120 verknüpft werden.
Diese Funktionen können dann
von dem virtuellen Computerbetriebssystem 128 benutzt werden.
-
Je nach verfügbaren Ressourcen, Befehlen des
Anwendungsingenieurs und Beschränkungen kann
das virtuelle Computerbetriebssystem entscheiden (entweder während der
Laufzeit oder während der
Softwarekompilierung), ob die Softwareimplementierung, die Hardwarekomplementierung
oder eine Kombination von beiden benutzt werden wird, um eine bestimmte
Anwendung laufen zu lassen. Dies ermöglicht eine äußerst effiziente
Verarbeitung, da Funktionen, die besser als Software laufen, auch als
Software laufen, während
solche Funktionen, die besser für
die Hardware der programmierbaren Logikeinrichtung geeignet sind,
auf den programmierbaren Logikressourcen laufen.
-
Das vorstehende soll lediglich die
Prinzipien der Erfindung illustrieren, und der Fachmann kann verschiedene
Abwandlungen vornehmen, ohne daß der
Rahmen der Erfindung, wie beansprucht, verlassen wird.