SIM - ein Simulator für Register-Transfer-Netze Inhaltsverzeichnis: 1 Einführung 2 Syntaxregeln der Verschaltungsliste 3 Bedienung des Simulators 4 Bausteine 4.1 Liste der verfügbaren Bausteine 4.2 Beschreibung der Bausteine 4.2.1 AND-Gatter 4.2.2 NAND-Gatter 4.2.3 OR-Gatter 4.2.4 NOR-Gatter 4.2.5 XOR-Gatter 4.2.6 Invertierer 4.2.7 Tri-State-Buffer 4.2.8 Tri-State-Buffer invertierend 4.2.9 Multiplexer 4.2.10 Demultiplexer 4.2.11 Register vorderflankengetaktet 4.2.12 Register rückflankengetaktet 4.2.13 J-K-Register vorderflankengetaktet 4.2.14 J-K-Register rückflankengetaktet 4.2.15 Register positiv pegelgetaktet 4.2.16 Register negativ pegelgetaktet 4.2.17 Lampenfeld 4.2.18 Schalterfeld 4.2.19 Addierer 4.2.20 Zähler 4.2.21 Vergleicher 4.2.22 Leitungszusammenführung 4.2.23 Rotation nach links 4.2.24 Schreib-Lese-Speicher 4.2.25 Festwertspeicher 4.2.26 Stopbedingung 4.2.27 Mustergenerator 4.2.28 Rekorder 4.2.29 Registersatz positiv pegelgetaktet 4.2.30 Registersatz negativ pegelgetaktet 5 Warnungen und Fehlermeldungen 5.1 Warnungen 5.2 Fehlermeldungen 1 Einführung Register-Transfer-Netze dienen der Beschreibung von Hardwaresystemen. Sie lassen sich mit digitalen Schaltbildern vergleichen. Ihre Bausteine können in drei Klassen einteilt werden: - Register (Schaltwerke) mit innerem Zustand - Verknüpfungsglieder (Schaltnetze) ohne inneren Zustand - Leitungsbündel zur Verschaltung der Bausteine Zur Simulation eines Register-Transfer-Netzes muß eine Verschaltungs- liste angegeben werden. Dies geschieht durch die Aufzählung der ver- wendeten Bausteine. Die Verschaltungen der Bausteine wird anhand der Verbindungsleitungen zwischen den Bausteinen definiert. Die Leitungen stellen jeweils 16 Bit breite Drahtbündel dar. Für jeden Anschluß eines Bausteins muß ein Leitungsname angegeben werden. Da bei der Simulation einer Hardwareschaltung deren Funktionen zwangs- sequentialisiert werden müssen, kann das entstehende Modellsystem sehr stark 'hazard'- bzw. 'race'-empfindlich sein. Daher sind kombinato- rische Hazards und Races möglichst durch geeignete Schaltungsumfor- mungen zu verhindern. 2 Syntaxregeln der Verschaltungsliste Jeder Bausteinaufruf muß mit dem Namen des Bausteins beginnen. Die vordefinierten Namen dürfen nur aus Großbuchstaben bestehen und müssen von der Liste der Leitungsnamen mindestens durch ein Leerzeichen oder Tabulatorzeichen getrennt sein. Die Leitungsnamen sind frei wählbar. Es wird zwischen Groß- und Klein- buchstaben unterschieden. Folgende Zeichen sind zugelassen: 'a'...'z','A'...'Z','0'...'9','_' (keine Umlaute) Ein Name darf nicht mit einer Ziffer beginnen. Die Leitungsnamen müssen durch Komma getrennt werden. Zusätzliche Leer- oder Tabulatorzeichen sind erlaubt. Wenn ein Baustein eine Liste variabler Länge von Anschlußleitungen gleicher Art benötigt, muß diese Liste durch '(' und ')' einggegrenzt werden. Es muß jedoch mindestens ein Name angegeben werden. Bei Eingangsleitungen eines Bausteins darf auch eine Konstante ange- geben werden. Diese Zahl wird als Hexadezimalzahl interpretiert, wenn sie mit einer '0' beginnt, sonst als Dezimalzahl. In '[' ']' gesetzte Parameter eines Bausteins sind optionale Angaben. Sie stellen meist die Intialisierungskonstanten der Ausgänge zu Beginn der Simulation dar. Bei fehlenden Initailisierungswerten wird der Aus- gang zu Beginn auf 0 gesetzt. (Die '[' und ']' dürfen natürlich nicht mit angegeben werden.) Sofern der Wert einer Leitung neben der Darstellung als Pegel auf einem 16 Bit breiten Drahtbündel als Zahl relevant ist, wird der Wert als vorzeichenlose 16-Bit-Zahl interpretiert. Kommentarzeilen müssen durch ein Semikolon eingeleitet werden. Das Semikolon muß das erste Nicht-Leerzeichen dieser Zeile sein, d.h. nach einem Bausteinaufruf kann kein Kommentar angehängt werden. Neben den vom Benutzer zu definierenden Leitung existiert die vordefi- nierte Taktleitung CLOCK. Sie dient als Modellzeit und mit ihr sollten zur korrekten Funktion der Simulation alle Register getaktet werden. Die Taktleitung ist als Ausgang eines Zählers realisiert. Bit 0 dieser Leitung kann dann als Takt verwendet werden. Die Taktleitung wird durch den Baustein SWITCH bereitgestellt. Dieser Baustein muß der erste aufgeführte Baustein in der Verschaltungsliste sein. Er darf ebenso wie der Baustein LAMP nur einmal verwendet werden. 3 Bedienung des Simulators Der Simulator kann nur vom CLI durch folgendes Kommando gestartet werden: sim name ist dabei der Name der Textdatei, in der die Verschaltungsliste definiert ist. Nach der korrekten Übersetzung der Verschaltungsliste werden zwei Fenster geöffnet. Das obere Fenster stellt das Schalterfeld dar. Es enthält vier 16 Bit breite Schalterleisten und zwei Hex-Einsteller. Zu Beginn haben alle Schalter und Einsteller auf ihren Ausgängen log. 0-Pegel. Die Schalter werden durch Anklicken betätigt und ändern dabei jeweils ihre Stellung. Die einzelnen Ziffern der Hex-Einsteller können durch Anklicken der Plus- oder Minusgadgets erhöht oder erniedrigt werden. Normalerweise wird jede Betätigung eines Schalters oder Ein- stellers vom Simulator registriert und verarbeitet. Um mehrere Schal- teränderungen gleichzeitig zu ermöglichen, kann der Scan-Mode geändert werden. Dazu muß das nebenliegende Gadget betätigt werden. Der Scan- Mode wechselt dann zu 'all'. Damit werden alle folgenden Schalter- oder Einstellerbetätigungen nur gespeichert aber nicht zum Simulator über- tragen. Die Übertragung wird erst bei einem erneuten Anklicken des Scan-Mode-Gadgets vollzogen. Das untere Fenster stellt das Lampenfeld dar. Es sind vier 16 Bit breite Pegelanzeigen und zwei vierstellige Hex-Anzeigen verfügbar. Bis zum ersten Setzen werden irrelevante Werte angezeigt. Über den Anzeigen befinden sich die Run-Mode-Gadgets. Es sind folgende Zustände möglich: RUN Es findet eine kontinuierliche Simulation des Register- Transfer-Netzes statt. CYCLE Es werden alle Bausteine bis zum nächsten Wechsel des Systemtakts berechnet. Danach geht der Simulator in den STOP-Zustand über. STEP Es wird nur der nächste Baustein berechnet. Anschließend stopt die Simulation. STOP Die Simulation ist gestopt. Die ersten drei Zustände werden durch Umrandung des jeweiligen Gadgets verdeutlicht. Im STOP-Modus ist kein Gadget umrandet. Der Wechsel des Run-Mode wird durch Anklicken des entsprechenden Gadgets vorgenommen. Nach dem Anklicken des DEBUG-Gadgets erscheint ein Requester. Darin kann der Name einer Leitung angegeben. Nach Betätigung der RETURN-Taste oder des show-Gadgets werden die Pegel und der Hex-Wert dieser Leitung angezeigt. Diese Funktion dient der Fehlersuche in der Verschaltungs- liste. Durch Anklicken des DEBUG-Gadgets wird der Simulator in den STOP-Modus gebracht. Die Betätigung des RESET-Gadgets versetzt den Simulator in den Zustand zurück, den er direkt nach dem Laden des Programms innehatte. Der log. 1-Pegel des Systemtakts wird im rechten oberen Eck des LAMP- Fenster durch den Schriftzug CLOCK dargestellt. Der Simulator wird durch Anklicken des CLOSE-Gadgets im SWITCH-Fenster verlassen. Der Simulator verbraucht im STOP-Modus aktiv keine Rechenzeit. 4 Bausteine 4.1 Liste der verfügbaren Bausteine AND (in0,in1,...,inx),out[,init] NAND (in0,in1,...,inx),out[,init] OR (in0,in1,...,inx),out[,init] NOR (in0,in1,...,inx),out[,init] XOR (in0,in1,...,inx),out[,init] NOT in,out[,init] BUFFER in,ctrl,out[,init] BUF_INV in,ctrl,out[,init] MUX (in0,in1,...,inx),slct,out[,init] DEMUX in,slct,(out0,out1,...,outx)[,init_slct,init] REG_PE clk,in,out,not_out[,init] REG_NE clk,in,out,not_out[,init] JK_REG_P clk,j,k,s,r,out,not_out[,init] JK_REG_N clk,j,k,s,r,out,not_out[,init] REG_PL clk,in,out,not_out[,init] REG_NL clk,in,out,not_out[,init] LAMP B0,B1,B2,B3,H0,H1 SWITCH B0,B1,B2,B3,H0,H1 ADD in0,in1,c_in,out,c_out[,init[,c_init]] COUNT clk,set,delta,reset,load,dir,out[,init] COMPARE llimit,hlimit,in,out[,init] ASSIGN in_maske,out_maske,in,out[,init] ROTATE in,bits,out[,init] RAM ([name]),len,write,cs,addr,data[,init] ROM name,len,cs,addr,data[,init] STOP ((in0,cond,in1),(in2,cond,in3),...,(inx-1,cond,inx)) PAT_GEN name,len,repeat,clk,out[,init] RECORDER name,clk,in REG_SET_P len,wrclk,wraddr,rdaddr,in,out[,init] REG_SET_N len,wrclk,wraddr,rdaddr,in,out[,init] 4.2 Beschreibung der Bausteine 4.2.1 AND-Gatter AND (in0,in1,...,inx),out[,init] in0,...,inx Eingangsleitungen des AND-Gatters out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitungen werden bitweise AND-verknüpft. Das Ergebnis wird der Ausgangsleitung zugewiesen. 4.2.2 NAND-Gatter NAND (in0,in1,...,inx),out[,init] in0,...,inx Eingangsleitungen des NAND-Gatters out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitungen werden bitweise NAND-verknüpft. Das Ergebnis wird der Ausgangsleitung zugewiesen. 4.2.3 OR-Gatter OR (in0,in1,...,inx),out[,init] in0,...,inx Eingangsleitungen des OR-Gatters out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitungen werden bitweise OR-verknüpft. Das Ergebnis wird der Ausgangsleitung zugewiesen. 4.2.4 NOR-Gatter NOR (in0,in1,...,inx),out[,init] in0,...,inx Eingangsleitungen des NOR-Gatters out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitungen werden bitweise NOR-verknüpft. Das Ergebnis wird der Ausgangsleitung zugewiesen. 4.2.5 XOR-Gatter XOR (in0,in1,...,inx),out[,init] in0,...,inx Eingangsleitungen des XOR-Gatters out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitungen werden bitweise exclusiv- verknüpft. Das Ergebnis wird der Ausgansleitung zugewiesen. 4.2.6 Invertierer NOT in,out[,init] in Eingangsleitung des Invertierers out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitung wird bitweise invertiert. Das Ergebnis wird der Ausgangsleitung zugewiesen. 4.2.7 Tri-State-Buffer BUFFER in,ctrl,out[,init] in Eingangsleitung des Buffers ctrl Steuerleitung out Ausgangsleitung init Intialisierungswert der Ausgangsleitung (Konstante) Funktion: Der Wert der Eingangsleitung wird der Ausgangsleitung zugewiesen, solange Bit 0 der Steuerleitung auf log. 1 liegt. Wenn dieses Bit zu log. 0 wird, besteht keine Verbindung mehr zwischen Ein- und Ausgangsleitung. Die Ausgangsleitung kann dann von einem anderen Bau- stein als Ausgang benutzt werden (bis dahin hält out den zuletzt zugewiesenen Wert). 4.2.8 Tri-State-Buffer invertierend BUF_INV in,ctrl,out[,init] Siehe BUFFER. Der Wert der Eingangsleitung wird vor der Zuweisung zur Ausgangsleitung bitweise invertiert. 4.2.9 Multiplexer MUX (in0,in1,...,inx),slct,out[,init] in0,..,inx Eingangsleitungen des Multiplexers slct Auswahlleitung out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Die Eingangsleitungen werden entsprechend der Reihen- folge in der Eingangsliste mit 0 beginnend durchnumiert. Die Eingangsleitung, deren Nummer dem Wert der Auswahl- leitung entspricht, wird der Ausgangsleitung zugewiesen. Wenn der Wert der Auswahlleitung keine vorhandene Eingangsleitung bezeichnet, wird die Ausgangsleitung auf 0 gesetzt. 4.2.10 Demultiplexer DEMUX in,slct,(out0,out1,...,outx)[,init_slct,init] in Eingangsleitung des Demultiplexers slct Auswahlleitung out0,..,outx Ausgangsleitungen init_slct Nummer des zu initialisierenden Ausgang (Konstante) init Initialisierungswert des gewählten Ausgangs Funktion: Die Ausgangsleitungen werden entsprechend der Reihen- folge in der Ausgangsliste mit 0 beginnend durchnumiert. Der Wert der Eingangsleitung wird der Ausgangsleitung zugewiesen, deren Nummer dem Wert der Auswahlleitung entspricht. Alle übrigen Ausgangsleitungen werden auf 0 gesetzt. Wenn der Wert der Auswahlleitung keine vorhandene Aus- gangsleitung bezeichnet, werden alle Ausgangsleitungen auf 0 gesetzt. 4.2.11 Register vorderflankengetaktet REG_PE clk,in,out,not_out[,init] clk Taktleitung in Eingangsleitung out Ausgangsleitung not_out invertierte Ausgangsleitung init Initialisierungswert des Zustands und der Ausgangsleitung (Konstante) Funktion: Das Register besteht aus 16 D-Flipflops. Der Wert der Eingangsleitung wird der Ausgangsleitung bei einer 0-1-Flanke auf Bit 0 der Taktleitung zugewiesen und bis zur nächsten 0-1-Flanke gespeichert. Zur korrekten Funktion des Simulators sollte als Takt- leitung die vordefinierte Leitung CLOCK gewählt werden. 4.2.12 Register rückflankengetaktet REG_NE clk,in,out,not_out[,init] siehe REG_PE. Das Register wird mit einer 1-0-Flanke getaktet. 4.2.13 J-K-Register vorderflankengetaktet JK_REG_P clk,j,k,s,r,out,not_out[,init] clk Taktleitung j j-Eingangsleitung k k-Eingangsleitung s asynchrone Setzleitung r asynchrone Rücksetzleitung out Ausgangsleitung not_out invertierte Ausgangsleitung init Initialisierungswert des Zustands und der Ausgangsleitung (Konstante) Funktion: Bit 0 (-----------Bit i-----------) clk j k s r out | out+ ------------------------------+------ x x x 0 0 q | q x x x 0 1 x | 0 x x x 1 0 x | 1 x x x 1 1 q | ? ^ 0 0 0 0 q | q ^ 0 1 0 0 x | 0 ^ 1 0 0 0 x | 1 ^ 1 1 0 0 q | -q ?: nicht definiert x: beliebiger Pegel ^: 0-1-Flanke Das Register besteht aus 16 J-K-Flipflop. Die einzelnen Flipflops arbeitet bis auf die gemeinsame Taktung völ- lig unabhängig voneinander. 4.2.14 J-K-Register rückflankengetaktet JK_REG_N clk,j,k,s,r,out,not_out[,init] siehe JK_REG_N. Das Register wird mit einer 1-0-Flanke getaktet. 4.2.15 Register positiv pegelgetaktet REG_PL clk,in,out,not_out[,init] clk Taktleitung in Eingangsleitung out Ausgangsleitung not_out invertierte Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Das Register besteht aus 16 D-Flipflops. Der Wert der Eingangsleitung wird der Ausgangsleitung zugewiesen solange Bit 0 der Taktleitung auf log. 1 Pegel liegt. Nach einer 1-0-Flanke wird der zuletzt zugewiesene Wert gespeichert. 4.2.16 Register negativ pegelgetaktet REG_NL clk,in,out,not_out[,init] siehe REG_PL. Die Übertragung vom Eingang zum Ausgang erfolgt bei log. 0 Pegel auf Bit 0 der Taktleitung. 4.2.17 Lampenfeld LAMP B0,B1,B2,B3,H0,H1 B0,...,B3 Eingangsleitungen zur binären Darstellung H0,H1 Eingangsleitungen zur hexadezimalen Darstellung Funktion: Die Werte der Eingangsleitungen werden im Lampenfeld des Simulators angezeigt. Der LAMP-Baustein darf nur einmal in einer Verschal- tungsliste verwendet werden. 4.2.18 Schalterfeld SWITCH B0,B1,B2,B3,H0,H1 B0,...,B3 Ausgangsleitungen der binären Schalter H0,H1 Ausgangsleitungen der hexadezimalen Einsteller Funktion: Die Schalterstellungen werden bei jedem Pegelwechsel des Systemtakts CLOCK abgefragt und den Ausgangslei- tungen zugewiesen. Der SWITCH-Baustein muß der erste Baustein in einer Verschaltungsliste sein und darf auch nur einmal ver- wendet werden. 4.2.19 Addierer ADD in0,in1,c_in,out,c_out[,init[,c_init]] in0,in1 Eingangsleitungen c_in Eingangsübertrag out Ausgangsleitung c_out Ausgangsübertrag init Initialisierungswert der Ausgangsleitung (Konstante) c_init Initialisierungswert des Ausgangsübertrags (Konstante) Funktion: out := in0 + in1 + (Bit 0 von c_in) Der Übertrag beeinflußt Bit 0 von c_out 4.2.20 Zähler COUNT clk,set,delta,reset,load,dir,out[,init] clk Taktleitung des Zählers set Setzwertleitung delta Zählwertleitung reset Rücksetzen load Laden dir Zählrichtung out Ausgangsleitung init Initialisierungswert des Zählers (Konstante) Funktion: Bit 0 der Leitungen | reset load dir clk | out -----------------------+---------- x x x 0 | out x x x 1 | out 1 x x ^ | 0 0 1 x ^ | set 0 0 1 ^ | out+delta 0 0 0 ^ | out-delta x : beliebiger Pegel ^ : 0-1-Flanke auf Bit 0 Für eine korrekte Funktion des Zählers sollte zur Taktung der Systemtakt CLOCK verwendet werden. 4.2.21 Vergleicher COMPARE llimit,hlimit,in,out[,init] llimit untere Grenze hlimit obere Grenze in Eingangsleitung out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Wenn der Wert der Eingangsleitung größer oder gleich dem Wert von llimit und kleiner oder gleich dem Wert von hlimit ist, werden alle Bits der Ausgangsleitung auf 1 gesetzt. Anderfalls werden alle Bits auf 0 ge- setzt. 4.2.22 Leitungszusammenführung ASSIGN in_maske,out_maske,in,out[,init] in_maske Bitmaske der Eingangsleitung (Konstante) out_maske Bitmaske der Ausgangsleitung (Konstante) in Eingangsleitung out Ausgangsleitung init Initialisierungswert der Ausgangsleitung (Konstante) Funktion: Mit diesem Baustein ist es möglich eine Leitungs- zusammenführung zu simulieren. Dabei werden ent- sprechend der Eingangsbitmaske Eingangsbits den durch die Ausgangsbitmaske bestimmten Ausgangsbits zugewiesen. Die Zuweisung beginnt mit den niederwertigsten Bits. Zu Beginn wird also das niederwertigste Bit der Ein- gangsleitung, dessen Referenzbit in der Eingangsmaske gesetzt ist, dem niederwertigsten Bit der Ausgangslei- tung, dessen Referenzbit in der Ausgangsmaske gesetzt ist, zugewiesen. Anschließend wird in der Ein- und Aus- gangsmaske jeweils das nächste gesetzte Bit gesucht und die entsprechende Zuweisung vorgenommen. Dieser Vorgang endet, sobald keine gesetzten Bits mehr in den Masken gefunden werden. Beispiel: in_maske = 4a1a (hex) = 0100101000011010 (bin) out_maske = 90c5 (hex) = 1001000011000101 (bin) Eingangsleitung: Ausgangsleitung: 15 +------------------------> 15 14 -----------------+ 14 13 13 12 +-------------> 12 11 ----------------------------+ 11 10 10 9 ----------------------+ 9 8 | 8 7 +--------------------> 7 6 +------------------------> 6 5 | 5 4 ------------------+ 4 3 ----------------------------+ 3 2 +--------------> 2 1 ------------------------+ 1 0 +------------------> 0 4.2.23 Rotation nach links ROTATE in,bits,out[,init] in Eingangsleitung bits Anzahl der zu verschiebenden Bits (Konstante) out Ausgangsleitung init Initialisierungswert der Ausgangsleitung Funktion: Der Wert der Eingangsleitung wird so oft zyklisch nach links rotiert, wie durch die Konstante Bits angegeben wird. Die links herausgeschobenen Bits werden dabei rechts wieder hereingeschoben. Das Ergebnis der Rota- tion wird der Ausgangsleitung zugewiesen. Die Konstante bits darf nur im Bereich 0 bis 15 liegen. Beispiel: in = 369b (hex) bits = 5 out = d366 (hex) 4.2.24 Schreib-Lese-Speicher RAM ([name]),len,write,cs,addr,data[,init] name Name des RAM len Anzahl der Speicherzellen (je 16 Bit) (Konstante) write Schreib-Lese-Leitung cs Auswahlleitung addr Adreßleitung data Datenleitung init Initialisierungswert der Datenleitung (Konstante) Funktion: Das RAM ist nur aktiv, wenn Bit 0 der Auswahlleitung auf log. 1 liegt. Wenn Bit 0 der Schreib-Lese-Leitung auf log. 1 liegt, wird bei einer 0-1-Flanke auf Bit 0 der Auswahlleitung der momentane Wert der Datenleitung in die, durch die Adreßleitung bestimmte, Speicherzelle geschrieben. Wenn Bit 0 der Schreib-Lese-Leitung auf log. 0 liegt, wird der Wert der Speicherzelle auf die Datenleitung gelegt. Wenn das RAM eine Vorbelegung erhalten soll, muß eine Datei mit dem angegebenen Namen vorhanden sein. Diese Datei enthält die Vorbelegungen als 16-bit- Zahlen. Diese werden als Hexadezimalzahlen interpre- tiert und müssen mindestens durch einen Leerschritt, ein Tabulator-, ein Wagenrücklauf- oder ein Neue-Zeile- Zeichen ("whitespace") getrennt sein. Beispiel: 3f5a 126c d094 73e1 893a b012 Nicht vorbelegte Speicherzellen werden mit 0 initiali- siert. Dies geschieht auch bei fehlender Vorbelegungs- datei. Verläßt die Adreßleitung den zugelassenen Bereich (0 ... len-1), so ist das RAM inaktiv. Der Wert auf der Datenleitung bleibt erhalten, bis er überschrieben wird. 4.2.25 Festwertspeicher ROM name,len,cs,addr,data[,init] Siehe RAM. Die Vorbelegungsdatei muß jedoch exitieren. Außerdem ist natürlich kein Schreibzugriff möglich. 4.2.26 Stopbedingung STOP ((in0,cond,in1),(in2,cond,in3),...,(inx-1,cond,inx)) in0,..,inx Eingangsleitungen cond Bedingungen Funktion: Falls alle aufgeführten Stopbedingungen erfüllt sind, wird die Simulation gestopt. Es sind folgende Bedingungen möglich: == : gleich != : ungleich > : größer >= : größer oder gleich < : kleiner <= : kleiner oder gleich Die Stopbedingung sollte nur zu Testzwecken verwendet werden, da sie die Simulationgeschwindigkeit erheblich verringern kann. 4.2.27 Mustergenerator PAT_GEN name,len,repeat,clk,out[,init] name Name der Datei, die das Muster enthält len Länge der Datei (Konstante) repeat Modus bei Überlauf (Konstante) clk Taktleitung out Ausgangsleitung init Initialisierungswert des Ausgangs (Konstante) Funktion: Mit diesem Baustein läßt sich auf der Ausgangsleitung ein beliebiges Signalmuster erzeugen. Der Ablauf wird in der Datei name definiert. Der Inhalt der Datei muß den Anforderungen der RAM- und ROM-Dateien entsprechen. Bei jeder Änderung eines Bits der Taktleitung wird ein neues Muster erzeugt. Wenn das Ende der Datei erreicht ist, bestimmt repeat das nächste Muster. Bei repeat gleich 0 behält die Ausgangsleitung ihren letzten Wert und ändert sich auch bei erneuten Flanken von clk nicht mehr. Falls repeat dagegen ungleich 0 ist, wird nach dem Ende der Datei wieder mit ihrem Anfang begonnen. Auf diese Weise läßt sich zum Beispiel ein Pseudo-Zufalls- generator erstellen. 4.2.28 Rekorder RECORDER name,clk,in name Name der Aufnahmedatei clk Taktleitung in Eingangsleitung Funktion: Bei jeder Änderung eines Bits der Taktleitung wird der Wert der Eingangsleitung in die Aufnahmedatei geschrie- ben. 4.2.29 Registersatz positiv pegelgetaktet REG_SET_P len,wrclk,wraddr,rdaddr,in,out[,init] len Anzahl der Register (Konstante) wrclk Schreibtaktleitung wraddr Schreibadreßleitung rdaddr Leseadreßleitung in Dateneingang out Datenausgang init Initialisierungswert des Datenausgangs (Konstante) Funktion: Der Registersatz kann gleichzeitig gelesen und beschrie- ben werden. Sobald Bit 0 der Schreibtaktleitung logisch 1 wird, werden die Daten auf der Leitung in unter der Adresse wraddr abgelegt. Die Daten, die unter der Adresse rdaddr stehen, werden kontinuierlich der Leitung out zugewiesen. Der Registersatz wird inaktiv (nicht schreib- oder les- bar), wenn die jeweiligen Werte auf den Adreßleitungen nicht im zugelassenen Bereich (0 .. len-1) liegen. 4.2.30 Registersatz negativ pegelgetaktet REG_SET_N len,wrclk,wraddr,rdaddr,in,out[,init] Siehe REG_SET_P. Der Registersatz wird mit logisch-0-Pegel auf wrclk getaktet. 5 Warnungen und Fehlermeldungen 5.1 Warnungen - Warning: Lead is only used as an output Die Warnung wird erzeugt, falls die Leitung nur als Aus- gang eines Bausteins verwendet wurde. Dies könnte auf einen Schreibfehler hindeuten. Die Simulation wird trotzdem gestartet. 5.2 Fehlermeldungen - Bad arguments Der Aufruf des Simulator entspricht nicht: "sim " - File not found : Die angegebene Verschaltungsliste existiert nicht. - LOW MEMORY Es ist nicht genügend Speicher vorhanden, um die Verschaltungs- liste zu übersetzen und die Verschaltungsstruktur aufzubauen. - '(' expected Es fehlt eine öffnende Klammer. - ')' expected Es fehlt eine schließende Klammer. - ',' expected Leitungsnamen müssen durch Komma getrennt werden. - Lead name expected Es wird ein Leitungsname erwartet. - Init value expected Es wird ein Initialisierungswert (Konstante) erwartet. - Constant expected Es wird eine Konstante erwartet. - Condition expected (==,!=,>,>=,<,<=) Es wird eine der aufgeführten Bedingungen erwartet. - Output lead name expected Es wurde eine Konstante als Ausgang angegeben. - No constant allowed as output lead Bei Ausgangsleitungen dürfen keine Konstanten angegeben werden - Too many characters (max. 255) Die maximal zulässige Zeilenlänge wurde überschritten. - Unknown device Unbekannter Bausteinname. - Too many lead names Es wurden mehr Anschlußleitungen angegeben als zulässig sind. - Out of range (0..0FFFF) Der Wert der angegebenen Konstanten ist nicht mehr als vorzeichenlose 16-Bit-Zahl darstellbar. - Out of range (0..0F) Die Konstante bits des Bausteins ROTATE liegt außerhalb des erlaubten Bereichs. - Device cannot be used more than onetime Die Baustein SWITCH und LAMP dürfen nur einmal in jeder Ver- schaltungsliste verwendet werden. - SWITCH must be used Der Baustein SWITCH muß verwendet werden. - SWITCH must be the FIRST device Der Baustein SWITCH muß der erste Baustein in der Verschaltungs- liste sein. - No such data file for RAM/ROM/PAT_GEN Die angegebene Datei existiert nicht. - Error in data file for RAM/ROM/PAT_GEN Es ist ein Lesefehler aufgetreten oder der Inhalt der Datei entspricht nicht den Voraussetzungen. - Unable to write to recorder file Die Datei zur Aufnahme der aufgezeichneten Signale konnte nicht erzeugt oder zum Schreiben geöffnet werden. - Bad statement Die Bausteindefinition entspricht nicht den Voraussetzungen. Meistens wurde ein nicht zulässiges Zeichen in einem Leitungs- namen benützt. - Error while opening intuition.library Die Intuition-Bibliothek konnte nicht geöffnet werden. - Error while opening graphics.library Die Grafik-Bibliothek konnte nicht geöffnet werden. - Error while opening LAMP-window Das Lampenfeld-Fenster konnte nicht geöffnet werden. - Error while opening SWITCH-window Das Schalterfeld-Fenster konnte nicht geöffnet werden. - Error while creating new task Die Hintergrund-Task konnte nicht erzeugt werden. - Unable to load/create process Die Datei, in der ein externer Baustein definiert wird, konnte nicht geladen werden, bzw. es konnte kein Prozeß mit dieser Da- tei erzeugt werden. - Different versions of Sim and external device definition Der Simulator und die Übersetzer für externe Bausteine haben nicht die gleiche Versions- und Revisionsnummer. Bei Fehlern während der Übersetzung wird die verursachende Zeile der Verschaltungsliste zumindest auszugsweise dargestellt und die Stelle markiert, an der der Fehler entdeckt wurde. Der eigentliche Fehler liegt dann entweder direkt an der markierten Stelle oder am voraus- gehenden Zeichen bzw. im vorausgehenden Namen. Nach je fünf Übersetzungsfehlern wird gefragt, ob die Übersetzung fort- gesetzt werden soll. Bei Abbruch bzw. Ende der Übersetzung wird die Zahl der bislang entdeckten Fehler ausgegeben.