mikrocontroller.net

Forum: FPGA, VHDL & Co. Intel Avalon Performance Frage


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: avalonMax1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe auf einem Intel MAX10 einen NIOS2e Prozessor (32Kb RAM) mit 
einem selbst geschriebenen Avalon Memory Mapped Slave (CRC in Hardware).
Ich habe nun die Performance mir angeschaut und brauche Hilfe.

Ich schreibe in der Endlosschleife
mit ldw, Modi und stw auf den Avalon MM slave. Das klappt auch soweit 
nur zwischen zwei Schreibvorgängen (write signal) liegen 33 clock 
Zyklen.

Ich dachte zuerst es liegt am NIOS2e aber mit einem NIOS2f und jeweils 
1Kb Cache habe ich das gleiche verhalten.
Woher kommt diese Latenz?

Gibt es einen Weg diese zu minimieren?

Vielen Dank.

Autor: Schiffe Versenken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avalonMax1000 schrieb:
> Hallo zusammen,
>
> ich habe auf einem Intel MAX10 einen NIOS2e Prozessor (32Kb RAM) mit
> einem selbst geschriebenen Avalon Memory Mapped Slave (CRC in Hardware).
> Ich habe nun die Performance mir angeschaut und brauche Hilfe.

>
> Gibt es einen Weg diese zu minimieren?

Mehrere, beispielsweise den Takt reduzieren, oder alles an einem Takt zu 
hängen, das erspart die synchronizer. Und nicht das man Genrieren durch 
uninspiriertes drauflosclicken mehr Waitsates als nötig configuriert 
worden. Avalon Streaming IF sollte man auch genügend Aufmerksamkeit 
widmen: 
https://www.intel.com/content/www/us/en/programmable/documentation/nik1412467993397.html#nik1412467963376

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich meine mich zu erinnern dass das auch mit der Konfiguration des NIOS 
zu tun hat, wie er die Tasks abarbeitet. Das Streaming IF an sich ist 
schnell und latenzarm. Was regelmäßig zum Warten führt, sind 
DDR-Zugriffe aller Art. Das lässt sich nur durch intelligente 
FIFO-Steuerung lösen.

Autor: avalonMax1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Input.
Ich stelle meine Frage nochmals spezieller:

Wenn ich einen eigenen Avalon SPI Slave mache, braucht dann NIOS2 immer 
>20 Zyklen für den Registerzugriff?
Das Streaming-IF hilft ja bei einem klassischen Register ja nichts, da 
bidirektional.

Autor: Schiffe Versenken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avalonMax1000 schrieb:
> Danke für den Input.
> Ich stelle meine Frage nochmals spezieller:
>
> Wenn ich einen eigenen Avalon SPI Slave mache, braucht dann NIOS2 immer
>>20 Zyklen für den Registerzugriff?
Nein.

Autor: Schiffe Versenken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du nicht in die Docs schauen magst dann lies und versteh wenigstens 
dieses Lab: 
https://dreamteam181.wordpress.com/2017/05/08/lab-3-designing-avalon-memory-mapped-master-components/

Autor: Schiffe Versenken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probs mit Codelesen aus externen SDRAM kann man durch L1-CodeCaches 
begrenzen. Ist dein NIOS mit solchen Caches generiert?

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie hast du denn die Zyklenzahl bestimmt?

Autor: avalonMax1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mit dem Signal Tap logic mir die Avalon Signale angeschaut.
Wahrscheinlich komme ich nicht drum herum, einen Avalon Master für eine 
Art DMA zu implementieren um effizienter zu werden.

Autor: Schiffe Versenken (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
avalonMax1000 schrieb:
> Ich habe mit dem Signal Tap logic mir die Avalon Signale angeschaut.
> Wahrscheinlich komme ich nicht drum herum, einen Avalon Master für eine
> Art DMA zu implementieren um effizienter zu werden.

Nein, bei 22 Takten gibt es geeignetere Lösungsansätze als DMA-Master.
Und Streaming ist eine Form des DMA, das hast Du ja bereits als "nicht 
hilfreich" abgekanzelt.

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ avalonMax1000

Folgendes Set-Up: Avalon-MM-Slave Komponente mit internem Registersatz. 
Der Inhalt von Register[0] wird über ein UND-Gatter auf einen Nios2 
externen Testpin geführt. Anschließend beschreibe ich das Register 
abwechselnd mit 0x00000000 und 0xFFFFFFFF ...

Komme so auf eine Registerzugriffszeit von 40ns, bzw. zwei 
Prozessortakte ...

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.