DE69421755T2 - Initialisierung von Mehrfachbus-Netzwerken - Google Patents
Initialisierung von Mehrfachbus-NetzwerkenInfo
- Publication number
- DE69421755T2 DE69421755T2 DE69421755T DE69421755T DE69421755T2 DE 69421755 T2 DE69421755 T2 DE 69421755T2 DE 69421755 T DE69421755 T DE 69421755T DE 69421755 T DE69421755 T DE 69421755T DE 69421755 T2 DE69421755 T2 DE 69421755T2
- Authority
- DE
- Germany
- Prior art keywords
- bus
- buses
- peripheral
- subroutine
- pci
- 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.)
- Expired - Fee Related
Links
- 230000002093 peripheral effect Effects 0.000 claims description 100
- 238000000034 method Methods 0.000 claims description 36
- 230000010365 information processing Effects 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 11
- 230000008859 change Effects 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 7
- 238000005070 sampling Methods 0.000 claims 1
- 230000009471 action Effects 0.000 description 61
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 5
- 239000000872 buffer Substances 0.000 description 4
- 230000008672 reprogramming Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000003292 glue Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/177—Initialisation or configuration control
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
Description
- Die vorliegende Erfindung betrifft im allgemeinen Informationsverarbeitungssysteme und insbesondere ein Verfahren und ein Gerät zum Initialisieren von Mehrfachbus-Netzwerken in einem Informationsverarbeitungssystem.
- Nehmen wir zunächst allgemein Bezug auf Informationsverarbeitungssysteme; diese haben in der Regel als Hauptkomponente eine Zentraleinheit (CPU - Central Processing Unit), die alle Kommunikationen im System lenkt und alle durch das Informationsverarbeitungssystem auszuführenden Befehle aufbaut. Informationsverarbeitungssysteme haben im allgemeinen auch ein Netzwerk oder mehrere Netzwerke physikalischer Verbindungsvorrichtungen, die Busse genannt werden. Diese Netzwerke verbinden die CPU mit beliebig vielen Peripheriegeräten, so daß die CPU mit den Peripheriegeräten kommunizieren kann.
- Damit die CPU mit einer bestimmten Peripherievorrichtung in einem Mehrfachbus-Netzwerk kommunizieren kann, muß sie in der Lage sein, den richtigen Bus im Netzwerk zu bestimmen, an den die betreffende Peripherievorrichtung angeschlossen ist. Dann muß die CPU in der Lage sein, auf diesem Bus die richtige Vorrichtung zu bestimmen, mit der sie kommunizieren will. Dementsprechend muß ein Rechnersystem, das ein Netzwerk von Mehrfachbussen und Peripherievorrichtungen umfaßt, eine "Addreßliste" aufbauen, die den Ort jedes Busses und jeder Peripherievorrichtung angibt. Die Addreßliste wird im Normalfall beim Hochfahren d. i. in der Initialisierungsphase des Systems aufgebaut, was im allgemeinen Konfiguration genannt wird.
- Bei dler Konfiguration greift die CPU auf ein Software-Konfigurationsprogramm zu, das im Speicher des Informationsverarbeitungssystems gespeichert ist und die Addreßliste generiert. Dieses Konfigurationsprogramm bewirkt, daß die CPU auf jede ins Netzwerk eingebundene Peripherievorrichtung zugreift, um die Speichergröße, die jede Brücke und Peripherievorrichtung im Systemspeicher benötigt, sowie ihren Ort im Netzwerk festzustellen. Dann merkt die CPU Speicherregister für jede Vorrichtung und jede Bus-zu-Bus-Brücke im Systemspeicher vor. Wenn die Speicherorte für jede Vorrichtung im Speicher gesetzt sind, bewirkt die Konfigurationssoftware, daß die CPU wieder auf jede Peripherievorrichtung im Netzwerk zugreift, um die entsprechenden Adressen der für sie im Systemspeicher reservierten Register in sie zu "schreiben".
- Während der normalen Kommunikation zwischen der CPU und dem Mehrfachbus-Netzwerk ist jede Peripherievorrichtung in der Lage, mit der CPU zu kommunizieren durch entweder Decodieren oder Codieren der Adressen der Register, die für sie im Systemspeicher reserviert sind. Dementsprechend erzeugt das Konfigurations-Softwareprogramm die Addreßliste des während der normalen Kommunikation benutzten Netzwerks durch Zuordnen der Speicherstellen zu jeder Peripherievorrichtung im Netzwerk.
- Die Europäische Patentanmeldung 0 443 876 offenbart ein Personalcomputersystem mit einem Programm im BIOS des Systems, das die E/A-Adressen und die Unterbrechungspriorität eines E/A-Controllers mit einer gewünschten Konfiguration konfiguriert, wenn das Personalcomputersystem an eine Erweiterungseinheit angeschlossen ist, die den E/A-Controller integriert.
- Bei diesem Verfahren zur Aufstellung der Addreßliste tritt jedoch ein Problem auf, weil die Konfigurationssoftware in der Lage sein muß, jede Brücke und Peripherievorrichtung im Netzwerk ausfindig zu machen und darauf zuzugreifen, bevor die Addreßliste aufgebaut ist. Also muß es eine "Vorab-Abbildung" des Netzwerks geben, noch bevor die Addreßliste aufgebaut werden kann.
- Ein bekanntes Verfahren, das zum Aufbauen dieser Addreßliste benutzt wird, ist das Anwenden eines anderen Softwareprogramms, das geschrieben ist, um die Vorab-Abbildung für eine spezifische physikalische Konfiguration des Netzwerks zu erzeugen. Dieses Programm generiert dann die Vorab-Abbildung jedes Mal, wenn das Rechnersystem beim Hochfahren nach dem Einschalten initialisiert wird. Um ein solches Programm zu schreiben, muß der Programmierer jedoch die genaue und vollständige hierarchische und Partner-Konfiguration der Busse und der Peripherievorrichtungen kennen, die im Netzwerk enthalten sind.
- Das Problem bei diesem Verfahren zum Aufbauen der Vorab- Abbildung ist, daß es inflexibel ist. Häufig ist es erwünscht, die physikalische Konfiguration der Busse und Vorrichtungen zu verändern, aus denen das Mehrfachbus-Netzwerk besteht. Zum Beispiel kann es erwünscht sein, bestimmte Busse und Vorrichtungen hinzuzufügen, um die Möglichkeiten des Systems zu erweitern.
- Wenn die Vorab-Abbildung durch ein Programm erzeugt wird, das für eine physikalische Konfiguration des Netzwerks spezifisch ist, muß jedesmal, wenn sich der Ort eines Busses ändert oder ein Bus oder eine Vorrichtung aus dem System entfernt wird, das Programm umgeschrieben werden. Ferner muß der Programmierer eine detaillierte Kenntnis über die Veränderungen der physikalischen Systemkonfiguration haben und muß den genauen Ort jedes Busses im System kennen. Zusammenfassend gesagt, die Anwendung eines Softwareprogramms, das spezifisch für eine bestimmte Buskonfiguration geschrieben ist, um eine Vorab-Abbildung zu erzeugen, ist schwerfällig und zeitaufwendig, falls später in der physikalischen Konfiguration des Netzwerks Änderungen vorgenommen werden sollen.
- Ein anderes Verfahren zum Erzeugen einer Vorab-Abbildung ist, die Vorab-Abbildung in jede Bus-zu-Bus-Brücke im Netzwerk fest zu "verdrahten". Bus-zu-Bus-Brücken sind Hardwarevorrichtungen, die benutzt werden, um zwei Busse im Netzwerk zusammenzuhängen. Wenn also das System beim Hochfahren initialisiert wird, ist die Vorab-Abbildung des gesamten Netzwerks bereits voreingestellt und vorgegeben.
- Wenn dieses Verfahren benutzt wird, ist die Inflexibilität ein noch größeres Problem. In einem Mehrfachbus-Netzwerk, das eine festverdrahtete Vorab-Abbildung benutzt, muß die Hardware, die den Ort der Bus-zu-Bus-Brücken und der Busse in der Abbildung vorsieht, jedesmal ausgetauscht oder "neuverdrahtet" werden, wenn eine Veränderung in der physikalischen Konfiguration des Netzwerks erforderlich ist.
- Dementsprechend wird ein Verfahren und Gerät zum Initialisieren eines Mehrfachbus-Informationsverarbeitungssystems benötigt, das eine Vorab-Abbildung für Busse in einem Mehrfachbus-Netzwerk erzeugt und nicht spezifisch für eine bestimmte physikalische Netzwerkkonfiguration ist.
- Ferner wird ein Verfahren und Gerät zum Initialisieren eines Mehrfachbus-Informationsverarbeitungssystems benötigt, das eine neue und unterschiedliche Vorab-Abbildung für ein Mehrfachbus-Netzwerk erzeugt, falls Änderungen in der physikalischen Konfiguration des Systems implementiert werden.
- Schließlich wird ein Verfahren und Gerät zum Initialisieren eines Mehrfachbus-Informationsverarbeitungssystems benötigt, das keine zusätzliche Hardware benötigt oder dessen Vorab- Abbildung in das Netzwerk festverdrahtet sein muß.
- Dementsprechend sieht die vorliegende Erfindung ein System und ein Verfahren gemäß den beiliegenden Ansprüchen vor, das eine Vorab-Abbildung eines Mehrfachbus-Netzwerks erstellt. Diese Vorab-Abbildung wird dann durch die Konfigurations- Software des Informationsverarbeitungssystems benutzt, um die Peripherievorrichtungen im Mehrfachbus-Netzwerk festzulegen, um sie zu konfigurieren. Wenn die physikalische Konfiguration des Mehrfachbus-Netzwerks sich in irgendeiner Weise verändern sollte, kann das Programm die entsprechenden Änderungen in der Vorab-Abbildung vornehmen, ohne das Programm umschreiben oder verändern zu müssen.
- Hier nachstehend soll die Erfindung nur beispielhaft anhand der begleitenden Zeichnungen beschrieben werden; in diesen sind:
- Fig. 1 ein Blockschaltbild eines Informationsverarbeitungssystems mit Mehrfachbussen;
- Fig. 2 ist ein Blockschaltbild der Konfigurationshardware einer Bus-zu-Bus-Brücke;
- Fig. 3 ist ein Blockschaltbild eines Konfigurationszyklus- Decodierblocks in der Bus-zu-Bus-Brücke in Fig. 2;
- Fig. 4 ist ein Blockschaltbild der Konfigurations-Hardware einer Hauptrechnerbrücke;
- Fig. 5 ist ein Flußdiagramm eines Softwareprogramms, das benutzt wird, um eine Vorab-Abbildung eines Mehrfachbus-Netzwerks vorzusehen;
- Fig. 6 ist ein Flußdiagramm einer Subroutine, die vom Softwareprogramm in Fig. 5 aufgerufen wird;
- Fig. 7 ist eine Fortsetzung des Flußdiagramms der Subroutine in Fig. 6; und
- Fig. 8 ist ein. Blockschaltbild eines typischen PCI-Netzwerks.
- Nehmen wir jetzt Bezug auf Fig. 1; ein generell unter 10 dargestelltes Doppelbus-Informationsverarbeitungssystem 10 umfaßt (i) einen Prozessor-, Cache- und Speicherkomplex 12, der über einen S-Bus (Systembus) 16 an S-Bus-Vorrichtungen 14 angeschlossen ist, und (ii) primäre Peripheriekomponenten- Verschaltungs-(PCI)-Vorrichtungen 18, die mit einer der S- Bus-Vorrichtungen, einer Primär-PCI-Hauptrechnerbrücke 20, über einen primären PCI-Bus 22 angeschlossen sind. Genauere Beschreibungen des Prozessor-, Cache- und Speicherkomplexes 12, der S-Bus-Vorrichtungen 14, der Primär-PCI-Vorrichtungen 18 und der sonstigen Elemente gemäß Fig. 1 werden nachstehend gegeben.
- Der Prozessor-, Cache- und Speicherkomplex 12 enthält eine Zentraleinheit (Central Processing Unit - CPU) 24, eine Eigenprüfungsschaltung 26, einen Speicher-Controller 28, einen CPU-Cache 30 und einen Basissystemspeicher 32. In der bevorzugten Ausführungsform ist die CPU 24 ein 32-Bit-Mikroprozessor, erhältlich bei Intel, Inc. unter der Handelsbezeichnung i486TM, wobei natürlich zu überlegen ist, daß das System 10 auch mit anderen CPU-Typen, insbesondere mit Mikroprozessoren vom x86-Typ aufgebaut werden kann. Die Eigenprüfungsschaltung 26 sieht eine eingebaute Selbsttestvorrichtung (BIST - built-in-self-test) für die CPU 24 beim Einschalten vor. Die Eigenprüfungsschaltung steuert jede beliebige Selbsttestvorrichtung, die in jeder der S-Bus-Vorrichtungen 14 vorgesehen sein kann.
- Die CPU 24 ist über einen CPU-Lokalbus 34 mit der Selbsttestschaltung 26 und dem Speicher-Controller 28 verbunden. Der Speicher-Controller 28 ist über einen Basissystemspeicherbus 36 mit dem Basissystemspeicher 32 verbunden. Der Speicher- Controller 28 steuert Lese- und Schreiboperationen auf den Basissystemspeicher 32 über den Basissystemspeicherbus 36, wobei diese Operationen entweder von der CPU 24 über den CPU- Lokalbus 34 oder von einer S-Busvorrichtung 14 über den S-Bus 16 ausgelöst werden. Da der Speicher-Controller die Fähigkeit aufweist, Operationen auf zwei Bussen zu verwalten, können Operationen über den Basissystem-Speicherbus 36 und den CPU- Lokalbus 34 gleichzeitig verwaltet werden. Der CPU-Lokalbus 34, der Basissystem-Speicherbus 36 und der S-Bus sind 32-Bit- Busse, deren jeder Daten-, Adressen- und Steuerinformationspfade enthält, wie es für solche Busse typisch ist.
- Der Basissystemspeicher 32 sieht systemweite Speicherfähigkeit vor und kann entweder nichtverschachtelte oder verschachtelte Speicherkarten enthalten. Der CPU-Cache 30 ermöglicht die kurzzeitige Speicherung von Informationen, die entweder im Basissystemspeicher 32 oder in einem Erweiterungsspeicher enthalten sind, der an anderer Stelle innerhalb des Systems 10 sitzt. Ein solcher Erweiterungsspeicher könnte z. B. in einer peripher angeschlossenen E/A-Vorrichtung im System angeordnet sein. Der CPU-Cache 30 beinhaltet einen Direktzugriffsspeicher (RAM - Random Access Memory), der benutzt wird, um zeitweilig Adressenorte des Basissystemspeicher 32 zu speichern, auf die CPU 24 häufig zugreift. Die CPU 24 greift direkt auf Informationen zu, die im CPU-Cache 30 abgespeichert sind, während Zugriffe auf Informationen, die im Basissystemspeicher 32 gespeichert sind, vom Speicher- Controller 28 abgewickelt werden müssen.
- Alle Zugriffe auf den Basissystemspeicher 32 werden vom Speicher-Controller 28 über den Systemspeicherbus 36 gesteuert. Der Speicher-Controller läßt Systemspeicherzyklen auf dem Basissystemspeicher 32 anlaufen, während dieser Zyklen hat entweder die CPU 24 oder eine der S-Bus-Vorrichtungen 14 über den Speicher-Controller 28 Zugriff auf den Basissystemspeicher. Während eines Speicherzyklus gibt der Speicher-Controller keine Informationen auf den S-Bus weiter. Wenn jedoch der Speicher-Controller feststellt, daß die Operation, die er verwaltet, ein E/A-Zyklus ist, legt der Speicher-Controller die Information auf den S-Bus zum Zugriff darauf durch eine S-Bus-Vorrichtung. Wenn der E/A-Zyklus für eine S-Bus-Vorrichtung bestimmt ist, reagiert die entsprechende S-Busvorrichtung mit einem Decodierbefehl an den Speicher-Controller. Wenn die E/A-Operation für eine primäre PCI- Vorrichtung 18 bestimmt ist, reagiert die PCI-Hauptrechnerbrücke 20 mit einem Decodierbefehl an den Speicher-Controller und legt den E/A-Zyklus auf die entsprechende primäre PCI- Vorrichtung.
- Ein System-Taktmodul 38 liefert ein Einzeltaktsignal für die S-Bus-Vorrichtungen 14, und ein Taktsignalpaar für die CPU 24. In der bevorzugten Ausführungsform arbeitet das an den S- Bus gelegte Taktsignal mit 33 MHz. Die zwei an die CPU 24 ge gebenen Signale arbeiten mit 33 MHz bzw. 66 MHz. Die CPU 24 braucht zwei Taktsignale, weil sie intern mit 66 MHz arbeitet, aber mit 33 MHz über den CPU-Lokalbus 34 kommuniziert.
- Kommunikationen zwischen dem Prozessor-, Cache- und Speicherkomplex 12 und den S-Bus-Vorrichtungen werden vom Speicher- Controller 28 über den 32-Bit-S-Bus 16 verwaltet. Angeschlossen an den S-Bus, wie in der bevorzugten Ausführungsform der Fig. 1 gezeigt, sind auch ein Direktspeicherzugriff- (DMA)-Controller 40 (DMA - Direct Memory Access), ein System- Entscheidungs--Steuerpunkt (SACP - System Arbitration Control Point) 42, ein Eingangs/Ausgangs (E/A) - (I/O) Controller 44, ein PCMCIA-Controller 46, und ein Leistungsverwaltungs- Controller 48. Ein wahlweiser Leistungsverwaltungs-Controller 50 kann an den Leistungsverwaltungs-Controller 49 angeschlossen sein, falls eine weiter entwickelte Leistungsverwaltungssteuerung gewünscht wird. Am S-Bus 16 ist ein Puffer 52 zwischen dem DMA-Controller 40 und dem E/A-Controller 44 vorgesehen. Wie jedoch in Fig. 1 gezeigt, ist dabei zu überlegen, daß noch andere S-Bus-Vorrichtungen 14, zusätzlich zu den gezeigten, an den S-Bus 16 angeschlossen werden können.
- Der PCMCIA-Controller 46 ist direkt an die PCMCIA-Kartenschlitze 54 gelegt. Peripherie-E/A-Vorrichtungen 56 können über Puffer 58 an die PCMCIA-Kartenschlitze 54 angeschlossen sein. Die peripheren E/A-Vorrichtungen 56 werden vom E/A- Controller 44 gesteuert. Angeschlossen an den E/A-Controller sind ein Uhrzeitgeber 60 und ein RAM-Modul 62. Der E/A- Controller 44 unterstützt eine Reihe Ports, einschließlich eines Maus-Ports 64, serielle Ports 66, einen Prallelport 68 und einen Tastaturport 70.
- Zusätzlich zur Unterstützung der S-Bus-Vorrichtungen 14 auf dem S--Bus 16 unterstützt das System 10 auch einen zweiten Hochgeschwindigkeits-Hochbandbreiten-Bus, der in der bevor zugten Ausführungsform der primäre PCI-Bus 22 ist. Der PCI- Bus 22 besteht aus einer neuen Busarchitektur, genannt PCI. Der primäre PCI-Bus 22 ist ein Hochleistungsbus, das heißt, er führt einen signifikanten Datentransfer in verhältnismäßig kurzer Zeit durch, bis zu 120 MBytes Daten die Sekunde. Der PCI-Bus erbringt diese hohe Leistung teilweise weil er direkt an andere Hochgeschwindigkeitsbusse, wie z. B. den S-Bus 14 angeschlossen ist, und kann auf diese Weise für einen schnellen Datentransfer zwischen der CPU 24 oder anderen S-Bus-Vorrichtungen 14 und den primären PCI-Vorrichtungen 18 sorgen. In der Tat, die Operation verschiedener hochintegrierter Vorrichtungen, wie z. B. bestimmte Graphikpackungen, erfordern ein Direktverbindungselement zu einem Systembus, wie z. B. den S-Bus, durch einen Hochleistungsbus, wie z. B. den PCI-Bus 22.
- Zusätzlich braucht die PCI-Busarchitektur keine Randlogik ("glue logic"), um angeschlossene Peripherievorrichtungen zu betreiben. Randlogik für andere Busse besteht in der Regel aus verschiedenen Hardware-Komponenten, wie z. B. Decodierer, Puffer oder Zwischenspeicher, die zwischen den Peripherievorrichtungen und dem Bus angeordnet sind.
- Der primäre PCI-Bus 22 arbeitet mit einem synchronen Taktsignal von 33 MHz, und die über den PCI-Bus geschickten Datenketten sind 32 Bits lang. Eine 32-Bit-Datenkette auf dem PCI-Bus heißt ein Doppelwort (DWORD), das sich aus 4 Bytes zusammensetzt, die jeweils aus 8 Datenbits bestehen.
- Die vom PCI-Bus getragenen Adressen- und Dateninformationen werden in ein Signal gemultiplext. Multiplexen beseitigt die Notwendigkeit für gesonderte Adressen- und Datenleitungen, was seinerseits die Menge der Signale reduziert, die in einer PCI-Busumgebung erforderlich sind, im Gegensatz zu anderen Busarchitekturen. Die Anzahl Signale, die in der PCI-Busarchitektur nötig ist, liegt zwischen 45 und 47, während nicht gemultiplexte Standardbusse in der Regel die doppelte Anzahl brauchen. Dementsprechend, weil die Anzahl der Signale reduziert ist, reduziert sich auch die Anzahl der Kontaktstifte, die zur Unterstützung einer an den PCI-Bus angeschlossenen Vorrichtung nötig ist, um eine entsprechende Anzahl. Die PCI-Architektur ist daher besonders für hochintegrierte Desktop-Rechnersysteme geeignet.
- Eine in weitere Einzelheiten gehende Beschreibung der Struktur und des Betriebs der PCI-Busarchitekur findet sich in "Peripheral Component Interconnect (PCI) Revision 1.0 Specification", veröffentlicht am 22. Juni 1992; "Preliminary PCI System Design Guide", Revision 0.6, veröffentlicht am 1. November 1992; "Peripheral Component Interconnect (PCI) Addin Board/Connector Addendum", (Entwurf), veröffentlicht am 6. November 1992; und "Peripheral Component Interconnect (PCI) Revision 2.0 Specification", veröffentlicht am 30. April 1993, alle von der PCI Special Interest Group.
- Primäre PCI-Vorrichtungen 18 im System 10 kommunizieren miteinander über den Primär-PCI-Bus 22. Primär-PCI-Vorrichtungen kommunizieren mit dem CPU-, Cache- und Speicherkomplex 12, und mit anderen auf dem S-Bus 16 residenten S-Bus-Vorrichtungen 14, über die PCI-Hauptrechnerbrücke 20, die selbst eine S-Bus-Vorrichtung ist, die auf dem S-Bus resident ist. Die PCI-Hauptrechnerbrücke 20 dient dann als Schnittstelle zwischen dem S-Bus 16 und dem primären PCI-Bus 22, und liefert ein wirksames Mittel der Kommunikation zwischen diesen zwei Bussen, sowie jeder Peripherievorrichtung, die möglicherweise auf diesen Bussen resident ist.
- Die PCI Hauptrechnerbrücke 20 ist ein Zusammenschaltmechanismus niedriger Latenz, durch den die CPU 24 oder eine andere S-Bus-Vorrichtung 14 direkt auf die Primär-PCI-Vorrichtungen 18 oder damit verbundene Vorrichtungen zugreifen kann. Die Brücke 20 sieht auch einen Hochleistungspfad vor, der den primären PCI-Vorrichtungen oder damit verbundenen Vorrichtungen einen schnellen und direkten Zugriff auf den Basissystemspeicher 32 ermöglicht. Zusätzlich bietet die Hauptrechnerbrücke 20 alle Hardware, die erforderlich ist, um eine Schnittstelle zwischen dem S-Bus 16 und dem Primär-PCI-Bus 22 zu bilden, so daß Daten zwischen diesen Bussen übertragen werden können.
- Der Primär-PCI-Bus 22 ist in der Lage, eine Reihe von Vorrichtungen zu unterstützen, die PCI-kompatibel sind. Wie in Fig. 1 gezeigt wird, können diese Vorrichtungen umfassen einen Graphik-Controller 72, einen seriellen SCSI-Controller 74 (small computer systems interface - Kleinrechnersystem- Schnittstelle), einen künftigen PCMCIA-Controller 76, eine Standard-Bus-Brücke 78 (z. B. ISA oder MICRO CHANNEL ("MC-A")) und eine PCI-Sekundärbrücke 80. Die Vorrichtungen gemäß Fig. 1, die an den Primär-PCI-Bus angeschlossen sind, sind jedoch nur ein Beispiel für ein System, das die PCI-Busarchitekur und damit die geoffenbarte Konfiguration implementiert, und ist keineswegs einschränkend für die Erfindung zu verstehen.
- Der Graphik-Controller 72 weist in der Regel eine Speichermöglichkeit in der Form des VRAM 82 auf, der es dem Graphik- Controller gestattet, Videobilder darin zu puffern, und kann jedes bekannte Graphikpaket steuern, das von der PCI-Busarchitektur unterstützt wird. Der SCSI-Controller 74 dient als Schnittstelle zwischen SCSI-Vorrichtungen 84, die an einem SCSI-Bus 86 hängen, und dem primären PCI-Bus 22, und kann jede SCSI-Vorrichtung steuern, die von der PCI-Busarchitektur unterstützt wird. Der künftige PCMCIA-Controller 76 ist mit Kartenschlitzen 88 verbunden und steuert diese.
- Die Standardbusbrücke 78 dient als Schnittstelle zwischen E/A-Vorrichtungen 90, die an einem Standardbus 92 (z. B. MC-A oder ISA) und dem primären PCI-Bus 22 hängen. Die Architektur einer MC-A-Version der Standardbusbrücke 78 ist der Gegenstand der folgenden gleichzeitig anhängigen Patentanmeldungen, übertragen auf die IBM Corporation:
- Sekundär-PCI-Vorrichtungen 94 sind über den Sekundär-PCI-Bus 96 mit der PCI-Brücke 80 verbunden. Jede beliebige Anzahl nichtidentifizierter Sekundär-PCI-Vorrichtungen kann mit dem Sekundär-PCI-Bus 96 verbunden sein. Die PCI-Brücke 80 dient als Schnittstelle zwischen einer beliebigen Anzahl an den sekundären PCI-Bus 96 angeschlossenen PCI-Vorrichtungen 94 und dem primären PCI-Bus 22.
- Jede beliebige Anzahl mit der PCI-Busarchitektur kompatibler Peripheriegeräte kann auf dem primären PCI-Bus 22 angeordnet sein, ohne daß andere PCI-Busse im gesamten Rechnersystem 10 vorhanden sind; oder jede beliebige Anzahl PCI Peripherievorrichtungen könnte mit jeder beliebigen Anzahl sekundärer PCI-Busse, zusätzlich zum PCI-Bus 96, an den primären PCI-Bus angeschlossen sein, angeschlossen über die gleiche Anzahl getrennter, entsprechender PCI-Brücken 80 an den primären PCI-Bus 22. Jeder sekundäre PCI-Bus könnte auch jede beliebige Anzahl zusätzlicher PCI-Busse aufweisen, die über PCI- Brücken an ihn angehängt sind, und diese "tertiären" PCI- Busse könnten weitere PCI-Busse in verschiedenen Kombinationen angehängt haben. Auf ähnliche Weise kann jeder PCI-Bus eine beliebige Anzahl PCI-Vorrichtungen angehängt haben. Jede Verbindung zwischen zwei PCI-Bussen muß über eine PCI-Brücke laufen, die identisch mit der Brücke 80 ist.
- Ferner ist es möglich, daß eine Vielzahl von Brücken, die identisch mit der PCI-Hauptrechnerbrücke 20 sind, von S-Bus 16 getrieben werden können. Jede dieser Hauptrechnerbrücken könnte dann eine beliebige Anzahl PCI-Busse, Brücken und Vorrichtungen in jeder beliebigen Anordnung angeschlossen haben, die der Konstrukteur des Systems 10 will. Der Teil des Systems 10, der PCI-Busarchitektur enthält, kann Mehrfachbusse und PCI-Peripherievorrichtungen enthalten, die in verschiedenen gleichgestellten und hierarchischen Kombinationen angeordnet sind (nachstehend im allgemeinen als PCI-Netz bezeichnet).
- Zusätzlich eliminiert eine alternative Konfiguration des Informationsverarbeitungssystems 10 den S-Bus 16, so daß die Hauptrechnerbrücke 20 den primären PCI-Bus 22 direkt an den CPU-Lokalbus 34 hängt. Wenn es noch weitere PCI-Hauptrechnerbrücken im System gibt, sind diese ebenso direkt an den CPU- Lokalbus 34 angeschlossen. In dieser Konfiguration könnte jede S-Busvorrichtung 14 direkt an den CPU-Lokalbus 34 angeschlossen sein. Da der S-Bus 16 und der CPU-Lokalbus 34 unter Verwendung identischer Architekturen arbeiten, funktioniert die nachstehend beschriebene Erfindung auf gleiche Weise in jeder alternativen Ausführungsform wie in der bevorzugten Ausführungsform, die in Fig. 1 beschrieben ist.
- Eine Partnerkombination kann sein eine Gruppe von Bussen oder PCI-Vorrichtungen auf einer Ebene des PCI-Netzwerks. Zum Beispiel sind der Graphik-Controller 72, Standardbusbrücke 78 und SCSI-Controller 74 untereinander gleichberechtigt. Wenn mehrere Sekundär-PCI-Busse an den Primär-PCI-Bus 22 angeschlossen wären, anstatt nur einer, 80, wären sie alle gleichberechtigt.
- Die hierarchische Kombination des PCI-Netzwerks sind nur die Schichten der PCI-Busse, die alle an den Primär-PCI-Bus 22 angeschlossen sind. Zum Beispiel liegt der Sekundär-PCI-Bus auf der zweiten Ebene der Hierarchie des PCI-Netzwerks, d. i. "hinter" oder "unter" der PCI-Brücke 80. In der bevorzugten Ausführungsform der Erfindung ist das Mehrfachbus-Netzwerk des Rechnersystems ein PCI-Netzwerk, wie in Fig. 1 dargestellt und oben beschrieben ist. Jedoch beschränkt sich die hier beschriebene Erfindung nicht auf die PCI-Busarchitektur, sondern ist anwendbar auf jedes beliebige Mehrfachbus-Rechnersystem, in dem eine Vorab-Abbildung des Busnetzwerks erzeugt werden muß, bevor das System von der allgemeinen Konfigurationssoftware während der Initialisierung des Systems konfiguriert werden kann.
- In der PCI-Busarchitektur hat jede PCI-Brücke und PCI-Peripherievorrichtung einen Konfigurationsraum. Dieser Konfigurationsraum besteht aus 256 Bytes Registerraum. Der Konfigurationsraum jeder Peripherievorrichtung und Brücke enthält die Daten, die zum Aufbau der während der normalen Kommunikationen anzuwendenden Addreßliste durch die allgemeine Konfigurationssoftware benutzt wird. Wenn also die CPU 24 die Konfigurationssoftware abarbeitet, muß sie auf den Konfigurationsraum jeder Vorrichtung oder Brücke zum Konfigurieren des Systems und zum Aufbau der Addreßliste zugreifen und darin lesen oder darauf schreiben.
- Nehmen wir jetzt Bezug auf Fig. 2; dort wird ein Funktionsblockdiagramm der Konfigurationshardware der PCI-Brücke 80 gezeigt. Die PCI-Brücke 80 hat zwei 32-Bit-Register, genannt Konfigurationsadresse (CONFIG_AD) 150 und Konfigurationsdaten (CONFIG_DATA)(nicht dargestellt), die spezifisch für Konfigurationszwecke benutzt werden. CONFIG_AD 150 ist ein Signalspeicher, was bedeutet, daß er nach Einschreiben von Daten seinen Inhalt behält, bis ein Rückstellsignal eingeht.
- CONFIG_AD 150 und CONFIG_DATA sind über die Eingangsleitung 156 an den Primär-PCI-Bus 22 angeschlossen. Die CPU überträgt Daten über den Primär-PCI-Bus 22 und die Leitung 156 in CONFIG_AD 150 und CONFIG_DATA. CONFIG_AD 150 enthält den Ort der Peripherievorrichtung oder -Brücke, die die CPU 24 zum Konfigurieren auf der Grundlage der Vorab-Abbildung braucht, und es ist der Ort des Byte im Konfigurationsraum dieser Vorrichtung, auf das zugegriffen werden muß.
- CONFIG_DATA enthält die Daten, die im Konfigurationsraum der Vorrichtung bzw. der Brücke in das durch CONFIG_AD 150 identifizierte Byte geschrieben werden müssen. Wenn die CPU auf eine bestimmte Vorrichtung oder Brücke zugreift, um Daten in deren Konfigurationsraum zu lesen, dann erhält CONFIG_DATA die in dem bestimmten, von CONFIG_AD 150 identifizierten Byte enthaltenen Daten, die von der CPU 24 gelesen werden müssen.
- Die ersten zwei Bits von CONFIG_AD 150 sind Aktivierungs- Bits, Bit-Nummern 0 und 1, die angeben, ob ein Konfigurationsraumzugriff (Konfigurationszyklus) auf dem Bus direkt hinter der Brücke 80 gefahren werden soll, der in der bevorzugten Ausführungsform PCI-Bus 96 ist. Somit ist der Wert dieser Bits "01" und damit fährt die PCI-Brücke einen Konfigurationszyklus auf dem PCI-Bus 96.
- Die restlichen Bits von CONFIG_AD 150, abgesehen von den Bitnummern 24-31, die unbenutzt bleiben, werden in vier spezifische Felder unterteilt. Das erste Feld ist das Feld BUS#, das sind die Bitnummern 16-23 von CONFIG_AD 150. Das Feld BUS# identifiziert den Bus im PGI-Netzwerk, an den die Vorrichtung angeschlossen ist, auf die zugegriffen werden soll.
- Das zweite Feld ist das Feld DEV#, das sind die Bitnummern 11-15. Dieses Feld identifiziert die Vorrichtung, auf die zugegriffen werden soll.
- Das dritte Feld ist das Feld FUN#, das sind die Bitnummern 8- 10. Dieses Feld identifiziert einen codierten Wert, der be nutzt wird, um 1 bis 8 mögliche Funktionen auf der von DEV# spezifizierten Vorrichtung anzuwählen.
- Das vierte und letzte Feld ist das Feld REG#, das aus den Bitnummern 2-7 besteht. Dieses Feld identifiziert das Register, auf das im Konfigurationsraum der Vorrichtung zugegriffen werden soll, auf die der Konfigurationszyklus abzielt.
- CONFIG_AD 150 ist über eine Vielzahl Eingangsleitungen 154 a-f an einen Konfigurationszyklus-Decodierblock (CONFIG BLOCK) 152 angeschlossen. CONFTG_AD 150 ist ferner über die Leitung 156 mit dem Primär-PCI-Bus 22 verbunden. CONFIG BLOCK 152 ist auch durch eine Eingangsleitung 157, die IDSEL bezeichnet ist, an den Primär-PCI-Bus 22 angeschlossen.
- Leitung 156 verbindet auch drei weitere Register in der PCI- Brücke 80 mit dem Primär-PCI-Bus 22, ein Vorrichtungsattribut-Register (DEV_ATTR) 158, ein Busnummernregister (BUS_NO) 160, und ein Sub-Bus-Nummernregister (SUB_BUS_NO) 162. DEV_ATTR 158, BUS_NO 160 und SUB_BUS_NO 162 liegen auch über die Leitungen 164, 166 und 168 am CONFIG BLOCK 152.
- DEV_ATTR 158 kann auch mindestens ein Bit lang sein, weil sein niedrigstwertiges Bit (LSB) das einzige bei der Konfiguration benutzte Bit ist. Der einzige Zweck von DEV_ATTR 158 ist, anzuzeigen, ob das Gerät, in dem DEV_ATTR 158 enthalten ist, eine PCI-Brücke oder eine Peripherievorrichtung ist. Das LSB von DEV_ATTR 158 steht immer auf 1, um anzuzeigen, daß die PCI-Brücke 80 auch wirklich eine PCI-Brücke ist. Wenn DEV-ATTR 158 in einer Peripherievorrichtung wäre, würde es immer auf 0 gesetzt sein.
- BUS_NO 160 ist 8 Bits lang. BUS_NO 160 enthält eine Identifikationsnumner für den Bus direkt hinter der PCI-Brücke 80, in diesem Fall Sekundär-PCI-Bus 96.
- SUB_BUS_NO 162 ist ebenfalls 8 Bits lang. Der SUB_BUS_NO 162 enthält eine Identifikationsnummer des Busses mit der höchsten Identifikationsnummer hinter der Brücke 80, die wieder einmal der Sekundär-PCI-Bus 96 ist, weil es hinter der PCI-Brücke 80 keine weiteren Busse gibt.
- Die in BUS_NO 160 und SUB_BUS_NO 162 gespeicherten Identifikationsnummern ergeben die Vorab-Abbildung, die für die Initialisierung des oben erklärten Netzwerks erforderlich ist. Die angewandte erfindungsgemäße Methode, die zum Erzielen dieser Identifikationsnummern benutzt wird, wird nachstehend detailliert beschrieben.
- Die PCI-Brücke 80 weist auch noch zwei andere Funktionsblöcke auf: einen PCI-Busadressen-Decodierblock (DECODER BLOCK) 170, und einen PCI-Buszyklus-Übersetzungsblock (TRANS BLOCK) 172. Der DECODE BLOCK 170 und der TRANS BLOCK 172 sind über die Leitung 174 an den Primär-PCI-Bus 22 gelegt. TRANS BLOCK 172 liegt auch über Leitung 156 am Primär-PCI-Bus 22.
- DECODE BLOCK 170 liegt über die Ausgangsleitungen 176 und 178, identifiziert als CFG_RD und CFG_WR, am CONFIG BLOCK 152. DECODE BLOCK 170 liegt auch über eine Ausgangsleitung 180 an CONFIG_AD 150.
- TRANS BLOCK 172 ist durch eine interne Zyklusleitung (INT_CYC) 182 und eine externe Zyklusleitung (EXT_CYC) 184 an den CONFIG BLOCK 152 angeschlossen. TRANS BLOCK 172 empfängt einen Eingang auch durch eine Eingangsleitung 186. TRANS BLOCK 172 ist auch durch eine Ausgangsleitung 188 an den Sekundär-PCI-Bus 96 angeschlossen.
- DECODE BLOCK 170 hat die Funktion, die Steuersignale von der CPU 124 über den PCI-Bus 22 und die Leitung 174 aufzunehmen und sie in ein Lese- bzw. Schreibsignal umzusetzen, das an CONFIG BLOCK 152 bzw. CONFIG_AD 150 gesendet werden muß. Aktivierungssignale an CONFIG BLOCK 152 werden auf CFG_RD bzw. CFG_WR generiert und geben an, ob ein bestimmter Konfigurationszyklus eine Lese- oder eine Schreiboperation ist. Mit anderen Worten, wenn DECODE BLOCK 170 ein Aktivierungssignal auf CFG_RD generiert, dann ist der augenblickliche Konfigurationszyklus eine Leseoperation. Wenn DECODE BLOCK 170 die Leitung 180 aktiviert, dann ermöglicht er der CPU 24, über die Leitung 156 in CONFIG_AD 150 zu lesen oder zu schreiben, um einem Konfigurationszyklus einzuleiten.
- CONFIG BLOCK 152 ist das Zentrum der gesamten Konfigurationsoperationen in der PCI-Brücke 80. Eine Funktion von CONFIG BLOCK 152 ist die Aufnahme der Inhalte von CONFIG_AD 150 über die Vielzahl der Leitungen 154 a-f, die Aufnahme der Inhalte von BUS_NO 160 und SUB_BUS_NO 162, und Vergleichen des Felds BUS# von CONFIG_ADD 150 mit dem Inhalt von BUS_NO 160 und SUB_BUS_NO 162. Dann, auf der Grundlage dieses Vergleichs und weiterer Informationen, die von IDSEL 157 her eingehen, bestimmt CONFIG BLOCK 152, ob der augenblickliche Konfigurationszyklus für eine an den Sekundär-PCI-Bus 96 angeschlossene Peripherievorrichtung, eine an einen anderen Bus im PCI- Netzwerk angeschlossene Vorrichtung, die irgendwo hinter der PCI-Brücke 80 liegt (sofern natürlich die in den Fig. 1 und 2 gezeigte Ausführungsform keine weiteren PCI-Brücken aufweist), oder an die PCI-Brücke selbst gerichtet ist.
- Wenn der Konfigurationszyklus für irgendeinen Bus hinter der PCI-Brücke 80 bestimmt ist, decodiert CONFIG BLOCK 152 den Inhalt von CONFIG_AD 150 und schickt ihn an TRANS BLOCK 172. CONFIG BLOCK 152 schickt auch über EXT_CYC 184 ein Aktivie rungssignal an TRANS BLOCK 172, wenn der augenblickliche Konfigurationszyklus auf eine Vorrichtung abzielt, die hinter PCI Brücke 80 an einen Bus angeschlossen ist.
- Wenn der Konfigurationszyklus für die PCI-Brücke 80 selbst bestimmt ist, decodiert CONFIG BLOCK 152 das Feld REG# zum Identifizieren eines Registers in seinem eigenen Konfigurationsraum und führt eine Lese- oder Schreiboperation gegenüber diesem internen Register durch. Wenn der Konfigurationszyklus intern ist, sendet CONFIG BLOCK 152 auch über INT_CYC 182 ein Aktivierungssignal an TRANS BLOCK 172.
- TRANS BLOCK 172 führt diese gesamte Taktung und Signalübersetzung zwischen dem Primär-PCI-Bus 22 und dem Sekundär-PCI- Bus 96 durch, so daß Signale zwischen ihnen hin- und hergeschickt werden können. Diese Übersetzung ist die Primärfunktion der PCI-Brücke 80 und geht über den Umfang der hier beschriebenen Erfindung hinaus.
- Im Hinblick auf Konfigurationszyklen sind die einzigen Funktionen von TRANS BLOCK 172 das Übertragen der codierten Inhalte von CONFIG_AD 150 aus CONFIG BLOCK 152 auf den Sekundär-PCI-Bus 96. TRANS BLOCK 172 wird diese Funktion nur dann durchführen, wenn er ein Aktivierungssignal auf EXT-CYC 184 vom CONFIG BLOCK 152 erhält.
- Nehmen wir jetzt Bezug auf Fig. 3; hier wird ein Blockdiagramm von CONFIG BLOCK 152 gezeigt. CONFIG BLOCK 152 beinhaltet einen Komparator 190, einen ersten Logikblock 192, einen zweiten Logikblock 194, und einen Decodierer 196, die alle über verschiedene Signalleitungen gemäß Fig. 3 angeschlossen sind. Logikblock 192 beinhaltet einen Decodierer 198 und ein UND-Gatter (AND1).
- Das Feld BUS# in CONFIG_AD 150 ist über Leitung 154a an den Komparator 190 und den Decodierer 196 angeschlossen. Das Feld REG# von CONFIG_AD 150 liegt über die Leitung 154d an den Decodieren 196 und 198. Das Feld DEV# von CONFIG_AD 150 ist über Leitung 154b an den Logikblock 194 und an den Decodierer 196 angeschlossen. Das Feld FUN# von CONFIG_AD 150 ist über Leitung 154c an den Decodierer 196 angeschlossen.
- Weitere Eingänge zum CONFIG BLOCK 152 sind IDSEL 157 und Bitnummern 0 und 1 von CONFIG_AD 150, die an AND1 des Logikblocks 192 angeschlossen sind. CFG_RD 176 und CFG_WR 178 sind ebenfalls beide als Eingänge an die Logikblöcke 192 und 194 angeschlossen. BUS_NO 160 und SUB_BUS_NO 162 sind über die Leitungen 166 und 168 als gesonderte Eingänge an den Komparator 190 angeschlossen.
- Die Ausgangsleitungen vom Logikblock 192 sind INT_CYC 182, eine erste Ausgangsleitung 200 von Decodierer 198, und eine zweite Ausgangsleitung 202. Wie oben erklärt, werden diese alle benutzt, um Konfigurationszyklen durchzuführen, die an interne Register der PCI-Brücke 80 gerichtet sind.
- EXT_CYC 184 ist der einzige Ausgang vom Logikblock 194. Leitung 186 schließt den Ausgang des Decodierers 196 an TRANS BLOCK 172 an. Der Komparator 190 hat zwei Ausgangsleitungen, 204 und 206.
- Im Betrieb, wenn ein Konfigurationszyklus der CPU 24 den Primär-PCI-Bus 22 ansteuert, interpretiert ihn die PCI-Brücke 80 als an eines von drei Zielen gerichtet: Ein Register innerhalb des Konfigurationsraums einer PCI-Brücke selbst, ein Register innerhalb des Konfigurationsraums einer Peripherievorrichtung oder einer anderen PCI-Brücke, die an den Sekundär-PCI-Bus 96 angeschlossen ist, oder ein Register innerhalb des Konfigurationsraums einer Peripherievorrichtung oder einer PCI-Brücke, die an einen PCI-Bus unter dem Sekundär-PCI-Bus 96 in der Hierarchie des PCI-Netzwerks angeschlossen ist.
- Zum Anlaufenlassen eines Konfigurationszyklus auf dem Primär- PCI-Bus 22 schickt die CPU 24 Steuersignale durch den Primär- PCI-Bus 22 an den DECODE BLOCK 170, was den DECODE BLOCK 170 veranlaßt, ein Schreibsignal über Leitung 180 an CONFIG_AD 150 zu schicken. Das ermöglicht es der CPU, eine Konfigurationsadresse in CONFIG_AD 150 zu schreiben, und diese Adresse wird dort zwischengespeichert, bis CONFIG_AD 150 durch DECODE BLOCK 170 rückgestellt wird. Auf den Inhalt von CONFIG_AD 150 wird dann durch CONFIG BLOCK 152 über die Mehrfachleitungen 154a-f zugegriffen.
- Wenn der Konfigurationszyklus an ein internes Register der PCI-Brücke 80 gerichtet ist, wird der Wert der Bit-Nummern 0 und 1 von CONFIG_AD 150 auf "00" gesetzt. Zusätzlich wird ein Aktivierungssignal von der CPU 24 durch die PCI-Hauptrechnerbrücke 20 an den CONFIG BLOCK 152 auf IDSEL 157 geschickt.
- Das Aktivierungssignal auf IDSEL 157 und das Signal "00" von den Bit-Nummern 0 und 1 in CONFIG_AD 150 werden in AND1 im Logikblock 192 eingegeben, die zusammen ein hochliegendes Aktivierungssignal an Ausgang von AND1 erzeugen. Dieses Signal erregt den Decodierer 198, das Feld REG# in CONFIG_AD 150 zu decodieren. Der Decodierer generiert dann einen Ausgang auf Leitung 200, der auf die internen Konfigurationsregister der PCI-Brücke 80 zugreift, die REG# entspricht.
- Wenn auf ähnliche Weise der DECODE BLOCK 170 ein Aktivierungssignal entweder auf CFG_RD 176 oder CFG_WR 178 generiert, in Abhängigkeit davon, ob während dieses bestimmten Konfigurationszyklus eine Lese- oder eine Schreiboperation gefahren wird. Der Logikblock 192 gibt den Lese- bzw. Schreibbefehl über Leitung 202 aus und eine Lese- bzw. Schreiboperation wird auf das interne Register durchgeführt, auf das vom Decodiererausgang auf Leitung 200 zugegriffen wird. Logikblock 12 aktiviert auch INT_CYC 182, was dem TRANS BLOCK 172 signalisiert, daß der Konfigurationszyklus intern auf die PCI-Brücke gerichtet ist und keine Information auf den Sekundär-PCI-Bus 96 übertragen werden muß.
- Wenn der Konfigurationszyklus nicht an den internen Konfigurationsraum der PCI-Brücke 80 gerichtet ist, wird IDSEL nicht aktiviert und die Bit-Nummern 0 und 1 der CONFIG_AD 150 haben den Wert "01", wie von der CPU 24 über die PCI-Hauptrechnerbrücke 20 voreingestellt ist. Somit aktivieren diese Signale AND1 und den Decodierer 198 nicht, und damit wird auch INT_CYC 182 nicht aktiviert und keine interne Konfiguration findet statt.
- Statt dessen erhält der Komparator 190, nachdem die Konfigurationsadresse in CONFIG_AD 150 zwischengespeichert ist, das Feld BUS# der CONFIG_AD 150 als Eingang über die Leitung 154a. Gleichzeitig empfängt der Komparator 190 auch den Inhalt des BUS_NO 160 und SUB_BUS_NO 162 als Eingänge über die Leitungen 166 bzw. 168.
- Der Komparator 190 vergleicht dann den Wert BUS# mit den Werten BUS_NO 160 und SUB_BUS_NO 162. Wenn BUS_NO 160 gleich BUS# ist, dann ist der augenblickliche Konfigurationszyklus für eine Peripherievorrichtung oder eine andere PCI-Brücke bestimmt, die an den Sekundär-PCI-Bus 96 angeschlossen sind, und Leitung 204 wird durch den Komparator 190 aktiviert, die den Decodierer 196 und den Logikblock 194 aktiviert.
- Sobald der Decodierer 196 aktiviert wird, decodiert er das Feld DEV# in CONFIG_AD 150 auf einen 21-Bit-Wert. Jede Bit- Nummer des decodierten 21-Bit-Werts kann an eine Aktivie rungsleitung (IDSEL) einer Vorrichtung oder an eine PCI- Brücke am Sekundär-PCI-Bus 96 angeschlossen sein. Somit können in der bevorzugten Ausführungsform maximal 21 Peripherievorrichtungen oder PCI-Brücken an den Sekundär-PCI-Bus 96 oder an einen anderen PCI-Bus im PCI-Netzwerk angeschlossen werden.
- Nur eines dieser Bits wird auf ein Aktivierungs-Hoch, d. i. auf den Wert "1" gesetzt, während der Rest auf tief, d. i. "0" gesetzt wird. Somit aktiviert der decodierte 21-Bit-Wert in DEV# nur die Vorrichtung auf der Sekundär-PCI-Brücke 96, die das Ziel des Konfigurationszyklus ist.
- Der Decodierer stellt bei Aktivierung den Wert der Bit-Nummern 0 und 1 der CONFIG_AD 150 auf "00". Das signalisiert den Vorrichtungen und PCI-Brücken, die an den Sekundär-PCI-Bus 96 angeschlossen sind, daß die vorliegende Konfiguration. auf eine von ihnen abzielt.
- Der Decodierer 196 gibt ganz einfach die Werte von FUN# und REG# an den TRANS BLOCK 172 weiter zum Legen auf den Sekundär-PCI-Bus 96.
- Wenn der Wert BUS# größer als der Wert BUS_NO 160, jedoch kleiner oder gleich SUB_BUS_NO 162 ist, dann ist der augenblickliche Konfigurationszyklus für eine Peripherievorrichtung oder PCI-Brücke bestimmt, die an den PCI-Bus angeschlossen ist, der niedriger in der Hierarchie des PCI- Netzwerks steht als der Sekundär-PCI-Bus 96. In dieser Situation wird der Komparator 190 die Leitung 266 aktivieren, die den Logikblock 194 aktiviert.
- Zusätzlich, wenn diese bestimmte Situation eintritt, ist der Decodierer 196 nicht aktiviert. Daher gibt er die vorliegenden Werte aller Felder in CONFIG_AD 150, einschließlich des Werts "01" der Bit-Nummern 0 und 1 ganz einfach an den TRANS BLOCK 172 weiter.
- Wenn der Logikblock 194 über die Leitungen 204 oder 206 aktiviert ist, aktiviert er EXT_CYC 184, was dem TRANS BLOCK 172 signalisiert, daß der augenblickliche Konfigurationszyklus an eine Vorrichtung oder PCI-Brücke gerichtet ist, die außerhalb der PCI-Brücke 80 liegt. Dementsprechend überträgt TRANS BLOCK 172 die Werte der Felder in CONFIG_AD 150, die es über die Leitungen 186 von CONFIG BLOCK 152 erhält, auf den Sekundär-PCI-Bus 96.
- Wenn der Konfigurationszyklus auf eine Vorrichtung oder PCI- Brücke auf dem Sekundär-PCI-Bus 96 abzielt, aktiviert der decodierte Wert DEV# die richtige Vorrichtung oder Brücke und, weil ihre Bit-Nummern 0 und 1 auf "00" gesetzt sind, wird ein interner Konfigurationszyklus auf ein Register im Konfigurationsraum dieser betreffenden Vorrichtung ausgeführt. Das Register wird durch REG# identifiziert. Die Steuersignale auf dem Sekundär-PCI-Bus 96 von der CPU 24 bestimmen, ob der Konfigurationszyklus eine Lese- oder eine Schreiboperation ist.
- Wenn der Konfigurationszyklus auf eine Vorrichtung oder PCI- Brücke abzielt, die mit einem PCI-Bus unter dem Bus 96 in der Hierarchie des PCI-Netzwerks verbunden ist, dann wird CONFIG_AD 150 einfach an die PCI-Brücken hinter dem Bus 96 weitergegeben, die jeweils die oben beschriebene BUS# -Vergleichsprozedur durchführen, die dann jeweils die oben beschriebene BUS#-Vergleichsprozedur durchführen, bis eine Brücke gefunden wird, die eine BUS_NO gleich BUS# aufweist. Diese bestimmte PCI-Brücke decodiert dann DEV# und der Konfigurationszyklus wird im Konfigurationsraum der angewählten Vorrichtung ausgeführt, die an den Bus auf der Sekundärseite dieser Brücke angeschlossen ist.
- So wird die Hardware jeder PCI-Brücke in einem PCI-Netzwerk standardisiert und verändert sich nicht von Brücke zu Brücke. Zusätzlich ist die festverdrahtete Logik bekannt, die jede einzelne Brücke enthält.
- Nehmen wir jetzt Bezug auf Fig. 4; dort wird ein Blockschaltbild der Hardware gezeigt, die für die Konfiguration der Hauptrechnerbrücke 20 benutzt wird. Wie Fig. 4 zeigt, ist die Konfigurationshardware der Hauptrechnerbrücke 20 im wesentlichen ähnlich der Konfigurationshardware der PCI-Brücke 80, die in Fig. 2 dargestellt ist. Die Hauptrechnerbrücke 20 weist einen DECODE BLOCK 208, einen CONFIG BLOCK 210 und einen TRANS BLOCK 212 auf. Sie hat auch die folgenden Register: Ein CONFIG_AD-Register 214, ein DEV_ATTR-Register 216, ein BUS_NO-Register 218 und ein SUB_BUS_NO-Register 220. Die Funktion dieser Komponenten der Hauptrechnerbrücke 20 sind im wesentlichen die gleichen wie ihre entsprechenden Gegenstücke in der PCI-Brücke 80.
- Die einzigen Hardware-Unterschiede zwischen der Hauptrechnerbrücke 20 und der PCI-Brücke 80 sind, daß die Hauptrechnerbrücke 20 etwas zusätzliche Hardware enthält, um ein Informationsverarbeitungssystem 10 unterzubringen, das eine Vielzahl von Hauptrechnerbrücken und PCI-Netzwerke aufweist. Diese zusätzliche Hardware umfaßt ein Konfigurationsaktivierungsregister (CONFIG_ENBL) 222, das durch Aktivierungsausgang (ENBL_OUT) 224 an den S-Bus 16 angeschlossen ist. Eine weitere Ausgangsleitung 226 läuft vom DECODE BLOCK 208 zu CONFIG_ENBL 222, und gibt Lese- und Schreibsignale an CONFIG_ENBL 222 weiter. Ein UND-Gatter 228 ist auch mit einem Eingang vom höchstwertigen Bit in CONFIG_AD 214 und mit einem anderen Eingang vom S-Bus 16, genannt EXT_ENBL 232, vorgesehen. Das UND-Gatter hat auch eine Ausgangsleitung 234.
- CONFIG BLOCK 210 weist auch einen kleinen Unterschied auf beim Vergleich mit dem CONFIG BLOCK 152. Das AND1-Gatter des CONFIG BLOCKS 210 (nicht dargestellt) erhält zwei seiner Eingänge von DEV# und vom Komparator von CONFIG BLOCK 210 anstatt von den Bit-Nummern 0 und 1 der CONFIG-AD wie in CONFIG BLOCK 152. Damit erlaubt AND1 von CONFIG BLOCK 210 einen Konfigurationszyklus auf die internen Register der Hauptrechnerbrücke 20 nur dann, wenn BUS# und DEV# gleich 0 sind. Wenn DEV# größer als 0 und BUS# gleich 0 ist, dann wird der Konfigurationszyklus vom CONFIG BLOCK 210 an eine Vorrichtung gerichtet, die an den PCI-Bus angeschlossen ist, der mit der Sekundärseite der Hauptrechnerbrücke verbunden ist.
- CONFIG_ENBL 222 ist ein 32-Bit-Register, das in einem Mehrfach-Hauptrechnerbrückensystem jedes einzelne Bit an EXT_ENBL 232 einer anderen Hauptrechnerbrücke angeschlossen hat. Wenn dementsprechend einen Konfigurationszyklus auf die internen Register einer bestimmten Hauptrechnerbrücke gerichtet ist, geht nur ein Bit der CONFIG_ENBL hoch und dieses Bit wird angeschlossen an den EXT_ENBL der Hauptrechnerbrücke, an die der Konfigurationszyklus gerichtet ist.
- Im Betrieb bewirkt die CPU 24, daß der DECODE BLOCK 208 einen Schreibbefehl auf Leitung 226 zu CONFIG_ENBL 222 generiert, und ein Wert, der von der CPU 24 auf den S-Bus 16 gelegt wird, wird in CONFIG_ENBL 222 geschrieben. Dieser 32-Bit-Wert hat nur ein Bit hoch und der Rest liegt tief.
- Die CPU 24 bewirkt dann, daß der DECODE BLOCK 208 ein Signal über Leitung 226 sendet, das bewirkt, daß CONFIG_ENBL 222 den 32-Bit-Wert auf den S-Bus 16 durch ENBL_OUT 224 überträgt. Dann wird die Hauptrechnerbrücke, die ihr EXT_ENBL mit dem Bit im 32-Bit-Signal verbunden hat, das einen hohen Wert anzeigt, für den augenblicklichen Konfigurationszyklus aktiviert.
- Nehmen wir an, daß EXT_ENBL 323 durch die hochliegende Bit- Nummer in ENBL_OUT 224 aktiviert wird, wenn das höchstwertige Bit in CONFIG_AD 214 hoch liegt, wie es von der CPU 24 gesetzt wird, dann generiert das UND-Gatter 228 ein Aktivierungssignal auf Leitung 234. Das bewirkt, daß CONFIG BLOCK 210 einen Konfigurationszyklus auf die internen Register der Hauptrechnerbrücke 20 durchführt, unter der Annahme, daß sowohl DEV# als auch BUS# gleich 0 sind. Wenn die Bit-Nummer in CONFIG_ENBL 222, die hoch gesetzt ist, an EXT_ENBL einer anderen Hauptrechnerbrücke angeschlossen ist, dann wird diese bestimmte Brücke für einen internen Konfigurationszyklus aktiviert.
- Alle PCI-Hauptrechnerbrücken in einem Informationsverarbeitungssystem können aus der gleichen Hardware bestehen. Jedoch braucht nur eine einzige der Hauptrechnerbrücken ein CONFIG_ENBL-Register. So kann man zwecks Beibehaltung der Standardisierung der Hauptrechnerbrücken in einem System jede Brücke mit einem CONFIG_ENBL-Register herstellen, aber nur das Register einer einzigen Hauptrechnerbrücke je System wird angeschlossen und benutzt. Auch kann das CONFIG_ ENBL-Register, falls gewünscht, außerhalb der Hauptrechnerbrücken liegen.
- Wie die obige Erklärung des Zugriffs auf den Konfigurationsraum zeigt, sind dementsprechend die Vorab-Abbildung, die in der bevorzugten Ausführungsform zum Zugriff auf die Konfigurationsräume der verschiedenen Brücken und Vorrichtungen, aus denen das PCI-Netzwerk besteht, benutzt wird, die Werte BUS_NO und SUB_BUS_NO. Bisher gab es kein Verfahren oder Gerät, das die korrekten Werte für BUS-NO und SUB_BUS_NO ergeben hätte, wenn sich die physikalische Konfiguration des PCI-Netzwerks änderte, ohne die Umprogrammierung der Konfigu rations-Software des gesamten Systems. Das nachstehend beschriebene erfindungsgemäße Software-Programm ergibt jedoch die richtigen Werte für BUS_NO und SUB_BUS_NO für jede Brücke im PCI-Netzwerk ohne Umprogrammierung, auch wenn sich die physikalische Konfiguration des PCI-Netzwerks zwischen Abschalten und Wiedereinschalten des Systems 10 grundlegend ändert.
- Dieses Programm ist im Systemspeicher 32 gespeichert und wird von der CPU 24 während der Systemkonfigurierung angesteuert und gefahren, noch bevor ein anderer Konfigurationszyklus anläuft. Das Programm bewirkt mehrere Lese- und Schreibzyklen, die in den internen Konfigurationsregistern, BUS_NO und SUB_BUS_NO, der PCI-Brücken und Hauptspeicherbrücken im System ausgeführt werden müssen.
- Das Programm kann unterteilt werden in zwei Hauptentscheidungs- und Aktionspfade (Flußpfade). Der erste Flußpfad ist der Hauptflußpfad des Programms und ist in Fig. 5 dargestellt. Dieser Hauptflußpfad hat die Fähigkeit, die Bus- Nummern und Sub-Bus-Nummern der Informationsverarbeitungssysteme abzubilden, die eine Vielzahl von Hauptrechnerbrücken und damit eine Vielzahl von PCI-Netzwerken aufweisen.
- Der zweite Flußpfad zeigt eine Subroutine, die vom Hauptflußpfad für jede Hauptrechnerbrücke aufgerufen wird und die dann für jeden Bus im PCI-Netzwerk wiederholt von sich selber aufgerufen wird. Dementsprechend wird, da sich die Subroutine selbst wiederholt aufruft, diese hier als "rekursive" Subroutine bezeichnet. Fig. 6 stellt diese rekursive Subroutine dar. Die Hauptfunktionen der rekursiven Subroutine sind das Zählen der PCI-Brücken, die an jeden Bus angeschlossen sind, Einstellen der vorübergehenden Werte für BUS_NO und SUB_BUS_NO für jede PCI-Brücke, wenn sie sich über die Hierarchieebenen nach unten bewegen, aus denen ein PCI-Netzwerk besteht, durch Aufrufen von sich selbst für jeden PCI-Bus, und das Setzen von permanenten Werten für BUS_NO und SUB_BUS_NO der einzelnen PCI-Brücken sobald die Subroutine von einem Aufruf durch einen Bus, der an einer bestimmten Brücke angeschlossen ist, zurückkehrt.
- Nehmen wir jetzt spezifisch Bezug auf Fig. 5; hier wird ein Hauptflußpfad eines Vorab-Abbildungsprogramms 250 gezeigt. Durch den ganzen Flußpfad hindurch wird auf zwei Zeiger oder Zähler Bezug genommen. Diese Zeiger sind angezeigt durch die Variablen i und ii. Auch eine Konstante HB_MAX wird benutzt, die die maximale Anzahl Hauptrechnerbrücken angibt, die in einem Rechnersystem vorkommen können. HB_MAX wird von den Grenzen der CPU 24 oder vom Systemkonstrukteur festgelegt. Flußpfad 250 benutzt einen Speicherblock HB zum Aufzeichnen der Bit-Nummern in CONFIG_ENBL, die jeder Brücke zugeordnet sind. Zum Beispiel verzeichnet HB(1) die Bit-Nummer von CONFIG_ENBL, die die Hauptrechnerbrücke Nr. 1, die erste Hauptrechnerbrücke im System aktiviert.
- Der Hauptflußpfad 250 startet bei 252, womit das Programm anläuft, wenn es von der CPU 24 beim Hochfahren bzw. bei der Initialisierung des Systems aufgerufen wird. Die BUS_NO-Werte aller Hauptrechnerbrücken werden als Grundeinstellung beim Hochfahren des Rechnersystems auf 00 voreingestellt. Start 252 geht dann über zu einem Aktionsschritt 254, in dem der Zeiger i und eine Variable NO_HB auf 0 gesetzt werden. Die Variable NO_HB ist die Nummer der jeweiligen Hauptrechnerbrücken im System, wie sie durch den Flußpfad 250 hochgezählt werden.
- Der Flußpfad 250 geht dann über zum Aktionsschritt 256, in dem ein 32-Bit-Wert in das CONFIG_ENBL-Register mit nur einer hochstehenden Bit-Nummer geschrieben wird, und diese Bit-Nummer wird von Zeiger i identifiziert. So steht z. B. in der ersten Iteration des Flußpfads 250 die Bit-Nummer 0 in CONFIG_ENBL hoch und der Rest der Bits dieses Registers stehen tief. Dann wird i in einem Aktionsschritt 258 inkrementiert.
- Der nächste Schritt im Flußpfad 250 ist ein Aktionsschritt 260, der einen Lesekonfigurationszyklus auf ein Register DEV_ATTR durchführt, in dem die Felder CONFIG_AD 214 auf BUS# = 0, DEV# = 0 gesetzt sind. Fahren wir fort mit dem unmittelbar oben gezeigten Beispiel; wenn der Eingang EXT_ENBL einer Hauptrechnerbrücke an die Bit-Nummer 0 des CONFIG_ENBL 222 angeschlossen ist, bewirkt der Schritt 260, daß die CPU die Inhalte des Registers DEV_ATTR dieser Hauptrechnerbrücke liest. Das ist: deswegen, weil alle Hauptrechnerbrücken auf einen Konfigurationszyklus reagieren, wenn die Werte BUS# und DEV# gleich 0 sind. Der einzige Weg, die Hauptrechnerbrücken einzeln für einen Konfigurationszyklus zu aktivieren, ist durch ihre unterschiedlichen EXT_ENBL-Eingänge aus CONFIG_ENBL 222.
- Der Entscheidungsschritt 262 ist der nächste Schritt im Flußpfad 250. Der Entscheidungsschritt 262 bewertet, ob das niedrigstwertige Bit des Registers DEV_ATTR hoch steht. Wenn das so ist, dann wird eine Hauptrechnerbrücke an die Bit- Nummer 0 des CONFIG_ENBL 222 angeschlossen und ein Entscheidungsschritt 262 geht über auf einen Aktionsschritt 264, in dem NO_HB um eins inkrementiert wird, um die entsprechende Nummer der Hauptrechnerbrücken im System zu zählen und die Bit-Nummer von CONFIG_ENBL 222, die die Hauptrechnerbrücke aktiviert hat, Bit-Nummer 0, wird im Speicherblock mit der auf HB(i), d. i. HB(1), gesetzten Variablen gespeichert.
- Wenn an Bit-Nummer 0 keine Hauptrechnerbrücke angeschlossen ist, dann reagiert keine Vorrichtung auf den Konfigurationslesezyklus, und damit hält die CPU das LSB des Registers DEV_ATTR der nichtreagierenden Hauptrechnerbrücke für 0. Dementsprechend wird NO_HB nicht inkrementiert und kein Hauptrechnerbus wird gezählt.
- Nach dem Entscheidungsschritt 262 und dem Aktionsschritt 264 geht der Flußpfad 250 zu einem anderen Entscheidungsschritt 266 über, der i mit HB_MAX vergleicht. Wenn i kleiner ist als HB_MAX, dann springt der Flußpfad 250 zurück zum Aktionsschritt 256, der einen neuen Wert in CONFIG_ENBL 222 schreibt, dessen nächste Bit-Nummer, gleich dem inkrementierten i, hoch steht und dessen andere Bit-Nummern gleich 0 sind. Dieses Schleifenfahren wird fortgesetzt, bis i gleich HB_MAX ist, das heißt, alle Hauptrechnerbrücken, die in dem Informationsverarbeitungssystem 10 vorkommen können, wurden geortet und gezählt. Dementsprechend wird NO_HB gleich der Gesamtzahl der Hauptrechnerbrücken im System sein und der HB- Block zeigt die Werte von CONFIG_ENBL, die von der CPU 24 generiert werden müssen, um auf den Konfigurationsraum jeder Hauptrechnerbrücke zuzugreifen. Wenn das stimmt, springt der Entscheidungsschritt 266 auf einen anderen Entscheidungsschritt 268.
- Im Entscheidungsschritt 268 wird NO_HB mit 0 verglichen. Wenn NO_HB gleich 0 ist, dann urteilt die CPU 24 in einem Aktionsblock 270, daß im Informationsverarbeitungssystem 10 keine Hauptrechnerbrücken vorhanden sind und daß somit eine Vorab- Abbildung der Register BUS_NO und SUB_BUS_NO für die Konfiguration nicht erforderlich ist. Damit bleibt das Programm an einem Ende 272 stehen.
- Wenn NO_HB größer als 0 ist, dann gibt es mindestens eine Hauptrechnerbrücke und mindestens ein PCI-Netzwerk im Rechnersystem, für die eine Vorab-Abbildung für BUS_NO und SUB_BUS_NO generiert werden muß. Dementsprechend geht der Flußpfad 250 vom Entscheidungsschritt 268 zu einem Aktionsschritt 274 über.
- Aktionsschritt 274 führt zwei neue Variable, BNO_MIN UND BNO_MAXTMP, in den Flußpfad 250 ein. BNO_MIN ist der Mindestwert für BUS_NO, der sich durch den Flußpfad 250 mit zunehmender Buszahl im PCI-Netzwerk erhöht. BNO_MAXTMP ist der zeitweilige Wert, den der Flußpfad 250 für SUB_BUS_NO der einzelnen PCI-Brücken setzt, der mit der Zunahme der im PCI- Netzwerk georteten Busse abnimmt. Aktionsschritt 274 setzt den Anfangswert für den Zeiger ii auf 0, für BNO_MIN auf 00, und für BNO_MAXTMP auf hexadezimal FF.
- Der Flußpfad 250 läuft dann weiter zu einem Aktionsschritt 276, der den Zeiger ii um Eins inkrementiert und dann auf einen anderen Aktionsschritt 278 übergeht. Ein Schreibkonfigurationszyklus wird durch den Aktionsschritt 278 auf das Register CONFIG_ENBL 222 ausgeführt. Der in CONFIG_ENBL 222 in diesem Schritt eingeschriebene Wert kommt aus dem Block HB(NO_HB), wobei (NO_HB) den Wert ii annimmt. Wenn daher der Wert von ii gleich 1 ist, wird der Anordnungswert für Hauptrechnerbrücke NO. 1, das der Wert ist, der EXT_ENBL 232 der Hauptrechnerbrücke NO. 1 aktiviert, in CONFIG_ENBL 222 geschrieben. Das ermöglicht, daß im Verlauf des Fortschreitens des Flußpfades Konfigurations-Lese- und -Schreib- Zyklen in den internen Registern der Hauptrechnerbrücke NO. 1, spezifisch in den Registern BUS_NO und SUB_BUS NO der Hauptrechnerbrücke NO. 1 ausgeführt werden.
- Der nächste Schritt im Flußpfad 250 ist ein Entscheidungsschritt 280. Der Entscheidungsschritt 280 legt fest, ob ii größer ist als 1, und wenn nicht, dann springt er zu einem Aufrufblock 282 und überspringt den Aktionsblock 284. Der Aufrufblock 282 ruft eine rekursive Subroutine 300 auf, die in Fig. 6 gezeigt wird. So überspringt beim ersten Aufruf der Subroutine 300, wenn ii gleich 1 ist, was bedeutet, daß die Vorab-Abbildung für das PCI-Netzwerk hinter der ersten Hauptrechnerbrücke im Rechnersystem generiert wird, der Flußpfad 250 den Aktionsblock 284.
- Zum Verständnis des Flußpfads 250 muß nur der Wert von BNO_MAX, der durch den Aufruf der Subroutine 300 in den Flußpfad 250 zurückgegeben wird, besprochen werden. Wenn das Register BUS_NO der Hauptrechnerbrücke, die ii entspricht, den Wert x annimmt und die Gesamtzahl der PCI-Busse im PCI-Netzwerk hinter der Hauptrechnerbrücke gleich z ist, dann ist der Wert für BNO_MAX, der von der Subroutine 300 zurückgegeben wird, gleich x + z - 1. Das Verfahren, mit dem die Subroutine 300 diesen Wert ableitet, wird nachstehend in Einzelheiten besprochen.
- Wenn wir also annehmen, daß das der erste Aufruf der Subroutine 300 für die erste Hauptrechnerbrücke im Rechnersystem ist, wird BNO_MIN durch Voreinstellung gleich 0; und wenn wir annehmen, daß es z. B. hinter der ersten Hauptrechnerbrücke eine Gesamtzahl von 4 PCI-Bussen im PCI-Netzwerk gibt, ist der von der Subroutine 300 für BNO_MAX zurückgegebene Wert gleich 3. Das heißt, daß das Register BUS_NO der Hauptrechnerbrücke und der Bus unmittelbar hinter diesem den Wert 0 zugeteilt bekommen (den die Hauptrechnerbrücke als voreingestellten Wert hatte), und die Register BUS_NO der 3 PCI- Brücken hinter dieser Hauptrechnerbrücke und die PCI-Busse hinter ihnen bekommen von der Subroutine 300 die Werte 1 bis 3.
- Nachdem der Aufrufblock 282 den Wert für BNO_MAX zurückgegeben hat, springt der Flußpfad zu einem Aktionsschritt 286, in dem ein Konfigurations-Schreibzyklus auf das Register SUB_BUS_NO der augenblicklichen Hauptrechnerbrücke ausgeführt wird, wie durch ii angezeigt ist. Der in SUB_BUS_NO geschriebene Wert ist BNO_MAX.
- Dementsprechend wird, wenn wir das im unmittelbar vorstehenden Absatz diskutierte Beispiel weiter verfolgen, der Wert 3 in die SUB_BUS_NO der ersten Hauptrechnerbrücke im System geschrieben. Dementsprechend werden die Werte für die Register BUS_NO und SUB_BUS_NO für die erste Hauptrechnerbrücke im System entsprechend 0 und 3. Die Hauptrechnerbrücke reagiert jetzt nur auf Konfigurationszyklen, in denen das Feld BUS# gleich 0 bis 3 ist, das sind die Identifizierungsnummern, die den entsprechenden PCI-Bussen im PCI-Netzwerk hinter der Hauptrechnerbrücke zugewiesen wurden.
- Der nächste Schritt im Flußpfad 250 ist ein Aktionsschritt 288, der durch Addieren von 1 zu BNO_MAX einen neuen Wert für BNO_MIN ableitet. Dieses neue BNO_MIN wird BUS_NO der nächsten Hauptrechnerbrücke im Rechnersystem, falls vorhanden, und die dem Bus unmittelbar hinter dieser Hauptrechnerbrücke zugewiesene Nummer.
- Der nächste Schritt im Flußpfad 250, ein Entscheidungsschritt 290, hat die Funktion, zu bestimmen, ob es noch mehr Hauptrechnerbrücken in System gibt, durch Vergleichen von ii mit NO_HB. Wenn NO_HB größer ist als ii, dann gibt es noch mehr Hauptrechnerbrücken im System, und der Entscheidungsschritt 290 springt zurück zum Aktionsblock 276, in dem ii inkrementiert wird. Wenn das erfolgt, dann wird durch Aktionsblock 284 BNO_MIN in das Register BUS_NO der nächsten Hauptrechnerbrücke in System geschrieben. Dann wird die Subroutine 300 aufgerufen und die Prozedur wiederholt sich.
- Die Prozedur wiederholt sich für jede Hauptrechnerbrücke, bis ii gleich NO_HB ist, dann geht der Entscheidungsschritt 290 auf den Aktionsschritt 292 über, in dem alle Bits von CONFIG_ENBL 222 für den Rest der Konfigurationsprozeduren, die von der Konfigurationssoftware des Rechnersystems auszuführen sind, auf hoch gesetzt werden. Das ermöglicht es, daß die Konfigurations-Software auf die Konfigurationsräume aller Hauptrechnerbrücken zugreift, falls erforderlich.
- Das Programm endet dann mit Block 294. Jetzt ist eine vollständige Abbildung aller PCI-Netzwerke im System auf der Grundlage der Register BUS_NO und SUB_BUS_NO aller Brücken im System erstellt. Falls sich die physikalische Konfiguration der PCI-Netzwerke verändert, läßt sich die Vorab-Abbildung ganz einfach durch die Neuinitialisierung des Rechnersystems ohne Umprogrammierung umändern.
- Nehmen wir jetzt spezifisch auf Fig. 6 Bezug; dort wird der Flußpfad der Subroutine 300 gezeigt. Subroutine 300 hat zwei Zeiger, j und jj. DEV_MAX ist eine von der Subroutine 300 benutzte Konstante, die die maximale Anzahl der Peripheriegeräte oder PCI-Brücken ist, die an einen PCI-Bus angeschlossen werden können. Wie oben dargelegt, ist DEV_MAX in der bevorzugten Ausführungsform 21 (einundzwanzig).
- Subroutine 300 benutzt auch mehrere Variablen, einschließlich BNO_MIN, BNO_MAXTMP und BNO_MAX. Wie oben dargelegt, werden die Werte für BNO_MIN und BNO_MAXTMP durch den Hauptflußpfad 250 gesetzt, bevor er Subroutine 300 aufruft. Die Anfangswerte dieser Variablen, wie oben gezeigt wird, sind 00 bzw. FF. BNO_MAX ist die Variable, die die Subroutine 300 zum Flußpfad 250 zurückgibt.
- Eine weitere von der Subroutine 300 benutzte Variable ist NO_PB. NO_PB ist die Anzahl der PCI-Brücken, die an einen bestimmten PCI-Bus angeschlossen sind.
- Bei Aufruf durch den Flußpfad 250 beginnt die Subroutine 300 bei Start 302 und geht auf den Aktionsschritt 304 über, in dem NO_PB und j auf 0 gesetzt werden. Dann geht Subroutine 300 zum Aktionsschritt 306 über, in dem j um 1 inkrementiert wird.
- Damit beginnt Subroutine 300 ihre erste Hauptprozedur, das heißt, sie zählt die PCI-Brücken, die an den Bus angeschlossen sind, für den die Subroutine aufgerufen wurde. Die Schritte, die diese Aufgabe durchführen, sind Aktionsschritte 308 und 310 sowie die Entscheidungsschritte 312 und 314.
- Der Aktionsschritt 308 beginnt mit dem Durchführen eines Konfigurations-Lesezyklus auf DEV_ATTR, wobei BUS# gleich BNO_MIN und das Feld DEV# gleich j ist, das beim ersten Iterationsdurchgang der Zählprozedur gleich 1 ist. Der Entscheidungsschritt 312 entscheidet dann, ob LSB des DEV_ATTR eine 0 oder eine 1 ist. Wenn LSB eine 1 ist, dann ist die Vorrichtung, die auf das Lesen anspricht, eine PCI-Brücke, und die Subroutine 300 verzweigt im Aktionsschritt 310, der NO_PB inkrementiert zum Zählen der Anzahl der PCI-Brücken, die an den PCI-Bus angeschlossen sind, und erzeugt einen PB- Block durch Einsetzen von j in den Wert für PB(NO_PB). Dieser Block zeigt dann nach Abschluß die verschiedenen DEV#-Werte, die jeweils jede PCI-Brücke aktivieren, um auf ihre internen Konfigurationsräume zuzugreifen. Dieser Block ist ähnlich dem HB-Block im Flußpfad 250.
- Wenn das LSB von DEV_ATTR eine 0 ist, heißt das, daß es eine Vorrichtung gibt, die von DEV# mit dem Wert j aktiviert wird, aber es ist eine reguläre PCI-Vorrichtung und keine PCI- Brücke. In diesem Fall bemerkt die CPU 24, daß eine Vorrichtung durch diese bestimmte DEV# aktiviert wird, inkrementiert jedoch NO_PB nicht. Statt dessen geht die Subroutine zum Entscheidungsschritt 314 über. Wenn es keine Peripherie vorrichtung oder PCI-Brücke gibt, die von DEV# gleich j aktiviert wird, bemerkt auch die CPU 24 diese Information und geht zum Entscheidungsschritt 314 über.
- Der Entscheidungsschritt 314 vergleicht j mit DEV-MAX. Wenn j kleiner ist als DEV_MAX springt die Subroutine 300 zurück zum Aktionsschritt 306, in dem j inkrementiert wird. Dementsprechend wiederholt sich diese Schleife bis der Wert j gleich DEV-MAX ist.
- Sobald das eintritt ist NO_PB gleich der Anzahl der an den betreffenden PCI-Bus angeschlossenen PCI-Brücken, für die der Aufruf der Subroutine 300 veranlaßt wurde (der aufrufende PCI-Bus). Auch ist der PB-Block abgeschlossen und im Systemspeicher 32 wird von der CPU 24 ein Diagramm erstellt, das ähnlich aussieht wie folgt:
- Die Subroutine geht dann über zum Entscheidungsschritt 316, der festlegt, ob irgendwelche PCI-Brücken an den aufrufenden PCI-Bus angeschlossen sind. NO_PB wird im Entscheidungsschritt 316 mit 0 verglichen und wenn NO_PB gleich 0 ist, dann gibt es keine PCI-Brücken. Wenn das der Fall ist, dann geht Subroutine 300 auf den Aktionsschritt 318 über, der den Wert BNO_MIN zu BNO_MAX umwandelt. Dann kehrt die Subroutine 300 in einem Rückkehrblock 320 zum Hauptflußpfad 250 zurück. Wenn NO_PB größer als 0 ist, dann liegt mindestens eine PCI- Brücke an dem aufrufenden PCI-Bus, und die Subroutine geht vom Entscheidungsschritt 316 auf einen Aktionsschritt 322 über.
- Der Aktionsschritt 322 ist der Anfang einer Schleifensequenz in Subroutine 300, in der temporäre Werte in den Registern BUS_NO und SUB_BUS_NO der an den aufrufenden Bus angeschlossenen PCI-Brücken gesetzt werden. Aktionsschritt 322 setzt jj auf 0 und geht dann zu Aktionsschritt 324 über, der jj um 1 inkrementiert.
- Der nächste Schritt in Subroutine 300 ist ein Entscheidungsschritt 326, in dem eine Entscheidung getroffen wird, ob jj gleich 1 ist. Wenn jj wirklich 1 ist, dann ist das der erste Iterationsdurchgang durch diese Schleifensequenz und die Subroutine 300 geht auf Aktionsschritt 328 über. Der Aktionsschritt 328 führt einen Schreibkonfigurationszyklus mit BUS# = BNO_MIN, DEV# = PB(jj) und REG# = BUS_NO durch. Der in diesem Konfigurationszyklus geschriebene Wert ist BNO_MIN + 1. Das Ergebnis dieses Schreibkonfigurationszyklus ist, daß der Wert BUS_NO der ersten an den Aufruf angeschlossenen PCI- Brücke auf BNO_MIN + 1 gesetzt wird. Wenn das z. B. der erste Aufruf der Subroutine 300 für einen Bus direkt hinter einer PCI-Hauptrechnerbrücke ist, wird der Wert dieser BUS_NO gleich 1 sein. Dann geht die Subroutine 300 auf einen Aktionsschritt 330 über.
- Wenn der Entscheidungsschritt 326 festlegt, daß jj nicht gleich 1 ist, dann handelt es sich nicht um den ersten Iterationsdurchgang durch die Schleifenprozedur und der Entscheidungsschritt 326 geht auf den Aktionsschritt 333 über. Der Aktionsschritt 333 bewirkt ein Schreiben in die Adresse des BUS_NO einer PCI-Brücke auf dem aufrufenden Bus mit DEV# = PB(jj). Der in BUS-NO geschriebene Wert ist BNO_MAXTMP - NO_PB + jj. Dieses ist ein temporärer Wert für BUS_NO während die Subroutine 300 sich durch das PCI-Netzwerk nach unten zur untersten Ebene der PCI-Hierarchie bewegt. Dann geht der Aktionsschritt 333 zum Aktionsschritt 330 über.
- Der Aktionsschritt 330 führt einen Konfigurations-Schreibzyklus in eine SUB_BUS_NO der PCI-Brücke durch, die an den aufrufenden Bus angeschlossen ist, der auf DEV# = PB(jj) reagiert. Der in SUB_BUS_NO geschriebene Wert ist ein temporärer Wert gleich BNO_MAXTMP + NO_PB + jj.
- Subroutine 300 geht dann über auf einen Entscheidungsschritt 332, der bewirkt, daß die Subroutine 300 zum Aktionsschritt 324 zurückspringt, bis jj gleich NO_PB ist. Wenn das wahr ist, entsteht eine Tabelle temporärer Werte für jede PCI- Brücke, die ähnlich der nachstehend gezeigten Tabelle ist:
- Die an die Sekundärseite der Brücken angeschlossenen PCI- Busse in dieser Tabelle stellen die zweite hierarchische Ebene des PCI-Netzwerks dar. Die an die Hauptrechnerbrücke im System angeschlossenen PCI-Busse sind die erste hierarchische Ebene.
- Dann bewegt sich die Subroutine 300 zum Aktionsschritt 334, mit dem der Rekursivteil der Subroutine beginnt. Der Aktionsschritt 334 setzt den Zähler jj auf 0 und setzt den Wert einer neuen Variablen BNO_MIN2 auf BNO_MIN + 1.
- Der nächste Schritt ist ein Aktionsschritt 336, in dem jj um 1 inkrementiert wird. Auf den Aktionsschritt 336 folgt ein anderer Aktionsschritt 338, in dem eine neue Variable BNO_MAXTMP2 eingeführt wird. Der Aktionsschritt 338 gibt BNO_MAXTMP2 den Wert BNO_MAXTMP - NO_PB + jj.
- Dann geht Subroutine 300 über auf einen Aufrufblock 340, in dem die Subroutine 300 sich selbst aufruft, um die an die zweite Ebene der PCI-Busse in der zweiten PCI-Hierarchie angeschlossenen Brücken zu zählen. Die Anzahl der an diese zweite Busebene angeschlossenen Brücken zeigt die Anzahl der PCI-Busse in der dritten Ebene der PCI-Hierarchie an.
- Während dieses zweiten Aufrufs der Subroutine 300 im Aufrufblock 340 sind die Variablen, die anstelle BNO_MIN und BNO_MAXTMP benutzt werden, BNO_MIN2 bzw. BNO_MAXTMP2. Auf ähnliche Wiese wird der Rückgabewert von diesem zweiten Aufruf eine Variable BNO_MAX2 anstatt BNO_MAX. Wenn x gleich der Anzahl der PCI-Brücken und damit der als PB(jj) identifizierten PCI-Busse hinter der PCI-Brücke ist, dann ist der Rückgabewert von BNO_MAX2 gleich BNO_MIN2 + x - 1. BNO_MAX2 ist die Bezugszahl des PCI-Busses mit der höchsten Referenznummer hinter diesem bestimmten PCI-Bus, PB(jj).
- Wenn der Aufrufblock 340 einen Wert für BNO_MAX2 zurückgibt, bewegt sich die Subroutine 300 weiter zum Aktionsblock 342. Der Aktionsblock 342 bewirkt das Ausführen eines Konfigurations-Schreibzyklus auf ein Register SUB_BUS_NO mit BUS# = BNO_MIN, DEV# = PB(jj) und die zu schreibende Information gleich BNO_MAX2.
- Wenn jj gleich 1 ist, dann bewirkt das, daß BNO_MAX2 den temporären Wert überschreibt, der in SUB_BUS_NO der PB(1), der Brücke mit Referenznummer 1 in der oben angezeigten Tabelle, gesetzt wurde. Die BUS_NO von PB(1) ist im Aktionsblock 328 schon auf BNO_MIN + 1 d. i. 1 gesetzt worden. Somit liefern die Register BUS_NO und SUB_BUS_NO der PB(1) den Bereich der Referenznummern, die allen PCI-Busse hinter PB(1) zugewiesen sind.
- Dann geht die Subroutine zu einem Entscheidungsschritt 344 über, in dem jj mit NO_PB verglichen wird. Wenn jj kleiner ist als NO_PB, dann fährt die Subroutine 300 fort mit einem Aktionsschritt 346, in dem ein Konfigurations-Schreibzyklus auf das Register BUS_NO für PB(jj + 1) ausgeführt wird. Der geschriebene Wert ist BNO_MAX2 + 1. Dementsprechend, wenn jj gleich 1 ist, dann wird der Brücke direkt hinter PB(2) oder dem zweiten Bus in der oben angeführten Tabelle der Referenzwert BNO_MAX2 + 1 zugewiesen. Dieser Wert ist eine Inkrementierung jenseits des Bereichs der PCI-Busse, die in den Registern BUS_NO und SUB_BUS_NO von PB(1) gesetzt ist. Dieser gleiche Wert wird der neue Wert für BNO_MIN2 in einem nächsten Aktionsschritt 348.
- Subroutine 300 geht dann als nächstes auf einen anderen Entscheidungsschritt 350 über, in dem jj wieder mit NO_PB verglichen wird. Wenn jj kleiner ist als NO_PB, was es unausweichlich sein wird, springt die Subroutine 300 zurück zum Aktionsschritt. 336.
- Der Aktionsschritt 336 inkrementiert dann jj um 1, und die Subroutine ruft sich selber auf zum Zählen der PCI-Busse hinter der nächsten PCI-Brücke, PB(jj). Dieser Aufruf der Subroutine 300 gibt für PB(jj) einen Wert BNO_MAX2 zurück.
- Bis jj gleich NO_PB ist, ruft die Subroutine 300 immer wieder für jeden Wert jj sich selber auf. Wenn jj gleich NO_PB wird, bewirkt der Entscheidungsschritt 344, daß die Subroutine 300 zu einem Aktionsschritt 352 springt. Das heißt, daß alle PCI- Busse hinter einer bestimmten Hauptrechnerbrücke, die mit HB(ii) identifiziert ist, gezählt worden sind.
- Der Wert BNO_MAX2 wird im Aktionsschritt 352 in BNO_MAX kopiert. Dann springt die Subroutine 300 in einem Rücksprung- Schritt 354 zum Aufrufblock 282 mit BNO_MAX zum Flußpfad 250 zurück.
- Subroutine 300 ruft sich selbst rekursiv für jede hierarchische Schicht PCI-Busse hinter jeder Brücke im PCI-Netzwerk auf, bis es den "Boden" der Hierarchie erreicht. Die Subroutine 300 muß im Systemspeicher 32 für die Zeiger und Variablen für jeden Aufruf der Subroutine 300 ein anderes Speicherregister benutzen, oder das Softwareprogramm liefert keine richtigen Werte. Zum Beispiel, wenn die Subroutine sich selbst dreimal für eine NO_PB(jj) aufruft, muß eine Speicherstelle für den jj-Zeiger jedes Aufrufs benutzt werden. Es müssen also für die drei unterschiedlichen jj-Zeiger drei Speicherstellen bereitgestellt werden.
- Auf ähnliche Wiese müssen unterschiedliche Speicherstellen bereitgestellt werden für die Variablen BNO_MAX, BNO_MIN, PB_NO und BNO_MAXTMP jeder Schicht. Z. B. muß die BNO_MAX des dritten Aufrufs der Subroutine 300 ihre eigene Speicherstelle BNO_MAX3 haben; der vierte Aufruf BNO_MAX4; ... und der y-te Aufruf BNO_MAXy. Die Variablen BNO_MAXy und BNO_MINy sind eigentlich die gleiche Variable, die um 1 für jeden PCI-Bus im PCI-Netzwerk inkrementiert wird.
- Nehmen wir jetzt Bezug auf Fig. 7; dort wird das Blockschaltbild einer möglichen physikalischen Konfiguration eines PCI- Netzwerks gezeigt. Jeder Block der Fig. 7 ist eine PCI-Brücke oder eine Hauptrechnerbrücke.
- Es gibt drei Hauptrechnerbrücken in Fig. 7, A, B und C. Hauptrechnerbrücke A hat drei PCI-Brücken in einer Hierarchie hinter ihr angeschlossen. Zwei dieser PCI-Brücken, A1 und A2, sind gleichberechtigt an einen PCI-Bus A angeschlossen, der direkt hinter der Hauptrechnerbrücke A angeschlossen ist. Dann liegt eine PCI-Brücke B1 an einem PCI-Bus B, der an der Sekundärseite der Brücke A1 liegt. Die Brücken B1 und A2 haben die PCI-Busse C bzw. D an ihrer Sekundärseite angeschlossen.
- Die Hauptrechnerbrücke B hat nur einen PCI-Bus E an ihrer Sekundärseite angeschlossen. Hauptrechnerbrücke C hat einen PCI-Bus F an ihrer Sekundärseite liegen, an den eine PCI- Brücke F1 angeschlossen ist. Die PCI-Brücke F1 hat dann einen PCI-Bus G an ihrer Sekundärseite liegen.
- Jede der Brücken in Fig. 7 hat zwei Blöcke mit jeweils einer Nummer in jedem der einzelnen Blöcke. Der obere Block stellt das BUS_NO-Register dieser bestimmten Brücke dar, und der untere Block stellt das SUB_BUS_NO-Register dar. Die Nummern in diesen Blöcken stellen die den Registern durch den Flußpfad 250 und die Subroutine 300 zugewiesenen Werte dar, die in den Fig. 5 und 6 beschrieben sind.
- Beim Hochfahren, d. i. Initialisieren des Rechnersystems werden die in Fig. 7 gezeigten Werte durch die Operation des Flußpfades 250 und der Subroutine 300 zugewiesen wie folgt:
- Nehmen wir jetzt Bezug auf die Fig. 5 bis 7; der Flußpfad 250 wird durch die CPU 24 aufgerufen, bevor jede andere Software für das System aktiviert wird. Der Flußpfad 250 beginnt mit dem individuellen Hochsetzen jedes einzelnen Bits in CONFIG_ENBL. Ein spezifisches Bit in CONFIG_ENBL aktiviert jede der Hauptrechnerbrücken A, B und C für einen Lesezyklus in ihre Register DEV_ATTR und die LSB jedes dieser Register wird durch Inkrementieren von NO_HB im Aktionsschritt 264 gezählt. Schritt 264 generiert auch den Block der Bit-Nummern in CONFIG_ENBL, die jede Brücke aktivieren.
- Dementsprechend, wenn der Entscheidungsschritt 268 erreicht ist, ist NO_HB gleich 3 d. i. die Anzahl der Hauptrechnerbrücken in Fig. 7. Dann schreibt der Aktionsblock 278 in CONFIG_ENBL ein hochliegendes Signal in die Bit-Nummer, die die Hauptrechnerbrücke A für interne Konfigurationszyklen aktiviert. Der erste Aufruf an die Subroutine 300 wird in Block 282 gemacht.
- Subroutine 300 beginnt mit Zählen der PCI-Brücken A1 und A2 durch Lesen der DEV_ATTR-Register jeder Vorrichtung oder PCI- Brücke, die am PCI-Bus A liegen. Das wird bewerkstelligt durch die Schleifenprozedur zwischen den Blöcken 306 und 314.
- Dementsprechend, wenn im Entscheidungsblock 314 j = 21 ist (DEV_MAX), ist der NO_PB-Wert gleich 2 und der PB-Block ist erstellt. Der PB-Block zeigt an, welche Bit-Nummern der CONFIG_AD der Hauptrechnerbrücke A die PCI-Brücken A1 und A2 für einen Konfigurationszyklus aktivieren.
- Dann werden in der Schleifenprozedur gemäß den Blöcken 324 bis 332 temporäre Werte gesetzt für die Register SUB_BUS_NO und BUS_NO der Brücken A1 und A2, wobei jedoch BUS_NO der Brücke A1 permanent auf 1 gesetzt ist.
- Die rekursive Subroutinenprozedur gemäß Fig. 6 wird dann für Brücke A1 implementiert. Block 340 bewirkt, daß Subroutine 300 sich selbst aufruft. Dementsprechend wird die Zähl- und Matrixaufstellungsprozedur zwischen den Blöcken 306 und 314 implementiert, um die PCI-Brücken zu zählen, die an den PCI- Bus B angeschlossen sind. An Ende dieser Prozedur ist NO_PB2 gleich 1, für die PCI-Brücke B1, und der Block der PB2 ist erstellt.
- Die Schleifenprozedur zwischen den Blocknummern 324 und 332 setzt dann einen temporären Wert für SUB_BUS_NO der PC1- Brücke B1 und setzt in Block 328 seine BUS_NO auf den permanenten Wert 2.
- Dann ruft Block 340 wieder die Subroutine 300 für PCI-Brücke B1 auf. Das ist die dritte und letzte Schicht der Aufrufe der Subroutine 300.
- Diesmal versucht die Subroutine 300 die Anzahl der Brücken auf dem PCI-Bus C zu zählen und findet, daß da keine sind, also wird NO_PB = 0. Somit kehrt Block 318 zur zweiten Schicht der Aufrufe der Subroutine 300 zurück mit BNO_MAX3 gleich 2. BNO_MAX3, d. i. 2, wird dann im Aktionsschritt 342 permanent in die SUB_BUS_NO der Brücke B1 geschrieben.
- Da jetzt keine weiteren Brücken an den PCI-Bus B angeschlossen sind, ist im Entscheidungsschritt 344 jj gleich NO_PB und die Subroutine 300 springt hinunter zum Aktionsblock 352. BNO_MAX3, d. i. 2, wird im Entscheidungsschritt 352 in BNO_MAX2 kopiert und im Block 354 wird ein Rücksprung zur ersten Schicht der Aufrufe der Subroutine 300 gemacht.
- Der Wert 2 wird dann im Block 342 in das SUB_BUS_NO-Register der Brücke A1 kopiert. Dann wird im Entscheidungsblock 346 der Wert 3 in die BUS_NO der PC1-Brücke A2 kopiert.
- Da das der erste Iterationsdurchlauf durch Fig. 6 ist und NO_PB gleich 2 ist, springt die Subroutine 300 zurück zum Block 336. Dann wird ein weiterer Aufruf der zweiten Schicht für die PCI-Brücke A2 an die Subroutine 300 gemacht. Dieser Aufruf kehrt zur ersten Schicht zurück und zeigt damit an, daß am PCI-Bus D keine PCI-Brücken angeschlossen sind. Dementsprechend ist BNO_MAX2, das für diesen Aufruf zurückgegeben wird, gleich 3. Dieser Wert wird dann dm Block 342 in die SUB_BUS_NO der PC1-Brücke A2 kopiert.
- Jetzt ist der Wert jj gleich NO_PB. Daher springt der Entscheidungsschritt 344 hinunter zu Block 352, in dem BNO_MAX den Wert BNO_MAX2 d. i. 3 erhält. Dann wird in Block 282 ein Rücksprung zum Hauptflußpfad 250 gemacht.
- Dann wird im Block 286 der Wert 3 in den SUB_BUS_NO der Hauptrechnerbrücke A geschrieben. Dann wird im Block 288 BNO_MIN auf 4 gesetzt zurück zum Block 276 gesprungen, um die Register BUS_NO und SUB_BUS_NO der restlichen Brücken zu setzen.
- Zunächst wird der Wert 4 in BUS_NO der Hauptrechnerbrücke B kopiert. Dann wird die Subroutine 300 aufgerufen, aber sie zählt keine PCI-Brücken auf dem PCI-Bus F. Somit kehrt sie in Block 320 zurück mit BNO_MAX gleich 4, und Block 286 bewirkt, daß dieser Wert in SUB_BUS_NO der Hauptrechnerbrücke B geschrieben wird.
- Der Wert ii ist noch nicht gleich NO_HB. Daher bewirkt, nachdem Block 288 BNO_MIN durch Addieren von 1 zu BNO_MAX auf 5 setzt, der Entscheidungsschritt 290 einen Rücksprung zum Block 276. Block 294 schreibt 5 in BUS_NO der Hauptrechnerbrücke C, dann ruft Block 282 die Subroutine 300 auf.
- Subroutine 300 muß einen Zweitschicht-Aufruf machen um Bus G zu finden und zu zählen. Die Register BUS-NO und SUB_BUS_NO der PCI-Brücke F1 werden dann während des Aufrufs der Subroutine 300 gesetzt, und der Wert BNO_MAX 6 wird an Block 282 zurückgegeben.
- Jetzt ist Wert ii gleich NO_HB, was bedeutet, daß alle Register BUS_NO und SUB_BUS_NO gesetzt sind. Somit setzt Block 292 alle Bit-Nummern der CONFIG_ENBL auf hoch, so daß die Konfigurations-Software auf die internen Register der Hauptrechnerbrücken zugreifen kann. Die Konfigurations-Soft ware hat nun eine vorläufige Abbildung, um alle Brücken, Peripheriegeräte und Busse in einem multiplen Netzwerk zu orten.
- So wurde nun die bevorzugte Ausführungsform eines Verfahrens und eines Geräts beschrieben, das zum Generieren einer Vorab- Abbildung zur Initialisierung eines Rechnersystems mit Mehrfachbus dient.
Claims (15)
1. Ein Informationsverarbeitungssystem (10), enthaltend:
eine Zentraleinheit (24);
einen Systemspeicher (32);
einen Systembus (16), der die Zentraleinheit mit dem
Systemspeicher verbindet, so daß die Zentraleinheit Daten
im Systemspeicher lesen und in diesen schreiben kann;
mindestens einen an den Systembus angeschlossenen
Peripheriebus (22) zum Anschließen von
Peripherievorrichtungen (18), so daß die Zentraleinheit Daten in die
Peripherievorrichtungen schreiben und in diesen lesen kann;
wobei dieser mindestens eine Peripheriebus, wenn mehr als
einer, diese in einer Vielzahl von gleichberechtigten und
hierarchischen Kombinationen durch Bus-zu-Bus-Brücken
verschaltet, diese Peripheriebusse, die direkt an den
Systembus angeschlossen sind, Primärperipheriebusse (22)
sind und der Rest der Peripheriebusse (96) hinter den
Primärbussen in verschiedenen Schichten einer Hierarchie
angeordnet sind;
diese Kombinationen die Fähigkeit zur Veränderung haben;
diese Primärperipheriebusse durch eine entsprechende
Hauptrechnerbrücke (20) jeweils direkt mit dem Systembus
verbunden sind;
dadurch gekennzeichnet, daß das System ferner umfaßt:
Ein im Systemspeicher abgespeichertes Programm, das von
der Zentraleinheit abgearbeitet wird, um eine Abbildung
aller Peripheriebusse zu erstellen, so daß die
Zentraleinheit alle Peripheriebusse orten kann, um die
Peripherievorrichtungen zu konfigurieren; und
das Programm die Fähigkeit hat, diese Abbildung ohne
Umschreiben des Programms zu ändern, wenn sich die
Kombinationen der Peripheriebusse verändern;
wobei das Programm die folgenden Schritte beinhaltet:
Zählen der Anzahl der Primärperipheriebusse;
Zuweisen eines Mindestwerts an eine Variable;
Aufrufen einer Subroutine für jeden der
Primärperipheriebusse, die die Anzahl der Peripheriebusse in jeder
Hierarchie zählt, die mit jedem Primärperipheriebus verbunden
ist, und Identifikationsnummern jedem der Busse zuweist,
die in jeder der Hierarchien verbunden sind;
Inkrementieren dieser Variablen um die Anzahl der von der
Subroutine gezählten Busse nach jedem Aufruf der
Subroutine;
Zuweisen einer ersten Bereichsnummer an jeden Primärbus
gleich dem Wert dieser Variablen vor dem Aufruf der
Subroutine entsprechend diesem Primärbus;
Zuweisen einer zweiten Bereichsnummer an jeden Primärbus
gleich der Anzahl der in der Hierarchie
zusammengeschlossenen Busse entsprechend diesem
Primärperipheriebus, plus dem Wert dieser Variablen vor der Ausführung
des Aufrufs der Subroutine für jeden Primärperipheriebus
minus Eins.
2. Ein Informationsverarbeitungssystem (10) gemäß Anspruch
1, in dem die Subroutine die folgenden Schritte
beinhaltet:
Ausführen eines Aufrufs der Subroutine an jeden
Peripheriebus in der Hierarchie, wobei ein erster Aufruf der
Subroutine für den Primärperipheriebus ausgeführt wird;
Zuweisen eines ersten Bereichswerts gleich der Variablen
plus Eins an jeden dieser Peripheriebusse, für die ein
bestimmter Aufruf der Subroutine ausgeführt werden soll,
bevor der betreffende Aufruf ausgeführt wird;
Inkrementieren dieser Variablen um Eins vor der
Ausführung des bestimmten Aufrufs;
Zählen der Peripheriebusse, die an jeden dieser
Peripheriebusse angeschlossen sind, für die ein Aufruf der
Subroutine ausgeführt wird;
Rückspringen von dem bestimmten Aufruf der Subroutine nür
dann, wenn die Anzahl der an den Peripheriebus, für den
der betreffende Aufruf ausgeführt wurde, angeschlossenen
Peripheriebusse gleich Null ist oder ein Aufruf der
Subroutine für alle Peripheriebusse, die an den
Peripheriebus angeschlossen sind, für den der betreffende Aufruf
der Subroutine ausgeführt wurde, durchgeführt wurde; und
Zuweisen eines zweiten Bereichswerts für den
Peripheriebus, für den der bestimmte Aufruf ausgeführt wurde,
gleich der Variablen nach dem Rücksprung von dem
betreffenden Aufruf;
Schreiben des ersten und des zweiten Bereichswerts für
jeden Peripheriebus in getrennte Register in einer
entsprechenden Bus-zu-Bus-Brücke direkt vor dem jeweiligen
Peripheriebus in der Hierarchie.
3. Ein Informationsverarbeitungssystem (10) gemäß Anspruch 2
einschließlich des folgenden Schritts:
Setzen temporärer Werte für den ersten und den zweiten
Bereichswert für jeden der Peripheriebusse, die an einen
bestimmten Peripheriebus angeschlossen sind, bevor ein
Aufruf der Subroutine für jeden dieser Busse durchgeführt
wird.
4. Ein Informationsverarbeitungssystem (10) gemäß Anspruch 2
einschließlich des folgenden Schritts:
Aufstellen einer Tabelle der Signale für jeden der
Peripheriebusse, wobei diese Tabelle auf den Peripheriebussen
das Signal angibt, das jede der Bus-zu-BUS-Brücken und
die Peripherievorrichtungen aktiviert, die an den
Peripheriebus angeschlossen sind, der der Tabelle entspricht,
so daß die Zentraleinheit Daten auf jede Bus-zu-Bus-
Brücke und Peripherievorrichtung schreiben bzw. von
diesen lesen kann.
5. Ein Informationsverarbeitungssystem (10) gemäß Anspruch
2, in dem
die Peripheriebusse (96), die an den Peripheriebus
angeschlossen sind, für den der betreffende Aufruf der
Subroutine ausgeführt wird, gezählt werden durch Zählen der
Anzahl der Bus-zu-Bus-Brücken, die an den Peripheriebus
angeschlossen sind, für den der betreffende Aufruf dieser
Subroutine ausgeführt wird.
6. Ein Informationsverarbeitungssystem (10) gemäß Anspruch
5, in dem die Bus-zu-BUS-Brücken ein internes Register
aufweisen, das ein niedrigstwertiges Bit binär hoch
gesetzt hat, und die Bus-zu-Bus-Brücken durch Abtasten
dieser niedrigstwertigen Bits gezählt werden.
7. Ein Informationsverarbeitungssystem (10) gemäß Anspruch
1, in dem die Primärperipheriebusse gezählt werden durch
Zählen der Anzahl der Hauptrechnerbrücken, die an den
zweiten Systembus angeschlossen sind.
8. Ein Informationsverarbeitungssystem (10) gemäß Anspruch
1, einschließlich eines Registers enthaltend eine
Vielzahl Bits, wobei jedes dieser Bits die Fähigkeit hat,
durch den zweiten Systembus mit einer der
Hauptrechnerbrücken verbunden zu werden, so daß, wenn eines der Bits
binär hoch liegt, die betreffende Hauptrechnerbrücke
aktiviert wird, so daß die Zentraleinheit Daten auf diese
Hauptrechnerbrücke schreiben bzw. von ihr lesen kann.
9. Ein Informationsverarbeitungssystem gemäß Anspruch 1, in
dem es sich bei den Peripheriebussen um PCI-Busse
handelt.
10. Ein Informationsverarbeitungssystem gemäß Anspruch 1, in
dem das Programm den folgenden Schritt beinhaltet:
Schreiben der ersten und der zweiten Bereichsnummer jedes
dieser Primärperipheriebusse in gesonderte Register in
den entsprechenden Hauptrechnerbrücken.
11. Ein Verfahren zum Erstellen einer dynamischen Addreßliste
von Peripheriebussen in einem
Informationsverarbeitungssystem, wobei das Informationsverarbeitungssystem
beinhaltet:
eine Zentraleinheit (24);
einen Systemspeicher (32);
einen Systembus (16), der die Zentraleinheit mit dem
Systemspeicher verbindet, so daß die Zentraleinheit Daten
im Systemspeicher lesen und in diesen schreiben kann;
mindestens einen an den Systembus angeschlossenen
Peripheriebus (22) zum Anschließen von
Peripherievorrichtungen (18), so daß die Zentraleinheit Daten in die
Peripherievorrichtungen schreiben und in diesen lesen kann;
wobei dieser mindestens eine Peripheriebus, wenn mehr als
einer, diese in einer Vielzahl von gleichberechtigten und
hierarchischen Kombinationen durch Bus-zu-Bus-Brücken
verschaltet, diese Peripheriebusse, die direkt an den
Systembus angeschlossen sind, Primärperipheriebusse (22)
sind und der Rest der Peripheriebusse (96) hinter den
Primärbussen in verschiedenen Schichten einer Hierarchie
angeordnet sind;
diese Kombinationen die Fähigkeit zur Veränderung haben;
diese Primärperipheriebusse durch eine entsprechende
Hauptrechnerbrücke (20) jeweils direkt mit dem Systembus
verbunden sind;
wobei das Verfahren die folgenden Schritte umfaßt:
Zuweisen Eines Mindestwerts an eine Variable;
Aufrufen einer Subroutine für jeden der
Primärperipheriebusse, die die Anzahl der Peripheriebusse in einer
Hierarchie hinter jedem dieser Busse zählt und
Identifikationsnummern jedem der Busse zuweist, die in jeder dieser
Hierarchien verbunden sind;
Inkrementieren dieser Variablen um die Anzahl der von der
Subroutine gezählten Busse nach jedem Aufruf der
Subroutine;
Zuweisen einer ersten Bereichsnummer an jeden dieser
Busse gleich dem Wert der Variablen vor dem Aufruf der
Subroutine entsprechend diesem Bus;
Zuweisen einer zweiten Bereichsnummer an jeden dieser
Busse gleich der Anzahl der in der Hierarchie hinter
jedem dieser Busse zusammengeschlossenen Busse plus dem
Wert der Variablen vor der Ausführung des Aufrufs der
jedem Bus entsprechenden Subroutine minus Eins.
12. Ein Verfahren gemäß Anspruch 11, in dem die Subroutine
die folgenden Schritte umfaßt:
Ausführung eines Aufrufs der Subroutine für jeden der
Busse in der Hierarchie;
Zuweisen eines ersten Bereichswerts gleich der Variablen
plus Eins für jeden dieser Busse, für die ein bestimmter
Aufruf der Subroutine ausgeführt werden soll, bevor der
betreffende Aufruf ausgeführt wird;
Inkrementieren der Variablen um Eins vor der Ausführung
des bestimmten Aufrufs;
Zählen der Busse, die an diesen Bus angeschlossen sind,
für den der betreffende Aufruf ausgeführt wurde;
Rückspringen von dem bestimmten Aufruf der Subroutine nur
dann, wenn die Anzahl der an den Peripheriebus, für den
der betreffende Aufruf ausgeführt wurde, angeschlossenen
Peripheriebusse gleich Null ist oder ein Aufruf der
Subroutine für alle Busse, die an diesen Bus, für den der
betreffende Aufruf der Subroutine ausgeführt wurde,
durchgeführt wurde; und
Zuweisen eines zweiten Bereichswerts gleich der Variablen
nach dem. Rücksprung von dem betreffenden Aufruf an den
Bus, für den der bestimmte Aufruf ausgeführt wurde;
Schreiben des ersten und des zweiten Bereichswerts für
jeden Bus in getrennte Register in einer entsprechenden
Bus-zu-Bus-Brücke direkt vor dem jeweiligen Bus in der
Hierarchie.
13. Ein Verfahren gemäß Anspruch 12, einschließlich des
folgenden Schritts:
Setzen temporärer Werte für den ersten und den zweiten
Bereichswert für jeden Bus, die an einen bestimmten
Peripheriebus angeschlossen sind, bevor ein Aufruf der
Subroutine für jeden dieser Busse durchgeführt wird.
14. Ein Verfahren gemäß Anspruch 12, einschließlich des
folgenden Schritts:
Aufstellen einer Tabelle der Signale für jeden der Busse,
wobei diese Tabelle für jede der Bus-zu-Bus-Brücken und
die Peripherievorrichtung, die an den Bus angeschlossen
ist, der der Tabelle entspricht, ein Signal auflistet,
wobei die Signale von der Zentraleinheit benutzt werden,
um die Bus-zu-Bus-Brücken und die Peripherievorrichtungen
zu aktivieren, um Zugriff auf die Bus-zu-Bus-Brücken und
die Peripherievorrichtungen zum Schreiben auf diese bzw.
zum Lesen von diesen zu haben.
15. Ein Verfahren gemäß Anspruch 12, in dem es sich bei den
Bussen um PCI-Busse handelt.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/070,134 US5542055A (en) | 1993-05-28 | 1993-05-28 | System for counting the number of peripheral buses in each hierarch connected to primary bus for creating map of peripheral buses to locate peripheral devices |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69421755D1 DE69421755D1 (de) | 1999-12-30 |
DE69421755T2 true DE69421755T2 (de) | 2000-06-21 |
Family
ID=22093350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69421755T Expired - Fee Related DE69421755T2 (de) | 1993-05-28 | 1994-05-25 | Initialisierung von Mehrfachbus-Netzwerken |
Country Status (7)
Country | Link |
---|---|
US (1) | US5542055A (de) |
EP (1) | EP0631241B1 (de) |
JP (1) | JPH06348642A (de) |
KR (1) | KR970008192B1 (de) |
BR (1) | BR9402106A (de) |
CA (1) | CA2124618A1 (de) |
DE (1) | DE69421755T2 (de) |
Families Citing this family (122)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69518145T2 (de) * | 1994-02-10 | 2001-03-22 | Elonex I.P. Holdings Ltd., London | Verzeichnis für ein-/ausgangsdecoder |
GB2287106A (en) * | 1994-02-16 | 1995-09-06 | Ibm | Connection of adaptors for multiple bus architectures |
US5805834A (en) * | 1994-03-30 | 1998-09-08 | Zilog, Inc. | Hot reconfigurable parallel bus bridging circuit |
US5787246A (en) * | 1994-05-27 | 1998-07-28 | Microsoft Corporation | System for configuring devices for a computer system |
US6763454B2 (en) * | 1994-05-27 | 2004-07-13 | Microsoft Corp. | System for allocating resources in a computer system |
US5623610A (en) * | 1994-10-31 | 1997-04-22 | Intel Corporation | System for assigning geographical addresses in a hierarchical serial bus by enabling upstream port and selectively enabling disabled ports at power on/reset |
WO1996038784A1 (en) * | 1995-06-02 | 1996-12-05 | Systemsoft Corporation | Digital data processing method and apparatus for peripheral device control |
US5812799A (en) * | 1995-06-07 | 1998-09-22 | Microunity Systems Engineering, Inc. | Non-blocking load buffer and a multiple-priority memory system for real-time multiprocessing |
US5838935A (en) * | 1995-06-15 | 1998-11-17 | Intel Corporation | Method and apparatus providing programmable decode modes for secondary PCI bus interfaces |
US5696949A (en) * | 1995-06-15 | 1997-12-09 | Intel Corporation | System for PCI slots expansion using asynchronous PCI-to-PCI bridge with clock generator for providing clock signal to the expansion mother board and expansion side of bridge |
US5793953A (en) | 1995-07-07 | 1998-08-11 | Sun Microsystems, Inc. | Method and apparatus for allowing packet data to be separated over multiple bus targets |
US5632021A (en) * | 1995-10-25 | 1997-05-20 | Cisco Systems Inc. | Computer system with cascaded peripheral component interconnect (PCI) buses |
US5673399A (en) * | 1995-11-02 | 1997-09-30 | International Business Machines, Corporation | System and method for enhancement of system bus to mezzanine bus transactions |
US5822545A (en) * | 1995-12-04 | 1998-10-13 | Cypress Semiconductor Corp. | Method and apparatus for eliminating electromagnetic interference and noise caused by all unnecessary switching/toggling of bus signals |
US5778197A (en) * | 1996-04-26 | 1998-07-07 | International Business Machines Corp. | Method for allocating system resources in a hierarchical bus structure |
US6467046B1 (en) * | 1996-05-06 | 2002-10-15 | Sun Microsystems, Inc. | System and method for automatically distributing copies of a replicated database in a computer system |
US5937174A (en) * | 1996-06-28 | 1999-08-10 | Lsi Logic Corporation | Scalable hierarchial memory structure for high data bandwidth raid applications |
US5881254A (en) * | 1996-06-28 | 1999-03-09 | Lsi Logic Corporation | Inter-bus bridge circuit with integrated memory port |
US5761448A (en) * | 1996-08-30 | 1998-06-02 | Ncr Corporation | Physical-to-logical bus mapping scheme for computer systems having multiple PCI bus configuration |
US6125418A (en) * | 1996-11-27 | 2000-09-26 | Compaq Computer Corporation | Method and apparatus for enabling a computer user to convert a computer system to an intelligent I/O system |
US5815677A (en) | 1996-12-31 | 1998-09-29 | Compaq Computer Corporation | Buffer reservation method for a bus bridge system |
US5890011A (en) * | 1997-01-27 | 1999-03-30 | International Business Machines Corporation | Method and system for dynamically translating bus addresses within a computer system |
US6179486B1 (en) | 1997-05-13 | 2001-01-30 | Micron Electronics, Inc. | Method for hot add of a mass storage adapter on a system including a dynamically loaded adapter driver |
US6249834B1 (en) * | 1997-05-13 | 2001-06-19 | Micron Technology, Inc. | System for expanding PCI bus loading capacity |
US6282673B1 (en) | 1997-05-13 | 2001-08-28 | Micron Technology, Inc. | Method of recording information system events |
US6418492B1 (en) | 1997-05-13 | 2002-07-09 | Micron Electronics | Method for computer implemented hot-swap and hot-add |
US6182180B1 (en) | 1997-05-13 | 2001-01-30 | Micron Electronics, Inc. | Apparatus for interfacing buses |
US6269412B1 (en) | 1997-05-13 | 2001-07-31 | Micron Technology, Inc. | Apparatus for recording information system events |
US6324608B1 (en) | 1997-05-13 | 2001-11-27 | Micron Electronics | Method for hot swapping of network components |
US6145098A (en) | 1997-05-13 | 2000-11-07 | Micron Electronics, Inc. | System for displaying system status |
US6363497B1 (en) | 1997-05-13 | 2002-03-26 | Micron Technology, Inc. | System for clustering software applications |
US5987554A (en) * | 1997-05-13 | 1999-11-16 | Micron Electronics, Inc. | Method of controlling the transfer of information across an interface between two buses |
US6269417B1 (en) | 1997-05-13 | 2001-07-31 | Micron Technology, Inc. | Method for determining and displaying the physical slot number of an expansion bus device |
US6134668A (en) * | 1997-05-13 | 2000-10-17 | Micron Electronics, Inc. | Method of selective independent powering of portion of computer system through remote interface from remote interface power supply |
US6243773B1 (en) | 1997-05-13 | 2001-06-05 | Micron Electronics, Inc. | Configuration management system for hot adding and hot replacing devices |
US6122758A (en) * | 1997-05-13 | 2000-09-19 | Micron Electronics, Inc. | System for mapping environmental resources to memory for program access |
US6192434B1 (en) | 1997-05-13 | 2001-02-20 | Micron Electronics, Inc | System for hot swapping a programmable adapter by using a programmable processor to selectively disabling and enabling power thereto upon receiving respective control signals |
US6202160B1 (en) | 1997-05-13 | 2001-03-13 | Micron Electronics, Inc. | System for independent powering of a computer system |
US6247079B1 (en) * | 1997-05-13 | 2001-06-12 | Micron Electronics, Inc | Apparatus for computer implemented hot-swap and hot-add |
US6253334B1 (en) | 1997-05-13 | 2001-06-26 | Micron Electronics, Inc. | Three bus server architecture with a legacy PCI bus and mirrored I/O PCI buses |
US6173346B1 (en) | 1997-05-13 | 2001-01-09 | Micron Electronics, Inc. | Method for hot swapping a programmable storage adapter using a programmable processor for selectively enabling or disabling power to adapter slot in response to respective request signals |
US6338150B1 (en) * | 1997-05-13 | 2002-01-08 | Micron Technology, Inc. | Diagnostic and managing distributed processor system |
US6195717B1 (en) * | 1997-05-13 | 2001-02-27 | Micron Electronics, Inc. | Method of expanding bus loading capacity |
US6249828B1 (en) | 1997-05-13 | 2001-06-19 | Micron Electronics, Inc. | Method for the hot swap of a mass storage adapter on a system including a statically loaded adapter driver |
US6292905B1 (en) | 1997-05-13 | 2001-09-18 | Micron Technology, Inc. | Method for providing a fault tolerant network using distributed server processes to remap clustered network resources to other servers during server failure |
US6247080B1 (en) | 1997-05-13 | 2001-06-12 | Micron Electronics, Inc. | Method for the hot add of devices |
US6170067B1 (en) | 1997-05-13 | 2001-01-02 | Micron Technology, Inc. | System for automatically reporting a system failure in a server |
US6170028B1 (en) | 1997-05-13 | 2001-01-02 | Micron Electronics, Inc. | Method for hot swapping a programmable network adapter by using a programmable processor to selectively disabling and enabling power thereto upon receiving respective control signals |
US6243838B1 (en) | 1997-05-13 | 2001-06-05 | Micron Electronics, Inc. | Method for automatically reporting a system failure in a server |
US6249885B1 (en) | 1997-05-13 | 2001-06-19 | Karl S. Johnson | Method for managing environmental conditions of a distributed processor system |
US6202111B1 (en) | 1997-05-13 | 2001-03-13 | Micron Electronics, Inc. | Method for the hot add of a network adapter on a system including a statically loaded adapter driver |
US6163853A (en) | 1997-05-13 | 2000-12-19 | Micron Electronics, Inc. | Method for communicating a software-generated pulse waveform between two servers in a network |
US6266721B1 (en) | 1997-05-13 | 2001-07-24 | Micron Electronics, Inc. | System architecture for remote access and control of environmental management |
US6330690B1 (en) | 1997-05-13 | 2001-12-11 | Micron Electronics, Inc. | Method of resetting a server |
US6219734B1 (en) | 1997-05-13 | 2001-04-17 | Micron Electronics, Inc. | Method for the hot add of a mass storage adapter on a system including a statically loaded adapter driver |
US6499073B1 (en) | 1997-05-13 | 2002-12-24 | Micron Electronics, Inc. | System using programmable processor for selectively enabling or disabling power to adapter in response to respective request signals |
US6304929B1 (en) | 1997-05-13 | 2001-10-16 | Micron Electronics, Inc. | Method for hot swapping a programmable adapter by using a programmable processor to selectively disabling and enabling power thereto upon receiving respective control signals |
US6163849A (en) * | 1997-05-13 | 2000-12-19 | Micron Electronics, Inc. | Method of powering up or powering down a server to a maintenance state |
US5878237A (en) * | 1997-07-11 | 1999-03-02 | Compaq Computer Corp. | Apparatus, method and system for a comuter CPU and memory to PCI bridge having a pluarlity of physical PCI buses |
US6138179A (en) * | 1997-10-01 | 2000-10-24 | Micron Electronics, Inc. | System for automatically partitioning and formatting a primary hard disk for installing software in which selection of extended partition size is not related to size of hard disk |
US6212585B1 (en) | 1997-10-01 | 2001-04-03 | Micron Electronics, Inc. | Method of automatically configuring a server after hot add of a device |
US6263387B1 (en) | 1997-10-01 | 2001-07-17 | Micron Electronics, Inc. | System for automatically configuring a server after hot add of a device |
US6154835A (en) * | 1997-10-01 | 2000-11-28 | Micron Electronics, Inc. | Method for automatically configuring and formatting a computer system and installing software |
US6199173B1 (en) | 1997-10-01 | 2001-03-06 | Micron Electronics, Inc. | Method for mapping environmental resources to memory for program access |
US6175490B1 (en) | 1997-10-01 | 2001-01-16 | Micron Electronics, Inc. | Fault tolerant computer system |
US6418493B1 (en) * | 1997-12-29 | 2002-07-09 | Intel Corporation | Method and apparatus for robust addressing on a dynamically configurable bus |
JP4019482B2 (ja) * | 1998-01-23 | 2007-12-12 | ソニー株式会社 | 通信システム及びブリッジ装置 |
EP0933711B1 (de) * | 1998-01-29 | 2006-12-20 | Infineon Technologies AG | Anordnung und Verfahren zum Bereitstellen von Daten zur Charakterisierung von verschiedenen Einheiten an einem Bussystem |
US6094699A (en) * | 1998-02-13 | 2000-07-25 | Mylex Corporation | Apparatus and method for coupling devices to a PCI-to-PCI bridge in an intelligent I/O controller |
JPH11238030A (ja) * | 1998-02-20 | 1999-08-31 | Mitsubishi Electric Corp | Pci−pciブリッジおよびそのための先入れ先出しメモリ |
US6122677A (en) * | 1998-03-20 | 2000-09-19 | Micron Technology, Inc. | Method of shortening boot uptime in a computer system |
US6233638B1 (en) | 1998-03-20 | 2001-05-15 | Micron Electronics, Inc. | System for configuring peer devices |
US6349353B1 (en) * | 1998-05-08 | 2002-02-19 | Sun Microsystems, Inc. | System and method for detecting and routing between an optional plug-in controller and multiple fixed peripheral backplanes |
US6205503B1 (en) | 1998-07-17 | 2001-03-20 | Mallikarjunan Mahalingam | Method for the hot swap and add of input/output platforms and devices |
US6223234B1 (en) | 1998-07-17 | 2001-04-24 | Micron Electronics, Inc. | Apparatus for the hot swap and add of input/output platforms and devices |
US6088752A (en) * | 1998-08-06 | 2000-07-11 | Mobility Electronics, Inc. | Method and apparatus for exchanging information between buses in a portable computer and docking station through a bridge employing a serial link |
US6070214A (en) * | 1998-08-06 | 2000-05-30 | Mobility Electronics, Inc. | Serially linked bus bridge for expanding access over a first bus to a second bus |
US7734852B1 (en) * | 1998-08-06 | 2010-06-08 | Ahern Frank W | Modular computer system |
US7269680B1 (en) * | 1998-08-06 | 2007-09-11 | Tao Logic Systems Llc | System enabling device communication in an expanded computing device |
US6223239B1 (en) * | 1998-08-12 | 2001-04-24 | Compaq Computer Corporation | Dual purpose apparatus, method and system for accelerated graphics port or system area network interface |
US6119191A (en) * | 1998-09-01 | 2000-09-12 | International Business Machines Corporation | Performing PCI access cycles through PCI bridge hub routing |
BR0015907A (pt) * | 1999-12-02 | 2002-08-06 | Infineon Technologies Ag | Disposição de microprocessador com codificação |
EP1594066A3 (de) | 2000-02-14 | 2006-07-05 | Tao Logic Systems LLC | Rechnerankoppelsystem und Verfahren |
ATE329313T1 (de) | 2000-02-14 | 2006-06-15 | Tao Logic Systems Llc | Busbrücke |
US6594719B1 (en) | 2000-04-19 | 2003-07-15 | Mobility Electronics Inc. | Extended cardbus/pc card controller with split-bridge ™technology |
US6724220B1 (en) | 2000-10-26 | 2004-04-20 | Cyress Semiconductor Corporation | Programmable microcontroller architecture (mixed analog/digital) |
US8176296B2 (en) | 2000-10-26 | 2012-05-08 | Cypress Semiconductor Corporation | Programmable microcontroller architecture |
US8160864B1 (en) | 2000-10-26 | 2012-04-17 | Cypress Semiconductor Corporation | In-circuit emulator and pod synchronized boot |
US8149048B1 (en) | 2000-10-26 | 2012-04-03 | Cypress Semiconductor Corporation | Apparatus and method for programmable power management in a programmable analog circuit block |
US8103496B1 (en) | 2000-10-26 | 2012-01-24 | Cypress Semicondutor Corporation | Breakpoint control in an in-circuit emulation system |
KR100486244B1 (ko) * | 2001-10-16 | 2005-05-03 | 삼성전자주식회사 | 직렬 이이피롬을 이용하여 인터페이스용 카드를초기화하는 반도체 장치 및 초기화 방법 |
US7406674B1 (en) | 2001-10-24 | 2008-07-29 | Cypress Semiconductor Corporation | Method and apparatus for generating microcontroller configuration information |
US8078970B1 (en) | 2001-11-09 | 2011-12-13 | Cypress Semiconductor Corporation | Graphical user interface with user-selectable list-box |
US8042093B1 (en) | 2001-11-15 | 2011-10-18 | Cypress Semiconductor Corporation | System providing automatic source code generation for personalization and parameterization of user modules |
US7844437B1 (en) | 2001-11-19 | 2010-11-30 | Cypress Semiconductor Corporation | System and method for performing next placements and pruning of disallowed placements for programming an integrated circuit |
US6971004B1 (en) | 2001-11-19 | 2005-11-29 | Cypress Semiconductor Corp. | System and method of dynamically reconfiguring a programmable integrated circuit |
US20030131167A1 (en) * | 2001-12-20 | 2003-07-10 | Rankin Linda J. | Node ID discovery |
US8103497B1 (en) | 2002-03-28 | 2012-01-24 | Cypress Semiconductor Corporation | External interface for event architecture |
US6907510B2 (en) * | 2002-04-01 | 2005-06-14 | Intel Corporation | Mapping of interconnect configuration space |
US7308608B1 (en) | 2002-05-01 | 2007-12-11 | Cypress Semiconductor Corporation | Reconfigurable testing system and method |
US7313643B2 (en) * | 2004-02-17 | 2007-12-25 | Nec Electronics America, Inc. | PCI-express to PCI/PCI X translator |
US7295049B1 (en) | 2004-03-25 | 2007-11-13 | Cypress Semiconductor Corporation | Method and circuit for rapid alignment of signals |
US7332976B1 (en) * | 2005-02-04 | 2008-02-19 | Cypress Semiconductor Corporation | Poly-phase frequency synthesis oscillator |
US7400183B1 (en) | 2005-05-05 | 2008-07-15 | Cypress Semiconductor Corporation | Voltage controlled oscillator delay cell and method |
US8085067B1 (en) | 2005-12-21 | 2011-12-27 | Cypress Semiconductor Corporation | Differential-to-single ended signal converter circuit and method |
WO2007097036A1 (ja) * | 2006-02-27 | 2007-08-30 | Fujitsu Limited | 中央処理装置、中央処理装置の制御方法、情報処理システム |
US8067948B2 (en) | 2006-03-27 | 2011-11-29 | Cypress Semiconductor Corporation | Input/output multiplexer bus |
US20080201514A1 (en) * | 2007-02-21 | 2008-08-21 | Inventec Corporation | Method of locating peripheral component interconnect devices |
US8092083B2 (en) * | 2007-04-17 | 2012-01-10 | Cypress Semiconductor Corporation | Temperature sensor with digital bandgap |
US8130025B2 (en) | 2007-04-17 | 2012-03-06 | Cypress Semiconductor Corporation | Numerical band gap |
US7737724B2 (en) | 2007-04-17 | 2010-06-15 | Cypress Semiconductor Corporation | Universal digital block interconnection and channel routing |
US8572297B2 (en) * | 2007-04-17 | 2013-10-29 | Cypress Semiconductor Corporation | Programmable system-on-chip hub |
US8040266B2 (en) * | 2007-04-17 | 2011-10-18 | Cypress Semiconductor Corporation | Programmable sigma-delta analog-to-digital converter |
US8026739B2 (en) | 2007-04-17 | 2011-09-27 | Cypress Semiconductor Corporation | System level interconnect with programmable switching |
US8065653B1 (en) | 2007-04-25 | 2011-11-22 | Cypress Semiconductor Corporation | Configuration of programmable IC design elements |
US9720805B1 (en) | 2007-04-25 | 2017-08-01 | Cypress Semiconductor Corporation | System and method for controlling a target device |
US8266575B1 (en) | 2007-04-25 | 2012-09-11 | Cypress Semiconductor Corporation | Systems and methods for dynamically reconfiguring a programmable system on a chip |
US8049569B1 (en) | 2007-09-05 | 2011-11-01 | Cypress Semiconductor Corporation | Circuit and method for improving the accuracy of a crystal-less oscillator having dual-frequency modes |
US20090077297A1 (en) * | 2007-09-14 | 2009-03-19 | Hongxiao Zhao | Method and system for dynamically reconfiguring PCIe-cardbus controllers |
JP5180729B2 (ja) * | 2008-08-05 | 2013-04-10 | 株式会社日立製作所 | 計算機システム及びバス割当方法 |
US9448964B2 (en) | 2009-05-04 | 2016-09-20 | Cypress Semiconductor Corporation | Autonomous control in a programmable system |
CN102141967B (zh) * | 2010-11-02 | 2013-04-24 | 华为技术有限公司 | 总线时序参数配置方法和装置 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4660141A (en) * | 1983-12-06 | 1987-04-21 | Tri Sigma Corporation | Self configuring computer network with automatic bus exchange of module identification numbers and processor assigned module numbers |
US4754488A (en) * | 1984-12-07 | 1988-06-28 | International Business Machines Corporation | Method for ascertaining and filling of bounded areas of a colored raster display |
US4855899A (en) * | 1987-04-13 | 1989-08-08 | Prime Computer, Inc. | Multiple I/O bus virtual broadcast of programmed I/O instructions |
GB8817288D0 (en) * | 1988-07-20 | 1988-08-24 | Racal Milgo Ltd | Methods of & networks for information communication |
US4868814A (en) * | 1988-07-22 | 1989-09-19 | Allied-Signal Inc. | Multilevel concurrent communications architecture for multiprocessor computer systems |
US4912633A (en) * | 1988-10-24 | 1990-03-27 | Ncr Corporation | Hierarchical multiple bus computer architecture |
EP0443876A3 (en) * | 1990-02-23 | 1992-01-02 | Kabushiki Kaisha Toshiba | Computer system capable of connecting expansion unit |
US5249261A (en) * | 1990-02-26 | 1993-09-28 | International Business Machines Corporation | Failure history table for optimizing backtrack searches |
ATE146614T1 (de) * | 1990-08-31 | 1997-01-15 | Advanced Micro Devices Inc | Integrierte digitale verarbeitungsvorrichtung |
FR2676558B1 (fr) * | 1991-05-15 | 1993-07-23 | Opticable | Procede pour determiner automatiquement la configuration d'un reseau. |
US5359715A (en) * | 1991-09-16 | 1994-10-25 | Ncr Corporation | Architectures for computer systems having multiple processors, multiple system buses and multiple I/O buses interfaced via multiple ported interfaces |
US5379384A (en) * | 1992-06-05 | 1995-01-03 | Intel Corporation | Configuration data loopback in a bus bridge circuit |
-
1993
- 1993-05-28 US US08/070,134 patent/US5542055A/en not_active Expired - Fee Related
-
1994
- 1994-05-24 JP JP6109229A patent/JPH06348642A/ja active Pending
- 1994-05-25 DE DE69421755T patent/DE69421755T2/de not_active Expired - Fee Related
- 1994-05-25 EP EP94303780A patent/EP0631241B1/de not_active Expired - Lifetime
- 1994-05-26 KR KR94011541A patent/KR970008192B1/ko not_active IP Right Cessation
- 1994-05-27 BR BR9402106A patent/BR9402106A/pt not_active IP Right Cessation
- 1994-05-30 CA CA002124618A patent/CA2124618A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
JPH06348642A (ja) | 1994-12-22 |
BR9402106A (pt) | 1994-12-13 |
EP0631241B1 (de) | 1999-11-24 |
EP0631241A1 (de) | 1994-12-28 |
DE69421755D1 (de) | 1999-12-30 |
CA2124618A1 (en) | 1994-11-29 |
KR970008192B1 (en) | 1997-05-21 |
US5542055A (en) | 1996-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69421755T2 (de) | Initialisierung von Mehrfachbus-Netzwerken | |
DE69737919T2 (de) | Verfahren zur Zuordnung von Systembetriebsmitteln in einer hierarchischen Busstruktur | |
DE69027348T2 (de) | Speicherblockadressenermittlungsschaltkreis | |
DE19882696B4 (de) | Speichertransaktionen auf einem Bus geringer Leitungsanzahl | |
DE60006779T2 (de) | Verfahren zum schreiben eines geänderten bios codes in den rompeicherchip einer hostschnittstelle | |
DE69804115T2 (de) | Datenübertragung auf einem nichtflüchtigen speichermedium | |
DE69131610T2 (de) | Ermittlung des Speicheradressraums durch Verwendung von programmierbaren Grenzregistern mit Komparatoren mit einzelnen Ausgängen | |
DE3881414T2 (de) | Datenverarbeitungssystem mit einer steckbaren optionellen Karte. | |
DE69817170T2 (de) | Emulation von unterbrechungsmechanismus in einem multiprozessorsystem | |
DE69230211T2 (de) | Integrierter Speicher, Verwaltungsverfahren und resultierendes Informationssystem | |
DE69422221T2 (de) | Genaue und komplette Übertragung zwischen verschiedenen Busarchitekturen | |
DE69523395T2 (de) | Datenprozessor mit gesteuertem Stoss-Speicherzugriff und Vorrichtung dafür | |
DE69428538T2 (de) | Verfahren zum konfigurieren von mehreren adapterkarten auf einem bus | |
DE69626962T2 (de) | Verfahren und anordnung zum betrieb eines mit einem hauptrechner verbundenen massenspeicher-computerperipheriegerätes | |
DE60025788T2 (de) | Flexibles Mehrzweck-Ein/Ausgabesystem | |
DE2517276A1 (de) | Datenverarbeitungssystem | |
DE102013018135B4 (de) | Adressenbit-Wiederabbildungsschema zur Reduzierung einer Zugriffsauflösung von DRAM-Zugriffen | |
DE3587031T2 (de) | Zugriffpruefungseinrichtung fuer digitale datenverarbeitungsanordnung, welche einen speicher mit seitenabruf hat. | |
DE19882975B4 (de) | Zugreifen auf eine Nachrichtenaustauscheinheit von einem sekundären Bus aus | |
DE69033412T2 (de) | Datenübertragungssteuervorrichtung für Parallelverarbeitungssysteme | |
DE69119149T2 (de) | Struktur zur direkten Speicher-zu-Speicher-Übertragung | |
DE69029815T2 (de) | Zentralisierte referenz- und änderungstabelle für eine virtuelle speicheranordnung | |
DE10231956A1 (de) | Verfahren und Vorrichtung zur systeminternen Programmierung durch einen gemeinsamen Verbindungspunkt von programmierbaren logischen Bauelementen auf mehreren Schaltungsplatinen eines Systems | |
DE69429309T2 (de) | Adressendekoder mit geringer Schaltungsgrösse und Adressbereicherweiterungsmöglichkeit | |
DE69315192T2 (de) | Datenverarbeitungssystem und -Verfahren mit einem erweitbaren Register |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |