HSG |
|
Jede Schaltung (z.b. xy.hds) kann in Hades als Teilkomponente (Makro) in übergeordneten Schaltungen eingesetzt werden. Das dazu benötigte grafische Symbol erzeugen man gewöhnlich mittels Menü/Edit/Create symbol. Es entsteht dadurch eine sym-Datei (im Beispiel: xy.sym). Das Makro kann man durch create/create Subdesign in eine neue Schaltung einbinden.
1. Schaltung 'aufbauen', für die Eingänge Standardeingabe Ipin und für die Ausgänge Standardausgabe Opin verwenden.
2. Mit Edit/Create Symbol die sym-Datei ha0.sym erzeugen
3. Mit create (rechte Maustaste)/create Subdesign das Makro einbinden. Es ist angebracht mit Layers Häkchen bei port symbols die Benennung der Ports einzuschalten. Das Makro kann jetzt verdrahtet werden.
4. Beim Einbinden eines Makros werden leider absolute Pfade gesetzt. Die frühere Empfehlung, sie durch Editieren der *.hds-Datei durch relative Pfade ersetzen zu ersetzen, hat zu Problemen geführt. Es muss also jeweils der richtige absolute Pfad gesetzt werden. Das kann z.B. mit den Hilfsmitteln sed oder sr-manager wie unten beschrieben geschehen.
# hades.models.Design file
#
[name] unnamed
[components]
hades.models.io.Opin \u00dcbertrag 12600 4800 @N 1001 5.0E-9
hades.models.io.Opin Summe 12600 3000 @N 1001 5.0E-9
hades.models.io.Ipin b 5400 4800 @N 1001 0
hades.models.io.Ipin a 5400 3000 @N 1001 0
hades.models.Design Halbaddierer 6600 3000 @N 1001 /home/mk/fdi1112/ha0.hds
[end components]
[signals]
hades.signals.SignalStdLogic1164 n3 2 Halbaddierer ü Übertrag A 1 2 11400 4200 12600 4800 0
hades.signals.SignalStdLogic1164 n2 2 Halbaddierer s Summe A 1 2 11400 3600 12600 3000 0
hades.signals.SignalStdLogic1164 n1 2 b Y Halbaddierer b 1 2 5400 4800 6600 4200 0
hades.signals.SignalStdLogic1164 n0 2 a Y Halbaddierer a 1 2 5400 3000 6600 3600 0
[end signals]
[end]
Standardscript für Ersetzen: 's/alt/neu/g', kommt in alt '/' vor so muss es mit '\/' 'escaped' werden.
sed -i 's/\/1112\/fdi\//\/Arbeitsfläche\//g' *
-i bewirkt eine 'inplace-Ersetzung'
sed gibt es auch für Windows (http://gnuwin32.sourceforge.net/packages.html), leider hat diese Version nicht die Option '-i'. Als Alternative für Windows kann das Programm sr-manager (HSG-intern: ../~mk/sr-manager-setup.exe) in mehreren Dateien suchen und ersetzen.
5. Beim Verwenden vom Makros können verschiedene Fehler und Fallstricke auftreten.
Eine Schaltung mit einem Makro wird nur dann funktionieren, wenn sowohl die *.hds- als auch die *.sym-Datei des Makros gefunden werden.
Existiert nur die sym-Datei, so sieht scheinbar alles gut aus, aber es fehlt die hds-Datei, um die Logik zu liefern.
Ganz heimtückisch ist der leider ab und zu auftretende Fehler, dass sich eine Verbindung gelöst hat. Scheinbar funktioniert das Makro nicht mehr oder fehlerhaft.
Gelöste Verbindungen spürt man z.B. auf indem man das Makro mit m etwas verschiebt. Die Anschlüsse müssen jetzt mitwandern. Tun Sie es nicht, so kann man mit wire/delete segment das letzte Segment löschen, mit w ansetzen und neu verbinden.
Diese sym-Datei kann man mit einem Editor nachbearbeiten. Über den Aufbau findet man im Handbuch auf Seite 81 einige (leider nicht alle) Hinweise zur Bedeutung der einzelnen Zeilen. Durch den Vergleich mit bestehenden sym-Dateien (jar-File auspacken, z.B. in ..models/gatter/And2.sym) läßt sich noch einiges erschliessen.
ha.sym:
hades.symbols.BboxRectangle 0 0 3600 2400 hades.symbols.Rectangle 900 300 2700 2100 hades.symbols.PortLabel 3450 1750 3 \u00fc hades.symbols.PortSymbol 3600 1800 ü hades.symbols.PortLabel 3450 550 3 s hades.symbols.PortSymbol 3600 600 s hades.symbols.PortLabel 150 1750 b hades.symbols.PortSymbol 0 1800 b hades.symbols.PortLabel 150 550 a hades.symbols.PortSymbol 0 600 a hades.symbols.InstanceLabel 150 1650 Halbaddierer hades.symbols.ClassLabel 150 450 Halbaddierer hades.symbols.Polyline 2 0 600 900 600 hades.symbols.Polyline 2 0 1800 900 1800 hades.symbols.Polyline 2 2700 600 3600 600 hades.symbols.Polyline 2 2700 1800 3600 1800 # hades.symbols.Label 1250 1500 1 16 27 36864 HA
Man beachte, dass z.B. für PortLabel das "ü" durch "3 \u00fc" kodiert wurde.
Folgende Grafik zeigt die Lage einiger wichtiger Punkte im Koordinatensystem:
Der Aufruf geschieht über das PopUp-Menü (rechte Maustaste) Create/SubDesign.
Zur Simulation eines ROM hätte man gerne die Simulation einer Diode, die eine schwache Eins auf Null ziehen kann.
Das Subdesign zu dieser 'Diode' soll sehr klein werden. Damit das klappt, muss einiges beachtet werden. Alle Namen sollten kurz gewählt werden, weil sie als class-label, instance-label und port-labels wieder auftauchen. Dabei ist zu beachten, dass das Subdesign später von einer virtuellen Box umschlossen wird, die alle Labels ganz enthält. Sollten sich solche Boxen überlappen, so gibt es später Schwierigkeiten bei der Verdrahtung. Leider ist der Name A intern bereits vergeben, sodass er vermieden werden sollte.
hades.symbols.BboxRectangle 0 0 600 600 # hades.symbols.Rectangle 0 0 600 600 hades.symbols.PortLabel 400 200 3 A_ hades.symbols.PortSymbol 0 0 A_ hades.symbols.PortLabel 500 600 3 K hades.symbols.PortSymbol 600 600 K hades.symbols.Polyline 12 0 0 268 268 375 162 375 375 484 268 268 484 375 375 600 600 375 375 162 375 268 268 109 109 hades.symbols.InstanceLabel 0 400 dd hades.symbols.ClassLabel 0 450 dd
Im Bild ist die Diode mit 'm' zum Verschieben angewählt. Man sieht den Rahmen, der ganz eng um das kleine Design herum liegt. Das wurde erkauft mit dem Übereinanderliegen verschiedener Labels.