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.
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
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.
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.
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.
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/
Probs mit Codelesen aus externen SDRAM kann man durch L1-CodeCaches begrenzen. Ist dein NIOS mit solchen Caches generiert?
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.
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.
@ 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 ...
@avalonMax1000 Wie sieht denn dein im Platform Designer erstelltes System aus?
@Ben War das ein NIOS2 f oder e? Ich habe den Code beim NIOS 2e aus dem externen SD-RAM laufen lassen, wobei dieser CAS 3 ist; folglich drei Waitstates. Einen Cache kann ich nicht verwenden, weil ich die Lizenz für den NIOS2 nicht habe, daher geht leider nur ohne Cache. Der Cache würde die Performance sicherlich erhöhen. Inzwischen habe ich eine akzeptable Lösung gefunden; ich habe hole die Daten per Avalon in ein FIFO und in ein weiteres Fifo die empfangenen Daten der SPI Schnittstelle. Wenn die SPI Transaktion dann fertig ist, schreibe ich per Avalon-Master die Daten wieder in das SD-RAM. Hiermit habe ich nur noch Waitstates und kann BURST verwenden. Trotzdem würde ich verstehen, wieso es so viele Takte für die genannten Assembler Befehle sind.
@avalonMax1000 Das war tatsächlich ein Nios2 (f). Ich hab es gerade noch einmal mit einem Nios2 (e) aufgesetzt und den oben erwähnten Test in Assembler implementiert: Ein Registerzugriff kommt dann auf 6 Prozessortakte + zwei Takte Verzögerung durch den Avalon-Bus selbst. Das passt, bedenkt man, dass der Nios2 (e) keine Instruktionspipeline besitzt und somit für einen Befehl sechs Takte benötigt (Instruction fetch, Instruction Decode, Execute, ... ,siehe Handbuch).
@Ben Danke für die Information. Ich hatte total verdrängt, dass der NIOS2 (e) auch eine sechsstufige Pipeline hat. Wahrscheinlich muss ich mir doch mal eine NIOS2 (f) Lizenz leisten.
@avalonMax1000 der Nios2 (e) besitzt 'keine' Instruktionspipeline. Deshalb braucht er ja in Summe sechs Takte um einen Befehl abzuarbeiten ... Setzt du den Nios2 kommerziell ein?
Ben schrieb: > der Nios2 (e) besitzt 'keine' Instruktionspipeline. Deshalb braucht er > ja in Summe sechs Takte um einen Befehl abzuarbeiten ... Was für ein Scheiss-Core, aber jetzt sollte endgültig klar sein, das ein DMA Master nicht die Lösung für einen Prozessor auf Sechstel-Speed ist. Es gibt auch lizenzfreie Alternativen bspw. den LEON2, schau dir mal den an: https://www.gaisler.com/doc/CoSCPU.pdf Lizenz-technisches zum NIOS wurde bereits hier durchgekaut: Beitrag "Volllizenz Nios II" Beitrag "Altera NIOS extern RAM anbinden ohne Lizenz" Beitrag "Probleme mit NIOS II - DE2 Board"
Zur Ehrenrettung muss man an dieser Stelle sagen, dass der Nios2 (e) vor dem Hintergrund einer minimalen Resourcennutzung entwickelt wurde, was summa summarum dazu führt, dass die Performance entsprechend gering ausfällt. Nichtsdestotrotz habe ich den (e)-Core bereits in einer Vielzahl von Anwendungen implementiert, wo es darum ging eine "konfigurierbare/flexible State-Machine" zu haben, die mit wenig Resourcen auskommt. Die Ausführungsgeschwindigkeit war hier sekundär. Trotzallem ist der Einwurf von 'Schiffe Versenken' richtig. Es gibt kostenfreie Alternativen a la Gaislers LEON2/3. Diese Cores gehen aber in die Richtung des Nios2 (f) Cores ...
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.