Forum: Mikrocontroller und Digitale Elektronik Wofür haben PICs Fosc/4


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich habe mich schon länger mit AVRs und PICs beschäftigt. Dabei habe ich 
mich immer wieder gefragt, wieso die PICs einen internen Takt von 1/4 
vom Quarz haben. Selbst wenn ein PLL vorhanden ist und so auf ~120MHz 
bei den 16Bit Kontrollern, werden dann nur 30MHz genutzt.
Wiso eigentlich? Für mich sieht das alles sehr Sinnfrei aus, da ja die 
AVRs auch bis 20MIPs laufen.

Besten Dank für eure Antworten
MFG
Patrick

von Egal Anders (Gast)


Lesenswert?

Vereinfacht den Read-Modify-Write Zyklus eines Maschinenbefehls. Einen 
Takt Read, einen Add, einen Flags setzen und einen Write. Die anderen 
Komponenten arbeiten dann halt mit dem Takt eines kompletten 
Maschinenbefehls.

Lässt sich natürlich auch anders lösen. Nur damals in prähistorischer 
Zeit hatten sich die Konstrukteure für diesen Weg entschieden.

von Patrick B. (p51d)


Lesenswert?

Die PICs sind dadurch aber langsamer als die AVRs oder nicht?
Wenn ich jetzt einen AVR mit 16MHz takte und einen PIC mit PLL auf 64MHz 
bringe, dann sollten die ja in etwa gleich schnell sein (klar, kommt 
noch auf den Compiler und die Verarbeitung der Befehle an)?

von rackandboneman (Gast)


Lesenswert?

Beim 8051 klassischer Bauart ist es sogar fosc/12 - dafür wurden die 
Dinger schon mit 20MHz und mehr angeboten als 5MHz für normale 
Mikroprozessoren typisch war.

Übrigens ist zB beim Z80 oder 8088 mitnichten ein Takt ein 
Maschinenzyklus. Moderne PC-CPUs arbeiten mit recht komplexen Tricks um 
am Ende scheinbar so schnell zu arbeiten (Pipelining etc....)

Bei CISC-Maschinen muss ja erstmal das ganze Addressierungsgedöns 
aufgelöst werden (beim 8051 zB besonders komplex wegen Seiteneffekten!), 
wenn man das alles in einem Takt machen wollte würde man bei einer stark 
asynchronen Architektur landen (die dann dafür einen niedrigeren 
Maximaltakt hätte). So etwas mögen VLSI-Leute wohl nicht besonders:) 
Aber komplexe Befehle hatten den Vorteil dass man weniger oft einen 
neuen Befehl aus dem Speicher holen musste, und schneller Speicher war 
damals TEUER.

AVR ist eben von vornherein so entwickelt worden dass man Befehle die 
sich nicht in einem Takt bewältigen lassen ganz einfach fortlässt und 
dafür die einzelnen Unterschritte direkt anbietet - und den Compiler den 
Rest machen lässt. RISC eben.

PICs haben dagegen eine Architektur die in der Zeit der Z80, 8088 und 
8051 entstanden ist.

von Anja (Gast)


Lesenswert?

Patrick B. schrieb:
> Die PICs sind dadurch aber langsamer als die AVRs oder nicht?
> Wenn ich jetzt einen AVR mit 16MHz takte und einen PIC mit PLL auf 64MHz
> bringe, dann sollten die ja in etwa gleich schnell sein (klar, kommt
> noch auf den Compiler und die Verarbeitung der Befehle an)?

Das kann man so nicht sagen. Das kommt auf den Konkreten Fall an.
Nehmen wir mal als Beispiel den Befehl I++; in C mit I = uint8.

Beim AVR wird dies so umgesetzt
LD   R24,I      ; 2 Takte
SUBI R24,0xFF   ; 1 Takt
ST   I,R24      ; 2 Takte

Beim PIC ist dies ein einzelner Assembler-Befehl
INCF I,F        ; 4 Takte (1 Befehlszyklus)

Bei diesem speziellen Beispiel braucht der AVR 5 Takte der PIC nur 4.

Gruß Anja

von Peter D. (peda)


Lesenswert?

rackandboneman schrieb:
> Beim 8051 klassischer Bauart ist es sogar fosc/12 - dafür wurden die
> Dinger schon mit 20MHz und mehr angeboten als 5MHz für normale
> Mikroprozessoren typisch war.

Inzwischen sind aber viele 8051 auch bei fosc/1 angekommen, z.B. Atmel 
AT89LP6440.

Aber schon 1991 hatte Dallas seinen 80C320 auf 33MHz/4 gepimpt.
Und Silabs 8051-er läuft auch schon seit vorigem Jahrhundert mit 
100MHz/1.


Peter

von Sven P. (Gast)


Lesenswert?

Anja schrieb:
> Beim AVR wird dies so umgesetzt
> LD   R24,I      ; 2 Takte
> SUBI R24,0xFF   ; 1 Takt
> ST   I,R24      ; 2 Takte
>
> Beim PIC ist dies ein einzelner Assembler-Befehl
> INCF I,F        ; 4 Takte (1 Befehlszyklus)
>
> Bei diesem speziellen Beispiel braucht der AVR 5 Takte der PIC nur 4.
Das ist so aber reine Augenwischerei. Dafür hat der AVR gleich 32 
Arbeitsregister, während man beim (alten) PIC schlimmstenfalls alles 
durch ein dämliches W-Register quetschen muss.
1
INC R16 ; 1 Takt = 1 Befehlszyklus

Dafür gibt es ja Compiler. Solange I nicht flüchtig ist (volatile), wird 
ein mäßiger Compiler das mitnichten so umsetzen, wie dir da vorschwebt. 
Lieber hält der das I in irgendeinem Arbeitsregister vor.

von rackandboneman (Gast)


Lesenswert?

@peda jepp, deswegen "klassischer Bauart". Und so einen Silabs muss ich 
mir endlich mal holen :)

von Egal Anders (Gast)


Lesenswert?

> Dafür gibt es ja Compiler.

Hay! genau das ist der Punkt!

In den 80 Jahren wurde noch alles in Assembler gemacht - der Befehlssatz 
war darauf ausgerichtet. Wer will schon in Assembler 200 Variablen in 32 
Arbeitsregistern optimieren?

Heutzutage sieht das doch ganz anders aus. Nochmal herzlichen Dank an 
die GCC Entwickler!

von MCUA (Gast)


Lesenswert?

>wieso die PICs einen internen Takt von 1/4 vom Quarz haben.
nur die alten.

>Lieber hält der das I in irgendeinem Arbeitsregister vor.
Dann geht es bei jeder CPU schnell.
Wenn aber die Var innerhalb eines grösseren Mem-bereichs liegt (weil zB 
in Register kein Platz mehr ist), dann scheiden sich die Geister.

>Bei CISC-Maschinen muss ja erstmal das ganze Addressierungsgedöns
>aufgelöst werden (beim 8051 zB besonders komplex wegen Seiteneffekten!),
>wenn man das alles in einem Takt machen wollte würde man bei einer stark
>asynchronen Architektur landen (die dann dafür einen niedrigeren
>Maximaltakt hätte)
Das war mal. Es gibt CISC's, die das 'Addressierungsgedöns' in 1..2 
Takten machen (und hohe f haben).

>Beim PIC ist dies ein einzelner Assembler-Befehl
>INCF I,F        ; 4 Takte (1 Befehlszyklus)
Gilt aber nur innerhalb des (rel kleinen) Adressierbereichs.

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.