Forum: Mikrocontroller und Digitale Elektronik Zusammenhang zwischen Harvard, von Neumann und den einzelnen Speicher


von Bernhard Klahf (Gast)


Lesenswert?

Hallo alle miteinander.
Ich versuche gerade heraus zu finden wie genau die Harvard/von Neumann 
Architekturen mit dem Flash, SRAM, EEPROM zusammenhängen.

In Wikipedia sind diese 2 Fotos raufgestellt, jedoch erklärt mir das 
nicht den Zusammenhang.
Also unter Speicher verstehe ich generell Programmspeicher, 
Datenspeicher(SRAM) und den nicht flüchtigen Speicher der veränderbar 
ist EEPROM.

HARVARD: 
http://de.wikipedia.org/w/index.php?title=Datei:Harvard-architektur.png&filetimestamp=20050402004006

VON NEUMANN: 
http://de.wikipedia.org/w/index.php?title=Datei:Von-Neumann_Architektur.svg&filetimestamp=20070628193931

Meine Frage jetzt: Sind diese 3 Speicher in der von Neumann Architektur 
zusammengeführt? Also ein gesamter nicht flüchtiger Speicher?
Oder ist das irgendiwe anders aufgebaut?

Demnach wenn diese Annahme stimmt müssen dann bei der Harvard 
Architektur diese 3 Speicher getrennt sein.

Stimmt diese Überlegung?

Gruß Berni

von Huch (Gast)


Lesenswert?

>Stimmt diese Überlegung?

Nein. Und sie wird auch durch die Bilder in keiner Weise gestützt.

Zunächst ist bei der Unterscheidung zwischen v. Neumann und Harvard nur 
Daten- und Programmspeicher relevant und zwar in Hinblick darauf ob sie 
den selben Adressraum teilen. Bei v. Neumann ist das der Fall, bei 
Harvard nicht.

Ob ein Speicher als RAM, EEPROM oder Flash ausgeführt ist ist durch 
diese Begriffe nicht festgelegt.

Insofern ist die Frage ob:
> ... bei der Harvard Architektur diese 3 Speicher getrennt ...

sinnlos, da nur zwei Speicherarten unterschieden werden.

Das hier:
>Also unter Speicher verstehe ich generell Programmspeicher,
>Datenspeicher(SRAM) und den nicht flüchtigen Speicher der veränderbar
>ist EEPROM.
ist als Aussage mit Vorsicht zu geniessen, da Du hier die Unterscheidung 
von Speicher nach Flüchtigkeit/Nicht-Flüchtigkeit und Verwendungszweck 
(Speicherung von Daten/Programm) gleichzeitig ins Spiel bringst.
Wiegesagt aber erfolgt die Unterscheidung der beiden Architekturen nur 
anhand des Verwendungszwecks.

von Thomas E. (thomase)


Lesenswert?

Als John von Neumann seine Speicherarchitektur entwickelt hat, gab es 
noch gar keine Eproms. Da ga es überhaupt noch keine Speicher, wie wir 
sie heute haben.

Das sind grundsätzliche Rechnerarchitekturen, die unabhängig sind von 
der physikalischen Realisierung des Speichers.
Was es aber seit eh und je in Computern gibt, sind Programmspeicher und 
Datenspeicher.
Harvard bedeutet, daß diese getrennt sind. D.h. im Datenspeicher kann 
kein Programm ausgeführt werden. Bei von Neumann gibt es nur einen 
Speicher in dem sowohl Daten stehen, als auch Programm ausgeführt wird.

Ein E²Prom ist eher ein Peripheriegerät. Wie eine Festplatte.

mfg.

von Bernhard Klahf (Gast)


Lesenswert?

Aus Wikipedia:
>Der Befehlsspeicher ist physisch vom Datenspeicher getrennt und beide >werden 
über getrennte Busse angesteuert. Der Vorteil dieser Architektur >besteht darin, 
dass Befehle und Daten gleichzeitig geladen, bzw. >geschrieben werden können.

Es ist hier offensichtlich dass 2 verschiedene Speicher ins Spiel 
kommen. Der Daten und der Befehlsspeicher.
Was ist nun das eine und das andere nun wirklich?

Du sagst, dass sie beide gleichzeitig addressiert werden und bei der von 
Neumann architektur nicht. Wie kann ich mir das vorstellen?

Huch schrieb:
> ist als Aussage mit Vorsicht zu geniessen, da Du hier die Unterscheidung
> von Speicher nach Flüchtigkeit/Nicht-Flüchtigkeit und Verwendungszweck
> (Speicherung von Daten/Programm) gleichzeitig ins Spiel bringst.
> Wiegesagt aber erfolgt die Unterscheidung der beiden Architekturen nur
> anhand des Verwendungszwecks.

Ok, ich gebe dir da vollkommen recht damit.

Huch schrieb:
> sinnlos, da nur zwei Speicherarten unterschieden werden.

Ok, also 2 Speicherarten. Welche sind das jetzt genau?

Gruß Berni

von Bernhard Klahf (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Das sind grundsätzliche Rechnerarchitekturen, die unabhängig sind von
> der physikalischen Realisierung des Speichers.
> Was es aber seit eh und je in Computern gibt, sind Programmspeicher und
> Datenspeicher.
> Harvard bedeutet, daß diese getrennt sind. D.h. im Datenspeicher kann
> kein Programm ausgeführt werden. Bei von Neumann gibt es nur einen
> Speicher in dem sowohl Daten stehen, als auch Programm ausgeführt wird.

Ok, dasist sehr sehr verständlich dargestellt.
Heißt das ich kann wenn ich eine Harvardarchitektur in irgend einer Form 
händisch aufbaue mit 2 Flash Speicher oder 2 EEPROMS ?
Das sollte dem System ja egal sein er muss nur wissen welcher der Daten 
beinhalten soll und welcher das Programm bei einer Harvardarchitektur.

Bei der Von neumann gilt das selbe dann, ist das so korrekt?

Gruß Berni

von Thomas E. (thomase)


Lesenswert?

Bernhard Klahf schrieb:
>>Der Befehlsspeicher ist physisch vom Datenspeicher getrennt und beide >werden
>
> über getrennte Busse angesteuert. Der Vorteil dieser Architektur >besteht darin,
>
> dass Befehle und Daten gleichzeitig geladen, bzw. >geschrieben werden können.

Auch wenn es in wikipedia steht, aber das ist Unsinn.
Ein klassischer Computer hat einen Adress- und einen Datenbus. Und 
darüber geht alles. Und zwar immer schön nacheinander.

Bernhard Klahf schrieb:
> Ok, also 2 Speicherarten. Welche sind das jetzt genau?

Programm- und Datenspeicher. ROM und RAM.

mfg.

von Jobst M. (jobstens-de)


Lesenswert?

Bei Harvard wählst Du durch den Zugriff, ob Du auf Daten oder den 
Programmspeicher zugreifst. In beiden Bereichen gibt es die gleichen 
Adressen.
-> Programmausführung aus dem Datenbereich ist nicht möglich.

Bei von-Neumann entscheidest Du durch die Adresse, auf welchen Teil des 
Speichers (oder auch I/O) Du zugreifst.
-> Programme können auch im Datenbereich laufen.


Gruß

Jobst

von Huch (Gast)


Lesenswert?

>Ok, also 2 Speicherarten. Welche sind das jetzt genau?
Ich dachte, das hätte ich geschrieben :-) Speicher zum speichern von 
Daten und solcher zum Speichern von Programmen (Befehlen).

>Was ist nun das eine und das andere nun wirklich?
Das ist eine philosphische Frage, auf die ich hier nur ansatzweise 
eingehen will. Speicher sind Dinge, die auf einem örtlich lokalisierten 
Raum einen gewissen physikalischen (materiellen oder energetischen) 
Zustand über einen zeitlich kontrollierbaren Zeitraum annehmen. Speicher 
für Befehle sind solche für Daten die als Befehle interpretetiert 
werden, Speicher für Daten sind solche für Daten die als Daten im Sinne 
von Zahlen, Texten etc. interpretiert werden.

>Du sagst, dass sie beide gleichzeitig addressiert werden und bei der von
>Neumann architektur nicht. Wie kann ich mir das vorstellen?
Ich habe das nicht gesagt, sondern Wikipedia. Tatsächlich handelt es 
sich um eine Design-Option die keine nötige Bedingung für das Vorliegen 
der einen oder der anderen Architektur ist. Man könnte das praktisch 
auch bei v.Neumann Architekturen implementieren.

von Bernhard Klahf (Gast)


Lesenswert?

Jobst M. schrieb:
> Bei Harvard wählst Du durch den Zugriff, ob Du auf Daten oder den
> Programmspeicher zugreifst. In beiden Bereichen gibt es die gleichen
> Adressen.
> -> Programmausführung aus dem Datenbereich ist nicht möglich.
>
> Bei von-Neumann entscheidest Du durch die Adresse, auf welchen Teil des
> Speichers (oder auch I/O) Du zugreifst.
> -> Programme können auch im Datenbereich laufen.

Sehr gut, das ist ja jetzt eine deutliche Sache!

Dankeschön für die Hilfen hier!

Gruß Berni

von Huch (Gast)


Lesenswert?

Man muss eigentlich noch etwas präziser folgendes über den Unterschied 
der Architekturen sagen:
Bei einer v.Neumann Architektur können die selben Befehle auf Daten 
angewendet werden die sowohl als Befehle als auch als Anwendungsdaten 
interpretiert werden können. Und zwar im engeren Sinne durch die 
Ausführungseinheit der CPU.
Bei einer Harvard Architektur können Daten im Datenspeicher nur von 
Befehlen zugegriffen werden die diese auch als Daten behandeln. Es gibt 
nicht die Möglichkeit etwa eine Ziffer in den Daten als Sprungziel eines 
JMP-Befehls anzugeben. (Im Ggs. zu v.N.) Umgekehrt können Daten die 
Befehle (der CPU) sind nicht durch Datenmanipulationsbefehle zugegriffen 
werden. Sie können nicht in Arbeitsregister geladen, addiert oder 
zurückgespeichert werden.

von Thomas E. (thomase)


Lesenswert?

Bernhard Klahf schrieb:
> Ok, dasist sehr sehr verständlich dargestellt.
>
> Heißt das ich kann wenn ich eine Harvardarchitektur in irgend einer Form
>
> händisch aufbaue mit 2 Flash Speicher oder 2 EEPROMS ?
>
> Das sollte dem System ja egal sein er muss nur wissen welcher der Daten
>
> beinhalten soll und welcher das Programm bei einer Harvardarchitektur.

Nein.
Vergiß mal das EEProm.

Im Flash kannst du nur Programm ausführen. Aber keine Daten ablegen und 
damit rechnen. Dazu brauchst du RAM.
Die Kiste vor der du gerade sitzt ist eine Von-Neumann-Maschine. Da wird 
das Programm im RAM ausgeführt.

Der große Unterschied ist die Adressierung und die Schaltung der 
entsprechenden Steuerleitungen zum Ansprechen der Speicher. Beim AVR ist 
das alles intern.
Mikroprozessoren, die keinen Speicher On-Chip haben, haben dafür extra 
Steuerleitungen. Die Prozessoren sind die Bauteile, die entscheiden ob 
der Rechner Harvard oder Von-Neumann ist.
Bei einem Harvard Rechner gibt es immer 1 Enable-Leitung, die z.B. 
Programm-Store-Enable (8051)heisst. Damit Enabled man dann den Programm- 
speicher, üblicherweise ROM. Und wenn die Leitung disabled ist, wird auf 
das RAM zugegriffen.
Bei Von-Neumann braucht man das nicht.

Aber über das Thema kann man ganze Bücher schreiben. Und über die 
Tricks, wie man aus einem 8051 einen Von-Neumann macht...

mfg.

von Huch (Gast)


Lesenswert?

>Sehr gut, das ist ja jetzt eine deutliche Sache!
Ich möchte jetzt keinen Streit vom Zaum brechen, aber ich meine das 
diese Aussage

> Bei von-Neumann entscheidest Du durch die Adresse, auf welchen Teil des
> Speichers (oder auch I/O) Du zugreifst.
> -> Programme können auch im Datenbereich laufen.

nicht eigentlich wesentlich für den Unterschied zw. Harvard und v.N. 
ist.

Denn bei beiden Architekturen unterscheide ich durch die Adresse auf 
welchen Teil des Speichers ich zugreife.

Die Frage ist, inwiefern ein gewisser Befehl bezüglich der möglichen 
Adressen eingeschränkt ist oder nicht.
Man könnte sich nämlich durchaus eine Harvard-Architektur vorstellen bei 
der der Speicher im Design einen einzigen Adressraum darstellt. Aber die 
Ausführungsbefehle erlauben dann nur Adressen in einem gewissen Bereich 
und die Datenmanipulationsbefehle Adressen in einem anderen Bereich 
wobei sich beide nicht überschneiden.

Kurze Anmerkung:
Es geht mir hier nur darum, das eigentlich wesentliche (aus meiner 
Sicht) herausstellen. Ich denke das die Fakten sicher auch Jobst und 
Thomas bekannt sind.

von Huch (Gast)


Lesenswert?

>Im Flash kannst du nur Programm ausführen. Aber keine Daten ablegen und
damit rechnen. Dazu brauchst du RAM.
Im Sinne des eben gesagten (also dem Wunsch nach Klarheit) müsste man 
das aus meiner Sicht relativieren.
Es ging ja darum was denn der Unterschied der Architekturen ist.

Es ist durchaus denkbar im Flashspeicher Daten abzulegen. Der Grund das 
man das nicht so macht liegt nicht in der Wahl der Architektur begründet 
sondern in der begrenzten Anzahl der Schreibzyklen bei Flash-Speicher. 
Das war der Kern meiner Aussage, das für die Architektur die 
Speichertechnologie unwichtig ist.
Ähnliches gilt für die Aussagen über die Adressierung. Dazu habe ich 
aber oben schon was geschrieben (darüber das bei Harvard Daten- und 
Programmspeicher im Design ein homogener Komplex sein können und über 
die zulässigen Operanden entschieden wird, welcher Bereich Daten bzw. 
Befehle hält).

von Jobst M. (jobstens-de)


Lesenswert?

Huch schrieb:
> Denn bei beiden Architekturen unterscheide ich durch die Adresse auf
> welchen Teil des Speichers ich zugreife.

Nein, tust Du nicht.

Worauf greifst Du denn bei einer Harvard-Architektur zu, wenn die 
Adresse 0x0000 ist? RAM oder ROM?

Antwort: Es kommt darauf an, welchen Befehl man verwendet.



Gruß

Jobst

von Jobst M. (jobstens-de)


Lesenswert?

Huch schrieb:
> Man könnte sich nämlich durchaus eine Harvard-Architektur vorstellen bei
> der der Speicher im Design einen einzigen Adressraum darstellt. Aber die
> Ausführungsbefehle erlauben dann nur Adressen in einem gewissen Bereich
> und die Datenmanipulationsbefehle Adressen in einem anderen Bereich
> wobei sich beide nicht überschneiden.

Das ist dann aber eigentlich ehr von Neumann mit 
Speicherschutzmechanismen ...



Gruß

Jobst

von Thomas E. (thomase)


Lesenswert?

Jobst M. schrieb:
> Das ist dann aber eigentlich ehr von Neumann mit
>
> Speicherschutzmechanismen ...

Das geht auch richtig schon durcheinander. Indem man die 
Program-Store-Enable-Leitung mit der Data-store-Enable-Leitung 
verknüpft. und an CE vom RAM hängt.

Man kann das aber auch sauber trennen, indem man bei einem 64k-RAM die 
PSEN an Adressleitung 15 legt.

Aber das hat mit der ursprünglichen Frage nichts mehr zu tun.

mfg.

von Huch (Gast)


Lesenswert?

@ Jobst

>Nein, tust Du nicht.

>Worauf greifst Du denn bei einer Harvard-Architektur zu, wenn die
>Adresse 0x0000 ist? RAM oder ROM?

Ja. Ja. Die Worte und wie schwer es fällt sie zu wählen. :-)

Das ist, denke ich, ein Missverständnis, das ich durch meine Wortwahl 
begünstigt habte.

> Denn bei beiden Architekturen unterscheide ich durch die Adresse auf
> welchen Teil des Speichers ich zugreife.
Ich meinte nicht das ich bei beiden Architekturen durch die Adresse 
entscheide ob ich auf Daten oder Programmspeicher zugreife. Das würde 
auch dem Unterschied zwischen beiden Architekturen widersprechen.
Ich bezog mich auf den Satz von Thomas, den ich hätte nicht isolieren 
dürfen, meine ich jetzt. Denn mir hat er erstmal suggeriert, das der 
Kern die (eigentlich triviale) Aussage ist, das man über die Adresse 
auswählt was man liest/schreibt ausführt und das das der wesentliche 
unterschied zur Harvard-Architektur ist. Aber das ist ja eigentlich 
nicht der Unterschied, denn das ist gerade das Wesen einer "Adresse" das 
man wählt, was man liest/schreibt/ausführt. Das ist bei beiden 
Architekturen gleich.

>Antwort: Es kommt darauf an, welchen Befehl man verwendet.
Sicherlich. Aber der Punkt auf den es mir ankam (das hatte ich auch 
geschrieben) ist, das die Speicherarchitektur physisch durchaus homogen 
sein kann und die Unterscheidung über die Befehle erfolgt indem gewisse 
Befehle eben nur gewisse Adressbereichen zulassen. Das ist also kein 
Widerspruch oder gar eine "Antwort" auf meine Aussage. (Wenn man 
berücksichtigt, das ich wie eben beschrieben hätte noch klarstellen 
können, das ich die Eigenschaft einer Adresse meinte "auszuwählen" und 
nicht zwischen Daten- und Programm im Falle von Harvard zu 
unterscheiden).

>Das ist dann aber eigentlich ehr von Neumann mit Speicherschutzmechanismen ..

Äusserlich wäre es jedenfalls nicht von einer Harvard-Architektur zu 
unterscheiden.
Und ist nun die Tatsache das ich bei Harvard bestimmten Begrenzungen 
beim Speicherzugriff unterliege als "Speicherschutzmechanismus" in dem 
selben Sinne zu begreifen wie bei v.Neumann? Aus meiner Sicht nicht. 
Denn bei Harvard ist dieser Schutz absolut nicht zu umgehen (lassen wir 
mal Sonderfälle wie den AVR mit LPM/SPM aussen vor). Bei v.Neumann 
hingegen ist er Teil des Konzeptes Programme dynamisch zu behandeln, 
also z.B. nachladen zu können und dennoch (in einiger Hinsicht) 
schützen zu können.

Das ist also schon ein Unterschied in der Qualität und nicht einfach nur 
ein v. Neumann mit Speicherschutz.

von Huch (Gast)


Lesenswert?

>Das geht auch richtig schon durcheinander. Indem man die
>Program-Store-Enable-Leitung mit der Data-store-Enable-Leitung
>verknüpft. und an CE vom RAM hängt.

>Man kann das aber auch sauber trennen, indem man bei einem 64k-RAM die
>PSEN an Adressleitung 15 legt.

>Aber das hat mit der ursprünglichen Frage nichts mehr zu tun.

Das scheint mir auch so.

Ich meine, das es hier nicht so sehr auf die physische Realisierung 
ankommt.

Meine Argumentkette geht ja so: Wenn man von konkreten Implementierungen 
absieht (also welche Leitung womit verbunden ist etc.) absieht, was ist 
dann das wesentliche Unterscheidungsmerkmal?
Deine scheint mir eher umgekehrt vorzugehen: Du schreibst, wenn ich 
hardware-technisch dieses und jenes tue, dann liegt die Architektur vor, 
ansonsten die andere.

von Thomas E. (thomase)


Lesenswert?

Huch schrieb:
> Deine scheint mir eher umgekehrt vorzugehen: Du schreibst, wenn ich
>
> hardware-technisch dieses und jenes tue, dann liegt die Architektur vor,
>
> ansonsten die andere.

Nein. Das bleibt immer noch Harvard. Ist höchstens Von-Neumann für Arme.

Wie ich schon oben gesagt habe, kann man da ein Buch drüber schreiben.

Ein Kriterium ist die Art der Adressierung. Zugriff auf Code geht bei 
Harvard immer auf Programmspeicher, Zugriff auf Daten auf Datenspeicher. 
Völlig egal, ob das ROM, RAM oder ein Memory-Mapped Port ist. Und über 
die Adressierungsart macht die CPU auch die Unterscheidung ob eben 
Programmspeicher oder Datenspeicher hardwaremäßig angesteuert wird.
Ein Jump oder Call geht eben nur im Codespeicher. Ein Move nur im 
Daten-speicher.

Die CPU und der Befehlssatz mit den Adressierungsarten entscheiden über 
Harvard oder Von-Neumann.

mfg.

von Huch (Gast)


Lesenswert?

>>Huch schrieb:
>> Deine scheint mir eher umgekehrt vorzugehen: Du schreibst, wenn ich
>>
>> hardware-technisch dieses und jenes tue, dann liegt die Architektur vor,
>>
>> ansonsten die andere.

Nein. Das bleibt immer noch Harvard. Ist höchstens Von-Neumann für Arme.

Was bleibt immer noch Harvard? Worauf bezieht sich das? Ich habe ja in 
meinem Satz keine bestimmte Schaltung in den Raum gestellt sondern sagen 
wollen, das Du bestimmte Hardwareschaltungen nennst, die eine 
Harvard-Architektur ausmachen.
Genauso: "Was ist v. Neumann für Arme? Worauf bezieht sich das?

>Wie ich schon oben gesagt habe, kann man da ein Buch drüber schreiben.
Das mag sein. Was willst Du mir damit sagen? Ich habe einiges darüber 
gelesen, bin seit 30 Jahren im Geschäft. Es besteht also die Möglichkeit 
darüber kompetent zu schreiben, denke ich.

>Ein Kriterium ist die Art der Adressierung. Zugriff auf Code geht bei
>Harvard immer auf Programmspeicher, Zugriff auf Daten auf Datenspeicher.
Sicher. Habe ich was anderes geschrieben?

>Völlig egal, ob das ROM, RAM oder ein Memory-Mapped Port ist.
Auch dem stimme ich zu. Habe auch nie was anderes behauptet. Wozu 
schreibst Du das?

>Und über die Adressierungsart macht die CPU auch die Unterscheidung ob eben 
Programmspeicher oder Datenspeicher hardwaremäßig angesteuert wird.
An sich sagt die "Adressierungart" etwas über "immediate", indirect, 
indexed usw. Fasst man den Begriff mal weiter ist die Aussage doch 
einfach nur trivial. Wozu schreibst Du das?

>Ein Jump oder Call geht eben nur im Codespeicher. Ein Move nur im
>Daten-speicher.
Auch richtig. Wozu schreibst Du das? Ich habe nie das Gegenteil 
behauptet.

>Die CPU und der Befehlssatz mit den Adressierungsarten entscheiden über
>Harvard oder Von-Neumann.
Nun, das ist sicher richtig, aber so allgemein und trivial, das es für 
jemanden der den Unterschied beschreiben will doch eigentlich nutzlos 
ist, meinst Du nicht auch?

von Huch (Gast)


Lesenswert?

Wenn ich hier einen schwachen Punkt bei meiner Argumentation sehe, dann 
diesen:

Die Texte die ich vorliegen habe, sagen aus, das bei einer 
Harvard-Architektur der Daten- und Adressbus physisch getrennt sind.

Ich hatte nun in den Raum gestellt, das der wesentliche Punkt ist, das 
bei der Harvard-Architektur die Befehle zur Datenmanipulation und 
Ausführung durch die Ausführungseinheit kontrolliert unterschiedliche, 
sich nicht überschneidende Speicherbereiche ansprechen.
Das jedoch die Speicherarchitektur dennoch homogen sein könnte (und die 
Ausführungseinheit demnach ein zusätzliches Adressbit, das für den 
Programmierer nicht kontrollierbar ist, zur Unterscheidung zwischen 
Daten- und Programmspeicher verwenden könnte).

Das widerspricht strenggenommen der Definition, als bei meiner 
Auffassung kein getrennter Bus für Daten und Programmspeicher vorliegen 
muss.

Ich meine aber, mit meiner Auffassung, das der wesentliche Aspekt die 
Unmöglichkeit ist mit Datenmanipulationsbefehlen den Programmcode zu 
ändern bzw. mit Ausführungsbefehlen "Daten" auszuführen, den Kernpunkt 
getroffen zu haben. Hingegen meine ich, das die tatsächliche physische 
Knfiguration nebensächlich ist, falls die eben genannte Bedingung gilt.
Das ist die notwendige Bedingung.

Fasst man also die gängige Definition mit den getrennten Bussen als 
maßgebend auf, so beschreibt meine eine noch unbenannte Klasse. Die 
Überschneidung liegt darin, das strikte Harvard-Architekturen 
"gewöhnlich" keine "Ausführung" von Daten erlaubt. Aus der Definition 
aber folgt das nicht. Umgekehrt muss eine Architektur die nicht die 
"Ausführung" von Daten erlaubt keine Harvard-Architektur, also keine 
getrennten Busse, haben.

Ich will ja nichts als eine kompetente Diskussion darüber führen. Das 
ist alles.

von Thomas E. (thomase)


Lesenswert?

@Huch
Warum schreibe ich dies, warum schreibe ich das?

Kommt darauf an, wie tief man in die Materie einsteigt. Man kann die 
Frage oben auch mit einem Satz beantworten. Das ist der mit dem 
gemeinsamen und getrennten Speicher.

Oder Man schreibt ein Buch drüber.
Einzelne Ausdrücke führen hier nicht weiter. Da redet, nein schreibt, 
man oft genug aneinander vorbei. Beim Reden könnte man ja mal 
zwischenfragen.

mfg.

von Thomas E. (thomase)


Lesenswert?

Thomas Eckmann schrieb:
> Bernhard Klahf schrieb:
>
>>>Der Befehlsspeicher ist physisch vom Datenspeicher getrennt und beide >werden
>
>>
>
>> über getrennte Busse angesteuert. Der Vorteil dieser Architektur >besteht 
darin,
>
>>
>
>> dass Befehle und Daten gleichzeitig geladen, bzw. >geschrieben werden können.
>
>
>
> Auch wenn es in wikipedia steht, aber das ist Unsinn.

Hier muß ich nochmal was richtig stellen.
Das mit dem Unsinn bezieht sich nicht darauf, daß sowas geht oder nicht, 
sondern auf die Allgemeingültigkeit dieser Aussage. Getrennte Busse 
müssen nicht sein. Gibt es beim 8051  mit externem Speicher auch nicht.

Aber beim AVR gibt es das, da sind die sogar unterschiedlich breit.

mfg.

von Huch (Gast)


Lesenswert?

Tja. Schade. Wäre nett gewesen mal über was Schwierigeres zu schreiben, 
als über die UART Initialisierung oder den ISP-Takt.

von Huch (Gast)


Lesenswert?

>Getrennte Busse müssen nicht sein.

Bei der Harvard-Architektur schon, wenn man die Definition von Wikipedia 
genau nimmt. Einmal willst Du sie genau nehmen dann wieder nicht.

von Thomas E. (thomase)


Lesenswert?

Huch schrieb:
> Ich will ja nichts als eine kompetente Diskussion darüber führen. Das
>
> ist alles.

Genau das will ich auch.

Vor allen Dingen nicht auf dem Niveau " Hilfe, mein Interrupt funzt 
nicht".

Über die Busse kann man auch diskutieren.
Ich habe dem ja auch schon widersprochen, daß das Unsinn ist, mit den 
zwangsläufig getrennten Bussen.

Die Ausführung von Code kann ich auf bestimmte Bereiche durch die 
Befehle einschränken, typisch 8051. Da braucht man keine getrennten 
Busse.

Ein Vorteil von Harvard ist aber die Möglichkeit getennter Busse und 
damit verbunden unterschiedlicher Busbreiten.

mfg.

von Thomas E. (thomase)


Lesenswert?

Huch schrieb:
> Bei der Harvard-Architektur schon, wenn man die Definition von Wikipedia
>
> genau nimmt. Einmal willst Du sie genau nehmen dann wieder nicht.

Wikipedia ist mir ziemlich egal. Habe ich nur kommentiert und mich nicht 
drauf bezogen.


mfg.

von Huch (Gast)


Lesenswert?

Na toll. Jetzt hat sich das überschnitten. Und das wo ich so provokativ 
geschrieben habe:

>Einmal willst Du sie genau nehmen dann wieder nicht.

Also gut:

>Wikipedia ist mir ziemlich egal. Habe ich nur kommentiert und mich nicht
drauf bezogen.
OK. Auf welche Definition beziehst Du Dich denn? Link?

Wenn ich Dich richtig verstehe ist für Dich das wesentliche an Harvard 
nicht der getrennte Bus für Daten und Befehle? Was dann sonst?

von Thomas E. (thomase)


Lesenswert?

Huch schrieb:
> Wenn ich Dich richtig verstehe ist für Dich das wesentliche an Harvard
>
> nicht der getrennte Bus für Daten und Befehle? Was dann sonst?

Daß Code nicht im Datenspeicher ausgeführt werden kann.

Dadurch, daß das aber getrennt ist, habe ich die Möglichkeit getrennter 
Busse.

Und das ermöglicht wieder die Realisierung verschiedener Busbreiten, wie 
beim AVR, der dadurch zwei Bytes gleichzeitig aus dem Flash holt, was 
seine Geschwindigkeit praktisch verdoppelt.

mfg.

von Huch (Gast)


Lesenswert?

>Daß Code nicht im Datenspeicher ausgeführt werden kann.

Es scheint, das wir uns darin einig sind. Das schrieb ich ja auch hier: 
Beitrag "Re: Zusammenhang zwischen Harvard, von Neumann und den einzelnen Speicher"

von Thomas E. (thomase)


Lesenswert?

Huch schrieb:
> Es scheint, das wir uns darin einig sind

Genau.

Bleibt die Möglichkeit der verschiedenen Busbreiten.

Ist das bei einer 16-,32- oder 64-Bit-CPU überhaupt noch ein Argument 
oder ist das nur noch für 8-Bit-Controller relevant?

mfg.

von Bernhard Klahf (Gast)


Lesenswert?

Hmm, was ich jetzt bei dieser ganzen Diskussion noch nicht ganz 
begriffen habe ist:
Wenn ich mit einer v. Neumann Architektur auf meine Daten zugreife, dann 
entscheidet der Code  (im Nachhinein die Addressierung) welcher Speicher 
angesprochen wird. Stimmt das?

Wenn ich das mit den Speicher gut nach vollziehen konnte dann haben 
beide Harvard und v. Neumann einen RAM(ACCESS MENORY...Datenspeicher) 
und einen ROM(READ MEMORY... Programmspeicher).

Bei einer v. Neumann Architektur kann jetzt im RAM oder ROM eine 
Programm stehen und die MOVE ADD AND . . . ausgeführt werden.
D.h. Es wird bei einerm ADD Befehl beide Speicher nach der Adresse der 
Zahlen durchsucht wenn man das mal so darstellen will.

Und bei einer Harvard Architektur wird von vorn herein entschieden wo 
welcher Befehl hingeht.

Ist jetzt diese Denkweise so richtig?
Wenn ja dann glaube ich habe es begriffen.

Jetzt stellt sich nur noch eine Frage: Wie weiß meine Software wie sie 
die Daten addressieren soll?
Wird das bei einem Mega z.B. mit dem .inc File festgelegt über welchem 
Speicher bzw. welcher Bus angesprochen werden soll?
Anders kann ich mir das nicht vorstellen.

Gruß Berni

von Daniel (Gast)


Lesenswert?

Ohne jetzt hier abwertend zu klingen, aber alles hier gesagte was
über den trivialen Unterschied von getrenntem Programm- und Daten-
Speicher hinausgeht ist zum großteil falsch bzw. zu vage formuliert...

Das ganze greift beim Prozessor-Design i.a. sehr viel tiefer und
führt dann zu starken Unterschieden im Design um Konflikten durch
Abhängigkeiten entgegenzuwirken. Bei superskalaren Prozessoren
führt das dazu, dass ein getrennter Befehls- und Daten-Cache
existiert um damit beispielsweise einen gemeinsamen Hauptspeicher-
zugriff zu vermeiden...

Wens interessiert "Mikroprozessortechnik und Rechnerstrukturen"
Springer Verlag...

von Peter D. (peda)


Lesenswert?

Harvard hatte historisch gesehen einige Vorteile. Durch die getrennten 
Busse konnten Daten und Code gleichzeitig gelesen werden (schnellere 
Abarbeitung).
Und der Code konnte nicht versehentlich mit Daten überschrieben werden 
(höhere Zuverlässigkeit).

Inzwischen haben aber auch v. Neumann mehrere getrennte Busse, z.B. der 
Cortex-M3 hat 3 Busse (Code, Daten, Peripherie).
Und es gibt auch Schutzmechanismen (MMU) gegen Schreiben im Codebereich.


Peter

von Daniel (Gast)


Lesenswert?

Das ist nicht ganz richtig.
Für den Anwender ist er als Prozessor mit von Neumann Architektur
anzusehen. Intern Nutzt er jedoch wie du schon geschrieben hast
getrennte Buse und ist damit in seinen Grundzügen (zumindest
für den Chip Designer) in Harvard Architektur ausgeführt.

von Daniel (Gast)


Lesenswert?

Hab mal gegoogelt und hier nen interessanten Artikel gefunden.
http://infocenter.arm.com/help/index.jsp?opic=/com.arm.doc.faqs/ka3839.html

von Daniel (Gast)


Lesenswert?


von NichtGast (Gast)


Lesenswert?

Ich versuche mal etwas zu ordnen:

@ Daniel:
Du schriebst
> Intern Nutzt [der Cortex-M3] getrennte Buse und ist damit in
> seinen Grundzügen (zumindest für den Chip Designer) in
> Harvard Architektur ausgeführt.

Diese Aussage stimmt nur dann, wenn Du Harvard ganz klassisch durch das 
Vorhandensein getrennter Busse definierst. (wie das z.B. auch in der 
Wikipedia steht).

"Huch" wehrt sich aber (meiner Meinung nach völlig berechtigt) gegen 
diese klassische Definition, und sieht dagegen ausschließlich die 
Konzeption der Ausführungseinheit als Unterscheidungsmerkmal. Er hält 
folgende Definition für angebrachter: Gibt es in der Ausführungseinheit 
eine Unterscheidung zwischen (logischem) Programm- und Datenspeicher, so 
ist es Harvard, andernfalls v. Neumann. Dabei ist es egal, wie viele 
Busse physikalisch vorhanden sind.


@Bernhard:
Du schriebst:
> Wenn ich mit einer v. Neumann Architektur auf meine Daten
> zugreife, dann entscheidet der Code  (im Nachhinein die
> Addressierung) welcher Speicher angesprochen wird. Stimmt das?

Mit "welcher Speicher" meinst Du jetzt welche physikalische Speicherart, 
also z.B. RAM oder ROM, stimmts? :-) Zum Verständnis des Unterschieds 
zwischen Harvard und v. Neumann solltest Du Dich von von diesen 
physikalischen Speichern lösen. Dafür interessieren nur die rein 
logischen Begriffe "Programmspeicher" und "Datenspeicher". Beide können 
aus verschiedenen Arten von physikalischem Speicher bestehen, oder es 
kann sich auch nur um einen einzigen physikalisch vorhandenen Speicher 
handeln - zunächst mal vollkommen unabhängig von der Architektur.

Wenn es nur einen physikalisch vorhandenen Speicher gibt, ist die 
Harvard-Architektur natürlich nur noch begrenzt sinnvoll, aber möglich 
ist es schon. Und wenn man einen Prozessor mit Harvard-Architektur hat, 
dann verwendet man natürlich oft ein RAM für den Datenspeicher und ein 
ROM für den Programmspeicher, aber man muss das nicht unbedingt tun.

> Bei einer v. Neumann Architektur kann jetzt im RAM oder ROM
> eine Programm stehen und die MOVE ADD AND . . . ausgeführt
> werden.

Das stimmt zwar soweit...

> D.h. Es wird bei einerm ADD Befehl beide Speicher
> nach der Adresse der Zahlen durchsucht

...aber das ist leider nicht richtig. In dem Befehl steht ja klar drin, 
von welcher Adresse die Daten gelesen und an welche Adresse sie ggf. 
geschrieben werden. Wenn Du an einer v. Neumann Architektur verschiedene 
physikalische Speicher angeschlossen hast, wirst Du diese NUR durch 
unterschiedliche Adressbereiche trennen können. Es wird also nichts 
durchsucht, und schon gar nicht beide Speicher, sondern es wird einfach 
der Speicher genommen, der sich hinter der jeweiligen, dem Befehl 
übergebenen Adresse verbirgt.

von Daniel (Gast)


Lesenswert?

NichtGast schrieb:
> Gibt es in der Ausführungseinheit
>
> eine Unterscheidung zwischen (logischem) Programm- und Datenspeicher, so
>
> ist es Harvard, andernfalls v. Neumann. Dabei ist es egal, wie viele
>
> Busse physikalisch vorhanden sind.

Diese Def. ist wirklich besser...

von (prx) A. K. (prx)


Lesenswert?

Huch schrieb:

> Die Texte die ich vorliegen habe, sagen aus, das bei einer
> Harvard-Architektur der Daten- und Adressbus physisch getrennt sind.

Allerdings hatte man anno Harvard-Mk1 und John von Neumann auch keine 
Rechnerarchitekturen im Auge, die über ein halbes Dutzend und mehr Busse 
und mehrere Cache-Levels verfügen, teils Code und Daten getrennt, teils 
kombiniert. So hat sich leider diese Unterscheidung über die 
physikalischen Busse eingebürgert, die es schwierig macht, reale 
Architekturen sinnvoll einzuordnen.

Denn: Ist ein x86 nun Harvard von v.Neumann? Betrachtet man die 
Platinenverdrahtung ist es v.Neumann, beim L1-Cache jedoch (meistens) 
Harvard, bei L2-Cache hingegen wieder v.Neumann.

Ich ziehe es daher ebenfalls vor, die Unterscheidung über die 
Adressräume zu machen, egal mit wievielen Bussen das implementiert ist. 
Sitzen Code und Daten in getrennten Adressräumen => Harvard 
(8051,AVR,PIC), sitzen sie im gleichen Adressraum => v.Neumann 
(MSP430,ARM,x86).

von (prx) A. K. (prx)


Lesenswert?

Daniel schrieb:

> Bei superskalaren Prozessoren
> führt das dazu, dass ein getrennter Befehls- und Daten-Cache
> existiert

Meistens ja, manchmal nicht.

Die Cyrix-Prozessoren M1+M2 waren einerseits superskalar, verfügten 
andererseits über einen kombinieren Code/Daten-Cache, wenn man den sehr 
kleinen L0-Instruction-Cache mal aussen vor lässt.

Auch der superskalare PowerPC 601 hatte einen kombinierten Cache.

von (prx) A. K. (prx)


Lesenswert?

Thomas Eckmann schrieb:

> Bleibt die Möglichkeit der verschiedenen Busbreiten.

Wäre dazu erst einmal die Frage zu klären, wie gross die Busbreiten(n) 
von High-End CPUs überhaupt sind oder inwieweit dieser Begriff 
ausserhalb der Mikroarchitektur (d.h. der internen Implementierung) 
irgendwie relevant ist.

Die x86er werden über kurz oder lang teilweise intern 256-Bit Busse 
enthalten, Tendenz steigend, an anderer Stelle aber nur 64 Bits, während 
andererseits die externen Ankopplungen der AMD Prozessoren z.T. grad mal 
16 Bits breit sind - insoweit man das noch als Bus bezeichnen will. Bei 
Intel wiederum findet man in Speicheranbindungen auch schon mal mit 192 
Bits einen eher ungewöhnlichen Faktor 3 drin, während ältere 
Pentium-4-Systeme mit 16-Bit Speicheranbindung leben konnten.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

der 8051 ist das beste Beispiel dafür, dass getrennte Busse keineswegs 
ein Merkmal der Harvard-Architektur sind, denn Daten- und Adressbus sind 
nur einmal vorhanden - der Zugriff auf Programmbefehle erfolgt mit PSEN 
als Read-Signal, der Zugriff auf Daten dagegen mit RD und WR, aber über 
denselben Bus mit 16 Adressen und 8 Datenleitungen. Demzufolge kann der 
Programm-Adressraum 64k 0000 - FFFF umfassen und der Daten-Adressraum 
auch, und das gleichzeitig. Was dabei ROM und was RAM ist, ist zunächst 
mal völlig gleichgültig. Ein 8080/Z80 addressiert über den Bus auch 64k, 
aber Programm und Daten liegen beide im Raum 0000 - FFFF. Er hat also 
nur 1 x 64k Adressraum.

Das hat Konsequenzen: z.B. kann man bei Harvard nicht einfach auf eine 
Tabelle im Programm-ROM zugreifen, weil diese ja im Programmbereich 
liegt. Bei den meisten H-Prozessoren gibt es aber zumindest einen 
Spezialbefehl, um doch auf Daten im Programmbereich zugreifen zu können, 
die Einschränkung wäre in der Praxis kaum tragbar. Andrerseits kann 
Programmcode im Datenbereich, z.B. aber nicht notwendigerweise RAM, 
nicht angesprungen und ausgeführt werden.

Was noch garnicht angesprochen wurde: der Grund für viele 
H-Architekturen ist, dass Programmcode und Daten nicht die gleiche 
Breite haben, z.B. ist bei vielen PICs der Programmbereich 12 bit breit, 
der Datenbereich dagegen 8. Logischerweise ist also kein gemeinsamer 
Speicherbereich möglich, die meisten solchen Prozessoren haben heute nur 
internen Programmspeicher und den in passender Breite.

Beim 8051 mit 8bit für beides kann man die Adressräume vereinen, indem 
man extern PSEN und RD verknüpft. Ich habe so einen 
Harvard-v.Neumann-Umschalter bei mir bei allen 8051 eingebaut. Dann hat 
man zwar auch nur noch 1 x 64k, ist aber praktisch zum Testen von 
Programmen.

Gruss Reinhard

von (prx) A. K. (prx)


Lesenswert?

Yep. Es gab durchaus Systeme, bei denen sich zur Laufzeit aussuchen 
konnte, ob man mit getrennten oder gemeinsamen Adressräumen für Code und 
Daten arbeitet. Bei manchen PDP-11 beispielsweise. 64KB für beides oder 
64KB Code und 64KB Daten. Physikalisch war's der gleiche Speicher, aber 
die MMU konnte differenzieren. Da wird dann auch das Kriterium 
"Adressraum" etwas schwierig zu handhaben.

von Jobst M. (jobstens-de)


Lesenswert?

Reinhard Kern schrieb:
> der 8051 ist das beste Beispiel dafür, dass getrennte Busse keineswegs
> ein Merkmal der Harvard-Architektur sind, denn Daten- und Adressbus sind
> nur einmal vorhanden

Ich denke, solange es sich nicht um eine reine Harvard oder v.Neumann 
Architektur handelt, kann man beliebig darüber streiten, was es nun ist. 
Denn dann hat es immer von beidem etwas.

Da kann die Hardware nach v.N. aussehen, trotzdem hat man ein Harvard 
Programmiermodell - oder umgekehrt.

Gerade der 8051 ist ein Paradebeispiel dafür, beides nicht so richtig 
sein zu wollen. Ich kann ihn als Harvard (wie es eigentlich gedacht ist) 
oder auch als v.N. aufbauen. Baue ich ihn in v.N. auf, habe ich im 
Prozessor natürlich immernoch das Harvard Speichermodell. Kann dann aber 
aus den 'unterschiedlichen' Bereichen die selben Daten lesen. Die 
Zugriffsart ist also egal geworden, ich bestimme nur noch durch die 
Adresse, worauf ich zugreife. Also ist er nun doch v.N., obwohl ich die 
CPU ja gar nicht geändert habe ...


Ich denke auch, daß 'wir' eigentlich alle wissen, wie man dies 
unterscheidet - auch wenn wir dies an verschiedenen Dingen festmachen.

Viel wichtiger ist es mir, daß wir dem TO klar machen, wie das läuft.



Ich versuche es mal so zu erklären:

v. Neumann:
Stell Dir mal ein Lager vor, bei dem sich an einer langen Wand ein Regal 
befindet. Die einzelnen Fächer dieses Lagers können entweder Anweisungen 
(Bauanleitungen, Kochrezepte, etc. = Befehle) oder das dafür benötigte 
Material (=Daten) beinhalten.
Wenn Dir nun jemand den Auftrag gibt, an Lagerfach 1846 zu gehen und die 
darin liegenden Anweisungen zu befolgen, steht in dieser Anweisung, das 
Du 4x 2361, 7x 115 und 1x 1139 benötigst. Du gehst zu diesen Fächern und 
holst das Material heraus.

Sollte sich in 1139 auch eine Anweisung befinden, dann rührst Du sie mit 
unter die 4 Möhren und die 7 Kartoffeln.
Die Anweisung sagt nämlich, daß die da mit rein soll. (Wurde ja 
eindeutig mit der Adresse angegeben)


Harvard:
Du hast zwei Lager. Eins für Anweisungen und eins für Material. Wenn Du 
hier den Auftrag bekommst, die Anweisung 1846 zu befolgen, gehst Du 
natürlich zuerst in das Lager mit Anweisungen, holst diese Anweisung und 
gehst damit in das andere Lager, um dort das benötigte Material zu 
holen.

Das heißt Du unterscheidest in Anweisung (=1. Lager) und Material (= 2. 
Lager). Es kann also durchaus passieren, daß in der Anweisung 1846 
steht, daß Material 1846 mit hinein soll. 1846 ist dann aber aus dem 
anderen Lager zu holen und ist z.B. eine Erbse.


Du kannst nun auch beide Regale (aber getrennt) in einen Raum stellen 
und dann von von Neumann reden oder bei dem oberen Beispiel die Fächer 
in einen anderen Raum packen, die Material enthalten, jedoch die 
Nummerierung beibehalten und es Harvard nennen - aber das ist nicht mehr 
eindeutig.


Hoffe zum Verständniss beigetragen zu haben.


Gruß

Jobst

von Bernhard Klahf (Gast)


Lesenswert?

@ Jobst und alle die mir hier sehr sehr vieles klar gemacht haben ein 
herzliches Dankeschön.

Jobst M. schrieb:
> Hoffe zum Verständniss beigetragen zu haben.

Das trifft auf alle fälle zu, das Prinzip verstehe ich jetzt.

Viel aufregender waren die Diskussionen und die Frage was genau es jetzt 
unterscheidet. Ich bin auch eher dafür:

>ass getrennte Busse keineswegs
>ein Merkmal der Harvard-Architektur sind, denn Daten- und Adressbus sind
>nur einmal vorhanden - der Zugriff auf Programmbefehle erfolgt mit PSEN
>als Read-Signal, der Zugriff auf Daten dagegen mit RD und WR, aber über
>denselben Bus mit 16 Adressen und 8 Datenleitungen.

es aber über die Adressräume zu definieren ist auch nicht ganz falsch 
wenn ich so überlege.

Naja wie auch immer, ich habe viel aus der Diskussion mitgenommen, 
vorallem diese eine Problematik.

Gruß Berni

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.