Forum: FPGA, VHDL & Co. Custom Instruction Ausführung ist langsam


von Fox X. (mr-fox)


Lesenswert?

Hallo
Ich habe eine Custom Instruction programmiert und eingebunden,
Sie braucht lediglich 5 Takte, aber wenn ich die Zeit Messe in der Nios 
II Umgebung, braucht er 30 Takte, bis er den Befehl abgearbeitet hat.
Wo kommen die anderen 25 Takte her, er wird ja wohl nicht soviel für die 
Variablen Übergabe und Zurückgabe brauchen?

kann man das noch optimieren,
bzw. mal sehen wo er so verdammt lange braucht?

Wenn ich eine CI ausführe die nur 1 Tick benötigt, dauert es fast eben 
solang...

Quartus 2 9.0 mit sp2
Nios II 9.0
SOPC Builder 9.0
Prozessor: EP1S10F780C6

danke

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Aha und wie mißt du das?

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Haste mal ne Hardware / Software Co-Simulation mit dem Modelsim gemacht?
Da siehste das dann genau.

VG,
/th.

von Fox X. (mr-fox)


Lesenswert?

ich toggle ein ausgang und messe mit ein osci, die zeit fürs toggeln 
muss dann natürlich abgezogen werden

von Kest (Gast)


Lesenswert?

ich weis jetzt nicht, was Du genau gemacht hast, aber:

1. Für Variablen-Übergabe brauchst Du schon ein Paar Takte
2. NIOS Muss ja auch noch eigene Befehle von irgendwo holen (z.B. SDRAM)
3. Wenn Du irgendwann mal auch eine Schleife hast, musst Du das auch 
berücksichtigen

30 Takte ist zwar viel, aber wenn man genau überlegt, dann auch 
wiederrum nicht

Probier mal mit Signal Tap, da siehst Du dann sofort alles

Grüße,
Kest

von Gast1 (Gast)


Lesenswert?

Versuch doch mal das ganze mit Performance Countern zu messen, dann 
kriegst du den Overhead deiner Messung los.

von Sören (Gast)


Lesenswert?

Falls du die Geschichte in C betreibst wirst du mit dem Perfromance 
Counter ebenefalls den Overhead sehen. Wie schon Kest erwähnte passiert 
ja eigentlich viel mehr als ein einzelner Aufruf und somit sind die 
'Extra' Zyklen auch nicht weiter verwunderlich. Wenn ich mich recht 
erinnere löscht zudem ein Custom Instruction Aufruf die Pipeline des 
Prozessors, eine Sache an die man Denken sollte, falls vorhanden. 
Schreibe dein Testprogramm in Assembler, nutze den Performance Counter 
und strukturiere den Code so, dass nichts böses passiert ;-) Gruss, 
Sören

von Fox X. (mr-fox)


Lesenswert?

im user guide, von den custom instruction, werden beispiele, von 300 ns 
gezeigt, die eine ci zum abarbeiten braucht,
ich komme ja nicht mal mit einer ein tick ci in die nähe dieser zeit...
also muss ich irgendwas falsch machen, der prozessor läuft mit 50 Mhz...

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.