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
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
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.
Verrät dir das der Simulator in der Entwicklungsumgebung nicht?
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.
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?
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
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.
ich schrieb: > Soweit ich weiß, haben die dsPICs diesen > Teiler nicht Die teilen den Takt im Gegensatz zum PIC32 aber immer noch durch 2.
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.
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.
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.
PIC10..18: Fcy = Fosc/4 PIC24F/H, dsPIC: Fcy = Fosc/2 PIC32: Fcy = Fosc (pipeline: siehe beitrag von A.K.)
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.
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.
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.
MIPS32 M4K Processor Core Software User’s Manual https://www.mips.com/application/login/login.dot?product_name=/auth/MD00249-2B-M4K-SUM-02.03.pdf http://hades.mech.northwestern.edu/images/c/c2/MIPS-M4K-Core.pdf
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.
> Ist noch ein "durch 2" Teiler noch vor (siehe Seite 2).
du meinst wohl seite 7-19
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.
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.
nolte84 schrieb: > dsPIC: > The system clock source is divided by four to produce the internal > instruction cycle clock, FCY. wrong
"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 ...
... 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.
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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.