Forum: Mikrocontroller und Digitale Elektronik Von Neumann & Code aus externem RAM ausführen


von DR (Gast)


Lesenswert?

Hallo zusammen, ich versuche nun seit einigen Tagen zu verstehen, ob ein 
Von Neumann-µC grundsätzlich immer in der Lage ist, Code aus einem 
externen RAM auszuführen. Kann mir da jemand weiterhelfen?

Was ich nämlich nicht kapiere ist folgendes: Die 8051-Serie (mal 
unabhängig davon, ob nun von Neumann oder nicht) kann Code aus einem 
externen ROM (und so wie ich das verstanden hab mit Tricks auch aus 
einem externen RAM) ausführen und besitzt auch extra ausgezeichnete 
Ports für Adress- und Datenleitungen.
Wenn ich mir nun den 68HC08 ansehe, dann scheint das ein reiner Von 
Neumann-Controller zu sein. Nur hab ich bisher nirgendwo Artikel darüber 
gefunden, ob und wenn ja wie man Code aus einem externen RAM mit ihm 
ausführen kann. Ist der Schlüssel dazu diese Mapped-I/O-Funktionalität?

Würde mich freuen, wenn jemand meine Verwirrung diesbezüglich etwas 
eingrenzen kann :-)

(Und ich weiß, dass die Frage vielleicht etwas komisch gestellt ist, 
besser kann ichs aber nicht in Worte fassen)

von User (Gast)


Lesenswert?

Wenn ein Controller externes Program-ROM unterstützt kann man 
stattdessen auch ein RAM einsetzen. Man muss sich nur überlegen, wie man 
es gefüllt bekommt.

von (Gast) (Gast)


Lesenswert?

Dual-Prot RAM. Dann hat man ihn zu einem von Neumann umgebaut

von Bernhard S. (b_spitzer)


Lesenswert?

Von Neumann bedeutet, dass Programm und Daten im selben Adressraum 
liegen. Ein 8051 hat für Programm und Daten 2 getrennte Adressräume (je 
max. 64k XDATA und CODE) zur Verfügung. Daher hat er bei "normaler" 
Beschaltung mit EPROM und RAM eigentlich eine Harvard-Architektur.
Bei alten Entwicklungssystemen (vor FLASH-EEPROM-Zeiten) wurde jedoch 
ein Teil des RAMs in den Programmspeicherbereich gemappt, um daraus zu 
arbeiten. Ein Bootloader/Monitorprogramm ermöglichte dort den Start des 
Systems und den Download in das RAM. Vom Monitor aus konnte man dann an 
den Anfang seines Programms springen und es ausführen. Nach Abschalten 
der Spannung ist bei diesen Systemen aber das Programm weg. Trotzdem 
konnte das eigene Programm nicht in den Programmspeicher schreiben. Über 
den Adressdecoder wurden die XDATA-Zugriffe auf einen anderen 
RAM-Bereich umgeleitet.
Moderne 8051-Derivate mit FLASH sind wieder reine Harvard-Rechner, weil 
die Speicherbereiche strikt getrennt sind. Ein integrierter Bootloader 
ermöglicht hier, das FLASH umzuprogrammieren. Der Controller behält das 
Programm hier auch nach Abschalten der Versorgungsspannung, externes RAM 
ist oft im Chip integriert (!!), also als XDATA ansprechbar.

von c-hater (Gast)


Lesenswert?

DR schrieb:

> ich versuche nun seit einigen Tagen zu verstehen,
> ob ein
> Von Neumann-µC grundsätzlich immer in der Lage ist, Code aus einem
> externen RAM auszuführen.

Nein, natürlich nicht. Von-Neumann-Architektur bedeutet ja nur, daß Code 
und Daten in einem gemeinsamen Speicher liegen können.

Es sagt allerdings nichts darüber aus, ob dieser intern oder extern ist 
oder ob beides (eventuell auch gleichzeitig) geht. Und es sagt auch 
nichts darüber aus, ob die prinzipelle Möglichkeit des gemeinsamen 
Speichers nicht zur Laufzeit für bestimmte Speicherbereiche auch wieder 
eingeschränkt werden kann. Es muß nur irgendwann mal gehen.

von Reinhard Kern (Gast)


Lesenswert?

DR schrieb:
> ich versuche nun seit einigen Tagen zu verstehen, ob ein
> Von Neumann-µC grundsätzlich immer in der Lage ist, Code aus einem
> externen RAM auszuführen

Ein solcher Prozessor hat einen einheitlichen Adressraum und kann Code 
an jeder Adresse ausführen, egal ob ROM oder RAM, die Frage ist nur, ob 
man überhaupt extern RAM anschliessen kann (ob der Bus herausgeführt 
ist).

Es ist auch egal, ob es sich um RAM handelt, solange dort Code steht, 
der kann ja auch anderweitig hineingekommen sein, etwa bei einem 
Emulator vom PC gesteuert.

Der 8051 kann aber nur Code ausführen, der im Adressbereich für Code 
steht, auch egal ob dort ROM oder RAM angeschlossen ist - ist also 
Harvard.

Gruss Reinhard

von W.S. (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Ein solcher Prozessor hat einen einheitlichen Adressraum und kann Code
> an jeder Adresse ausführen, egal ob ROM oder RAM,

Nö. Du schreibst sehr vom hohen Roß aus und liegst dabei falsch. Kleines 
Beispiel: Viele ARM-Controller haben RAM-Stücke eingebaut, die zwar im 
vereinheitlichten Adreßvolumen liegen und wo man auch Daten unterbringen 
kann, aber das Ausführen von Code daraus geht NICHT.

Also nicht so vorschnell "bei v.Neumann geht immer alles" trompeten. Es 
kommt immer auf die konkrete Realisierung an und die erfährt man nur aus 
dem jeweiligen Manual - ohne Verallgemeinerungsfähigkeit.

W.S.

von (prx) A. K. (prx)


Lesenswert?

DR schrieb:
> Hallo zusammen, ich versuche nun seit einigen Tagen zu verstehen, ob ein
> Von Neumann-µC grundsätzlich immer in der Lage ist, Code aus einem
> externen RAM auszuführen. Kann mir da jemand weiterhelfen?

Falsche Fragestellung. Du willst wissen, ob der Controller X das kann. 
Nicht ob John von Neumann sich damals Gedanken über internes und 
externes RAM gemacht hatte (hat er nicht).

Denn H vs vN hilft dir hier nicht weiter. Es gibt Prozessoren, die 
mehrere RAM Banks für Daten haben und in manchen davon Code ausführen 
können, in anderen nicht. Da hilft nur die konkrete Frage nach Typ X.

Die Klassifizierung realer heutiger Prozessoren in H oder vN hat heute 
ohnehin etwas von der Swift'schen existentiellen Frage, an welchem Ende 
man das Ei aufschlägt.

: Bearbeitet durch User
von Andy P. (bakaroo)


Lesenswert?

Spätestens seit Intels Execution-bit in den X86-reihen sollte auch dem 
Letzten klar sein, daß reine von-Neumann- oder Harward-Architekturen nur 
auf dem Papier existieren.
Heute ist das eher so ein Mittelding: per Bootloader, externer 
Beschaltung, Ausführungsschicht, Adressmaskierung etc, werden bestimmte 
Bereiche als "nur Daten", "nur Programm" oder gar als "Nur Execute, kein 
Read"=auslesegeschützt markiert.
Welche CPU was wie genau macht, muß man halt nachlesen - hier kocht 
jeder Hersteller sein eigenes Süppchen.
Achja: Selbst zu Z80-Zeiten (eine Lehrbuch-von-Neumann-Architektur) 
konnte man ganz-simpel Adressbereiche aus der Programmausführung 
ausklammern: Einfach für die entsprechenden Adressen das Signal M1 als 
"disable" mitdekodieren.

von (prx) A. K. (prx)


Lesenswert?

Andy P. schrieb:
> Spätestens seit Intels Execution-bit in den X86-reihen sollte auch dem
> Letzten klar sein, daß reine von-Neumann- oder Harward-Architekturen nur
> auf dem Papier existieren.

Da die Harvard Architektur ihren Namen dem Rechner Harvard Mark I 
verdankt, war das doch deutlich mehr als blosses Papier. ;-)

Eine gewisse Folgerichtigkeit liegt aber darin, dass eines der ersten 
Programme dieses 5 Tonnen Kolosses auf John von Neumann zurückgeht.

: Bearbeitet durch User
von DR (Gast)


Lesenswert?

Vielen lieben Dank für die ganzen Antworten! :-)
Das hilft mir auf jeden Fall weiter.

A. K. schrieb:
> Falsche Fragestellung. Du willst wissen, ob der Controller X das kann.
> Nicht ob John von Neumann sich damals Gedanken über internes und
> externes RAM gemacht hatte (hat er nicht).
>
> Denn H vs vN hilft dir hier nicht weiter. Es gibt Prozessoren, die
> mehrere RAM Banks für Daten haben und in manchen davon Code ausführen
> können, in anderen nicht. Da hilft nur die konkrete Frage nach Typ X.
Das ist mir jetzt auch endlich klar geworden :-)

Deshalb also die Frage: Könnt Ihr mir bitte Prozessoren/Controller 
(gerne auch ältere) nennen, die Code aus einem externen Speicher 
ausführen können? Bei den 8051ern ist das nach meinem Verständnis 
möglich.

von sebastian (Gast)


Lesenswert?

Verrätst du uns auch noch genauer, was du tun willst?
Über was für eine Schnittstelle soll der externe Speicher angebunden 
sein?
Warum muss er extern sein? Könntest du nicht einen Prozessor mit genug 
internem Speicher nehmen?
Oder geht es dir darum, dass du den Code zur Laufzeit ändern kannst (RAM 
statt ROM)?
Käme es auch in Frage, einen (Bytecode-) Interpreter laufen zu lassen 
(dann geht es nämlich immer)?
Muss zusätzlich ein ROM da sein, oder wärs auch ok, wenn es nur aus dem 
RAM läuft (also: Wäre x86 eine Antwort auf deine Frage?)

von DR (Gast)


Lesenswert?

sebastian schrieb:
> Verrätst du uns auch noch genauer, was du tun willst?
Ich möchte, nachdem ich bereits eine Zeit lang mit Atmels ATtinys und 
ATmegas gebastelt hab, nun gerne eine Art "Retrocomputer" bauen - oder 
zumindest mit dem Bau anfangen. Ich weiß, dass das ein ziemlich hohes 
Ziel ist, mir gehts aber weniger um das Ergebnis als vielmehr um den Weg 
dorthin, da ich dadurch glaub ich sehr viel lernen könnte.

Zu diesem Zweck möchte ich einen möglichst abgespeckten Controller - 
also fast schon einen Prozessor - nutzen und diesen um die Peripherie 
erweitern, die ich für sinnvoll halte und die mich interessiert. Wichtig 
ist mir, dass das ganze ab einem gewissen Zeitpunkt autark sein soll, 
ich also auf dem selbstgebauten Computer Programme für ebendiesen 
schreiben kann (womit ich momentan nur Assembler-Programme meine, über 
Compilerbau kann ich mir immer noch später den Kopf zerbrechen, falls 
ich bis dahin überhaupt komme). Deshalb möchte ich im laufenden Betrieb 
Programme laden und beenden können, weshalb ich mich gegen Flashen per 
Bootloader oder einen Interpreter entschieden hab. Ein Interpreter würde 
zwar auch funktionieren, allerdings interessieren mich Interpreter nicht 
sonderlich.

sebastian schrieb:
> Über was für eine Schnittstelle soll der externe Speicher angebunden
> sein?
Da kenn ich mich nicht aus, eben so, dass die dort liegenden Programme 
vom Controller mit möglichst wenig Aufwand ausgeführt werden können.

sebastian schrieb:
> Warum muss er extern sein? Könntest du nicht einen Prozessor mit genug
> internem Speicher nehmen?
Extern deshalb, damit ich mir auch Dinge wie Bank Switching und so 
(unabhängig davon, ob das nun veraltet ist oder nicht) mal ansehen kann. 
Ich möchte mich außerdem bewusst etwas einschränken (z.B. max. 
16-Bit-Controller, nicht mehr als vielleicht 40MHz, etc.), im Zuge 
dessen wäre externer Speicher eben praktisch: Ich könnte zunächst bspw. 
8KB RAM nutzen und sehen, wie weit ich damit komme. Wenn ich damit 
definitiv nichtmehr weiter komme erweiter ich den Speicher auf 16KB usw.

sebastian schrieb:
> Muss zusätzlich ein ROM da sein, oder wärs auch ok, wenn es nur aus dem
> RAM läuft
Es sollte beim "Booten" ein ROM vorhanden sein, von dem das 
Startprogramm gelesen wird (da ich nicht z.B. das Programm per 
Bootloader über die serielle Schnittstelle o.ä. laden will). Ob das ROM 
intern oder extern sein soll weiß ich noch nicht genau.

sebastian schrieb:
> Wäre x86 eine Antwort auf deine Frage?
Mit x86 hab ich mich noch nie auseinandergesetzt, ich werd dazu morgen 
mal querlesen.
Bisher sind mir zwei Controllerfamilien aufgefallen: Die 8051 (insb. der 
AT89S52, da sich der interne Flash mit den Standard-Atmel-Programmern 
programmieren lässt) sowie die HC(S)08- und HC(S)12-Reihen von 
Freescale. Letztere hatten eben zu meiner Verwirrung geführt: Ich hatte 
im Internet gelesen, dass sie in der Lage seien, Code von einem externen 
RAM auszuführen. In den Datenblättern hab ich dazu aber nichts gefunden. 
Geht das nun oder nicht? Und wo kann man dazu was nachlesen? Jedenfalls 
hab ich das dann irgendwie mit Von Neumann in einen Topf geworfen und 
war dann vollends verwirrt...


Mir ist klar, dass dieses Vorhaben weder zeitgemäß noch sonderlich 
elegant ist und meine Begründungen streckenweise willkürlich sind, mich 
interessierts einfach :-)

von TomA. (Gast)


Lesenswert?

Hallo DR

bei 8051ern ist das möglich und auch nicht schwer. Zum fetchen 
(Programmcode lesen) aus dem Programmspeicher aktiviert er das 
PSE-Signal (Program Store Enable - Low aktiv). Zum lesen aus dem RAM 
aktiviert er das RD-Signal (Read Low-aktiv). Verknüpft man beide Signale 
UND, wird der Ausgang des Gatters bei beiden Signalen Low. So wird aus 
"Harvard" "von Neumann" und der gemeinsame Programm- und 
Datenspeicherzugriff funktioniert tadellos. Ich habe das vor einigen 
Jahren, mit AT89S8253 gemacht, hat problemlos funktioniert.

Gruß Tom.

von Josef G. (bome) Benutzerseite


Lesenswert?

DR schrieb:

> Ich möchte ... eine Art "Retrocomputer" bauen
> ...
> Wichtig ist mir, ...
> ich also auf dem selbstgebauten Computer Programme für ebendiesen
> schreiben kann (womit ich momentan nur Assembler-Programme meine ...)
> ...
> Deshalb möchte ich im laufenden Betrieb Programme laden
> ...
> Extern deshalb, damit ich mir auch Dinge wie Bank Switching und so
> (unabhängig davon, ob das nun veraltet ist ...) mal ansehen kann
> ...
> Mir ist klar, dass dieses Vorhaben weder zeitgemäß noch sonderlich
> elegant ist ..., mich interessierts einfach

Schau dir das mal an
http://www.mikrocontroller.net/articles/8bit-CPU:_bo8

von DR (Gast)


Lesenswert?

Vielen Dank Euch allen, ich les mich mal weiter in die Materie ein. 
Dieser Thread hat mir auf jeden Fall geholfen, einige grundlegende 
Verständnisprobleme zu beseitigen :-)

von Wilhelm F. (Gast)


Lesenswert?

DR schrieb:

> Vielen Dank Euch allen, ich les mich mal weiter in die Materie
> ein.
> Dieser Thread hat mir auf jeden Fall geholfen, einige grundlegende
> Verständnisprobleme zu beseitigen :-)

Ein 8051 läßt sich problemlos mit einem RAM zusätzlich zu externem ROM 
aus statten. Dazu sind hardwaremäßig nur zwei NAND-Gatter erforderlich, 
welche Verknüpfungen zwischen den Signalen PSEN, RD und WR machen. 
Könnte ich aber noch mal nach sehen, ich hab ja solche Boards. Man kann 
dann, wie schon jemand schrieb, über einen Bootlader im ROM den Code vom 
PC ins RAM transferieren, und dort ausführen. Auch ist es möglich, im 
RAM Code während der Laufzeit zu manipulieren, und auch Daten darin zu 
speichern.

Der 8085 ist auch ein besonderer Retro-Kandidat, den man sich dafür 
anschauen kann. Der ist wieder von Neumann, ROM und RAM teilen sich den 
Adreßraum. Der 8085 braucht ohnehin externes RAM für Daten, und 
besonders für den Stack. Er ist gar nicht so viel älter als der 8051, 
aber eher ein µP als ein µC. Es ist sogar möglich, mit dem Ding eine 
absolut minimalistische Hardware zu bauen, die nur das externe ROM hat. 
Jedoch muß man im Programm auf Stack und Calls und Interrupts 
verzichten, und mit 6 Datenbytes aus kommen. Ich habs nur scherzeshalber 
mal versucht. ;-)

Meiner 8085-Platine verpaßte ich nur 32k ROM und 32k SRAM. Damals hätten 
sie davon geträumt. Der 8085 hat damit einen riesigen Stack, von dem 
wieder ein 8051 träumt. Auch verpaßte ich dem einen Timer, was er ja 
auch nicht hat. Der Timer 8253 war noch gar nicht mal so uninteressant 
und schlecht! Und die I/O 8255. Dann hatte ich keine Lust mehr, es 
sollte ja einfach nur eine 8085-Demo werden. Einen Interrupt-Controller 
hätte ich noch gerne mal getestet, aber da gibt es noch so vieles mehr.



Mit einem ARM in Form eines LPC21xx hatte ich auch zu tun. Die 
Speicherbereiche liegen zwar in einem Adreßraum, aber dort gab es bei 
einer nicht erlaubten Flash-Adresse oder RAM-Adresse eine Exception. Das 
ist was ähnliches wie ein Interrupt, in dem man einen Error-Handler 
programmieren kann. Auf jeden Fall muß man dort für die Exceptions 
wenigstens Dummys programmieren, wenn man seine Arbeit ernst nimmt, 
sonst stürzt die Kiste dort ab. Ich glaube, dort lag ein kleiner 
RAM-Bereich innerhalb des Flash. Aber es ist eine Weile her, müßte alles 
wieder nach schauen. Diese µC sind schon etwas aufwändiger als ein 8085 
oder 8051. Deswegen finde ich manchmal merkwürdig, daß absoluten 
Anfängern hier im Forum sowas empfohlen wird.

von ass (Gast)


Lesenswert?

Die Frage macht mal gar keinen Sinn. Das ist als ob man fragt ob ein 
Uboot schwimmen kann.

von MCUA (Gast)


Lesenswert?

>ob ein Von Neumann-µC grundsätzlich immer in der Lage ist,
Ein typischen "Von Neumann-µC" gibt es (wie schon geschrieben) nicht,
eher Mischformen davon.
Die Vorteile von Harv. u vNeum können (je nach Kosten) im uC auch 
kombiniert werden.
Grössere Controller-Familien (bzw mache Derivate davon) erlauben 
Progr-Ausführung sowohl ausm int. als auch ausm ext. Speicher.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.