Hardware > Hardware (Classic 16-/32-Bit)

GAL Programmierung der einstieg

<< < (2/11) > >>

tuxie:

--- Zitat von: m0n0 am Do 10.06.2010, 16:01:13 ---Hallo,

dankeschön für die kleine Einführung! :)

Ich frage mich nur:

1. was passiert wenn ich widersprüche in die Logik einbringe, also z.b.:

/DIROUT   = IOR * /IOW
/DIROUT   = /IOR * IOW

oder auch:

/DIROUT   = IOR * /IOW
DIROUT   = IOR * /IOW

?

Dann noch eine Frage bezüglich der Adressdekodierung... Ich verstehe nicht genau was Du mit dekodieren meinst... ich meine, Du identifizierst zwar ob Adressen im bereich D700-D7ff  "eingegeben" wird, aber was genau soll das bringen? Und müsste man dann nicht noch was mit den D7XX (ich meine die XX en) machen? Ich meine, in deinem Beispiel lässt Du die XX ja einfach wegfallen... Sorry wenn ich mich unglücklich ausdrücke...

Unter Dekodierer habe ich immer verstanden das man z.b. eine 8 Bit zahl eingibt, und das wird dann auf 256 Leitungen gelegt...


--- Ende Zitat ---

Jaa also dann funktioniert die Logic natürlich nicht, muß natürlich eindeutig sein.

Oft ist es so das wenn man eine Hardware anschliesst um diese anzustuern, dann blendet man sie in einen bestimmten Speicherbereich ein. Diese angaben hast du dann oft auch in den Dokumentationan angegeben.  Den bereich 00-FF wird von der Hardware direkt decodiert.

Hmm ich muß ein beispiel raussuchen um das Darstellbar zu machen.


Arthur:

--- Zitat von: m0n0 am Do 10.06.2010, 16:01:13 ---1. was passiert wenn ich widersprüche in die Logik einbringe, also z.b.:

/DIROUT   = IOR * /IOW
/DIROUT   = /IOR * IOW


--- Ende Zitat ---

Würde glaube ich, in diesem Fall sogar noch funktionieren, oder nicht? Aber davon mal abgesehen, wird das nicht von der Software getestet?

tuxie:
Nein die Plausibilität wird nicht getestet! Nur die Syntax muss stimmen.

Mir ist ein Beispiel für die Adressdecodierung eingefallen.

Ich möchte an meinen Computer einen Flash oder Eprom anschliessen. Dieser hat 16kb. Zur Adressierung von 16kb benötige ich 14 Adressleitungen.

Wenn ich diesen jetzt einfach so an den Bus des Rechner anschliessen würde, würde es einen Adresskonflikt geben weil in den ersten 16kb ja schon andere Hardwarekomponenten sich befinden. Also mache ich folgendes.

Ich suche mir einen Adressbereich der in meinem Computer frei ist raus. Da müßen 16kbyte rein passen.

Beim ST auf jedenfall von 10MB-14MB

(nur Beispiel die werte stimmen nicht)

10485760byte - 10502144byte

Hex
A00000 - A04000
Bin
1010 0000 0000 0000 0000 0000 -
1010 0000 0100 0000 0000 0000

An einem GAL wird nun die Leitungen

A15
A16
A17
A18
A19
A20
A21
A22
A23
A24
Angeschloßen

Mit dem GAL wird nun das Enable Signal für den Eprom generiert.

Enable = A24 * /A23 * A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16 * /A15
              + A24 * /A23 * A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16 * A15

Gut wenn wir es richtig machen, muß noch /AS mit angeschlossen werden, aber das lass ich jetzt mal weg.

Was passiert!

Die CPU legt eine Adresse auf den Bus

A00001
Bin
101000000000000000000001
Dez
10485761byte

Jetzt vergleicht der GAL, und stellt fest die gleichung ist war und schaltet den Enable Ausgang auf Aktiv.

Jetzt bekommt der Eprom das Enable Signal und fühlt sich angesprochen!  An seinen Pins liegt die Adresse

000 0000 0000 0001
A14                          A1

und führt die von ihm verlangte Operation aus.

Uff nun glüht mein Kopf, kann aber an der Wärme liegen.

m0n0:
Hallo,

danke für die Erweiterte Erklärung, jetzt peile ich es auch. :) !

Nur das mit der Fehlenden Überprüfung von der Logik finde ich heftig - was passiert denn mit dem GAL dann? Interner Kurzschluss oder sowas ?

Noch was, wird das Enable signal sofort wieder auf Low gesetzt, wenn der angegebene Zustand nicht mehr zutrifft, oder müsste man das explizit programmieren?

tuxie:
Nein passiert nix, das tut ihm nicht weh!

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln