VPR (pronounced “Viper”) is Nordic Semiconductor’s first RISC-V processor, landing in the new nRF54H and nRF54L lines of SoCs after their initial announcements in April and October of 2023 respectively. Readers of this blog are familiar with my long-running obsession interest in RISC-V (see my RISC-V Tips and RISC-V Bytes series). However, Nordic’s introduction of a RISC-V processor is particularly interesing to me as their lineup of microcontrollers is extremely popular in low power wireless domains, a common use case for Golioth customers.
Naturally, I was eager to look into the details of VPR as more information became available. A basic description of registers and initialization can be found in the nRF54L documentation. VPR is an RV32E processor, meaning that it uses 32-bit registers but implements only the lower 16 registers required by the embedded (E) specification rather than the 32 defined by the full 32-bit integer (RV32I) specification. It also implements multiplication and division operations (M), as well as the compressed instruction (C) extension, which adds support for 16-bit instruction variants to improve code density. All instructions are executed in machine mode (M), which is the only implemented privilege level.
Alongside the Arm Cortex-M33 application processor, nRF54L MCUs include a single VPR processor, referred to as the fast lightweight peripheral processor (FLPR, pronounced “flipper”), while the nRF54H20 includes both a FLPR and a peripheral processor (PPR, pronounced “pepper”) alongside its dual Arm Cortex-M33 application and network processors. The PPR is meant for peripheral handling with low power consumption and it runs at 16 MHz. The FLPR runs at 320 MHz and is intended for software-defined peripherals.