Forum: Mikrocontroller und Digitale Elektronik Befehlabarbeitungszeit vom PIC32


von Mirko G. (Gast)


Lesenswert?

Hallo,
ich kämpfe mich mal wieder durch die Microchip-Dokumentation vom PIC32 
und suche die Zeit, die benötigt wird, um z.B. ein NOP (in Assembler) 
abzuarbeiten. Wer weiß, wo ich diese Angabe finde und wie lang diese 
Zeit bei einem z.B. 80MHz-Takt ist?

Gruß Mirko

von Michael K. (Gast)


Lesenswert?

Hallo,

ich bin in der Materie noch nicht so drin, aber aus (vieeel) früheren 
Assembler-Versuchen meine ich mich zu erinnern, daß ein NOP einen Takt 
lang nichts tut.

Wenn das Ding nun 80 MHz hat sind das 80 Millionen Takte pro Sekunde. 
Ein NOP, wenn es tatsächlich einen Takt lang nichts tut, vertrödelt also 
eine achtzig-millionstel Sekunde :)

42m

von Thomas (Gast)


Lesenswert?

Ich glaube bei den alten PICs braucht ein Befehl 4 Taktzyklen. Also 
4/(80e6).

von (prx) A. K. (prx)


Lesenswert?

Mirko G. schrieb:

> ich kämpfe mich mal wieder durch die Microchip-Dokumentation vom PIC32
> und suche die Zeit, die benötigt wird, um z.B. ein NOP (in Assembler)
> abzuarbeiten. Wer weiß, wo ich diese Angabe finde und wie lang diese
> Zeit bei einem z.B. 80MHz-Takt ist?

Microchip hat den Core nicht erfunden sondern eingekauft. Kann also 
sein, dass diese Information nicht in der Controller-Dokumentation zu 
finden ist, sondern in einer separaten Referenz des Cores. Die bei MIPS 
zu suchen wäre, aber vielleicht von Microchip auch mehr oder weniger 
angepasst durchgereicht wird.

von Der Michel (Gast)


Lesenswert?

Verrät dir das der Simulator in der Entwicklungsumgebung nicht?

von (prx) A. K. (prx)


Lesenswert?


von R.S. (Gast)


Lesenswert?

Hallo,

ich musste mich auch mal kurz mit diesem Thema beschäftigen. Nach meiner 
Erfahrung kann nicht 100% bestimmt vorrausgesagt werden, wie viel Zyklen 
ein Assemblerbefehl beansprucht.

Google mal nach "SystemConfigPerformance()" und schau dir das hier an:

http://www.microchip.com/forums/m404723-print.aspx

Genau verstanden was da passiert habe ich nicht, vielleicht trägt diese 
Diskussion ja zur Aufklärung bei.

P.s. Simulator und Demo-Board (Explorer 16) ergaben bei mir 
unterschiedliche Laufzeiten.

von Loonix (Gast)


Lesenswert?

Thomas schrieb:
> Ich glaube bei den alten PICs braucht ein Befehl 4 Taktzyklen. Also
> 4/(80e6).

Und das ist WIE VIEL wert im Bezug auf PIC32?

von (prx) A. K. (prx)


Lesenswert?

Loonix schrieb:

> Und das ist WIE VIEL wert im Bezug auf PIC32?

Genau 0.25 beim NOP. ;-)

von Loonix (Gast)


Lesenswert?

A. K. schrieb:
> Genau 0.25 beim NOP. ;-)

YMMD

von ich (Gast)


Lesenswert?

Thomas schrieb:
> Ich glaube bei den alten PICs braucht ein Befehl 4 Taktzyklen. Also
> 4/(80e6).

der PIC32 ist aber nicht alt. Soweit ich weiß, haben die dsPICs diesen 
Teiler nicht, warum sollten dann die PIC32 einen haben. Im Schaltbild 
vom Oscillator ist jedenfalls kein fester Teiler eingezeichnet, daher 
hätte ich gesagt, ein Takt-Zyklus = 12,5ns

von Stefen (Gast)


Lesenswert?

Der PIC32 hat eine 5 Stufige Pipline,ich denke wenn keine Sprünge da 
sind dann fosc = fcycle! also die Ausführungszeit auch mit 80MHz.

von Loonix (Gast)


Lesenswert?

ich schrieb:
> Soweit ich weiß, haben die dsPICs diesen
> Teiler nicht

Die teilen den Takt im Gegensatz zum PIC32 aber immer noch durch 2.

von Loonix (Gast)


Lesenswert?

Loonix schrieb:
> Die teilen den Takt im Gegensatz zum PIC32 aber immer noch durch 2.

Sorry für die ungelenke Ausdrucksweise. Ich meinte, ein dsPIC braucht 
immer noch zwei Taktzyklen um eine Instruktion auszuführen.

von (prx) A. K. (prx)


Lesenswert?

Loonix schrieb:

> Sorry für die ungelenke Ausdrucksweise. Ich meinte, ein dsPIC braucht
> immer noch zwei Taktzyklen um eine Instruktion auszuführen.

Nur die PIC24F. Die dsPIC30/33 und PIC24H nicht.

von (prx) A. K. (prx)


Lesenswert?

Stefen schrieb:

> Der PIC32 hat eine 5 Stufige Pipline,ich denke wenn keine Sprünge da
> sind dann fosc = fcycle! also die Ausführungszeit auch mit 80MHz.

Bischen komplizierter wirds schon noch, da Abhängigkeiten zwischen 
verschiedenen Stufen der Pipeline auftreten können, z.B. wenn ein 
ALU-Ergebnis als Adresse des darauf folgenden Lade/Speicherbefehls 
verwendet wird. Auch kann die Laufzeit von Lade/Speicherbefehlen 
abhängig von der Adresse sein, diese Zeit sich aber anderseits in davon 
unabhängigen Folgebefehlen verstecken.

Die Aussage oben, dass es mit einfachem Taktzählen nicht getan ist 
stimmt durchaus. Ich würde vom Versuch abraten, mit Prozessoren dieser 
Klasse unbedingt ein taktgenaues Befehlstiming hinbekommen zu wollen.

von Master S. (snowman)


Lesenswert?

PIC10..18: Fcy = Fosc/4
PIC24F/H, dsPIC: Fcy = Fosc/2
PIC32: Fcy = Fosc (pipeline: siehe beitrag von A.K.)

von ich (Gast)


Lesenswert?

naja ok... stimmt.. aber bei vielen pic18f und auch bei den dspic33 kann 
man vorher per PLL um das 2 bzw. auch um das 4 fache erhöhen.

von Loonix (Gast)


Lesenswert?

A. K. schrieb:
> Nur die PIC24F. Die dsPIC30/33 und PIC24H nicht.

Bist du dir sicher? Ich habe seit gut 2 Jahren keinen dsPIC mehr 
benutzt, glaube aber mich erinnern zu können dass Fcy = Fosc/2

Master Snowman schrieb:
> PIC24F/H, dsPIC: Fcy = Fosc/2

Wer hat jetzt recht? Werd doch nochmal in die Datenblätter schauen.

von ich (Gast)


Lesenswert?

Loonix schrieb:
> Master Snowman schrieb:
>> PIC24F/H, dsPIC: Fcy = Fosc/2
>
> Wer hat jetzt recht? Werd doch nochmal in die Datenblätter schauen.

http://ww1.microchip.com/downloads/en/DeviceDoc/70186D.pdf

Ist noch ein "durch 2" Teiler noch vor (siehe Seite 2). Doch Fcy ist 
Fosc/2... Fosc ist aber nicht zwingend die Frequenz vom Oscillator, ob 
intern oder extern.

von (prx) A. K. (prx)


Lesenswert?

Loonix schrieb:

> Bist du dir sicher?

Nö, ist falsch.

von Arc N. (arc)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Immerhin, das oben erwähnte Problem mancher Pipelines, nämlich die 
Bremse zwischen ALU-Ergebnis und Adressrechnung im Folgebefehl, die hat 
MIPS offenbar vermieden. Macht es ein bischen einfacher.

von Master S. (snowman)


Lesenswert?

> Ist noch ein "durch 2" Teiler noch vor (siehe Seite 2).
du meinst wohl seite 7-19

von ich (Gast)


Lesenswert?

Master Snowman schrieb:
>> Ist noch ein "durch 2" Teiler noch vor (siehe Seite 2).
> du meinst wohl seite 7-19

ne.. 7-2.. In der Zeichnung auf der rechten Seite ist Fosc. Dann geht 
die "Leitung" in eine Box "/2" und dann nach Fp, über den Teiler dann 
auf Fcy.. Da sieht man immer gut, wie was zusammenhängt. Und auch wenn 
da der Takt noch durch 2 geteilt wird, kann man ihn vorher per PLL 
erhöhen und somit kann man mit einem 40MHz Quarz auch Fcy=40MHz haben.

Doch beim PIC32 bin ich mir nicht sicher, doch wenn ich das jetzt 
richtig verstanden habe, kann die "Fcy" schwanken bzw variieren.

von nolte84 (Gast)


Lesenswert?

Master Snowman schrieb:
> PIC10..18: Fcy = Fosc/4
> PIC24F/H, dsPIC: Fcy = Fosc/2
> PIC32: Fcy = Fosc (pipeline: siehe beitrag von A.K.)

dsPIC:
The system clock source is divided by four to produce the internal 
instruction cycle clock, FCY.

von morph1 (Gast)


Lesenswert?

nolte84 schrieb:
> dsPIC:
> The system clock source is divided by four to produce the internal
> instruction cycle clock, FCY.

wrong

von nolte (Gast)


Lesenswert?

Section 07. Oscillator - dsPIC30F FRM

right :)

von bingo (Gast)


Lesenswert?

"probieren geht über studieren", also:

mach eine Schleife und toggle einen Pin, die Zeiten kannst Du mit einem 
Oszi oder LA messen. Dann mach einen oder mehrere NOPs in die Schleife 
und miss wieder ...

von (prx) A. K. (prx)


Lesenswert?

... und dann verschiebe den gesamten Code der Schleife 1-3 Worte nach 
hinten und miss nochmal. Vielleicht ändert sich nichts, vielleicht doch, 
je nach exaktem Aufbau von Instruction Fetch Puffern und dem 
Flash-Interface.

von bingo (Gast)


Lesenswert?

Das Verschieben kann natürlich auch ändern, wichtig ist aber der 
Unterschied mit NOP und ohne NOP an der gleichen Stelle im Programm. Am 
besten in Assembler.

von morph1 (Gast)


Lesenswert?

Aja, erst global postulieren und dann mit Spezialitäten daherkommen... 
In diesem Sinne:

still wrong:
Section 07. Oscillator - dsPIC33F FRM
Figure 7-2

regarding the topic

FCY dsPIC30 FCLK/4
FCY dsPIC33 FCLK/2 (also for PIC24F/H/EP)

von nolte (Gast)


Lesenswert?

morph1 schrieb:
> Aja, erst global postulieren und dann mit Spezialitäten daherkommen...
> In diesem Sinne:
>
> still wrong:
> Section 07. Oscillator - dsPIC33F FRM
> Figure 7-2
>
> regarding the topic
>
> FCY dsPIC30 FCLK/4
> FCY dsPIC33 FCLK/2 (also for PIC24F/H/EP)

... dann ist's wohl halfwrong / halfright. Der unterschied zwischen den 
dsPICs war mir nicht bekannt, habe nur mit den 30'ern zu tun gehabt. 
Danke.

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.