mikrocontroller.net

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


Autor: Max K. (mku)
Datum:

Bewertung
0 lesenswert
nicht 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... 
(Seite 13)

Und verstehe halt leider nicht das delay.
Wenn ich es jetzt z.B. bei meinem Code anwende:
int main()
{
    unsigned long delay = 0;

    int value[20];
    int i;

  while(1)
  {

    for(i = 0; i <= 19; i++)
    {
      value[i] = IORD_ALTERA_AVALON_PIO_DATA(PIO_DATA_BASE);

      printf(" - %d\n", value[i]);
      
      delay = 0;

      while(delay < 2000000)
      {
        delay++;
      }
    }

  }
  return 0;
}

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

Autor: ui (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Weltbester FPGA-Pongo (Gast)
Datum:

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

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: chris (Gast)
Datum:

Bewertung
-2 lesenswert
nicht 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.

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: chris (Gast)
Datum:

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

Autor: Markus F. (mfro)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
1,5

Autor: Weltbester FPGA-Pongo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.