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.
Tja. Schade. Wäre nett gewesen mal über was Schwierigeres zu schreiben, als über die UART Initialisierung oder den ISP-Takt.
>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.
>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"
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.
Hab mal gegoogelt und hier nen interessanten Artikel gefunden. http://infocenter.arm.com/help/index.jsp?opic=/com.arm.doc.faqs/ka3839.html
Link geht nicht, schuldigung http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3839.html
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
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.