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)
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.
Dual-Prot RAM. Dann hat man ihn zu einem von Neumann umgebaut
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.
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.
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
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.
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
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.
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
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.
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?)
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 :-)
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.
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
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 :-)
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.
Die Frage macht mal gar keinen Sinn. Das ist als ob man fragt ob ein Uboot schwimmen kann.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.