Bastelstunde |
| PROTO-3
Timing an Daten-Bus-IC anpassen
Sicheres Timing erfordert eine stabile Datenbereitschaft (data-valid) bei zeitlich verzögertem Übernahmesignal (chip-select delay). LS, TTL, CMOS, HCMOS, BiMOS... arbeiten alle mit verschiedenen Geschwindigkeiten und high-low Schwellpegeln. Daher ist es unerlässlich, Timing-Korrekturen zwischen PCI-Decoder und Folgeschaltung vorzunehmen um eventuellen Datenverlust vorzubeugen. Eine Korrektur bzw. Anpassung kann mit Hardware erfolgen, oder in der GAL-Gleichung. Die zeitliche Übernahme eines Latch-Registers ist im wesendlichen vom IC-Typ abhängig. Da wir Ihren Aufbau nicht kennen, haben wir hier eine 8-bit Beispielschaltung aufgebaut, die sehr sicher und über einen weiten Temperaturbereich funktioniert. Für den modernen Entwickler ist es jedoch unerlässlich, sich mit dem Signalverhalten schneller Logikschaltkeise und dessen Konsequenzen individuell auseinanderzusetzen. Dies gilt umso mehr für breite Bussysteme mit hohen Datenraten (bsp. PCI-Bus). Ein wichtige Komponente stellt daher die Leitungsimpedanz dar, da sie maßgeblich für Signallaufzeiten mitverantwortlich ist. Unbelastete Leiterbahnen haben einen Wellenwiderstand von ca. 90-120 ohm bei einer Laufzeitverzögerung von 6-7ns/m. Wird die Leiterbahn am Ende künstlich belastet (terminiert), vermindert sich i.d.R. der Wellenwiderstand und erhöht sich die Laufzeitverzögerung des übertragenen Signals. Die Signalcharakteristik kann somit nachträglich verbessert werden, jedoch geht diese Vorgehensweise immer zu Lasten des Pegels, da es sich i.d.R. um eine Widerstandslast handelt. Als nahezu ideal hat sich die Zuhilfenahme der Split-Termination herausgestellt. Sie wird weitläufig als passiver Abschluss bei SCSI-Bussen verwendet und wird am Leitungsende mit je einem Widerstand nach GND und Vcc verschaltet. Auf unserer CD finden Sie den Quellcode des GAL22V10 im JED-Format, den Sie selber für Ihre Folgeschaltung abändern und mit Synario (jetzt ispLEVER® von Lattice®) neu zum JEDEC-File compilieren können. Unsere vordekodierten CS-Signale CS1...4 dienen nur als Programmierbeispiel und haben keinen weiteren Bezug. Andere Bus-Treiber, A/D-D/A-Wandler, oder PIO-Controller wie µPD8255 benötigen jeweils eine andere Adressdekodierung und/oder ein anderes Zeitverhalten zwischen den CSx, IOWR, IORD, Adress- und ALE-Signalen. Die Adressdekodierung und das Timing muss je nach Schaltungsidee immer optimiert werden, da es eine generelle "Dekoder-Universalschaltung" nicht gibt. Hierzu ist das Studium von technischen IC-Datenblättern und der praktische Einsatz an Hand der Versuchsschaltung unter Zuhilfenahme geeigneter Messmittel (bsp. Oszilloscope und Logikanalyzer) unerlässlich. An Hand der nachfolgenden Beispielschaltung soll ein 8-bit Bus-Latch (SN74LS374N) auf DATA 0..7 mittels dem ersten chip-select-Signal (CS1 von GAL22V10) beschrieben werden, um insgesamt 8 LEDs beliebig anzusteueren. Natürlich können anstatt der LEDs auch andere Schaltungen (z.B. Schrittmotor-Steuerung) verwendet werden; die LEDs dienen hier nur als optische Kontrollrückmeldung der gesendeten bzw. gelatchen Daten. Normalerweise verwendet man innerhalb von digitalen Schaltungen, nur IC-Gatter einer Logik-Familie. Man vermeidet damit Probleme, die sich eventuell durch unterschiedliche Signalpegel und Schaltzeiten ergeben können. Oftmals macht aber auch genau das Gegenteil einen Sinn, unterschiedliche Logik-Familien einzusetzen, um Signalpegel, Verzögerungen und Schaltzeiten aufeinander besser auszurichten. Gatter unterschiedlicher Schaltkreisfamilien lassen sich untereinander mit Pegel- und Logikwandlern verwenden (bsp. HCT). Von Fall zu Fall muss vor Ort individuell entschieden werden, wie die Schaltungsidee sich am besten umsetzen lässt. Das Windows-Programm HWT1.EXE ist per Maus-Klick in der Lage, einzelne Port-Befehle (read/write) zum PCI-Controller zu senden, um byte-weise (8-bit) oder word-weise (16-bit) Daten zu lesen oder zu schreiben. Für den Musteraufbau benötigen Sie eine PROTO-3 PCI-Karte, ein GAL22V10B-25QP mit dem JED-Inhalt PROTO3.JED, einen Latch-Bus-Baustein SN74LS374N, einen Inverter SN74F04, ein ODER-Baustein SN74F32 und eine 8-fach LED-Reihe mit Vorwiderständen (hier 330 Ohm). Die Verkabelung wird direkt auf der Rückseite der Platine vorgenommen, die ICs werden vorsorglich auf IC-Fassungen gesetzt und mit 100nF Kondensatoren zusätzlich abgeblockt. Zur besseren Ansteuerung (bzgl. Timing) des Bus-Latch wird das PCI_ALE-Signal am GAL22V10 (pin.1) mit 1 kOhm gegen GND geschaltet. Damit wird das PCI_ALE-Signal um ca. 5 ns nach hinten verschoben, damit die Daten D0...7 zeitlich stabiler am Bus-Latch anstehen. LS-Bausteine sind recht langsam, und haben bei zu kurzen data-valid-Zeiten schwierigkeiten bei der Datenübernahme, wenn das CS-Signal zu früh kommt. Aus diesem Grund wurde bei diesem Aufbau auch kein 10ns-GAL sondern ein langsameres 25ns-GAL verwendet. Auf den nachfolgenden Bildern sehen Sie dazu den entsprechenden Schaltungsaufbau und dessen Handverdrahtung auf der PROTO-3 Karte.
Interessante Hinweise: Falls Sie ein GAL-Programmiergerät
suchen:
KOLTER ELECTRONIC ist nicht für die Inhalte fremder Seiten verantwortlich. Es gelten ausschließlich die AGB der Firma KOLTER ELECTRONIC. Für die Richtigkeit der Angaben wird keine Gewähr übernommen. Alle Preisangaben sind gewerblich. Das Zahlungsmittel ist EURO. Alle Rechte vorbehalten. (c) copyright H.Kolter |