Die Implementierung eines RISC-V-Softcores kann Entwickler vor unerwartete Herausforderungen stellen, wenn es an der notwendigen Dokumentation mangelt. Dieser Beitrag zeigt einige potenzielle Hürden und Grenzen anhand der Portierung von OpenTitan Earl Grey auf den ZCU102-SoC auf.
AMD Zynq Ultrascale+ MPSoC ZCU102 Evaluierungskit: Ob als fertiges System oder zur Vorevaluierung, die Implementierung eines RISC-V-Softcores auf einem FPGA kann sich mituner schwieriger gestalten als gedacht.
(Bild: AMD)
Was als etwas ungewöhnliches Projekt begann, nämlich die Portierung von OpenTitan auf das ZCU102 Bord, da dies für das gegebene Forschungsprojekt APRIORI am sinnvollsten erschien, endete als eine verzwickte Angelegenheit. In der offiziellen OpenTitan-Dokumentation [1] fehlen nämlich bis heute eine Reihe wesentlicher Informationen. Um anderen dieselben misslichen Erfahrungen zu ersparen, haben wir hier unsere Erfahrungen mit der Portierung zusammengefasst.
Die Ingenics Digital GmbH war zwischen 2021 und 2024 Projektpartner des französisch-deutschen Forschungsprojekts APRIORI (Advanced Privacy of IoT Devices through Robust Hardware Implementations) [4], bei welchem es darum ging, private Daten in IoT-Geräten zu gewährleisten und sie gegen Angriffe abzusichern. Als Grundlage sollte ein RISC-V Prozessor ausgewählt werden, der als Softcore auf einem FPGA läuft. In gemeinsamem Übereinkommen entschied man sich für den Open Source Chip „OpenTitan Earl Grey“.
OpenTitan ist ein Open Source Silicon Root of Trust Projekt. Der OpenTitan Earl Grey Chip, der unter besagtes Projekt fällt, ist ein low-power secure Microcontroller, der für Hardware Security Anwendungsfälle konstruiert wurde [1]. Bei dem Prozessor handelt es sich um einen 32-bit RISC-V Kern namens „Ibex“ mit 2-Stufen Pipeline [5]. Ursprünglich wurde der „Ibex“ von der PULP Platform unter dem Namen „Zero-Riscy“ [6] entwickelt. Zusätzlich zum RV32IMC Befehlssatz unterstützt „Ibex“ auch den M (Maschine) und U (User) Modus des RISC-V Standard. Das top_earlgrey Modul besteht aus zwei Domänen, die mit unterschiedlichen Frequenzen betrieben werden (Bild 1):
High Speed Domain
Peripheral Domain
Bild 1: Das Blockdiagram zeigt den Aufbau des Chip Earlgrey als ASIC-Design, welches auf Top Earlgrey basiert. Zu sehen sind der Ibex RISC-V Kern, Sicherheitsmodule, Busse, Managementblöcke für Clocks und Power, sowie serielle Kommunikationsschnittstellen wie I2C und SPI.
In der High Speed Domain befinden sich der Ibex sowie Sicherheit Features, wie z.B. der Key Manager, OTBN, AES, KMAC, HMAC, etc. Zusätzlich findet man dort auch den SPI, ROM, SRAM USB und den Flash. Verbunden sind sämtliche Module über die TL-UL Crossbar, ein leichtgewichtiges, ungecachtes TileLink basiertes Bus Protokoll. Die TL-UL Crossbar wird ebenfalls verwendet, um die High Speed Domain mit der Peripheral Domain zu verbinden. In der Peripheral Domain befinden sich
Sicherheitsfeatures wie der OTP-Controller, die Module Life Cycle und Alert Handler. Ebenfalls vorhanden sind UART, Timers, GPIO, I2C, das SPI Device und Pattern-Generatoren. Ein Teil der Always-on Domain, die im Gegensatz zu den restlichen Modulen nicht durch den Power Manager deaktiviert werden können, sind ebenfalls vorhanden. Hierbei handelt es sich um PWM, Retention SRAM, Power Manger, Sysrst Controller, AON Timers, Clk/Rst Managers, Pinmux /Padctrl, ADC-Controller und Sensor Controller. Die Chip Earlgrey Ebene besteht immer aus dem Top Earlgrey, dem Padring und dem Analog Sensor Top (AST). Der Padring wird zur Verbindung von Modulen genutzt, während der AST analoge Funktionen wie Clocks, Regulatoren, Zufallszahlengeneratoren und Sensoren enthält, um den Chip vor physikalischen Attacken und Manipulationen zu schützen.
Bild 2: Das Blockdiagram zeigt das Chip Earlgrey Design für das ZCU102 Bord. Im Vergleich zu Bild 1 enthält das Diagram zwei weitere Module: clkgen und ps_for_opentitan. Bei clkgen handelt es sich um den Clock Generator, welcher aus einer 125MHz Clock weiter von OpenTitan benötigte Clocks generiert. Das ps_for_opentitan Modul ist für das Setzen von Pins und das Laden der Firmware zuständig, da das ZCU102 nicht den SAM3X Microcontroller des CW310 verbaut hat und somit die HOST SW des OpenTitan nicht genutzt werden kann.
(Bild: Ingenics)
Als Portierungsgrundlage wurde der damalige Earlgrey-ES-SV2 Release verwendet (der nicht mehr auf GITHUB verfügbar ist, nächster Nachfolger ist gegenwärtig (August 2025) Earlgrey-PROD.M2, der nicht getestet wurde). Der Anstoß für die Portierung auf das AMD Zynq Ultrascale+ MPSoC ZCU102 Evaluierungskit war die mangelhafte Verfügbarkeit des damaligen Entwicklungsboards „CW310 Bergen Board“. Als Build System wurde Bazel [8] verwendet, welches das Build System FuseSoC startet. Bazel kümmert sich um das Bauen der Software, Tests etc., FuseSoC um die Ansteuerung der Hardware und das Bauen des Bitstreams. Das Blockdesign des Chip Earlgrey für die Portierung auf das ZCU102 zeigt Bild 2.
FuseSoC
Die Funktionalität von FuseSoC [7] basiert auf Cores. Diese Cores sind eigenständige, wiederverwendbare IP-Blöcke wie z.B. eine FIFO-Implementierung. Sie werden durch Core-Files beschrieben, die unter anderem die Source Files für besagte IP beinhalten. Das Build System basiert auf diesen Core-Files, wobei es ein Top Level Core-File gibt, das andere Core-Files aufruft, wodurch das gesamte System beschrieben wird, das gebaut werden soll.
CW310
Bei dem CW310 Board [3] handelt es sich um erweiterte Evaluations Platform für FPGA-basierte Security SoC, RoT oder HSM-basierte Designs. Es hat einen AMD Kintex 7 FPGA mit dem K410T Chipsatz und einen SAM3X Microcontroller, der für die folgenden Aufgaben zuständig ist:
Konfiguration und Rekonfiguration des FPGAs
Überwachung der FPGA-Temperatur und Lüfter
Anpassung der Spannung
Kontrolle der PLL und Setzen der Clock-Frequenz
Kommunikation über die seriellen USB-Ports
Steuerung des Address/Datenbusses, der genutzt werden kann, um 30 vom Computer kontrollierte GPIO-Pins zu steuern
Kommunikation über das generische SPI-Interface
Beim OpenTitan wird dieser Microcontroller genutzt, um die Firmware zu laden und GPIOs zu setzen.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel Communications Group GmbH & Co. KG, Max-Planckstr. 7-9, 97082 Würzburg einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von redaktionellen Newslettern nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung, Abschnitt Redaktionelle Newsletter.
ZCU102
ZCU102 ist ein Evaluierungskit mit AMD Zynq Ultrascale+ MPSoC mit Quad-Core Arm Cortex-A53, Dual-Core Cortex-R5F Echtzeitprozessoren und einem Mali-400 MP2 Grafikprozessor [2]. Für den OpenTitan wird der FPGA (PL) des AMD Zynq Ultrascale+ MPSoC und der Quad-Core Arm Cortex-A53 (PS) verwendet. Der Quad-Core wird genutzt, um die GPIOs des OpenTitan zu setzen und die Firmware zu laden.
Guidance to Accelerate your Programmable Solution
Featuring Special Tracks with Focus on Embedded AI
The FPGA Conference Europe, Europe's most important platform for manufacturer- and technology-independent cross-application dialogue, provides embedded developers with orientation and practical assistance. Engage with industry leaders, gain insights from hands-on workshops, and connect with fellow experts eager to share the latest innovations and techniques. A new special track will focus on Embedded AI – intelligent systems that implement machine learning directly in programmable hardware.
Um den Softcore auf dem ZCU102 in Betrieb nehmen zu können, mussten mehrere Anpassungen vorgenommen werden. Zunächst wurde die Datei „chip_earlgrey_cw310.core“ angepasst.
Hierbei handelt es sich um das TOP Level Core-File für den OpenTitan Earl Grey Chip.
Die Bordnummer des CW310 wurde durch die des ZCU102 ersetzt. Anschließend wurde die Clock angepasst. Die Standard-Clock des CW310 läuft mit 100 MHz, während die Standard-Clock des ZCU102 125 MHz hat. Da der OpenTitan über mehrere Clocks verfügt, wurde der MMCME2 IP-Core verwendet, um die entsprechenden Clocks für den FPGA zu generieren:
Clock Name
ASIC-Clocks in MHz
CW310 Clocks in MHz
ZCU102 Clocks in MHz
System Clock
~100
125
125
Core Domain
~100
10
10
Peripheral Domain
~24
2.5
2.5
SPI
~48
48
48
Always On Clock
~0.200
0.200
0.200
div_2_clock
~48
5
5
Für das ZCU102 wurde ein neues Modul mit derselben Funktionalität erstellt, das eine MMCME4 (Äquivalent zu der MMCME2 für Ultrascale+ Bords) instanziiert und die an die neue System Clock angepasst wurde. Entsprechend wurden auch die Constraint Files angepasst. Das File clocks.xdc wurde durch clocks_zcu102.xdc ersetzt und an die neue System Clock angepasst.
Das File pins_cw310.xdc wurde durch pins_zcu102.xdc ersetzt. Auf dem ZCU102 verfügbare Pins wurden verwendet, um die entsprechenden Signale zu verbinden. Die restlichen Signale wurden mit unkritischen Pins verbunden; teilweise wurden Pins intern mit dem verfügbaren Processing System des ZCU102 Boards verbunden. Die Hook Files (vivado_hook_opt_design_post.tcl und vivado_hook_write_bitstream_pre.tcl) beinhalten den Begriff BRAM. Für Ultrascale+ Boards muss dieser in BLOCKRAM geändert werden. Zusätzlich wurden die generate_mmi-Befehle angepasst:
Um den Softcore programmieren zu können, müssen die BOOTSTRAP-PINs richtig gesetzt werden.
OpenTitan PIN
Werte vor dem Schreiben
Werte nach dem Schreiben
IOC8
0
1
IOC5
1
1
IOC0
1
0
IOC1
1
0
IOC2
1
0
jsrst_n_s
0 à 1 (Setzen des Resets)
0 à 1
Wenn diese Pins auf die richtigen Werte gesetzt wurden, kann der auszuführende Code über SPI auf den OpenTitan geladen werden.
Verbindung des Flashs mit dem OpenTitan
Bild 3: Das Blockdesign besteht aus den folgenden Modulen: AXI GPIO, AXI Interrupt Controller, AXI Quad SPI, AXI Interconnect, Processor System Reset und Zynq UltraScale+ MPSoC. Signale mit einem einzigen Bit werden als Schwarze Linien angezeigt. Signale mit mehreren Bits sind als Blaue Linien gekennzeichnet. Die Clocks und Resets der Module werden über das PS gesteuert. Über SW steuert das PS den AXI GPIO und den AXI Quad SPI wodurch die BOOTSTRAP Pins gesetzt werden und die Firmware auf den OpenTitan geladen wird
(Bild: Ingenics)
Um den Flash des ZCU102 benutzen zu können, muss das PS benutzt werden, da es keine direkte Verbindung zur PL gibt. Hierfür wurde ein Blockdesign mit den folgenden Komponenten erstellt (Bild 3):
AXI GPIO: Bootstrap Pins
AXI Interrupt Controller: PS Interrupts
AXI Quad SPI: SPI zum OpenTitan
AXI Interconnect: for AXI GPIO and AXI Quad SPI
Processor System Reset: Resets für das Blockdesign, von PS gesetzt
Zynq UltraScale+ MPSoC: Processing System (PS)
Software für Processing System
Die Software für das Processing System steuert die Module AXI GPIO und AXI Quad SPI, um die BOOTSTRAP Pins zu setzen, die Firmware aus dem Flash zu lesen und an den OpenTitan weiterzuleiten:
Initialisierung von AXI GPIO
Steuerung der Bootstrap Pins
Initialisierung des QSPI und SPI
Lesen des Flashs via QSPI and beschreiben des OpenTitan via SPI
Laden der Firmware
Es gibt mehrere Möglichkeiten, die Firmware auf das Bord zu laden:
1. Flashen der SW via OpenOCD 2. Flashen der SW in den SPI-Flash des ZCU102 und Weiterleitung via AXI und SPI in den OpenTitan. Das Eeprom Protokoll muss dafür genutzt werden und die BOOT Strap Pins müssen richtig gesetzt sein. 3. Die Verbindung vom Blockdesign zum OpenTitan können direkt von Linux genutzt werden. Die BOOT Strap Pins müssen richtig gesetzt werden und die Firmware wird dann über SPI geladen.
Der Portierungsaufwand zum Zeitpunkt der Portierung war größer als erwartet.
Der SAM3X Microcontroller wird bei der Ausführung der Host SW benötigt, was nicht in der Dokumentation beschrieben ist, wodurch das Laden der Firmware und das Steuern der Pins erschwert wurde. Unglücklicherweise gab es damals noch keine Suchfunktion für die Dokumentation, wodurch das Suchen nach Informationen noch zusätzlich erschwert wurde. Da der OpenTitan als ASIC in Produktion gehen soll, ist das Ziel des Softcores das Testen und Verifizieren der Funktionalität. Durch die beschränkten Ressourcen auf dem FPGA und das über die Entwicklung immer größer werdende Design wurde es immer schwieriger das Timing einzuhalten, weshalb der Clock Speed auf dem FPGA reduziert wurde. Die Information zu den niedrigen Clock-Raten auf dem CW310 ist bis heute nicht in der Dokumentation beschrieben. Andere RISC-V Softcores, wie z.B. Neorv32, Microblaze oder Ibex, können mit 100 MHz oder höher betrieben werden. Mit der derzeitigen Implementierung von clkgen_xil7series, wird der Ibex mit 24 MHz betrieben. Diese Clock-Geschwindigkeit könnte entsprechend auch auf dem ZCU102 möglich sein. Leider wird diese Geschwindigkeit für viele Anwendungen nicht den Anforderungen entsprechen. Letztendlich lohnt sich der Betrieb des OpenTitan als Softcore nur in einigen wenigen Fällen, wenn man zum einen die Sicherheitsfeatures nutzen will und ein entsprechend großes Board zur Verfügung hat. Man muss dann nur dafür sorgen, dass man die Software, die man ausführen will, auf den OpenTitan bekommt: Bootstrap, über SPI Daten schicken - mehr ist es nicht. (sg)