Forum: Mikrocontroller und Digitale Elektronik Atmel AVR: Architektur und interner Adress-/Datenbus sind mir unklar!


von Tino M. (Gast)


Lesenswert?

Hallo liebe Gemeinde,

ich muss mich für ein Referat (Allgemeines über Atmel 8bit-AVR's) 
vorbereiten und stöberte bereits im Netz und in diversen Büchern.

Über eine Sache bin ich aber gestolpert:
Ich behandle nur die 8bit-AVR's. Zur Architektur habe ich gefunden, dass 
diese Chips laut Wikipedia die Harvard-Architektur benutzen, sprich 
getrennter Befehls- und Datenspeicher. Soweit ist es noch überschaubar, 
aber wenn ich mir die Speicheradressen durchsehe, komme ich 
durcheinandner.
Bei einem Atmega8 ist der Adressbus vom FLASH 16bit breit, Register, 
I/O, SRAM und EEPROM jedoch 8bit breit. Warum ist der Adressbus vom 
FLASH 16bit breit? Es handelt sich doch um einen 8-Biter!
Auf einer anderen Seite im Netz habe ich gelesen, dass der interne 
Adressbus vom SRAM zum Program Counter, FLASH Program Memory, 
Instruction Register und Instruction Decoder in 16bit ausgeführt ist, 
obwohl das General Purpose Register doch nur 8bit breit ist.
Direkte Adressierung wird in 8bit-Breite vorgenommen.
Oh man, mir wird schwindelig!

Ist das soweit richtig?
Kann mir bitte mal jemand trotzdem genauer erklären, welcher Adressbus 
16bit und welcher 8bit breit ist und warum das so gemacht wird?

In diesem Zuge frage ich mich auch, wie groß das größte externe EEPROM 
bei einem ATmega8 sein kann. Eigentlich kommt es doch nur drauf an, 
wieviele Pins man für den Daten- und Adressbus zur Verfügung hat, oder?
Nehmen wir mal an, ich habe 20 Pins frei (Steuerleitungen 
vernachlässigt).
Der Datenbus ist 8bit breit, somit habe ich nur noch 12 Pins für den 
Adressbus zur Verfügung. Demnach kann ich ein EEPROM mit maximal 
(2^12)x8, also 4k x 8bit anschließen, richtig?

Danke, es grüßt der Tino!

von (prx) A. K. (prx)


Lesenswert?

Tino M. schrieb:

> Bei einem Atmega8 ist der Adressbus vom FLASH 16bit breit, Register,
> I/O, SRAM und EEPROM jedoch 8bit breit. Warum ist der Adressbus vom
> FLASH 16bit breit? Es handelt sich doch um einen 8-Biter!

Frag dich mal, was für Inhalte der Adressbus transportiert und wieviele 
Bits man dafür benötigt. Tip: Beim Mega8 sind es mehr als 8 und weniger 
als 16.

> Instruction Register und Instruction Decoder in 16bit ausgeführt ist,
> obwohl das General Purpose Register doch nur 8bit breit ist.

Und schau man in die Befehlssatzbeschreibung, wieviele Bits eines oder 
mehrerer Register bei indirekter Adressierung über Register verwendet 
werden (also Adressierung über die X/Y/Z-Register).

> Ist das soweit richtig?

Vom Verständnis her kein bischen. Du scheinst noch keinerlei Vorstellung 
davon zu haben, was Adressen und was Daten sind.

> In diesem Zuge frage ich mich auch, wie groß das größte externe EEPROM
> bei einem ATmega8 sein kann.

Unbegrenzt, wenn man es seriell anschliesst ;-).

von Tino M. (Gast)


Lesenswert?

Toll, A. Ak.! :(

A. K. schrieb:
>> Ist das soweit richtig?
> Vom Verständnis her kein bischen. Du scheinst noch keinerlei Vorstellung
> davon zu haben, was Adressen und was Daten sind.

Sicherlich ist bekannt, was Adressen und Daten sind.
Eine Adresse gibt an, wo die Daten liegen.
Die Daten findet man an der Adress-Stelle.
Jede Adresse kann doch beim ATmega8 Bit aufnehmen?!
Wenn man nun ein 16bit-Datum speichern möchte, muss ich dieses Datum in 
ein LSB und MSB aufteilen und entsprechend an zwei Adressen speichern.

Wenn ich bereits die Antwort auf meine Fragen wüsste, würde ich wohl 
kaum hier im Forum fragen, oder?
Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell 
anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack! 
:(

von horst (Gast)


Lesenswert?

Tino M. schrieb:
> Jede Adresse kann doch beim ATmega8 Bit aufnehmen?!

Vielleicht verstehst du es ja so:
Jede Speicherstelle kann 8 Bit an Daten aufnehmen, wieviele 
Speicherstellen angesprochen werden können hängt davon ab, wieviele Bit 
die Adresse aufnehmen kann.


Tino M. schrieb:
> Sicherlich ist bekannt, was Adressen und Daten sind.

Die Definition gehört zu haben bedeutet nicht, sie verstanden zu haben.

Tino M. schrieb:
> Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell
> anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack!
> :(

Auf die Schnelle habe ich Speicher in DIL32 gefunden, die belegen rund 
620mm².

von Uwe .. (uwegw)


Lesenswert?

Aufgrund der Harvard-Architektur muss man erst mal zwischen 
Programmspeicher (Flash) und Datenspeicher (SRAM) unterscheiden.

Das Flash hat eine Datenbusbreite von 16bit, da die Befehle 16bit breit 
sind (in 8bit würde man nicht genügend unterbringen können, da auch 
teilweise die Operanden mitcodiert werden).
Die Adressbusbreite richtet sich nach der Speichergröße.

Das SRAM hat 8bit Datenbusbreite (und hierüber erfolgt die Einstufung 
als 8bit-System!), die Adressbusbreite richtet sich auch hier nach der 
Speichergröße.

von Karl H. (kbuchegg)


Lesenswert?

Tino M. schrieb:

> Sicherlich ist bekannt, was Adressen und Daten sind.
> Eine Adresse gibt an, wo die Daten liegen.

Und, was hat das jetzt damit zu tun, dass der AVR ein 8-Bit Prozessor 
ist?

In ein Einfamilienhaus passen maximal 4 Leute.

Aber in einer Strasse können Millionen von Einfamilienhäuser stehen. 
Jedes mit seiner eigenen Adresse, die natürlich größer als 4 sein kann.

> Die Daten findet man an der Adress-Stelle.
> Jede Adresse kann doch beim ATmega8 Bit aufnehmen?!

Nö

Der AVR kann 8-Bit an Daten in einem Rutsch verarbeiten, wobei es ein 
paar Ausnahmen gibt, aber im wesentlichen sind die Daten auf jeweils 8 
Bit limitiert.
Aber das heißt ja nicht, dass er sich diese 8_bit nicht auch aus einem 
Terrabyte großen Speicher holen kann, wenn die Adressregister nur groß 
genug sind.

von Lehrmann M. (ubimbo)


Lesenswert?

Tino M. schrieb:
> Wenn ich bereits die Antwort auf meine Fragen wüsste, würde ich wohl
> kaum hier im Forum fragen, oder?

Man könnte ja auch Google benutzen ...

> Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell
> anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack!
> :(

Ja du ganz ehrlich - so ist es aber. Man kann alles anschließen soweit 
eine Schnittstelle vorhanden ist.

Ich würde hier nicht anfangen den großen Macker zu markieren. Da bist du 
nämlich hier definitiv falsch. Und schon garnicht wenn ich keine Ahnung 
habe (wie jeder Anfänger). Ich warne dich nur - du wirst hier gnadenlos 
zerlegt ... Hier im Forum ist dein 'Status' wichtig. Glaube mir als 
Anfänger hat man hier einen ziemlich schlechten. Lass dich nicht ärgern 
aber mach bloss keinen auf dicke Hose. Das könnnen wir hier nämlich 
garnicht haben. Und bitte unterlasse wüste Beschimpfungen (vielleicht 
mir) und anderen gegenüber. Gleiches gilt für süffisante Kommentare 
(z.B. 'Klugscheißer' und sowas).

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Hi,

> Warum ist der Adressbus vom
> FLASH 16bit breit? Es handelt sich doch um einen 8-Biter!

Also ...

Die Breite des Adressbus gibt an, auf wie viele Adressen die CPU 
zugreifen kann.
Die Breite des Datenbus gibt an, auf wie breit die Daten sein können, 
mit der die CPU arbeiten kann.

Vorab:
2^8  = 256
2^16 = 65535

Beim AVR sind die Daten, die in der CPU verarbeitet werden können, 8 Bit 
breit (Wie das für Adresspointer aussieht, weiss ich gerad nicht, glaub 
der berechnet L, H getrennt). D.h., es wird mit 8Bit breiten Daten 
gerechnet.

Der Adressbus beim selbigen ist etwas grösser, nämlich 16Bit. D.h., der 
AVR ist in der Lage, 64k Adressen zu bearbeiten. Soll heissen, der AVR 
kann von 64k möglichen Adressen jeweils 8Bit Daten holen oder 
wegschreiben.


---
Das Dingen ist Havard Architektur. Das wiederum bedeutet, dass die CPU 
zwei Interfaces hat, jeweils aus Daten- und Adressbus bestehend:
- Programmspeicher (Flash)
- Datenspeicher & Peripherals

Er kann diese "gleichzeitig" bearbeiten, es treten keine 'Stalls' auf, 
wenn z.B. Mem geschrieben (Write Back) und der nä. Befehl (Instruction 
Fetch) geholt werden soll.
Das ist aber auch der Grund, warum Daten, die im Flash abgelegt wurden, 
mit PROGMEM gelesen werden müssen.


So, nun hab ich mich auf die Schnelle hoffentlich nirgends vertan :-)


VG,
/th.

von (prx) A. K. (prx)


Lesenswert?

Tino M. schrieb:

> Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell
> anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack!

Die weitaus meisten an Mikrocontroller extern angeschlossenen EEPROMs 
sind tatsächlich serielle Typen. Parallelen EEPROMs begegnet man fast 
nur noch in Altlasten und in der Lehre.

Wenn dir mein Stil, Leuten bei solchen Fragen eher beim Selberdenken zu 
helfen, indem die Richtung aber nicht das fertige Ergebnis geliefert 
wird, dann ignoriere es eben. Gleich rumzukotzen, wenn man auf die Frage 
keinen direkt fürs Referat verwendbaren Text geliefert bekommt, geht 
nämlich wiederum mir auf den Sack.

von Tino M. (Gast)


Lesenswert?

@Uwe...
Danke für die Erklärung, die ist schlüssig.
Neu ist für mich, dass die Einstufung der Systeme vom SRAM abhängig ist.

@Karl heinz Buchegger
Wenn der AVR auf eine Adresse zugreifen kann, kann dieser die 8 Bit in 
einem Rutsch dort rausholen, soweit richtig?

@Lehrmann Michael
Tino M. schrieb:
>> Wenn ich bereits die Antwort auf meine Fragen wüsste, würde ich wohl
>> kaum hier im Forum fragen, oder?
Lehrmann Michael schrieb:
> Man könnte ja auch Google benutzen ...
1. Wenn man weiß, WONACH man suchen muss, ist das nicht schwierig.
Wie würdest du nach Warentrenner suchen, wenn du nicht wüsstest, dass 
die so heißen? Mit einer Umschreibung, die nicht jeder verstehen 
muss/wird.
2. Wenn ich den großen Macker markieren würde, würde ich schreiben, dass 
ich alles weiß und eure Antworten falsch sind.
Das habe ich nie behauptet, aber ein Anfängerstatus ist gefühlsmäßig mit 
einem gesteinigt werden zu vergleichen.
Ich glaube, viele Profis lesen sich die Fragetexte nicht durch und 
antworten einfach drauf los, so dass sich ein Anfänger in die Enge 
getrieben fühlt.
Das ist nicht Sinn eines Forums.
Anfänger haben es nicht leicht mit der Begriff-Findung. Einen Begriff, 
den man nicht weiß, kann man wunderbar um/beschreiben und jeder, der die 
Beschreibung liest, interpretiert etwas anderes heraus.
Das ist nun mal so, wenn man Anfänger mit Profis vergleicht.
Vielleicht sollten sich Profis zurückerinnern, dass diese auch mit 
Problemen angefangen haben. Wer etwas anderes behauptet, der lügt.
Achja, Artikel 5 GG ist überall vertreten. Ich habe niemanden direkt 
angesprochen, sondern meine Meinung geäußert!

@Random...
Das klingt interessant, was du beschreibst!
Durch die Havard-Architektur ist es also möglich gleichzeitig zu lesen 
und zu schreiben?!

@A. K.
A. K. schrieb:
> Gleich rumzukotzen, wenn man auf die Frage
> keinen direkt fürs Referat verwendbaren Text
> geliefert bekommt...
Darum geht es doch nicht!
Wenn ich noch nichts vorbereitet hätte, hätte ich im Fragepost nur 
geschrieben: "Hallo Leute, erklärt mir doch mal, wie die Architektur bei 
einem AVR ist. Ich habe nämlich keine Ahnung, ob die Dinger 8, 16 oder 
32-Biter sind"!.
Sowas ist doch nicht im Sinne eines Forums, das ist klar.
Da ich schon etwas ausgearbeitet habe und mir ein paar Sachen unklar 
sind, habe ich gedacht, ich frage hier mal in die Runde und gebe meinen 
Kenntnisstand mit an.
Anscheinend darf man hier seinen Kenntnisstand  nicht angeben und wenn 
man was fragt, sollte man es so formulieren: "Hey Leute, ich bin 
Profi-Programmierer, bin seit 34 Stunden auf den Beinen, halte mich mit 
5 Liter Kaffee wach und irgendwie habe ich nun ein Brett vorm Kopf. Ich 
kann mich an die ADC-Routinen nicht mehr erinnern, kann mir einer ein 
Programm in C schreiben?! Danke!". lach

@ll
Ich möchte doch nur die Unklarheit beseitigen, und ohne eure Hilfe geht 
es nicht.
Dieses Forum "lebt" doch von Anfängern und Profis gleichermaßen!

von Karl H. (kbuchegg)


Lesenswert?

Tino M. schrieb:
> @Uwe...
> Danke für die Erklärung, die ist schlüssig.
> Neu ist für mich, dass die Einstufung der Systeme vom SRAM abhängig ist.


Du legst hier etwas zuviel Gewicht darauf.

Für die Einstufung ist in erster Linie entscheidend, mit welcher 
Datenbreite in der CPU gerechnet werden kann, wie breit die Register in 
der CPU sind. Dort entscheidet sich die Einstufung.

Der Transfer zum Speicher, ob der jetzt auf einem 8-Bit oder einem 
16-Bit Datenbus passiert, ist normalerweise nicht das entscheidende 
Kriterium.

Also: Kann die CPU 2 Zahlenwerte addieren, und zwar in einem Rutsch 
addieren, wenn beide Werte 16 Bit breit sind, oder muss sie das auf 2 
mal machen, weil es nur 8 Bit breite Register bzw. Additionsbefehle die 
nur 8 Bit bearbeiten gibt.

> @Karl heinz Buchegger
> Wenn der AVR auf eine Adresse zugreifen kann, kann dieser die 8 Bit in
> einem Rutsch dort rausholen, soweit richtig?

Ja.
Aber wie gesagt: Das ist meistens nicht das entscheidende Kriterium für 
die Einstufung einer CPU. Speicher-Bottlenecks kann man mit Caches 
entschärfen. Berechnungen auf mehrmals, wegen nicht ausreichender 
Reigsterbreite aber nicht.

Wobei es nicht gilt, wenn die CPU ein paar Spezialbefehle hat, die mit 
höheren Bitzahlen umgehen können. Entscheidend ist, wenn man sich den 
Befehlssatz ansieht, wie es mit der Mehrzahl der Befehle aussieht.

Und bei einem AVR kann die Mehrzahl der Befehle eben nur 8 Bit Einheiten 
in einem Rutsch bearbeiten. Für mehr Bits sind mehrere Befehle nötig.

von Loonix (Gast)


Lesenswert?

Tino M. schrieb:
> Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell
> anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack!
> :(

Es gibt keine dummen Fragen, nur dumme Antworten. Du hast im Gegenzug 
nun auch davon Eine abgeliefert - ihr seid quitt ;)

A. K. schrieb:
> Gleich rumzukotzen, wenn man auf die Frage
> keinen direkt fürs Referat verwendbaren Text geliefert bekommt, geht
> nämlich wiederum mir auf den Sack.

Full ACK!

von Karl H. (kbuchegg)


Lesenswert?

Tino M. schrieb:

> @Random...
> Das klingt interessant, was du beschreibst!
> Durch die Havard-Architektur ist es also möglich gleichzeitig zu lesen
> und zu schreiben?!

Nicht in den gleichen Speicher, das sollte klar sein.
Aber Flash und SRAM parallel würde gehen. Ob man das auch macht ist eine 
andere Geschichte.

Denn deswegen macht man keine Harvard Architektur.
Man macht sie um eine saubere Trennung zwischen Daten und Programm zu 
haben. Damit ein Programm sich nicht so ohne weiteres selbst im 
Programmspeicher rumpfuschen kann.

von Karl H. (kbuchegg)


Lesenswert?

> In diesem Zuge frage ich mich auch, wie groß das größte externe
> EEPROM bei einem ATmega8 sein kann. Eigentlich kommt es doch nur
> drauf an, wieviele Pins man für den Daten- und Adressbus zur
> Verfügung hat, oder?
> Nehmen wir mal an, ich habe 20 Pins frei (Steuerleitungen
> vernachlässigt).
> Der Datenbus ist 8bit breit, somit habe ich nur noch 12 Pins
> für den Adressbus zur Verfügung. Demnach kann ich ein
> EEPROM mit maximal (2^12)x8, also 4k x 8bit anschließen,
> richtig?

Nein falsch.
Du kannst ja zb auch einen Pin spendieren, um der externen Hardware 
anzuzeigen: jetzt liegt der High-Anteil von der Adresse auf den 11 
Adressleitungen, bzw. jetzt der Low-Anteil.
Du machst also ein Multiplexing auf dem Adressbus.
Dadurch hast du 22 Adressleitungen bekommen und kannst etwas über 4MByte 
adressieren.

Und ja. Sowas hat man schon gemacht.
Es gibt auch noch andere Mischformen: Wo sich Adress und Datenbus die 
gleichen Leitungen teilen.

Erlaubt ist, was gefällt und was umsetzbar ist. Alles nur eine Frage der 
Organisation.

von Karl H. (kbuchegg)


Lesenswert?

Tino M. schrieb:

> man was fragt, sollte man es so formulieren: "Hey Leute, ich bin
> Profi-Programmierer, bin seit 34 Stunden auf den Beinen, halte mich mit
> 5 Liter Kaffee wach und irgendwie habe ich nun ein Brett vorm Kopf. Ich
> kann mich an die ADC-Routinen nicht mehr erinnern, kann mir einer ein
> Programm in C schreiben?! Danke!". *lach*

Der würde aber hier was zu hören bekommen.
Ebenfalls lach

von Tino M. (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Es gibt auch noch andere Mischformen: Wo sich Adress und Datenbus die
> gleichen Leitungen teilen.
...z.B. wie beim alten 8051 mit einem externen Latch...

Noch mal eine Frage zur Harvard-Archtitektur und internen 
Adressleitungen im AVR:
Die Adressleitungen zum Programm-Code (Flash-Speicher) sind der Anzahl 
16.
Wenn ich jetzt 32 Register an die CPU hänge, wieviele Adressleitungen 
sind dort vorhanden? Auch 16? Oder kommt das auf dem Controller-Typ an?
Soweit, wie ich das verstanden habe, werden intern 16 Adressleitungen 
verwendet, weil sich Anweisungen meist nicht mit 8 Bit zufrieden geben.
Ein Register ist ein Byte groß, das ist bekannt. Aber es gibt auch 
Spezial-Register, z.B. der Program Counter, der ist nach meinen 
Erkenntnissen nämlich 16bit breit, nur wie werden diese adressiert? 8 
oder 16bit?

Und was man extern als EEPROM anschließen kann, ist mir nun auch klarer 
geworden.
Entweder man schließt etwas serielles an oder man arbeitet mit 
Adressleitungen. Diese Mischform mit dem 8051 hat mich auch 
durcheinander gebracht.

von Karl H. (kbuchegg)


Lesenswert?

Tino M. schrieb:

> Noch mal eine Frage zur Harvard-Archtitektur und internen
> Adressleitungen im AVR:
> Die Adressleitungen zum Programm-Code (Flash-Speicher) sind der Anzahl
> 16.

Da dieser AVR das Flash eingebaut hat, kann das so sein, muss aber 
nicht, wenn es nicht notendig ist, weil gar nicht soviel Speicher 
eingebaut ist. Wie genau Atmel das macht, da musst du Atmel fragen.

> Wenn ich jetzt 32 Register an die CPU hänge, wieviele Adressleitungen
> sind dort vorhanden?

Die Register SIND in der CPU. Die werden nicht drangehängt

> Soweit, wie ich das verstanden habe, werden intern 16 Adressleitungen
> verwendet, weil sich Anweisungen meist nicht mit 8 Bit zufrieden geben.
> Ein Register ist ein Byte groß, das ist bekannt. Aber es gibt auch
> Spezial-Register, z.B. der Program Counter, der ist nach meinen
> Erkenntnissen nämlich 16bit breit, nur wie werden diese adressiert? 8
> oder 16bit?

gar nicht. Die werden nicht adressiert. Zumindest nicht so, wie anderer 
Speicher adressiert wird. Die sind einfach da. Wenn ein Befehl eines 
dieser Register braucht, dann schaltet ein Transistor eines dieser 
Register auf den internen Datenbus. That's it. Mehr ist dazu nicht zu 
sagen. Jeder Befehl löst intern einfach nur Schaltvorgänge aus ohne das 
da irgendwelche Registeradressen im Spiel sind.

Alle diese Register zusammengenommen + eine Arithmetikeinheit SIND die 
CPU

von (prx) A. K. (prx)


Lesenswert?

Karl heinz Buchegger schrieb:

> gar nicht. Die werden nicht adressiert. Zumindest nicht so, wie anderer
> Speicher adressiert wird. Die sind einfach da.

Also Kuriosum sei am Rande mit dem CDP1802 von RCA ein früher 
Mikroprozessor genannt, dessen Program Counter ausnahmsweise kein 
derart implizit zugeordnetes Spezialregister war, sondern der 16 16bit 
Register hatte, von denen jedes als Program Counter verwendbar war. Es 
gab ein spezielles 4bit Register, das eines dieser 16 Register als 
aktuellen Program Counter definierte.

von Spess53 (Gast)


Lesenswert?

Hi

>Die Adressleitungen zum Programm-Code (Flash-Speicher) sind der Anzahl
>16.

Die reichen aber z.B. bei einem ATMega2560 nicht. Da bedarf es schon 17. 
Der Befehlssatz der AVRs ist auf maximal 22 Bit (4 MWord) 
Programmspeicher ausgelegt.

>Wenn ich jetzt 32 Register an die CPU hänge, wieviele Adressleitungen
>sind dort vorhanden? Auch 16?

Bei den AVRs bilden die Arbeitsregister, die IO-Register und der RAM 
praktisch einen gemeinsamen Adressraum. Die Anzahl der notwendigen 
Adressleitungen ergibt sich also aus der Obergrenze des Rams.

MfG Spess

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.