DE3856079T2 - Verfahren für einen Blockdiagramm-Simulator - Google Patents
Verfahren für einen Blockdiagramm-SimulatorInfo
- Publication number
- DE3856079T2 DE3856079T2 DE3856079T DE3856079T DE3856079T2 DE 3856079 T2 DE3856079 T2 DE 3856079T2 DE 3856079 T DE3856079 T DE 3856079T DE 3856079 T DE3856079 T DE 3856079T DE 3856079 T2 DE3856079 T2 DE 3856079T2
- Authority
- DE
- Germany
- Prior art keywords
- block
- list
- input
- sequence
- procedure
- 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 - Lifetime
Links
- 238000000034 method Methods 0.000 title claims abstract description 1030
- 238000010586 diagram Methods 0.000 title claims abstract description 247
- 238000012545 processing Methods 0.000 claims description 168
- 230000008569 process Effects 0.000 claims description 70
- 238000004088 simulation Methods 0.000 claims description 65
- 238000004590 computer program Methods 0.000 claims description 45
- 238000012163 sequencing technique Methods 0.000 claims description 28
- 230000015572 biosynthetic process Effects 0.000 claims description 11
- 230000001419 dependent effect Effects 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 63
- 239000013598 vector Substances 0.000 description 29
- 239000000872 buffer Substances 0.000 description 19
- 238000013461 design Methods 0.000 description 16
- 238000004458 analytical method Methods 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 9
- 230000008859 change Effects 0.000 description 9
- 239000004065 semiconductor Substances 0.000 description 9
- 238000004891 communication Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 238000011423 initialization method Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 230000002452 interceptive effect Effects 0.000 description 4
- 230000003044 adaptive effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000005094 computer simulation Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 1
- 238000004870 electrical engineering Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003595 spectral effect Effects 0.000 description 1
- 238000010183 spectrum analysis Methods 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- VLCQZHSMCYCDJL-UHFFFAOYSA-N tribenuron methyl Chemical compound COC(=O)C1=CC=CC=C1S(=O)(=O)NC(=O)N(C)C1=NC(C)=NC(OC)=N1 VLCQZHSMCYCDJL-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2111/00—Details relating to CAD techniques
- G06F2111/12—Symbolic schematics
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Mobile Radio Communication Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Regulating Braking Force (AREA)
- Feedback Control In General (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
- Diese Erfindung betrifft ein Verfahren zum Assemblieren und Ausführen einer Software-Computerprogramm-Darstellung eines Blockdiagramms mit keiner, einer oder mehreren Rückkopplungsschleifen.
- Während der letzten zwei Jahrzehnte hat sich ein wachsendes Interesse am Einsatz von simulationsgestützten Verfahren für die Analyse und den Entwurf von Signalprozessorsystemen, Kommunikationssystemen und Steuerungssystemen ergeben. Tatsächlich wurden eine Reihe von Systemen für die simulationsgestützte Analyse entwickelt, um die Leistung, Prüf- und Verkaufsanalysen eines vorgeschlagenen Systems zu bestimmen, vgl. Shanmugan et al., "Block-Oriented Systems Simulator (BOSS)", S. 36.1.1 bis 36.1.10, IEEE (1986); Shanmugan et al., "Computer-Aided Modeling, Analysis and Design of Communication Systems", IEEE, Journal on Selected Issues in Communications, (Jan. 1984).
- Es gibt viele Situationen, in denen eine ausdrückliche Bewertung der Leistung eines vorgeschlagenen Systems nicht durchgeführt werden kann, ohne daß tatsächlich ein Prototyp hergestellt wird. Dieser Lösungsweg ist üblicherweise beschwerlich, teuer, zeitaufwendig und relativ unflexibel; wohingegen eine Computersimulation des vorgeschlagenen Systems auf einfachere Weise generiert werden, und kann dazu verwendet werden, die Analyse, das Testen und die Dokumentation des vorgeschlagenen Systems durchzuführen.
- Jetzt sind Simulatoren zum Generieren von Modellen und/oder Software-Computerprogramme erhältlich, um die Leistung von Prototypen oder bestehenden Systemen auf einer Datenstation Plattform zur computergestützten Entwicklung (Computer Aided Engineering (CAE) Workstation Plattform) zu simulieren und zu überprüfen. Eine CAE-Datenstation umfaßt üblicherweise einen programmierbaren Mikroprozessor und einen Grafikbildschirm, der ein Kathodenstrahlröhren (CRT, Cathode Ray Tube) Bildschirm ist. Die Simulatoren stellen dem Konstrukteur eine anwenderfreundliche Umgebung und einfach zu verwendende Entwurfswerkzeuge zur Verfügung, um die Systeme zu konfigurieren. Üblicherweise weist ein Simulator vier Grundkomponenten auf; einen Systemkonfigurator, eine Funktionsblockbibliothek, eine Vorrichtung zum Erstellen eines Simulationsprogramms und einen Signalanzeige Editor.
- Der Systemkonfigurator ermöglicht es einem Anwender, die Topologie eines vorgeschlagenen Systems mittels miteinander verbundener Funktionsblöcke zu bestimmen. Bei einigen Simulatoren verwendet der Systemkonfigurator interaktive Grafiken, vgl. Modestino et al., "Interactive Simulation of Digital Communication Systems", (Jan. 1984), Wade et al., "Interactive Communication Systems Simulation Model", (Jan. 1984), während der Systemkonfigurator bei anderen computerorientierte Softwaresprachen einer höheren Ebene verwendet, vgl. Fashano, "Communication Systems Simulation Using SYSTID", (Jan. 1984), Poza et al., "A Wideband Datalink Computer Simulation Model", Computers and Electrical Engineering, (1978).
- Heutzutage weist ein typischer Simulator für eine Datenstation Plattform einen Systemkonfigurator auf, der Blockdiagramm Editor (BDE) genannt wird. Der BDE ist ein Softwarepaket, das es einem Konstrukteur ermöglicht, ein Blockdiagramm eines zu simulierenden Systems zu konstruieren. Ein hochauflösender Grafikbildschirm wird verwendet, um das Blockdiagramm darzustellen, um den Anwender zu unterstützen, das Blockdiagramm zu entwerfen, zu editieren und damit zu arbeiten. Es ist auch eine umfangreiche Bibliothek von Funktionsblocksymbolen vorgesehen, um es dem Konstrukteur zu ermöglichen, aus bestehenden Blöcken auswählen und diese verwenden zu können, anstatt diese selbst entwerfen zu müssen.
- Die Bibliothek umfaßt Informationen über jeden Block, einschließlich seiner Untermodule, Verbindungen, Dokumentation und der Programmcodes einer höheren Ebene, die allesamt dem Konstrukteur über Online-Fenster zur Verfügung gestellt werden können. Die Funktionsblöcke umfassen einen weiten Bereich an Komplexität, sie beginnen mit "einfachen" Blöcken, wie Additions- und Multipliziererblöcken bis hin zu Blöcken, die Funktionen einer höheren Ebene ausführen. Der Anwender kann die Blöcke mittels Verbindungslinien miteinander verbinden und benötigte Parameterinformationen für jeden der Blöcke zur Verfügung stellen. Die Konfiguration, die durch den Konstrukteur definiert wurde, kann dann auch verwendet werden, um einen neuen Block zu definieren, der in der Bibliothek gespeichert werden kann und der später als ein einzelner Block in einer höheren Ebene in einem hierarchischen Systementwurf aufgerufen werden kann.
- Sobald das Blockdiagramm von dem Konstrukteur definiert worden ist, verdichtet der BDE das Blockdiagramm und stellt es als eine Netzwerkliste oder "Netzliste" dar. Die Netzliste ist eine computerlesbare Form des Blockdiagramms, die die gesamten benötigten Informationen über das Blockdiagramm enthält, beispielsweise wie die Blöcke miteinander verbunden sind, den Softwareprozeduraufruf, den der Block darstellt, Parameterlisten, usw. Der Simulator wandelt die Netzlisten Version des Blockdiagramms durch den Einsatz eines Simulationsprogramm Generators (SPB, Simulation Program Builder) in ein Computerprogramm einer höheren Ebene um. Das Computerprogramm einer höheren Ebene ist im wesentlichen ein Modell des vorgeschlagenen Systems, das vorher durch das Blockdiagramm beschrieben wurde.
- Der Code einer höheren Ebene kann dann ausgeführt werden, um eine Simulation des Blockdiagramms durchzuführen und darzustellen. Üblicherweise wird die Simulation ohne jegliche Eingriffe des Anwenders durchgeführt. Während der Simulationsdurchführung können ausgewählte Signalwerte gesammelt und in verschiedenen Signaldateien gespeichert werden. Auf diese Signaldateien kann dann durch einen Signalanzeige Editor (SDE, Signal Display Editor) zugegriffen werden, der es dem Konstrukteur erlaubt, die Signale zu erzeugen, zu bearbeiten und zu analysieren.
- Der Signalanzeige Editor verwendet eine Vielzahl von Signalabbildungs- und -bearbeitungstechniken, um die Ergebnisse einer Simulation zu analysieren. Der Konstrukteur kann aus einer Vielzahl von Befehlen wählen, wie beispielsweise einen Bereich eines Signals auszuwählen und es als eine Funktion der Zeit darzustellen und eine Spektralanalyse durchzuführen.
- Es sind Simulatoren bekannt, die die Fähigkeit besitzen, Blockdiagramme als Darstellung von Systemen mit einer "Rückkopplung" zu simulieren. Eine Rückkopplung ist die Rückführung des Ausgangs eines Systems oder Prozesses zu einer vorangehenden Strecke in dem gleichen System oder Prozeß zu dem Zweck, es dem System oder dem Prozeß zu ermöglichen, selbstkorrigierende Aktionen auf Grundlage seines Ausgangs durchzuführen.
- Ein Beispiel eines Systems mit einer Rückkopplung ist ein einfaches signalverarbeitendes Filter, das eine fortlaufende Auswertung des Ausgangs des Filters erfordert, um zu bestimmen, welche Korrekturmaßnahmen vorzunehmen sind. Systeme mit einer Rückkopplung sind nicht auf eine signalverarbeitende Umgebung beschränkt. Tatsächlich muß jedes System, das Maßnahmen einer selbstkorrigierenden Art hat, mit irgendeiner Form einer Rückkopplungsanordnung entworfen und modelliert werden. Gegenwärtige Simulatoren haben nicht die Fähigkeit, Systeme mit einer Rückkopplung in angemessener Weise zu simulieren, weil sie die Blöcke in einer Rückkopplungs umgebung, die eine "Verzögerungseigenschaft" aufweisen, auf ineffiziente Weise modellieren und simulieren; die Verzögerungseigenschaft erfordert, daß die Blöcke einen "Zustand" aufweisen. Ein "Zustand" ist ein vorbestimmter Vektor mit Parametern, die Zustandsvariable genannt werden. Zustandsvariable sind durch die nachfolgenden Bedingungen definiert:
- 1) Für jede Zeit, beispielsweise T&sub1; (Zeit), bestimmen der Zustand bei T&sub1; (das heißt die Zustandsvariablen) und die Eingangswellenformen eindeutig den Zustand zu jeder Zeit T > T&sub1;; und
- 2) der Zustand zu jeder Zeit T und die Eingänge zu jeder Zeit T bestimmen eindeutig den Wert des Ausgangs des Blocks zu der Zeit T, vgl. Desoer et al., Basic Dircuit Theory 198, 508 (1969).
- Im wesentlichen ermöglicht es ein "Zustand" einem Block definierte Ausgänge zu verarbeiten und zu generieren, ohne definierte Eingänge haben zu müssen. Der Grundsatz der "Verzögerung" kommt von der Tatsache, daß die Eingangswerte nicht sofort benötigt werden, um die Funktion des Blocks zu verarbeiten, um definierte Informationen zu erzeugen. Dieses Prinzip wird im Rahmen der detaillierten Beschreibung dieser Anmeldung näher erläutert.
- Ein solches Beispiel eines gegenwärtigen Simulators, der Blockdiagramme mit Rückkopplungsschleifen auf ineffieziente Weise modelliert und simuliert, wird in einem Artikel von David G. Messerschmitt mit dem Titel "A Tool for Structured Functional Simulation", IEEE Journal, Selected Areas On Communication, Vol. SAC-2, Nr. 1, (Jan. 1984) beschrieben. In diesem Artikel ist ein "BLOSIM" genanntes System zur Simulation von Blockdiagrammen beschrieben. Um es auf die "Verzögerungseigenschaft" von Blöcken, die in Rückkopplungsschleifen auftreten, auszurichten, verfügt das BLOSIM- System über ein System zwischenspeichernder Art, um eine korrekte Synchronisation der Verzögerungsblöcke sicherzustellen. Genauer gesagt ist für jeden Verzögerungsblock ein Eingangs-"FIFO" (first-in, first-out)-Zwischenspeicher und ein Ausgangs-FIFO-Zwischenspeicher vorgesehen. Das BLOSIM- System verfügt über eine einzelne Softwareprozedur als Darstellung von jedem Verzögerungsblock. Die Softwareprozedur enthält bedingte Anweisungen, um den Zustand der Zwischenspeicher auszuwerten. Diese Anweisungen werden während der Simulation des Blockdiagramms ausgeführt, um festzustellen, wann bestimmte Bereiche der Routine als Darstellung des Verzögerungsblocks ausgeführt werden müssen.
- Zusätzlich bringt eine Abfolge-Routine, um die Effizienz zu verbessern, die Softwareprozeduren für die Blöcke vorab in eine derartige Abfolge, daß sie in der Reihenfolge des "Signalflusses" ausgeführt werden, der durch die besondere Topologie von Verbindungen der Blöcke in dem Blockdiagramm bestimmt wird. Allerdings wird die Vorab-Abfolgeprozedur alleine die Softwareprozeduren als Darstellungen von Blockdiagrammen, die eine oder mehrere Rückkopplungsschleifen aufweisen, nicht in die korrekte Reihenfolge bringen. Durch wiederholtes Ausführen der Softwareprozeduren in der Reihenfolge, die durch die Vorab-Abfolgeoperation bestimmt wurde, stellt BLOSIM dem Eingangs-FIFO-Zwischenspeicher abrufbare Beispielwerte zur Verfügung. Wenn der Ausgangs- FIFO-Zwischenspeicher für einen bestimmten Verzögerungsblock nicht voll ist und der Eingangs-FIFO-Zwischenspeicher nicht leer ist, entfernt die Softwareprozedur als Darstellung des Blocks einen Eingangswert aus dem Eingangs- FIFO-Zwischenspeicher und steuert die notwendigen Operationen als Darstellung des Blocks. Dem Ausgangs-FIFO- Zwischenspeicher für den entsprechenden Block werden Ausgänge zur Verfügung gestellt, bis der Ausgangs-FIFO- Zwischenspeicher voll ist. Die Simulation "fährt sich fest" (endet) sobald jede Softwareprozedur als Darstellung des Blocks nicht versucht, auf einen FIFO-Zwischenspeicher zuzugreifen oder einen leeren Eingangs-FIFO-Zwischenspeicher oder einen vollen Ausgangs-FIFO-Zwischenspeiqher aufweist, vgl. Messerschmitt, "BLOSIM, A Block Simulator", Version 1.1, University of California, Berkeley, internal memo (7. Juni 1987).
- Der BLOSIM-Simulator verwendet ineffiziente Softwareprogramme und verursacht in der Folge eine ineffiziente Ausführung, weil Teile des Programms wiederholt ausgeführt werden, bis jeder Block einen leeren Eingangs-FIFO- Zwischenspeicher oder einen vollen Ausgangs-FIFO-Zwischenspeicher aufweist oder nicht versucht, auf einen FIFO- Zwischenspeicher zuzugreifen. Zusätzlich enthält jedes Softwareprogramm als Darstellung eines Verzögerungsblocks mindestens eine bedingte Anweisung, die wiederholt ausgeführt wird, um festzustellen, wann der Eingangs-FIFO- Zwischenspeicher leer und/ oder wann der Ausgangs-FIFO- Zwischenspeicher voll ist. Solch ein wiederholtes Ausführen des Programms während der Simulation verlangsamt die Simulation. Des weiteren organisiert BLOSIM nicht oder bringt die Prozeduren nicht in eine Abfolge zum Abspeichern, so daß die Prozeduren später in den Speicher eines Halbleiterbauelements zur Kontrolle dieses Halbleiterbauelements geladen werden könnten.
- Das U.S. Patent 4,677,587 von Zemany offenbart einen Simulator zur Generierung eines Computerprogramms als Darstellung eines Blockdiagramms mit einer oder mehreren Rückkopplungsschleifen. Insbesondere bildet das System eine Tabelle, in die der Anwender Blockbezeichnungen für jeden Block des Blockdiagramms einfügt. Der Anwender bestimmt auch die Verbindungen von jedem Block mit den anderen Blöcken des Blockdiagramms. Die Informationen für jeden Block werden in die Tabelle in der Reihenfolge eingegeben, in der sie in dem Blockdiagramm von links nach rechts auftreten, außer den Blöcken, die eine Verzögerungseigenschaft aufweisen, die als letzte eingegeben werden. Das System stellt eine Testfunktion zur Verfügung, um sicherzustellen, daß die Blockbezeichnungen und die Verbindungen in der korrekten Reihenfolge durch die Bedienungsperson eingegeben wurden.
- Der Zemany-Simulator erstellt auf ineffiziente Weise ein Computerprogramm als Darstellung eines Blockdiagramms, weil der Anwender des Systems eine Tabelle mit Prozeduraufrufen als Darstellung des Blockdiagramms erstellen muß. Wenn das Blockdiagramm komplex ist, wird die Aufgabe der Bedienungsperson sehr zeitaufwendig und beschwerlich. Insgesamt ist der von Zemany offenbarte Simulator eine nicht automatisierte Datenstation, um den Anwender beim Entwurf von Computerprogrammen als Darstellung von Blockdiagrammen zu unterstützen.
- Ein anderes Beispiel eines gegenwärtigen Simulators, der auf ineffiziente Weise Blockdiagramme mit einer oder mehreren Rückkopplungsschleifen modelliert, wird in einem Anwender Handbuch mit dem Titel "BOSS (Block Oriented Systems Simulator)", University of Kansas and TRW, BOSS Version: Star 1.1 (1936) beschrieben. In diesem Handbuch ist ein "BOSS" genanntes System zur Simulation von Blockdiagrammen beschrieben. Um es auf Blöcke auszurichten, die eine Verzögerungseigenschaft aufweisen, stellt das BOSS-System bestimmte Verzögerungselemente zur Verfügung, die in der Simulation vorhanden sein müssen. Das BOSS-System stellt keinen Mechanismus zur Verfügung, um es einem Anwender des Systems zu erlauben, seine eigenen Blöcke zu entwerfen und zu bezeichnen, die eine Verzögerungseigenschaft aufweisen. Aus diesem Grund kann die Aufgabe des Anwenders, Systeme zu entwerfen, die Rückkopplungsschleifen aufweisen, beschwerlich werden, weil der Anwender gezwungen ist, lediglich die Verzögerungselemente zu verwenden, die von dem System zur Verfügung gestellt werden.
- Die vorliegende Erfindung hat die Aufgabe, ein Verfahren und eine Vorrichtung zu schaffen, die die oben genannten Nachteile reduzieren oder beheben.
- Gemäß dieser Erfindung wird ein Verfahren, wie in Anspruch 1 dargelegt, geschaffen. Kurz gesagt weist eine bevorzugte Ausführungsform der Erfindung eine Vorrichtung und/ oder ein Verfahren auf, die einen automatischen Programmgenerator-Computer verwendet zum Generieren eines Computerprogramms, das ein funktionales System auf einer Anzeige darstellt. Ein System hat eine Vielzahl von interaktiv verbundener Funktionsblöcke, die ein Blockdiagramm bilden, und das Blockdiagramm weist üblicherweise eine oder mehrere Rückkopplungsschleifen auf. Jede Rückkopplungsschleife ist eine Reihe von einem oder mehreren Blöcken, die durch eine Signalflußlinie miteinander verbunden sind, die den Anfang der Reihe mit dem Ende der Reihe verbindet. Jeder der Blöcke hat mindestens einen Eingang, zumindest einige der Blöcke haben mindestens einen Eingang, der funktional definiert ist durch und verbunden ist mit mindestens einem der Ausgänge des gleichen Blocks oder eines anderen Blocks. Mindestens einer der Blöcke ist ein Zustandsblock, dessen Betrieb zu einer Zeit abhängig ist von dem Zustand mindestens eines Eingangs des Zustandsblocks zu einer vorangegangenen Zeit. Eine gespeicherte Fortschreibungszustandsprozedur, die dem Zustandsblock entspricht, definiert den Zustand als eine Funktion des mindestens einen Eingangs des Zustandsblocks. Mindestens eine gespeicherte Fortschreibungsausgangsprozedur steht zur Verfügung und entspricht jedem der Blöcke, um mindestens einen der Ausgänge eines Blocks zu definieren. Der Ausgang der Fortschreibungsausgangsprozedur ist eine Funktion von mindestens einem der Eingänge eines Blocks und/ oder dem Zustand eines Blocks. Eine gespeicherte Liste mit Darstellungen wird von der Vorrichtung und/ oder dem Verfahren verwendet. Die gespeicherte Liste umfaßt Darstellungen von Merkmalen von jedem der Blöcke in dem Blockdiagramm.
- In einer bevorzugten Ausführungsform der Erfindung erfolgt das Generieren eines Computerprogramms, das ein funktionales System darstellt, automatisch. Insbesondere werden die Darstellungen der Merkmale der Blöcke verarbeitet, um in einer Abfolge Darstellungen von Fortschreibungszustandsprozeduren, falls vorhanden, und Darstellungen von Fortschreibungsausgangsprozeduren für jeden Block zu bilden. Zusätzlich umfaßt die Abfolge für jeden der Zustandsblöcke eine entsprechende Fortschreibungszustandsprozedur, die getrennt ist von der Fortschreibungsausgangsprozedur für den entsprechenden Zustandsblock.
- Vorzugsweise erfolgt die automatische Assemblierung eines Computerprogramms als Darstellung eines Blockdiagramms in zwei Schritten. Zuerst werden für jeden Block drei Listen mit Informationen erzeugt, nämlich eine Liste der Eingänge zu jedem Block, eine Liste der Ausgänge von jedem Block und mindestens eine Durchführungsliste, die einem der Ausgänge des Blocks entspricht. Jede Durchführungsliste umfaßt eine Liste der Eingänge, die den Ausgang unmittelbar beeinflussen. Es wird angenommen, daß ein Eingang einen Ausgang unmittelbar beeinflußt, wenn während einer Iteration der Ausführung eine Störung des Eingangs eine Änderung des Ausgangs des Blocks, die zur gleichen Zeit auftritt wie die Störung des Eingangs, bewirken würde.
- Der zweite Schritt umfaßt die Erzeugung einer geordneten Liste oder einer Abfolgeliste, um die Reihenfolge der Ausführung der Prozeduraufrufe als Darstellung der Blöcke festzustellen. Dieser Schritt besteht üblicherweise aus vier Unterschritten. Zuerst wird jede Durchführungsliste durchgesehen, um festzustellen, ob jeder der Eingänge in der Durchführungsliste definiert ist. Es wird angenommen, daß die Eingänge bestimmt sind, wenn ein Fortschreibungsausgangsprozeduraufruf (Adresse, Speicherposition, usw.), um jeden Eingang zu steuern, in der Abfolgeliste gespeichert ist. Der zweite Schritt umfaßt das Speichern des Aufrufs einer Ausgangsprozedur für jeden der Ausgänge in der Abfolgeliste, wenn alle Eingänge für die entsprechende Durchführungsliste definiert sind. Der dritte Schritt umfaßt das Durchsehen jeder Eingangsliste, um festzustellen, ob alle Eingänge in den Eingangslisten definiert sind. Jeder Eingang in den Eingangslisten ist auch bestimmt, wenn ein entsprechender Fortschreibungsausgangsprozeduraufruf, um den Eingang zu steuern, in der Abfolgeliste gespeichert ist. Der letzte Schritt umfaßt das Speichern eines Aufrufs der Fortschreibungszustandsprozedur, der den Blöcken entspricht, die einen Zustand aufweisen, in der Abfolgeliste. Der Fortschreibungszustandsprozeduraufruf wird in der Abfolgeliste gespeichert, wenn alle Eingänge in der Eingangsliste definiert sind.
- Nachdem die Abfolgeliste erstellt ist, wird sie dann zu einem Software Computerprogramm kompiliert, das eine Darstellung des Blockdiagramms ist. Das resultierende Software Computerprogramm kann gespeichert und/ oder ausgeführt werden, um das Blockdiagramm zu simulieren.
- Der Block mit einer Verzögerungseigenschaft wird effizienter simuliert, indem seine Funktionalität in zwei getrennte Softwareprozeduren geteilt wird. Die erste Prozedur ist eine Fortschreibung von einem oder mehreren Ausgängen des Blocks, abhängig von dem internen Zustand und/ oder den Eingängen des Blocks, und die zweite Prozedur ist eine Fortschreibung des internen Zustands des Blocks, abhängig von den Eingängen zu dem Block, sobald sie bestimmt sind. Der Simulator erkennt automatisch, ob ein Ausgang eines Blocks eine Verzögerungseigenschaft aufweist oder nicht, indem die eindeutige Durchführungsliste, die dem Ausgang zugeordnet ist, analysiert wird.
- In der bevorzugten Ausführungsform stellt der Simulator die korrekte Abfolge der Ausführung von allen Softwareprozeduren fest, indem er analysiert, ob die Eingänge in einer Durchführungsliste definiert sind. Durch das korrekte Ordnen der Softwareprozeduren stellt die vorliegende Erfindung sicher, daß eine Simulation des resultierenden Software Computerprogramms richtige Ergebnisse erzeugen wird.
- Anwender des Systems können ihre eigenen Blöcke entwerfen, die eine Verzögerungseigenschaft aufweisen, indem sie eine Durchführungsliste für jeden Ausgang des Blocks bestimmen. Wohingegen Anwender des BOSS-Systems außerstande sind, ihre eigenen Blöcke zu entwerfen, die eine Verzögerung aufweisen, weil ein Mechanismus zur Charakterisierung der Verzögerungseigenschaft des Blocks nicht vorgesehen ist.
- Die vorliegende Erfindung erstellt auf effizientere Weise Computerprogramme als Darstellung von Blockdiagrammen als der Simulator, der von Zemany offenbart wird, weil die Erstellung automatisch erfolgt, ohne auf Eingriffe des Anwenders angewiesen zu sein.
- Das resultierende Computerprogramm als Darstellung des Blockdiagramms führt Simulationen auf effizientere Weise aus als BLOSIM, weil das resultierende Programm keine Abfolgeprozeduren aufweist, die während der Simulation auszuführen sind. Stattdessen müssen nur die Prozeduren ausgeführt werden, die für die Simulation des Blockdiagramms notwendig sind. Genauer gesagt sind zwei getrennte Prozeduren vorgesehen, nämlich die Fortschreibungsausgangs- und die Fortschreibungszustandsprozedur, welche die Funktionen von jedem Block mit einer Verzögerungseigenschaft unabhängig voneinander ausführen können. Das Programm, um diese Prozeduren in eine Abfolge zu bringen, wird getrennt von der Ausführung dieser Prozeduren ausgeführt. Auf diese Weise wird die Ausführung des Programms als Darstellung des Blockdiagramms effizienter ausgeführt, weil während einer Simulation keine Abfolgeschritte ausgeführt werden.
- Fig. 1A ist ein schematisches Blockdiagramm eines Simulators zur Assemblierung eines Software Computerprogramms als Darstellung eines Blockdiagramms gemäß der vorliegenden Erfindung;
- Fig. 1 stellt ein schematisches Blockdiagramm von Computerprogrammen zum Betrieb des Simulators aus Fig. 1A dar;
- Fig. 2 ist ein einfaches Blockdiagramm mit einer Rückkopplungsschleife, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 3 ist ein Blockdiagramm einer signalverarbeitenden Filteranordnung, das auf der Anzeige und in dem Simulator aus Fig. 1A ausgebildet ist;
- Fig. 3A stellt eine repräsentative Netzliste dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A verwendet werden, um das Blockdiagramm aus Fig. 3 zu interpretieren;
- Fig. 3B stellt eine Darstellung einer Abfolgeliste mit Prozeduraufrufen dar, die in einem Speicher des Systems aus Fig. 1A gespeichert sind, die Fortschreibungsausgangsprozeduren und Fortschreibungszustandsprozeduren umfaßt, die von dem Simulator aus Fig. 1A ausgeführt werden, um das Blockdiagramm aus Fig. 3 zu simulieren;
- Fig. 3C stellt eine Darstellung einer Bibliothek mit Prozeduren dar, die in einem Speicher des Systems aus Fig. 1A gespeichert sind, auf die über die Prozeduraufrufe aus Fig. 3B zugegriffen wird und die eine Darstellung der Funktion von jedem Block aus Fig. 3A sind;
- Fig. 3D stellt eine Darstellung eines kompilierten Computerprogramms dar, das in einem Speicher des Systems aus Fig. 1A gespeichert ist, um das Blockdiagramm aus Fig. 3 zu simulieren;
- Fig. 4 ist eine typische Bildschirmanzeige, die die Eingangs- und Ausgangssignal-Wellenform des Blockdiagramms aus Fig. 3 darstellt, das von dem Simulator aus Fig. 1A simuliert wird;
- Fig. 5A ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des ersten BESCHRÄNKTEN ABFOLGE Verfahrens darstellt;
- Fig. 5B ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des beschränkten ALLE DURCHFÜHREN Verfahrens, auf das in Fig. 5A verwiesen wird, darstellt;
- Fig. 5C ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des beschränkten MANCHE DURCHFÜHREN Verfahrens, auf das in Fig. 5A verwiesen wird, darstellt;
- Fig. 6A ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des CODE GENERIERUNGS Verfahrens darstellt;
- Fig. 6B ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des SYSTEM INTERPRETER Verfahrens darstellt;
- Fig. 7 zeigt schematisch eine BLOCKLISTE und einen BLOCKLISTEN ZEIGER, um die Abfolge der Operationen des Simulators aus Fig. 1A zu verfolgen;
- Fig. 8 ist ein alternatives Blockdiagramm mit einer Rückkopplungsschleife, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 8A stellt eine Darstellung einer NETZLISTE dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A verwendet werden, um das Blockdiagramm aus Fig. 8 zu interpretieren;
- Fig. 8B stellt eine Bibliothek, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, mit Prozeduren dar, die eine Darstellung der Blöcke in dem Blockdiagramm aus Fig. 8 sind;
- Fig. 8C stellt schematisch ein anderes Blockdiagramm mit einer Rückkopplungsschleife dar, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 8D stellt eine Darstellung einer NETZLISTE dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A verwendet werden, um das Blockdiagramm aus Fig. 8C zu interpretieren;
- Fig. 8E stellt eine Bibliothek, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, mit Prozeduren dar, die eine Darstellung der Blöcke in dem Blockdiagramm aus Fig. 8C sind;
- Fig. 9A und 9B stellen Zwischenergebnisse des Simulators (Fig. 1A) dar, der von der ersten Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) gesteuert wird, das das in eine Abfolge Bringen der Prozeduraufrufe als Darstellung des Blockdiagramms aus Fig. 8A steuert;
- Fig. 10 stellt Zwischenergebnisse des Simulators dar, der von der ersten Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens gesteuert wird, dem es nicht gelingt, die Prozeduraufrufe als Darstellung des Blockdiagramms aus Fig. 8A in eine Abfolge zu bringen;
- Fig. 11A ist ein Flußdiagramm, das die Abfolge der Operationen des Simulators aus Fig. 1A unter der Steuerung des ersten ALLGEMEINEN ABFOLGE Verfahrens darstellt;
- Fig. 11B ist ein Flußdiagramm, das die Abfolge der Operationen des Simulators aus Fig. 1A unter der Steuerung des ALLE DURCHFÜHREN Verfahrens, auf das in Fig. 11A verwiesen wird, darstellt;
- Fig. 11C und 11D sind Flußdiagramme, die die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des MANCHE DURCHFÜHREN Verfahrens, auf das in Fig. 11A verwiesen wird, darstellen;
- Fig. 12A, B, C und D sind Tabellen, die Zwischenergebnisse des Simulators (Fig. 1A) darstellen, der von dem ersten ALLGEMEINEN ABFOLGE Verfahren aus Fig. 11A gesteuert wird, der die Prozeduraufrufe als Darstellung der Blöcke aus Fig. 13 in eine Abfolge bringt;
- Fig. 13 ist ein weiteres Blockdiagramm mit einer Rückkopplungsschleife, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 13A stellt eine Darstellung einer NETZLISTE dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A verwendet werden, um das Blockdiagramm aus Fig. 13 zu interpretieren;
- Fig. 13B stellt eine Bibliothek, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, mit Prozeduren dar, die eine Darstellung der Blöcke in dem Blockdiagramm aus Fig. 15 sind;
- Fig. 14A ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung der BESCHRÄNKTEN und ALLGEMEINEN ABFOLGE Verfahren darstellt;
- Fig. 14B ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des VERARBEITE EXTERNE NETZLISTE Verfahrens, auf das in Fig. 14A verwiesen wird, darstellt;
- Fig. 14C ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des GETRENNTE FUNKTIONALITÄT Verfahrens darstellt, auf das in Fig. 14B verwiesen wird, in dem BESCHRÄNKTEN FALL, wenn es nur eine Fortschreibungsausgangsprozedur und nur eine Durchführungsliste pro Block gibt;
- Fig. 14D ist ebenfalls ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des GETRENNTE FUNKTIONALITÄT Verfahrens darstellt, auf das in Fig. 14B verwiesen wird, in dem BESCHRÄNKTEN FALL, wenn es mehrere Fortschreibungsausgangsprozeduren und nur eine Durchführungsliste für den Block gibt;
- Fig. 14E ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des GETRENNTE FUNKTIONALITÄT Verfahrens, auf das in Fig. 14B verwiesen wird, in dem allgemeinen Fall darstellt;
- Fig. 14F ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des ABFOLGE TREIBER Verfahrens, auf das in Fig. 14A verwiesen wird, darstellt;
- Fig. 14G ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des ABFOLGE Verfahrens, auf das in Fig. 14F verwiesen wird, darstellt;
- Fig. 15A ist noch ein anderes Blockdiagramm mit einer Rückkopplungsschleife, das auf dem Bildschirm ausgebildet und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 15B stellt eine Darstellung einer NETZLISTE dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A verwendet werden, um das Blockdiagramm aus Fig. 15A zu interpretieren;
- Fig. 15C stellt eine Bibliothek, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, mit Prozeduren dar, die eine Darstellung der Blöcke in dem Blockdiagramm aus Fig. 15A sind;
- Fig. 15D ist eine "erweiterte" Version des Blockdiagramms aus Fig. 15A, das von dem Simulator aus Fig. 1A simuliert wird;
- Fig. 15E stellt eine Darstellung einer INTERNEN NETZLISTE dar;
- Fig. 16 ist eine Tabelle, die Zwischenergebnisse des VERARBEITE EXTERNE NETZLISTE Verfahrens darstellt, das die Erweiterung der Netzliste aus Fig. 15B zu der internen Netzliste aus Fig. 15E steuert;
- Fig. 17A, B, C und D stellen Zwischenergebnisse einer Simulation des Blockdiagramms aus Fig. 15D dar, die von dem zweiten BESCHRÄNKTEN ABFOLGE Verfahren aus den Fig. 14A, B, C, E, F und G gesteuert wird;
- Fig. 18A ist ein anderes Blockdiagramm mit einer Rückkopplungsschleife, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 18B stellt eine Darstellung einer Netzliste dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A verwendet werden, um das Blockdiagramm aus Fig. 18A zu interpretieren;
- Fig. 18C stellt eine Bibliothek, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, mit Prozeduren dar, die eine Darstellung der Blöcke in dem Blockdiagramm aus Fig. 18A sind;
- Fig. 18D ist eine "erweiterte" Version des Blockdiagramms aus Fig. 18A, das von dem Simulator aus Fig. 1A simuliert wird;
- Fig. 18E stellt eine Darstellung einer erweiterten Netzliste aus Fig. 18B dar, die Informationen enthält, die von dem Simulator aus Fig. 1A benötigt werden, um das Blockdiagramm aus Fig. 18D zu interpretieren;
- Fig. 19 stellt Zwischenergebnisse des VERARBEITE EXTERNE NETZLISTE Verfahrens zur Steuerung der Erweiterung der Netzliste aus Fig. 18B zu der internen Netzliste aus Fig. 18E dar;
- Fig. 20A, B, C und D stellen Zwischenergebnisse einer Simulation des Blockdiagramms aus Fig. 15D dar, die von dem zweiten ALLGEMEINEN ABFOLGE Verfahren aus den Fig. 14A, B, D, E, F und G gesteuert wird;
- Fig. 21 ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des ersten LAUFZEIT SIMULATOR Verfahrens darstellt;
- Fig. 22A ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des ersten ANZAHL DER UNTERITERATIONEN Verfahrens darstellt, auf das in Fig. 21 verwiesen wird;
- Fig. 22B ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des BESTIMME MAXIMALE KETTEN Verfahrens darstellt, auf das in Fig. 22A verwiesen wird;
- Fig. 23 ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des zweiten ANZAHL DER UNTERITERATIONEN Verfahrens darstellt, auf das in Fig. 21 verwiesen wird;
- Fig. 24 ist ein weiteres Blockdiagramm, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 24A stellt eine Darstellung einer Netzliste dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A benötigt werden, um das Blockdiagramm aus Fig. 24 zu interpretieren;
- Fig. 25A, B, C und D stellen Zwischenergebnisse einer Simulation des Blockdiagramms aus Fig. 24 durch das erste LAUFZEIT SIMULATOR Verfahren dar;
- Fig. 26A ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des zweiten LAUFZEIT SIMULATOR Verfahrens darstellt;
- Fig. 26B ist ein Flußdiagramm, das die Abfolge von Operationen des Simulators aus Fig. 1A unter der Steuerung des INITIALISIERUNGS Verfahrens darstellt, auf das in Fig. 26A verwiesen wird;
- Fig. 27 ist ein Blockdiagramm, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird. Es sind auch eine Durchführungsliste, eine Ausgangsliste von Ausgängen mit keiner Durchführung (OLNF, outputs with null feedthrough), eine Ausgangsliste von Ausgängen mit Durchführung (OLF, outputs with feedthrough) und eine Zustandsblockliste (SBL, state block list) dargestellt, die alle in einem Speicher gespeichert sind und die dem Blockdiagramm entsprechen;
- Fig. 27A stellt eine Darstellung einer Netzliste dar, die in einem Speicher des Systems aus Fig. 1A gespeichert ist, die Informationen enthält, die von dem Simulator aus Fig. 1A benötigt werden, um das Blockdiagramm aus Fig. 27 zu interpretieren;
- Fig. 28 stellt Zwischenergebnisse des zweiten LAUFZEIT SIMULATOR Verfahrens dar, das das Blockdiagramm aus Fig. 27 simuliert;
- Fig. 29 ist ein Blockdiagramm mit ein Block, das einen Steuereingang aufweist und das auf der Anzeige und in dem Simulator aus Fig. 1A ausgebildet ist;
- Fig. 30A ist ein Blockdiagramm eines Einheitsverzögererblocks mit einem Steuereingang zum "Halten", das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 31 ist ein Blockdiagramm eines Integratorblocks, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 32 ist ein Blockdiagramm eines Integratorblocks mit einem Steuereingang zum "Rücksetzen", das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 32A ist ein Blockdiagramm eines Koeffizientenblocks mit einem Steuereingang zum "Setzen", das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 33 ist ein Blockdiagramm eines Integratorblocks mit zwei Steuereingängen, einem zum "Halten" und einem zum "Rücksetzen", das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 34 ist eine Darstellung eines Blockdiagramms mit Steuerblöcken zum Modellieren einer Verarbeitung mit Mehrfachverzögerung, das auf der Anzeige ausgebildet ist und in dem Simulator aus Fig. 1A simuliert wird;
- Fig. 35 ist ein Flußdiagramm der Operationen des Systems mit der Verarbeitung mit Mehrfachverzögerung aus Fig. 34;
- Fig. 36 stellt Zwischenergebnisse einer Simulation des Blockdiagramms aus Fig. 34 dar;
- Fig. 37 ist ein Flußdiagramm eines Systems mit bedingter Verarbeitung, das von einem Anwender auf Papier entworfen werden kann, bevor ein Blockdiagramm zur Simulation entworfen wird;
- Fig. 38 ist ein Blockdiagramm als Darstellung des Flußdiagramms aus Fig. 37, und es wird auf der Anzeige ausgebildet und in dem Simulator aus Fig. 1A simuliert; und
- Fig. 39 stellt die Zwischenergebnisse einer Simulation des Blockdiagramms aus Fig. 38 dar.
- A. Ein einfaches Blockdiagramm aus Fig. 2
- B. Fortschreibungsausgangs- und Fortschreibungszustandsprozeduren
- C. Ein Beispiel des Blockdiagramm-Simulators, der ein Filterdiagramm aus Fig. 3 simuliert
- 1) Assemblierung eines Computerprogramms als Darstellung des Blockdiagramms aus Fig. 3
- 2) Modellierung von Zustandsblöcken
- 3) Ausführung des assemblierten Computerprogramms als Darstellung des Blockdiagramms aus Fig. 3
- A. Erste Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens, Fig. 5A, B und C
- 1) Durchführungsliste
- 2) Das BESCHRÄNKTE ABFOLGE Verfahren aus Fig. 5A
- 3) ALLE DURCHFÜHREN Verfahren aus Fig. 5B
- 4) MANCHE DURCHFÜHREN Verfahren aus Fig. 5C
- 5) CODE GENERIERUNGS Verfahren aus den Fig. 6A und 6B
- 6) Ausführliches Beispiel des BESCHRÄNKTEN ABFOLGE Verfahrens aus den Fig. 5A, B und C
- 7) Ausführliches Beispiel des BESCHRÄNKTEN ABFOLGE Verfahrens aus den Fig. 5A, B und C, dem es nicht gelingt, Fig. 8A in eine Abfolge zu bringen
- (a) Lösung - mehrere Durchführungslisten pro Block
- B. Erste Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens aus den Fig. 11A, B, C und D
- 1) Ausführliches Beispiel der ersten Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens aus den Fig. 11A, B, C und D
- C. Zweite Ausführungsform der BESCHRÄNKTEN und ALLGEMEINEN ABFOLGE Verfahren aus den Fig. 14A, B, C, D, E, F und G
- 1) GETRENNTE FUNKTIONALITÄT Verfahren aus Fig. 14C für eine Fortschreibungsausgangsprozedur und eine Durchführungsliste pro Block
- 2) GETRENNTE FUNKTIONALITÄT Verfahren aus Fig. 14D für mehrere Fortschreibungsausgangsprozeduren und nur eine Durchführungsliste pro Block
- 3) GETRENNTE FUNKTIONALITÄT Verfahren aus Fig. 14E für mehrere Fortschreibungsausgangsprozeduren und mehrere Durchführungslisten pro Block
- 4) ABFOLGE TREIBER Verfahren aus Fig. 14F
- 5) ABFOLGE VERFAHREN aus Fig. 14G
- 6) Beispiel einer zweiten Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens aus den Fig. 14A, B, C, F und G
- 7) Ausführliches Beispiel der zweiten Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens der Fig. 14A, B, E, F und G
- D. LAUFZEIT ABFOLGE Verfahren aus den Fig. 21 und 26
- 1) Erste Ausführungsform des ANZAHL DER UNTERITERATIONEN Verfahrens aus Fig. 22A
- 2) MAXIMALE KETTENLÄNGE Verfahren aus Fig. 22B
- 3) Zweite Ausführungsform des ANZAHL DER UNTERITERATIONEN Verfahrens aus Fig. 23
- 4) Ausführliches Beispiel des LAUFZEIT SIMULATORS aus den Fig. 21, 22A und 22B
- 5) Zweite Ausführungsform des LAUFZEIT SIMULATOR Verfahrens aus den Fig. 26 und 26B
- 6) Ausführliches Beispiel der zweiten Ausführungsform des LAUFZEIT SIMULATOR Verfahrens aus den Fig. 26A und 26B
- E. Steuereingang Simulation
- Fig. 1A stellt einen Blockdiagramm-Simulator zur Assemblierung und Ausführung von Software Computerprogrammen als Darstellung von Blockdiagrammen dar. Die Simulatorsoftware ist in einem Speicher 11 untergebracht, der in der Computer Datenstation Plattform 10 angeordnet ist. Die Plattform 10 ermöglicht es Anwendern, mit der Simulator Software zu kommunizieren. Genauer gesagt stellt Fig. 1A eine herkömmliche Plattform dar, die einen Mikroprozessor 2, eine Anzeige 3, eine Eingabetastatur 4, eine Mouse 6 zur Kommunikation mit dem Mikrocomputer 2 und eine zusätzliche Plattendatei 5 umfaßt. Wenn in den Speicher 11 Softwareprogramme einschließlich der noch zu beschreibenden Software des Simulators geladen wird, wird der Simulator oder die Plattform 10 gebildet.
- Fig. 1 stellt sowohl ein kombiniertes Blockdiagramm der Computerprogramme, der Bibliothek, der Netzliste und der Abfolgeliste dar, die von der Plattform 10 aus Fig. 1A verwendet werden, als auch den Datenfluß für die Simulation. Genauer gesagt ermöglicht es ein BLOCKDIAGRAMM EDITOR (BDE) 12 dem Konstrukteur, eine Konfiguration des Blockdiagramms auf der Bildschirmanzeige 3 (Fig. 1A) zu definieren. Eine BLOCK BIBLIOTHEK VERWALTUNG 14 verwaltet einen BLOCK BIBLIOTHEK SPEICHER 14A, der Computerprozeduren, Symbole und andere Informationen (werden noch beschrieben) als Darstellung der Blöcke in dem Blockdiagramm enthält. Ein NETZLISTEN GENERATOR 16 ist ein Computerprogramm, das die Plattform 10 veranlaßt, eine miteinander verbundene Liste zu assemblieren, die die erste computerlesbare Version des Blockdiagramms ist, das von dem Konstrukteur bestimmt wurde, und sie wird in dem Netzlistenspeicher 16A gespeichert. SIMMULATIONSPROGRAMM GENERATOREN (SPB, SIMULATION PROGRAM BUILDERS) 18 und 26 sind Computerprogramme, die die Plattform 10 veranlassen, Computerprogramme als Darstellung der Blockdiagramme auf der Bildschirmanzeige zu erzeugen und auszuführen. Ein SIGNAL ANZEIGE EDITOR (SDE, SIGNAL DISPLAY EDITOR) 30 ist ein Computerprogramm, das die Plattform 10 veranlaßt, die Signale, die durch die Simulation generiert wurden, zu editieren und/ oder auszuwerten. Viele der oben aufgeführten Computerprogramme können auch als fest verdrahtete Halbleiterbauelemente ausgebildet sein, die die Operationen der Plattform 10 getrennt steuern. Der Entwurf von logischen Schaltungsdarstellungen von Computerprogrammen ist dem Fachmann gut bekannt.
- Die Plattform 10 hat die Fähigkeit, es einem Anwender zu ermöglichen, eine große Anzahl von Fenstern oder Anzeigen zur Ansicht auf dem Bildschirm geöffnet zu lassen, so daß der Anwender mehrere Modulebenen gleichzeitig auswerten und von diesen Information erhalten kann. Die Plattform 10 unterhält auch ein Menü (nicht dargestellt) der verschiedenen Anzeigen, so daß der Anwender eine bestimmte Anzeige auf dem Bildschirm auswählen kann.
- Ein Konstrukteur bestimmt die Topologie eines vorgeschlagenen Systems mittels Blöcke durch den Einsatz des BDE 12. Der BDE 12 ist ein Softwarepaket, das es dem Anwender ermöglicht, ein Blockdiagramm mit der Mouse 6 und der Tastatur 4 (Fig 1A) zu erstellen Die Mouse 6 ist eine Einheit, die zum Auswählen der Blöcke, zur Erstellung von Verbindungen zwischen Blöcken, usw. verwendet wird, und ist aus dem Stand der Technik gut bekannt. Der BIBLIOTHEK SPEICHER 14A ist eine umfassende Datenbank mit Symbolzeichnungen und Computerprozeduren als Darstellung der Funktionen von jedem der Blöcke. Genauer gesagt sind die Computerprozeduren Darstellungen von zu simulierenden Funktionen oder Steuerfunktionen oder Signalverarbeitungsfunktionen. Die Ausführung der Computerprozeduren für einen Block veranlaßt die Plattform 10, den Betrieb des Blocks zu simulieren. Die Ausführung der Computerprozeduren für alle Blöcke eines Blockdiagramms auf der Anzeige veranlaßt die Plattform, den Betrieb des übergeordneten Blockdiagramms zu simulieren.
- Die Signalverarbeitungsprozeduren, die in dem BIBLIOTHEKS SPEICHER 14A gespeichert sind, umfassen einen weiten Bereich von Funktionen unterschiedlicher Komplexität, beginnend mit "einfachen Einheitsverzögerern", Additions- und Multiplikationsblöcken und geht bis zu Prozeduren, die Funktionen einer höheren Ebene ausführen, wie beispielsweise adaptive Verarbeitung. Im Wege eines Beispiels umfaßt eine bevorzugte Ausführungsform der Erfindung Prozeduren, die aus dem Stand der Technik gut bekannt sind, zur Implementierung der nachfolgenden Arten von funktionalen Blöcken: DSP Kernal Blöcke - Einheitsverzögerer, Multiplizierer mit 2 Eingängen, Addierer mit 2 Eingängen, Konstanten, Koeffizienten; Lineare Verarbeitungsblöcke - Filter, Mehrfachverzögerer, Abzweige-Verzögerungsstrecke, FFT, Integrator, Differentiator, Addierer mit mehreren Eingängen; Nichtlineare Verarbeitungsblöcke - Quantisierer; Begrenzer, Schwellenwertgeber, positiver Gleichrichter, negativer Gleichrichter, Ausschalter, Einschalter, Max/Min-Wert Ermittlung; Mathematische Blöcke - 1/x, ex, ln(x), sin(x), cos(x), tan(x), atan(x, y), Quadratwurzel, xY, 20log&sub1;&sub0;(x), abs(x); Signal Generierung/ Speichern/ Weiterverarbeitung - Signalquelle, Signalaufnahme, Vektor- Signalquelle, Vektor-Signalaufnahme, Schreibe in Ergebnisdatei, programmierbarer Funktionsgenerator, Rauschgenerator, Impuls, Einheitsstufe, Dateikonstante; Vektoroperationen - Vektoraddition, Vektorkomponentenaddition, Vektorskalarprodukt, Vektorprodukt, Vektorskalar, Vektorverzögerung, Vektorinverse, Vektor aufteilen in Vektoren, Vektor aufteilen in Skalare, Vektoren verbinden zu Vektor, Skalare verbinden zu Vektor; Steuerungsfluß - halte Wert, Und mit 2 Eingängen, Oder mit 2 Eingängen, Invertierer, Stop, Zeitgeber, Zähler, Sperren; Instrumente - Tek 11400 Osziloskop, Tek 5010 Funktionsgenerator. Eine ausführlichere Beschreibung von jedem funktionalem Block wird in einem Handbuch mit dem Titel "Signal Processing Worksystem User Guide-Document, Version 0.0", CAE Systems Inc. - Tektronix Inc., Kap. 4, S. 1-281 (August 1987) gegeben.
- Das Blockdiagramm, das von dem Konstrukteur auf der Anzeige erzeugt wurde, wird unter der Steuerung des NETZLISTEN GENERATORS 16 in eine computerlesbare Form umgesetzt, die Netzwerkliste (Netzliste) genannt wird. Die Verfahren, die von dem System zur Generierung einer Netzliste angewandt werden, sind aus dem Stand der Technik gut bekannt. Üblicherweise enthält die Netzliste eine Liste der Eingangs- und Ausgangsverbindungslinien und Parameterwerte für jeden Block; Der SPB 18 und 26 veranlaßt die Plattform 10 Computerprogramme als Darstellung der Blockdiagramme zu erzeugen und auszuführen.
- Genauer gesagt enthält der SPB 18 drei Teile; einen ABFOLGELISTEN GENERATOR 20, einen CODE GENERATOR 22 und einen PROGRAMM AUSFÜHRER 24. Es sind vier verschiedene Ausführungsformen des ABFOLGELISTEN GENERATORS 20 zu diskutieren. Der ABFOLGELISTEN GENERATORS 20 steuert die Erzeugung einer Abfolgeliste mit Prozeduraufrufen. Die Abfolgeliste wird in einem ABFOLGELISTEN SPEICHER 20A bereitgehalten. Die Abfolgeliste wird dann unter der Steuerung des CODE GENERATORS 22 zu einem Objektcode kompiliert. Entweder wird unter der Steuerung des PROGRAMM AUSFÜHRERS eine Simulation durchgeführt oder der kompilierte Code wird in einen anderen Speicherbereich der Plattform oder in den Speicher eines getrennten Systems, beispielsweise eines Mikroprozessor Halbleiterbauelements 21, geladen. Zum Beispiel kann ein Mikroprozessor Halbleiterbauelement 21 in einer Echtzeit-Produktumgebung arbeiten, um den Betrieb des Produkts (z.B. einer Vergasersteuerung, einer Flugsteuerung, usw.) zu steuern.
- Der SPB 26 ist ein LAUFZEIT SIMULATOR 28, der die Genenerung einer Abfolgeliste und eine Kompilierung von Code nicht erfordert. Stattdessen wird Programm Code vorassembliert und aufgerufen, wenn er zur Ausführung benötigt wird.
- Nachdem entweder der SPB 18 oder 26 ausgeführt ist, hat der SDE 30 eine Vielzahl von Bearbeitungsbefehlen, die verwendet werden, uni die aus einer Simulation resultierenden Signale zu analysieren. Der SDE 30 ist in der Lage, lineare oder nichtlineare Verarbeitung und spektrale und statistische Analysen der Signale durchzuführen. Der SDE 30 ist auch in der Lage, Signale zu generieren und zu manipulieren, die als Eingangssignale für einen Simulationslauf verwendet werden können. Obwohl eine genaue Beschreibung des SDE 30 nicht vorgesehen ist, sind dem Fachmann eine Vielzahl von Ausführungsformen des SDE 30 gut bekannt und verfügbar.
- Was offenbart ist, ist kurz gesagt ein Verfahren und eine Vorrichtung, die einen automatischen Programmgenerierungs- Computer verwenden, zur Assemblierung eines Computerprogramms als Darstellung eines funktional interaktiven und untereinander verbundenen Blockdiagramms. Das assemblierte Programm kann entweder zur Simulation des Blockdiagramms ausgeführt werden oder es kann zum Speichern verarbeitet werden.
- Alternativ können das Verfahren und die Vorrichtung das Programm auf einer Laufzeitgrundlage ausführen während es assembliert wird und dabei das Programm gleichzeitig assemblieren und ausführen.
- Das Blockdiagramm, das von einem Anwender auf der Bildschirmanzeige erzeugt wurde, ist ein funktionales System, das eine Vielzahl von interaktiv verbundenen Funktionalitätsblöcke hat, die das Gesamtblockdiagramm bilden. Einige der Blöcke haben einen Eingang, einige haben einen Ausgang und einige haben sowohl Eingänge als auch Ausgänge. Einige der Blöcke haben mindestens einen Eingang, der durch einen Ausgang funktional definiert und mit einem Eingang verbunden ist. Einige der Blöcke sind Zustandsblöcke, deren Betrieb zu einem Zeitpunkt abhängig ist von dem Zustand des Eingangs zu einer Zeit, die vor dem jetzigen Zeitpunkt liegt. Anders ausgedrückt ist der Ausgang abhängig von einem vorangegangenen Eingangssignal und nicht von dem gegenwärtigen Eingangssignal.
- Der BIBLIOTHEK SPEICHER 14A umfaßt eine gespeichert Fortschreibungszustandsprozedur, die jedem Zustandsblock entspricht und die einen "Zustand" des Zustandsblocks als eine Funktion seiner Eingänge definiert. Ebenso gibt es für jeden Block mindestens eine gespeicherte Fortschreibungsausgangsprozedur, die seinen Ausgang als eine Funktion von beliebigen seiner Eingänge und/ oder des Zustands definiert, falls der Block ein Zustandsblock ist. Ein Beispiel der Prozeduraufrufe und der Prozeduren ist in Fig. 3C dargestellt.
- Der BIBLIOTHEK SPEICHER 14A umfaßt auch bestimmte Informationen, die eine Darstellung der Merkmale des Blocks sind. Diese Informationen umfassen beispielsweise einen Blocktyp, eine Liste aller Eingänge zu dem Block, eine Liste aller Ausgänge von dem Block und eine Durchführungsliste, die alle Eingänge aufführt, die den Ausgang des Blocks unmittelbar beeinflussen. Genauer gesagt bezeichnet die Durchführungsliste alle Eingänge der entsprechenden Fortschreibungsausgangsprozedur, die den Ausgang der Fortschreibungsausgangsprozedur unmittelbar beeinflussen.
- Während des Betriebs verarbeitet die Plattform 10 die Darstellungen der Merkmale von jedem der Blöcke. Das Blockdiagramm wird in eine Abfolgeliste mit Prozeduraufrufen umgesetzt, z.B. in eine Liste mit den Prozeduraufrufen für Fortschreibungszustandsprozeduren (z.B. Darstellungen von Fortschreibungszustandsprozeduren), falls vorhanden, und davon getrennt mit Prozeduraufrufen für Fortschreibungsausgangsprozeduren (z.B: Darstellungen von Fortschreibungsausgangsprozeduren). Wenn die Prozeduraufrufe kompiliert werden, werden die entsprechenden Prozeduraufrufe aus der Bibliothek erhalten und zu Objektcode erweitert, der bereit ist für die Ausführung. Die Ausführung des Objectcodes in der Reihenfolge, die durch die Abfolgeliste dargestellt wird, simuliert den Betrieb des Blockdiagramms auf effiziente Weise.
- Der ABFOLGELISTEN GENERATOR 20 wird verwendet, um die Prozeduraufrufe in eine Abfolge zu bringen und sie in der Abfolgeliste zu speichern, die in dem ABFOLGE SPEICHER 20A gespeichert ist. Die in dem SPEICHER 20A gespeicherte Abfolgeliste wird später von der Plattform verwendet, um die entsprechenden Prozeduren (Quellcode) aus dem SPEICHER 14A zu erhalten, die von dem CODE GENERATOR 22 zum Kompilieren des Objectcodes verarbeitet werden. Der Objectcode kann von dem Mikroprozessor unter Einsatz von digital codierten Darstellungen von Signalen ausgeführt werden, um den Betrieb des Blockdiagramms zu simulieren und um Ausgangssignale zu bilden, die, wie in Fig. 4 dargestellt, auf dem Bildschirm angezeigt werden können. Alternativ kann der Objekt- oder Maschinencode ausgegeben, verarbeitet und dann in dem Speicher eines anderen Systems, beispielsweise eines Großrechners oder eines Mikroprozessor Halbleiterbauelements 21, gespeichert werden, um den Betrieb des entsprechenden Systems derart zu steuern, daß der Betrieb des Blockdiagramms simuliert wird.
- In dem LAUFZEIT SIMULATOR bringt eine Abfolgeeinheit für jeden der Blöcke die Fortschreibungszustandsprozeduren (z.B. Darstellungen der Fortschreibungszustandsprozeduren), falls vorhanden, und die Fortschreibungsausgangsprozeduren (z.B. Darstellungen der Fortschreibungsausgangsprozeduren) in eine datenabhängige Abfolge. Zusätzlich wird jede Fortschreibungszustandsprozedur getrennt von der Fortschreibungsausgangsprozedur für den entsprechenden Zustandsblock in der Abfolge aufgenommen.
- Die Prozeduraufrufe werden auf einer Echtzeitgrundlage ausgeführt, um den Betrieb des Blockdiagramms auf der Anzeige zu simulieren.
- Fig. 2 stellt ein einfaches Blockdiagramm mit einer Rückkopplungsschleife dar, das von einem Anwender auf der Anzeige erzeugt worden ist. Jeder Block entspricht einer bestimmten Funktion, die von einer Softwareprozedur auszuführen ist, die in dem BIBLIOTHEK SPEICHER 14A gespeichert ist. Die Blöcke 52, 54 und 56 sind durch Linien 58, 60 und 62 verbunden, und diese Verbindungslinien stellen die Übertragung von Daten zwischen den Blöcken dar. Der Ausgang 58 des Blocks 52 wird zu dem Eingang 58 des Blocks 54, und der Ausgang 60 des Blocks 54 wird zu dem Eingang 60 des Blocks 56. Der Eingang 62 des Blocks 54 ist auch ein Ausgang des Blocks 54. Daten fließen durch das System von Block 52 zu Block 56, wenn eine Simulation des Blockdiagramms durchgeführt wird.
- Die Reihenfolge in der jede Prozedur, die jeden Block darstellt, ausgeführt wird, muß genau überlegt sein, um sicherzustellen, daß die Eingangsdaten zu jeder Prozedur, die einen Block darstellt, definiert ist bevor die Prozedur des Blocks die Daten korrekt verarbeiten kann. Wenn eine Prozedur für einen Ausgang eines Blocks erzeugt wird, indem definierte Eingänge für die Prozedur des Blocks verarbeitet werden, wird angenommen, der Ausgang sei "fortgeschrieben". Im wesentlichen bedeutet das Wort "fortgeschrieben", daß die Signalinformation am Ausgang des betreffenden Blocks definiert wird.
- Die Simulation des Blockdiagramms aus Fig. 2 durch ein System aus dem Stand der Technik umfaßt den Aufruf der Softwareprozeduren als Darstellung der Blöcke in einer Reihenfolge von dem am weitesten links angeordneten Block zu dem am weitesten rechts angeordneten Block. Diese Prozedur wird "Simulation des nächsten Blocks" genannt. Unter der Annahme, daß die "Simulation des nächsten Blocks" zur Simulation des Blockdiagramms verwendet wird, wird die Prozedur als Darstellung des Quellblocks 52 zuerst aufgerufen, um Ausgang 58 zu erzeugen. Dann wird die Prozedur für Block 54 aufgerufen, wobei diese Prozedur allerdings nicht korrekt verarbeitet werden könnte, weil Eingang 62 noch nicht definiert ist. Eingang 62 ist Bestandteil einer Rückkopplungsschleife, und er wird nicht definiert sein, solange der Ausgang des Blocks 54 nicht fortgeschrieben ist. Anders ausgedrückt besteht der einzige Weg für den Simulator, den Eingang 62 zu definieren, darin, die Prozedur für Block 54 zu verarbeiten. Allerdings kann die Prozedur für Block 54 keine definierten Ausgänge erzeugen, solange nicht die Eingänge 58 und 62 beide definiert sind.
- Demnach kann die Prozedur für Block 54 niemals definierte oder fortgeschriebene Ausgänge erzeugen, weil der Eingang 62 mit diesem Ansatz niemals definiert sein wird.
- Eine Lösung dieses Problems könnte darin bestehen, die Verzögerungseigenschaften der an dem System beteiligten Blöcke zu untersuchen. Falls der Block 54 eine Verzögerungseigenschaft hätte, könnte der Ausgang des Blocks 54 generiert werden, ohne definierte Daten am Eingang 62 haben zu müssen. Falls Block 54 eine Verzögerung aufweist, muß er einen Speicher oder einen Zustand aufweisen. Ein Weg, einem Block eine Verzögerungseigenschaft zu geben, würde darin bestehen, dem Block einen Speicher oder einen "Zustand" hinzuzufügen. (Blöcke mit einer Verzögerung werden häufig "Verzögerungsblöcke" oder "Zustandsblöcke" genannt.) Die Prozedur für den Block kann dann "Zustands"-Information verarbeiten, die zuvor gespeichert und dazu verwendet wurde, definierte oder fortgeschriebene Ausgänge für den ersten Zeitschritt zu erzeugen bevor der Zustand fortgeschrieben wird.
- In einer bevorzugten Ausführungsform sind zwei Computerprozeduren zur Verwaltung und Verarbeitung des Zustand eines Blocks mit einer Verzögerungseigenschaft vorgesehen. Zuerst ist eine Computerprozedur zur Verarbeitung der Eingänge und/ oder des Zustands des Blocks vorgesehen, um definierte Ausgänge zu erzeugen. Diese Computerprozedur wird unabhängig von ihrer Funktion "Fortschreibungsausgangs" Prozedur für den Ausgang genannt. Die zweite Prozedur ist allein für die Fortschreibung des Zustands des Blocks vorgesehen, sobald seine Eingänge definiert sind. Diese Prozedur wird "Fortschreibungszustands" Prozedur genannt. Beide Prozeduren modellieren auf effiziente Weise den Betrieb eines Zustandsblocks, der einen Zustand aufweist. Der Konstrukteur der "Fortschreibungsausgangs" und der "Fortschreibungszustands" Prozeduren muß die Funktion des Blocks beachten, um zu bestimmen, wie die Prozeduren dargestellt werden sollten. Eine genauere Beschreibung der Erwägungen des Konstrukteurs beim Entwurf wird in Abschnitt I. C. 2) gegeben.
- Ein bedeutender Bereich der Erfindung betrifft eine Vorrichtung und ein Verfahren zur Bestimmung der korrekten Abfolge von Softwareprozeduraufrufen derart, daß definierte Daten während einer Simulation verarbeitet werden, insbesondere wenn das zu simulierende Blockdiagramm (wie in Fig. 2) Verzögerungsblöcke aufweist. Die Computerprozeduraufrufe steuern die Schritte, die von dem Computer zur Simulation des Betriebs eines Blocks ausgeführt werden. Eine Fortschreibungsausgangsprozedur verarbeitet die Eingangssignale eines Blocks, um die Ausgangssignale des Blocks zu bestimmen. Zum Beispiel könnte eine Fortschreibungsausgangsprozedur die Prozedur zum Multiplizieren eines Koeffizienten "y" mit einem Eingangssignal sein, um einen Ausgang zu erzeugen. Wohingegen eine Fortschreibungszustandsprozedur zur Fortschreibung des Zustands eines Blocks dient. Zum Beispiel schreibt die Fortschreibungszustandsprozedur für einen Einheitsverzögerungsblock den Zustand des Blocks mit dem gegenwärtigen Eingangssignal des Blocks fort. Die Fortschreibungsausgangsprozedur für diesen Block ist eine Prozedur, um das Eingangssignal auszugeben, das in dem Zustand von dem vorherigen Zeitschritt gespeichert ist. Mit dem Zweck, dem Leser Hintergrundinformationen zu vermitteln, erläutert die nachfolgende Beschreibung die Prozedur, der ein hypothetischer Simulator folgen würde, um ein komplexeres Beispiel, das Zustandsblöcke hat, zu modellieren und zu simulieren, indem Fortschreibungsausgangs- und Fortschreibungszustandsprozeduren verwendet werden.
- Fig. 3 ist eine Darstellung eines Blockdiagramms eines einfachen Filters zum Glätten eines Signals. Zum Beispiel könnte dieses Filter verwendet werden, um Rauschen aus einem Sprachsignal, das in einem Quellblock 64 erzeugt wird, herauszufiltern. Eine Aufnahme 68 würde eine gefilterte Version des Sprachsignals ohne das Rauschen enthalten. Bezugnehmend auf Fig. 4 ist eine Bildschirmanzeige der Quell- und Aufnahmesignale dargestellt. Signal 65 stellt ein Sprachsignal vor dem Filtern und Signal 66 stellt das Sprachsignal nach dem Filtern dar.
- Der Quellblock 64 generiert Signale, und die Koeffizientenblöcke 72, 74 und 76 multiplizieren das Quellsignäl mit B&sub2;, B&sub1; bzw. B&sub0;. Die Blöcke 78, 82 und 86 sind Additionsblöcke, um die Eingänge zu addieren, die mit den Blöcken verbunden sind. Die Blöcke 88 und 90 sind ebenfalls Koeffizientenblöcke, die A&sub2; und A&sub1; mit dem Signal multiplizieren, das über die Linie 120 rückgeführt wird. Die Verzögerungsblöcke 80 und 84 sind "Einheitsverzögerungs"-Blöcke, was bedeutet, daß ihre Ausgänge den Wert des vorangegangen Zeitschritts des Eingangs oder der Eingänge des Blocks haben. Der Ausgang ist eine Funktion dieser vorangegangenen Informationen, und die vorangegangenen Informationen können voreingestellt werden, so daß, wenn das System "anläuft", der Speicher oder Zustand mit den korrekten Parametern geladen ist, um einen definierten Ausgang bei dem ersten Zeitschritt der Ausführung zu generieren.
- Nun wird ein allgemeines Beispiel betrachtet, wie gemäß der vorliegenden Erfindung der ABFOLGELISTEN GENERATOR 20 eine Abfolgeliste erzeugt, die in dem ABFOLGELISTEN SPEICHER 20A zu speichern ist. Als erstes kann ein Konstrukteur die Tastatur 4 und die Mouse 6 (Fig. 1A) verwenden, um das Blockdiagramm des in Fig. 3 dargestellten Filters zu entwerfen. Die Software des BDE 12 ermöglicht es dem Konstrukteur, auf der Bildschirmanzeige Linien zu ziehen und Verbindungen herzustellen. Sobald das Blockdiagramm fertiggestellt ist, kann eine Netzlistendarstellung des Blockdiagramms durch den NETZLISTEN GENERATOR 16 gebildet werden. Die Netzliste ist eine Darstellung des Blockdiagramms, die das Blockdiagramm für die Plattform 10 charakterisiert. Die Netzlistendarstellung des Blockdiagramms für Fig. 3 ist in Fig. 3A dargestellt. Jedes Netzlistenelement, jede Reihe aus Fig. 3A, entspricht einem unterschiedlichen Block, und das Element enthält vier Informationskategorien; einen Funktionsblocktyp, eine Exemplarnummer, Eingänge zu dem Block und Ausgänge von dem Block. Der Funktionsblocktyp ist eine Beschreibung in Computersprache des Funktionstyps (Koeffizient, "Einheitsverzögerer", usw.), der von dem Block dargestellt wird, in Computersprache. Die Exemplarnummer entspricht dem Auftreten eines bestimmten Blocks in dem Blockdiagramm. Exemplarnummern unterscheiden die Blöcke, die den gleichen Blocktyp haben. Zum Beispiel ist der Koeffizienten Blocktyp fünfmal in dem Blockdiagramm aus Fig. 3 bei 72, 74, 76, 88 und 90 dargestellt. Die Exemplarnummern ermöglichen es der Plattform, die Koeffizientenblöcke voneinander zu unterscheiden. Falls die Blöcke in dem Blockdiagramm alle von unterschiedlichen Funktionstypen wären, wäre nur der Funktionstyp der Blöcke notwendig, um die Blöcke voneinander zu unterscheiden. In der bevorzugten Ausführungsform umfaßt die Netzliste die Exemplarnummern unabhängig davon, ob sie tatsächlich verwendet werden, um die Blöcke zu unterscheiden.
- Bezugnehmend auf Fig. 3A wird nun eine Beschreibung von einigen der Elemente in der Netzliste entsprechend Fig. 3 erörtert. Insbesondere ist das Element 2040 eine Netzlistenbeschreibung des Quellblocks. Der Quellblock hat die Exemplarnummer 64, keine Eingänge und einen Ausgang O&sub1;, der mit der Linie 92 verbunden ist. Das nächste Element 2042 in der Netzliste beschreibt die Verbindung des Koeffizientenblocks B&sub0; in dem Blockdiagramm (Fig. 3). Insbesondere hat der Koeffizientenblock B&sub0; eine Exemplarnummer 76, einen Eingang I&sub1;, der mit der Linie 92 verbunden ist, und einen Ausgang O&sub1;, der mit der Linie 104 verbunden ist. Eingang I&sub1; des Koeffizientenblocks B&sub0; ist mit der gleichen Linie verbunden wie der Ausgang O&sub1; des Quellblocks 64. Diese Information ermöglicht es der Plattform 10, den Ausgang des Quellblocks mit dem Eingang des Koeffizientenblocks B&sub0; 76 zu verbinden. Bezugnehmend auf Element 2044 ist die Netzlistenbeschreibung des Koeffizientenblocks B&sub1; dargestellt. Der Koeffizientenblock B&sub1; hat eine Exemplarnummer 74, einen Eingang I&sub1;, der mit der Linie 92 verbunden ist, und einen Ausgang O&sub1;, der mit der Linie 102 verbunden ist. Wie im Fall des Koeffizientenblocks B&sub0; ist auch der Koeffizientenblock B&sub1; mit der Linie 92 verbunden. Die Plattform 10 verbindet auch den Ausgang 0&sub1; des Quellblocks 64 mit dem Koeffizientenblock B&sub1; 74.
- Die Netzlisteninformationen, die in Fig. 3A dargestellt sind, ermöglichen es der Plattform, das gesamte Filterdiagramm zu charakterisieren. Zusätzliche Informationen können in der Netzliste enthalten sein; allerdings sind zum Zwecke dieser Anwendung nur die in Fig. 3A dargestellten Informationen notwendig, um das Blockdiagramm aus Fig. 3 für Simulationszwecke zu charakterisieren.
- Sobald die Netzliste durch den NETZLISTEN GENERATOR 16 generiert worden ist, kann eine geordnete Liste oder Abfolgeliste mit Prozeduraufrufen zur Simulation des Filters (Fig. 3) generiert werden. Die Abfolgeliste enthält die korrekte Reihenfolge der Prozeduraufrufe, um auf Computerprozeduren zuzugreifen, die in dem BIBLIOTHEK SPEICHER 14A gespeichert sind. Fig. 3C stellt die Computerprozeduren als Darstellung der Blöcke in dem Filterblockdiagramm (Fig. 3) dar, die in dem BIBLIOTHEK SPEICHER 14A gespeichert sind. Bezugnehmend auf Fig. 3B ist die Abfolgeliste mit Prozeduraufrufen dargestellt, die dem in Fig. 3 dargestellten Filter entsprechen. Insbesondere ist einen Liste mit vierzehn Prozeduraufrufen (in der C-Sprache) dargestellt. Die Bildung der Abfolgeliste (Fig. 3B) wird von einem der vier Verfahren gesteuert, die von dem ABFOLGELISTEN GENERATOR 20 ausgeführt werden. Die Darstellungsinformationen, Durchführungsliste, usw. (wird später beschrieben) von jedem Block in dem BIBLIOTHEK SPEICHER 14A wird zusammen mit den Netzlisteninformationen analysiert, um die Reihenfolge zu bestimmen, in der die Prozeduraufrufe in der Abfolgeliste abgelegt werden.
- Eine allgemeine Beschreibung der Strategie zur Generierung der Abfolgeliste mit Prozeduraufrufen (Fig. 3B) wird nun erläutert. Zunächst hat der Quellblock 64 keine Eingänge und benötigt deshalb kein Eingangssignal, das generiert werden muß, bevor ein Ausgang erzeugt werden kann. Deshalb ist der Fortschreibungsausgangsprozeduraufruf für diesen Block in der Abfolgeliste abgelegt (2064, Fig. 3B). Die nächsten Fortschreibungsausgangsprozeduraufrufe, die in der Abfolgeliste abgelegt sind, sind für die Z-Blöcke oder die Einheitsverzögerungsblöcke 80 und 84. Diese Blöcke benötigen keine definierten Eingangsdaten und können deshalb Ausgangsdaten erzeugen, solange ihre Zustände vorab festgelegt worden sind (2066, 2068, Fig. 3B). Jeder einzelne der Fortschreibungsausgangsprozeduraufrufe für die Koeffizientenblöcke 72, 74, 76 kann dann in beliebiger Reihenfolge in der Abfolgeliste abgelegt werden (2070, 2072, 2074, Fig. 3B). Dann sind der Prozeduraufruf für den Additionsblock 86 (2076, Fig. 3B), gefolgt von dem Prozeduraufruf für die Koeffizientenblöcke 88 und 90 (2078, 2080, Fig. 3B), gefolgt von dem Prozeduraufruf für die Additionsblöcke 78 und 82 (2082, 2084, Fig. 3B), gefolgt von dem Prozeduraufruf für den Aufnahmeblock 68 (2086, Fig. 3B) in der Abfolgeliste abgelegt. Die letzten Prozeduraufrufe, die in der Abfolgeliste abgelegt werden müssen, sind zum Fortschreiben der Zustände der Z-Blöcke 80 und 84 (2088, 2090, Fig. 3B).
- Der CODE GENERATOR 22 assembliert ein Computerprogramm als Darstellung der Abfolgeliste (Fig. 3B), indem jeder Prozeduraufruf zu der entsprechenden Computerprozedur erweitert wird, die in dem BIBLIOTHEK SPEICHER 14A gespeichert ist. Zum Beispiel lautet der Fortschreibungsausgangsprozeduraufruf für den Z-Block 3:
- UO_dly_spb (Param. 80, Eingänge 110, Ausgänge 112, ZUSTAND 80)
- (2066, Fig. 3B).
- Dieser Prozeduraufruf entspricht der Computerprozedur, die in dem BIBLIOTHEK SPEICHER 14A gespeichert ist, die lautet:
- UO_dly_spb (Param., Eingang, Ausgang, Zustand) spb_output T out = spb_state T past_value return
- (2094, Fig. 3C).
- Der CODE GENERATOR 22 verbindet die Informationen in dem Prozeduraufruf mit der Computerprozedur, die in der Bibliothek gespeichert ist.
- Das Ergebnis ist eine Computerprozedur als Darstellung der Fortschreibungsausgangsprozedur für den Z-Block 80 aus Fig. 3, und sie lautet:
- UO_dly_spb (Param. 80, Eingänge 110, Ausgänge 112, ZUSTAND 80)
- spb_output T out = spb_state T past_value return
- (2108, Fig. 3D).
- Dieser Vorgang des Verbindens der Informationen aus der Bibliothek mit den Informationen in der Abfolgeliste wird für jedes der Elemente in der Abfolgeliste ausgeführt. Schließlich wird ein Computerprogramm als Darstellung der Schritte zur Simulation des Filterblockdiagramms (Fig. 3) gebildet, wie in Fig. 3D dargestellt.
- Bezugnehmend auf Fig. 3D wird nun eine ausführlichere Beschreibung zur Modellierung eines Zustandsblocks erläutert. Die Computerprozeduren zur Modellierung des Z- Blocks mit der Exemplarnummer 80 in Fig. 3 ist in den Reihen 2108 und 2130 des kompilierten Computerprogramms aus Fig. 3D dargestellt. Insbesondere Reihe 2108 stellt die Fortschreibungsausgangsprozedur dar, die die Plattform veranlaßt, Ausgänge für den Z-Block zu generieren, und Reihe 2130 ist die Fortschreibungszustandsprozedur zur Steuerung des Computers, um den Zustand des Z-Blocks fortzuschreiben. Die Fortschreibungszustandsprozedur sichert das gegenwärtige Eingangssignal in einer Variablen, spb_state PAST VALUE, die als der Zustand des Blocks gespeichert wird. Diese Prozedur wird dargestellt durch die Computerprozedur:
- US_dly_spb (Param. 80, Eingänge 110, Ausgänge KEINE, ZUSTAND 80)
- spb_state T past_value = (spb_input T in) return
- (2130, Fig. 3D).
- In einer getrennten Prozedur verwendet die Fortschreibungsausgangsprozedur für den Einheitsverzögerungsblock das Eingangssignal, das als der Zustand des Blocks gespeichert ist, und gibt dieses Eingangssignal aus. Diese Prozedur wird dargestellt durch die Computerprozedur:
- UO_dly_spb (Param. 80, Eingänge 110, Ausgänge 112, ZUSTAND 80)
- spb_output T out = spb_state T past_value
- (2108, Fig. 3D).
- Für den allerersten Zeitschritt der Ausführung, wird die Zustandsvariable des Z-Blocks mit einem anfänglichen Eingangssignal geladen zur Verarbeitung der Fortschreibungsausgangsprozedur, die dem Block zugeordnet ist. Dann schreibt die Fortschreibungszustandsprozedur, wie in dem erweiterten Computerprogramm aus Fig. 3D dargestellt, die Information in der Zustandsvariable mit den gegenwärtigen Eingängen des Blocks fort. Es ist wichtig anzumerken, daß die zwei Prozeduren als Darstellung des Z-Blocks in dem kompilierten Programm aus Fig. 3D getrennt dargestellt werden. Tatsächlich erfolgt die Fortschreibungszustandsprozedur am Ende des Computerprogramms, wenn die Eingänge des Blocks durch die Fortschreibungsausgangsprozeduren definiert sind, die ihr in dem Programm vorausgehen. Dadurch, daß getrennte Prozeduren zum Fortschreiben des Ausgangs und des Zustands des Blocks vorhanden sind, wird der Z-Block auf effiziente Weise modelliert, ohne Strukturen, wie Eingangs- und Ausgangszwischenspeicher, usw., unterhalten zu müssen.
- Indem die Computerprozeduren als Darstellung von Z-Blöcken entworfen werden, überlegt sich der Konstrukteur die Schritte, die nötig sind, um die Bildung nur der Ausgänge des Blocks zu steuern, und die Schritte, die nötig sind, um den Zustand des Blocks fortzuschreiben, ohne den Ausgang des Blocks zu beeinflussen. Die Fortschreibungsausgangsprozeduren bilden den Ausgang des Verzögerungsblocks ohne den Zustand des Blocks zu beeinflussen. Die Fortschreibungszustandsprozedur ist eine getrennte Prozedur, die den "Zustand" des Verzögerungsblocks (z.B. PAST VALUE des Z- Blocks) fortschreibt. Die Schritte um die Fortschreibungsausgangsprozeduren und die Fortschreibungszustandsprozeduren für Zustandsblöcke in eine Abfolge zu bringen, werden von sieben Abfolgesteuerungen getrennt gesteuert, die ausführlich in Teil II der ausführlichen Beschreibung erläutert werden.
- Die Ausführung einer Iteration der Liste mit Prozeduren, die in Fig. 3D dargestellt ist, wird als ein Zeitschritt einer Simulation angesehen. Mit anderen Worten wird von der Abfolge der Aufrufe aus Fig. 3D nur ein Datenteil auf einmal verarbeitet.
- Eine genaue Erläuterung eines Zeitschritts der Simulation des Filterdiagramms aus Fig. 3 wird nun behandelt. Die Computerprozedur (2106, Fig. 3D) des Quellblocks 64 steuert die Schritte zur Bildung eines Signals für den ersten Zeitschritt, und das Signal folgt, wie von der Netzliste (Fig. 3A) beschrieben, der Linie 92 zu den Koeffizientenblöcken 72, 74 und 76. Wie oben erwähnt, ist der nächste Aufruf zur Generierung von Ausgängen für die Z-Blöcke 80 und 84. Die Fortschreibungsausgangsprozedur (2108, Fig. 3D) für Block 80 steuert die Bildung von Ausgang 112 (O&sub1;, der mit Linie 112 verbunden ist) auf Grundlage ihrer vorab festgelegten Zustandsvariable (80), und die Fortschreibungsausgangsprozedur (2110, Fig. 3D) für den Z-Block 84 steuert die Bildung von Ausgang 116 auf Grundlage ihrer vorab festgelegten Zustandsvariable. Dadurch, daß die Ausgänge von den Computerprozeduren für Koeffizientenblöcke 64, 80 und 84 (2112, 2114, 2116, Fig. 3D) generiert wurden, hat die Computerprozedur für den Additionsblock 86 definierte Eingänge an beiden Eingängen 104 und 116. Die Computerprozedur für den Additionsblock (2118, Fig. 3D) steuert die Bildung von Ausgang 118, und dieser Ausgang wird über die Rückkopplungsschleife 120 zurückgeführt. Die Computerprozeduren (2120, 2122, Fig. 3D) für die Koeffizientenblöcke 88 und 90 steuern dann die Multiplikation des Signals 120 der Rückkopplungsschleife mit den Koeffizienten A&sub2; bzw. A&sub1;. Computerprozeduren (2124, 2126, Fig. 3D) für die Additionsblöcke 78 und 82 haben nun definierte Eingänge. Insbesondere die Computerprozedur (2124, Fig. 3D) für den Additionsblock 78 hat definierte Eingänge 100 und 106, und sie steuert die Bildung von Ausgang 110. Zusätzlich hat die Computerprozedur (2126, Fig. 3D) für den Additionsblock 82 definierte Eingänge 102, 112 und 108, und sie steuert die Bildung von Ausgang 114. An dieser Stufe der Simulation sind alle Ausgänge für alle Blöcke fortgeschrieben worden, und die Eingänge zu jedem der Blöcke sind für den ersten Zeitschritt definiert. Die Computerprozedur für den Aufnahmeblock 68 (2128, Fig. 3D) steuert die Schritte zur Speicherung des resultierenden Signals. Der letzte Schritt der Simulation des Blockdiagramms (Fig. 3) ist zur Fortschreibung der Zustände der Einheitsverzögerungsblöcke 80 und 84. Auf diese Weise kann der nächste Zeitschritt für das Signal, das an dem Quellblock 64 erzeugt wird, auf Grundlage der vorherigen Eingangssignale des vorangegangenen Zeitschritts analysiert werden. Die Fortschreibungszustandsprozeduren (2130, 2132, Fig. 3D) steuern die Schritte zur Fortschreibung der Zustände der Einheitsverzögerungsblöcke 80 und 84, indem Eingangssignale von dem gegenwärtigen Zeitschritt in ihren entsprechenden Zustandsvariablen gespeichert werden.
- Das ist grundsätzlich, wie eine Klasse von Filtern arbeitet, auf die als Frequenzgangfilter mit unendlichen Eingängen Bezug genommen wird. Es führt die Ausgangsinformation von dem vorangegangenen Zeitschritt zurück und generiert die Information der neuen Quellen auf Grundlage der vorangegangenen Informationen oder Eingänge. Ohne diese Fähigkeit wäre dieser Filtertyp nicht in der Lage, Daten korrekt verarbeiten zu können. Ebenso benötigt jeder Blockdiagrammtyp, der für selbstkorrigierende Zwecke die Analyse von Daten eines vorangegangenen Zeitschritts erfordert, eine Rückkopplungsschleife und deshalb mindestens einen Block, der eine Verzögerungseigenschaft aufweist, um die Rückkopplungsschleife unterzubringen.
- Es werden nun sieben Verfahren erläutert, um die Prozeduraufrufe als Darstellung der Blockdiagramme mit oder ohne Rückkopplungsschleifen in eine Abfolge zu bringen. Diese Verfahren sind in Flußdiagrammen der Fig. 5, 11, 14, 21, 22, 23 und 26 dargestellt. Die Figuren, die die sieben Verfahren darstellen, sind erstens Fig. 5A, B und C, zweitens Fig. 11A, B, C und D, drittens Fig. 14A, B, C, F und G, viertens Fig. 14A, B, D, F und G, fünftens Fig. 14A, B, E, F und G (die alle zur Generierung von Softwarealgorithmen als Darstellung der Blockdiagramme dienen, die zu jeder Zeit ausgeführt werden können), sechstens Fig. 21, Fig. 22A und B, Fig. 23 und siebtens Fig. 26A und B (die in einer Laufzeitumgebung arbeiten, und sie erzeugen keine Softwareprogramme als Darstellung der Blöcke). Die Verfahren, die in den Fig. 5, 11 und 14 dargestellt sind, erzeugen Computerprogramme, die zur Speicherung in einem Speicher eines Halbleiterbausteins verarbeitet werden können, um den Halbleiterbaustein zu veranlassen, das Blockdiagramm zu simulieren.
- Insbesondere bezugnehmend auf die Fig. 5A, B und C wird das BESCHRÄNKTE ABFOLGE Verfahren erläutert, um die Computerprozeduraufrufe als Darstellungen eines Blockdiagramms in eine Abfolge zu bringen. Dieses Verfahren nimmt eine Netzliste als Darstellung eines Blockdiagramms als seinen Eingang. Wie oben erläutert, bestimmt die Netzliste, wie die Blöcke innerhalb des Blockdiagramms miteinander verbunden sind, den Namen des Prozeduraufrufs in der Bibliothek und alle vorab festgelegten Zustandsparameter. Dieses Verfahren bildet aus der Netzliste eine Abfolgeliste, so daß die Prozeduraufrufe korrekte Informationen erzeugen. Anders ausgedrückt werden die Prozeduraufrufe derart angeordnet, daß wenn erforderlich, Eingänge zu jedem der Computerprozeduren durch Ausgänge von anderen Prozeduren gesteuert oder definiert werden. Das Verfahren geht davon aus, daß jeder der Blöcke eine Prozedur zur Fortschreibung des Ausgangs hat. Die Ausgangsprozedur kann jede charakteristische Funktion zur Verarbeitung von keinem, einem oder mehreren Eingängen und/ oder des Zustands, des Blocks sein. Falls der Block einen Zustand hat, kann auch eine Prozedur zur Fortschreibung des Zustands verwendet werden.
- Wenn ein individueller Block erzeugt wird, bestimmt der Blockkonstrukteur die Verzögerungseigenschaft für diesen bestimmten Block, indem er festlegt, welche Eingänge des Blocks die Ausgänge des Blocks unmittelbar beeinflussen. Der Anwender wird durch das BESCHRÄNKTE ABFOLGE Verfahren derart BESCHRÄNKT, daß er nur eine Verzögerungseigenschaft pro Block bestimmen kann. Bei dem noch zu beschreibenden ALLGEMEINEN ABFOLGE Verfahren bestimmt der Konstrukteur eine Verzögerungseigenschaft für jeden der Ausgänge des Blocks. Eine Durchführungsliste ist für jeden Block vorgesehen, um die Verzögerungseigenschaft eines Blocks zu definieren. Die Durchführungsliste ist eine Liste mit Eingängen, die definiert sein müssen, bevor die Ausgänge des Blocks fortgeschrieben werden können. Eine Durchführungsliste, die alle Eingänge eines Blocks enthält, bedeutet, daß alle Eingänge definiert sein müssen, bevor die Fortschreibungsausgangsprozedur für den Block ausgeführt werden kann. Falls in der Durchführungsliste keine Eingänge sind, kann die Fortschreibungsausgangsprozedur für den Block ausgeführt werden, ohne definierte Eingänge zu haben. Falls nur einige der Eingänge der Eingangsliste (eine Liste der Eingänge zu dem Block) in der Durchführungsliste sind, müssen nur einige der Eingänge definiert sein, bevor die Fortschreibungsausgangsprozedur für den Block ausgeführt werden kann. Der Konstrukteur der Computerprozedur als Darstellung des Blocks überlegt, welche Eingänge definiert sein müssen, bevor der Block ausgeführt werden kann. Wenn solche Eingänge bestimmt sind, führt der Konstrukteur diese Eingänge in der Durchführungsliste auf, die dem Block zugeordnet ist. Im allgemeinen Fall, in dem eine getrennte Durchführungsliste jedem Ausgang des Blocks zugeordnet ist, bestimmt der Konstrukteur, welche Eingänge jeden Ausgang des Blocks beeinflussen, und setzt dann die Eingänge, die den Ausgang beeinflussen, auf die Durchführungsliste, die dem bestimmten Ausgang zugeordnet ist. Die Durchführungsliste wird von dem Konstrukteur definiert, dann in der Position in dem Bibliothek Speicher 14A gespeichert, der dem Block zugeordnet ist.
- Indem auf die Durchführungsliste für jeden Block Bezug genommen wird, bestimmt der Abfolge Listen Generator die korrekte Abfolge der Prozeduraufrufe, die in der Abfolgeliste abzulegen sind. Die erste Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens in Fig. 5 untersucht die Durchführungsliste für jeden der Blöcke, um die Reihenfolge der Ausführung jeder Fortschreibungsausgangsprozedur und Fortschreibungszustandsprozedur, die dem Block zugeordnet sind, zu bestimmen.
- Bezugnehmend auf das Flußdiagranm aus Fig. 5A wird bei Block 132 ein Zeiger, der in dem Speicher der Plattform gespeichert ist, an den Anfang einer Blocklist gesetzt, um die Verarbeitung zu initialisieren. Die Blockliste ist eine sich dynamisch ändernde Struktur, die von der Plattform unterhalten wird, um zu verfolgen, welcher Block gegenwärtig zum Zwecke der Bestimmung der Abfolge analysiert wird. Die Elemente in der Blockliste können in beliebiger Reihenfolge angeordnet sein. Jedes Element kann entweder ein Blocktyp oder eine Exemplarnummer zur Bezeichnung des Blocks sein. Der Blocktyp und/ oder die Exemplarnummer werden zur Verweisung auf die Netzlistenelemente und die Bibliothekselemente, die dem Block zugeordnet sind, verwendet. Wenn die Verarbeitung für ein bestimmtes Element in der Blockliste abgeschlossen ist, wird das Element aus der Blockliste entfernt. Fig. 7 zeigt einen Zeiger 196, der auf eine Adresse zeigt, die gerade vor dem ersten Eintrag in der Blockliste liegt. Die Blockliste aus Fig. 7 hat sieben Elemente, und das erste Element in der Blockliste ist A (Exemplarnummer) bei 198.
- Bezugnehmend auf das Flußdiagramm aus Fig. 5A wird eine ENTFERNTES ELEMENT Variable bei dem Block 134 gleich "falsch" gesetzt. Diese Variable wird verwendet, um zu verfolgen, ob die Elemente in der Blockliste des Blockdiagramms in eine Abfolge bringbar sind oder nicht. Auf diese Weise wird sichergestellt, daß das System nicht in eine Endlosschleife gerät, während es versucht ein nicht in eine Abfolge bringbares Blockdiagramm in eine Abfolge zu bringen. Bei Block 136 wird eine Abfrage durchgeführt, ob Elemente in der Blockliste übrig sind oder nicht. Falls keine Elemente in der Blockliste übrig sind, wird die Verarbeitung beendet und der Simulator nimmt bei Block 137 seine normale Verarbeitung wieder auf. Falls Elemente in der Blockliste übrig sind, wird während Block 138 eine Abfrage durchgeführt, ob der Zeiger am Ende der Blockliste ist. Falls der Zeiger am Ende der Blockliste ist, wird die ENTFERNTES ELEMENT Variable bei Block 144 überprüft, um zu sehen, ob sie auf "wahr" gesetzt ist. Falls die ENTFERNTES ELEMENT Variable "falsch" ist, wurden während des letzten Durchgangs durch die Blockliste keine Elemente der Blockliste in eine Abfolge gebracht, und deshalb wird bestimmt, daß die Computerprogramme als Darstellung eines zu simulierenden Blockdiagramms nicht in eine Abfolge bringbar sind. Das System kehrt bei Block 149 zurück und nimmt seine normale Verarbeitung wieder auf.
- Falls sich der Zeiger 196 nicht am Ende der Blockliste befindet, wird der Zeiger bei Block 140 zu dem nächsten Element in der Blockliste weiterbewegt. Während Block 142 wird eine Abfrage der Verzögerungseigenschaft des Blocks durchgeführt, indem die Durchführungsliste, die dem Block zugeordnet ist, überprüft wird. Falls alle Eingänge in der Durchführungsliste auch in der Eingangsliste des Blocks auftreten, ist dieser Block ein alle Durchführungstyp und bei Block 143 wird auf das ALLE DURCHFÜHREN Verfahren (Fig. 5A) zugegriffen. Falls allerdings nur einige oder keine der Eingänge in der Durchführungsliste in der Eingangsliste des Blocks auftreten, ist dieser Block ein manche Durchführungstyp-Block, und bei Block 145 wird auf das MANCHE DURCHFÜHREN Verfahren (Fig. 5C) zugegriffen.
- Falls der Block als ein alle Durchführungstyp eingestuft wird, bedeutet dies, daß jeder der Eingänge des Blocks definiert sein muß, bevor der Prozeduraufruf für den Block in der Abfolgeliste abgelegt werden kann. Anders ausgedrückt kann für einen alle Durchführungsblock die Fortschreibungsausgangsprozedur zur Generierung der Ausgänge des Blocks nicht in der Abfolgeliste abgelegt werden, bis nicht alle Eingänge des Blocks definiert sind. Zusätzlich wird ein alle Durchführungstyp als ein Block eingestuft, der keine Eingänge hat, und deshalb muß kein Eingang definiert werden.
- "Manche Durchführen" bedeutet, daß nur manche der Eingänge des Blocks definiert sein müssen, bevor die Ausgangsprozedur für den Block in der Abfolgeliste abgelegt werden kann. Diese Blöcke haben einen "Zustand", der effizienterweise manche oder alle der Eingänge ersetzt.
- Unter der Annahme, daß die Verzögerungseigenschaft des Blocks ein alle Durchführungstyp ist, wird bei Block 143 das ALLE DURCHFÜHREN Verfahren (Fig. 5B) betreten. Bei Block 146 werden die Eingänge des Blocks analysiert, um zu bestimmen, ob alle der Eingänge definiert sind. Ein Eingang ist definiert, wenn der Eingang von einem Fortschreibungsausgangsprozeduraufruf gesteuert wird, der in der Abfolgeliste gespeichert ist. Falls nicht alle der Eingänge in der Durchführungsliste für den Block definiert sind, kehrt die Verarbeitung bei Block 147 zurück zu Block 136 des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) 113. Falls alle Eingänge in der Durchführungsliste dieses Blocks von Fortschreibungsausgangsprozeduraufrufen in der Abfolgeliste gesteuert werden, wird während Block 148 der Fortschreibungsausgangsprozeduraufruf für diesen Block an die Abfolgeliste angefügt. Bei Block 150 wird das Element für diesen Block von der Blockliste entfernt, um zu zeigen, daß die Fortschreibungsausgangsprozedur als Darstellung des Blocks in der Abfolgeliste abgelegt worden ist, und deshalb muß sie nicht länger in eine Abfolge gebracht werden. Das Netzlistenelement für diesen Block verbleibt in der Netzliste. Die Netzliste bleibt immer gleich, außer es ändert sich die Gesamtkonfiguration des Blockdiagramms. Der Blocklistenzeiger 196 aus Fig. 7 bewegt sich bei Block 152 zurück zu dem vorangehenden Element in der Blockliste. Die ENTFERNTES ELEMENT Variable wird gleich "wahr" gesetzt, um sicherzustellen, daß das System bemerkt, daß das in eine Abfolge Bringen der Blockliste noch läuft. Die Verarbeitung kehrt dann bei Block 155 zu Block 136 des aufrufenden Teils des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) zurück.
- Die Aufrufe für die Fortschreibungszustandsprozedur und die Fortschreibungsausgangsprozedur sind in dem BIBLIOTHEK SPEICHER 14A gespeichert. Die Parameterinformationen für den Prozeduraufruf werden in einem Netzlistenelement gespeichert, das dem Block, der analysiert wird, zugeordnet ist. Die Informationen werden zu einem Prozeduraufruf zusammengesetzt und in der Abfolgeliste gespeichert. Eine ausführlichere Erläuterung bezüglich der Netzliste und der Bibliothek ist in Abschnitt I. B. 2) beschrieben.
- Wieder bezugnehmend auf Block 142 aus Fig. 5A, wird dann, falls die Eigenschaft des analysierten Blocks ein manche Durchführungstyp ist, bei Block 145 das MANCHE DURCHFÜHREN Verfahren (Fig. 5C) aufgerufen. Bei Block 156 wird die Abfolgeliste durchgesehen, um festzustellen, ob der Fortschreibungsausgangsprozeduraufruf für das bestimmte Blocklistenelement, das gerade analysiert wird, in der Abfolgeliste abgelegt worden ist oder nicht. Falls der Fortschreibungsausgangsprozeduraufruf nicht in der Abfolgeliste abgeleget worden ist, wird einer Prozedur gefolgt, die ähnliche der Prozedur für das ALLE DURCHFÜHREN Verfahren ist. Zuerst werden während Block 158 die Eingänge in der Durchführungsliste, die dem Block entsprechen, analysiert, um festzustellen, ob sie definiert sind oder nicht. Der Simulator bestimmt, ob die Eingänge in der Durchführungsliste definiert sind oder nicht, indem er feststellt, ob jeder der Eingänge von einem Fortschreibungsausgangsprozeduraufruf gesteuert wird, der in der Abfolgeliste gespeichert ist. Falls alle Eingänge in der Durchführungsliste nicht definiert sind, kehrt die Verarbeitung bei Block 159 zu Block 136 des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) zurück. Falls die Eingänge allerdings alle in der Durchführungsliste definiert sind, wird während Block 160 der Fortschreibungsausgangsprozeduraufruf für den Block, der gegenwärtig analysiert wird, in der Abfolgeliste abgelegt. Dann wird während Block 164 die ENTFERNTES ELEMENT Variable gleich "wahr" gesetzt. Die Verarbeitung wird dann während Block 165 zu Block 136 des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) zurückkehren.
- Wieder bezugnehmend auf Block 156 (Fig. 5C) wird, falls der Fortschreibungsausgangsprozeduraufruf für das bestimmte Element, das gerade analysiert wird, bereits früher in der Abfolgeliste abgelegt worden ist, während Block 166 eine Abfrage durchgeführt, ob die Eingänge in der Eingangsliste für das gegenwärtige Blocklistenelement, das gerade analysiert wird, alle definiert sind. Die Eingänge sind definiert, wenn jeder der Eingänge von einem Fortschreibungsausgangsprozeduraufruf gesteuert wird, der in der Abfolgeliste gespeichert ist. Falls alle Eingänge in der Eingangsliste zu dem Block nicht definiert sind, wird dann bei Block 167 die Verarbeitung bei Block 136 des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) wieder aufgenommen. Falls die Eingänge in der Eingangsliste definiert sind, wird dann der Fortschreibungsausgangsprozeduraufruf für dieses Element bei Block 168 in der Abfolgeliste abgelegt.
- Das Element für diesen Block wird während Block 170 von der Blockliste entfernt, um sicherzustellen, daß das Element nicht ein zweites Mal analysiert wird. Während Block 172 wird der Blocklistenzeiger auf das vorangehende Element zurückgesetzt, und bei Block 174 wird die ENTFERNTES ELEMENT Variable gleich "wahr" gesetzt. Die Verarbeitung wird dann bei Block 175 zu Block 136 des BESCHRÄNKTEN ABFOLGE Verfahrens (Fig. 5A) zurückkehren.
- Bei Block 138 wird der Blocklistenzeiger überprüft, um festzustellen, ob er am Ende der Blockliste ist. Falls der Zeiger am Ende der Blockliste ist, wird dann bei Block 144 die ENTFERNTES ELEMENT Variable überprüft, um zu sehen, ob sie "falsch" ist. Falls die ENTFERNTES ELEMENT Variable "falsch" ist, wurden alle Elemente in der Blockliste mindestens einmal durchgesehen und keines der Elemente wurde in der Abfolgeliste abgelegt. Das bedeutet, daß die Elemente in der Blockliste nicht in eine Abfolge bringbar sind, und das Verfahren wird bei Block 149 anhalten mit einer Meldung an den Anwender, die besagt, daß das Blockdiagramm nicht in eine Abfolge bringbar ist. Falls allerdings die ENTFERNTES ELEMENT Variable "wahr" ist, wurde mindestens eines der Netzlistenelemente in der Abfolgeliste abgelegt, und deshalb ist die Blockliste möglicherweise noch in eine Abfolge bringbar und Block 132 wird betreten. Bei Block 132 wird der Zeiger zurück an den Anfang der Blockliste gesetzt. Bei Block 134 wird das entfernte Element gleich "falsch" gesetzt. Die Blockliste wird dann bei Block 136 durchgesehen, um festzustellen, ob noch Elemente übrig sind. Unter der Annahme, daß in der Blockliste keine weiteren Elemente übrig sind, wird Block 137 aufgerufen, um die Routine zu verlassen.
- Die Abfolgeliste, die unter der Steuerung der ersten Ausführungsform des obigen BESCHRÄNKTEN ABFOLGE Verfahrens gebildet wird, kann dann verwendet werden, ein Computerprogramm zu assemblieren oder zu kompilieren. Das kompilierte Computerprogramm kann dann ausgeführt werden, um eine Simulation des Blockdiagramms durchzuführen.
- In einer anderen Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens werden die Prozeduraufrufe als Darstellung der Blöcke während der Bildung der Abfolgeliste ausgeführt; auf diese Weise wird eine Simulation des Blockdiagramms durchgeführt während die Prozeduraufrufe für die Blöcke in eine Abfolge gebracht werden.
- Die Fig. 6A und 6B stellen zwei Verfahren zum Umsetzen der Abfolgeliste, die durch ein beliebiges Verfahren zur Bildung einer Abfolgeliste generiert wurde, in Computerprogramme dar. Fig. 6A ist ein Verfahren zum Kompilieren der Abfolgeliste und zum Ausführen des resultierenden Computerprogramms. Fig. 6B ist ein Verfahren zum Vorkompilieren des Codes und zum Aufrufen des vorkompilierten Codes, wenn er benötigt wird.
- Das CODE GENERIERUNGS Verfahren aus Fig. 6A ist eine solche Ausführungsform zum Kompilieren und Ausführen von Code. Bei Block 178 wird die Abfolgeliste in Quellcode umgesetzt. Jeder Eintrag in der Abfolgeliste stellt den Namen in dem BIBLIOTHEK SPEICHER 14A (Fig. 1) einer Computerprozedur zum Fortschreiben des Ausgangs oder des Fortschreibungszustands dar, der jedem Eintrag in der Abfolgeliste zugeordnet ist. Bei Block 180 wird der Quellcode kompiliert. Im wesentlichen wird der Quellcode in einen Code einer unteren Ebene umgesetzt, den der Computer ausführen kann. Bei Block 182 stellt das System fest, ob das Kompilieren erfolgreich war oder nicht. Falls das Kompilieren nicht erfolgreich ist, wird bei Block 186 eine Fehlermeldung generiert, und bei Block 188 wird die Verarbeitung zu dem aufrufenden Programm zurückkehren. Unter der Annahme, daß das Kompilieren erfolgreich war, kann dann bei Block 184 der Code ausgeführt werden.
- Die Ausführung wird in drei Abschnitte unterteilt: Initialisierung, Verarbeitung und Beendigung. Der Initialisierungsabschnitt setzt die Koeffizientenwerte und Anfangsbedingungen für jeden Block in dem System. Während des Verarbeitungsabschnitts wird der Prozeduraufruf der mathematischen Operation, die jeden Block darstellt, in der Abfolge aufgerufen, die durch eines der Abfolgeverfahren bestimmt wurde. Wenn die Computerprozedur eines bestimmten Blocks, die von dem kompilierten Code dargestellt wird, von dem System ausgeführt wird, wurde der Ausgang des Blocks fortgeschrieben. Jeder vollständige Zyklus des Fortschreibens aller funktionaler Blöcke in dem System, das simuliert wird, ist eine Iteration. Eine Iteration stellt einen Zeitschritt von Daten, die durch das simulierte System verarbeitet werden, dar. Üblicherweise wird eine Simulation mehrere Zeitschritte von Daten verarbeiten. Der Beendigungsabschnitt erlaubt jeder der Routinen als Darstellung eines Blocks in dem System, am Ende der Simulation Informationen bezüglich ihres Zustands auszugeben. Wenn die Ausführung abgeschlossen ist, kehrt das System bei Block 188 zu dem aufrufenden Programm zurück.
- Fig. 6B ist ein Fluß-Blockdiagramm des SYSTEM INTERPRETER Verfahrens, das eine Reihe von Prozeduraufrufen in vorkompiliertem Code ordnet. Bei Block 201 wird die Abfolgeliste gelesen, die von einer der Abfolge Verfahren erzeugt wurde, und eine Anzahl Iterationen Variable wird auf 0 gesetzt. Bei Block 202 wird die Abfolgeliste durchgesehen, um festzustellen, ob alle der Aufrufe in der Abfolgeliste erlaubte Prozeduraufrufe sind; die Aufrufe werden mit einer Tabelle (nicht dargestellt) mit erlaubten Prozeduraufrufen verglichen. Falls die Aufrufe in der Abfolgeliste nicht mit der Tabelle der erlaubten Prozeduraufrufen übereinstimmen, wird dem Anwender bei den Blöcken 208 und 209 eine Fehlermeldung ausgegeben. Bei Block 203 wird jeder Prozeduraufruf in der Abfolgeliste in eine Adresse umgesetzt, die auf die Position des vorkompilierten Codes als Darstellung des Prozeduraufrufs zeigt. Anders ausgedrückt wird eine Matrix oder eine Liste mit Zeigern auf die vorkompilierten Codes gebildet. Alle Prozeduraufrufe werden in dem System vorkompiliert, so daß das SYSTEM INTERPRETER Verfahren keinen Code kompilieren muß. Bei Block 211 werden die vorkompilierten Initialisierungsprozeduren gemäß der System Initialisierungsmatrix unter Einsatz der Liste ausgeführt, die bei Block 203 generiert wurde, mit Ausnahme der Fortschreibungszustandsprozeduren. Block 211 initialisiert die Parameter und Zustände von jeder Computerprozedur als Darstellung von jedem Block in dem Blockdiagramm, das simuliert wird.
- Das System wird dann den vorkompilierten Code in der Reihenfolge der Prozeduraufrufe in der Abfolgeliste ausführen. Bei Block 204 wird die Anzahl der Iterationen mit der Anzahl der maximalen Iterationen verglichen, die von dem Konstrukteur vorgegeben wurde. Unter der Annahme, daß die maximale Anzahl von Iterationen nicht ausgeführt wurde, werden dann bei Block 206 die Prozeduraufrufe noch einmal ausgeführt. Block 206 stellt im Grunde eine Iteration der Verarbeitungsabschnittsausführung der Simulation dar. Bei Block 205 wird die Anzahl der Iterationen Variable um Eins erhöht, und bei Block 204 wird die Anzahl der Iterationen Variable mit der maximalen Anzahl der Iterationen verglichen. Unter der Annahme, daß die Anzahl der Iterationen größer ist als die maximale Anzahl der Iterationen, werden bei Blcck 207 die vorkompilierten Beendigungsprozeduren gemäß der Systembeendigungsmatrix mit Zeigern unter Einsatz der Liste ausgeführt, die bei Blöck 203 generiert wurde, mit Ausnahme der Fortschreibungszustandsprozeduren, und bei Block 209 wird das System zu seiner normalen Verarbeitung zurückkehren.
- Das CODE GENERIERUNGS Verfahren, das in Fig. 6A dargestellt ist, oder das SYSTEM INTERPRETER Verfahren, das in Fig. 6B dargestellt ist, kann verwendet werden, um die Prozeduraufrufe in der Abfolgeliste zu simulieren. Ein Vorteil des CODE GENERIERUNGS Modus (Fig. 6A) gegenüber dem SYSTEM INTERPRETER Verfahren (Fig. 6B) ist, daß es zu einer effizienteren Ausführung führt und weniger Speicher verwendet. Der Nachteil dieser Strategie ist, daß es lange dauert, den Quellcode zu generieren und zu kompilieren. Wohingegen das SYSTEM INTERPRETER Verfahren den Quellcode nicht generieren und kompilieren muß, weil die Generierung und Kompilierung des Quellcodes bereits durchgeführt wurde. Der Nachteil des SYSTEM INTERPRETER Verfahrens ist, daß dem vorkompilierten Code viel Speicher zugeerdnet werden muß.
- Bezugnehmend auf die Fig. 5A, 5B und 5C, 8, 8A, 8B, 9A und B wird nun ein ausführliches Beispiel des BESCHRÄNKTEN ABFOLGE Verfahrens erläutert. Fig. 8 ist ein schematisches Blockdiagramm, das von einem Konstrukteur auf der Bildschirmanzeige entworfen wurde, mit einer Rückkopplungsschleife 226 und einem Zustandsblock 212.
- Fig. 8A ist eine Netzlistendarstellung des Blockdiagramms, das in Fig. 8 gezeigt ist. Eine ausführliche Beschreibung einer Netzliste wurde oben in Verbindung mit Fig. 3A gegeben, und deshalb wird eine ausführliche Beschreibung der Netzliste aus Fig. 8A nicht gegeben. Fig. 8B ist eine Darstellung der Information, die in dem BIBLIOTHEK SPEICHER 14A gespeichert ist, um jede Computerprozedur als Darstellung von jedem Block in dem Blockdiagramm aus Fig. 8 zu charakterisieren. In den bevorzugten Ausführungsformen werden fünf Kategorien von Informationen in dem Speicher für jeden Block verwaltet: eine Durchführungsliste, eine Fortschreibungsausgangsprozedur, eine Fortschreibungszustandsprozedur (falls der Block ein Zustandsblock ist), eine Eingangsliste und eine Ausgangsliste. Abhängig von den Systemanforderungen können falls notwendig mehr Informationen enthalten sein. Die Fortschreibungsausgangsprozedur für jeden Block und die Fortschreibungszustandsprozedur für jeden Zustandsblock werden in ihrer Quellcodeform gespeichert. Allerdings wird der Einfachheit halber die Fortschreibungsausgangsprozedur für einen bestimmten Block durch den Namen des bestimmten Blocks (z.B. A, B, C, D, usw.), gefolgt von den Buchstaben "UO" in Klammern dargestellt. Deshalb ist die Fortschreibungsausgangsprozedur für Element A A(UO). Ebenso wird die Fortschreibungszustandsprozedur für jeden Zustandsblock durch den Namen des Blocks (z.B. A, B, C, D, usw.), gefolgt von den Buchstaben "US" in Klammern dargestellt. Zum Beispiel hat Block B, wie in Fig. 8B bei 2144 dargestellt, eine Fortschreibungsausgangsprozedur B(UO) und eine Fortschreibungszustandsprozedur B(US).
- Bezugnehmend auf die Fig. 8, 8A und 8B wird eine ausführliche Beschreibung des obigen in Fig. 8 dargestellten Diagramms gegeben. Block B (212, Fig. 8) hat Eingänge I&sub1; und I&sub2; in seiner Eingangsliste (2136, Fig. 8A) und hat Eingang I&sub1; in seiner Durchführungsliste (2144, Fig. 8B). Dieser Block wird als ein Zustandsblock oder ein manche Durchführungstyp eingestuft, weil nur einer seiner Eingänge aus der Eingangsliste in der Durchführungsliste ist. Mit anderen Worten muß Eingang I&sub1; bestimmt werden, bevor die Prozedurdarstellung von Block B (212, Fig. 8) ausgeführt werden kann. Allerdings muß Eingang I&sub2; nicht definiert werden, damit die Fortschreibungsausgangsprozedur "B(UO)" von Block B ausgeführt werden kann. Block B hat auch einen internen Zustand, der schließlich durch eine Fortschreibungszustandsprozedur "B(US)" fortgeschrieben werden muß. Blöcke D (214, Fig. 8) und C (216, Fig. 8) werden als alle Durchführungsblöcke angesehen, weil ihre Durchführungslisten alle Eingänge in ihren Eingangslisten haben. Zum Beispiel hat Block D (214, Fig. 8) Eingang I&sub3; in seiner Durchführungsliste und auf seiner Eingangsliste, was bedeutet, daß seine Fortschreibungsausgangsprozedur "D(UO)" nicht verarbeitet werden kann, bis Eingang I&sub3; definiert worden ist (2148, Fig. 8B). Block A (210, Fig. 8) hat keine Eingänge, und deshalb sind keine Eingänge in seiner Durchführungsliste (2142, Fig. 8B). Dieser Block wird als ein alle Durchführungsblock eingestuft, und seine Fortschreibungsausgangsprozedur "A(UO)" kann ausgeführt werden, ohne daß Eingänge definiert sind. Blöcke A, C und D haben keinen Zustand und erfordern deshalb keine Fortschreibungszustandsprozedur. Bezugnehmend auf Fig. 8B hat nur Zustandsblock B eine Fortschreibungszustandsprozedur "B(US)" in der Fortschreibungszustandsprozedurspalte.
- Die Fig. 9A und 9B zeigen den Zustand der Blockliste und der Abfolgeliste bei jeder Stufe des in eine Abfolge Bringens der Prozeduraufrufe für das Blockdiagramm aus Fig. 8 durch die erste Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens. Jede Reihe der Figur stellt eine Änderung des Zustands entweder des Blocklistenzeigers, der Blockliste oder der Abfolgeliste dar. Die Blockliste in Reihe 226 (Fig. 9A) ist dargestellt mit den Elementen C, D, A und B (in dieser Reihenfolge). Das BESCHRÄNKTE ABFOLGE Verfahren wird diese Liste aus einer beliebigen Reihenfolge von Elementen in der Blockliste in eine Abfolge bringen. Für jedes Element in der Blockliste besteht ein entsprechendes Element in der Netzliste als Darstellung der Eingangsliste, der Ausgangsliste, der Parameterliste und jeder anderen Information, die benötigt wird, um die Verbindung des Blocks in dem Blockdiagramm zu beschreiben.
- Der erste Schritt bei der Durchführung des BESCHRÄNKTEN ABFOLGE Verfahrens aus Fig. 5A bewegt den Blocklistenzeiger während Block 132 an den Anfang der Blockliste. Reihe 227 (Fig. 9A) zeigt den Zeiger an dem Anfang der Blockliste (an der Position gerade vor dem ersten Eintrag in der Liste). Bei Block 134 (Fig. 5A) wird die ENTFERNTES ELEMENT Variable auf "falsch" gesetzt. Während Block 136 wird die Blockliste untersucht, um festzustellen, ob noch Elemente zur Verarbeitung übrig sind. Es sind noch Elemente in der Blockliste übrig, insbesondere C, D, A und B, und die Verarbeitung wird bei Block 138 fortgesetzt. Bei Block 138 wird eine Abfrage durchgeführt, ob der Blocklistenzeiger am Ende des Blocks ist oder nicht. Der Zeiger ist noch am Anfang der Blockliste, wie in Reihe 227 in Fig. 9A dargestellt. Deshalb wird der Blocklistenzeiger bei Block 140, wie in Reihe 228 aus Fig. 9A gezeigt, zu dem nächsten Element in der Blockliste weiterbewegt. Bei Block 142 wird die Durchführungsliste von Element C analysiert (2146, Fig. 8B). Element C hat eine ALLE Durchführungseigenschaft, weil alle Eingänge in der Durchführungsliste von C die gleichen sind, wie alle Eingänge zu dem Block, und an dieser Stelle wird bei Block 143 das ALLE DURCHFÜHRUNGS Verfahren (Fig. 5B) betreten. Bei Block 146, Fig. 5B, wird eine Abfrage durchgeführt, ob alle Eingänge in der Durchführungsliste von C definiert sind. Insbesondere wird die Abfolgeliste überprüft, um festzustellen, ob I&sub4; von einem Fortschreibungsausgangsprozeduraufruf gesteuert wird, der in der Abfolgeliste vorhanden ist. An dieser Stelle der Verarbeitung sind keine Einträge in der Abfolgeliste, und deshalb ist Eingang I&sub4; (2146, Fig. 8B) in der Durchführungsliste von C undefiniert.
- Bei Block 147 kehrt die Verarbeitung zurück zu Block 136 (Fig. 5A), in dem eine Abfrage durchgeführt wird, ob Elemente in der Blockliste übrig sind. Es sind noch Elemente in der Blockliste übrig, so daß bei Block 138 eine Abfrage durchgeführt wird, ob der Zeiger am Ende der Blockliste ist. Der Zeiger ist nicht am Ende der Blockliste, und bei Block 140 wird der Zeiger zu dem nächsten Element der Blockliste, Element D, weiterbewegt (229, Fig. 9A). Bei Block 142 wird eine Überprüfung der Durchführungsliste für Element D (2148, Fig. 8B) durchgeführt, um seine Verzögerungseigenschaft zu bestimmen. Element D hat Eingang I&sub3; in seiner Durchführungsliste (2148, Fig. 8B), und es hat Eingang I&sub3; in seiner Eingangsliste, was bedeutet, daß alle Eingänge in der Eingangsliste die gleichen sind, wie alle Eingänge des Blocks, und deshalb ist Block D ein ALLE Durchführungstyp Block. Das ALLE DURCHFÜHREN Verfahren 143 wird bei Block 143 betreten.
- Während Block 146, Fig. 5B, wird eine Feststellung gemacht, daß der Eingang I&sub3; nicht definiert ist, weil zu diesem Zeitpunkt keine Fortschreibungsausgangsprozeduraufrufe in der Abfolgeliste sind, um Eingang I&sub3; zu steuern. Bei Block 145 kehrt die Verarbeitung zu Block 136 (Fig. 5A) zurück, der untersucht, ob Elemente in der Blockliste übrig sind oder nicht; es sind welche übrig. Bei Block 138 wird eine Feststellung gemacht, daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und während Block 140 wird der Netzlistenzeiger zu dem nächsten Element in der Blockliste, Element A, weiterbewegt (230, Fig. 9A). Bei Block 142 aus Fig. 5A wird die Durchführungsliste durchsucht, und es wird festgestellt, daß Element A ein alle Durchführungstyp ist, weil in der Eingangsliste (2134, Fig. 8A) von Element A keine Eingänge sind.
- Das ALLE DURCHFÜHREN Verfahren (Fig. 5B) wird aufgerufen, und bei Block 146 wird eine Abfrage durchgeführt, ob alle Eingänge zu dem Block definiert sind. Weil es keine Eingänge gibt, muß kein Eingang definiert werden, und deshalb wird bei Block 148 (232, Fig. 9A) der Fortschreibungsausgangsprozeduraufruf für Element A an die Abfolgeliste angefügt. Bei Block 150 aus Fig. 5B wird Element A aus der Blockliste entfernt (234, Fig. 9A). Bei Block 152 wird der Blocklistenzeiger zu dem vorangehenden Element in der Blockliste zurückbewegt (236, Fig. 9A). Bei Block 154 wird die ENTFERNTES ELEMENT Variable gleich "wahr" gesetzt, und die Verarbeitung kehrt bei Block 155 zu Block 136 (Fig. 5A) zurück. Bei Block 136 wird eine Abfrage durchgeführt, ob noch Elemente in der Blockliste übrig sind. Es sind noch Elemente in der Blockliste übrig, so daß bei Block 138 eine Abfrage durchgeführt wird, ob der Zeiger am Ende der Blockliste ist. Der Zeiger ist nicht am Ende der Blockliste, so daß bei Block 140 der Zeiger zu dem nächsten Element der Blockliste, Element B, weiterbewegt wird (238, Fig. 9A). Bei Block 142 aus Fig. 5A wird die Durchführungsliste von Element B analysiert, um seine Verzögerungseigenschaft zu bestimmen. Element B hat nur Eingang I&sub1; in seiner Durchführungsliste (2160, Fig. 8B). Element B hat Eingänge I&sub1; und I&sub2; in seiner Eingangsliste (2144, Fig. 8B). Deshalb kann dieser Block fortgeschrieben werden, wenn nur Eingang I&sub1; definiert ist. Während Block 142 aus Fig. 5A wird dieses Element als ein manche Durchführungselement eingestuft, und bei Block 145 wird das MANCHE DURCHFÜHREN Verfahren (Fig. 5C) betreten.
- Bei Block 156 in dem MANCHE DURCHFÜHREN Verfahren (Fig. 5C) wird eine Feststellung gemacht, daß der Fortschreibungsausgangsprozeduraufruf für dieses Element nicht in der Abfolgeliste (238, Fig. 9A) ist. Deshalb wird bei Block 158 eine Abfrage durchgeführt, ob alle Eingänge in der Durchführungsliste von B definiert sind. Element B hat Eingang I&sub1; (Fig. 8) in seiner Durchführungsliste (2144, Fig. 8B), und Eingang I&sub1; (Fig. 8) wird von einem Fortschreibungsausgangsprozeduraufruf gesteuert, der in der Abfolgeliste ist. Insbesondere ist der Fortschreibungsausgangsprozeduraufruf von A, der steuert, in der Abfolgeliste, und deshalb ist Eingang I&sub1; definiert. Bei Block 160 aus Fig. 5C wird der Fortschreibungsausgangsprozeduraufruf von B an die Abfolgeliste angehängt (240, Fig. 9A). Bei Block 164 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung kehrt bei Block 165 zurück zu Block 136 aus Fig. 5A. Bei Block 136 wird eine Feststellung gemacht, daß in der Blockliste noch Elemente übrig sind, und bei Block 138 wird eine Feststellung gemacht, daß der Blocklistenzeiger am Ende der Blockliste ist. Bei Block 144 wird eine Feststellung gemacht, daß die ENTFERNTES ELEMENT Variable nicht gleich "falsch" gesetzt ist. Die ENTFERNTES ELEMENT Variable wurde bei Block 164 (Fig. 5C) gerade auf "wahr" gesetzt, und deshalb wird die Verarbeitung bei Block 132 fortgesetzt. Falls das entfernte Element "falsch" wäre, würde die Verarbeitung zurückkehren und bei Block 144 würde ein Fehler zurückgegeben werden, der erläutert, daß die Blockliste für das Blockdiagramm aus Fig. 8 nicht in eine Abfolge bringbar ist. Bei Block 132 wird der Blocklistenzeiger an den Anfang der Blockliste (242, Fig. 9A) weiterbewegt. Bei Block 134 wird die ENTFERNTES ELEMENT Variable gleich "falsch" gesetzt, und bei Block 136 wird eine Feststellung gemacht, daß noch Elemente in der Blockliste übrig sind. Bei Block 138 wird eine Abfrage durchgeführt, daß der Blocklistenzeiger nicht auf das Ende der Blockliste zeigt, und bei Block 140 wird der Zeiger zu dem nächsten Element der Blockliste, Element C, weiterbewegt (244, Fig. 9A). Bei Block 142 wird die Verzögerungseigenschaft des Blocks untersucht, um festzustellen, ob er ein ALLE Durchführungstyp oder ein MANCHE Durchführungstyp ist. Element C ist ein ALLE Durchführungstyp (wie oben erläutert), und deshalb wird bei Block 143 das ALLE DURCHFÜHREN Verfahren (Fig. 5B) betreten.
- Bei Block 146 des ALLE DURCHFÜHREN Verfahrens werden die Eingänge in der Durchführungsliste analysiert, um festzustellen, ob sie definiert sind. Der einzige Eingang in der Durchführungsliste (2146, Fig. 8B) von C ist Eingang I&sub4;, und er ist definiert. Eingang I&sub4; wird von dem Fortschreibungsausgangsprozeduraufruf von Element B gesteuert, und er ist in der Abfolgeliste (244, Fig. 9A). Bei Block 148 (Fig. 5B) wird der Fortschreibungsausgangsprozeduraufruf für Element C in der Abfolgeliste (246, Fig. 9A) abgelegt. Dann wird bei Block 150 Element C aus der Blockliste entfernt (248, Fig. 9A). Der Blocklistenzeiger wird bei Block 152 zu dem vorangehenden Element zurückbewegt (250, Fig. 9B), und bei Block 154 wird die ENTFERNTES ELEMENT Variable gleich "wahr" gesetzt. Die Verarbeitung kehrt zu Block 136 aus Fig. 5A zurück, wo die Blockliste durchsucht wird, um zu sehen, ob Elemente in ihr sind. Es sind noch Elemente in der Blockliste, so daß bei Block 138 der Zeiger untersucht wird, um festzustellen, ob er am Ende der Blockliste ist. Der Zeiger ist nicht am Ende der Blockliste, und bei Block 140 wird der Zeiger zu dem nächsten Blocklistenelement, Element D, weiterbewegt (252, Fig. 9A). Die Verzögerungseigenschaft von Element D wird bei Block 142, Fig. 5A, untersucht. Element D ist ein ALLE Durchführungstyp Block, und bei Block 143 wird das ALLE DURCHFÜHREN Verfahren (Fig. 5B) betreten.
- Bei Block 146 des ALLE DURCHFÜHREN Verfahrens (Fig. 5B) wird festgestellt, daß der Eingang in der Durchführungsliste von D definiert ist, weil er von dem Fortschreibungsausgangsprozeduraufruf von Element B in der Abfolgeliste (252, Fig. 9B) gesteuert wird. Der Fortschreibungsausgangsprozeduraufruf für Element D wird bei Block 148 an die Abfolgeliste angefügt (254, Fig. 9B). Element D wird bei Block 150 aus der Blockliste entfernt (256, Fig. 9B). Der Blocklistenzeiger wird bei Block 152 zurückbewegt, um auf das vorangehende Element der Blockliste zu zeigen (258, Fig. 9B). Bei Block 154 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung kehrt bei Block 155 zu Block 136 aus Fig. 5A zurück. Bei Block 136 wird eine Abfrage durchgeführt, ob Elemente in der Blockliste übrig sind. Element B ist noch in der Blockliste übrig, und bei Block 138 wird der Netzlistenzeiger untersucht, um festzustellen, ob er auf das Ende der Blockliste zeigt. Der Blocklistenzeiger ist gegenwärtig am Anfang der Blockliste. Bei Block 140 wird der Zeiger zu dem nächsten Netzlistenelement weiterbewegt, das das letzte Netzlistenelement ist, Element B (260, Fig. 9B). Bei Block 142 wird festgestellt, daß Element B eine MANCHE Durchführungseigenschaft hat, und das MANCHE DURCHFÜHREN Verfahren 145 (Fig. 5C) wird betreten. Bei Block 156 aus Fig. 5C wird festgestellt, daß der Fortschreibungsprozeduraufruf von Element B früher an die Abfolgeliste angefügt worden ist. Während Block 166 werden alle Eingänge in der Eingangsliste von Element B untersucht, um festzustellen, ob Eingänge definiert sind. Die Eingangsliste von Element B enthält Eingang I&sub1; und Eingang I&sub2; (2144, Fig. 8B). Eingang I&sub1; wird von dem Fortschreibungsausgangsprozeduraufruf von A gesteuert, der in der Abfolgeliste erscheint, und Eingang I&sub2; wird von dem Fortschreibungsprozeduraufruf von Element C gesteuert, der auch in der Abfolgeliste erscheint. Der Fortschreibungszustandsprozeduraufruf für dieses Element wird bei Block 168 an die Abfolgeliste angefügt (262, Fig. 9B); bei Block 170 wird das Element aus der Blockliste entfernt (263, Fig. 9B). Bei Block 172 wird der Zeiger zu dem vorangehenden Element in der Blockliste zurückbewegt (263, Fig. 9B). Die ENTFERNTES ELEMENT Variable wird bei Block 174 auf "wahr" gesetzt, und die Verarbeitung kehrt bei Block 175 zu Block 136 aus Fig. 5A zurück. Bei Block 136 wird festgestellt, daß keine Elemente in der Blockliste übrig sind, und deshalb kehrt die erste Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens bei Block 137 zurück.
- Die nachfolgenden Prozeduraufrufe sind in der Abfolgeliste vorhanden: A(UO), B(UO), C(UO), D(UO) und B(US) (263, Fig. 9B). Diese Abfolge mit Prozeduraufrufen stellt sicher, daß die Eingangsdaten zu jeder der Prozeduren definiert sind, und daß deshalb, wenn sie in der dargestellten Reihenfolge ausgeführt werden, eine Simulation des Blockdiagramms aus Fig. 8 korrekt durchgeführt wird.
- Das BESCHRÄNKTE ABFOLGE Verfahren hat die Blockliste mit Elementen für das Blockdiagramm, das in Fig. 8 dargestellt ist, erfolgreich in eine Abfolge gebracht. Bei diesem Beispiel wurde der Fortschreibungsausgangsprozeduraufruf von Block B (212, Fig. 8) in der Abfolgeliste abgelegt, wenn der Eingang I&sub1; von dem Fortschreibungsausgangsprozeduraufruf für Block A gesteuert wurde. Falls allerdings die Durchführungsliste für Element B nur Eingang I&sub2; enthielte, könnte das in Fig. 8 dargestellte Blockdiagramm nicht von dem BESCHRÄNKTEN ABFOLGE Verfahren in eine Abfolge gebracht werden. Das ist deshalb so, weil Eingang I&sub2; nicht von dem Fortschreibungsausgangsprozeduraufruf von Element C gesteuert werden wird, bis Element C einen definierten Eingang I&sub4; hat. Element C wird keinen definierten Eingang I&sub4; haben, bis der Fortschreibungsausgangsprozeduraufruf für Ausgang O&sub1; von Element B in der Abfolgeliste ist. Der Fortschreibungsausgangsprozeduraufruf für O&sub1; des Elements B wird nicht in der Abfolgeliste abgelegt sein, bis sein Eingang I&sub2;, der die Durchführungsliste von Element B ist, von dem Fortschreibungsausgangsprozeduraufruf für Element C gesteuert wird. Deshalb können weder Element C noch B in der Abfolgeliste abgelegt werden. Dieses Dilemma kann mit der ersten Ausführungsform des BESCHRÄNKTREN ABFOLGE Verfahrens niemals gelöst werden, und deshalb wird Fig. 8C nicht in eine Abfolge bringbar sein.
- Das Nachfolgende ist eine ausführlichere Erläuterung der ersten Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens, die zeigt, daß es Fig. 8C nicht in eine Abfolge bringen kann, wenn Element B nur Eingang I&sub2; in seiner Durchführungsliste hat.
- Bezugnehmend auf die Fig. 5A, B und C, Fig. 8C, 8D und 8E, Fig. 9A und Fig. 10 wird angenommen, daß die generierte Netzliste die gleiche Netzliste ist, die für Fig. 9 generiert wurde. Insbesondere ist die Netzliste, die in Fig. 8A gezeigt wird, identisch mit der Netzliste, die in Fig. 8D gezeigt wird. Die Bibliothekselemente als Darstellung von jedem Block sind auch die gleichen mit Ausnahme der Durchführungsliste für Element B (2160, Fig. 8E). Die Durchführungsliste für Element B hat Eingang I&sub2; (2160, Fig. 8E) anstatt Eingang I&sub1; (2144, Fig. 8B). Die Reihenfolge der Blockliste ist noch C, D, A und B. Die Überprüfung der Blockliste für die Elemente C, D und A ist genau die gleiche wie in unserem ursprünglichen Beispiel. Die Elemente C, D und A haben die gleichen Eingänge und Ausgänge und Durchführungslisten wie vorher. Deshalb hat sich die Analyse dieser Blöcke nicht verändert. Tatsächlich würden die Reihen 226 bis 238 aus Fig. 9A in diesem Beispiel auch auftreten (267, Fig. 10). Wenn allerdings das BESCHRÄNKTE ABFOLGE Verfahren anfängt, bei Block 142 aus Fig. 5A Element B zu untersuchen, fangen Probleme an aufzutreten. Während Block 142 aus Fig. 5A wird festgestellt, daß Element B ein manche Durchführungsblock ist, so daß bei 145 das MANCHE DURCHFÜHREN Verfahren betreten wird. Bei Block 156 aus Fig. 5C wird festgestellt, daß der Fortschreibungsausgangsprozeduraufruf für Element B nicht in der Abfolgeliste ist (238, Fig. 9A). Bei Block 158 wird eine Abfrage durchgeführt, ob alle Eingänge in der Durchführungsliste von Element B definiert sind. Element B hat Eingang I&sub2; in seiner Durchführungsliste (2160, Fig. 8B) und wird gegenwärtig nicht von einem Fortschreibungsausgangsprozeduraufruf in der Abfolgeliste gesteuert. Bei Block 159 kehrt die Verarbeitung zu Block 136 aus Fig. 5A zurück, wo die Elemente der Blockliste untersucht werden, um festzustellen, ob welche übrig sind. An dieser Stelle der Verarbeitung verbleiben die Elemente C, D und B noch in der Blockliste, und deshalb wird bei Block 138 eine Abfrage durchgeführt, ob der Blocklistenzeiger am Ende der Blockliste ist. Der Blocklistenzeiger ist gegenwärtig am Ende der Blockliste; er zeigt auf Element B. Bei Block 144 wird festgestellt, daß die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt ist, und die Verarbeitung wird bei Block 132 fortgesetzt. Der Blocklistenzeiger wird an den Anfang der Blockliste (268, Fig. 10) bewegt, und die ENTFERNTES ELEMENT Variable wird bei Block 134 gleich "falsch" gesetzt. Bei Block 136 wird eine Abfrage durchgeführt, ob noch Elemente in der Blockliste übrig sind (C, D und B), und bei Block 138 wird eine Abfrage durchgeführt, ob der Blocklistenzeiger nicht am Ende der Blockliste ist. Block 140 bewegt den Blocklistenzeiger weiter zu dem nächsten Blocklistenelement, Element C (269, Fig. 10). Bei Block 142 wird festgestellt, daß Element C ein ALLE Durchführungsblock ist und bei Block 143 wird das ALLE DURCHFÜHREN Verfahren betreten.
- Während Block 146 des ALLE DURCHFÜHREN Verfahrens (Fig. 5B) wird eine Feststellung gemacht, daß die Eingänge in der Durchführungsliste von Element C nicht definiert sind, und bei Block 147 kehrt die Verarbeitung zu Block 136 aus Fig. 5A. Während Block 136 wird festgestellt, daß in der Blockliste noch Elemente übrig sind, und bei Block 138 wird festgestellt, daß der Blocklistenzeiger nicht am Ende der Blockliste ist. Bei Block 140, wird der Netzlistenzeiger zu dem nächsten Blocklistenelement, Element D, weiterbewegt (270, Fig. 10). Bei Block 142 wird festgestellt, daß Element D ein ALLE Durchführungstyp Block ist, und bei Block 143 wird das ALLE DURCHFÜHREN Verfahren betreten. Bei Block 146 aus Fig. 5B wird festgestellt, daß die Eingänge in der Durchführungsliste von Element D nicht definiert sind, und bei Block 145 kehrt die Verarbeitung zu Block 136 aus Fig. 5A zurück. Während Block 136 wird festgestellt, daß in der Blockliste noch Elemente übrig sind, und bei Block 138 wird festgestellt, daß der Blocklistenzeiger nicht am Ende der Blockliste ist. Bei Block 140 wird der Zeiger zu dem nächsten Element in der Blockliste, Element B, weiterbewegt (272, Fig. 10). Bei Block 142 wird Element B analysiert, und es wird festgestellt, daß es ein MANCHE Durchführungsblock ist.
- Das MANCHE DURCHFÜHREN Verfahren wird bei Block 145 betreten, und bei Block 156 aus Fig. 5C wird festgestellt, daß der Fortschreibungsausgangsprozeduraufruf von Element B nicht in der Abfolgeliste abgelegt worden ist. Bei Block 158 wird eine Feststellung gemacht, daß die Eingänge (I&sub2;) in der Durchführungsliste von Element B nicht definiert sind; Eingang I&sub2; (Fig. 8A) wird von dem Fortschreibungsausgangsprozeduraufruf von C gesteuert, der nicht an die Abfolgeliste angefügt worden ist. Die Verarbeitung kehrt zu Block 136 aus Fig. 5A zurück, während dem festgestellt wird, daß in der Abfolgeliste noch Elemente übrig sind. Bei Block 138 wird festgestellt, daß der Blocklistenzeiger auf das Ende der Blockliste zeigt, und bei Block 144 wird die ENTFERNTES ELEMENT Variable überprüft, um festzustellen, ob sie gleich "falsch" ist. Die ENTFERNTES ELEMENT Variable ist gleich "falsch", und deshalb wird bei Block 147 eine Meldung an das aufrufende Programm ausgegeben, daß das Blockdiagramm nicht in eine Abfolge bringbar ist (274, Fig. 10).
- Die "Beschränkung" für das BESCHRÄNKTE ABFOLGE Verfahren (Fig. 5A, B und C) ist die, daß nur eine Durchführungsliste pro Block vorgesehen werden kann. Mit anderen Worten muß jede Ausgangsprozedur, unter der Annahme, daß es mehr als eine für einen bestimmten Block gibt, von der gleichen Durchführungsliste abhängig sein. Das oben angesprochene Dilemma tritt auf, weil die Ausgangsprozedur, die dem Ausgang O&sub1; zugeordnet ist, nicht ausgeführt werden kann, bis der Eingang in der Durchführungsliste Daten definiert hat. Daraus wurde geschlossen, daß das BESCHRÄNKTE ABFOLGE Verfahren nicht verwendet werden kann, um Eingang I&sub2;, einen Eingang in der Rückkopplungsschleife aus Fig. 8, zu definieren. Eine Lösung dieses Dilemmas wäre es, zusätzliche Durchführungslisten hinzuzufügen, die jedem Ausgang in einem bestimmten Block entsprechen. Jede Durchführungliste wird eine taste mit den Eingängen umfassen, die nur den Ausgang unmittelbar beeinflussen, der der Durchführungsliste zugeordnet ist. Indem mehrfache Durchführungslisten für jeden Block vorgesehen werden, hat der Block effizienterweise mehrere Verzögerungseigenschaften. Auf diese Weise können verschiedene Ausgänge des Blocks zu bestimmten Ausführungsstufen ausgeführt werden, abhängig davon, welche Eingänge zu dem Block in den entsprechenden Durchführungslisten definiert sind.
- Bezugnehmend auf die Fig. 11A, B, C und D wird nun die erste Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens erläutert. Das ALLGEMEINE ABFOLGE Verfahren verarbeitet Blöcke, die eine Durchführungsliste haben, die jedem Ausgang eines Blocks zugeordnet ist, anstatt nur einer Durchführungsliste für alle Ausgänge des Blocks. Die Analyse der MANCHE Durchführungstyp Elemente variiert derart, daß die Durchführungslisten - eine für jeden Ausgang - analysiert werden anstatt nur einer Durchführungsliste für den Block.
- Fig. 11A stellt die allgemeine Aufrufroutine für das ALLGEMEINE ABFOLGE Verfahren dar, die identisch ist mit der Aufrufroutine des BESCHRÄNKTEN ABFOLGE Verfahrens aus Fig. 5A. Zusätzlich ist das ALLE DURCHFÜHREN Verfahren in Fig. 11B für das ALLGEMEINE ABFOLGE Verfahren genau das gleiche wie das ALLE DURCHFÜHREN Verfahren in dem BESCHRÄNKTEN ABFOLGE Verfahren aus Fig. 5B. Der Unterschied zwischen dem BESCHRÄNKTEN ABFOLGE Verfahren und dem ALLGEMEINEN ABFOLGE Verfahren tritt in den Fig. 11C und 11D auf. Diese Figuren stellen das MANCHE DURCHFÜHREN Verfahren des ALLGEMEINEN ABFOLGE Verfahrens dar, das die Analyse der mehrfachen Durchführungslisten ausführt, die den Ausgängen für einen bestimmten Block entsprechen, anstatt nur einer Durchführungsliste für den Block im Fall des BESCHRÄNKTEN ABFOLGE Verfahrens aus den Fig. 5A, B und C.
- Unter der Annahme, daß das ALLGEMEINE ABFOLGE Verfahren bei Block 278, Fig. 11A, aufgerufen wird, wird der Blocklistenzeiger bei Block 278 an den Anfang der Blockliste bewegt, und die ENTFERNTES ELEMENT Variable wird bei Block 280 auf "falsch" gesetzt. Wie im Fall des BESCHRÄNKTEN ABFOLGE Verfahrens wird bei Block 282 eine Abfrage durchgeführt, ob in der Blockliste Elemente übrig sind oder nicht, und bei Block 284 wird eine Abfrage durchgeführt, ob der Blocklistenzeiger am Ende der Blockliste ist oder nicht. Während Block 286 wird der Netzlistenzeiger zu dem nächsten Blocklistenelement weiterbewegt, und bei Block 288 wird die Verzögerungseigenschaft des bestimmten Elements, das gerade analysiert wird, festgestellt. An dieser Stelle wird, falls die Verzögerungseigenschaft des bestimmten Elements, das analysiert wird, ein alle Durchführungstyp ist, bei Block 302 das ALLE DURCHFÜHREN Verfahren (Fig. 11B) betreten. Falls der Verzögerungstyp allerdings ein MANCHE Durchführungstyp ist, wird bei Block 303 das MANCHE DURCHFÜHREN Verfahren betreten (Fig. 11C).
- Das ALLGEMEINE DURCHFÜHREN Verfahren verfolgt, welche Durchführungsliste von welchem Element zuletzt analysiert wird, indem eine Ausgangsliste geführt wird, die dem Element zugeordnet ist und die auf den Ausgang zeigt, dessen Durchführungsliste gegenwärtig analysiert wird. Die Ausgangsliste wird entweder von der Netzliste oder der Bibliothek erhalten.
- Bei Block 322 aus Fig. 11C wird die Ausgangsliste des Elements untersucht, um zu sehen, ob sie Ausgänge oder Elemente enthält. Falls die Ausgangsliste nicht leer ist, wird bei Block 324 eine neuer Zeiger initialisiert, der auf den Anfang der Ausgangsliste zeigt.
- Bei Block 326 wird er Zeiger untersucht, um festzustellen, ob er am Ende der Ausgangsliste ist. Falls der Zeiger am Ende der Ausgangsliste ist, kehrt die Verarbeitung bei Block 327 zu Block 282 aus Fig. 11A zurück. Falls der Zeiger allerdings nicht am Ende der Ausgangsliste ist, wird der Zeiger bei Block 328 zu dem nächsten Ausgangslistenelement weiterbewegt. Bei Block 330 werden alle Eingänge in der Durchführungsliste, die diesem bestimmten Ausgang zugeordnet sind, untersucht, um festzustellen, ob sie definiert sind. Die Prozedur zum Feststellen, ob der Ausgang definiert ist oder nicht, ist die gleiche wie die Prozedur für das BESCHRÄNKTE ABFOLGE Verfahren. Ein Eingang ist definiert, falls er von einem Fortschreibungsausgangsprozeduraufruf gesteuert wird, der in der Abfolgeliste ist. Falls alle Eingänge in der bestimmten Durchführungsliste nicht definiert sind, wird bei Block 326 eine Abfrage durchgeführt, ob der Ausgangslistenzeiger auf das Ende der Liste zeigt oder nicht. Unter der Annahme, daß der Ausgangslistenzeiger nicht auf das Ende der Liste zeigt, wird der Zeiger bei Block 328 zu dem nächsten Ausgangslistenelement weiterbewegt. Die Durchführungsliste für dieses Elements wird untersucht, um festzustellen, ob die Eingänge in seiner Durchführungsliste definiert sind. Unter der Annahme, daß die Eingänge in der Durchführungsliste definiert sind, wird der Fortschreibungsausgangsprozeduraufruf, der dem bestimmten Ausgang zugeordnet ist, an die Abfolgeliste angefügt. Bei Block 344 (Fig. 11D) wird der Ausgang, dessen Durchführungsliste analysiert wurde, aus der Ausgangsliste entfernt, und bei Block 346 wird der Ausgangslistenzeiger zu dem vorangehenden Ausgang in der Ausgangsliste bewegt. Bei Block 348 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung wird bei Block 326 aus Fig. 11C fortgesetzt, bei dem eine Abfrage durchgeführt wird, ob der Zeiger der Ausgangsliste auf das Ende der Liste zeigt. Dieser Schritt wird ausgeführt, um festzustellen, ob alle Durchführungslisten, die jedem Ausgang zugeordnet sind, für den Block analysiert worden sind. Falls alle Durchführungslisten, die jedem Ausgang eines bestimmten Blocks zugeordnet sind, analysiert worden sind, kehrt die Verarbeitung bei Block 327 zu dem aufrufenden Teil des ALLGEMEINEN ABFOLGE Verfahrens zu Block 282 aus Fig. 11A zurück.
- Falls keine Ausgänge in der Ausgangsliste für dieses Element übrig sind, wird wieder bezugnehmend auf Block 322 aus Fig. 11C bei Block 234 eine Abfrage durchgeführt, ob alle Eingänge in der Eingangsliste definiert sind. Falls die Eingänge in der Eingangsliste nicht alle definiert sind, kehrt die Verarbeitung zu dem aufrufenden Teil des ALLGEMEINEN ABFOLGE Verfahrens bei Block 282 aus Fig. 11A zurück. Unter der Annahme, daß alle Eingänge in der Eingangsliste definiert sind, wird bei Block 336 die Fortschreibungszustandsprozedur für diesen Block an die Abfolgeliste angehängt. Bei Block 338 wird dieses Element aus der Blockliste entfernt, und bei Block 340 wird der Blocklistenzeiger bewegt, um auf das vorangehende Element in der Blockliste zu zeigen. Bei Block 342 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung kehrt zu dem aufrufenden Teil des ALLGEMEINEN ABFOLGE Verfahrens bei Block 282 aus Fig. 11A zurück.
- Nunmehr bezugnehmend auf Fig. 8A, 11A, 11B, 11C, 11D, 12A, 12B, 12C und 12D, 13, 13A und 13B wird nun eine ausführliche Beschreibung eines Beispiels der ersten Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens erläutert. In Fig. 10 wurde gezeigt, daß das BESCHRÄNKTE ABFOLGE Verfahren scheiterte, das Blockdiagramm aus Fig. 8A in eine Abfolge zu bringen, weil Element B eine Durchführungsliste nur mit Eingang I&sub2; hatte.
- Die erste Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens hilft dieser Situation ab, indem eine getrennte Durchführungsliste für jeden Ausgang des Blocks zur Verfügung gestellt wird. Es wird angenommen, daß die Blockliste, die für dieses Beispiel generiert wurde, die gleiche zufällig geordnete Blockliste ist. Insbesondere ist die Blockliste C, D, A und B (350, Fig. 12A). Das ALLGEMEINE ABFOLGE Verfahren erfordert eine Ausgangsliste zumindest für diejenigen Elemente, die als manche Durchführungselemente eingestuft sind.
- Die Fig. 12A, B, C und D sind Tabellen von Zwischenergebnissen, die vorgesehen sind, um Änderungen in den Zuständen des Blocklistenzeigers, der Blockliste, des Ausgangslistenzeigers, der Ausgangsliste und der Abfolgeliste darzustellen.
- Fig. 13 ist ein geringfügig überarbeitetes Diagramm aus Fig. 8A. Fig. 13A ist die Netzliste für Fig. 13, die identisch ist mit der Netzliste aus Fig. 8D. Zusätzlich ist Fig. 13B der Inhalt des BIBLIOTHEK SPEICHERS für das Blockdiagramm aus Fig. 13, der der gleiche ist wie der BIBLIOTHEK SPEICHER aus Fig. 8C, außer daß Element B eine zusätz liche Durchführungsliste hat, "keine (O&sub1;)", die dem Ausgang O&sub1; zugeordnet ist (2176, Fig. 13B). Ausgang O&sub1; hat eine LEERE Durchführungsliste ("keine (O&sub1;)"), und Ausgang O&sub2; hat eine Durchführungsliste nur mit Eingang I&sub2; darin (2176, Fig. 13B). Elemente C und D sind ALLE Durchführungstyp Blöcke, wie sie es in Fig. 8 waren. Ebenso ist Element A ein manche Durchführungstyp, wie es in Fig. 8 war.
- Das Verfahren der ALLGEMEINEN ABFOLGE (Fig. 11), das die Prozeduraufrufe als Darstellung aus Fig. 13A in eine Abfolge bringt, wird nun ausführlich erläutert. Bei Block 278 wird der Blocklistenzeiger an den Anfang der Blockliste bewegt, wie bei 352 in Fig. 12A gezeigt. Bei Block 280 aus Fig. 11A wird die ENTFERNTES ELEMENT Variable auf "falsch" gesetzt, und bei Block 282 wird eine Abfrage durchgeführt, ob in der Blockliste noch Elemente übrig sind. Im einzelnen hat die Blockliste noch die Elemente C, D, A und B darin. Bei Block 284 wird festgestellt, daß der Netzlistenzeiger nicht am Ende der Blockliste ist, und deshalb wird der Zeiger bei Block 286 zu dem nächsten Blocklistenelement, Element C, weiterbewegt (354, Fig. 12A). Bei Block 288 aus Fig. 11A werden die Durchführungsliste und die Eingangsliste (2178, Fig. 13B) für Element C analysiert, und es wird festgestellt, daß die Verzögerungseigenschaft von Element C ein ALLE Durchführungstyp ist, und deshalb wird bei Block 302 das ALLE DURCHFÜHREN Verfahren (Fig. 11B) aufgerufen. Element C ist ein ALLE Durchführungstyp, weil alle Eingänge in seiner Eingangsliste in seiner Durchführungsliste sind. Bei Block 310 aus Fig. 11B werden die Eingänge in der Durchführungsliste von Element untersucht, und es wird festgestellt, daß sie nicht definiert sind, weil kein Fortschreibungsausgangsprozeduraufruf in der Abfolgeliste abgelegt worden ist. Die Verarbeitung kehrt bei Block 311 zu Block 282 aus Fig. 11A zurück, um festzustellen, ob in der Blockliste noch Elemente übrig sind oder nicht. In der Blockliste sind noch Elemente übrig, so daß die Verarbeitung bei Block 284 fortgesetzt wird, um festzustellen, ob der Blocklistenzeiger am Ende der Blockliste ist oder nicht. Der Blocklistenzeiger ist nicht am Ende der Blockliste, so daß bei Block 286 der Blocklistenzeiger zu dem nächsten Element in der Blockliste, Element D, weiterbewegt wird (356, Fig. 12A). Bei Block 288 werden die Durchführungsliste und die Eingangsliste (2180, Fig. 13B) für Element D untersucht, und es wird festgestellt, daß Element D ein ALLE Durchführungstyp ist, und deshalb wird bei Block 302 das ALLE DURCHFÜHREN Verfahren (Fig. 11B) betreten.
- Bei Block 310 des ALLE DURCHFÜHREN Verfahrens aus Fig. 11B wird festgestellt, daß alle Eingänge in der Durchführungsliste von Element D nicht definiert sind, so daß die Verarbeitung bei Block 311 zu Block 282 aus Fig. 11A zurückkehrt. Bei Block 282 wird festgestellt, daß noch Elemente in der Blockliste sind, und bei Block 284 wird festgestellt, daß der Blocklistenzeiger nicht am Ende der Blockliste ist. Bei Block 286 wird der Blocklistenzeiger zu dem nächsten Element, Element A, weiterbewegt (358, Fig. 12A). Während Block 288 wird festgestellt, daß die Verzögerungseigenschaft für Element A ein ALLE DURCHFÜHRUNGS Typ ist, weil keine Eingänge in seiner Eingangsliste sind (Element A hat eine LEERE Durchführungsliste, 2174, Fig. 13B), und das ALLE DURCHFÜHREN Verfahren (Fig. 11B) wird betreten.
- Bei Block 310 wird festgestellt, daß keine Eingänge in der Durchführungsliste von A sind, und deshalb benötigt Element A keine definierten Eingänge. Bei Block 312 wird der Fortschreibungsausgangsprozeduraufruf von A an die Abfolgeliste angefügt (358, Fig. 12A). Bei Block 314 wird Element A aus der Blockliste entfernt (362, Fig. 12A), und bei Block 316 wird der Blocklistenzeiger zu dem vorangehenden Element in der Blockliste, Element D, bewegt (364, Fig. 12A). Die ENTFERNTES ELEMENT Variable wird bei Block 318 gleich "wahr" gesetzt, und die Verarbeitung wird bei Block 282 in Fig. 11A fortgesetzt. Bei Block 282 wird festgestellt, daß noch Elemente in der Blockliste übrig sind, und bei Block 284 wird festgestellt, daß der Blocklistenzeiger nicht am Ende der Blockliste ist. Bei Block 286 wird der Netzlistenzeiger zu dem nächsten Element in der Blockliste, Element B, weiterbewegt (368, Fig. 12A). Bei Block 288 wird festgestellt, daß Element B ein manche Durchführungstyp ist, und das MANCHE DURCHFÜHREN Verfahren wird bei Block 303 aufgerufen.
- Bei Block 322 des MANCHE DURCHFÜHREN Verfahrens (Fig. 11C) wird festgestellt, daß noch Ausgänge in der Ausgangsliste für Element B sind. Insbesondere verbleiben noch Ausgang O&sub1; und Ausgang O&sub2; (2176, Fig. 13B). Bei Block 324 wird der Ausgangslistenzeiger an den Anfang der Ausgangsliste bewegt (370, Fig. 12B), und bei Block 326 wird festgestellt, daß der Ausgangslistenzeiger nicht am Ende der Ausgangsliste ist. Bei Block 328 wird der Ausgangslistenzeiger zu dem nächsten Ausgangslistenelement weiterbewegt, das Ausgang O&sub1; ist (372, Fig. 12B). Während Block 330 wird eine Feststellung gemacht, daß alle Eingänge in der Durchführungsliste, die dem Ausgang O&sub1; zugeordnet sind, definiert sind. Die Durchführungsliste von Ausgang O&sub1; ist eine LEERE Durchführungsliste, und erfordert deshalb keine Eingänge, die definiert werden müssen, bevor der Ausgangsprozeduraufruf von Element B für Ausgang O&sub1; an die Abfolgeliste angefügt werden kann. Deshalb wird bei Block 332 der Ausgangsprozeduraufruf von Element B für Ausgang O&sub1; an die Abfolgeliste angefügt (374, Fig. 12B). Ausgang O&sub1; wird bei Block 344 aus der Ausgangsliste entfernt (376, Fig. 12B), und bei Block 346 wird der Ausgangslistenzeiger bewegt, um auf das vorangehende Element in der Ausgangsliste zu zeigen (378, Fig. 12B). Bei Block 348 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung kehrt zu Block 326 in Fig. 11C zurück, während dem festgestellt wird, daß der Ausgangslistenzeiger nicht am Ende der Ausgangsliste ist. Der Ausgangslistenzeiger ist am Anfang der Ausgangsliste, so daß bei Block 328 der Ausgangslistenzeiger zu dem nächsten Ausgangslistenelement weiterbewegt wird, das Ausgang O&sub2; ist (380, Fig. 12B). Bei Block 330 wird eine Abfrage durchgeführt, ob alle Eingänge in der Durchführungsliste von Ausgang O&sub2; definiert sind. Die Durchführungsliste von Ausgang O&sub2; enthält Eingang I&sub2; (2176, Fig. 13B), der von dem Fortschreibungsausgangsprozeduraufruf von Element C gesteuert wird, der nicht in der Abfolgeliste ist, und deshalb ist I&sub2; nicht definiert. Bei Block 326 wird festgestellt, daß der Ausgangslistenzeiger am Ende der Ausgangsliste ist, und die Verarbeitung kehrt bei Block 327 zu Block 282 aus Fig. 11A zurück.
- Während Block 282 wird eine Feststellung gemacht, daß noch Element in der Blockliste sind, insbesondere C, D und B. Bei Block 284 wird festgestellt, daß der Blocklistenzeiger am Ende der Blockliste ist (380, Fig. 12B), und bei Block 300 wird die ENTFERNTES ELEMENT Variable überprüft, um festzustellen, ob sie "wahr" oder "falsch" ist. Die ENTFERNTES ELEMENT Variable wurde bei Block 348 gleich "wahr" gesetzt, und deshalb wird der Blocklistenzeiger bei Block 278 an den Anfang der Blockliste zurückbewegt (382, Fig. 12B). Bei Block 289 wird die ENTFERNTES ELEMENT Variable auf "falsch" gesetzt, und bei Block 282 wird eine Feststellung gemacht, daß noch Element in der Blockliste übrig sind. Während Block 284 wird festgestellt, daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und bei Block 286 wird der Blocklistenzeiger auf das nächste Element in der Blockliste, Element C, weiterbewegt (384, Fig. 12B). Bei Block 288 wird festgestellt, daß die Verzögerungseigenschaft von Element C ein ALLE DURCHFÜHRUNGS Typ ist, und das ALLE DURCHFÜHREN Verfahren (Fig. 11B) wird bei Block 302 betreten.
- Bei Block 310 des ALLE DURCHFÜHREN Verfahrens aus Fig. 11B wird festgestellt, daß die Eingänge in der Durchführungsliste (2178, Fig. 13B) von Element C definiert sind. Element C hat Eingang I&sub4; in seiner Durchführungsliste, der von dem Fortschreibungsausgangsprozeduraufruf für den Ausgang O&sub1; von Element B gesteuert wird, der in der Abfolgeliste erscheint. Deshalb wird bei Block 312 aus Fig. 11B der Fortschreibungsausgangsprozeduraufruf von Element C an die Abfolgeliste angefügt (386, Fig. 12B). Block 314 entfernt das Element C aus der Blockliste (388, Fig. 12B), und der Blocklistenzeiger wird zurückbewegt, um auf das vorangehende Element in der Blockliste zu zeigen (390, Fig. 12C). Bei Block 318 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung kehrt bei Block 319 zu Block 282 aus Fig. 11A zurück.
- Bei Block 282 wird eine Feststellung gemacht, daß noch Elemente in der Blockliste sind, insbesondere D und B (390, Fig. 12C), und während Block 284 wird festgestellt, daß der Netzlistenzeiger nicht am Ende der Blockliste ist. Bei Block 286 wird der Blocklistenzeiger zu dem nächsten Element in der Blockliste, Element D, weiterbewegt (392, Fig. 12C). Bei Block 288 wird festgestellt, daß die Verzögerungseigenschaft von Element D ein ALLE DURCHFÜHRUNGS Typ ist, und deshalb wird bei Block 302 das ALLE DURCHFÜHREN Verfahren betreten.
- Bei Block 310 des ALLE DURCHFÜHREN Verfahrens aus Fig. 11B wird eine Feststellung gemacht, daß die Eingänge in der Durchführungsliste von D nicht definiert sind. Element D hat Eingang I&sub3; in seiner Durchführungsliste (2180, Fig. 13B). Eingang I&sub3; wird definiert werden, wenn die Fortschreibungsausgangsprozedur von Element B für Ausgang O&sub2; (2180, Fig. 13B) fortgeschrieben wird. Zu diesem Zeitpunkt wurde der O&sub2; zugeordnete Fortschreibungsausgangsprozeduraufruf von Element B nicht an der Abfolgeliste angefügt (392, Fig. 12C), und deshalb kann der Fortschreibungsausgangsprozeduraufruf von Element D nicht an der Abfolgeliste angefügt werden. Die Verarbeitung kehrt bei Block 311 zu Block 282 aus Fig. 11A zurück, während dem festgestellt wird, daß noch Elemente in der Blockliste sind.
- Bei Block 284 wird festgestellt, daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und bei Block 286 wird der Blocklistenzeiger zu dem nächsten Element in der Blockliste, Element B, weiterbewegt (400, Fig. 12C). Element B ist ein MANCHE DURCHFÜHRUNGS Typ, und bei Block 288 wird das MANCHE DURCHFÜHREN Verfahren (Fig. 11C) betreten. Bei Block 322 des MANCHE DURCHFÜHREN Verfahrens aus Fig. 11C wird eine Feststellung gemacht, daß in der Ausgangsliste von Element B noch ein Ausgang übrig ist. Insbesondere Ausgang O&sub2; verbleibt in der Ausgangsliste von Element B. Bei Block 324 wird der Ausgangslistenzeiger an den Anfang der Ausgangsliste bewegt (402, Fig. 12C), und bei Block 326 wird eine Feststellung gemacht, daß der Ausgangslistenzeiger nicht am Ende der Ausgangsliste ist. Während Block 328 wird der Ausgangszeiger zu dem nächsten Ausgang in der Ausgangsliste von B, Ausgang O&sub2;, weiterbewegt. Bei Block 330 wird festgestellt, daß Eingang I&sub2; in der Durchführungsliste von Ausgang O&sub2; definiert ist. Eingang I&sub2; wird von dem Fortschreibungsausgangsprozeduraufruf von Element C gesteuert, der in der Abfolgeliste ist, und deshalb ist Eingang I&sub2; definiert. Bei Block 332 (Fig. 11C) wird der Fortschreibungsausgangsprozeduraufruf, der Ausgang O&sub2; von Element B zugeordnet ist, in der Abfolgeliste abgelegt (406, Fig. 12C), und bei Block 344 (Fig. 11D) wird Ausgang O&sub2; aus der Ausgangsliste von Element B entfernt (408, Fig. 12C). Bei Block 348 (Fig. 11D) wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt, und die Verarbeitung kehrt zu Block 326 aus Fig. 11C zurück. Bei Block 326 wird festgestellt, daß der Ausgangslistenzeiger am Ende der Ausgangsliste ist, und deshalb kehrt die Verarbeitung bei Block 327 zu Block 282 aus Fig. 11A zurück.
- Während Block 282 aus Fig. 11A wird festgestellt, daß noch Elemente in der Blockliste sind, insbesondere die Elemente D und B. Bei Block 284 wird festgestellt, daß der Blocklistenzeiger am Ende der Blockliste ist, und bei Block 300 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt. Während Block 278 wird der Blocklistenzeiger an den Anfang der Blockliste bewegt (410, Fig. 12C). Die ENTFERNTES ELEMENT Variable wird bei Block 280 auf "falsch" gesetzt, und bei Block 282 wird festgestellt, daß in der Blockliste noch Elemente übrig sind. Bei Block 284 wird der Blocklistenzeiger überprüft, um zu sehen, ob er am Ende der Blockliste ist, und bei Block 286 wird der Blocklistenzeiger auf das nächste Element in der Blockliste, Element D, weiterbewegt. Bei Block 288 wird festgestellt, daß die Verzögerungseigenschaft von Element D ein alle Durchführungstyp ist, und das ALLE DURCHFÜHREN Verfahren (Fig. 11B) wird bei Block 302 betreten.
- Bei Block 310 des ALLE DURCHFÜHREN Verfahrens aus Fig. 11B wird festgestellt, daß der Eingang I&sub3; in der Durchführungsliste von Element D ist (2180, Fig. 13B). Eingang I&sub3; ist der einzige Eingang in der Eingangsliste von Element D, und er wird von dem Fortschreibungsausgangsprozeduraufruf von Element B für O&sub2; gesteuert, der in der Abfolgeliste erscheint. Deshalb ist Eingang I&sub3; definiert und der Fortschreibungsausgangsprozeduraufruf von Element D wird bei Block 312 an die Abfolgeliste angefügt (412, Fig. 12C). Während Block 314 wird Element D aus der Blockliste entfernt (414, Fig. 12C), und bei Block 316 wird der Blocklistenzeiger zu dem vorangehenden Element in der Blockliste zurückbewegt (416, Fig. 12D). Die ENTFERNTES ELEMENT Variable wird bei Block 318 gleich "wahr" gesetzt, und bei Block 316 kehrt die Verarbeitung zu Block 282 aus Fig. 11A zurück.
- Bei Block 282 wird eine Feststellung gemacht, daß noch ein Element in der Blockliste übrig ist (Element B), und bei Block 284 wird festgestellt, daß der Blocklistenzeiger nicht auf das Ende der Blockliste zeigt. Der Blocklistenzeiger wird. bei Block 286 zu Element B weiterbewegt, und bei Block 288 wird festgestellt, daß die Durchführungseigenschaft von Element B ein MANCHE Durchführungstyp ist. Das MANCHE DURCHFÜHREN Verfahren (Fig. 11C) wird bei Block 303 betreten.
- Bei Block 322 des MANCHE DURCHFÜHREN Verfahrens aus Fig. 11C wird eine Feststellung gemacht, daß keine Ausgänge in der Ausgangsliste von Element B sind, und bei Block 334 wird festgestellt, daß die Eingänge in der Eingangsliste von Element B definiert sind. Element B hat Eingang I&sub1; und Eingang I&sub2; in seiner Eingangsliste, und beide werden von Fortschreibungsausgangsprozeduraufrufen von Element A bzw. Element B gesteuert, die in der Abfolgeliste erscheinen. Deshalb sind beide Eingänge definiert, und bei Block 336 wird der Fortschreibungsausgangsprozeduraufruf von Element B an die Abfolgeliste angefügt (420, Fig. 12D). Bei Block 338 (Fig. 11C) wird Element B von der Netzliste entfernt (422, Fig. 12D), und bei Block 334 wird die ENTFERNTES ELEMENT Variable auf "wahr" gesetzt. Die Verarbeitung kehrt zu Block 282 aus Fig. 11A zurück, während dem festgestellt wird, daß in der Blockliste keine Elemente übrig sind, und bei Block 308 wird die erste Ausführungsform des ALLGEMEINEN ABFOLGE Verfahrens auf normale Weise verlassen.
- Bezugnehmend auf Reihe 422 aus Fig. 12D wird die resultierende Abfolgeliste gezeigt. Die Prozeduraufrufe können dann zu den Prozeduren erweitert werden, die in dem Bibliothek Speicher 14A gespeichert sind, um das Computerprogramm als Darstellung des Blockdiagramms zu bilden. Die Ausführung des Computerprogramms simuliert auf effiziente Weise das Diagramm, das es darstellt.
- Die Fig. 14A, B, C, D, E, F und G stellen die zweite Ausführungsform des BESCHRÄNKTEN ABFOLGE und des ALLGEMEINEN ABFOLGE Verfahrens dar. Insbesondere sind die Fig. 14A, B, C, D, F und G die zweite Ausführungsform der BESCHRÄNKTEN ABFOLGE Verfahren und die Fig. 14A, B, E, F und G sind die zweite Ausführungsform der ALLGEMEINEN ABFOLGE Verfahren. Im wesentlichen sind diese Ausführungsformen auch Verfahren zur Erstellung einer Liste in einer Abfolge; allerdings sind die ausgeführten Schritte verschieden. Die Verfahren, die nachfolgend ausführlicher beschrieben werden, erstellen im wesentlichen eine erweiterte Netzliste, die den Schritt, die Verzögerungseigenschaft eines Elements während des eigentlichen in eine Abfolge Bringens bestimmen zu müssen, überflüssig macht. Die Verzögerungseigenschaft von jedem der Blöcke wird untersucht, wenn die erweiterte Netzliste erstellt wird, wohingegen bei den ersten Ausführungsformen die Verzögerungseigenschaften der Blöcke während des in eine Abfolge Bringens analysiert wurden. Der Vorteil der zweiten Ausführungsformen gegenüber den ersten Ausführungsformen ist, daß sie die Abfolgeliste effizienter verarbeiten.
- Fig. 14A ist ein Gesamtblockdiagramm des SYSTEM TREIBERS zum Einleiten der korrekten Abfolge der Prozeduraufrufe für beide der zweiten Ausführungsformen des BESCHRÄNKTEN und des ALLGEMEINEN Verfahrens. Das VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B) wird bei Block 426 aufgerufen, um die ursprüngliche Netzliste, die auch "externe Netzliste" genannt wird, zu nehmen und sie in eine erweiterte Version oder "interne Netzliste" umzusetzen. Ein Beispiel einer ursprünglichen oder externen Netzliste wird in Fig. 15B gefunden, und ein Beispiel einer erweiterten oder internen Netzliste ist in Fig. 15E gezeigt. Eine ausführlichere Beschreibung dieser Figuren wird in Verbindung mit den Fig. 16 und 19 gegeben, die den Schritt zur Erweiterung der externen Netzliste verdeutlichen. Falls ein bestimmtes Element in der externen Netzliste einem Zustandsblock entspricht, trennen diese Verfahren die Funktionalität des Elements in zwei Teilelemente. Das erste Element entspricht dem Fortschreibungsausgangsprozeduraufruf und das zweite Element dem Fortschreibungszustandsprozeduraufruf. Die neuen Elemente kommen in der internen Netzliste zum Ausdruck. Block 428 stellt fest, ob die Erstellung der internen Netzliste durch das VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B), Fehler hervorgebracht hat; falls ja kehrt das System zu dem aufrufenden Programm bei Block 435 mit einer Fehlermeldung zurück. Unter der Annahme, daß keine Fehler vorliegen, wird bei Block 430 das ABFOLGE TREIBER Verfahren betreten, um die Elemente in der internen Netzliste (Fig. 14E) in eine Abfolge zu bringen. Bei Block 432 werden die Ergebnisse des ABFOLGE TREIBER Verfahrens durchgesehen, um festzustellen, ob das ABFOLGE TREIBER Verfahren Fehler hervorgebracht hat. Falls während der ABFOLGE TREIBER Verarbeitung ein Fehler hervorgebracht wurde, kehrt das System bei Block 432 mit einer Fehlermeldung zu dem aufrufenden Programm zurück. Unter der Annahme, daß während der Verarbeitung keine Fehler aufgetreten sind, wird die Abfolgeliste, die von dem ABFOLGE TREIBER Verfahren bei Block 430 generiert wurde, zu einem Computer-Objektcode einer unteren Ebene kompiliert, der wahlweise bei Block 434 ausgeführt werden kann. Anders ausgedrückt, kann die generierte Abfolgeliste erweitert und sofort nach der Generierung ausgeführt werden, oder für eine spätere Ausführung in dem Speicher des Systems oder in einer getrennten externen Speichereinheit, wie beispielsweise einem Halbleiterbauelement, gespeichert werden.
- Fig. 14B ist ein Fluß-Blockdiagramm des VERARBEITE EXTERNE NETZLISTE Verfahrens. Um die Bildung der internen Netzliste zu verfolgen, werden zwei getrennte Zeiger verwaltet, einer für die interne Netzliste und einer für die externe Netzliste. Die Zeiger werden bei Block 436 initialisiert. Der externe Netzlistenzeiger wird an den Anfang der externen Netzliste gesetzt. Als Anfang der Netzliste wird die logische Adresse gerade vor dem ersten Element in der externen Netzliste betrachtet. Der interne Netzlistenzeiger wird auf die erste Position der Netzliste gesetzt. Bei Block 438 wird der Netzlistenzeiger zu dem nächsten Element in der externen Netzliste weiterbewegt, und bei Block 442 wird eine Abfrage durchgeführt, ob der externe Netzlistenzeiger am Ende der externen Netzliste ist. Falls der Zeiger nicht auf das Ende der externen Netzliste zeigt, wird bei Block 444 das Element aus der externen Netzliste entfernt und in die interne Netzliste verschoben. Bei Block 446 wird eine Abfrage durchgeführt, ob das Element, auf das in der internen Netzliste gezeigt wird, einem Zustandsblock entspricht. Unter der Annahme, daß das Element, auf das gezeigt wird, einem Zustandsblock entspricht, wird bei Block 448 (Fig. 14C, 14D oder 14E) das GETRENNTE FUNKTIONALITÄT Verfahren betreten, um das externe Netzlistenelement in getrennte Elemente (oder Prozeduraufrufe) in der internen Netzliste zu erweitern.
- Das SYSTEM TREIBER Verfahren (Fig. 14A) und das VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B) funktionieren im allgemeinen für beide zweiten Ausführungsformen; das BESCHRÄNKTE ABFOLGE Verfahren und das ALLGEMEINE ABFOLGE Verfahren. Allerdings wird das GETRENNTE FUNKTIONALITÄT Verfahren bei Block 448 aus Fig. 14B variieren, abhängig davon, ob das in eine Abfolge Bringen für den BESCHRÄNKTEN oder den ALLGEMEINEN Fall durchgeführt wird. In dem BESCHRÄNTKEN Fall folgt das GETRENNTE FUNKTIONALITÄT Verfahren den Fluß-Blockdiagrammen entweder aus Fig. 14C oder 14D, abhängig davon, ob die Blockausgänge den gleichen oder abweichenden Durchführungslisten zugeordnet sind. In dem ALLGEMEINEN Fall folgt das GETRENNTE FUNKTIONALITÄT Verfahren dem Fluß-Blockdiagramm aus Fig. 14E.
- Wenn das GETRENNTE FUNKTIONALITÄT Verfahren das externe Netzlistenelement erweitert hat, wird der interne Netzlistenzeiger bei Block 440 aus Fig. 14B zu der nächsten leeren Position in der internen Netzliste weiterbewegt. Zurück bei Block 446 wird, falls festgestellt wurde, daß das analysierte Netzlistenelement nicht einem Zustandsblock entspricht, das GETRENNTE FUNKTIONALITÄT Verfahren nicht aufgerufen, und Block 440 bewegt den internen Netzlistenzeiger zu der nächsten Position in der internen Netzliste weiter. In beiden Fällen wird der externe Netzlistenzeiger während Block 438 zu dem nächsten Element in der externen Netzliste weiterbewegt. Dieser Vorgang des Analysierens der Elemente in der internen Netzliste und des Aufrufens oder Nichtaufrufens des GETRENNTE FUNKTIONALITÄT Verfahrens wird fortgesetzt, bis bei Block 442 festgestellt wird, daß der Zeiger am Ende der externen Netzliste ist. Wenn dies auftritt, kehrt die Verarbeitung bei Block 450 zu Block 428 aus Fig. 14A zurück, um die Verarbeitung des SYSTEM TREIBER Verfahrens fortzusetzen.
- Fig. 14C ist ein Fluß-Blockdiagramm des GETRENNTE FUNKTIONALITÄT Verfahrens für die zweite Ausführungsform in dem BESCHRÄNKTEN Fall, wenn das Element, das analysiert wird, ein Zustandsblock ist, der eine Fortschreibungsausgangsprozedur und eine Durchführungsliste hat. Bei Block 452 wird der Fortschreibungszustandsprozeduraufruf des internen Netzelements in die nächste Position in der internen Netzliste kopiert, und der Fortschreibungsausgangsprozeduraufruf für das interne Netzlistenelement wird in der ersten Position belassen. Anders ausgedrückt erzeugt dieser Schritt ein erstes internes Netzlistenelement, das den Fortschreibungsausgangsprozeduraufruf von diesem Element definiert, und ein zweites internes Netzlistenelement, das den Fortschreibungszustandsprozeduraufruf für das gleiche Element definiert. Der Zweck dieses Schritts besteht darin, die Funktionalität des Block in getrennte Einträge oder Elemente in der internen Netzliste zu trennen. Bei Block 454 wird die Eingangsliste des Fortschreibungsausgangsprozeduraufrufs gleich den Eingängen in der Durchführungsliste des Elements gesetzt. Bei Block 456 wird die Ausgangsliste des Fortschreibungszustandsprozeduraufrufs auf leer gesetzt und seine Eingangsliste wird gleich den Eingängen des Blocks gesetzt. Die Fortschreibungszustandsprozedur benötigt die Eingänge zu dem Block, um den Zustand korrekt fortschreiben zu können. Der interne Netzlistenzeiger wird bei Block 458 zu der nächsten Elementposition in der internen Netzliste weiterbewegt, die leer ist. Die Verarbeitung kehrt bei Block 460 zu Block 440 des VERARBEITE EXTERNE NETZLISTE Verfahrens (Fig. 14B) zurück.
- Das GETRENNTE FUNKTIONALITÄT Verfahren aus Fig. 14C geht davon aus, daß es nur eine Fortschreibungsausgangsprozedur (oben erläutert) gibt, die allen Eingängen des Zustandsblocks zugeordnet ist, und daß jeder Ausgang einer identischen Durchführungsliste zugeordnet ist. Das GETRENNTE FUNKTIONALITÄT Verfahren aus Fig. 14D trägt dem BESCHRÄNKTEN Fall Rechnung, wenn mehrere Fortschreibungsausgangsprozeduren vorhanden sind, die dem Zustandsblock zugeordnet sind, und jeder Ausgang einer identischen Durchführungsliste zugeordnet ist. Die Ausgangsprozeduraufrufe werden in die nächste Position der internen Netzliste kopiert, und jede der Eingangslisten für diese neuen internen Netzlistenelemente wird gleich nur einer Durchführungsliste gesetzt, die allen Fortschreibungsausgangsprozeduraufrufen zugeordnet ist.
- Fig. 14D ist ein ausführliches Flußdiagramm der Prozedur zur Verarbeitung der Mehrfachausgänge in dem BESCHRÄNKTEN Fall, wobei jeder seine eigene Fortschreibungsausgangsprozedur hat (aber nur eine Durchführungsliste für den Block). Bei Block 461 wird die Variable ANZAUSG gleich der Anzahl der Ausgänge eines bestimmten Blocks gesetzt, und das Inkrement i wird gleich 1 gesetzt. Das Inkrement i wird auf 1 gesetzt, um einem ersten internen Netzlistenelement, das gegenwärtig in der internen Netzliste gespeichert ist, Rechnung zu tragen. Das erste interne Netzlistenelement wird gleich der Fortschreibungsausgangsprozedur gesetzt, die dem ersten Ausgang des Blocks zugeordnet ist, und es hat eine Eingangsliste, die gleich der Durchführungsliste ist, die dem Block zugeordnet ist. Bei Block 487 wird die Definition (Position, Adresse) des Fortschreibungszustandsprozeduraufrufs für zukünftige Zugriffe gespeichert. Bei Block 463 wird die Variable i überprüft, um zu sehen, ob sie größer als die Anzahl der Ausgänge des Blocks ist. Während Block 467 wird der Fortschreibungsausgangsprozeduraufruf, der dem nächsten Ausgang in dem Block zugeordnet ist, in die nächste Position der internen Netzliste kopiert. Bei Block 469 wird die Eingangsliste, die diesem neuen Element zugeordnet ist, gleich der Durchführungsliste gesetzt, die dem Block zugeordnet ist. Bei Block 471 wird die Ausgangsliste für das neue Element gleich dem Ausgang gesetzt, der der Fortschreibungsausgangsprozedur in dem neuen Element zugeordnet ist. Das Inkrement i wird bei Block 473 um 1 erhöht, und bei Block 478 wird der interne Netzlistenzeiger zu der neuen Elementposition weiterbewegt. Dieser Vorgang wird so lange fortgesetzt, bis alle Ausgänge und ihre zugeordneten Fortschreibungsausgangsprozeduraufrufe ihren eigenen getrennten internen Netzlistenelementen zugeordnet sind. Wenn i gleich ANZAUSG ist, wurden die Fortschreibungsausgangsprozeduren alle in der internen Netzliste abgelegt. Bei Block 471 wird der Fortschreibungsprozeduraufruf, der bei Block 487 gespeichert wurde, in der letzten Position in der internen Netzliste abgelegt. Bei Block 479 werden die Eingänge zu diesem internen Netzlistenelement gleich der Eingangsliste gesetzt, die dem Zustandsblock zugeordnet ist. Block 481 bewegt den internen Netzlistenzeiger zu diesem letzten Element weiter, und Block 483 gibt die Verarbeitung zurück an das VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14D).
- Fig. 14E ist ein Fluß-Blockdiagramm für das GETRENNTE FUNKTIONALITÄT Verfahren in dem allgemeinen Fall. Dieses Verfahren ist fast identisch mit dem GETRENNTE FUNKTIONALITÄT Verfahren in dem BESCHRÄNKTEN FALL (Fig. 14D). Allerdings trägt dieses Verfahren der Tatsache Rechnung, daß eine getrennte Fortschreibungsliste vorhanden ist, die jeder Fortschreibungsausgangsprozedur zugeordnet ist.
- Bei Block 462 wird die Variable ANZAUSG gleich der Anzahl der Ausgänge eines bestimmten Blocks, der analysiert werden soll, gesetzt, und das Inkrement i wird gleich 1 gesetzt. Bei Block 484 wird das erste Element gleich dem Fortschreibungsausgangsprozeduraufruf gesetzt, der dem ersten Ausgang zugeordnet ist, und seine Eingangsliste wird gleich der Durchführungsliste gesetzt, die dem Ausgang zugeordnet ist. Bei Block 491 wird die Definition des Fortschreibungszustandsprozeduraufrufs für zukünftige Zugriffe bei Block 476 gespeichert. Während Block 464 wird eine Abfrage durchgeführt, ob das Inkrement i größer als ANZAUSG ist. Bei Block 466 wird der Fortschreibungsausgangsprozeduraufruf für den nächsten Ausgang in die nächste Position in der internen Netzliste kopiert. Bei Block 468 wird die Eingangsliste für das neue interne Netzlistenelement gleich der Durchführungsliste gesetzt, die dem Ausgang zugeordnet ist. Bei Block 470 wird die Ausgangsliste für das neue interne Netzlistenelement gleich dem Ausgang für diesen Fortschreibungsausgangsprozeduraufruf gesezt. Während Block 472 wird die Variable Inkrement i gesetzt, und bei Block 474 wird der interne Netzlistenzeiger zu der nächsten leeren Position in der internen Netzliste weiterbewegt.
- Dieser Vorgang wird fortgesetzt, bis alle Fortschreibungsprozeduraufrufe, die den verschiedenen Ausgängen zugeordnet sind, in der internen Netzliste abgelegt worden sind. Block 476 wird betreten, nachdem alle Fortschreibungsausgangsprozeduraufrufe in der internen Netzliste abgelegt worden sind. Bei Block 476 wird der gespeicherte Fortschreibungszustandsprozeduraufruf in die letzte interne Netzlistenposition kopiert. Bei Block 478 wird die Eingangsliste des Fortschreibungszustandsprozeduraufrufs gleich der Eingangsliste für den Block gesetzt, und bei Block 480 wird der interne Netzlistenzeiger in die nächste leere Position in der internen Netzliste kopiert. Bei Block 482 kehrt die Verarbeitung zu dem VERARBEITE EXTERNE NETZLISTE Verfahren aus Fig. 14B zurück.
- Fig. 14F ist ein Fluß-Blockdiagramm für das ABFOLGE TREIBER Verfahren. Das ABFOLGE TREIBER Verfahren dient zwei Zwecken. Erstens stellt das ABFOLGE TREIBER Verfahren sicher, daß verschiedene Listen (Abfolgeliste, Blockliste; aufgesuchte Liste (wird noch erläutert), Eingangsliste, usw.) initialisiert werden. Zweitens prüft das ABFOLGE TREIBER Verfahren die Ergebnisse des ABFOLGE Verfahrens (Fig. 14G), um sicherzustellen, daß das in eine Abfolge Bringen korrekt durchgeführt wurde. Das ABFOLGE TREIBER Verfahren nimmt Bezug auf eine Blockliste, um zu verfolgen, welcher Block oder welches Element gegenwärtig verarbeitet wird. Jedes Element in der Blockliste ist der Name des Elements, das in der internen zu verarbeitenden Netzliste aufgeführt ist. Anders ausgedrückt ist die Blockliste eine Kurzform der internen Netzliste mit gerade genug Informationen, um die Elemente, die analysiert werden, bezeichnen zu können. Auf die Elemente in der Blockliste wird durch einen Blocklistenzeiger Bezug genommen. Die Elemente werden eines nach dem anderen aus der Blockliste entfernt, nachdem jedes Element durch das ABFOLGE Verfahren (Fig. 14G) verarbeitet worden ist. Die Blockliste wird bei Block 521 gebildet, nachdem die interne Netzliste durch das VERARBEITE INTERNE NETZLISTE Verfahren (Fig. 14B) erzeugt worden ist.
- Bezugnehmend auf das ABFOLGE TREIBER Verfahren (Fig. 14F) wird bei Block 524 die Blockliste überprüft, um zu sehen, ob sie leer ist. Falls die Blockliste leer ist, wird dem Anwender bei Block 528 ein Fehler ausgegeben, und die Verarbeitung kehrt bei Block 530 zu Block 432 aus Fig. 14A zurück. Der Fehler tritt auf, wenn der ABFOLGE TREIBER versucht, eine leer Blockliste in eine Abfolge zu bringen. Bei Block 526 werden die Abfolgeliste und die aufgesuchte Liste initialisiert. Die aufgesuchte Liste verfolgt, ob ein bestimmtes Element in der Blockliste verarbeitet worden ist oder nicht, um sicherzustellen, daß eine Endlosschleife nicht auftritt. Ebenso wird bei Block 526 eine ZUSTAND Variable gleich "in Ordnung" gesetzt, und der Blocklistenzeiger wird auf das erste Element in der Blockliste gesetzt. Bei Block 532 wird die ZUSTAND Variable überprüft, um zu sehen, ob sie gleich "in Ordnung" ist und ob noch interne Netzlistenelemente in der Blockliste sind. Falls dort keine Blockslistenelemente sind, kehrt die Verarbeitung bei Block 536 zu dem SYSTEM TREIBER Verfahren (Fig. 14A) bei Block 432 zurück. Falls dort allerdings Blocklistenelemente sind, wird das gegenwärtige Blocklistenelement bei Block 538 überprüft, um festzustellen, ob es in der Abfolgeliste erscheint.
- Falls das gegenwärtige Blocklistenelement bereits in der Abfolgeliste ist, wird der Blocklistenzeiger bei Block 550 zu dem nächsten Blocklistenelement weiterbewegt, und bei Block 534 wird das Blocklistenelement, auf das vorher gezeigt wurde, aus der Blockliste entfernt. Unter der Annahme, daß das Blocklistenelement nicht in der Abfolgeliste erscheint, wird bei Block 540 (Fig. 14G) das ABFOLGE Verfahren betreten, um das Blocklistenelement, auf das gegenwärtig gezeigt wird, in der Abfolgeliste abzulegen. Bei Block 540 wird ein PARAMETER REGISTER auch gleich der Position des Blocklistenelements gesetzt, auf das gegenwärtig gezeigt wird. Der Inhalt des PARAMETER REGISTERS wird von dem ABFOLGE Verfahren bei Block 486 (Fig. 14G) verwendet. Nachdem die Verarbeitung des ABFOLGE Verfahrens beendet ist, wird bei Block 542 die ZUSTAND Variable gleich einer RÜCKGABE Variable gesetzt, die in dem ABFOLGE Verfahren (Fig. 14G) gesetzt wird. Bei Block 544 wird eine Abfrage durchgeführt, ob die ZUSTAND Variable gleich "in Ordnung" ist, und falls dem so ist, wird bei Block 551 der Blocklistenzeiger zu der nächsten Blocklistenelementposition weiterbewegt, und die Verarbeitung für dieses Element wird bei Block 532 fortgesetzt. Falls die ZUSTAND Variable nicht gleich "in Ordnung" ist, wird bei den Blöcken 546 und 548 eine Fehlermeldung an das SYSTEM TREIBER Verfahren (Fig. 14A) ausgegeben. Falls alle Blocklistenelemente in eine Abfolge gebracht worden sind, kehrt die Verarbeitung bei Block 536 zu dem SYSTEM TREIBER Verfahren (Fig. 14A) bei Block 432 zurück.
- Fig. 14G ist ein ausführliches Flußdiagramm des ABFOLGE Verfahrens, das von dem ABFOLGE TREIBER Verfahren (Fig. 14F) bei Block 540 betreten wurde. Kurz gesagt verfolgt das ABFOLGE Verfahren jeden Eingang von jedem Blocklistenelement bis zu einem Fortschreibungsausgangsprozeduraufruf eines zweiten Blocklistenelements (das das Blocklistenelement steuert), das den Eingang des ersten Blocklistenelements steuert und definiert. Die Eingänge des steuernden Elements werden dann bis zu dem nächsten Fortschreibungsausgangsprozeduraufruf verfolgt, der diesen Eingang definiert. Diese Prozedur geht weiter, bis der nächste Fortschreibungsausgangsprozeduraufruf ein Block ist mit einer leeren Durchführungsliste oder ein Block ist, der gegenwärtig in der Abfolgeliste ist. Sobald alle Eingänge zu Fortschreibungsausgangsprozeduraufrufen verfolgt worden sind, legt das ABFOLGE Verfahren die Fortschreibungsausgangsprozeduraufrufe in der Abfolgeliste ab, in der Reihenfolge des letzten verfolgten Fortschreibungsausgangsprozeduraufrufs als erstes. Diese Prozedur stellt sicher, daß die Fortschreibungsausgangsprozeduraufrufe in eine Abfolge gebracht werden, die alle Eingänge definiert, wenn die Fortschreibungsausgangsprozeduren für jeden Prozeduraufruf ausgeführt werden. Nachdem alle Eingänge für einen Zustandsblock definiert sind, wird die Fortschreibungszustandsprozedur für diesen Block in der Abfolgeliste abgelegt.
- Fig. 14G ist ein ausführliches Flußdiagramm für das ABFOLGE Verfahren. Block 484 setzt eine RÜCKGABE Variable gleich "in Ordnung", was bedeutet, daß das in eine Abfolge Bringen des Elements in der Blockliste, auf das gegenwärtig gezeigt wird, korrekt erfolgt. Der Inhalt des MÖGLICHEN ABFOLGE LISTEN ELEMENT (PSLE, POTENTIAL SEQUENCE LIST ELEMENT) Zeigers wird gleich dem PARAMETER REGISTER (540, Fig. 14F) gesetzt. Bei Block 488 wird das PSLE, auf das durch den PSLE Zeiger gezeigt wird, überprüft, um zu sehen, ob es gegenwärtig in der Abfolgeliste ist. Unter der Annahme, daß das Element, auf das gezeigt wird, nicht in der Abfolgeliste ist, wird bei Block 490 eine Abfrage durchgeführt, ob das Element, auf das gezeigt wird, auf der aufgesuchten Liste ist. Die aufgesuchte Liste ist eine Liste mit Elementen, die früher analysiert worden sind, um festzustellen, ob sie in der Abfolgeliste abgelegt werden könnten. Die Tatsache, daß ein Element in der aufgesuchten Liste ist, signalisiert dem System, daß dieses Element aufgesucht wurde und es nicht in eine Abfolge bringbar war.
- Falls das Element auf der aufgesuchten Liste erscheint, wird bei Block 504 ein ABFOLGE Fehler generiert. Dieser Fehler tritt auf, weil das Element, das gegenwärtig analysiert wird, schon einmal vorher analysiert wurde, und es wurde herausgefunden, daß es nicht in eine Abfolge bringbar ist, demnach wird die Blockliste als nicht in eine Abfolge bringbar angesehen. Falls das Element nicht auf der aufgesuchten Liste ist, wird das Element bei Block 492 in der aufgesuchten Liste abgelegt. Bei Block 494 wird ein Eingangslistenzeiger an den Anfang der Eingangsliste für das Element gesetzt, das überprüft wird.
- Die Eingangsliste, die jedem Element zugeordnet ist, wird von dem VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B) gespeichert. Ein Eingangslistenzeiger wird vorgesehen, um zu verfolgen, welcher Eingang von dem System gegenwärtig verarbeitet und verfolgt wird. Bei Block 496 wird die RÜCKGABE Variable überprüft, um festzustellen, ob sie gleich "in Ordnung" gesetzt ist, und falls dem so ist, wird der Eingangslistenzeiger untersucht, um zu sehen, ob er noch auf einen Eingang und nicht auf eine leere Position zeigt. Unter der Annahme, daß der Zeiger auf einen Eingang zeigt und daß die RÜCKGABE Variable gleich "in Ordnung" ist, wird bei Block 498 ein rekursiver Aufruf ausgeführt. Insbesondere wird bei Block 500 der gegenwärtige Funktionskontext auf einen Stapel verschoben. Der gegenwärtige Funktionskontext umfaßt den Wert der RÜCKGABE Variable, den Inhalt des PSLE Zeigers und des Zeigers auf die Eingangsliste. Bei Block 502 wird das Blocklistenelement, das den Eingang steuert, auf den gegenwärtig gezeigt wird, in dem PARAMETER REGISTER abgelegt.
- Das ABFOLGE Verfahren wird rekursiv aufgerufen, um das Blocklistenelement zu analysieren, das den Eingang steuert, auf den gegenwärtig gezeigt wird, des PSLE, das gegenwärtig auf dem Stapel ist. Bei Block 484 wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt. Bei Block 486 wird der PSLE Zeiger gleich dem PARAMETER REGISTER gesetzt, das das Blocklistenelement enthält, das den Eingang steuert, der gegenwärtig auf dem Stapel ist. Bei Block 488 wird eine Abfrage durchgeführt, ob dieses Element in der Abfolgeliste ist oder nicht. Unter der Annahme, daß dieses Element nicht in der Abfolgeliste ist (Block 488), wird das Element überprüft, um zu sehen, ob es in der aufgesuchten Liste ist (Block 490). Falls das Element nicht in der aufgesuchten Liste ist, wird es bei Block 492 in der aufgesuchten Liste abgelegt. Bei Block 494 wird der Eingangslistenzeiger an den Anfang der Eingangsliste des PSLE gesetzt, und bei Block 496 wird eine Abfrage durchgeführt, ob in der Eingangsliste Eingänge sind und ob die RÜCKGABE Variable gleich "in Ordnung" ist. Falls in der Eingangsliste Eingänge sind und die RÜCKGABE Variable gleich "in Ordnung" ist, wird bei Block 498 ein weiterer rekursiver Aufruf ausgeführt, um das Blocklistenelement zu analysieren, das den Eingang steuert, der gegenwärtigen analysiert wird. Falls dort keine weiteren Eingänge sind oder falls RÜCKGABE nicht gleich "in Ordnung" ist, wird Block 523 betreten, um festzustellen, ob die RÜCKGABE Variable gleich "in Ordnung" ist. Falls die RÜCKGABE Variable gleich "in Ordnung" ist, wird bei Block 525 der Prozeduraufruf für das Blocklistenelement, auf das der PSLE Zeiger zeigt, in der Abfolgeliste abgelegt. Bei Block 527 wird das Element dann von der aufgesuchten Liste entnommen, und bei Block 529 wird das Element von der Blockliste entfernt. Die Verarbeitung wird bei Block 510 fortgesetzt (wird noch erläutert). Zurückkehrend zu Block 522 wird, falls RÜCKGABE nicht gleich "in Ordnung" ist, die Verarbeitung auf jeden Fall bei Block 510 fortgesetzt.
- Block 510 wird betreten, um festzustellen, ob der Stapel leer ist. Unter der Annahme, daß der Stapel gegenwärtig den Funktionskontext für eine Anzahl von Elementen enthält, wird die rekursive Rückgabeprozedur bei Block 514 aufgerufen. Bei Block 516 wird die gegenwärtige RÜCKGABE Variable in einem Systemregister abgelegt, so daß, wenn der Kontext von dem Stapel entfernt wird, der gegenwärtige Inhalt der RÜCKGABE Variable nicht verloren geht. Bei Block 518 wird der Kontext von dem Stapel entfernt, was hauptsächlich den alten Inhalt des PSLE Zeigers, des Zeigers auf das Eingangslistenelement, und der RÜCKGABE Variable zurückbringt, die alle gespeichert waren als der rekursive Aufruf bei Block 498 ausgeführt wurde. Während Block 520 wird die RÜCKGABE Variable mit dem Inhalt des Systemregisters bei Block 516 wiederhergestellt. Bei Block 508 wird der Eingangslistenzeiger zu dem nächsten Eingang des Blocklistenelements weiterbewegt, das gerade von dem Stapel entfernt worden ist. Bei Block 496 wird die RÜCKGABE Variable überprüft, um zu sehen, ob ihre Daten "in Ordnung" sind und um festzustellen, ob noch Eingänge übrig sind, die analysiert werden müssen. Unter der Annahme, daß dort keine Eingänge sind, die analysiert werden müssen, wird dann bei Block 523 die RÜCKGABE Variable überprüft, um festzustellen, ob sie noch "in Ordnung" ist. Unter der Annahme, daß die RÜCKGABE Variable "in Ordnung" ist, wird bei Block 525 dem Blocklistenelement, das von dem Stapel entfernt wurde, sein entsprechender Prozeduraufruf zu der Abfolgeliste hinzugefügt. Das Blocklistenelement wird bei Block 527 aus der aufgesuchten Liste herausgenommen, und bei Block 529 aus der Blockliste entfernt. Bei Block 510 wird der Stapel überprüft, um festzustellen, ob er leer ist. Unter der Annahme, daß zu diesem Zeitpunkt der Stapel leer ist, wird Block 512 betreten, um die Verarbeitung an das ABFOLGE TREIBER Verfahren (Fig. 14F) zurückzugeben.
- Zurückkehrend zu Block 522 wird, falls die RÜCKGABE Variable nicht gleich "in Ordnung" ist (z.B. hat der vorangehende rekursive Aufrufe nicht "in Ordnung" zurückgegeben - vgl. Blöcke 510, 514, 516, 518 und 520), die Verarbeitung bei Block 510 fortgesetzt. Unter der Annahme, daß der Stapel nun leer ist, wird Block 512 betreten, um die Verarbeitung an das ABFOLGE TREIBER Verfahren (Fig. 14F) zurückzugeben.
- Zurückkehrend zu den Fig. 14A, B, C, F und G, 15A, B, C, D und E, 16A, B, C und D wird nun ein Beispiel der zweiten Ausführungsform des BESCHRÄNKTEN ABFOLGE Verfahrens erläutert. Fig. 15A ist ein Blockdiagramm, das von einem Konstrukteur auf einer Bildschirmanzeige ausgebildet wurde, und es ist bereit zur Simulation. Um das Blockdiagramm aus Fig. 15A zu simulieren, wird ein Aufruf an das SYSTEM TREIBER Verfahren bei Block 424 aus Fig. 14A ausgeführt. Dann wird das VERARBEITE EXTERNE NETZLISTE Verfahren bei Block 426 aufgerufen, um eine interne Netzliste, wie in Fig. 15E gezeigt, aus der externen Netzliste (wie in Fig. 15B gezeigt) zu erstellen. Die externe Netzliste (Fig. 15B) ist eine Darstellung des Blockdiagramms aus Fig. 15A. Wohingegen die interne Netzliste (Fig. 15E) eine Darstellung des logischen Blockdiagramms aus Fig. 15D ist, das von dem VERARBEITE INTERNE NETZLISTE Verfahren (Fig. 14B) erstellt wird. Die Informationen, die jeden Block in dem Blockdiagramm aus Fig. 15A und Fig. 15D charakterisieren, sind in der Bibliothek gespeichert und in Fig. 15C dargestellt. Die interne Netzliste, die erstellt wurde, wird von dem ABFOLGE TREIBER Verfahren (Fig. 14F) und dem ABFOLGE Verfahren (Fig. 14G) analysiert. Eine Darstellung der internen oder erweiterten Netzliste ist in Fig. 15E gezeigt.
- Fig. 16 ist eine Ergebnistabelle, die die Erstellung der internen Netzliste (Fig. 15E) aus der externen Netzliste (Fig. 15B) durch das VERARBEITE INTERNE NETZLISTE Verfahren (Fig. 14B) zeigt. Jede Reihe der Ergebnistabelle (Fig. 16) stellt eine Änderung in entweder der externen oder der internen Netzliste dar.
- Das VERARBEITE INTERNE NETZLISTE Verfahren (Fig. 14B) beginnt bei Block 436 die interne Netzliste zu erstellen, der den externen Netzlistenzeiger an den Anfang der externen Netzliste (584, Fig. 16) und den internen Netzlistenzeiger auf die erste Position der internen Netzliste setzt. Bei Block 438 wird der interne Netzlistenzeiger zu dem nächsten Element in der externen Netzliste weiterbewegt (586, Fig. 16). Bei Block 442 wird festgestellt, daß der Zeiger nicht am Ende der Netzliste ist, die Elemente C, D, A und B sind noch in der externen Netzliste (586, Fig. 16). Bei Block 444 wird Element C von der externen Netzliste zu der internen Netzliste übertragen, und der interne Netzlistenzeiger zeigt auf Element C (588, Fig. 16). Bei Block 446, wird festgestellt, daß Element C keine Verzögerungseigenschaft hat, was aus der Durchführungsinformation des Blocks ermittelt wird, die in dem BIBLIOTHEK SPEICHER (2149, Fig. 15C) gespeichert ist. Element C ist ein alle Durchführungstyp Block; Element C hat Eingang I&sub4; in seiner Eingangsliste, und dieser Eingang ist in der Durchführungsliste von Element C. Bei Block 440 wird der interne Netzlistenzeiger von Element C zu der nächsten Position weiterbewegt (590, Fig. 16). Bei Block 438 wird der externe Netzlistenzeiger zu dem nächsten Element in der externen Netzliste, Element D, weiterbewegt (590, Fig. 16). Bei Block 442 wird eine Feststellung gemacht, daß der Zeiger für die externe Netzliste nicht auf das Ende der externen Netzliste zeigt, und bei Block 442 wird Element D aus der externen Netzliste entfernt und in der internen Netzliste abgelegt (592, Fig. 16). Bei Block 446 wird festgestellt, daß Element D keine Verzögerungseigenschaft hat, weil Element D ein alle Durchführungstyp Block ist; Element D hat einen Eingang in seiner Eingangsliste, I&sub3;, und dieser Eingang ist in der Durchführungsliste von Element D. Bei Block 440 wird der interne Netzlistenzeiger zu der nächsten Position in der internen Netzliste weiterbewegt (592, Fig. 16). Bei Block 438 wird der externe Netzlistenzeiger weiterbewegt, um bei Block 438 auf Element A zu zeigen (594, Fig. 16). Während Block 442 wird festgestellt, daß der externe Netzlistenzeiger nicht am Ende der externen Netzliste ist, und bei Block 440 wird Element A aus der externen Netzliste entfernt und in der internen Netzliste abgelegt (596, Fig. 16). Bei Block 446 wird eine Feststellung gemacht, daß Element A keine Verzögerungseigenschaft hat, weil es ein alle Durchführungstyp Block ist (2190, Fig. 15C). Element A hat keine Eingänge, und deshalb ist es standardmäßig ein alle Durchführungsblock. Bei Block 440 wird der interne Netzlistenzeiger weiterbewegt, um auf das nächste Element in der internen Netzliste zu zeigen (605, Fig. 16). Bei Block 438 wird der externe Netzlistenzeiger weiterbewegt, um auf Element B zu zeigen (598, Fig. 16). Bei Block 442 wird eine Feststellung gemacht, daß noch ein Element in der externen Netzliste übrig ist, Element B. Bei Block 444 wird Element B aus der externen Netzliste entfernt und in der internen Netzliste abgelegt (607, Fig. 16). Während Block 446 wird festgestellt, daß Element B eine Verzögerungseigenschaft hat, so daß bei Block 448 das GETRENNTE FUNKTIONALITÄT Verfahren (Fig. 14C) für den BESCHRÄNKTEN Fall betreten wird. Unter Bezugnahme auf den BIBLIOTHEK SPEICHER 15C wird festgestellt, daß Element B nur einen seiner Eingänge der Eingangsliste in der Durchführungsliste hat (2192, Fig. 15C). Die Eingänge I&sub1; und I&sub2; sind nämlich in der Eingangsliste von Element B, allerdings ist nur Eingang I&sub1; in der Durchführungsliste von Element B. Deshalb ist dies ein manche Durchführungs- oder Zustandsblock.
- Unter Bezugnahme auf das GETRENNTE FUNKTIONALITÄT Verfahren (Fig. 14C) werden der Fortschreibungsausgangsprozeduraufruf und Fortschreibungszustandsprozeduraufruf von Element B als getrennte Elemente in der internen Netzliste abgelegt. Eine Kopie des Fortschreibungszustandsprozeduraufrufs von Element B wird in die Position kopiert, die auf den ursprünglichen Eintrag in der internen Netzliste folgt (601, Fig. 16). Bei Block 454 werden die Eingänge des Fortschreibungsausgangsprozeduraufrufs des ersten Elements gleich den Eingängen in der Durchführungsliste des Blocks gesetzt (601, Fig. 16). Bei Block 456 wird die Ausgangsliste der Fortschreibungszustandsprozeduraufrufe von Element B gleich leer gesetzt, und die Eingangsliste wird auf die Eingänge des Blocks gesetzt (601, Fig. 16). Bei Block 458 wird der Zeiger auf die interne Netzliste zu der nächsten Position bewegt (599, Fig. 16), und die Verarbeitung kehrt bei Block 460 zu dem VERARBEITE EXTERNE NETZLISTE Verfahren zurück.
- Bei Block 440 aus Fig. 14B wird der interne Netzlistenzeiger weiterbewegt, um auf die nächste Position zu zeigen. Bei Block 438 wird der externe Netzlistenzeiger zu der nächsten Elementposition in der externen Netzliste weiterbewegt. Bei Block 442 wird festgestellt, daß die externe Neztuste keine weiteren Elemente hat, und die Verarbeitung kehrt bei Block 450 zu dem SYSTEM TREIBER Verfahren (Fig. 14A) zurück.
- Als ein Ergebnis des VERARBEITE EXTERNE NETZLISTE Verfahrens aus Fig. 14B wurde ein neues Blockdiagramm des Blockdiagramms (Fig. 15B) auf effiziente Weise erstellt. Dieses Blockdiagramm wird auf logische Weise aus den Informationen erzeugt, die in der internen Netzliste in Reihe 599 aus Fig. 16 gespeichert sind. In Wirklichkeit sieht der Konstrukteur diese Erstellung des Blockdiagramms oder sogar die Netzlisteninformationen nicht.
- Die interne Netzliste, die in Fig. 15E gezeigt wird, ist im wesentlichen eine erweiterte externe Netzliste, die in Fig. 15A gezeigt wird. Die zusätzlichen Elemente in der internen Netzliste tragen dem Fortschreibungsausgangsprozeduraufruf (2200, Fig. 15E) und dem Fortschreibungszustandsprozeduraufruf (2202, Fig. 15E) für Element B Rechnung. Die Fortschreibungsausgangsprozedur von Element B hat einen Eingang I&sub1; und Ausgänge O&sub1; und O&sub2; (2200, Fig. 15E). Die Fortschreibungszustandsprozedur von Element B hat eine Eingangsliste mit I&sub1; und I&sub2; und keine Ausgänge (2202, Fig. 15E). Die Elemente A, C und D bleiben die gleichen. Der hauptsächliche Zweck der Erstellung der internen Netzliste (Fig. 15E) war der, ein logisches Blockdiagramm zu erzeugen, das keine Blöcke mit einer Verzögerungseigenschaft hat. Tatsächlich wurde die Funktionalität von Element B getrennt, so daß die Verzögerungseigenschaft in diesem Block nicht mehr besteht. Mit anderen Worten werden keine der Eingänge zu einem der Blöcke während der eigentlichen Verarbeitung verzögert. Deshalb erfordern die Schritte zum in eine Abfolge Bringen keine Analyse, ob ein Block ein Zustandsblock ist, der eine Verzögerungseigenschaft hat, wie in dem Fall der ersten Ausführungsformen der BESCHRÄNKTEN und ALLGEMEINEN ABFOLGE Verfahren (Fig. 5 und 11).
- Das VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B) kehrt bei Block 450 zu Block 428 des SYSTEM TREIBER Verfahrens (Fig. 14A) zurück. Während dieses Blocks wird festgestellt, daß während der Erzeugung der internen Netzliste keine Fehler aufgetreten sind, und das ABFOLGE TREIBER Verfahren (Fig. 14F) wird aufgerufen, um die Elemente der internen Netzliste, die von dem VERARBEITE EXTERNE NETZLISTE Verfahren erstellt wurde, in eine Abfolge zu bringen. Bei Block 521 wird ein Blockliste mit nur den Namen der Blöcke in der internen zu verarbeitenden Netzliste erstellt. Der Zweck der Blockliste ist es, das Element in der internen Netzliste zu verfolgen, das gegenwärtig verarbeitet wird. Eine Darstellung der Blockliste ist in Fig. 17A in Reihe 591 gezeigt. Bei Block 524 (Fig. 14F) wird festgestellt, daß die Blockliste nicht leer ist. Bei Block 526 werden die Abfolgeliste, die aufgesuchte Liste initialisiert, die ZUSTAND Variable wird auf "in Ordnung" gesetzt, und der Zeiger auf die Blockliste wird auf das erste Element in der Blockliste, Element C, gesetzt (591, Fig. 17A).
- Fig. 17A ist eine tabellarische Beschreibung der verschiedenen Stufen zur Erstellung einer Abfolgeliste aus der Blockliste mittels des ABFOLGE TREIBER Verfahrens (Fig. 14A). Die Tabelle ist in fünf Spalten aufgeteilt, die erste Spalte ist der Zeiger für die Blockliste, die zweite Spalte ist die Blockliste, die dritte Spalte ist ein Stapel zur vorübergehenden Speicherung, die vierte Spalte ist eine Eingangsliste für jedes der Elemente (die von der internen Netzliste erhalten wurden, Fig. 15E), und die letzte Spalte ist die erstellte Abfolgeliste. Klammern [] werden in verschiedenen Positionen in der gesamten Tabelle verwendet, um zu symbolisieren, daß "dieser" Eingang oder "dieses" Element der Eingang oder das Element ist, das gegenwärtig analysiert wird.
- Bei Block 532 des ABFOLGE TREIBER Verfahrens (Fig. 14F) wird festgestellt, daß die ZUSTAND Variable auf "in Ordnung" gesetzt ist und daß noch weitere Blocklistenelemente in der Blockliste sind (591, Fig. 17A). Bei Block 538 wird das Element, auf das in der Blockliste gezeigt wird, Element C, überprüft, um festzustellen, ob es in der Abfolgeliste ist. Element C ist nicht in der Abfolgeliste, und das ABFOLGE Verfahren (Fig. 14G) wird bei Block 540 betreten. Bei Block 540 wird das Parameter Register gleich der Position des Blocklistenelements gesetzt, auf das gegenwärtig gezeigt wird, nämlich Element C.
- Bezugnehmend auf Fig. 14G wird bei Block 484 des ABFOLGE Verfahrens die Rückgabevariable auf "in Ordnung" gesetzt, und bei Block 486 wird das MÖGLICHE ABFOLGE LISTEN ELEMENT (PSLE, POTENTIAL SEQUENCE LIST ELEMENT) auf den Inhalt des PARAMETER REGISTERS gesetzt. Gegenwärtig beinhaltet der Inhalt des PARAMETER REGISTERS die Blocklistenposition für Element C. Bei Block 488 wird festgestellt, daß Element C nicht in der Abfolgeliste ist, und bei Block 490 wird festgestellt, daß Element C nicht in der aufgesuchten Liste ist, und bei Block 492 wird Element C in der aufgesuchten Liste abgelegt. Bei Block 494 wird der Eingangslistenzeiger an den Anfang der Eingangsliste von Element C gesetzt (593, Fig. 17A), die in der internen Netzliste von Element C sortiert ist, die in einem Speicherbereich gespeichert ist. Element C hat nur einen Eingang in seiner Eingangsliste, I&sub4; (2204, Fig. 15E). Bei Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" gesetzt ist, und der Eingangslistenzeiger zeigt auf Eingang I&sub4;. Block 498 wird betreten, um den Fortschreibungsausgangsprozeduraufruf herauszufinden, der den Eingang I&sub4; steuert. Insbesondere wird bei Block 500 der gegenwärtige Funktionskontext für Element C auf den Stapel verschoben (595, Fig. 17A), und bei Block 502 wird das Element, das Eingang I&sub4; steuert, in dem PARAMETER REGISTER abgelegt. Der Fortschreibungsausgangsprozeduraufruf von Element B (595, Fig. 17A) ist das Element, das Eingang I&sub4; steuert.
- Die Verarbeitung kehrt bei Block 484 zurück, während dem die RÜCKGABE Variable gleich "in Ordnung" gesetzt wird, und bei Block 486 wird der PSLE Zeiger gleich dem gegenwärtigen Inhalt des PARAMETER REGISTERS gesetzt, dem Fortschreibungsausgangsprozeduraufruf von Element B. Bei Block 488 wird eine Feststellung gemacht, daß der Fortschreibungsausgangsprozeduraufruf von Element B nicht in der Abfolgeliste ist, und bei Block 490 wird festgestellt, daß der Fortschreibungsausgangsprozeduraufruf von Element B nicht in der aufgesuchten Liste ist. Während Block 492 wird der Fortschreibungsausgangsprozeduraufruf von Element B in der aufgesuchten Liste abgelegt, und bei Block 494 wird der Eingangslistenzeiger an den Anfang der Eingangsliste des Fortschreibungsausgangsprozeduraufrufs von Element B gesetzt (597, Fig. 17A). Die Eingangsliste des Fortschreibungsausgangsprozeduraufrufs von Element B wird aus der internen Netzliste abgerufen (2200, Fig. 15E). Bei Block 496 wird festgestellt, daß die Rückgabe Variable gleich "in Ordnung" ist, und sie wird überprüft, um zu sehen, ob der Eingangslistenzeiger noch auf einen Eingang zeigt, I&sub4;. Der Zeiger zeigt auf I&sub1;. Block 498 wird betreten, um den Fortschreibungsausgangsprozeduraufruf herauszufinden, der den Eingang I&sub1; steuert. Insbesondere wird bei Block 500 der gegenwärtige Funktionskontext für den Fortschreibungsausgangsprozeduraufruf von Element B auf den Stapel verschoben (601, Fig. 17A). Bei Block 502 wird die Position des Fortschreibungsausgangsprozeduraufrufs, der den Eingang I&sub1; von dem Fortschreibungsausgangsprozeduraufruf von Element B steuert, in dem PARAMETER REGISTER abgelegt. Element A steuert Eingang I&sub1; der Fortschreibungsausgangsprozedur von Element B, so daß seine Position in dem Parameter Register abgelegt wird. Die Verarbeitung kehrt zu Block 484 zurück, während dem die Rückgabevariable gleich "in Ordnung" gesetzt wird, und bei Block 486 wird der interne Netzlistenzeiger gleich dem Inhalt des Parameter Registers gesetzt. Bei Block 488 wird eine Feststellung gemacht, daß Element A nicht in der Abfolgeliste ist, und bei Block 490 wird eine Feststellung gemacht, daß Element A nicht in der aufgesuchten Liste ist. Bei Block 492 wird Element A in der aufgesuchten Liste abgelegt, und bei Block 492 wird der Eingangslistenzeiger an den Anfang der Eingangsliste von A gesetzt (602, Fig. 17A). Element A ist ein Quellblock, was bedeutet, daß es keine Eingänge hat, und deshalb ist seine Eingangsliste leer (602, Fig. 17A). Bei Block 496 wird festgestellt, daß die Rückgabe Variable gleich "in Ordnung" ist, und daß in der Eingangsliste von Element A keine Eingänge sind. Bei Block 523 wird festgestellt, daß die Rückgabe Variable gleich "in Ordnung" ist, und bei Block 525 wird Element A in der Abfolgeliste abgelegt (603, Fig. 17A). Bei Block 527 wird Element A von der aufgesuchten Liste genommen, und bei Block 529 wird Element A aus der Blockliste entfernt (604, Fig. 17B).
- Bei Block 510 wird der Inhalt des Stapels überprüft, und es wird festgestellt, daß er nicht leer ist. Der Stapel enthält gegenwärtig Zeigerinformationen für die Fortschreibungsausgangsprozeduraufrufe von Element B und C (604, Fig. 17B). Block 514 wird betreten, um das letzte Element, das auf dem Stapel abgelegt worden ist, auf rekursive Weise zurückzugeben. Insbesondere wird bei Block 516 der gegenwärtige Wert der RÜCKGABE Variable in einem System Register zur vorübergehenden Speicherung abgelegt, und bei Block 518 wird die Kontextinformation für den Fortschreibungsausgangsprozeduraufruf von Element B aus dem Stapel entfernt (606, Fig. 17B). Der Stapel arbeitet als ein LIFO Zwischenspeicher; das letzte Element in dem Stapel wird als erstes Element aus dem Stapel entnommen. Element B war die letzte Kontextinformation, die auf dem Stapel abgelegt wurde, deshalb ist es das erste Element, das von dem Stapel entfernt wird. Bei Block 502 wird der Inhalt der RÜCKGABE Variable mit dem gegenwärtigen Inhalt, der in dem Systemregister gespeichert ist, gespeichert. Bei Block 508 wird der Eingangslistenzeiger zu dem nächsten Eingang in der Eingangsliste des Fortschreibungsausgangsprozeduraufrufs von Element B weiterbewegt. Es gibt keine weiteren Eingänge in der Eingangsliste des Fortschreibungsausgangsprozeduraufrufs von Element B. Bei Block 496 wird die RÜCKGABE Variable überprüft, um festzustellen, ob sie gleich "in Ordnung" ist, und eine Abfrage, wird durchgeführt, daß der Eingangslistenzeiger nicht auf einen Eingang zeigt. Bei Block 523 wird festgestellt, daß die Rückgabevariable gleich "in Ordnung" ist, und bei Block 525 wird der Fortschreibungsausgangsprozeduraufruf von Element B am Ende der Abfolgeliste abgelegt (608, Fig. 17B). Bei Block 527 wird der Fortschreibungsausgangsprozeduraufruf von Element B von der aufgesuchten Liste entnommen, und bei Block 529 wird der Fortschreibungsausgangsprozeduraufruf von Element B aus der Blockliste entfernt (610, Fig. 17B). Bei Block 510 wird der Stapel überprüft, um festzustellen, ob er leer ist. Der Stapel enthält noch Informationen für Element C, und deshalb wird bei Block 514 die rekursive Rückgabeprozedur betreten.
- Insbesondere wird bei Block 516 der gegenwärtige Inhalt der RÜCKGABE Variable in einem System Register abgelegt, und bei Block 518 wird die Zeigerinformation für Element C von dem Stapel genommen (612, Fig. 17B). Bei Block 520 wird der Inhalt der RÜCKGABE Variable mit dem gegenwärtig gespeicherten Inhalt des System Registers, wiederhergestellt. Bei Block 508 wird der Eingangslistenzeiger zu dem nächsten Eingang in der Eingangsliste von Element C weiterbewegt.
- Bei Block 496 wird die RÜCKGABE Variable überprüft, um festzustellen, ob sie gleich "in Ordnung" ist, und es wird festgestellt, daß der Eingangslistenzeiger nicht auf einen Eingang zeigt. Bei Block 523 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block wird der Fortschreibungsausgangsprozeduraufruf von Element C am Ende der Abfolgeliste abgelegt (614, Fig. 17B). Bei Block 527 wird Element C aus der aufgesuchten Liste entnommen, und bei Block 529 wird Element C aus der Blockliste entfernt (616, Fig. 17B). Bei Block 510 wird der Stapel überprüft, um zu sehen, ob er leer ist. Der Stapel ist gegenwärtig leer, weshalb die Verarbeitung bei Block 512 zu dem ABFOLGE TREIBER Verfahren zurückkehrt (542, Fig. 14F).
- Bei Block 542 des ABFOLGE TREIBER Verfahrens wird die ZUSTAND Variable gleich dem gegenwärtigen Inhalt der RÜCKGABE Variable gesetzt, und bei Block 544 wird festgestellt, daß der Zustand in der RÜCKGABE Variable auf "in Ordnung" gesetzt worden ist. Bei Block 551 wird der Blocklistenzeiger zu dem nächsten Element in der Blockliste weiterbewegt (617, Fig. 17B). Das nächste Element in der Blockliste ist Element D. Die Verarbeitung wird bei Block 532 fortgesetzt, während dem festgestellt wird, daß die ZUSTAND Variable gleich "in Ordnung" gesetzt ist, und daß noch weitere Elemente in der internen Netzliste sind. Bei Block 538 wird eine Feststellung gemacht, daß Element D nicht in der Abfolgeliste ist, und das ABFOLGE Verfahren wird bei Block 540 (Fig. 14F) betreten. Bei Block 540 wird das PARAMETER REGISTER gleich dem Blocklistenelement gesetzt, auf das gegenwärtig gezeigt wird, Element D.
- Bei Block 484 des ABFOLGE Verfahrens (Fig. 14G) wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und bei Block 486 wird der Inhalt des PSLE Zeigers auf den Inhalt des PARAMETER REGISTERS gesetzt, der auf die Position von Element D gesetzt worden ist. Bei Block 488 wird festgestellt, daß Element D nicht in der Abfolgeliste ist, und bei Block 490 wird festgestellt, daß Element D nicht in der aufgesuchten Liste ist. Bei Block 492 wird Element D in der aufgesuchten Liste abgelegt, und bei Block 494 wird der Eingangslistenzeiger von Element D an den Anfang seiner Eingangsliste gesetzt (618, Fig. 17B). Bei Block 496 wird ein Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß der Eingangslistenzeiger auf einen gültigen Eingang, I&sub3;, zeigt. Ein rekursiver Aufruf bei Block 498 findet dann den Fortschreibungsausgangsprozeduraufruf heraus, der Eingang I&sub3; von Element D steuert.
- Insbesondere wird bei Block 500 der gegenwärtige Funktionskontext für Element D auf den Stapel verschoben (620, Fig. 17B). Bei Block 502 wird die Zeigerinformation des Fortschreibungszustandsprozeduraufrufs von Element B in dem PARAMETER REGISTER abgelegt (620, Fig. 17B). Die Verarbeitung kehrt für diesen rekursiven Aufruf zu Block 484, der die RÜCKGABE Variable gleich "in Ordnung" setzt. Der PSLE Zeiger wird bei Block 486 gleich dem Inhalt des PARAMETER REGISTERS gesetzt, und bei Block 488 wird herausgefunden, daß der Fortschreibungszustandsprozeduraufruf von Element B nicht in der Abfolgeliste ist. Bei Block 490 wird festgestellt, daß der Fortschreibungszustandsprozeduraufruf von Element B nicht in der aufgesuchten Liste ist, und bei Block 492 wird der Fortschreibungszustandsprozeduraufruf von Element B in der aufgesuchten Liste abgelegt. Während Block 494 wird der Eingangslistenzeiger für den Fortschreibungszustandsprozeduraufruf von Element B an den Anfang seiner Eingangsliste gesetzt. Der Zeiger zeigt auf Eingang I&sub1; des Fortschreibungsausgangsprozeduraufrufs von Element B (622, Fig. 17C). Während Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" gesetzt ist, und daß der Eingangslistenzeiger auf einen Eingang, I&sub1;, zeigt. Der Zeiger auf den Fortschreibungszustandsprozeduraufruf von Element B und der PSLE Zeiger auf Eingang I&sub1; werden bei Block 500 auf den Stapel verschoben (624, Fig. 17C). Während Block 502 wird die PSLE Information für das Element, das den Eingang I&sub1; des Fortschreibungszustandsprozeduraufrufs von Element B steuert, in dem PARAMETER REGISTER abgelegt (durch Klammern um A in der Abfolgeliste dargestellt, 626, Fig. 17C). Die Verarbeitung wird bei Block 484 fortgesetzt, der die RÜCKGABE Variable gleich "in Ordnung" setzt. Der interne Netzlistenzeiger wird während Block 486 gleich dem Parameter Register gesetzt, und bei Block 488 wird festgestellt, daß Element A in der Abfolgeliste ist. Während Block 510 wird der Stapel überprüft, um festzustellen, ob er leer ist. Der Stapel hat gegenwärtig Kontextinformationen über den Fortschreibungszustandsprozeduraufruf von Element B und über den Fortschreibungsausgangsprozeduraufruf von Element D. Deshalb wird die rekursive Rückgabeprozedur bei Block 514 aufgerufen.
- Insbesondere wird während Block 516 der Inhalt der RÜCKGABE Variable in dem System Register abgelegt, und bei Block 518 wird der Kontext für den Fortschreibungszustandsprozeduraufruf von Element B von dem Stapel entfernt (628, Fig. 17C). Bei Block 520 wird der Inhalt der RÜCKGABE Variable zu dem Inhalt des System Registers wiederhergestellt. Bei Block 508 wird der Zeiger der Eingangsliste zu dem nächsten Eingang des Fortschreibungszustandsprozeduraufrufs von Element B, Eingang I&sub2;, weiterbewegt (630, Fig. 17C). Während Block 496 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß der Eingangslistenzeiger auf einen Eingang, I&sub2;, zeigt. Das rekursive Verfahren 498 wird dann aufgerufen, und ermittelt den Fortschreibungsausgangsprozeduraufruf, der Eingang I&sub2; des Fortschreibungszustandsprozeduraufrufs von Element B steuert. Das Element C steuert den Eingang I&sub2; des Fortschreibungszustandsprozeduraufrufs von Element B.
- Der rekursive Aufruf erfordert, daß der Kontext für den Fortschreibungszustandsprozeduraufruf von Element B und Eingang I&sub2; während Block 500 auf den Stapel verschoben werden (632, Fig. 17C). Während Block 502 wird die Zeigerinformation für Element C in dem Parameter Register abgelegt (633, Fig. 17C). Die Verarbeitung wird bei Block 484 fortgesetzt. Während Block 484 wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und während Block 486 wird der PSLE Zeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt. Während Block 488 wird festgestellt, daß Element C in der Abfolgeliste ist, und während Block 510 wird der Inhalt des Stapels überprüft, um zu sehen, ob er leer ist. Der Stapel ist nicht leer - er enthält Kontextinformationen über sowohl den Fortschreibungszustandsprozeduraufruf von Element B als auch den Fortschreibungsausgangsprozeduraufruf von Element D. Dann wird die rekursive Rückgabeprozedur von Block 514 betreten. Insbesondere wird während Block 516 der Inhalt der RÜCKGABE Variable in einem Systemregister abgelegt, und bei Block 538 wird der Kontext für den Fortschreibungszustandsprozeduraufruf von Element D von dem Stapel entfernt (634, Fig. 17C). Während Block 520 wird die RÜCKGABE Variable für den gegenwärtigen Inhalt des Systemregisters wiederhergestellt, und bei Block 508 wird der Eingangslistenzeiger zu der nächsten Position in der Eingangsliste der Fortschreibungszustandsprozedur von Element B weiterbewegt (635, Fig. 17C). Während Block 496 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" gesetzt ist, und daß der Eingangslistenzeiger nicht auf einen Eingang zeigt. Bei Block 523 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block 525 wird der Fortschreibungszustandsprozeduraufruf von Element B am Ende der Abfolgeliste abgelegt (636, Fig. 17D). Der Fortschreibungszustandsprozeduraufruf von Element B wird bei Block 527 aus der aufgesuchten Liste entfernt, und der Fortschreibungszustandsprozeduraufrufeintrag von Element B wird bei Block 529 aus dem Block entfernt (638, Fig. 17D).
- Der Stapel wird bei Block 510 überprüft, um festzustellen, ob er leer ist. Der Stapel ist gegenwärtig nicht leer. Die Kontextinformation von Element D verbleibt auf dem Stapel; deshalb wird bei Block 514 die rekursive Rückgabeprozedur betreten. Während Block 516 wird der Inhalt der RÜCKGABE Variable in dem System Register abgelegt, und bei Block 518 wird die Kontextinformation für Element D von dem Stapel entnommen (640, Fig. 17D). Während Block 520 wird die RÜCKGABE Variableninformation mit dem gegenwärtigen Inhalt des System Registers wiederhergestellt, und bei Block 508 wird der Eingangslistenzeiger zu dem nächsten Eingang in der Eingangsliste von Element D weiterbewegt (641, Fig. 17D). Bei Block 496 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und es wird festgestellt, daß der Eingangslistenzeiger nicht auf einen Eingang zeigt. Während Block 523 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und während Block 525 wird Element D am Ende der Abfolgeliste abgelegt (642, Fig. 17D). Während Block 527 wird Element D von der aufgesuchten Liste entfernt, und während Block 529 wird Element D von der internen Netzliste entfernt (644, Fig. 17D). Während Block 510 wird festgestellt, daß der Stapel leer ist, und bei Block 512 kehrt die Verarbeitung zu dem ABFOLGE TREIBER Verfahren bei Block 542 aus Fig. 14F zurück.
- Während Block 542 aus Fig. 14F wird festgestellt, daß die ZUSTAND Variable gleich dem Inhalt der RÜCKGABE Variable ist, und die ZUSTAND Variable wird überprüft, um zu sehen, ob sie gleich "in Ordnung" ist. Die ZUSTAND Variable ist gleich "in Ordnung", und während Block 551 wird der Blocklistenzeiger zu der nächsten Position in der Blockliste weiterbewegt. Es sind keine weiteren Elemente in der Blockliste, und deshalb wird bei Block 532 die Rückgabeprozedur bei Block 536 betreten, um die Verarbeitung bei dem SYSTEM TREIBER Verfahren bei Block 432 aus Fig. 14A wieder aufzunehmen. Bei Block 432 wird festgestellt, daß bei der in eine Abfolge Bringen des Blockdiagramms aus Fig. 15A keine Abfolgefehler aufgetreten sind. Während Block 434 wird ein Code als Darstellung der Prozeduraufrufe in der Abfolgeliste generiert, und dieser Code kann ausgeführt oder für eine spätere Ausführung gespeichert werden. Die Verarbeitung kehrt bei Block 436 zu der Aufrufroutine zurück.
- Bezugnehmend auf die Fig. 14A, B, E, F und G, 18A und B, 19, 20A, B, C und D wird nun ein ausführliches Beispiel der zweiten Ausführungsform für den ALLGEMEINEN Fall erörtert. Bezugnehmend auf Fig. 18A entsprechen die Blöcke 650, 652, 656 und 654 den Elementen A, B, C bzw. D der Netzliste (oder der externen Netzliste, die von der internen Netzliste zu unterscheiden ist). Die externe Netzliste als Darstellung des Blockdiagramms ist in Fig. 18B gezeigt. Wiederum ist die Reihenfolge der externen Netzliste zufällig bestimmt. Element A hat eine leere Durchführungsliste (2226, Fig. 18C) und Ausgang O&sub4;. Element B ist ein Zustandsblock mit Eingängen I&sub1; und I&sub2; und Ausgängen O&sub1; und O&sub2;. Ausgang O&sub1; von Element B hat eine leere Durchführungsliste, und Ausgang O&sub2; von Element B hat Eingang I&sub2; in seiner Durchführungsliste, wie in dem BIBLIOTHEK SPEICHER bei 2228 in Fig. 18C gezeigt. Element C hat Eingang I&sub4; und Ausgang O&sub3;. Eingang I&sub4; ist in der Durchführungsliste von Element C (2230, Fig. 18C). Element D hat Eingang I&sub3;, und Eingang I&sub3; ist in der Durchführungsliste von Element D (2232, Fig. 18C).
- Um die Prozeduraufrufe als Darstellung des Blockdiagramms aus Fig. 18A in eine korrekte Abfolge zu bringen, wird bei Block 424 das SYSTEM TREIBER Verfahren eingeleitet (Fig. 14A). Während Block 426 wird das VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B) aufgerufen, um eine erweiterte Version der externen Netzliste (oder eine interne Netzliste) zu generieren. Fig. 18B ist eine logische Darstellung des Blockdiagramms aus Fig. 18A, die durch die interne Netzliste aus Fig. 18E dargestellt wird. Die der Verarbeitung des VERARBEITE EXTERNE NETZLISTE Verfahrens zugeordnete Tätigkeit ist in Fig. 19 dargestellt. Dort gibt es acht Spalten, eine für den externen Netzlistenzeiger, eine zweite für die externe Netzliste, eine dritte und vierte für die Eingänge und Ausgänge von jedem Element in der externen Netzliste, eine fünfte für den internen Netzlistenzeiger, eine sechste Spalte für die resultierende interne Netzliste und die siebte und achte für die Eingänge und Ausgänge der Element in der internen Netzliste.
- Bezugnehmend auf Fig. 14B des VERARBEITE EXTERNE NETZLISTE Verfahrens werden bei Block 436 der externe Netzlistenzeiger und der interne Netzlistenzeiger an den Anfang beider Listen gesetzt, der externen und internen Netzlisten (692, Fig. 19). Während Block 438 wird der Zeiger zu dem nächsten externen Netzlistenelement, Element C, weiterbewegt (694, Fig. 19). Während Block 442 wird festgestellt, daß der externe Netzlistenzeiger nicht auf das Ende der externen Netzliste zeigt; die Element C, D, A und B verbleiben noch in der externen Netzliste. Während Block 444 wird Element C aus der externen Neztliste entfernt, und es wird in der internen Netzliste abgelegt (696, Fig. 19). Block 446 stellt fest, daß Element C keine Verzögerungseigenschaft hat (es ist kein Zustandsblock), und bei Block 440 wird der interne Netzlistenzeiger zu Element C weiterbewegt, und während Block 438 wird der externe Netzlistenzeiger zu Element D weiterbewegt (698, Fig. 19). Während Block 442 wird festgestellt, daß der Zeiger nicht auf das Ende der externen Netzliste zeigt, und bei Block 444 wird Element D aus der externen Netzliste entfernt, und es wird in der internen Netzliste abgelegt (700, Fig. 19). Während Block 446 wird festgestellt, daß Element D keine Verzögerungseigenschaft hat, und bei Block 440 wird der interne Netzlistenzeiger zu Element D weiterbewegt. Bei Block 438 wird der externe Netzlistenzeiger zu dem nächsten Element in der externen Netzliste, Element A, weiterbewegt (702, Fig. 19). Bei Block 442 wird festgestellt, daß der externe Netzlistenzeiger nicht auf das Ende der Netzliste zeigt, Element A und B verbleiben, und die bei Block 444 wird Element A aus der externen Netzliste entfernt, und es wird in der internen Netzliste abgelegt (704, Fig. 19). Bei Block 446 wird eine Feststellung gemacht, daß Element A keine Verzögerungseigenschaft hat, und bei Block 440 wird der interne Netzlistenzeiger zu Element A weiterbewegt (705, Fig. 19). Während Block 438 wird der externe Netzlistenzeiger zu Element B weiterbewegt (705, Fig. 19). Während Block 442 wird festgestellt, daß der externe Zeiger nicht am Ende der externen Liste ist, und bei Block 440 wird Element B aus der externen Netzliste entfernt, und es wird in der internen Netzliste abgelegt (706, Fig. 19). Während Block 446 wird festgestellt, daß Element B eine Verzögerungseigenschaft hat, und bei Block 448 wird das GETRENNTE FUNKTIONALITÄT Verfahren (Fig. 14E) zur Generierung der internen Netzlistenelemente als Darstellung von Element B betreten. Das GETRENNTE FUNKTIONALITÄT Verfahren aus Fig. 14E wird betreten, um Element B in dem allgemeinen Fall korrekt zu verarbeiten.
- Während Block 462 aus Fig. 14E wird die Variable ANZAUSG gleich der Anzahl der Ausgänge von Element B gesetzt. Bei Block 462 wird der Inkrementzähler auf 1 gesetzt. Block 484 setzt das erste Element gleich dem Fortschreibungsausgangsprozeduraufruf, der dem Ausgang O&sub1; zugeordnet ist, und setzt seine Eingangsliste gleich der Durchführungsliste, die dem Ausgang O&sub1; zugeordnet ist (708, Fig. 19). Block 491 sichert die Definition des Fortschreibungszustandsprozeduraufrufs für zukünftige Zugriffe. Bei Block 464 wird festgestellt, daß der Inkrementzähler I noch kleiner der Anzahl der Ausgänge von Element B ist. Während Block 466 wird der Fortschreibungsausgangsprozeduraufruf, der O&sub2; zugeordnet ist, in das Element kopiert, das von Element B dargestellt wird. Während Block 468 werden die Eingänge des Fortschreibungsausgangsprozeduraufrufs von Element B gesetzt. Die Eingänge werden gleich den Eingängen in der Durchführungsliste von Ausgang O&sub2; gesetzt (708, Fig. 19). Während Block 470 wird die Ausgangsliste des Fortschreibungsausgangsprozeduraufrufs von Element B für Ausgang O&sub2; gleich Ausgang O&sub2; gesetzt. Während Block 472 wird I erhöht, und bei Block 474 wird der interne Netzlistenzeiger weiterbewegt (708, Fig. 19). Bei Block 464 wird festgestellt, daß I größer ist als ANZAUSG, und bei Block 476 wird der Fortschreibungszustandsprozeduraufruf der internen Netzlistenelemente in die letzte Netzlistenelementposition kopiert (710, Fig. 19). Bei Block 478 wird die Eingangsliste des Fortschreibungsausgangszustandsprozeduraufrufs von Element B gleich den Eingängen in der Eingangsliste von Eleinent B, I&sub1; und I&sub2;, gesetzt. Während Block 480 wird der interne Netzlistenzeiger zu dem letzten Element in der internen Netzliste weiterbewegt (712, Fig. 19), und bei Block 482 kehrt die Verarbeitung zurück zu dem VERARBEITE EXTERNE NETZLISTE Verfahren bei Block 440 (Fig. 14B). Während Block 440 wird der interne Netzlistenzeiger zu der nächsten Position in der internen Netzliste weiterbewegt, und bei Block 438 wird der externe Netzlistenzeiger zu dem nächsten externen Netzlistenelement weiterbewegt. Bei Block 442 wird festgestellt, daß der externe Netzlistenzeiger nun auf das Ende der externen Netzliste zeigt, und bei Block 450 kehrt die Verarbeitung zu dem SYSTEM TREIBER Verfahren bei Block 428 zurück (Fig. 14A). Während Block 428 wird eine Feststellung gemacht, daß während der Ausführung des VERARBEITE EXTERNE NETZLISTE Verfahrens (Fig. 14B) keine Fehler aufgetreten sind, und bei Block 430 wird das ABFOLGE TREIBER Verfahren (Fig. 14F) betreten.
- Fig. 18B ist eine logische Darstellung der internen Netzliste. Die Blöcke 650, 654 und 656, die den Elementen A, D und C in der internen Netzliste entsprechen, sind nicht geändert worden. Block A hat noch Ausgang O&sub4;, Block D hat Eingang I&sub3; und Block C hat Eingang I&sub4; und Ausgang O&sub3;. Der Zustandsblock B wurde nun in drei Blöcke erweitert als Darstellung der Fortschreibungsausgangsprozeduraufrufe und der Fortschreibungszustandsprozeduraufrufe, die dem Zustandsblock zugeordnet sind. Block B[UO(AUSG1)] entspricht dem Fortschreibungsausgangsprozeduraufruf von Element B, der Ausgang O&sub1; zugeordnet ist. Block B[UO(AUSG2)] entspricht dem Fortschreibungsausgangsprozeduraufruf von Element B, der Ausgang O&sub2; zugeordnet ist. Dieser Block hat O&sub2; in seiner Ausgangsliste und I&sub2; in seiner Eingangsliste. Block B(US) entspricht dem Fortschreibungszustandsprozeduraufruf von Element B, und er hat Eingänge I&sub1; und I&sub2; in seiner Eingangsliste. Die obigen Informationen werden in der internen Netzliste gespeichert, wie in Fig. 18E gezeigt.
- Nunmehr bezugnehmend auf die Fig. 14F und G, 20A, B, C und D wird nun eine ausführliche Beschreibung eines ABFOLGE TREIBER Verfahrens (Fig. 14F) und eines ABFOLGE Verfahrens (Fig. 14B) zum in eine Abfolge Bringen der internen Netzliste (Fig. 18A) erläutert. Während Block 521 wird eine Kurzform Version oder Blockliste der internen Netzliste aus Fig. 18B erstellt. Während Block 524 aus Fig. 14F wird eine Feststellung gemacht, daß die interne Netzliste, wie sie von dem VERARBEITE EXTERNE NETZLISTE Verfahren (Fig. 14B) erstellt wurde, nicht leer ist. Während Block 526 werden die Abfolgeliste und die aufgesuchte Liste initialisiert, die ZUSTAND Variable wird gleich "in Ordnung" gesetzt, und der Zeiger wird gleich dem ersten Element in der Blockliste gesetzt. Die Fig. 20A, B und C sind Ergebnistabellen, die die Änderungen zeigen, die dem Blocklistenzeiger, der Blockliste, dem Stapel, den Eingangslisten und den Abfolgelisten widerverfahren.
- Reihe 714 aus Fig. 20A zeigt den Blocklistenzeiger, der auf das erste Element der Blockliste, Element C, zeigt. Während Block 532 wird eine Feststellung gemacht, daß die ZUSTAND Variable gleich "in Ordnung" ist, und daß noch zu analysierende Elemente in der internen Netzliste sind. Bei Block 538 wird eine Feststellung gemacht, daß das Blocklistenelement, auf das gezeigt wird, Element C, nicht in der Abfolgeliste ist. Das ABFOLGE Verfahren (Fig. 14G) wird bei Block 540 betreten. Bei Block 540 wird das PARAMETER REGISTER für das ABFOLGE Verfahren gleich dem Zeiger von Element C gesetzt.
- Bezugnehmend auf das ABFOLGE Verfahren aus Fig. 14G wird bei Block 484 die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und bei Block 486 wird der PSLE Zeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt. Der PSLE Zeiger wird von den Klammern um Element C und Eingang I&sub4; in Reihe 716 aus Fig. 20A dargestellt. Während Block 488 wird festgestellt, daß Element C nicht in der Abfolgeliste ist, und bei Block 490 wird festgestellt, daß Element C nicht in der aufgesuchten Liste ist. Bei Block 492 wird Element C in der aufgesuchten Liste abgelegt, und bei Block 494 wird der Eingangslistenzeiger für Element C an den Anfang der Eingangsliste für Element C gesetzt (716, Fig. 20A). Während Block 496 wird ein Abfrage durchgeführt, daß die RÜCKGABE Variable gleich "in Ordnung" gesetzt ist, und daß weitere Eingänge in der Eingangsliste von Element C sind, I&sub4;. Das rekursive Verfahren 498 wird aufgerufen, um den Fortschreibungsausgangsprozeduraufruf zu ermitteln, der Eingang I&sub4; steuert. Insbesondere wird während Block 500 der gegenwärtige Funktionskontext von Element C auf den Stapel verschoben (718, Fig. 20A). Bei Block 502 wird das Element, das Eingang I&sub4; steuert, der Fortschreibungsausgangsprozeduraufruf von Element B, der Ausgang O&sub1; zugeordnet ist, in dem PARAMETER REGISTER abgelegt. Während Block 484 wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und während Block 486 wird der PSLE Zeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt (720, Fig. 20A). Während Block 488 wird eine Feststellung gemacht, daß der Fortschreibungsausgangsprozeduraufruf von Element B, der Ausgang O&sub1; zugeordnet ist, nicht in der Abfolgeliste ist, und bei Block 490 wird festgestellt, daß der Fortschreibungsausgangsprozeduraufruf von Element B, der Ausgang O&sub1; zugeordnet ist, nicht in der aufgesuchten Liste ist. Während Block 492 wird der Fortschreibungsausgangsprozeduraufruf von Element B, der Ausgang O&sub1; zugeordnet ist, in der aufgesuchten Liste abgelegt. Während Block 492 wird der Eingangslistenzeiger an den Anfang der Eingangsliste gesetzt, die dem Fortschreibungsausgangsprozeduraufruf von Element B für Ausgang O&sub1; zugeordnet ist (722, Fig. 20A). Während Block 496 wird eine Abfrage durchgeführt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß in dem Fortschreibungsausgangsprozeduraufruf von Element B für die Eingangsliste von Ausgang O&sub1; keine Eingänge sind. Während Block 523 wird eine Eeststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" gesetzt ist, und während Block 525 wird die Fortschreibungsausgangsprozedur von Element B für Ausgang O&sub1; in der Abfolgeliste abgelegt (722, Fig. 20A). Während Block 527 wird dieses Element von der aufgesuchten Liste entnommen, und bei Block 529 wird dieses Element von der Blockliste entfernt (724, Fig. 20A). Während Block 510 wird der Stapel überprüft, um festzustellen, ob Elemente übrig bleiben. Der Kontext für Element C ist auf dem Stapel; deshalb wird bei Block 514 das rekursive Rückgabeverfahren aufgerufen.
- Während Block 516 wird der Inhalt der Rückgabe Variable in dem System Register abgelegt, und während Block 518 wird der Inhalt für Element C von dem Stapel entfernt (726, Fig. 20A). Während Block 520 wird der Inhalt der RÜCKGABE Variable wiederhergestellt, um gleich dem Inhalt des System Registers zu sein, und bei Block 508 wird der Eingangslistenzeiger für Element C zu dem nächsten Eingang weiterbewegt (728, Fig. 20A). Während Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß keine weiteren Elemente, auf die gezeigt werden soll, in der Eingangsliste von Element C sind. Während Block 523 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block 525 wird Element C am Ende der Abfolgeliste abgelegt (730, Fig. 20A). Während Block 527 wird Element C aus der aufgesuchten Liste entfernt, und während Block 529 wird Element C aus der Blockliste entfernt (732, Fig. 20A). Während Block 510 wird festgestellt, daß der Stapel nun leer ist, und bei Block 512 kehrt die Verarbeitung zu dem ABFOLGE TREIBER Verfahren (Fig. 14F) bei Block 542 zurück.
- Während Block 542 wird die ZUSTAND Variable gleich dem Inhalt der RÜCKGABE Variable gesetzt, und bei Block 544 wird eine Feststellung gemacht, daß die ZUSTAND Variable gleich "in Ordnung" ist. Während Block 551 wird der interne Netzlistenzeiger zu dem nächsten Element in der internen Netzliste, Element D, weiterbewegt. Bei Block 542 wird eine Feststellung gemacht, daß die ZUSTAND Variable gleich "in Ordnung" ist, und daß noch weitere interne Netzlistenelemente in der internen Netzliste sind. Während Block 538 wird ein Feststellung gemacht, daß Element D nicht in der Abfolgeliste ist, und bei Block 540 wird das ABFOLGE Verfahren (Fig. 14G) betreten. Während Block 540 aus Fig. 14F wird das PARAMETER REGISTER gleich dem Blocklistenzeiger für Element D gesetzt.
- Während Block 484 des ABFOLGE Verfahrens (Fig. 14G) wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und bei Block 484 wird der PSLE Zeiger gleich dem PARAMETER REGISTER gesetzt (736, Fig. 20B). Bei Block 488 wird eine Feststellung gemacht, daß Element D nicht in der Abfolgeliste ist, und bei Block 490 wird eine Feststellung gemacht, daß Element D nicht in der aufgesuchten Liste ist. Während Block 492 wird Element D in der aufgesuchten Liste abgelegt, und bei Block 494 wird der Eingangslistenzeiger an den Anfang der Eingangsliste von Element D gesetzt (736, Fig. 20B). Während Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß in der Eingangsliste von Element D ein Eingang ist, auf den gezeigt wird, I&sub3; (736, Fig. 20B). Das rekursive Verfahren 498 wird betreten, um den Fortschreibungsausgangsprozeduraufruf zu ermitteln, der den Eingang I&sub3; von Element D steuert. Insbesondere wird während Block 500 der Funktionskontext von Element D auf den Stapel verschoben (738, Fig. 20B). Während Block 502 wird die Position von Element A in der Blockliste, die den Eingang I&sub3; steuert, in dem PARAMETER REGISTER abgelegt.
- Die Verarbeitung wird bei Block 484, während dem die RÜCKGABE Variable gleich "in Ordnung" gesetzt wird, und bei Block 486 fortgesetzt, während dem der PSLE Zeiger gleich dem PARAMETER REGISTER gesetzt wird (742, Fig. 20B). Während Block 488 wird eine Feststellung gemacht, daß Element A nicht in der Abfolgeliste ist, und bei Block 490 wird eine Feststellung gemacht, daß Element A nicht in der aufgesuchten Liste ist. Während Block 492 wird Element A in der aufgesuchten Liste abgelegt, und bei Block 494 wird der Eingangslistenzeiger an den Anfang der Eingangsliste von Element A gesetzt. Bei Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß in der Eingangsliste von Element A keine Eingänge sind. Bei Block 423 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block 425 wird Element A am Ende der Abfolgeliste abgelegt (742, Fig. 20B). Während Block 527 wird Element A von der aufgesuchten Liste entnommen, und während Block 529 wird Element A aus der Blockliste entfernt (744, Fig. 20B).
- Während Block 510 wird eine Feststellung gemacht, daß der Stapel nicht leer ist, und die rekursive Rückgabeprozedur von Block 514 wird betreten, um den Funktionskontext für Element D aus dem Stapel zu entfernen. Insbesondere wird während Block 516 der gegenwärtige Inhalt der RÜCKGABE Variable in dem System Register abgelegt. Während Block 518 wird der Kontext von Element D von dem Stapel entfernt (746, Fig. 20B). Während Block 520 wird der Inhalt der RÜCKGABE Variable gleich dem gegenwärtigen Inhalt des System Registers wiederhergestellt, und bei Block 508 wird der Eingangslistenzeiger von Element D zu dem nächsten Eingang weiterbewegt (748, Fig. 20B). Während Block 496 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß in der Eingangsliste von Element D keine weiteren Eingänge sind. Bei Block 523 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block 525 wird Element D am Ende der Abfolgeliste abgelegt (750, Fig. 20B). Bei Block 527 wird Element D aus der aufgesuchten Liste entnommen, und bei Block 529 wird Element D aus der Blockliste entfernt (752, Fig. 20B). Während Block 510 wird festgestellt, daß der Stapel nun leer ist, und bei Block 512 kehrt die Verarbeitung zu dem ABFOLGE TREIBER Verfahren (Fig. 14F) bei Block 542 zurück.
- Während Block 542 des ABFOLGE TREIBER Verfahrens (Fig. 14G) wird die ZUSTAND Variable gleich der RÜCKGABE Variable gesetzt, und bei Block 544 wird festgestellt, daß die ZUSTAND Variable gleich "in Ordnung" ist. Während Block 551 wird der Blocklistenzeiger zu dem nächsten Element, dem Fortschreibungsausgangsprozeduraufruf von Elment D für Ausgang O&sub2;, weiterbewegt. Während Block 532 wird eine Feststellung gemacht, daß die ZUSTAND Variable gleich "in Ordnung" ist, und daß noch weitere Elemente in der Blockliste sind. Während Block 538 wird eine Feststellung gemacht, daß der Fortschreibungsausgangsprozeduraufruf von Element D für Ausgang O&sub2; nicht in der Abfolgeliste ist, und bei Block 540 wird das ABFOLGE Verfahren eingeleitet (Fig. 14G). Bei Block 540 wird das PARAMETER REGISTER gleich dem internen Netzlistenzeiger für den Fortschreibungsausgangsprozeduraufruf von Element D für Ausgang O&sub2; gesetzt. Während Block 484 aus Fig. 14G wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und bei Block 486 wird der PSLE Zeiger gleich dem PARAMETER REGISTER gesetzt (756, Fig. 20C). Bei Block 488 wird festgestellt, daß der Fortschreibungsausgangsprozeduraufruf von Element B für Ausgang O&sub2; nicht in der Abfolgeliste ist, und bei Block 490 wird festgestellt, daß dieses Element auch nicht in der aufgesuchten Liste ist. Während Block 492 wird dieser Elementeneintrag in der aufgesuchten Liste abgelegt, und während Block 494 wird der Eingangslistenzeiger für dieses Element gleich dem Anfang der Eingangsliste gesetzt (756, Fig. 20C). Während Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß noch weitere Eingänge in der Eingangsliste dieses Elements sind. Das rekursive Verfahren 498 wird betreten, um den Fortschreibungsausgangsprozeduraufruf zu ermitteln, der Eingang I&sub2; steuert. Insbesondere wird bei Block 500 der Kontext für den Fortschreibungsausgangsprozeduraufruf von Element B für Ausgang O&sub2; auf den Stapel verschoben (758, Fig. 20C). Während Block 502 wird die Position von Element C in einem PARAMETER REGISTER abgelegt. Die Verarbeitung wird rekursiverweise bei Block 484 fortgesetzt, während dem die RÜCKGABE Variable gleich "in Ordnung" gesetzt wird, und während Block 486 wird der interne Netzlistenzeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt. Während Block 488 wird eine Feststellung gemacht, daß Element C in der Abfolgeliste ist, und bei Block 510 wird eine Feststellung gemacht, daß noch ein Element auf dem Stapel übrig ist (758, Fig. 20C). Das rekursive Rückgabeverfahren 514 wird aufgerufen, um das gegenwärtige Element auf dem Stapel zu entfernen, den Fortschreibungsausgangsprozeduraufruf von Element B für Ausgang O&sub2;.
- Insbesondere wird während Block 516 der Inhalt der RÜCKGABE Variable in dem System Register abgelegt, und bei Block 518 wird der Fortschreibungsausgangsprozeduraufruf von Element B für Ausgang O&sub2; von dem Stapel entfernt (762, Fig. 20C). Während Block 520 wird der gegenwärtige Inhalt des System Registers wiederhergestellt, und bei Block 508 wird der Eingangslistenzeiger zu dem nächsten Eingang des Fortschreibungsausgangsprozeduraufrufs von Element B für Ausgang O&sub2; weiterbewegt (764, Fig. 20C). Während Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß in der Eingangsliste dieses Elements keine Eingänge sind. Bei Block 523 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block 525 wird dieses Element am Ende der Abfolgeliste abgelegt (766, Fig. 20C). Während Block 527 wird der Fortschreibungsausgangsprozeduraufruf von Element B für Ausgang O&sub2; aus der aufgesuchten Liste und aus der Blockliste entfernt (768, Fig. 20C). Während Block 510 wird eine Feststellung gemacht, daß der Stapel nun leer ist, und bei Block 512 kehrt die Verarbeitung zu dem ABFOLGE TREIBER Verfahren (Fig. 14F) bei Block 542 zurück. Während Block 542 wird die ZUSTAND Variable gleich der RÜCKGABE Variable gesetzt, und bei Block 544 wird festgestellt, daß die ZUSTAND Variable gleich "in Ordnung" ist. Während Block 551 wird der Blocklistenzeiger zu dem Fortschreibungszustandsprozeduraufruf von Element B weiterbewegt, und bei Block 532 wird eine Feststellung gemacht, daß der ZUSTAND gleich "in Ordnung" ist, und daß noch ein Element in der Blockliste übrig ist, B(US). Während Block 538 wird eine Feststellung gemacht, daß der Fortschreibungszustandsprozeduraufruf von Element B nicht in der Abfolgeliste ist, und bei Block 540 wird das ABFOLGE Verfahren eingeleitet (Fig. 14G). Während Block 540 wird das PARAMETER REGISTER gleich der Zeigerposition des Fortschreibungszustandsprozeduraufrufs von Element B gesetzt.
- Während Block 484 aus Fig. 14G wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und während Block 486 wird der PSLE Zeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt (770, Fig. 20C). Während Block 488 wird eine Feststellung gemacht, daß die Fortschreibungszustandsprozedur des Elements nicht in der Abfolgeliste ist, und während Block 490 wird festgestellt, daß der Fortschreibungszustandsprozeduraufruf von Element B auch nicht in der aufgesuchten Liste ist. Während Block 492 wird dieses Element in der aufgesuchten Liste abgelegt. Während Block 494 wird der Eingangslistenzeiger für den Fortschreibungszustandsprozeduraufruf von Element B an den Anfang seiner Eingangsliste gesetzt (772, Fig. 20C). Während Block 496 wirdeine Abfrage durchgeführt/ daß die RÜCKGABE Variable gleich "in Ordnung" ist, und ob noch weitere Element in der Eingangsliste des Fortschreibungszustandsprozeduraufrufs von Element B sind. Das rekursive Verfahren wird aufgerufen, um den Fortschreibungszustandsprozeduraufruf zu ermitteln, der Eingang I&sub1; steuert. Insbesondere wird während Block 500 der Kontext des Fortschreibungszustandsprozeduraufrufs von Element B auf den Stapel verschoben (774, Fig. 20D). Während Block 502 wird die Zeigerposition von Element A in dem PARAMETER REGISTER abgelegt. Bei Block 484 wird die RÜCKGABE Variable gleich "in Ordnung" gesetzt, und bei Block 486 wird der PSLE Zeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt (776, Fig. 20D). Während Block 488 wird eine Feststellung gemacht, daß Element A in der Abfolgliste ist, und während Block 410 wird der Stapel überprüft, und es wird festgestellt, daß der Fortschreibungszustandsprozeduraufruf von Element B momentan auf dem Stapel ist. Die rekursive Rückgabeprozedur 514 wird betreten, um den Fortschreibungszustandsprozeduraufruf von Element B von dem Stapel zu entfernen. Insbesondere wird während Block 516 der Inhalt der RÜCKGABE Variable in dem System Register abgelegt, und während Block 518 wird der Kontext des Fortschreibungszustandsprozeduraufrufs von Element B von dem Stapel entfernt (778, Fig. 20D). Während Block 520 wird der Inhalt der RÜCKGABE Variable mit dem gegenwärtigen Inhalt des System Registers wiederhergestellt, und bei Block 508 wird der Eingangslistenzeiger, der dem Fortschreibungszustandsprozeduraufruf von Element B zugeordnet ist, zu dem nächsten Eingang, I&sub2;, weiterbewegt (780, Fig. 20D). Während Block 496 wird eine Feststellung gemacht, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß noch weitere Eingänge in der Eingangsliste des Fortschreibungszustandsprozeduraufrufs von Element D sind.
- Das rekursive Verfahren 498 wird aufgerufen, um den Fortschreibungsausgangsprozeduraufruf zu ermitteln, der Eingang I&sub2; steuert. Insbesondere wird während Block 500 der Kontext für den Fortschreibungszustandsprozeduraufruf von Element B auf den Stapel verschoben (782, Fig. 20D). Während Block 502 wird die Zeigerposition von Element C in dem PARAMETER REGISTER abgelegt, und die Verarbeitung wird bei Block 484 fortgesetzt, während dem die RÜCKGABE Variable gleich "in Ordnung" gesetzt wird. Bei Block 486 wird der Blocklistenzeiger gleich dem Inhalt des PARAMETER REGISTERS gesetzt (784, Fig. 20D). Während Block 488 wird eine Feststellung gemacht, daß Element C in der Abfolgeliste ist. Bei Block 510 wird eine Feststellung gemacht, daß der Fortschreibüngszustandsprozeduraufruf von Element B auf dem Stapel ist. Die rekursive Rückgabeprozedur 514 wird betreten, um den Fortschreibungszustandsprozeduraufruf von Element B von dem Stapel zu nehmen. Insbesondere wird bei Block 516 der Inhalt der RÜCKGABE Variable in dem System Register abgelegt, und bei Block 518 wird der Kontext des Fortschreibungszustandsprozeduraufrufs von Element B von dem Stapel entfernt (786, Fig. 20D). Während Block 520 wird der Inhalt der RÜCKGABE Variable gleich dem gegenwärtigen Inhalt des System Registers gesetzt, und während Block 508 wird der Eingangslistenzeiger zu dem nächsten Eingang der Fortschreibungszustandsprozedur von Element B weiterbewegt (788, Fig. 20D). Bei Block 496 wird festgestellt, daß die RÜCKGABE Variable gleich "in Ordnung" ist, und daß in der Eingangsliste des Fortschreibungszustandsprozeduraufrufs von Element B keine weiteren Eingänge sind. Während Block 523 wird eine Abfrage durchgeführt, ob die RÜCKGABE Variable gleich "in Ordnung" ist, und bei Block 525 wird die Fortschreibungszustandsprozedur von Element B am Ende der Abfolgeliste abgelegt (790, Fig. 20D). Während Block wird der Fortschreibungszustandsprozeduraufruf von Element B von der aufgesuchten Liste entfernt, und während Block 529 wird der Fortschreibungszustandsprozeduraufruf von Element B von der Blockliste entfernt (800, Fig. 20D). Während Block 510 wird eine Feststellung gemacht, daß nun keine Elemente auf dem Stapel übrig sind, und während Block 512 kehrt die Verarbeitung zu dem ABFOLGE TREIBER Verfahren (Fig. 14F) bei Block 542 zurück.
- Während Block 542 des ABFOLGE TREIBER Verfahrens (Fig. 14F) wird die ZUSTAND Variable gleich dem Inhalt der RÜCKGABE Variable gesetzt, und bei Block 544 wird eine Feststellung gemacht, daß die ZUSTAND Variable gleich "in Ordnung" ist. Während Block 550 wird der Blocklistenzeiger zu dem nächsten Element in der internen Netzliste weiterbewegt, es gibt keines. Während Block 532 wird eine Feststellung gemacht, daß die ZUSTAND Variable gleich "in Ordnung" ist, und daß in der Blockliste keine weiteren Elemente sind. Die Verarbeitung kehrt bei Block 536 zu dem SYSTEM TREIBER Verfahren (Fig. 14A) bei Block 432 zurück.
- Während Block 432 des SYSTEM TREIBER Verfahrens wird eine Feststellung gemacht, daß während der Verarbeitung des ABFOLGE TREIBER Verfahrens (Fig. 14F) keine Abfolgefehler aufgetreten sind. Während Block 434 wird der Code als Darstellung der Abfolgeliste generiert. Zusätzlich kann während Block 434 der generierte Code ausgeführt werden, um das Blockdiagramm aus Fig. 18A zu simulieren. Nachdem die Simulation ausgeführt wurde, kehrt die Verarbeitung zu dem aufrufenden Programm bei Block 436 zurück.
- Bis jetzt verwendeten die Simulatoren, die beschrieben wurden, vier Arten von Abfolgealgorithmen, beschränkte Arten - Fig. 5A, B und C; 14A, B, C, D, F und G; und die allgemeinen Arten - Fig. 11A, B, C und D und 14A, B, E, F und G, die eine in eine Abfolge gebrachte Liste mit Softwareprozeduraufrufen erzeugten. Diese Softwareprozeduraufrufe könnten als eine Liste von Anfangsadressen von vorkompilierten Prozeduren (z.B. Unterroutinen) dargestellt werden, oder könnten Quellcode sein, der aus Unterroutinenaufrufen zu Programmen als Darstellungen der Blöcke besteht. Beide Arten der Prozeduraufrufe können ausgeführt werden, um eine Blockdiagramm zu simulieren.
- Die Fig. 21 und 26 sind Fluß-Blockdiagramme der LAUFZEIT ABFOLGE Algorithmen. Diese Algorithmen erzeugen nicht eine in eine Abfolge gebrachte Liste mit Softwareprozeduraufrufen oder vorkompiliertem auszuführendem Code. Stattdessen führen sie die Fortschreibungsausgangsprozeduren als Darstellung der Blöcke während eines einzigen Zeitschritts mehrere Male aus, bis sich die Ausgangswerte des Blocks nicht mehr änderen. Danach wird die Fortschreibungszustandsprozedur von jedem Block aufgerufen. Der Vorteil der Laufzeit Simulatoren gegenüber den Simulatoren, die vorstehend behandelt wurden, ist der, daß sie oft zu einer vereinfachten Echtzeit Implementierung führen werden.
- Die Fig. 21 und 26A und 26B sind zwei Ausführungsformen von LAUFZEIT SIMULATOREN. Die LAUFZEIT SIMULATOREN modellieren auch Zustandsblöcke mit zwei getrennten Prozeduraufrufen; einer oder mehreren Fortschreibungsausgangsprozeduren und einer Fortschreibungszustandsprozedur. Beide LAUFZEIT SIMULATOREN erfordern, daß die Fortschreibungsausgangsprozedur für jeden der Blöcke mehrere Male pro Zeitschritt (oder Iteration) verarbeitet wird. Im wesentlichen ist der Zweck des LAUFZEIT SIMULATORS der, die Fortschreibungsausgangsprozeduren auszuführen, bis keine Änderungen der Eingänge zu jedem der Blöcke mehr auftreten. Anders ausgedrückt werden die Fortschreibungsausgangsprozeduren ausgeführt, bis sich alle Ausgangswerte für mindestens einen Zeitschritt nicht ändern. Wenn dies auftritt, rufen beide LAUFZEIT SIMULATOREN, Fig. 21 und 26, die Fortschreibungszustandsprozeduren auf, die den Blöcken, die einen Zustand haben, zugeordnet sind, und implementieren sie einmal pro Zeitschritt. Dieser gleichen Prozedur wird für jeden Zeitschritt einer Simulation gefolgt. Der einzige Nachteil von beiden LAUFZEIT SIMULATOREN ist der, daß sie verarbeitungsmäßig ineffizient sind. Das bedeutet, daß mehr Datenverarbeitung ausgeführt werden muß, wenn ein bestimmtes System simuliert wird, als bei den nicht-LAUFZEIT SIMULATOREN erforderlich wäre. Oft wird dedizierte Hardware bestehend aus einer Sammlung von Modulen, die jeweils progammiert werden können, verwendet, um bestimmte Funktionen auszuführen. Die LAUFZEIT SIMULATOREN bieten den bedeutenden Vorteil, daß sie in der Lage sind, ein System mit solch einer Sammlung von Modulen zu implementieren, unter Einsatz eines Minimums an Datenfluß und Modulsteuerung. Dies führt zu Hardwarevereinfachung und entsprechend zu einem Gesamtverarbeitungsvorteil.
- Fig. 21 ist ein Fluß-Blockdiagramm eines LAUFZEIT SIMULATORS, der die Fortschreibungsausgangsprozeduren für einen besonderen Block "N" Mal während eines Zeitschritts ausführt. "N" ist eine vorgegebene Anzahl von Ausführungen oder Unteriterationen pro Zeitschritt. "N" wird durch die Verfahren bestimmt, die in den Fig. 22A und 22B und Fig. 23 gezeigt werden. Die richtige Wahl des Wertes für "N" stellt sicher, daß sich die Ausgänge von allen Blöcken in dem Diagramm beruhigen, bevor die Fortschreibungszustandsprozeduren für jeden der Blöcke mit einem Zustand ausgeführt werden. Insbesondere wird bezugnehmend auf Block 804 aus Fig. 21 die Unterroutine ANZAHL DER UNTERITERATIONEN (Fig. 22A und 22B) betreten, um die Anzahl "N" der Unteriterationen zu berechnen, die die Fortschreibungsausgangsprozeduren für jeden Block Vorzeitschritt auszuführen sind.
- Während Block 806 wird eine ANZAHL Variable gleich Null gesetzt, und N wird gleich UNTERIT gesetzt; UNTERIT ist gleich der Anzahl von Unteriterationen, die pro Zeitschritt auszuführen sind (berechnet von dem ANZAHL DER UNTERITERATIONEN Verfahren (Fig. 22A, 22B und 22C)). Während Block 808 wird ein Inkrement 1 gleich Null gesetzt, und während der Blöcke 810, 812 und 814 werden die Fortschreibungsausgangsprozeduren "N" Mal ausgeführt. Insbesondere wird während Block 810 eine Abfrage durchgeführt, ob das Inkrement I gleich N, der Anzahl der Unteriterationen, ist. Falls I nicht gleich N ist, werden während Block 812 alle Fortschreibungsausgangsprozeduren für das Blockdiagramm ausgeführt, und während Block 814 wird I um Eins erhöht. Dieser Vorgang wird für N Iterationen fortgesetzt. Wenn das Inkrement I gleich N ist, werden während Block 816 die Fortschreibungszustandsprozeduren für alle Blöcke mit einem Zustand ausgeführt.
- Während Block 818 wird Anzahl um Eins erhöht, und falls Anzahl gleich der vorgegebenen Anzahl von Zeitschritten, die die Simulation ausführen soll, ist, kehrt die Verarbeitung bei Block 822 zu der normalen Verarbeitung zurück. Falls allerdings Anzahl kleiner als die Anzahl der auszuführenden Iterationen ist, wird die Verarbeitung bei Block 808 fortgesetzt. Die Simulation wird fortfahren, jede Fortschreibungsausgangsprozedur N Unteriterationen pro Zeitschritt und dann eine Fortschreibungszustandsprozedur so lange auszuführen, wie die Anzahl Variable kleiner als die Anzahl der von dem Anwender bestimmten Iterationen ist.
- Während Block 824 aus Fig. 22A wird die Variable UNTERIT gleich Null gesetzt, und ein Zeiger wird an den Anfang der Blockliste gesetzt. Die Blockliste ist eine Kurzform Version der Netzliste, um zu verfolgen, welches Element momentan von dem System analysiert wird. Der Zeiger zeigt auf eine Position gerade vor dem ersten Element in der Blockliste. Während Block 826 wird eine Abfrage durchgeführt, ob der Zeiger am Ende der Blockliste ist. Falls er es ist, kehrt die Verarbeitung zu dem LAUFZEIT SIMULATOR Verfahren bei Block 848 zurück. Falls der Zeiger nicht am Ende der Blockliste ist, wird bei Block 828 der Zeiger zu dem nächsten Element in der Blockliste weiterbewegt. Während Block 830 wird eine Eingangsliste für dieses Element erzeugt, und während Block 832 wird ein Eingangszeiger auf den ersten Eingang in der Eingangsliste gesetzt. Während Block 834 wird eine Abfrage durchgeführt, ob weitere Eingänge in dieser Eingangsliste sind. Falls keine weiteren Eingänge in der Eingangsliste sind, macht die Verarbeitung eine Schleife zurück durch die Blöcke 826, 828, 830 und 832, um auf das nächste Element in der Blockliste zu zeigen, und um den Zeiger auf seine Eingangsliste zu setzen. Falls in der Eingangsliste weitere Eingänge sind, wird während Block 836 eine Abfrage durchgeführt, ob der Eingang mit einem Block verbunden ist, der am Ende einer Kette ist. Eine "Kette" ist als eine aufeinanderfolgende Verbindung von Blöcken gestaltet, bei der der Ausgang des Blocks am Anfang der Kette den Eingang des Blocks, der die Kette beendet, unmittelbar beeinflussen kann.
- Die Anzahl der Blöcke in einer aufeinanderfolgenden KETTE ist die Anzahl der Unteriterationen, die jede Fortschreibungsausgangsprozedur ausgeführt werden muß, bis alle Eingänge und Ausgänge definiert sind. Dies ist so, weil jede Unteriteration sicherstellt, daß mindestens einer der Eingänge, der in der KETTE definiert werden muß, fortgeschrieben wird. Nach der N-ten Unteriteration sind alle Eingänge, die in dem Blockdiagramm definiert werden müssen, definiert worden. Deshalb können, wenn die Ausgänge der Fortschreibungsausgagnsprozeduren definiert sind, dann die Fortschreibungszustandsprozeduren für die Blöcke mit einem Zustand ausgeführt werden. Es gibt drei Bedingungen um festzustellen, ob ein Eingang mit einem Block verbunden ist, der am Ende einer KETTE ist. Die erste ist, wenn der Eingang mit einem Block verbunden ist, der keine Ausgänge hat; zum Beispiel ist ein Aufnahmeblock einer, der keine Ausgänge hat. Die zweite Bedingung ist, wenn die Eingänge mit einem Block verbunden sind, der Ausgänge hat, aber die Ausgänge nicht verbunden sind. Die dritte Bedingung ist, wenn der Eingang nicht in einer Durchführungsliste für den Block ist, mit dem er verbunden ist. Das bedeutet, daß dieser Eingang keinen Ausgang des Blocks unmittelbar beeinflußt. Unter der Annahme, daß der Eingang keine dieser drei Bedingungen hat, wird während Block 846 der Eingangslistenzeiger auf den nächsten Eingang in der Eingangsliste gesetzt. Die Verarbeitung kehrt zu Block 834 zurück, während dem festgestellt wird, ob weitere Eingänge in der Eingangsliste sind. Falls dort keine sind, wird die Verarbeitung bei Block 826 bis Block 832 fortgesetzt, während denen der Blocklistenzeiger zu dem nächsten Element in der Blockliste weiterbewegt wird.
- Wieder bezugnehmend auf Block 836 wird, falls festgestellt wurde, daß der Eingang am Ende einer KETTE ist, die Anzahl der Blöcke in dieser KETTE berechnet. Zuerst wird während Block 838 ein Zeiger auf das gegenwärtige Element, das den Eingang steuert, gesetzt. Bei Block 840 wird das MAXIMALE KETTENLÄNGE Verfahren (Fig. 22B) aufgerufen, um die Anzahl von Blöcken zu bestimmen, die aufeinanderfolgend verbunden sind und die einen Eingang in der KETTE haben, der einen Ausgang in der KETTE unmittelbar beeinflußt. Sobald die Länge einer bestimmten KETTE bestimmt ist, wird während Block 842 die vorbestimmte Unteriterationen (UNTERIT) Variable überprüft, um festzustellen, ob sie kleiner als die Länge ist, die durch das MAXIMALE KETTENLÄNGE Verfahren (Fig. 22B) bestimmt wurde. Falls UNTERIT kleiner als die zurückgegebene Länge ist, wird UNTERIT bei Block 844 gleich der Länge Variable gesetzt. Falls UNTERIT nicht kleiner als Länge ist, bleibt es gleich, und während Block 846 wird der Eingangslistenzeiger auf den nächsten Eingang des Elements in der Blockliste gesetzt, auf das gegenwärtig gezeigt wird. Die Verarbeitung kehrt zu Block 834 zurück, während dem festgestellt wird, ob in der Eingangsliste Eingänge übrig sind oder nicht. Falls welche übrig sind, wird während Block 836 eine Abfrage durchgeführt, ob der Eingang am Ende einer KETTE ist. Falls für dieses bestimmte Element keine weiteren Eingänge übrig sind, kehrt die Verarbeitung zu Block 826 zurück, während dem der Blocklistenzeiger zu dem nächsten Element in der Blockliste weiterbewegt wird. Dieser Vorgang wird fortgesetzt, bis alle Elemente in der Blockliste durchgegangen wurden. Wenn alle Elemente durchgegangen wurden wird das System bei Block 848 zu dem LAUFZEIT SIMULATOR Verfahren (Fig. 21) zurückkehren.
- Der MAXIMALE KETTENLÄNGE Algorithmus gibt einfach die maximale Länge aller KETTEN zurück, die bei dem Netzlistenelement anfangen, von dem während des ANZAHL DER UNTERITERATIONEN Verfahrens (Fig. 22A) festgestellt wurde, daß es am Ende der Kette ist. Das MAXIMALE KETTENLÄNGE Verfahren wird für jedes Blocklistenelement aufgerufen, von dem festgestellt wurde, daß es am Ende der KETTE ist. Das MAXIMALE KETTENLÄNGE Verfahren handhabt auf effiziente Weise einen als EINGANGS TABELLEN STAPEL bezeichneten Stapel. Dieser Stapel verfolgt die Elemente, die gegenwärtig betrachtet werden, und den maximalen Anzahl Wert für die längste KETTE von diesem Element aus.
- Insbesondere werden bezugnehmend auf Block 850 aus Fig. 22B eine Variable LÄNGE und eine Variable ANZAHL auf Null bzw. Eins gesetzt. Die LÄNGE ist verantwortlich für die Rückgabe der maximalen Länge einer KETTE, die von dem Blocklistenelement aus beginnt, auf das in dem ANZAHL DER UNTERITERATIONEN Verfahren gegenwärtig gezeigt wird. Die Variable ANZAHL verfolgt die laufende Zahl der Anzahl der Blöcke, von denen festgestellt wurde, daß sie in der gegenwärtig betrachteten KETTE sind.
- Während der Blöcke 852, 854 und 856 aus Fig. 22B werden die verschiedenen Zeiger und Variablen gesetzt, die von dem EINGANGS TABELLEN STAPEL gehandhabt werden. Insbesondere wird während Block 852 das gegenwärtig steuernde Element zu dem EINGANGS TABELLEN STAPEL für den Eingang hinzugefügt, auf den durch den Eingangslistenzeiger gegenwärtig gezeigt wird. Die Eingänge des steuernden Elements werden auch in dem Stapel abgelegt. Während Block 854 wird der gegenwärtige Wert der ANZAHL Variable in dem Stapel abgelegt, und während Block 856 wird ein Zeiger gesetzt, der auf die Eingangsliste des gegenwärtig steuernden Elements auf den ersten Eingang für dieses Element zeigt. Bei Block 858 wird eine Abfrage durchgeführt, ob die Eingangsliste, auf die für das gegenwärtig steuernde Element gezeigt wird, leer ist. Falls die Eingangsliste nicht leer ist, wird während Block 860 eine Abfrage durchgeführt, ob der momentane Eingang von einem Element gesteuert wird, das am Anfang einer KETTE ist. Es gibt drei Bedingungen, bei denen angenommen wird, ein Eingang werde von einem Element gesteuert, das am Anfang einer KETTE ist. Erstens, falls der Eingang mit einem Block verbunden ist, der keine Eingänge hat (zum Beispiel ein Quellblock); zweitens, falls der Eingang mit einem Block verbunden ist, der keine verbundenen Eingänge hat (dieser Block ist auch ein Aufnahmeblock); oder drittens ein Ausgang, der eine leere Durchführungsliste hat.
- Unter der Annahme, daß der Eingang betrachtet wird, am Anfang einer neuen KETTE zu sein, wird während Block 862 eine Abfrage durchgeführt, ob der momentane Wert der ANZAHL Variable größer als der momentane Inhalt der LÄNGE Variable ist. Falls ANZAHL größer als LÄNGE ist, wird die Verarbeitung bei Block 856 wieder aufgenommen, der den Eingangszeiger in dem Stapel auf den nächsten Eingang für das gegenwärtig steuernde Element setzt. Falls die ANZAHL Variable größer als die LÄNGE Variable ist, wird die LÄNGE Variable gleich der ANZAHL Variable gesetzt. Dieser Schritt verfolgt auf effektive Weise die ermittelte maximale KETTEN Länge. Dann kehrt die Verarbeitung zurück zu Block 856, während dem der Eingangslistenzeiger zu dem nächsten Eingang für das gegenwärtig steuernde Element erhöht wird. In beiden Fällen wird während Block 858 eine Abfrage durchgeführt, ob die Eingangsliste für das gegenwärtig steuernde Element leer ist.
- Unter der Annahme, daß die Eingangsliste an dieser Stufe leer ist, wird dieses Element dann während Block 866 aus dem Eingangstabellen Stapel entfernt. Bei Block 868 wird der gegenwärtige Elementzeiger in der Eingangstabelle auf den vorangehenden Eintrag in der Eingangstabelle gesetzt, und bei Block 870 wird die ANZAHL Variable gleich dem ANZAHL Wert des gegenwärtig steuernden Elements gesetzt. Falls die Eingangslistentabelle leer ist, kehrt die Verarbeitung dann bei Block 872 zu dem ANZAHL DER UNTERITERATIONEN Verfahren (Fig. 23) bei Block 842 zurück. Falls allerdings noch weitere Eingänge in dem EINGANGS TABELLEN STAPEL sind, fährt die Verarbeitung bei Block 856 fort, während dem der Eingangslistenzeiger auf den nächsten Eingang für das Element in dem EINGANGS TABELLEN STAPEL gesetzt wird, auf das gegenwärtig gezeigt wird. Unter der Annahme, daß bei Block 858 festgestellt wurde, daß die Eingangsliste für diesen Block nicht leer ist, wird dann bei Block 860 der Eingang, auf den momentan gezeigt wird, analysiert, um festzustellen, ob er am Anfang einer KETTE ist. Falls dieser Eingang nicht am Anfang einer KETTE ist, wird dann bei Block 876 die ANZAHL Variable um Eins erhöht, und bei Block 878 wird der gegenwärtige Elementenzeiger auf das Element gesetzt, das den Eingang steuert, auf den gegenwärtig gezeigt wird. Die Verarbeitung fährt bei den Blöcken 852, 854 und 856 fort, während denen die Information für dieses Element auf dem Stapel abgelegt wird. Die verschiedenen KETTEN, die mit diesem Element verbunden sind, werden analysiert, um festzustellen, welche KETTE die größte Länge hat. Schließlich werden alle KETTEN, die mit dem Eingang des Netzlistenelements verbunden sind, auf das durch das ANZAHL DER UNTERITERATIONEN Verfahren anfangs gezeigt wird, analysiert, und der Wert der längsten KETTE wird an das ANZAHL DER UNTERITERATIONEN Verfahren bei Block 842 zurückgegeben (Fig. 22A). Das ANZAHL DER UNTERITERATIONEN Verfahren wird dann den nächsten Eingang in der Eingangsliste für das bestimmte Element betrachten, auf das gegenwärtig gezeigt wird, und das MAXIMALE KETTENLÄNGE Verfahren wird wieder aufgerufen, um festzustellen, ob es eine KETTE aufeinanderfolgender Blöcke gibt, die größer als die zuletzt gespeicherte Länge ist.
- Fig. 23 ist eine zweite Ausführungsform eines Verfahrens zur Bestimmung der Anzahl von Unteriterationen, die das LAUFZEIT SIMULATOR Verfahren aus Fig. 21 ausführen muß. Dieser Algorithmus berechnet die Anzahl der Unteriterationen, indem die Anzahl der Blöcke bestimmt wird, die keine Durchführungslisten haben. Dieser Algorithmus ist weniger optimal, weil er den Laufzeit Simulator immer veranlaßt, mehr Unteriterationen auszuführen als notwendig sind, damit der Algorithmus funktioniert.
- Bezugnehmend auf Fig. 23 wird nun eine ausführlichere Beschreibung der zweiten Ausführungsform des ANZAHL DER UNTERITERATIONEN Verfahrens erläutert. Bei Block 880 aus Fig. 23 wird die ANZAHL Variable gleich Null gesetzt. Während Block 882 wird der Blocklistenzeiger an den Anfang der Blockliste gesetzt. Während Block 884 wird eine Abfrage durchgeführt, ob der Blocklistenzeiger am Ende der Blockliste ist, und falls nicht, wird der Blocklistenzeiger dann während Block 888 zu dem nächsten Blocklistenelement weiterbewegt. Während Block 890 wird die Durchführungsliste für dieses Element überprüft, um festzustellen, ob sie leer ist. Falls sie das ist, durchläuft die Verarbeitung die Blöcke 884 und 888, um das nächste Blocklistenelement zu untersuchen. Falls die Durchführungsliste nicht leer ist, wird dann während Block 892 die ANZAHL Variable um Eins erhöht, und die Verarbeitung wird bei Block 884 fortgesetzt. Während Block 884 wird der Blocklistenzeiger überprüft, um festzustellen, ob er am Ende der Blockliste ist; unter der Annahme, daß er es nicht ist, wird der Blocklistenzeiger während der Blöcke 888 und 890 zu dem nächsten Blocklistenelement weiterbewegt, und seine Durchführungsliste wird überprüft, um zu sehen, ob sie leer ist. Falls der Zeiger am Ende einer Netzliste ist, kehrt die Verarbeitung dann bei Block 886 zu dem LAUFZEIT SIMULATOR Verfahren (Fig 21) zurück.
- Eine dritte Ausführungsform des Algorithmus zur Bestimmung der Anzahl der Unteriterationen für das LAUFZEIT SIMULATOR Verfahren ist einfach die, die Anzahl der Blöcke in dem Blockdiagramm zu berechnen, und diese Anzahl als die Anzahl der Unteriterationen zu verwenden, die pro Zeitschritt auszuführen sind. Dieses Verfahren ist das am wenigsten effiziente der drei Ausführungsformen, weil es immer mehr Iterationen berechnet als notwendig sind. Allerdings führt dieser Ansatz zu einem Verfahren zur Simulation von Blockdiagrammen, bei dem die Verzögerungseigenschaften des Blocks nicht spezifiziert werden müssen.
- Nunmehr bezugnehmend auf die Fig. 21, 22A und B, 24, 25A, B, C und D wird ein ausführliches Beispiel einer Laufzeit Simulation erläutert. Fig. 24 ist ein einfaches Beispiel eines Blockdiagramms, das auf der Bildschirmanzeige entworfen wurde, um von dem Laufzeit Simulator Verfahren aus den Fig. 21, 22A und 22B simuliert zu werden. Die Blöcke A 894, F 904 und J 910 sind Quellblöcke, die leere Durchführungslisten haben. Block D 900 ist ein Aufnahmeblock, der eine Durchführungsliste hat mit Eingang I&sub1; und Eingang I&sub2; darin. Block B 896 hat Eingang I&sub4; in seiner Durchführungsliste, und Block C 898 hat Eingang I&sub3; in seiner Durchführungsliste. Block I 908 hat Eingang I&sub6; in seiner Durchführungsliste, und Block H 906 hat Eingang I&sub7; in seiner Durchführungsliste. Block G 902 hat Eingang I&sub8; und Eingang I&sub9; in seiner Durchführungsliste. Die willkürliche Konfiguration der Netzliste für dieses Blockdiagramm ist in Fig. 24A dargestellt, und die entsprechende Blockliste ist bei 912 in Fig. 24 dargestellt. Die Fig. 25A, B, C und D zeigen die verschiedenen Betriebszustände der Zeiger, Listen, usw., die von dem ANZAHL DER UNTERITERATIONEN Verfahren (Fig. 22A) und dem MAXIMALE KETTENLÄNGE Verfahren (Fig. 22B) beeinflußt werden. Insbesondere hat Fig. 25A fünf Spalten; eine erste Spalte für das Blocklistenelement. Eine zweite Spalte für die Blocklistenelementeeingänge, und der Zeiger dieser Eingänge ist in Klammern dargestellt. Eine dritte Spalte zeigt, welches Element das gegenwärtig steuernde Element ist, eine vierte Spalte, um auf die Eingänge des gegenwärtig steuernden Elements zu zeigen, und eine fünfte Spalte für eine ANZAHL Variable, die die Anzahl der Blöcke in der längsten Kette verfolgt.
- Um das in Fig. 24 dargestellte Blockdiagramm zu simulieren, wird das LAUFZEIT SIMULATOR Verfahren (Fig. 21) betreten. Bei Block 804 wird das ANZAHL DER UNTERITERATIONEN Verfahren (Fig. 22A und 22B) betreten, um die Anzahl der Male zu bestimmen, die die Fortschreibungsausgangsprozeduren pro Zeitschritt ausgeführt werden. Bezugnehmend auf Fig. 22A wird die Variable UNTERIT während Block 824 gleich Null gesetzt, und der Blocklistenzeiger wird auf den Anfang der Blockliste gesetzt. Während Block 826 wird eine Abfrage durchgeführt, daß der Zeiger nicht auf ein Element in der Liste zeigt, und bei Block 828 wird der Blocklistenzeiger zu dem nächsten Element in der Blockliste weiterbewegt (913, Fig. 25A). Das erste Element in der Netzliste wurde willkürlich auf Element D gesetzt (in erster Linie zu Illustrationszwecken). Während Block 830 wird eine Eingangsliste für dieses Element erzeugt (914, Fig. 25A). Die Eingangsliste für dieses Element wird aus der in Fig. 24A dargestellten Neztliste ermittelt. Während Block 832 wird der Eingangszeiger auf den ersten Eingang in der Liste gesetzt (916, Fig. 25A, wie durch die Klammern gezeigt, die I&sub1; umgeben). Während Block 834 wird eine Feststellung gemacht, daß noch Eingänge in der Eingangsliste von Element D sind, und während Block 836 wird eine Feststellung gemacht, daß Eingang I&sub1; am Ende einer KETTE ist. Insbesondere ist Eingang I&sub1; mit einem Block verbunden, der keine Ausgänge hat, und deshalb wird er als ein Eingang am Ende einer KETTE angesehen. Während Block 838 wird ein Zeiger auf das gegenwärtige Element gesetzt, das Eingang I&sub1; steuert; dieser Zeiger enthält Element C (918, Fig. 25A). Während Block 840 wird die maximale Kettenlänge bestimmt, die sich von Eingang I&sub1; erstreckt und bei Element D endet.
- Bezugnehmend auf das MAXIMALE KETTENLÄNGE Verfahren (Fig. 22B) wird bei Block 850 die LÄNGE Variable gleich Null gesetzt, und die ANZAHL Variable wird gleich Eins gesetzt. Während der Blöcke 852, 854 und 856 werden die verbleibenden Bereiche des EINGANGSTABELLEN STAPELS gebildet. Insbesondere wird während Block 852 der Eingang von Element C auf dem Stapel abgelegt, und während Block 854 wird der gegenwärtige Wert für ANZAHL auf dem Stapel abgelegt. Während Block 856 wird auf den ersten Eingang in der Eingangsliste von C gezeigt (920, Fig. 25A, wie durch die Klammern gezeigt, die I&sub3; umgeben). Bei Block 858 wird eine Feststellung gemacht, daß die Eingangsliste für Element C nicht leer ist, und bei Block 860 wird eine Feststellung gemacht, daß I&sub3; nicht von einem Element gesteuert wird, mit dem eine neue KETTE beginnt. Bei Block 876 wird der Wert von ANZAHL um Eins erhöht, und bei Block 878 wird der gegenwärtige Elementezeiger auf Element B gesetzt, das Eingang I&sub3; steuert. Während der Blöcke 852, 854 und 856 werden Eingang I&sub4; von Element B und der momentane ANZAHL Wert, 2, dem Stapel hinzugefügt (922, Fig. 25A). Während Block 858 wird eine Feststellung gemacht, daß die Eingangsliste für Element B nicht leer ist, und bei Block 860 wird eine Feststellung gemacht, daß I&sub4; von einem Element gesteuert wird, mit dem eine neue KETTE beginnt. Insbesondere ist Element A ein Quellblock und hat eine leere Durchführungsliste. Während Block 862 wird eine Feststellung gemacht, daß ANZAHL größer ist als LÄNGE, und während Block 864 wird LÄNGE gleich 2 gesetzt. Die Verarbeitung kehrt zu Block 856 zurück, während dem der Eingangslistenzeiger für Element B zu dem nächsten Eingang erhöht wird (924, Fig. 25A). Während Block 858 wird festgestellt, daß die Eingangsliste leer ist, und Block 866 entfernt Element B aus dem EINGANGSTABELLEN STAPEL (926, Fig. 25A). Während Block 868 wird der gegenwärtige Elementzeiger auf das vorangehende Element in dem EINGANGSTABELLEN STAPEL gesetzt, wie in Fig. 25A bei 926 durch die Klammern um Element C und seinen Eingang I&sub3; gezeigt. Während Block 870 wird die ANZAHL Variable gleich dem ANZAHL Wert des gegenwärtigen Elements gesetzt, der 1 ist (926, Fig. 25A). Während Block 872 wird eine Feststellung gemacht, daß noch Eingänge in dem EINGANGSTABELLEN STAPEL sind, Element C verbleibt. Die Verarbeitung wird bei Block 856 fortgesetzt, während dem der Eingangslistenzeiger für Element C zu dem nächsten Eingang erhöht wird (928, Fig. 25A). Während Block 858 wird eine Feststellung gemacht, daß der Eingangszeiger auf eine leere Position zeigt, und bei Block 866 wird Element C aus dem EINGANGSTABELLEN SPEICHER entfernt (930, Fig. 25A).
- Bei Block 868 wird das gegenwärtige Element auf den vorangehenden Eintrag in dem EINGANGSTABELLEN STAPEL gesetzt; es gibt keine weiteren Einträge in dem EINGANGSTABELLEN STAPEL. Bei Block 870 wird die ANZAHL Variable gleich dem ANZAHL Wert des gegenwärtigen Elements gesetzt, und bei Block 872 wird eine Feststellung gemacht, daß keine weiteren Einträge in dem EINGANGSTABELLEN STAPEL sind. Deshalb kehrt die Verarbeitung bei Block 874 zu dem ANZAHL DER UNTERITERATIONEN Verfahren (Fig. 22A) bei Block 842 zurück.
- Bei Block 842 des ANZAHL DER UNTERITERATIONEN Verfahrens (Fig. 22A) wird eine Feststellung gemacht, daß die Variable UNTERIT kleiner als die Variable LÄNGE ist, die von dem MAXIMALEN KETTENLÄNGE Verfahren (Fig. 22B) zurückgegeben wurde. Während Block 844 wird die Variable UNTERIT gleich LÄNGE gesetzt, und bei Block 846 wird der Zeiger auf den nächsten Eingang von Element D gesetzt (932, Fig. 25B). Bei Block 834 wird eine Feststellung gemacht, daß weitere Eingänge in der Eingangsliste von Element D sind, und bei Block 836 wird festgestellt, daß I&sub2; auch am Ende einer KETTE ist. I&sub2; ist mit Element D verbunden, und, wie oben erwähnt, hat es keine Ausgänge, und deshalb ist I&sub2; am Ende einer KETTE.
- Während Block 838 wird der gegenwärtige Elementezeiger in dem Stapel auf das nächste Element in der Blockliste gesetzt, das Eingang I&sub2; steuert, Element I. Das MAXIMALE KETTENLÄNGE Verfahren (Fig. 22B) wird betreten, um die längste Kette von Eingang I&sub2; zu bestimmen. Nunmehr bezugnehmend auf Fig. 22B wird bei Block 850 die Variable LÄNGE gleich Null gesetzt, und die Variable ANZAHL wird gleich Eins gesetzt. Während der Blöcke 852, 854 und 856 wird der erste Eintrag in dem EINGANGSTABELLEN STAPEL eingerichtet. Insbesondere wird während Block 852 der gegenwärtige Elementezeiger auf Element I gesetzt (934, Fig. 25B). Bei Block 854 wird der gegenwärtige Wert für ANZAHL in der Tabelle abgelegt, und bei Block 856 wird der Zeiger auf den ersten Eingang in der Eingangsliste von Element I gesetzt (936, Fig. 25B). Bei Block 858 wird eine Feststellung gemacht, daß die Eingangsliste für Element I nicht leer ist, und bei Block 860 wird eine Feststellung gemacht, daß I&sub6; nicht von einem Block gesteuert wird, mit dem eine neue KETTE beginnt. Während Block 876 wird der Wert der Variable ANZAHL um Eins erhöht, und bei Block 878 wird der gegenwärtige Elementezeiger auf das Blocklistenelement gesetzt, das Eingang I&sub6; steuert, Element H. Die notwendige Information für den EINGANGSTABELLEN STAPEL wird bei den Blöcken 852, 854 und 856, wie in Fig. 25B bei 938 gezeigt, in der Tabelle abgelegt. Bei Block 858 wird eine Feststellung gemacht, daß der Eingangslistenzeiger für Element H nicht leer ist, und bei Block 860 wird festgestellt, daß Eingang I&sub6; nicht von einem Block gesteuert wird, der am Anfang einer neuen KETTE ist. Während Block 876 wird der Wert für die Variable ANZAHL um Eins erhöht, und bei Block 878 wird der gegenwärtige Elementezeiger auf Element H geselzt, das Eingang I&sub6; zu Element I steuert. Die Verarbeitung wird fortgesetzt, indem bei den Blöcken 852, 854 und 856 Element H, Eingang I&sub7; und der gegenwärtige ANZAHL Wert auf dem EINGANGSTABELLEN STAPEL abgelegt werden (938, Fig. 25B). Während Block 858 wird eine Feststellung gemacht, daß die Eingangsliste für Element H nicht leer ist, und bei Block 860 wird festgestellt, daß das Element, das I&sub7; steuert, nicht am Anfang einer KETTE ist. Bei Block 876 wird der Wert der ANZAHL Variable um Eins erhöht, und bei Block 878 wird der gegenwärtige Elementezeiger auf Element G gesetzt.
- Element G, Eingänge I&sub8; und I&sub9; und der gegenwärtige Wert von ANZAHL werden bei den Blöcken 852, 854 und 856 auf dem EINGANGSTABELLEN STAPEL abgelegt. Während Block 856 wird der Eingangszeiger für Element G auf I&sub8; gesetzt. Dies ist in Fig. 25B bei 940 durch die Klammern um I&sub8; dargestellt. Bei Block 858 wird festgestellt, daß es noch Eingänge gibt, auf die durch den den Eingangslistenzeiger gezeigt wird, und bei Block 860 wird eine Feststellung gemacht, daß das Element, das Eingang I&sub8; steuert, am Anfang einer neuen KETTE ist. Insbesondere wird Element G durch Element F gesteuert, und Element F ist ein Quellblock, der keine Eingänge und eine leere Durchführungsliste hat. Bei Block 862 whrd eine Feststellung gemacht, daß der Inhalt der Variable ANZAHL größer ist als der Inhalt der Variable LÄNGE. ANZAHL ist gleich 3 und LÄNGE ist gleich 0. Bei Block 864 wird LÄNGE gleich dem Inhalt von ANZAHL gesetzt, und die Verarbeitung wird bei Block 856 fortgesetzt, der den Eingangslistenzeiger zu dem nächsten Eingang von Element G, I&sub9;, erhöht (942, Fig. 25B). Während Block 858 wird eine Abfrage durchgeführt, daß der Eingangslistenzeiger nicht auf eine leere Position zeigt, und bei Block 860 wird eine Abfrage durchgeführt, daß das Element, das Eingang I&sub9; steuert, am Anfang einer KETTE ist. Insbesondere ist Element J ein Quellblopk, der keine Eingänge und eine leere Durchführungsliste hat. Bei Block 862 wird eine Feststellung gemacht, daß ANZAHL nicht größer als LÄNGE ist, ANZAHL ist gleich 3 und LÄNGE ist gleich 3. Die Verarbeitung wird bei Block 856 fortgesetzt, der den Eingangslistenzeiger zu der nächsten Position der Eingangsliste erhöht (944, Fig. 25B). Während Block 858 wird eine Feststellung gemacht, daß der Eingangslistenzeiger momentan auf eine leere Position zeigt, und bei Block 866 wird Element G aus dem EINGANGSTABELLEN STAPEL entfernt. Bei Block 868 wird der gegenwärtige Elementezeiger auf den vorherigen Eintrag in der Eingangstabelle gesetzt. Während Block 870 wird der Wert der ANZAHL Variable gleich dem ANZAHL Wert des gegenwärtigen Elements, der 2 ist, gesetzt (946, Fig. 25B). Bei Block 872 wird eine Feststellung gemacht, daß noch Einträge in dem EINGANGSTABELLEN STAPEL sind, und die Verarbeitung wird bei Block 856 fortgesetzt, der den Eingangslistenzeiger des gegenwärtigen Elements erhöht (948, Fig. 25B). Während Block 858 wird festgestellt, daß der gegenwärtige Elementeeingangslistenzeiger auf eine leere Eingangslistenposition zeigt, und bei Block 866 wird dieses Element aus dem Stapel entfernt (950, Fig. 25B). Während Block 868 wird der gegenwärtige Elementezeiger auf den vorherigen Eintrag in dem EINGANGSTABELLEN STAPEL gesetzt, und bei Block 870 wird die ANZAHL Variable gleich dem ANZAHL Wert des gegenwärtigen Elements gesetzt (950, Fig. 25B). Bei Block 872 wird eine Feststellung gemacht, daß noch Einträge in dem EINGANGSTABELLEN STAPEL sind, und die Verarbeitung wird bei Block 856 fortgesetzt, der den gegenwärtigen Zeiger der Eingangsliste um Eins erhöht (952, Fig. 25C). Während Block 858 wird eine Feststellung gemacht, daß der Eingangslistenzeiger auf eine leere Position zeigt, und bei Block 866 wird dieses Element aus der Eingangslistentabelle entfernt (954, Fig. 25C). Während Block 868 wird der gegenwärtige Elementezeiger auf den vorangehenden Eintrag in dem EINGANGSTABELLEN STAPEL gesetzt, und bei Block 870 wird die ANZAHL Variable auf den ANZAHL Wert des gegenwärtigen Elements gesetzt. Während Block 872 wird festgestellt, daß in dem EINGANGSTABELLEN STAPEL keine weiteren Einträge sind, und bei Block 874 kehrt die Verarbeitung zu dem ANZAHL DER UNTERITERATIONEN Verfahren (Fig. 22A) bei Block 842 zurück.
- Bei Block 842 des ANZAHL DER UNTERITERATIONEN Verfahrens (Fig. 22A) wird eine Feststellung gemacht, daß die Variable UNTERIT kleiner ist als die Variable LÄNGE; UNTERIT ist gleich 2 und LÄNGE ist gleich 3. Während Block 846 wird der Eingangslistenzeiger zu dem nächsten Eingang von Element D erhöht (956, Fig. 25C). Bei Block 834 wird eine Feststellung gemacht, daß es keine weiteren Eingänge gibt, auf die durch einen Eingangslistenzeiger für Element D gezeigt wird, und während Block 826 wird eine Feststellung gemacht, daß der Netzlistenzeiger nicht am Ende der Netzliste ist. Der Zeiger ist noch am Anfang der Netzliste, und bei Block 828 wird der Netzlistenzeiger zu dem nächsten Netzlistenelement, Element C, weiterbewegt.
- Während Block 830 wird eine Eingangsliste für Element C aus der Netzliste erhalten (2262, Fig. 24A), und bei Block 832 wird der Eingangslistenzeiger auf den ersten Eingang von Element C, I&sub3;, gesetzt (958, Fig. 25C). Während Block 834 wird festgestellt, daß es Eingänge gibt, auf die durch den Eingangslistenzeiger gezeigt wird, und während Block 836 wird festgestellt, daß Element C nicht am Ende einer KETTE ist. Während Block 846 wird der Eingangslistenzeiger auf den nächsten Eingang in der Eingangsliste von Element C gesetzt, und bei Block 834 wird eine Feststellung gemacht, daß es nunmehr keine weiteren Eingänge gibt, auf die durch den Eingangslistenzeiger gezeigt wird (960, Fig. 25C). Während Block 826 wird eine Feststellung gemacht, daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und bei Block 828 wird der Blocklistenzeiger zu dem nächsten Blocklistenelement, Element B, weiterbewegt.
- Während Block 830 wird eine Eingangsliste für Element B aus der Netzliste erhalten (2260, Fig. 24A), und bei Block 832 wird der Eingangslistenzeiger auf den ersten Eingang von Element B gesetzt (962, Fig. 25C). Bei Block 834 wird eine Feststellung gemacht, daß es noch Eingänge gibt, auf die durch den Eingangslistenzeiger gezeigt wird, und bei Block 836 wird festgestellt, daß Element B nicht am Ende der KETTE ist. Während Block 846 wird der Eingangslistenzeiger auf den nächsten Eingang in der Eingangsliste von B gesetzt, und während Block 834 wird festgestellt, daß es keine weiteren Eingänge gibt, auf die durch den Eingangslistenzeiger gezeigt wird (964, Fig. 25C). Bei Block 826 wird eine Feststellung gemacht, daß der Zeiger nicht am Ende der Blockliste ist, und bei Block 828 wird der Blocklistenzeiger zu dem nächsten Element in der Blockliste, Element A, weiterbewegt. Während Block 830 wird eine Eingangsliste für Element A aus der Netzliste erhalten (2258, Fig. 24A), und bei Block 832 wird der Eingangslistenzeiger auf den ersten Eingang von Element A gesetzt (966, Fig. 25C). During Block 834 wird festgestellt, daß es keine Eingänge für Element A gibt, Element A ist ein Quellblock.
- Während Block 826 wird eine Feststellung gemacht, daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und der Blocklistenzeiger wird zu dem nächsten Element, Element I, weiterbewegt, während Block 830 wird eine Eingangsliste für Element I aus der Netzliste erhalten (2272, Fig. 24A), und bei Block 832 wird der Eingangslistenzeiger auf den ersten Eingang von Element I, I&sub6;, gesetzt (968, Fig. 25C). Während Block 834 wird festgestellt, daß es einen Eingang gibt, auf den durch den Eingangslistenzeiger für Element I gezeigt wird, und bei Block 836 wird eine Feststellung gemacht, daß dieser Eingang nicht am Ende der KETTE ist. Während Block 846 wird der Eingangslistenzeiger zu dem nächsten Eingang für Element I bewegt, und während Block 834 wird eine Feststellung gemacht, daß der Eingangslistenzeiger nicht auf einen weiteren Eingang zeigt (920, Fig. 25C). Während Block 826 wird eine Feststellung gemacht, daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und bei Block 828 wird der Blocklistenzeiger zu dem nächsten Blocklistenelement, Element H, weiterbewegt. Während Block 830 wird eine Eingangsliste für dieses Element aus der Netzliste erhalten (2270, Fig. 24A), und bei Block 832 wird der Eingangslistenzeiger gesetzt, daß er auf den ersten Eingang von Element H zeigt (972, Fig. 25D). Während Block 834 wird eine Feststellung gemacht, daß es Eingänge gibt, auf die durch den Eingangslistenzeiger gezeigt wird, und bei Block 836 wird eine Feststellung gemacht, daß dieser Eingang nicht am Ende einer KETTE ist. Während Block 846 wird der Eingangslistenzeiger zu dem nächsten Eingang für Element H erhöht, und bei Block 834 wird eine Feststellung gemacht, daß es keine weiteren Eingänge für Element H gibt (974, Fig. 25D).
- Während Block 826 wird festgestellt,daß der Blocklistenzeiger nicht am Ende der Blockliste ist, und bei Block 828 wird der Blocklistenzeiger zu dem nächsten Element, Element G, weiterbewegt. Während Block 830 wird eine Eingangsliste für Element G aus der Netzliste erhalten (2268, Fig. 24A), und während Block 832 wird der Eingangslistenzeiger auf den ersten Eingang von Element G, I&sub8;, gesetzt (976, Fig. 25D). Während Block 834 wird eine Feststellung gemacht, daß es Eingänge gibt, auf die für Element G gezeigt wird, und bei Block 836 wird eine Feststellung gemacht, daß Eingang I&sub8; nicht am Ende einer KETTE ist. Während Block 846 wird der Eingangslistenzeiger zu Eingang I&sub9; erhöht (978, Fig. 25D), und bei Block 834 wird eine Feststellung gemacht, daß es noch weitere Eingänge gibt, auf die für Element G gezeigt wird. Bei Block 836 wird eine Feststellung gemacht, daß Eingang I&sub9; nicht am Ende einer KETTE ist, und bei Block 846 wird der Eingangslistenzeiger auf den nächsten Eingang für Element G erhöht (979, Fig. 25D). Während Block 834 wird eine Feststellung gemacht, daß es keine weiteren Eingänge gibt, auf die für Element G gezeigt wird, und bei Block 826 wird festgestellt, daß der Netzlistenzeiger nicht am Ende der Blockliste ist. Während Block 828 wird der Zeiger zu dem nächsten Blocklistenelement, Element F, weiterbewegt. Bei Block 830 wird eine Eingangsliste für Element E aus der Netzliste erhalten (2266, Fig. 24A), und bei Block 832 wird der Eingangslistenzeiger auf die leere Eingangsliste für Element F gesetzt (980, Fig. 25D). Bei Block 834 wird eine Feststellung gemacht, daß es keine weiteren Eingänge gibt, auf die durch einen Eingangslistenzeiger für Element F gezeigt wird, und bei Block 826 wird eine Feststellung gemacht, daß der Blocklistenzeiger nicht am Ende der Blockliste ist. Während Block 828 wird der Blocklistenzeiger zu dem nächsten Element in der Blockliste, Element J, weiterbewegt, und bei Block 830, wird eine Eingangsliste für dieses Element aus der Netzliste erhalten (2274, Fig. 24A). Während Block 832 wird der Eingangslistenzeiger gesetzt, um auf die leere Eingangsliste von Element J zu zeigen (982, Fig. 25D), und bei Block 834 wird festgestellt, daß es in der Eingangslist von Element J keine Eingänge gibt. Bei Block 826 wird eine Feststellung gemacht, daß der Blocklistenzeiger auf das Ende der Blockliste zeigt, und die Verarbeitung kehrt bei Block 848 zu dem LAUFZEIT SIMULATOR Verfahren bei Block 806 zurück.
- Bei Block 806 des LAUFZEIT SIMULATORS, wird die ANZAHL Variable gleich Null gesetzt, und "N" wird gleich UNTERIT gesetzt, was während des ANZAHL DER UNTERITERATIONEN Verfahrens (Fig. 22A und 22B) bestimmt wurde. Bei Block 808 wird das Inkrement I gleich Null gesetzt, und bei den Blöcken 810, 812 und 814 werden die Fortschreibungsausgangsprozeduren "N" Mal ausgeführt. Während Block 816 werden alle Fortschreibungszustandsprozeduren ausgeführt, und bei Block 818 wird die ANZAHL Variable um 1 erhöht. Wenn die ANZAHL Variable die Anzahl der auszuführenden Iterationen erreicht, kehrt die Verarbeitung zu dem aufrufenden Programm bei Block 822 zurück.
- Die Fig. 26A und 26B sind Fluß-Blockdiagramme der zweiten Ausführungsform für den LAUFZEIT SIMULATOR. Diese Ausführungsform ist eine effizientere Version des LAUFZEIT SIMULATORS, weil sie nicht so viele Unteriterationen ausführt wie die erste Ausführungsform des LAUFZEIT SIMULATORS. Anstatt die Fortschreibungsausgangsprozeduren eine vorgegebene Anzahl von Malen auszuführen, wird diese Ausführungsform des LAUFZEIT SIMULATORS die Fortschreibungsausgangsprozeduren nur ausführen, bis sich die Eingangswerte nicht mehr änderen, oder sich beruhigen. Wenn sich die Eingangswerte nach der Ausführung der Fortschreibungsausgangsprozeduren beruhigen, werden die Eingänge als definiert angesehen, und die Fortschreibungszustandsprozeduren für alle Zustandsblöcke können dann ausgeführt werden.
- Fig. 26A ist ein ausführliches Flußdiagramm der zweiten Ausführungsform des LAUFZEIT SIMULATORS, und Fig. 26B ist ein Flußdiagramm eines INITIALISIERUNGS Verfahrens zum Definieren der Listen und Tabellen, die von der zweiten Ausführungsform des LAUFZEIT SIMULATORS benötigt werden. Insbesondere bezugnehmend auf Fig. 26A der zweiten Ausführungsform, wird bei Block 988 das INITIALISIERUNGS Verfahren (Fig. 26B) betreten. Bei Block 1026 des INITIALISIERUNGS Verfahrens wird die Durchführungsliste für jeden Ausgang in einer Durchführungstabelle genannten Tabelle abgelegt. Die Durchführungsliste für jeden Ausgang wird in dem Bibliothek Speicher gespeichert. Während Block 1028 wird die Durchführungstabelle durchgesehen, um festzustellen, welche der Durchführungslisten leer sind. Die Ausgänge, die diesen leeren Durchführungslisten zugeordnet sind, werden in ihren eigenen Listen abgelegt, die AUSGANGSLISTE MIT KEINER DURCHFÜHRUNG (OLNF, OUTPUT LIST WITH NULL FEEDTHROUGH) genannt werden. Während Block 1030 wird die Durchführungstabelle durchgesehen, um festzustellen, welche Ausgänge eine nicht-leere Durchführungsliste haben. Die Ausgänge, die diesen Durchführungslisten zugeordnet sind, werden dann in einer neuen Liste abgelegt, die AUSGANGSLISTE MIT DURCHFÜHRUNG (OLF, OUTPUT LIST HAVING FEEDTHROUGH) genannt werden. Bei Block 1032 wird eine Liste von jedem Block, der einen Zustand hat, erzeugt; diese Liste wird ZUSTANDSBLOCK LISTE (SBL, STATE BLOCK LIST) genannt. Während Block 1034 werden alle Ausgänge in der OLF Liste auf Null initialisiert, und bei Block 1036 wird ein Zeitschrittzähler "T" gleich Null gesetzt. Dieser Zähler wird verwendet, um die Zeitschritt Iterationen zu verfolgen, die von dem LAUFZEIT SIMULATOR ausgeführt werden. Während Block 1038 kehrt die Verarbeitung zu dem LAUFZEIT SIMULATOR (Fig. 26A) bei Block 992 zurück.
- Während Block 992 des LAUFZEIT SIMULATOR Verfahrens (Fig. 26A), wird der numerische Wert von allen Eingängen gespeichert, die in der Durchführungstabelle sind. Während Block 994 wird eine "LETZTER AUSGANG FORTGESCHRIEBEN" genannte Variable gleich dem letzten Ausgang in der OLF Liste gesetzt. Der Zweck dieser Variable ist es, den letzten Ausgang in der OLF Liste, der fortgeschrieben worden ist, zu kennzeichnen. Diese Variable wird periodisch überprüft, um zu sehen, ob keine Änderung in einer Durchführungsliste aufgetreten ist, seit alle Ausgänge in der OLF auf eine Änderung in dem numerischen Wert eines Eingangs hin überprüft wurden. Während Block 996 werden die Fortschreibungsausgangsprozeduren für alle Ausgänge ausgeführt, die in der OLNF Liste sind. Diese Ausgänge erfordern keine definierten Eingänge, und sie können sofort verarbeitet werden. Während Block 998 wird ein Zeiger auf den ersten Ausgang in der OLF Liste gesetzt. Bei Block 1000 wird ein DURCHFÜHRUNGSLISTEN (FL, FEEDTHROUGH LIST) EINGANGS-Zeiger gleich dem ersten Eingang in der Durchführungsliste für den Ausgang gesetzt, auf den durch den OLF-Zeiger gezeigt wird. Der Wert des Eingangs, auf den durch den FL-Zeiger gezeigt wird, wird dann mit dem Wert des Eingangs verglichen, der bei Block 992 gespeichert wurde. Falls der Wert des Eingangs gleich dem Wert des gespeicherten Eingangs ist, wird Block 1014 betreten, um festzustellen, ob der FL-Eingangszeiger nun auf den letzten Eingang in der Durchführungsliste für den Ausgang zeigt, auf den durch den OLF-Zeiger gezeigt wird. Falls er das nicht tut, wird dann während Block 1012 der FL-Eingangszeiger auf den nächsten Eingang in der Durchführungsliste des Ausgangs gesetzt. Die Verarbeitung wird bei Block 1002 wieder aufgenommen, während dem festgestellt wird, ob der Wert des Eingangs, auf den gegenwärtig gezeigt wird, gleich dem Wert des Eingangs ist, auf den gegenwärtig gezeigt wird und der bei Block 992 gespeichert wurde.
- Zurückkehrend zu Block 1014 wird, wenn der Eingangszeiger gleich dem letzten Eingang in der Durchführungsliste des Ausgangs ist, auf die gegenwärtig gezeigt wird, bei Block 1016 eine Abfrage durchgeführt, ob die Variable "AUSGANG FORTGESCHRIEBEN" gleich dem gegenwärtigen Ausgang ist, auf den durch den OLF-Zeiger gezeigt wird. Der Zweck dieses Schrittes ist es, festzustellen, ob alle Ausgänge in der OLF Liste behandelt wurden, seit eine Durchführungsliste ihren numerischen Wert geändert hat. Falls nicht alle Ausgänge behandelt wurden, wird der OLF Zeiger bei Block 1010 zu dem nächsten Ausgang in der Liste erhöht. Falls alle Ausgänge behandelt wurden, bedeutet das, daß alle Ausgänge in der OLF Liste fortgeschrieben worden sind, und deshalb kann bei Block 1018 die Fortschreibungszustandsprozedur für alle Blöcke mit einem Zustand ausgeführt werden.
- Zurückkehrend zu Block 1002 wird dann, falls der gegenwärtige Wert des Eingangs, auf den durch den FL-Eingangs Zeiger gezeigt wird, nicht gleich dem gespeicherten Wert ist, während Block 1004 die Fortschreibungsausgangsprozedur für den Ausgang ausgeführt, auf den durch den OLF-Zeiger gegenwärtig gezeigt wird. Während Block 1006 wird die Variable "AUSGANG FORTGESCHRIEBEN" gleich dem Ausgang gesetzt, auf den durch den OLF-Zeiger gezeigt wird. Während Block 1008 wird ein numerischer Wert für alle Eingänge in der Durchführungsliste gespeichert, und bei Block 1010 wird der OLF-Zeiger auf den nächsten Ausgang in der OLF-Liste erhöht. Die Verarbeitung wird bei Block 1000 fortgesetzt, während dem der FL-Eingangszeiger auf den ersten Eingang in der Durchführungsliste gesetzt wird, auf die gegenwärtig gezeigt wird. Dieser Vorgang wird fortgesetzt, bis alle Eingänge in den verschiedenen Durchführungslisten in der Durchführungslistentabelle den gleichen Wert enthalten, wie der Wert, der durch die vorangehenden Unteriterationen gespeichert wurde. Wenn sich alle Eingangswerte nicht mehr verändern, werden die Blöcke 1018, 1020 und 1023 verarbeitet. Während Block 1018 werden alle Fortschreibungszustandsprozeduren für die Blöcke mit einem Zustand ausgeführt. Dieser Schritt symbolisiert auch das Ende einer Iteration oder die Ausführung eines Zeitschritts während einer Simulation. Während Block 1020 wird eine Abfrage durchgeführt, ob die Anzahl der Iterationen oder Zeitschritte, die von der Simulation durchgeführt wurden, vollständig sind. Falls "T" gleich der maximalen Anzahl von Iterationen ist, kehrt die Verarbeitung dann während Block 1022 zu dem aufrufenden Programm zurück, und falls "T" nicht gleich der maximalen Anzahl von Iterationen ist, wird dann bei Block 1023 der Inkrementzähler für die Anzahl der Zeititerationen erhöht, und die Verarbeitung beginnt bei Block 992 wieder von vorne.
- Nunmehr bezugnehmend auf die Fig. 26A und 26B, 27, 27A und 28 wird nun ein ausführliches Beispiel der zweiten Ausführungsform des LAUFZEIT SIMULATORS erläutert. Fig. 27 ist ein Beispiel eines einfachen Blockdiagramms, das von einem Anwender auf der Bildschirmanzeige des Simulators aus Fig. 1A erzeugt wurde. Insbesondere ist Block A 1040 ein Quellblock mit Ausgang O&sub1; und einer leeren Durchführungsliste. Block B 1042 ist ein Additionsblock mit Eingängen I&sub1;, I&sub2; und O&sub2; Block C 1044 hat Eingang I&sub1; und Eingang I&sub2; in seiner Durchführungsliste. Block C 1044 ist ein Aufnahmeblock mit Eingang I&sub3; 1050 und einer leeren Durchführungsliste. Block D 1046 ist ein Einheitsverzögerungsblock mit Eingang I&sub4; 1052, Ausgang O&sub3; 1054 und einer leeren Durchführungsliste. Die Netzliste als Darstellung des Blockdiagramms aus Fig. 27 ist in Fig. 27A dargestellt.
- Während Block 988 der zweiten Ausführungsform des LAUFZEIT SIMULATOR Verfahrens wird das INITIALISIERUNGS Verfahren (Fig. 26B) betreten. Während Block 1026 wird eine Durchführungstabelle gebildet, die eine Durchführungsliste für jeden Ausgang enthält. Die Informationen in der Durchführungsliste werden aus der Bibliothek 14A erhalten. Bei Block 1056 aus Fig. 27 ist eine Durchführungslistentabelle für das Blockdiagramm gezeigt. Insbesondere ist Ausgang O&sub1; gezeigt mit einer leeren Durchführungsliste, Ausgang O&sub2; hat Eingang I&sub1; und Eingang I&sub2; in seiner Durchführungsliste und Ausgang O&sub3; hat eine leere Durchführungsliste. Während Block 1028 wird die OLNF Liste gebildet, die eine Liste mit Ausgängen ist, die leere Durchführungslisten haben. Block 1058 aus Fig. 27 zeigt, daß Ausgang O&sub1; und Ausgang O&sub3; beide Ausgänge sind, die leere Durchführungslisten haben, wie in der Durchführungstabelle bei Block 1056 gezeigt. Während Block 1030 aus Fig. 26B wird eine OLF Liste gebildet. Diese Liste ist die Liste mit Ausgängen, die eine nicht-leere Durchführungseigenschaft haben. Block 1060 aus Fig. 27 zeigt die OLF Liste mit Ausgang O&sub2;. Ausgang O&sub2; hat Eingang I&sub1; und Eingang I&sub2; in seiner Durchführungsliste, und hat deshalb eine alle Durchführungseigenschaft, die eine nicht-leere Charakteristik ist. Während Block 1032 des INITIALISIERUNGS Verfahrens (Fig. 26B) wird eine SBL Liste gebildet, die eine Liste der Blöcke ist, die einen Zustand haben. Elemente C und D sind in der SBL Liste bei 1062 aus Fig. 27 gezeigt. Während Block 1030 wird Ausgang O&sub2; in der OLF Liste auf Null initialisiert, und der Zeitschrittzähler wird auf 0 gesetzt.
- Das vorgeschlagene Beispiel wird derart eingerichtet, daß wenn "T" gleich Null ist, die Zustandsvariablen des Einheitsverzögerungsblocks, Block D, auf Null initialisiert werden. Zusätzlich wird der Quellblock derart eingerichtet, daß er Null ausgibt, wenn der Zeitschritt "T" gleich Null ist.
- An diesem Punkt während des Initialisierungsprozesses, sind alle Ausgänge bekannt, O&sub1;, O&sub2; und O&sub3;, und deshalb sind auch die Anfangswerte der Eingänge I&sub1;, I&sub2;, I&sub3; und I&sub4; bekannt (1064, Fig. 28). Block 1038 gibt die Verarbeitung zurück an das LAUFZEIT SIMULATOR Verfahren bei Block 992. Während Block 992 wird eine Kopie der numerischen Werte der Eingänge, die in der Durchführungstabelle erscheinen, gespeichert. Die Eingänge, die in der Durchführungstabelle erscheinen sind Eingang I&sub1; und Eingang I&sub2;. Gegenwärtig sind die Werte für Eingang I&sub1; und Eingang I&sub2; Null (1065, Fig. 28). Während Block 994 wird die Variable "LETZTER AUSGANG FORTGESCHRIEBEN" gleich dem letzten Ausgang in der OLF Liste gesetzt, welcher Ausgang O&sub2; ist. Während Block 996 werden die Fortschreibungsausgangsprozeduren für alle Ausgänge ausgeführt, die in der OLNF Liste sind, und bei Block 998 wird der OLF-Zeiger gleich dem ersten Ausgang in der OLF Liste gesetzt, welcher O&sub2; ist (1067, Fig. 28). Während Block 1000 wird der FL-Eingangszeiger gleich dem ersten Eingang in der Durchführungsliste für O&sub2; gesetzt, welcher Eingang I&sub1; ist. Dies wird in Reihe 1068 aus Fig. 28 gezeigt. Während Block 1002 wird der gegenwärtige Wert für I&sub1; überprüft, um zu sehen, ob er gleich dem gespeicherten Wert für I&sub1; ist. Die gegenwärtigen und gespeicherten Werte für I&sub1; sind gleich, beide sind Null. Während Block 1014 wird eine Feststellung gemacht, daß der FL-Eingangszeiger nicht auf den letzten Eingang in der Durchführungsliste von Ausgang O&sub2; zeigt, und bei Block 1012 wird der Eingangszeiger gleich dem nächsten Eingang, Eingang I&sub2; in der Durchführungsliste von Ausgang O&sub2;, gesetzt (1070, Fig. 28). Während Block 1002 wird eine Abfrage durchgeführt, daß der gegenwärtige Wert für Eingang I&sub2; gleich dem gespeicherten Wert für Eingang I&sub2; ist, und bei Block 1014 wird eine Abfrage durchgeführt, daß I&sub2; gleich dem letzten Eingang in der Durchführungsliste von Ausgang O&sub2; ist. Während Block 1016 wird eine Abfrage durchgeführt, daß die letzte AUSGANG FORTGESCHRIEBEN Variable den Ausgang O&sub2; enthält, und daß Ausgang O&sub2; der Ausgang ist, auf den durch den OLF-Zeiger gegenwärtig gezeigt wird. Keine der Eingänge, die in der Durchführungstabelle sind, wurden während dieser Unteriteration verändert, und deshalb können die Fortschreibungszustandsprozeduren für alle Blöcke mit einem Zustand bei Block 1018 ausgeführt werden. Block 1020 stellt fest, daß das Inkrement "T" nicht gleich der maximalen Anzahl von Iterationen für dieses Verfahren ist. Während Block 1023 wird der Iterationenzähler um 1 erhöht. Dieser Schritt symoblisiert, daß die zweite Iteration für den Laufzeit Simulator nun ausgeführt werden wird (t = 1), und der Quellblock 1040 wird eine 1 anstatt einer 0 ausgeben, wenn er ausgeführt wird. Während Block 992 wird eine Kopie des numerischen Wertes der Eingänge I&sub1; und I&sub2; gespeichert, beide enthalten einen Wert von 0. Während Block 994 wird die Variable LETZTER AUSGANG FORTGESCHRIEBEN gleich dem letzten Ausgang in der OLF-Liste gesetzt, welcher Ausgang O&sub2; ist. Bei Block 996 werden die Fortschreibungsausgangsprozeduren für alle Ausgänge in der OLNF Liste ausgeführt. Der Ausgang O&sub1; von Quellblock 1040 ist in der OLF Liste, und er wird auf einen Wert von 1 fortgeschrieben werden, und zugleich wird der Eingang I&sub1; auch auf den Wert von 1 fortgeschrieben (1072, Fig. 28). Während Block 998 wird der OLF-Zeiger auf den ersten Ausgang in der OLF Liste gesetzt, welcher noch Ausgang O&sub2; ist. Der Eingangszeiger wird gleich dem ersten Eingang für die Durchführungsliste von Ausgang O&sub2; gesetzt, welcher I&sub1; ist (1074, Fig. 28). Bei Block 1002 wird eine Feststellung gemacht, daß der gegenwärtige Wert von I&sub1; nicht gleich dem gespeicherten Wert von I&sub1; ist. I&sub1; hat den Wert 1, und I&sub1; wurde bei Block 992 mit einem Wert von 0 gespeichert. Während Block 1004 wird die Fortschreibungsausgangsprozedur ausgeführt, die Ausgang O&sub2; zugeordnet ist. Die Fortschreibungsausgangsprozedur, die O&sub2; zugeordnet ist, ist eine Addition der Eingänge I&sub1; und I&sub2;. Eingang I&sub1; ist gegenwärtig gleich 1 und Eingang I&sub2; ist gegenwärtig gleich 0. Eine Addition der Inhalte von sowohl I&sub1; als auch I&sub2; ist gleich 1, und Ausgang O&sub2; wird der Wert 1 zugewiesen. Eingänge I&sub3; und I&sub4; werden auch fortgeschrieben, um den Wert 1 aufzuweisen, weil sie beide mit Ausgang O&sub2; verbunden sind (1076, Fig. 28). Während Block 1006 wird die Variable AUSGANG FORTGESCHRIEBEN gleich dem letzten Ausgang gesetzt, auf den durch den OLF-Zeiger gezeigt wurde, Ausgang O&sub2;. Während Block 1008 werden die Eingangswerte für I&sub1; und I&sub2; gespeichert (1078, Fig. 28). Bei Block 1010 wird der OLF- Zeiger zu dem nächsten Ausgang in der OLF Liste erhöht. Es gibt gegenwärtig nur einen Ausgang in der OLF Liste, O&sub2;, weshalb der FL-OLF Zeiger an den Anfang der Liste zurückgesetzt wird, welcher Ausgang O&sub2; ist. Die Verarbeitung kehrt zu Block 1000 zurück, der den FL-Eingangszeiger gleich dem ersten Eingang in der Durchführungsliste von O&sub2;, I&sub1;, setzt. Bei Block 1002 wird eine Abfrage durchgeführt, daß der gegenwärtige Wert für Eingang I&sub1; gleich dem gespeicherten Wert für Eingang I&sub1; ist, beide sind gleich 1. Bei Block 1014 wird eine Feststellung gemacht, daß Eingang I&sub1; nicht der letzte Eingang in der Durchführungsliste von O&sub2; ist, und bei Block 1012 wird der Eingangszeiger zu Eingang I&sub2; in der Durchführungsliste von O&sub2; weiterbewegt (1080, Fig. 28) Bei Block 1002 wird eine Feststellung gemacht, daß der gegenwärtige Wert von Eingang I&sub2; gleich dem gespeicherten Wert von Eingang I&sub2; ist, beide sind gleich 0. Während Block 1014 wird festgestellt, daß I&sub2; der letzte Eingang in der Durchführungsliste von O&sub2; ist, und bei Block 1016 wird eine Feststellung gemacht, daß die Variable AUSGANG FORTGESCHRIEBEN gleich dem gegenwärtigen Ausgang ist, auf den durch den OLF Zeiger gezeigt wird, Ausgang O&sub2;. Deshalb haben sich alle Änderungen in den Eingängen und Ausgängen zu dem System beruhigt, und deshalb wird bei Block 1018 die Fortschreibungszustandsprozedur für alle Zustandsblöcke ausgeführt. Zu diesem Zeitpunkt ist die Iteration vollständig, und bei Block 1020 wird festgestellt, daß die maximale Anzahl von Iterationen ausgeführt worden ist. Die Simulation wird beendet und die Verarbeitung kehrt bei Block 1022 zu dem aufrufenden Verfahren zurück (1082, Fig. 28).
- Die sechs Ausführungsformen der VORRICHTUNG ZUM ERSTELLEN VON SIMULATIONSPROGRAMMEN, die vorstehend beschrieben wurden, dienen zur Entwicklung von Computer Softwareprogrammen als Darstellung eines zu simulierenden Blockdiagramms. Ein Verfahren und eine Vorrichtung zur Steuerung dieser Software Computerprogramme während der Ausführung/Simulation wird nunmehr erläutert.
- Indem man in der Lage ist, die Ausführung eines Software Computerprogramms als Darstellung des Blockdiagramms zu steuern, kann ein Konstrukteur auf effektivere Weise komplexere System mittels Blockdiagramme simulieren.
- Durch das Hinzufügen von Steuerungseingängen zu verschiedenen Blöcken eines Blockdiagramms, kann der Konstrukteur Blockdiagramme von Systemen entwerfen, die Abschnitte haben, die Signale bei unterschiedlichen Iterationsraten bearbeiten und verarbeiten, und/ oder ein Konstrukteur kann ein Blockdiagramm eines Systems entwerfen, das den Betrieb oder Nicht-Betrieb von verschiedenen Abschnitten des Blockdiagramms abhängig von dem Wert bestimmter Signale ermöglicht. (Beispiele von beiden Möglichkeiten werden in den Fig. 34 bzw. 37 beschrieben).
- Fig. 29 stellt ein einfaches Blockdiagramm dar, bei dem ein Steuereingang an einen der Blöcke hinzugeführt wird. Insbesondere ist Block 1084 ein Quellblock mit einem Ausgang O&sub1; 1090, und Block 1088 ist ein Aufnahmeblock mit Eingang I&sub4; 1092. Block 1086 hat drei Eingänge und einen Ausgang. Eingang I&sub1; 1090 und Eingang I&sub2; 1094 sind Dateneingänge, die gemäß der durch den Block dargestellten Funktion verarbeitet werden. Eingang I&sub3; ist ein Steuereingang, der die Funktionseigenschaft, die der Block ausführt, beeinflußt. Zum Beispiel könnte die Funktion des Blocks sein, wenn I&sub3; einen Eingang von 0 hat, normal zu arbeiten. Allerdings könnte, wenn der Eingang I&sub3; einen Eingang von 1 hat, die Funktionseigenschaft des Blocks sein, 0 auszugeben (also ausgeschaltet). Die sechs ABFOLGE Verfahren zur Generierung und Ausführung von Softwareprogrammen als Darstellung von Blockdiagrammen behandeln die Steuereingänge wie jeden anderen Eingang. Anders ausgedrückt, werden die Steuereingänge durch die sechs ABFOLGE Verfahren in der gleichen Weise in eine Abfolge gebracht, wie normale Dateneingänge.
- Die Softwareprozeduren als Darstellung von Blöcken mit Steuereingängen verfügen über bedingte Softwareanweisungen, um den Steuereingang zu interpretieren und darauf zu antworten, indem die charakteristische Funktion der Softwareprozedur verändert wird. Auf diese Weise kann ein Block mehr als eine Funktion darstellen, die sich abhängig von dem einen oder mehreren Steuereingängen zu dem Block verändert. Betrachten Sie zum Beispiel einen standard Einheitsverzögererblock 1102, wie in Fig. 30 dargestellt. Dieser Block stellt üblicherweise die Gleichung y(t) = x(t-1) dar. Mit anderen Worten ist der Ausgang y(t) der Eingang x(t-1) eines vorangegangenen Zeitschritts. Um Steuerung zu ermöglichen, wird ein neuer Eingang unten an dem Block hinzugefügt (Fig. 30). In diesem Fall ist der neue Eingang der Steuereingang für eine "Halte" Funktion. "Halte" hat die Wirkung, den letzten Ausgang des Blocks konstant zu halten. Die Funktion des Blocks stellt nun die bedingte Gleichung falls
- dar, wobei y(t) der Ausgang des Blocks ist, x(t) der Eingang zu dem Block ist und C(t) der Steuereingang zu dem Block ist. Diese Gleichung bedeutet im Grunde, daß wenn der Steuereingang C(t) niedrig ist (≤0), arbeitet der Block wie ein herkömmlicher Block. Wenn allerdings der Steuereingang C(t) hoch ist (> 0), hält der Block den letzten Ausgang während dieses Zeitschritts konstant. Insbesondere ändert der Steuereingang die charakteristische Funktion des Verzögerungsblocks, indem der gezwungen wird, die Eingänge abhängig von dem Steuereingang auf eine bestimmte Weise zu verarbeiten. Die Softwareprozedur als Darstellung dieses Blocks verfügt über bedingte Anweisungen, die den Steuereingang interpretieren und darauf mit der geeigneten Aktion antworten, abhängig davon, ob der Steuereingang hoch oder niedrig ist.
- Ein anderer Steuereingang ist der "RÜCKSETZEN" Eingang. Der Zweck des "rücksetzens" ist es, die Parameter, Zustandsvariable, Konstanten, usw. der Funktionscharakteristik auf ihre ursprünglichen Werte zurückzusetzen, wenn die Simulation anfängt. Ein solches Beispiel ist es, einer Integrator Funktion "Rücksetzen" hinzuzufügen. Die Charakteristik eines Integrator Blocks (Fig. 31) wird durch die Gleichung
- dargestellt, wobei y(t) der Ausgang des Blocks ist, und x(k) eine Reihenfunktion ist, und IC ein anfänglicher konstanter Parameterwert ist, der von dem Konstrukteur vorgegeben wird. Ein Integratorblock mit einem Steuereingang wird in Fig. 32 dargestellt. Der Zweck des Steuereingangs ist es, die Integratorfunktion zurück auf ihren ursprünglichen konstanten Wert, IC, zurückzusetzen. Der Block stellt nun die bedingte Gleichung falls
- dar, wobei y(t) der Ausgang des Integratorblocks ist, x(t) die Summe einer Reihe ist, und IC der konstante Wert ist. Im wesentlichen arbeitet der Integratorblock so wie er es normalerweise tut, wenn der Steuereingang C(t) kleiner als oder gleich 0 ist (C(t) =< 0). Falls der Steuereingang allerdings größer als 0 ist (C(t) > 0), dann wird der Integrator auf den konstanten Wert, IC, zurückgesetzt. Die Softwareprozedur als Darstellung dieses Blocks enthält eine bedingte Anweisung, um den Steuereingang zu interpretieren und festzustellen, welche Funktionseigenschaft auszuführen ist. Im wesentlichen kann während der Ausführung der Integratorfunktion abhängig von dem Wert des Steuereingangs eine dieser beiden Funktionen auftreten.
- Ein anderes Beispiel der Steuerung der Funktionseigenschaft eines Blocks ist die, die Werte der Parameter der Funktion "setzen" zu können (Fig. 32A). Zum Beispiel hat ein Koeffizient die folgende Charakteristik:
- y(t)=k(x(t)),
- wobei y(t) der Ausgang ist, x(t) der Eingang ist, und k ein Koeffizientenwert des Blocks ist. Falls diesem Block eine Steuerfähigkeit hinzugefügt würde, könnte sich die Funktionscharakteristic ändern in: falls
- wobei y(t) der Ausgang ist, x(t) der Eingang ist, und k und B zwei unterschiedliche Koeffizientenwerte des Blocks sind. Wenn der Steuereingang größer als Null ist (C(t) > 0), wird das Eingangssignal x(t) mit k multipliziert. Wenn allerdings der Steuereingang kleiner als oder gleich Null ist, wird das Eingangssignal x(t) mit B multipliziert.
- Fig. 33 stellt die Integratorfunktion dar mit Steuereingängen sowohl zum "Rücksetzen" als auch zum "Halten". Der Block könnte die nachfolgende Gleichung darstellen: falls
- wobei y(t) gleich dem Ausgang ist, IC gleich einem konstanten Wert ist, und x(t) gleich dem Eingang zu dem Block ist. Dieser Integratorblock arbeitet im wesentlichen als ein normaler Integrator, wenn die Steuereingänge C&sub1;(t) und C&sub2;(t) kleiner als oder gleich 0 sind (C&sub1;(t) und C&sub2;(t) =< 0). Der Integratorblock wird auf den ursprünglichen konstanten Wert IC zurückgesetzt, wenn C&sub1;(t) größer als 0 ist (C&sub1;(t) > 0). Schließlich wird die Integratorfunktion bei ihrem letzten Ausgang, y(t-1), konstant gehalten, wenn C&sub2;(t) größer als 0 ist und C&sub1;(t) kleiner als oder gleich 0 ist (C&sub2;(t) > 0 und C&sub1;(t) =< 0). Die Softwareprozedur als Darstellung dieser Integratorfunktion hat bedingte Anweisungen, um die verschiedenen Steuereingänge zu interpretieren und um auf die Steuereingänge zu antworten, indem die charakteristische Funktion des Integrators gemäß der obigen Bedingung beeinflußt wird.
- Indem bestimmte Blöcke in einem Blockdiagramm gesteuert werden können, kann der Anwender effektiverweise die Ausführung eines Blocks verändern, während die Simulation abläuft. Diese Fähigkeit ermöglicht es einem Simulator, den Betrieb bestimmter Blöcke oder einer Gruppe von Blöcken zu steuern, oder während einer Simulation die Ausführungsrate von einem oder mehreren Blöcken in einer Reihe von Blöcken zu steuern. Demnach kann der Anwender Blockdiagramme als Darstellung sehr komplexer Systeme entwerfen, die aus mehreren Untersystemen bestehen, die zu unterschiedlichen Zeiten während der Simulation ablaufen, und die Daten auf eine Weise verarbeiten, die von den bestimmten Eingangsdaten abhängt. Beispiele für komplexere Systeme, die modelliert werden können, sind Spracherkennungssysteme, adaptive Kommunikation, Echtzeit Entzerrung und adaptive Datenverschlusselungssysteme.
- Zwei Beipsiele werden vorgestellt, um die Leistungsfähigkeit und Vorteile aufzuzeigen, Blockdiagramme mit Steuerungsfähigkeiten zu simulieren. Das erste Beipsiel ist ein mehrfachraten Steuerungsschaltkreis (Fig. 34), und das zweite Beispiel ist ein komplizierteres Signalsteuerungssystem (Fig. 38).
- Bezugnehmend auf die Fig. 34, 35 und 36 wird ein ausführliches Beispiel eines mehrfachraten Systems simuliert, indem der oben diskutierte Steuerungsgedanke verwendet wird. Insbesondere ist Fig. 34 ein mehrfachraten Blockdiagramm mit Steuereingängen, das auf der Anzeige des Simulators aus Fig. 1A entworfen wurde, um eine einfache Korrelation zweier Wellenformen durchzuführen. Fig. 35 ist eine Fluß-Blockdiagramm Version, die das gleich System zur Korrelation zweier Wellenformen zeigt, allerdings wurde es von dem Anwender auf Papier entworfen. Das gezeigte System wird auch wizwei Verzögerer Korrelationvt genannt. Eine Zeitgeber 1114 ermöglicht es dem System die Muster zweier Wellenformen, die von der Signalquelle 1110 und Signalquelle 2 1112 generiert wurden, abzutasten und zu vergleichen. Eine skalare Vektormultiplikation wird bei Block 1122 ausgeführt, wenn ein Steuereingang bestimmt, daß die Vektoroperation ausgeführt werden soll. Zusätzlich speichert Block 1124 nur Informationefn, wenn der Steuereingang bestimmt, daß er dies tun soll. Auf diese Weise tastet dieses Blockdiagramm die zwei Wellenformen, die bei den Blöcken 1110 und 1112 erzeugt wurden, auf effiziente Weise ab und speichert nur die Informationen ab, die durch die skalare Vektormultiplikation erzeugt wurden. Genauer gesagt gibt der Signal Quellblock 1110 0 aus bei T=0, 0,1 bei T=1, 0,2 bei T=2, 0,3 bei T=3, 0,4 bei T=4 und 0,5 bei T=5. Dieser Ausgang stellt Ausgang O&sub1; 1126 und Eingang I&sub1; 1126 zu dem Einheitsverzögerungsblock 1116 dar. Quellblock 2 1112 erzeugt Ausgang O&sub2; 1132, der 0 ist bei T=0, -0,1 bei T=1, -0,2 bei T=2, -0,3 bei T=3 und -0,4 bei T=4. Dieser Ausgang wird Eingang I&sub2; 1130 von Block 1118.
- Der Einheitsverzögerungsblöcke 1116 und 1118 haben die Eigenschaft:
- y(t)=x(t-1),
- wobei y(t) der Ausgang ist und x(t-1) gleich dem Eingang des vorangegangen Zeitschritts ist. Beide Ausgänge des Quellblocks 1110 und des Quellblocks 2 1112 sind über Linien 1128 bzw. 1130 unmittelbar mit dem skalaren Vektorproduktblock 1122 verbunden. Ausgänge O&sub5; und O&sub6; der Einheitsverzögerungsblöcke sind auch mit dem Vektorproduktblock verbunden. Für dieses Beispiel sind die Zustände der Einheitsverzögerungsblöcke auf 0 initialisiert. Mit anderen Worten ist O&sub5; gleich 0 bei T=0, und O&sub6; ist gleich 0 bei T=0.
- Der skalare Vektorproduktblock 1122 hat die folgende Charakteristik: falls
- wobei z(t) gleich dem Ausgang des Blocks ist, und C(t) gleich dem Steuereingang zu dem Block ist. Diese Gleichung bedeutet im wesentlichen, daß, wenn der Steuereingang kleiner als oder gleich 0 ist (C(t) =< 0), der Block wie ein herkömmlicher skalarer Produktblock arbeitet. Wenn der Steuereingang allerdings größer als 0 ist (C(t) > 0), dann gibt der Block einen konstanten Wert, z(t-1), aus. Der Ausgang z(t) desblocks 1122 ist O&sub7; 1132. Eingang I&sub8; 1132 zu dem Signalaufnahmeblock 1124 ist dem Ausgang O&sub7; gleichwertig. Der Signalaufnahmeblock wird den Ausgang z(t) unter den nachfolgenden Bedingungen speichern:
- speichere z(t), falls C&sub2;(t) =< 0, und
- keine Operation, falls C&sub2;(t) > 0,
- wobei z(t) der Ausgang des skalaren Vektorproduktblocks 1122 ist, und C&sub2;(t) ein Steuereingang zu dem Block ist. Im Grunde bedeutet diese Gleichung, daß, wenn der Steuereingang C&sub2;(t) kleiner als oder gleich 0 ist (C&sub2;(t) =< 0), der Signalaufnahmeblock dann den Ausgang z(t) speichert. Falls allerdings der Steuereingang C&sub2;(t) größer als 0 ist (C&sub2;(t) > 0), speichert die Signalaufnahme keine Eingangswerte. Der Steuereingang C&sub1;(t) 1136 und C&sub2;(t) 1138 werden beide ursprünglich bei Block 1114 generiert. Dieser Block ist ein Zeitgeberblock, und er gibt bei O&sub3; eine 1 aus bei dem ersten Zeitschritt und bei jedem weiteren Zeitschritt (0, 1, 0, 1, usw.). Ausgang O&sub3; von Block 1114 wird der Eingang I&sub3; zu dem Invertiererblock 1120. Der Invertiererblock invertiert den Ausgang von Block 1114 und gibt eine 0 aus bei dem ersten Zeitschritt und bei jedem weiteren Zeitschritt (1, 0, 1, 0, usw.). Ausgang O&sub4; des Invertiererblocks 1120 wird zu den Steuereingängen C&sub1;(t) und C&sub2;(t) zu den Blöcken 1122 bzw. 1124.
- Fig. 35 ist ein anwenderbestimmtes Fluß-Blockdiagramm, das der Anwender auf einem Blatt Papier erstellt, bevor der Anwender das Blockdiagramm aus Fig. 34 zur Simulation entwirft. Block 1144 aus Fig. 35 setzt das Zeitinkrement auf 0, und Block 1146 stellt fest, wann t Modulo 2 ist. Dann werden die Blöcke 1148 und 1150 ausgeführt. Block 1148 berechnet das skalare Produkt:
- und das Ergebnis z(t) des skalaren Produkts wird bei Block 1150 gespeichert. Falls t nicht gleich Modulo 2 ist, wird die Verarbeitung dann bei Block 1154 fortgesetzt, wo das Zeitinkrement um 1 erhöht wird. Ebenso wird, nachdem der Ausgang bei Block 1150 gespeichert wurde, Block 1154 aufgerufen, um den Zeitzähler um 1 zu erhöhen. Falls alle Datenpunkte verarbeitet worden sind, wird der KORRELATIONS Algorithmus dann bei Block 1156 verlassen. Die Blöcke 1122, 1124 und 1114 aus Fig. 34 modellieren die Blöcke 1146, 1148 und 1150 aus Fig. 35. Ohne die Fähigkeit, dem Blockdiagramm aus Fig. 34 eine Steuerung hinzuzufügen, könnte die Abfolge der Blöcke und ihr Betrieb nicht einfach dargestellt werden. Insbesondere könnte das mehrfachraten Merkmal, das bei Block 1146 auftritt, wenn t Modulo 2 ist, nicht durch einen standard Blockdiagramm-Simulator entworfen werden.
- Fig. 36 stellt den Zustand der Ausgänge und Eingänge des Korrelationsblockdiagramms aus Fig. 34 dar. Die senkrechten Spalten stellen entweder Ausgänge oder Eingänge dar, und jede waagerechte Reihe entspricht einem Zeitschritt. Als ein anschauliches Beispiel, wie das Blockdiagramm aus Fig. 34 arbeitet, wird nun der Betrieb eines Zeitschritts erläutert. Insbesondere ist der Ausgang O&sub1; von Block 1110 bei t=2 0,2, und der Ausgang O&sub2; von Block 1112 ist -0,2. Der Ausgang O&sub3; von Block 1114 ist 1, und der Ausgang des Invertiererblocks 1120 ist 0. Der Einheitsverzögererblock 1116 hat einen Ausgang O&sub5; von 0,1, und der Einheitsverzögererblock 1118 hat einen Ausgang O&sub6; von -0,1. Die Dateneingänge zu dem skalaren Vektorproduktblock 1122 sind I&sub4;=0,1, I&sub5;=0,2, I&sub6;=-0,2 und I&sub7;=-0,1. Die Eingänge I&sub4; und I&sub5; entsprechen x&sub1;(t) und x&sub2;(t) der obigen skalaren Vektorproduktgleichung. Die Eingänge I&sub6; und I&sub7; entsprechen y&sub1;(t) bzw. y&sub2;(t) (betrachten Sie die oberste Reihe von Fig. 36). Der Steuereingang für den skalaren Vektorproduktblock 1122 ist I&sub9;. Wenn der Steuereingang kleiner als oder gleich ist, ist er durch die charakteristische Gleichung des skalaren Vektorproduktblocks definiert. Zusätzlich besagen der Steuereingang I&sub1;&sub0; und die oben für den Signal Quellblock aufgestellte charakteristische Gleichung, daß, wenn der Steuereingang kleiner als oder gleich 0 ist, der Signalaufnahmeblock dann den Wert speichert, der von dem skalaren Vektorproduktblock erzeugt wurde. Demnach wird die Gleichung berechnet für z(t=2) = (0,1) (-0,2) + (0,2) (-0,1) = -0,04. Die Signalaufnahme speichert den Wert -0,04 bei t=2 (Fig. 36).
- Fig. 37 ist ein Beispiel eines Flußdiagramms, das von einem Anwender auf Papier entworfen wurde, und es stellt ein bedingtes Verarbeitungsproblem dar. Im Wesentlichen ändert sich in diesem Beispiel die charakteristische Funktion dieses Systems abhängig von der Natur des Eingangssignals zu dem System. Mit anderen Worten stellt der Betrieb des Systems während der Ausführung automatisch von einer Funktion auf eine andere Funktion um. Insbesondere würde dieses Beispielsystem bei Block 1160 ein Eingangssignal x(t) bewerten, um festzustellen, ob das Eingangssignal oberhalb oder unterhalb eines bestimmten Schwellenwertes ist. Bei dem Beispielsystem wird, wenn das Eingangssignal x(t) größer als 0 ist (x(t) > 0), die in Block 1162 beschriebene Funktion ausgeführt. Falls allerdings der Eingangssignal Schwellenwert nicht größer als 0 ist, dann führt das System die in Block 1166 dargestellte charakteristische Funktion aus. Mit anderen Worten wird die charakteristische Funktionalität des Systems durch ein bestimmtes Eingangssignal x(t) bestimmt. Man kann sich das in Fig. 37 gezeigte System als ein alleinstehendes System vorstellen oder als ein Untermoduls eines größeren Systems, wobei der Betrieb dieses Untermoduls abhängig ist von dem Eingangssignal x(t). Wenn x(t) größer als 0 ist, folgt die Funktionalität eines Blocks der Gleichung:
- y(t) = 2(x(t)) - 2(letztes negatives x(t)),
- wobei y(t) gleich dem Ausgang ist, und x(t) gleich dem Eingang ist. Block 1166 hat die folgende Funktionsgleichung:
- y(t) = -2(x(t)) + 2(letztes positives x(t)),
- wobei y(t) gleich dem Ausgang ist, und x(t) gleich dem Eingang des Blocks ist. Block 1164 stellt fest, ob alle Eingangsdatenpunkte x(t) von dem System verarbeitet worden sind, und falls nicht, wird das System dann bei Block 1160 den nächsten Datenpunkt verarbeiten. Dieser Vorgang wird wiederholt bis alle Datenpunkte verarbeitet worden sind, und das System kehrt bei Block 1167 zu seiner normalen Verarbeitung zurück.
- Üblicherweise könnte das System aus Fig. 37 mit einem System zur Blocksimulation nicht auf einfache Weise modelliert werden, weil diese Systeme die charakteristische Funktion eines bestimmten Blocks nicht beeinflussen konnten während ein System die Simulation ausführte.
- Fig. 38 ist ein Blockdiagramm, das der Steuerungsmöglichkeit des Flußdiagramms aus Fig. 37 auf effektive Weise Rechnung trägt. Das Blockdiagramm aus Fig. 38 verwendet Blöcke, die eine Steuerungsfähigkeit haben, um die charakteristische Funktion des bestimmten Blocks zu beeinflussen.
- Insbesondere sind die Blöcke 1172 und 1173 Koeffizientenblöcke, die die nachfolgende charakteristische Haltefunktion haben: falls halte(t)
- wobei y(t) gleich dem Ausgang ist, x(t) gleich dem Eingang ist, und k gleich dem Wert des Koeffizeienten ist, 2 oder -2. Im Grunde bedeutet diese Gleichung, daß, wenn der Steuereingang halte(t) kleiner als oder gleich 0 ist (halte(t) =< 0), dann multipliziert der Block das Eingangssignal mit einer Konstanten k. Falls allerdings der Steuereingang größer als 0 ist (halte(t)> 0), dann fährt das System fort, den letzten Ausgang auszugeben, bis der Eingang kleiner als oder gleich 0 wird. Die Softwareprozeduren als Darstellung dieser Koeffizientenblöcke verfügen über bedingten Anweisungen, die die beschriebenen Funktionseigenschaften ausführen.
- Die Steuereingänge werden durch den Schwellenwertblock 1191 bzw. den Invertiererblock 1188 generiert. Der Schwellenwertblock folgt der nachfolgenden Charakteristik: falls Schwellenwert
- wobei y(t) der Ausgang ist, und x(t) der Eingang zu dem Block ist. Im Grunde bedeutet diese Gleichung, daß, wenn der Eingang größer als ein Schwellenwert ist (Schwellenwert = 0), dann gibt der Block eine 1 aus. Falls allerdings das Eingangssignal kleiner als oder gleich dem Schwellenwert ist, dann gibt der Block eine -1 aus. Der Ausgang O&sub5; 1190 des Schwellenwertblocks 1191 wird zum Steuereingang I&sub9; 1186 zu dem Koeffizientenblock 1173. Zusätzlich wird der Ausgang O&sub5; 1190 zu dem Eingang I&sub4; 1190 zu dem Invertiererblock 1188. Die Charakteristik des Invertiererblocks ist die folgende: falls
- wobei y(t) der Ausgang ist, und x(t) der Eingang zu dem Block ist. Im Grunde bedeutet diese Gleichung, daß, wenn das Eingangssignal x(t) größer als 0 ist (x(t) > 0), dann ist der Ausgang des Blocks eine 1. Falls allerdings das Eingangssignal kleiner als oder gleich 0 ist (x(t) =< 0), dann gibt der Block eine 0 aus. Wieder enthält die Softwareprozedur als Darstellung dieses Blocks eine bedingte Anweisung, um zu festzustellen, ob eine 1 oder eine 0 durch den Block ausgegeben werden sollte. Der Ausgang O&sub6; des Invertiererblocks 1188 und O&sub5; des Schwellenwertblocks 1191 werden zum Steuereingang I&sub8; 1184 bzw. I&sub9; 1186 des Koeffizientenblocks 1172 bzw. 1173.
- Die Ausgänge der Koeffizientenblöcke O&sub2; 1174 und O&sub3; 1178 sind die Eingänge I&sub5; 1174 und I&sub6; 1178 des Additionsblocks 1176. Die charakteristische Funktion des Additionsblocks ist die folgende:
- y(t) x&sub1;(t) + x&sub2;(t),
- wobei y(t) der Ausgang des Blocks ist, und x&sub1;(t) und x&sub2;(t) die Eingänge zu dem Block sind. Im Grunde addiert der Additionsblock Eingang I&sub5; 1174 zu Eingang I&sub6; 1178, um Ausgang O&sub4; 1180 zu erzeugen. Ausgang O&sub4; 1180 ist der Eingang I&sub7; 1180 des Signalaufnahmeblocks 1182. Dieser Block arbeitet als ein normaler Signalaufnahmeblock, indem der Ausgang O&sub4; in einem Speicher gespeichert wird.
- Block 1168 ist der Signalquellenblock zu dem System, und seine Eigenschaft ist es, die Datenwerte 0, 1, 2, -3, -4. 5. -6 und 7 auszugeben. Dieser Ausgangsdatenstrom ist Ausgang O&sub1; 1169. Ausgang O&sub1; 1169 wird zum Eingang I&sub1; 1192 zu dem Schwellenwertblock 1191. Zusätzlich ist der Ausgang O&sub1; 1169 der Eingang I&sub2; 1170 des Koeffizientenblocks 1172, der Eingang I&sub3; 1194 zu dem Koeffizientenblock 1173. Der Konstrukteur des Systems wird die Koeffizienten und die Parameter des Blocks während der Zeit setzen, in der er das Blockdiagramm aus Fig. 38 entwirft. Insbesondere wird Koeffizient k von Block 1172 gleich 2 gesetzt werden, Koeffizient k von Block 1173 wird auf -2 gesetzt werden, und der Schwellenwert von Block 1191 wird gleich 0 gesetzt werden.
- Bezugnehmend auf die Fig. 37, 38 und 39 wird nun ein ausführliches Beispiel erläutert. Fig. 39 ist eine Tabelle, die den Zustand der verschiedenen Ausgänge und Eingänge zu jedem Block und dem Blockdiagramm aus Fig. 38 zeigt. Die waagerechten Reihen entsprechen den Ergebnissen von Operationen des Systems zu bestimmten Zeitschritten, und die senkrechten Spalten entsprechen entweder einem Ausgang oder einem Eingang. Bezugnehmend auf die waagerechten, Reihen, wenn Zeit t gleich 0 ist, ist der Ausgang O&sub1; des Signalquellenblocks 1168 eine 0. Dieser Ausgang wird zum Eingangswert I&sub1; für den Schwellenwertblock 1191. Wenn Eingang I&sub1; gleich 0 ist, gibt der Schwellenwertblock bei O&sub5; eine -1 aus. Ausgang O&sub5; ist der Eingang I&sub4; für den Invertiererblock 1198. Der Invertiererblock gibt bei O&sub6; eine 0 aus, wenn sein Eingang kleiner als Null ist. Ausgänge O&sub5; und O&sub6; sind der Steuereingang I&sub9; bzw. I&sub8; zu den Koeffizientenblöcken. Wenn der Steuereingang I&sub9; kleiner ist als 0, ist die Eigenschaft des Koeffizientenblocks 1173 -2 Mal x(t). x(t) ist gleich dem Eingang I&sub3; zu dem Koeffizientenblock 1173, und er ist momentan gleich dem Ausgang O&sub1; von dem Signalquellenblock 1168. Demnach ist I&sub3; gleich 0, und der Ausgang des Koeffizientenblocks 1173 ist gleich 0. Der Steuereingang I&sub9; zu dem Koeffizientenblock 1172 ist größer als 0, so daß. der Koeffizientenblock seinen letzten Wert ausgibt, der gleich dem anfänglichen Wert des Blocks, 0, ist. Die Ausgänge der Koeffizientenblöcke O&sub2; und O&sub3; sind beide gleich 0, und sie sind die Eingänge I&sub5; und I&sub6; zu dem Additionsblock 1176. Der Ausgang O&sub4; des Additionsblocks ist gleich 0, und dieser Ausgang ist der Eingang I&sub7; des Aufnahmeblocks 1182.
- Nunmehr bezugnehmend auf die zweite waagerechte Reihe aus Fig. 39 ist Zeit t gleich 1, zur Symbolisierung des nächsten Zeitschritts für das System. Der Datenausgang für den Signalquellenblock ist gleich 1 für diesen Zeitschritt, und dieser Ausgang ist der Eingang I&sub1; zu dem Schwellenwertblock 1191. Der Ausgang des Schwellenwertblocks bei O&sub5; ist eine +1, weil der Ausgang des Blocks gleich +1 ist, wenn der Wert des Eingangs zu dem Schwellenwertblock größer als ist. Der Ausgang O&sub5; ist Eingang I&sub4; zu dem Invertiererblock 1188. Dieser Block gibt eine 0 aus, weil der Eingang I&sub4; größer als 0 ist. Der Steuereingang I&sub9; zu dem Koeffizientenblock 1173 ist gleich 1. Der Koeffizientenblock 1173 gibt seinen letzten Ausgangswert aus, weil der Steuereingang größer als 0 ist. Der letzte Wert für den Koeffizientenblock 1173 war eine 0, so daß O&sub3; gleich 0 ist. Der Steuereingang I&sub8; des Koeffizientenblocks 1172 ist gleich 0, was bedeutet, daß der Koeffizientenblock 1172 normal arbeitet. Der Eingang I&sub2; zu dem Koeffizientenblock 1172 ist gleich dem Ausgang O&sub1; des Signalquellenblocks. Ausgang O&sub1; ist gleich 1, und demnach ist der Ausgang von O&sub2; des Koeffizientenblocks 1172 gleich 2. Der Additionsblock 1176 nimmt den Ausgang O&sub3; und den Ausgang O&sub2; als Eingänge I&sub5; bzw. I&sub6;. Der Ausgang O&sub4; des Additionsblocks 1176 ist gleich 2. O&sub4; wird zum Eingang I&sub7; zu dem Signalaufnahmeblock 1182, der den Wert 2 speichert.
- Bezugnehmend auf die dritte waagerechte Reihe aus Fig. 39, den dritten Zeitschritt, wenn t=2 ist, ist der Ausgang O&sub1; des Signalquellenblocks 1168 gleich 2, Dieser Ausgang ist der Eingang I&sub1; des Schwellenwertblocks 1191, der bei O&sub5; eine 1 ausgibt, weil der Eingangswert größer als 0 ist. O&sub5; ist der Eingang I&sub4; für den Invertiererblock 1188, und dieser Block gibt eine 0 aus, weil der Eingang größer als ist. Der Steuereingang I&sub9; für den Koeffiezientenblock 1173 ist gleich dem Ausgang O&sub5;. Der Steuereingang I&sub9; ist gleich 1, und demnach gibt der Koeffizientenblock 1173 seinen letzten Wert aus, der gleich 0 ist. Demnach ist Ausgang O&sub3; gleich 0. Der Steuereingang I&sub8; des Koeffizientenblocks 1172 ist gleich Ausgang O&sub6;, der 0 ist. Gemäß der Eigenschaft des Koeffizientenblocks, arbeitet der Koeffizientenblock normal, wenn der Steuereingang kleiner als oder gleich 0 ist. Demnach multipliziert der Koeffizientenblock 1172 den Eingang I&sub2; mit 2. Der Ausgang O&sub2; des Koeffizientenblocks ist gleich 4. Der Ausgang O&sub2; und der Ausgang O&sub3; sind die Eingänge I&sub5; bzw. I&sub6; des Additionsblocks 1176. Der Additionsblock addiert die Werte von I&sub5;, der gleich 4 ist, und I&sub6;, der gleich 0 ist. Ausgang O&sub4; ist gleich 4, und dieser Ausgang wird zu Eingang I&sub7; zu dem Signalaufnahmeblock 1182, der den Wert 4 speichert. Dieser Vorgang wird fortgesetzt, bis alle Dateneingänge von dem Signalquellenblock verarbeitet worden sind. Betrachten Sie Fig. 39 für die verbleibenden Iterationen des obigen Diagramms aus Fig. 38.
- Die Erfindung wurde anhand einer beispielhaften und bevorzugten Ausführungsform beschrieben, aber sie ist nicht darauf beschränkt. Ein Fachmann wird erkennen, daß eine Anzahl von zusätzlichen Änderungen und Verbesserungen an der Erfindung vorgenommen werden können. Zum Beispiel könnten eine Vielzahl von verschiedenen Softwaretechniken und eine Vielzahl von verschiedenen Softwaresprachen geeignet sein, um die offenbarte Erfindung zu implementieren.
Claims (29)
1. Einen programmierten Computer (10) verwendendes
Verfahren zum automatischen Erzeugen einer
Abfolgeliste von Prozedurabrufen (Figur 3B) für ein
abgetastetes Datensystem, das durch seine Netzliste
(16a) und eine Bibliothek (14a) dargestellt ist, wobei
die Abfolgeliste die Basis für eine funktionelle
Simulation des Systems ist, wobei das System
Systemblöcke ohne Verzögerung und Verzögerungsblöcke
aufweist, die zwischen Eingängen (I&sub1;) und Ausgängen
(O&sub1;) der Systemblöcke in einem funktionell operativen
System (Figuren 3 bis 64, 65, 72 bis 90) verbunden
sind, wobei einige der Systemblöcke gegenüber den
anderen funktionell unterschiedlich sind,
wobei die Bibliothek (14a) eine Vielzahl
unterschiedlicher Bibliotheksblöcke (Figur 3C)
aufweist und ein unterschiedlicher Bibliotheksblock
(Figur 30) jedem funktionell unterschiedlichen der
Systemblöcke entspricht und diesen darstellt,
wobei jede gespeicherte Netzliste (16a) für das System
die Identität jedes Systemblocks und die Verbindungen
(Figur 3A) der Eingänge (I&sub1;) und der Ausgänge (O&sub1;) der
Systemblöcke in diesem System darstellt,
wobei jeder Bibliotheksblock (14a) Darstellungen der
funktionellen Merkmale des betreffenden Systemblocks
(Figur 3B) beinhaltet, wobei jeder Bibliotheksblock
(14a) dann, wenn der entsprechende Systemblock ein
Block ohne Verzögerung ist, zumindest eine
Fortschreibungsausgangsprozedur (UO von Figur 3)
darstellt, die zu einer gegenwärtigen Zeit den Ausgang
des betreffenden Systemblocks als eine Funktion jedes
Eingangs davon zu der gegenwärtigen Zeit definiert,
gekennzeichnet durch folgende Schritte:
a) Betreiben des Computers zum Verarbeiten des
Inhalts der Netzliste (16a) und der Bibliothek
(14a) zum Bilden der Abfolge der
Fortschreibungsausgangsprozedurabrufe der
Bibliotheksblöcke (Figur 3C), die denjenigen
Systemblöcken entsprechen, die in der Netzliste
(16a) identifiziert sind,
b) für jeden Bibliotheksblock, der einem
Verzögerungssystemblock entspricht und, der vom
Anwender frei entworfen worden sein mag,
Darstellen wenigstens einer
Fortschreibungszustandsprozedur (US von Figur
3B), die zu einer gegenwärtigen Zeit einen
Zustand für den entsprechenden Systemblock als
eine Funktion wenigstens eines Eingangs für den
entsprechenden Systemblock zu einer früheren Zeit
und Darstellungen von wenigstens einer
Fortschreibungsausgangsprozedur (UO von Figur 3B)
definiert, die zu einer gagenwärtigen Zeit den
Ausgang des betreffenden Systemblocks als eine
Funktion entweder des laufenden Zustands des
entsprechenden Systemblocks oder des laufenden
Zustands des betreffenden Systemblocks und
wenigstens einen Eingang des betreffenden
Systemblocks zu der laufenden Zeit definiert,
wobei das Verfahren ferner durch den Schritt des
Überprüfens der Bibliotheksblöcke (Figur 3C)
gekennzeichnet ist, die den Systemblöcken
entsprechen, die in der Netzliste (16a)
bezeichnet sind, um festzustellen, ob jeder
solche Bibliotheksblock (Figur 3C) dem
Verzögerungssystemblock entspricht, und wenn ja,
den Schritt einschließt, dass in der Abfolgeliste
der Fortschreibungszustandsprozedurabruf jedes
solchen Bibliotheksblocks vom
Fortschreibungsausgangsprozeduraufruf des
Bibliotheksblocks getrennt ist.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnat,
dass die Bibliotheksblöcke (Figur 3C) ferner eine
Darstellung enthalten, ob jeder Bibliotheksblock
(Figur 3C) einem Verzögerungsblock entspricht, und
dass der Schritt des Überprüfens den Schritt des
Überprüfens dieser Darstellung, ob jeder
Bibliotheksblock einem Verzögerungsblock entspricht,
beinhaltet.
3. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass eines der Systeme eine
Rückkopplungsschleife aufweist, die einen der
Verzögerungsblöcke beinhaltet, der in der
Rückkopplungsschleife eingebunden ist, um so eine
Verzögerung in der Rückkopplungsschleife vorzusehen,
und
dass der Schritt des Verarbeitens und Bildens der
Abfolge den Schritt aufweist, dass in der Abfolge
Darstellungen des Fortschreibungssystems und die
Fortschreibungsausgangsprozeduren für den
Bibliotheksblock, der diesem Verzögerungsblock in
einer Rückkopplungsschleife entspricht, enthalten
sind.
4. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des Bildens
einer Darstellung jeder
Fortschreibungszustandsprozedur für einen
entsprechenden ersten Systemblock in der Abfolge den
Schritt des Überprüfens der Abfolge für das
Vorhandensein in der Abfolge der Darstellungen jeder
der Prozeduren beinhaltet, die jeden der Eingänge zum
betreffenden Verzögerungsblock definieren und dazuhin
eine Darstellung jeder Fortschreibungszustandsprozedur
zusätzlich dazu in der Abfolge hinzufügen.
5. Verfahren nach einem der vorhergehenden Ansprüche,
gekennzeichnet durch den Schritt des in eine Abfolge
Bringens jeder Darstellung einer
Fortschreibungszustandsprozedur in einer solchen
Abfolge nachfolgend auf jede Darstellung einer
Fortschreibungsausgangsprozedur für denselben
Verzögerungsblock.
6. Verfahren nach einem der vorhergehenden Ansprüche,
gekennzeichnet durch die Schritte des in eine Abfolge
Bringens jeder Darstellung einer
Fortschreibungsausgangsprozedur in eine solche Abfolge
nachfolgend auf die Darstellung jeder
Fortschreibungsausgangsprozedur, die erforderlich ist,
um jeden Eingang für den betreffenden Systemblock, der
den Ausgang für einen solchen Systemblock unmittelbar
beeinflusst, zu definieren.
7. Verfahren nach Anspruch 5, gekennzeichnet durch die
Schritte das in eine Abfolge Bringens jeder
Darstellung einer Fortschreibungszustandsprozedur in
die Abfolge nachfolgend auf die Darstellung
irgendeiner Fortschreibungsausgangsprozedur, die
erforderlich ist, um jeden Eingang für den
betreffenden Systemblock zu definieren.
8. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des
Verarbeitens und Bildens einer Abfolge den Schritt des
Bildens von Darstellungen eines mittels eines
Computers ausführbaren Computerprogramms beinhaltet.
9. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des
Verwendens des Abfolgeprogramms den Schritt des
Verwendens eines Abfolgesteuercomputerprogramms
beinhaltet, das dadurch gekennzeichnet ist, dass es
von den Darstellungen der Fortschreibungszustands- und
Fortschreibungsausgangsprozeduren in der Bibliothek
getrennt ist.
10. Verfahren nach einem vorhergehenden Ansprüche, dadurch
gekennzeichnet, dass die Schritte des Verarbeitens und
Bildens einer Abfolge den Schritt des Bildens von
Darstellungen eines Computerprogramms und der
Ausführung desselben für die Simulation des Betriebs
des funktionellen Systems beinhalten.
11. Verfahren nach Anspruch 10, dadurch gekennzeichnet,
dass der Schritt des Ausführens den Schritt aufweist,
die Fortschreibungszustandsprozedur getrennt von der
Fortschreibungsausgangsprozedur entsprechend jedem
zweiten Systemblock, der in der Abfolge dargestellt
ist, auszuführen.
12. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des
Verarbeitens und Bildens einer Abfolge den Schritt des
Ausführens der Prozeduren, die in einer solchen
Abfolge für die Simulation des Betriebes des
Blockdiagramms während der Bildung solcher
Darstellungen dargestellt sind, beinhaltet.
13. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des
Verarbeitens und Bildens einer Abfolge den Schritt des
Ausführens der Prozeduren in der Abfolge beinhalten,
um auf einer Echtzeitbasis ein extern an mindestens
einem der Systemblöcke vorgesehenes Eingangssignal zu
verarbeiten.
14. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet dass der Schritt des
Verarbeitens und Bildens einer Abfolge folgende
Schritte aufweist:
Wiederholtes Ausführen der
Fortschreibungsausgangsprozedur, die jedem
Systemblock, der in der Netzliste bezeichnet ist,
entspricht, um die Ausgänge jedes Systemblocks zu
definieren, bis der definierte Ausgang jedes der
Systemblöcke, der durch eine solche Ausführung
definiert ist, nicht wesentlich von sich selbst von
einer Ausführung zur nächsten Ausführung abweicht, und
nachfolgendes Ausführen der
Fortschreibungszustandsprozedur für jeden
Zustandssystemblock, der in der Netzliste bezeichnet
ist.
15. Verfahren nach Anspruch 14, dadurch gekennzeichnet,
dass der Schritt des wiederholten Ausführens der
Fortschreibungsausgangsprozeduren den Schritt des
Ausführens der Prozeduren beinhaltet, um den Eingang
zu mindestens einem der Blöcke des funktionellen
Systems auf Echtzeitbasis zu verarbeiten.
16. Verfahren nach Anspruch 14 oder 15, gekennzeichnet
durch den Schritt der Vorbestimmung der Anzahl der
Male, die die Ausführung eines der
Fortschreibungsausgangsprozeduren wiederholt werden
soll, und der Unterbrechung des Schritts der
wiederholten Ausführung nach dem die Anzahl der
vorbestimmten Ausführungen ausgeführt wurde.
17. Verfahren nach Anspruch 16, dadurch gekennzeichnet,
dass der Schritt des Bestimmens der Male der Zeiten
der Ausführung den Schritt des Berechnens der Anzahl
der Blöcke in dem Blockdiagramm und der Nutzung der
Anzahl zur Bestimmung der Anzahl der Male der
Ausführung beinhaltet.
18. Verfahren nach Anspruch 16, dadurch gekennzeichnet,
dass der Schritt des Vorbestimmens der Male der Zeiten
der Ausführung den Schritt des Berechnens der Anzahl
der Blöcke im Blockdiagramm und der Nutzung dieser
Anzahl zur Bestimmung der Anzahl der Male der
Ausführung beinhaltet.
19. Verfahren nach Anspruch 16 oder 17, dadurch
gekennzeichnet, dass der Schritt des Vorbestimmens der
Anzahl der Male der Ausführung den Schritt des
Berechnens der maximalen Anzahl der Blöcke beinhaltet,
die in einer Reihe mit dem Ausgang einer der Blöcke am
Anfang der Reihe verbunden sind, der den Eingang von
einem der Blöcke an einem Ende der Reihe unmittelbar
beeinflusst.
20. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des
Verarbeitens und Bildens einer Abfolge den Schritt
beinhaltet, für jede Darstellung einer Prozedur in der
Abfolge einen Prozedurabrufs für die entsprechende
Darstellung einer Fortschreibungsausgangsprozedur oder
Fortschreibungszustandsprozedur zu bilden.
21. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass der Schritt des
Verarbeitens und Bildens einer Abfolge folgenden
Schritt aufweist:
Verwenden der Darstellungen der Prozeduren in der
Bibliothek zum Bilden einer geordneten Liste
gespeicherter Darstellungen der Prozeduren in der
Abfolge.
22. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass die Darstellungen der
funktionellen Merkmale für jeden Bibliotheksblock
(Figur 3C), der einem zweiten Systemblock entspricht,
der in der Bibliothek repräsentiert ist, wenigstens
ein gespeichertes Kennzeichen dahingehend aufweist, ob
der betreffende Block ein Verzögerungsblock oder einer
der Blöcke ohne Verzögerung ist, und dass die Schritte
des Verarbeitens und Bildens einer Abfolge die
Schritte des Antwortens auf das Kennzeichen in der
Bibliothek, dass der entsprechende Systemblock ein
Verzögerungsblock zum Erhalten sowohl einer
Fortschreibungsausgangsprozedur als auch einer
Fortschreibungszustandsprozedur zum Verwenden im
Schritt des Verarbeitens und Bildens einer Abfolge
ist, beinhalten.
23. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass die gespeicherten
Darstellungen für jeden Block in der Bibliothek eine
erste Darstellung aller Eingänge dieses Blocks und
eine zweite Darstellung jedes Eingangs dieses Blocks
umfassen, der einen Ausgang für diesen Block
unmittelbar beeinflusst, und der Schritt des
Antwortens für das Antworten auf die erste und zweite
Darstellung wirksam ist.
24. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass dann, wenn der
antwortende Systemblock ein Block ohne Verzögerung
ist, die Fortschreibungsprozedur für den betreffenden
Bibliotheksblock zusätzlich dadurch gekennzeichnet
ist, dass alle Eingänge für den betreffenden ersten
Systemblock in der Abfolge durch eine
Fortschreibungsausgangsprozedur definiert werden
sollen, bevor diese Fortschreibungsprozedur durch das
computerprogramm ausgeführt werden kann, und dass
dann, wenn der betreffende Systemblock ein
Verzögerungsblock ist, die
Fortschreibungsausgangsprozedur des betreffenden
Bibliothekblocks zusätzlich dadurch gekennzeichnet
ist, dass wenigstens ein Eingang zu diesem
Verzögerungsblock nicht definiert zu werden braucht,
bevor eine solche Fortschreibungsausgangsprozedur für
solch einen Verzögerungsblock im Computerprogramm
ausgeführt werden kann, und die
Fortschreibungszustandsprozedur für einen solchen
Bibliotheksblock ihren Zustand als eine Funktion
wenigstens eines solchen Einganges, falls vorhanden,
bildet, und
ferner dadurch gekennzeichnet, dass der Schritt des
Überprüfens des Bibliothekblocks den Schritt des
Überprüfens der Bibliothekblöcke für Bibliothekblöcke
mit zusätzlichen Merkmalen enthält.
25. Verfahren nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet, dass eines der Systeme eine
Rückkopplungsschleife aufweist, die einen der
Verzögerungsblöcke enthält, der in der
Rückkopplungsschleife eingebunden ist, um so eine
verzögerung in der Rückkopplungsschleife vorzusehen,
und dass der Schritt des Verarbeitens und Bildens der
Abfolge den Schritt enthält, dass in der Abfolge auch
Darstellungen der Fortschreibungszustands-
und - ausgangsprozeduren für den Bibliotheksblock, der einem
solchen Verzögerungsblock in einer
Rückkopplungsschleife entspricht, enthalten sind.
26. Verfahren nach Anspruch 23, dadqrch gekennzeichnet,
dass der Schritt des Bildens einer Darstellung jeder
Fortschreibungszustandsprozedur in der Abfolge den
Schritt des Überprüfens der Abfolge auf das
Vorhandensein von Darstellungen von jeder der
Prozeduren in der Abfolge beinhaltet, die jeden der
Eingänge zu dem entsprechenden Verzögerungsblock
definieren und nachfolgend der Abfolge eine
Darstellung einer solchen
Fortschreibungszustandsprozedur hinzufügen.
27. Verfahren nach Anspruch 1, dadurch gekennzeichnet,
dass ein Verfahren zum Erzeugen der Bibliothek (14a)
die Schritte des Speicherns von Darstellungen der
funktionellen Merkmale des betreffenden Systemblocks
(Figur 3C) in jedem Bibliothekblock beinhaltet, und
dann, wenn ein solcher Systemblock ein Block ohne
Verzögerung ist, den Schritt des Speicherns von
Darstellungen wenigstens einer
Fortschreibungsausgangsprozedur (Figur 3C UO)
beinhaltet, die zu einem gegenwärtigen Zeitpunkt den
Ausgang des betreffenden ersten Systemblocks als eine
Funktion von jedem seiner Eingänge zu der
gegenwärtigen Zeit definiert, und gekennzeichnet durch
die Schritte des Speicherns von Darstellungen einer
Fortschreibungszustandsprozedur (Figur 3C-US), die zu
einem gegenwärtigen Zeitpunkt einen Zustand für den
betreffenden Verzögerungsblock als eine Funktion
wenigstens eines Einganges für den betreffenden
Verzögerungsblock zu einem vorhergehenden Zeitpunkt
definiert, und zwar dann, wenn ein solcher Systemblock
ein Verzögerungsblock ist, und von Darstellungen
mindestens einer Fortschreibungsausgangsprozedur, die
zu einem gegenwärtigen Zeitpunkt den Ausgang des
entsprechenden Verzögerungsblocks als eine Funktion
des gegenwärtigen Zustands des entsprechenden
Verzögerungsblocks und mindestens eines Einganges des
betreffenden Verzögerungsblock zu dem gegenwärtigen
Zeitpunkt definiert, und
eine Darstellung dahingehend, ob ein solcher
Systemblock ein Verzögerungsblock (US) ist.
28. Verfahren nach Anspruch 27, dadurch gekennzeichnet,
dass der Schritt des Speicherns einer Darstellung, ob
ein solcher Systemblock ein Verzögerungsblock ist, den
Schritt des Speicherns einer Durchführungsliste
beinhaltet, die alle Eingänge zu einem solchen Block,
der den Ausgang eines solchen Systemblocks unmittelbar
beeinflusst, und einen Eingang bezeichnet, der alle
Eingänge (I&sub1;) für einen solchen Block bezeichnet.
29. Verfahren nach Anspruch 27 oder 28, dadurch
gekennzeichnet, dass der Schritt des Speicherns einer
Darstellung einer Fortschreibungsausgangsprozedur für
einen Block ohne Verzögerung den Schritt des
Auswählens einer Darstellung einer
Fortschreibungsausgangsprozedur zur Speicherung
enthält, in welcher alle Eingänge für den betreffenden
Block ohne Verzögerung nicht definiert zu werden
brauchen, bevor eine solche
Fortschreibungsausgangsprozedur in dem
Computerprogramm ausgeführt werden kann, und
dass der Schritt des Speicherns einer Darstellung der
Fortschreibungsausgangsprozedur für einen
Verzögerungsblock den Schritt des Auswählens einer
Darstellung einer Fortschreibungszustandsprozedur zur
Speicherung aufweist, in welcher zumindest ein Eingang
zu einem solchen Verzögerungsblock nicht definiert zu
werden braucht, bevor die
Fortschreibungsausgangsprozedur für einen solchen
Verzögerungsblock im Computerprogramm ausgeführt
werden kann.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US6537287A | 1987-06-22 | 1987-06-22 | |
US17377188A | 1988-03-23 | 1988-03-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE3856079D1 DE3856079D1 (de) | 1998-01-15 |
DE3856079T2 true DE3856079T2 (de) | 1998-07-02 |
Family
ID=26745535
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE3856079T Expired - Lifetime DE3856079T2 (de) | 1987-06-22 | 1988-06-20 | Verfahren für einen Blockdiagramm-Simulator |
Country Status (7)
Country | Link |
---|---|
US (1) | US5313615A (de) |
EP (1) | EP0296812B1 (de) |
JP (1) | JP2635369B2 (de) |
AT (1) | ATE160891T1 (de) |
AU (1) | AU623337B2 (de) |
CA (1) | CA1300265C (de) |
DE (1) | DE3856079T2 (de) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB8902464D0 (en) * | 1989-02-03 | 1989-03-22 | Texas Instruments Ltd | Improvements in or relating to the simulation of circuits having analogue parts and digital parts |
US5105373A (en) * | 1990-01-22 | 1992-04-14 | Texas Instruments Incorporated | Method of simulating the operation of a circuit having analog and digital circuit parts |
EP0513433A3 (en) * | 1991-05-14 | 1993-04-21 | Comdisco Systems, Inc. | An apparatus and method for generating efficiently executable code representative of a block diagram |
FR2728368A1 (fr) * | 1994-12-20 | 1996-06-21 | Andra | Systeme d'etude par simulation d'une configuration physique en vue de fournir une aide a la decision, et utilisation de ce systeme dans des environnements naturels et artificiels |
US5706473A (en) * | 1995-03-31 | 1998-01-06 | Synopsys, Inc. | Computer model of a finite state machine having inputs, outputs, delayed inputs and delayed outputs |
US5920711A (en) * | 1995-06-02 | 1999-07-06 | Synopsys, Inc. | System for frame-based protocol, graphical capture, synthesis, analysis, and simulation |
US6053948A (en) * | 1995-06-07 | 2000-04-25 | Synopsys, Inc. | Method and apparatus using a memory model |
GB2301911B (en) * | 1995-06-08 | 2000-01-12 | Advanced Risc Mach Ltd | Simulation of digital circuits |
US5745386A (en) * | 1995-09-25 | 1998-04-28 | International Business Machines Corporation | Timing diagram method for inputting logic design parameters to build a testcase for the logic diagram |
US5784593A (en) * | 1995-09-29 | 1998-07-21 | Synopsys, Inc. | Simulator including process levelization |
US5809283A (en) * | 1995-09-29 | 1998-09-15 | Synopsys, Inc. | Simulator for simulating systems including mixed triggers |
GB2321118B (en) * | 1997-01-14 | 2002-03-27 | Integral Design Res Ltd | Development of integrated circuits |
IT1302615B1 (it) * | 1998-10-06 | 2000-09-29 | Abb Research Ltd | Procedimento di simulazione di processi industriali. |
US6505328B1 (en) * | 1999-04-27 | 2003-01-07 | Magma Design Automation, Inc. | Method for storing multiple levels of design data in a common database |
US6425109B1 (en) | 1999-07-23 | 2002-07-23 | International Business Machines Corporation | High level automatic core configuration |
US7200838B2 (en) * | 2000-12-20 | 2007-04-03 | National Instruments Corporation | System and method for automatically generating a graphical program in response to a state diagram |
US7117069B2 (en) * | 2001-11-28 | 2006-10-03 | Siemens Building Technologies, Inc. | Apparatus and method for executing block programs |
CA2525578A1 (en) * | 2003-05-15 | 2004-12-02 | Applianz Technologies, Inc. | Systems and methods of creating and accessing software simulated computers |
US7412366B1 (en) * | 2003-07-18 | 2008-08-12 | The Mathworks, Inc. | Rate grouping during code generation for multi-rate models |
US8875039B2 (en) * | 2003-11-18 | 2014-10-28 | The Mathworks, Inc. | Propagation of characteristics in a graphical model environment |
US7571395B1 (en) * | 2005-08-03 | 2009-08-04 | Xilinx, Inc. | Generation of a circuit design from a command language specification of blocks in matrix form |
US10884712B1 (en) | 2005-12-30 | 2021-01-05 | The Mathworks, Inc. | Component-based framework for generating device driver model elements |
US9329840B1 (en) | 2005-12-30 | 2016-05-03 | The Mathworks, Inc. | Graphical programming of custom device drivers |
US8413112B2 (en) * | 2007-05-10 | 2013-04-02 | International Business Machines Corporation | Visualization of information using landmasses |
US7941299B1 (en) * | 2008-01-08 | 2011-05-10 | The Mathworks, Inc. | Verification and validation system for a graphical model |
JP2009181446A (ja) * | 2008-01-31 | 2009-08-13 | Toshiba Corp | プログラム生成装置およびブロック線図生成装置 |
KR20110081961A (ko) * | 2008-09-30 | 2011-07-15 | 가부시키가이샤 어드밴티스트 | 회로 설계 방법, 회로 설계 시스템 및 기록 매체 |
US8161434B2 (en) * | 2009-03-06 | 2012-04-17 | Synopsys, Inc. | Statistical formal activity analysis with consideration of temporal and spatial correlations |
CN103069386B (zh) * | 2010-08-16 | 2016-06-22 | 三菱电机株式会社 | 控制程序生成装置、控制程序生成程序以及控制程序生成方法 |
US9779195B2 (en) | 2012-12-04 | 2017-10-03 | The Mathworks, Inc. | Model-based retiming with functional equivalence constraints |
US8990739B2 (en) * | 2012-12-04 | 2015-03-24 | The Mathworks, Inc. | Model-based retiming with functional equivalence constraints |
US9201999B1 (en) * | 2014-06-30 | 2015-12-01 | Cadence Design Systems, Inc. | Integrated circuit floorplan having feedthrough buffers |
EP3265934A1 (de) * | 2015-03-05 | 2018-01-10 | The MathWorks, Inc. | Logik mit bedingungsbasierter dauer |
CN111228793B (zh) * | 2020-01-21 | 2021-11-19 | 腾讯科技(深圳)有限公司 | 交互界面的显示方法和装置、存储介质及电子装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4315315A (en) * | 1971-03-09 | 1982-02-09 | The Johns Hopkins University | Graphical automatic programming |
US3971000A (en) * | 1974-06-20 | 1976-07-20 | The Foxboro Company | Computer-directed process control system with interactive display functions |
JPS56101211A (en) * | 1980-01-16 | 1981-08-13 | Toyoda Mach Works Ltd | Sequence display device |
JPS56168263A (en) * | 1980-05-30 | 1981-12-24 | Hitachi Ltd | Program making device |
US4546435A (en) * | 1980-06-24 | 1985-10-08 | Herbert Frank P | Graphic computer system and keyboard |
US4570217A (en) * | 1982-03-29 | 1986-02-11 | Allen Bruce S | Man machine interface |
EP0099114B1 (de) * | 1982-07-13 | 1988-05-11 | Nec Corporation | Logischer Simulator durchführbar auf Ebenenbasis und auf logischer Blockbasis auf jeder Ebene |
US4615011A (en) * | 1983-12-19 | 1986-09-30 | Ibm | Iterative method for establishing connections and resulting product |
US4677587A (en) * | 1985-05-14 | 1987-06-30 | Sanders Associates, Inc. | Program simulation system including means for ensuring interactive enforcement of constraints |
-
1988
- 1988-06-17 CA CA000569843A patent/CA1300265C/en not_active Expired - Lifetime
- 1988-06-20 EP EP88305664A patent/EP0296812B1/de not_active Expired - Lifetime
- 1988-06-20 DE DE3856079T patent/DE3856079T2/de not_active Expired - Lifetime
- 1988-06-20 AT AT88305664T patent/ATE160891T1/de active
- 1988-06-22 AU AU18270/88A patent/AU623337B2/en not_active Ceased
- 1988-06-22 JP JP15454988A patent/JP2635369B2/ja not_active Expired - Fee Related
-
1990
- 1990-04-26 US US07/514,725 patent/US5313615A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CA1300265C (en) | 1992-05-05 |
ATE160891T1 (de) | 1997-12-15 |
EP0296812A3 (de) | 1990-10-10 |
AU1827088A (en) | 1988-12-22 |
EP0296812A2 (de) | 1988-12-28 |
DE3856079D1 (de) | 1998-01-15 |
EP0296812B1 (de) | 1997-12-03 |
US5313615A (en) | 1994-05-17 |
JP2635369B2 (ja) | 1997-07-30 |
JPH01280871A (ja) | 1989-11-13 |
AU623337B2 (en) | 1992-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE3856079T2 (de) | Verfahren für einen Blockdiagramm-Simulator | |
DE69033360T2 (de) | Simulation von ausgewählten Logik-Schaltungsentwürfen | |
DE69308293T2 (de) | Globales prozesssteuerungsinformationssystem und verfahren | |
DE3751192T2 (de) | Grafiksystem zum Modellieren eines Prozesses und dazugehöriges Verfahren. | |
DE69024515T2 (de) | Gerät zur Streckenmessung und -analyse zur Leistungsabschätzung von Software-Entwürfen | |
DE69031758T2 (de) | Verfahren zur Organisation von und zum Zugriff auf Produkt beschreibenden Daten in Zusammenhang mit einem technischen Prozess | |
DE3900750A1 (de) | Wissensbasis - verfahren - vorrichtung zum entwerfen integrierter schaltungen mittels funktionaler spezifikationen | |
DE69225527T2 (de) | Verfahren und System zur automatischen Bestimmung der logischen Funktion einer Schaltung | |
DE19860061A1 (de) | System zur Prüfung der kombinatorischen Äquivalenz | |
DE69532307T2 (de) | Ausdrucks-Propagierung für hierarchisches Netzlisten | |
DE69425744T2 (de) | Verfahren zur modellierung von bidirektionalen oder multiplikativ gesteuerten signalpfaden in einem system zum erreichen eines statisch geplanten allzwecksimulators | |
DE10143101A1 (de) | Verfahren zur Validierung von Simulationsergebnissen eines Systems sowie darauf aufbauender Äquivalenzvergleich digitaler Schaltungen | |
DE102005055133A1 (de) | System für den maschinengestützten Entwurf technischer Vorrichtungen | |
DE102016102920A1 (de) | Verfahren zur Konfiguration eines zum Testen eines elektronischen Steuergeräts eingerichteten Testgeräts | |
DE69812990T2 (de) | Verfahren zur erzeugung von isa simulatoren und assemblierern aus einer maschinenbeschreibung | |
US5151984A (en) | Block diagram simulator using a library for generation of a computer program | |
WO2000026824A1 (de) | Verfahren und anordnung zum vergleich einer ersten eigenschaft mit vorgegebenen eigenschaften eines technischen systems | |
WO1992018944A1 (de) | Verfahren zur verifikation datenverarbeitender systeme | |
DE69907714T2 (de) | Komponentbasiertes quellcodegeneratorverfahren | |
DE3854636T2 (de) | Automatischer Prüfprozess für logische Geräte. | |
DE10324594A1 (de) | Verfahren zum Bereitstellen einer verbesserten Simulationsfähigkeit eines dynamischen Systems außerhalb der ursprünglichen Modellierungsumgebung | |
DE102019008598A1 (de) | Identifikation und Visualisierung von Assoziationen zwischen Code, der von einem Modell generiert ist, und Quellen, welche die Codegeneration beeinflussen | |
WO2014154281A1 (de) | Objektbasierte konfiguration einer prozess- und/oder fertigungsanlage | |
DE69329007T2 (de) | Kompilierungsmechanismus für Simulationsmodelle | |
DE10325513B4 (de) | Verfahren und Vorrichtung zum Erstellen eines Verhaltensaspekts einer Schaltung zur formalen Verifikation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition |