Design-Praxis RISC-V Von den Grundlagen bis zum Prototyp

I. Verhalten in der Umgebung

Die Privileged-Spezifikation [2] beschreibt ein Modell für den Prozessor in einer Software- oder Hardwareumgebung. Im Software-Stapel-Modell greift eine Anwendung auf das Binärinterface (ABI) mit dem ISA zu, unter dem eine zusätzliche Ausführungsschicht (AEE) liegt. Die Ausführungsschicht ist für die Anwendung unsichtbar. Sie kann mit einem Betriebssystem ersetzt werden, das ein eigenes Binärinterface (SBI) und eine eigene Ausführungsschicht (SEE) integriert. Darauf können simultan unterschiedliche Anwendungen aufsetzen. Die Ausführungsschicht des Betriebssystems kann wiederum durch einen hypervisor ersetzt werden, der wiederum ein eigenes Binärinterface (HBI) und eine Ausführungsschicht hat (HEE). Auf das HBI können dann wiederum simultan unterschiedliche Ausführungsumgebungen aufsetzen.

Ein RISC-V-Kern besitzt mehrere harts, also hardware-definierte Aufrufketten (threads*) mit eigenem Adressraum und Befehlszeiger. Eine Aufrufkette arbeitet mit festem Zugriffsrecht, entweder auf Anwendungsebene (U), in der Ausführungsumgebung (S) oder auf Maschinenniveau (M). Künftig soll auch die hypervisor-Ebene (H) spezifiziert werden. Überführt eine exception das System in einen trap-Zustand, so wird die Ausführung von dort, meistens auf höherer Zugriffsebene fortgesetzt (vertical trap). Bleibt der trap auf der selben Hierarchieebene, so wird von horizontal trap gesprochen. Jede Ebene hat ihre eigenen gültigen Befehlssätze.

Der debug-Modus [6] kann als Ausführungsmodus mit Zugriffsrechten über dem Maschinen-Niveau betrachtet werden. Er nutzt einige spezielle CSR-Register und physikalischen Speicherplatz auf dem Chip. Die Spezifizierung der debug-Schnittstelle befindet sich allerdings noch im Frühstadium.

Insgesamt sieht die RISC-V ISA ein 12-Bit-Feld, also 4096 mögliche CSR-Einträge, vor. Die höchsten Bits eines Eintrags kodieren dabei Zugriffsart und -ebene. Außer den timern kennt der Standard derzeit noch keine weiteren CSR-Schattenregister.

Einige M-CSR und -Befehle

Der Maschinenmodus hat Zugriff auf das gesamte CSR. Hier können u.a. ISA-Unterstützung eines harts gelesen, der JEDEC-Hersteller eingesehen, eine Mikroarchitektur und Prozessorimplementierung gelesen, eine hart-ID gelesen, der Ausführungsstatus eines harts gesetzt oder gelesen, bei Zugriffsberechtigung interrupts aktiviert werden, die Länge des Standardregisters auf unterschiedlichen Ausführungsebenen gesetzt, Schreib- und Speichervorgänge reglementiert, Virtualisierung zugelassen oder eingeschränkt, Erweiterungen verwaltet, ein trap definiert, das Schwellniveau für exceptions und traps gesetzt, interrupt-Status gelesen, eine Echtzeituhr gelesen, die Hardwareperformanz evaluiert sowie die Ursache einer trap oder exception gelesen werden.

M-Mode-spezifische Befehle lösen u.a. eine exception aus der Umgebung aus, lösen einen Haltepunkt aus, führen die Ausführung aus einer trap heraus fort, oder warten auf ein interrupt-Ereignis.

Einige S-CSR und -Befehle

Der S-Ebene sind nur ein Teil der M-Mode-CSRs zugänglich, u.a. für ABE-Status, ISA-Eigenschaften, interrupts und timer, exception, trap und den Adressoffset.

Darüber hinaus wird das virtuelle Speichermodell für die Ausführungsumgebung begründet. Das satp-Register enthält die physikalische Seitenzahl und den Übersetzungsmodus, für RV32 wird so ein Adressraum > 4 GiB unterstützt. Für RV64 sind weitere Verfahren zur Speichervirtualisierung vorgesehen (Sv39, Sv48, Sv57 und Sv64).

Die implementierte Seitenlänge hat Auswirkungen auf die Performanz, Sv32 und Sv64 werden standardmäßig mit 4 KiB ausgeführt, damit kann die Navigation (TLB) zwischen den Seiten in Hardware erfolgen. Die virtuelle Seitenadresse misst 20 Bit und kann in eine physikalische Seitenadresse von 22 Bit übersetzt werden. Der Seiteneintrag enthält die physikalische Seitenadresse, gemeinsam mit einer Reihe von Zugriffserklärungen.  

Auf physikalischer Ebene spezifiziert RISC-V bis dato nur ein stark relaxiertes Speichermodell, das aus Sicht der Hochsprachen noch schärfer ausformuliert werden muss. Ein Typ-R-Befehl sieht die Synchronisierung unterschiedlicher harts, oder eines harts mit I/O-s vor [1]. Ein entsprechender sfence-Befehl synchronisiert virtuelle Speicherkonstrukte in der Ausführungsumgebung.