Forum: FPGA, VHDL & Co. NIOS Geschwindigkeit delay frage


von Max K. (mku)


Lesenswert?

Hi

ich habe mal eine Frage zu NIOS.

Unter QSYS wurde der NIOS CPU mit 50Mhz verbunden.

Jetzt habe ich mich an dieses Beispiel hier mal gehalten:
https://www.altera.com/en_US/pdfs/literature/tt/tt_my_first_nios_sw.pdf 
(Seite 13)

Und verstehe halt leider nicht das delay.
Wenn ich es jetzt z.B. bei meinem Code anwende:
1
int main()
2
{
3
    unsigned long delay = 0;
4
5
    int value[20];
6
    int i;
7
8
  while(1)
9
  {
10
11
    for(i = 0; i <= 19; i++)
12
    {
13
      value[i] = IORD_ALTERA_AVALON_PIO_DATA(PIO_DATA_BASE);
14
15
      printf(" - %d\n", value[i]);
16
      
17
      delay = 0;
18
19
      while(delay < 2000000)
20
      {
21
        delay++;
22
      }
23
    }
24
25
  }
26
  return 0;
27
}

Wenn der Nios mit 50MHz läuft, müsste ich doch mit einem delay mit dem 
Wert 50000000 dann auf 1s kommen, oder liege ich hier falsch?
Zumindest läuft es mit diesem wert sehr langsam.

Mir gehts später darum, das ich eine bestimmte Anzahl an Werten, z.B. 20 
Werte in 1 Sekunde aufnehme und den Rest mit delay fülle, damit es immer 
auf 1s kommt.

Vielen Dank

von ui (Gast)


Lesenswert?

Diese Art von delay kann man machen, hat aber einige Nachteile. Der 
erste, den du bereits gesehen hast, ist, dass die Zeit nicht stimmt. 
Warum? Schau ins Assembler file... Von x runterzählen heißt halt nicht 
nur x clock zyklen zu warten, sondern auch noch zu vergleichen, Werte in 
register zu laden etc. Es entsteht overhead durch den Code an sich. 
Deswegen stimmt deine Zeit nicht.
Faktor 3 - 5 kann durchaus sein, dazu müsstest du aber das assembler 
file herzeigen.

Mein Tipp: Bau dir nen Systemtimer mit rein. Damit kannst du dann genau 
1s warten.

von Duke Scarring (Gast)


Lesenswert?

Max K. schrieb:
> Wenn der Nios mit 50MHz läuft, müsste ich doch mit einem delay mit dem
> Wert 50000000 dann auf 1s kommen, oder liege ich hier falsch?
Nur wenn der Nios mit jedem Takt einen Befehl abarbeiten kann.
Üblicherweise braucht es aber (u.U. ja nach Befehl) mehrere Takte um 
einen Befehl abzuarbeiten. Weitere Unterschiede können auftreten, wenn 
die Zugriffszeit verschiedener Speicher (BRAM, DDR-RAM, Flash, 
SPI-Flash) noch ins Spiel kommt.

> Mir gehts später darum, das ich eine bestimmte Anzahl an Werten, z.B. 20
> Werte in 1 Sekunde aufnehme und den Rest mit delay fülle, damit es immer
> auf 1s kommt.
Dann nutze einen Hardwaretimer, der Dich einmal pro Sekunde weckt...

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max K. schrieb:
> Mir gehts später darum, das ich eine bestimmte Anzahl an Werten, z.B. 20
> Werte in 1 Sekunde aufnehme
Dann solltest du mit einem Zeitraster von 50ms arbeiten, damit die Werte 
äqidistant sind. Oder was machst du mit diesen 20 Werten?

> oder liege ich hier falsch?
Sieh dir das Assemnblerfile an und berechne wie viele die Operationen 
dort drin brauchen. Dann kannst du überschlägig berechnen wie weit du 
zählen musst. In der Praxis nimmst du deinen Wert 50000000 und stoppst 
die Zeit, die dafür gebraucht werden. Und dann kommt ein Dreisatz, um 
den Zählerwert für 1s zu berechnen.
Das Verfahren ist aber aktive Rechenzeitverschwendung und zudem sehr 
ungenau und unzuverlässig. Denn wenn du irgendwas dazuprogrammierst, 
dann braucht das auch Rechnezeit.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Lothar M. schrieb:
> Das Verfahren ist aber aktive Rechenzeitverschwendung
passt aber zu der verschwenderischen Strategie, wertvolle FPGA-Fläche 
mit langsamen Prozessoren zuzuknallen.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #5183773:
> Lothar M. schrieb:
>> Das Verfahren ist aber aktive Rechenzeitverschwendung
> passt aber zu der verschwenderischen Strategie, wertvolle FPGA-Fläche
> mit langsamen Prozessoren zuzuknallen.

Naja, es geht dem TE wohl auch darum, den Einsatz von FPGA zu üben. 
Allerdings sollte man dann auch konsequent sein und alle derartigen 
Timings in Hardware erzeugen. Wofür hat man schließlich das FPGA?

Für Projekte, bei denen ich mit dem Timing bei der Ansteuerung von 
Hardware herumspielen muss, verwende ich auch bevorzugs ein FPGA mit 
Softcore. Dann muss ich mich nicht darauf verlassen, dass sich die 
Timerblöcke eines normalen Microcontrollers wirklich zu ansteuern lassen 
wie ggf. benötigt. Und bei rein hardwaremäßig erzeugtem Timing kann ich 
auch sicher sein, dass es keinen Jitter durch die Firmware gibt. 
Natürlich ist das nichts für kostensensitive Anwendungen in 
Großstückzahlen, aber für Prototypen und Kleinserienprodukte durchaus 
praktikabel.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas S. schrieb:
> Naja, es geht dem TE wohl auch darum, den Einsatz von FPGA zu üben.
Mit einem zusammengeklickten CPU-Core, der dann hinterher mit C-Code 
zugetextet wird, lernt er m.E. aber rein gar nix über einen 
zielgerichteten Einsatz von FPGAs.
Denn wenn man was neu lernt, dann sollte man nicht lernen, wie man für 
einen Testaufbau schnell mal einen Prototypen zusammenflicken kann.

von Markus F. (mfro)


Lesenswert?

das delay() ist Mist.

Ein vernünftiger Compiler wird dir das beim Optimieren einfach 
rausschmeissen. Mach das lieber jetzt gleich und selber, bevor Du dich 
totsuchst, wenn Du irgendwann mal die Optimierung einschaltest.

von chris (Gast)


Lesenswert?

Mal eine Frage, um mal einen groben Richtwert zu bekommen:
Wie viel Prozent eines MAX10 oder eines anderen FPGAS werden durch den 
NIOS und das obige, einfache Beipspielprogramm verbraucht?
Wie viele LUTs? Wie viel Resourcen bleiben noch übrig, die man selber 
nutzten könnte?

von Markus F. (mfro)


Lesenswert?

chris schrieb:
> Wie viel Prozent eines MAX10 oder eines anderen FPGAS werden durch den
> NIOS und das obige, einfache Beipspielprogramm verbraucht?

Logischerweise ist das abhängig vom verwendeten FPGA...

Je nachdem, was er können soll, belegt ein NIOS2 zwischen 700 und 3000 
LEs.
Der dickste MAX10 hat davon 50000.

von chris (Gast)


Lesenswert?

>Je nachdem, was er können soll, belegt ein NIOS2 zwischen
> 700 und 3000 LEs.

Die Aussagen sind jetzt sehr variabel, deshalb habe ich nach dem 
Resourcenberbrauch vom obigen Beispiel inclusive des Beispielprogramms 
gefragt, denn für ein lauffähiges System bedarf es ja auch des Speichers 
und der Busse.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Nein, Du hast eine sehr allgemein gehaltene Frage gestellt. 
Möglicherweise meinstest Du etwas anderes. Wenn Du passende Antworten 
auf Fragen erhalten möchtest, solltest Du keine impliziten Annahmen 
treffen, sondern die Fragen vollständig formulieren.

von chris (Gast)


Lesenswert?

chris schrieb:
>Wie viel Prozent eines MAX10 oder eines anderen FPGAS werden durch den
>NIOS und das obige, einfache Beipspielprogramm verbraucht?

von Markus F. (mfro)


Lesenswert?

1,5

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Ich bin schon mehrfach auf den Trichter gekommen, sowas automatisiert zu 
messen und dabei auch zu verifizieren, was der NIOS (oder andere 
Controller) so in Echtzeit tun.

Beitrag "Re: Ideen für FPGA-Projekte - Tracker für Controller"

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.