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
>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.
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.
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
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
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.
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
>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.
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
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.
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.
>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.
>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).
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
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
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.
@ 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.
>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.
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.
>>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?
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.
@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.
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.
>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.
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.
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.
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?
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.
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.
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
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...
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
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.
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.
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...
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).
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.
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.
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
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.
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
@ 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