Artikel-ID: 000081052 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 18.08.2014

Was muss ich bei einem Upgrade meiner Software von Nios II Classic (Gen1) auf Nios II Gen2 Prozessoren tun/beachten?

Umgebung

  • Intel® Quartus® II Anmeldungs-Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Beschreibung

    Nios® II Classic und Nios II Gen2 Prozessoren binärkompatibel sind, aber es gab einige kleinere Änderungen an der HAL- und Cache-Funktionalität. Daher wird empfohlen, BSPs und Software mit Tools/Bibliotheken aus der neuesten Version (v14.0) neu zu erstellen, und wenn die Prozessorkonfiguration einen Daten-Cache enthält, dass die Verwendung von Nicht-Cache-Transaktionen in der gesamten Benutzersoftware überprüft werden.

    Lösung

    Nicht gecachede Speicherbereiche
    Wenn ein Prozessor mit einem Daten-Cache einen Lese- und die Daten nicht im Cache befinden, wird der Cache in der Regel einen kleinen Block oder eine "Zeile" von Daten aus dem Speicher in den Cache laden. Wenn der Prozessor einen Schreibvorgang ausgibt, wird der neue Wert in der Regel im Daten-Cache gespeichert; mit einem Write-Back-Data-Cache (z. B. wie im Nios II Prozessor) werden neue Datenwerte nur an den realen physischen Ort zurückgeschrieben, wenn der Cache geleert oder Daten aus dem Cache geleert werden. Diese Art von Operation ist nicht zulässig für Speicherbereiche, in denen die Daten sofort auf die Hardware geschrieben werden müssen, um die gewünschte Funktion/Operation zu bewirken (z. B. Shared Memory oder Schreibvorgänge in Peripherie-/Hardware-Kontrollregister). Dies bedeutet, dass Entwickler verpflichtet sind, entweder den Cache sofort zu leeren, oder einen Speichervorgang zu verwenden, der den Cache umgeht und direkt/sofort an die Hardware geht (bevorzugt). Manchmal kann es andere Gründe geben, warum der Entwickler nicht möchte, dass die Daten zwischengespeichert werden (z. B. wenn die Daten nie zurückgelesen werden und/oder es nicht erforderlich ist, andere Daten aus Leistungs- oder anderen Gründen aus dem Cache zu vertreiben).

    Mit dem Nios II Classic Prozessor kann Cache-Bypass durch spezielle I/O-Lese-/Schreibanweisungen (z. B. ascii/stwio), durch Einstellen von Bit-31 in der Speicheradresse der Lese-/Schreib-Adresse oder durch Implementierung einer MMU/MPU und entsprechenden Einrichtung erreicht werden. (Hinweis: Die Optionen MMU und Bit-31 schließen sich gegenseitig aus)

    Nios II Gen2-Kerne bieten dieselben Mechanismen für Cache-Bypass, aber die Implementierung ist etwas anders und könnte bei Nios II Classic zu Nios II Gen2 Softwaremigration ein potenzielles Problem sein.

    Wenn der Nios II Classic Prozessor einen nicht gecacheden Schreibvorgang durchführt und der Speicherort (und damit die zugehörige Cache-Zeile) im Daten-Cache vorhanden ist, wird der neue Datenwert auch in den Cache geschrieben (obwohl dies ein nicht gecacheder Schreibvorgang ist). Dies bedeutet, dass die Daten im Cache immer auf dem neuesten Stand sind, und wenn das Softwaredesign dazu führt, dass Bereiche ohne Cache in den Cache geladen werden, entsteht kein Verlust der Datenkohärenz. Daher kann der Nios II Classic Prozessor auch nicht gecachede Speicherbereiche beliebiger Größe und jeder Adressausrichtung unterstützen (da er das Mischen von zwischengespeicherten und nicht gecached Speicherbereichen auf der gleichen Cache-Zeile ermöglicht). Dies gilt nicht für Nios II Gen2-Kerne.

    Im Nios II Gen2 Prozessorkern umgehen nicht gecachede Transaktionen den Daten-Cache und der Cache-Inhalt wird nicht aktualisiert (standardüblich für die meisten Prozessoren). Wenn ein nicht gecacheder Speicherbereich eine Cache-Zeile mit einer zwischengespeicherten Region teilt, wird die nicht gecached-Region in den Cache zugeordnet und kann mit alten/nicht mehr verfügbaren Daten aktualisiert werden, wenn der Cache geleert wird. Entwickler müssen sicherstellen, dass nicht verwaltete und zwischengespeicherte Speicherbereiche klar getrennt sind und die gleiche Cache-Zeile nicht freigegeben werden, wenn sie im Cache zugeordnet werden. Dies wird erreicht, indem sichergestellt wird, dass nicht gecachede Speicherbereiche an der Größe der Daten-Cache-Zeile (32 Byte) ausgerichtet sind und die Größe einer oder mehrerer Daten-Cache-Zeilen (Mehrere von 32 Byte) sind. Dies verhindert die Mischung von cacheablen und nicht cacheablen Daten in der gleichen Cache-Zeile und schreibt daher veraltete/ungültige Daten zurück. Eine gute Design-Praxis empfiehlt, dass die Basisadressen von Peripherieregistersätzen an den Daten-Cache-Zeilengrenzen ausgerichtet sind und dass Treiber die Cache-Bypass-I/O-Lese-Schreibanweisungen verwenden. Daher ist es unwahrscheinlich, dass Änderungen an Treibern erforderlich sind. Andere Software, die Cache-Bypass-/Nicht-Cache-Speicherbereiche verwendet, sollten sorgfältig überprüft werden, um sicherzustellen, dass Cache-Zeilen nicht den Regionen zuzuordnen sind, die sowohl zwischengespeicherte als auch nicht gecachede Daten enthalten.

    Hinweis: Software, die die Bit-31-Cache-Bypass-Funktion verwendet, funktioniert nicht mehr, wenn die Option Nios II Gen2-32-Bit-Adressbereich ausgewählt ist, stattdessen die I/O-Anweisungen zum Cache-Bypass oder der periphere Speicherbereich verwendet werden sollten.

    Neue Funktionen
    Entwickler sollten die potenziellen Auswirkungen der Verwendung des neuen 32-Bit-Adressbereichs und der Optionen für den Peripheren Speicherbereich in Betracht ziehen, falls die Hardwarekonfiguration geändert wird, um sie zu verwenden. Die Software sollte geändert werden, um diese Funktionen zu unterstützen oder zu erkennen und Fehlermeldungen zu senden.
    Software, die die Bit-31-Cache-Bypass-Funktion verwendet, funktioniert nicht mehr, wenn die Gen2-32-Bit-Adressbereichsoption ausgewählt ist, stattdessen die Cache-Bypass-I/O-Anweisungen oder der periphere Speicherbereich verwendet werden sollten.

    Wenn die Nios II Classic ECC-Option in der ursprünglichen Software unterstützt wurde, muss sie erweitert werden, um die zusätzlichen Speicher aufzunehmen, die vom Nios II Gen2-Prozessor unterstützt werden.

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Intel® programmierbare Geräte

    Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.