mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage: Kommunikation zwischen 2 CPUs


Autor: Georg (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Leider habe ich nicht viel Ahnung von Elektronik, deswegen brauche ich 
eure Hilfe. Ich versuche zu verstehen wie die Kommunikation zwischen dem 
Hauptprozessor und dem Soundprozessor in alten Arcade-Automaten auf 
Hardwareebene funktioniert. In meinem konkreten Fall ist der 
Hauptprozessor ein Motorola 68000 und der Soundprozessor ein Zilog Z80. 
Ich habe mir den MAME (Multiple Arcade Machine Emulator) Source Code 
angesehen: Wenn der Hauptprozessor einen Befehl an den Soundprozessor 
schicken möchte dann schreibt er ein Byte an die Speicherstelle 0x1111. 
Der Soundprozessor kann dieses Byte auslesen in dem er die 
Speicherstelle 0x2222 ausliest. In der angehängten Grafik habe ich 
gezeichnet wie ich die Kommunikation auf Hardwarebene implementieren 
würde. Also mein Grundgedanke ist, dass 0x1111 und 0x2222 in 
Wirklichkeit dieselbe Speicherstelle sind, weil sonst würde das Ganze 
meiner Meinung nach nicht funktionieren. Könnte man das so 
implementieren wie in meiner Grafik oder ist das totaler Blödsinn?

Erklärung zur Grafik: Ausgangssituation ist, dass CPU1 einen Befehl an 
CPU2 übermitteln möchte. Dies geschieht wie oben geschrieben über die 
Speicherstelle 0x1111. Also kommt die Adresse 0x1111 auf den Addressbus 
und das Befehlsbyte auf den Datenbus. Der Memory Controller für CPU1 
erhält beides und leitet das Befehlsbyte in einen Zwischenspeicher 
bestehend aus 8 Flip-Flops. Das RAM der CPU1 wird also überhaupt nicht 
angesprochen. CPU2 kann das Befehlsbyte auslesen in dem es wie oben 
geschrieben die Speicherstelle 0x2222 ausliest. Also kommt die Adresse 
0x2222 auf den Addressbus von CPU2. Der Memory Controller für CPU2 
erhält die Adresse. Dann leitet er die 8 Bits die im Flip-Flop 
gespeichert sind über den Datenbus an die CPU2 weiter. Auch hier wird 
das RAM von CPU2 gar nicht verwendet. Was haltet ihr davon? Ich weiss es 
ist eine totale Anfängerfrage, aber mich würde wirklich interessieren ob 
ich das so bauen könnte.

lg
Georg

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du die Datenbl#tter der beiden CPUs oder wenigstens ein Bild der 
Platibe mit den beiden CPUs?

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Dein Interesse. Das Datenblatt des Z80 gibt es hier:

http://www.z80.info/zip/z80data.zip

Hier das 'Schematic Diagram' und hochauflösende Fotos der Platine von 
einem Automaten der sowohl als Hauptprozessor als auch als 
Soundprozessor einen Z80 verwendet:

http://www.cityofberwyn.com/schematics/PDF/BubbleB...
http://home.online.no/~tjaberg/bublbobl/bb_pcb_top.jpg
http://home.online.no/~tjaberg/bublbobl/bb_pcb_bottom.jpg

Dem Source Code des Emulators habe ich entnommen das CPU1 (im Schematic 
Diagram links unten) der Soundprozessor ist. Die beiden CPU2 (im 
Schematic Diagramm auf der linken Seite) sind Master- und Slave 
Prozessoren. Der Master-Prozessor kann mit dem Soundprozessor 
"kommunizieren" indem er den Befehl an die Speicheradresse 0XFA00 
schreibt. Der Soundprozessor empfängt Befehle in dem er die 
Speicherstelle 0XB000 ausliest. Alle drei sind Z80-Prozessoren.

Meine ursprüngliche Frage war ob man die Kommunikation 
Hauptprozessor<->Soundprozessor so realisieren könnte wie ich es in 
meinem ersten Post beschrieben habe. Falls jemand aus dem Schematic 
Diagram erahnen kann wie die Kommunikation tatsächlich funktioniert wäre 
ich natürlich auch für diese Information sehr dankbar.

lg
Georg

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommunikation: Schematics S.4 ICs 24+25 bilden ein bidrektionales 
Speicherregister zwischen ML-CPU-Datenbus und SND-CPU-Datenbus. Der Kram 
rechts davon ('74 und '125) dürfte auch dazu gehören.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du eine interessante Geschichte ausgegraben. Im Prinzip ist es 
so wie du dir das vorstellst.

Für das Verständnis ist es hilfreich die Bussysteme zu betrachten.

Von jeder CPU (M-CPU, SUB-CPU, SND-CPU ) gehen 16 Adressleitungen und 8 
Datenleitungen aus. Die beiden Pakete von Leitungen nennt man einen Bus 
(M-Bus, SUB-Bus, SND-Bus). Die einzelnen Busse gehen an verschiedene ICs 
wie z.B. RAM und ROM und Spezial-ICs (YM... die eigentlichen 
Soundprozessoren).

Zwischen einem Bus zu einem anderen sitzen logische ICs der 74er Reihe. 
Die können Leitungen Multiplexen oder Treiben/Verstärken oder hochohmig 
Trennen oder Zwischenspeichern/Merken. Sie dienen dazu um die einzelnen 
Busse miteinander zu verbinden u.U. unter Zwischenschaltung eines 
weiteren Busses (ML-Bus zwischen M-Bus und SND-Bus).

Im Groben könnte man also die Funktion der logischen ICs als eine Art 
Memory Controller bezeichnen, insbesondere wenn man das moderner z.B. in 
einem FPGA o.ä. implementiert. Einen richtigen, diskreten Memory 
Controller sehe ich in der Schaltung aber nicht.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Infos. So langsam beginne ich zu verstehen wie das System 
aufgebaut ist: Also wenn ich mir das Schematic-PDF auf Seite 2 anschaue 
dann sehe ich das 2 74LS-Logikchips zwischen CPU-Datenbus und 
ML-Datenbus sind (IC57, IC57) und 2 74LS-Logikchips zwischen 
CPU-Addressbus und dem ML-Adressbus sitzen (IC54, IC55). Wenn die CPU 
also an die Speicherstelle 0xFA00 schreibt um einen Befehl an die 
Sound-CPU zu senden werden dann genau diese Chips durch den PAL (links, 
unten) "chip selected" und nehmen das Signal entgegen? Beim Adressbus 
sind es 2 74LS-Chips weil einer die Addressleitungen 0-7 übernimmt und 
der andere die Leitungen 8-12. Aber wieso habe ich beim Datenbus 2 74-LS 
Chips?
Wenn ich das Posting von prx richtig verstanden habe dann wird einer zum 
Senden verwendet und der andere zum Empfang, oder? Nachdem die 74LS die 
Signale empfangen haben legen sie sie auf den ML-Addressbus und 
ML-Datenbus. Weiter geht es dann auf Seite 4 im Schematic-PDF. Dort 
sieht man, dass zwischen dem ML-Address/Datenbus und dem 
SND-Address/Datenbus wieder 74LS-Chips sind. Ich frage mich woher diese 
Chips "wissen" das sie das Signal "entgegennehmen" sollen - werden die 
auch gleich durch den PAL auf Seite 2 (links, unten) "chip selected"? - 
der IC26 (Seite 4, oben) dürfte ja, wenn ich das Diagramm richtig 
interpretiere, mit dem PAL verbunden sein. Am Datenbus sitzen wieder 
zwei 74LS (IC24, IC25). Also wird wieder beim empfangen nur einer 
verwendet und der andere ist dafür da um Daten zu senden? Interessant 
ist das der 74LS der mit dem Addressbus verbunden ist A0 und A1 
"entgegennimmt". Das wären ja dann 2 Bits, also könnte man vier 
verschiedene Addressen ansprechen. Bedeutet das, dass der IC24 und der 
IC25 nicht nur jeweils 1 Byte sondern jeweils 4 Bytes speichern können? 
Wenn die Sound-CPU dann den Befehl empfangen "will" indem sie auf die 
Speicherstelle 0xB000 zugreift, dann wird das Address-Signal entweder 
vom IC24 oder vom IC25 "entgegengenommen" und dieser sendet über den 
Datenbus das Byte an die Sound-CPU.

Sehe ich das richtig, dass das System nur so deswegen so kompliziert ist 
weil die Kommunikation zwischen Haupt-CPU und Sound-CPU über einen 
bidirektionalen Bus läuft? Ich meine, wenn ich nur in eine Richtung 
kommunizieren möchte dann könnte ich ja den ganzen ML-Bus weglassen und 
die 74LS-Chips einfach "direkt" zwischen den Haupt-CPU-Bus und den 
Sound-CPU-Bus "setzen", oder? Was ich nicht verstehe ist, woher kann der 
74LS "wissen", dass der ML-Bus gerade frei ist? Ich meine es könnten ja 
sowohl Haupt-CPU als auch Sound-CPU auf die "Idee kommen" etwas über den 
ML-Bus zur selben Zeit zu senden und dann würde es ja zur Kollision 
kommen. Kann man das auch im Schematic Diagram erkennen? Ich hab es 
versucht herauszufinden bin aber leider gescheitert (habe vorher noch 
nie ein Schematic Diagram gesehen) - vielleicht lauft es auch irgendwie 
über den PAL auf Seite 2, links, unten? Ich weiss viele Fragen, falls 
jemand etwas Zeit hat mir weiterzuhelfen wäre ich sehr dankbar.

lg
Georg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.