What are virtual platforms?

Virtual Platforms are really just another name for “simulation of your system”. They are basically simulations of your design. They are behavioral models that model your system and run the software that runs on the processors inside your design.

Virtual Platforms are targeted at the software developer, are Instruction Accurate, have only the needed functionality, and can run blisteringly fast enabling true full system simulation at real time speeds. It is easy to get 100s of MIPS performance in a Multi-Core simulation on a standard desktop PC, with speeds over 1,000 MIPS being possible.

When targeting software development it is not necessary to provide all the functionality of all the components; the only essential requirement is that it is possible to run the production binaries unmodified. This means that the simulations must be fully Instruction Accurate, the processors must be modeled with all interrupts and similar commands correct, and the peripherals and behavioral models are register accurate and provide the appropriate functionality. Often models can be created from databooks and most models are very simple to create. For example, a 32 bit RISC processor should take less than 8 weeks to develop.

One great thing about Software Virtual Platforms is that they enable the building of a simulation of the whole system – including the environment – that the embedded system interacts with, thus enabling a truly representative proxy. Software running in a Software Virtual Platform should not see any difference when running virtual than when running in the real embedded system.

The speed of Software Virtual Platforms allows billions upon billions of lines of code to be run on many processors – with full observability, controllability and many more analysis options than available in the real hardware. In many cases a Software Virtual Platform will run much faster than the real hardware. And of course, in contrast to hardware, software models can be deployed around the world instantly.

Some Virtual Platforms are available as binary for execution only and some are available as full source of all models and the platform itself.

Imperas makes makes many of its OVP (Open Virtual Platforms) based virtual platfoms available as Extendable Platform Kits (EPKs). EPKs are virtual platforms (simulation models) of the target devices, including the processor model(s) for the target device plus enough peripheral models to boot an operating system or run bare metal applications.  The platform and the peripheral models included in the EPKs are open source, so that users can easily add new models to the platform as well as modify the existing models.

Read more about Imperas EPKs for MIPS here, and for ARM here.

Downloading the Virtual Platforms

All of the platforms and models listed on this site are available for download and are available with the full source (some are fully open source, some of the advanced CPU models require a specific license agreement) – please browse to the individual virtual platform you are interested in and follow the links for downloading listed specifically for each model. (A full list is available here.)

The models are provide by Open Virtual Platforms and you need to register and log in there to download. Open Virtual Platforms provides both the models and a simulator.

Professional tools that use these models are available. The Imperas tools provide multi-core Debug, Verification, Analysis and Profiling of software running on bare metal platforms or full operating systems like Linux. Please visit Imperas Software for more information.


Currently available Imperas / OVP Virtual Platforms / Virtual Prototypes for Embedded Software Development and Test Automation.

FamilyVirtual Platform / Virtual Prototype
ARM Based Platforms    BareMetalArm7Single BareMetalArmCortexADual BareMetalArmCortexASingle BareMetalArmCortexASingleAngelTrap BareMetalArmCortexMSingle AlteraCycloneV_HPS ArmIntegratorCP ArmVersatileExpress ArmVersatileExpress-CA15 ArmVersatileExpress-CA9 AtmelAT91SAM7 ArmCortexMFreeRTOS ArmCortexMuCOS-II HeteroArmNucleusMIPSLinux FreescaleKinetis60 FreescaleKinetis64 FreescaleVybridVFxx AlteraCycloneV_HPS ArmIntegratorCP ARMv8-A-FMv1 ArmVersatileExpress ArmVersatileExpress-CA15 ArmVersatileExpress-CA9 AtmelAT91SAM7 ArmCortexMFreeRTOS ArmCortexMuCOS-II ArmuKernel iMX6S Zynq_PS
MIPS Based Platforms    BareMetalM14KSingle BareMetalMips32Dual BareMetalMips32Single BareMetalMips64Single BareMetalMipsDual BareMetalMipsSingle HeteroArmNucleusMIPSLinux MipsMalta MipsMalta
Vendor Platforms    BareMetalNios_IISingle AlteraCycloneIII_3c120 AlteraCycloneV_HPS AlteraCycloneIII_3c120 AlteraCycloneV_HPS BareMetalArcSingle BareMetalArm7Single BareMetalArmCortexADual BareMetalArmCortexASingle BareMetalArmCortexASingleAngelTrap BareMetalArmCortexMSingle ArmIntegratorCP ArmVersatileExpress ArmVersatileExpress-CA15 ArmVersatileExpress-CA9 ArmIntegratorCP ARMv8-A-FMv1 ArmVersatileExpress ArmVersatileExpress-CA15 ArmVersatileExpress-CA9 AtmelAT91SAM7 AtmelAT91SAM7 FreescaleKinetis60 FreescaleKinetis64 FreescaleVybridVFxx Or1kUclinux ArmCortexMFreeRTOS ArmCortexMuCOS-II HeteroArmNucleusMIPSLinux ArmCortexMFreeRTOS ArmCortexMuCOS-II ArmuKernel ArmuKernelDual Quad_ArmVersatileExpress-CA15 RiscvRV32FreeRTOS BareMetalM14KSingle BareMetalMips32Dual BareMetalMips32Single BareMetalMips64Single BareMetalMipsDual BareMetalMipsSingle MipsMalta MipsMalta iMX6S BareMetalOr1kSingle BareMetalM16cSingle BareMetalPowerPc32Single BareMetalV850Single ghs-multi RenesasUPD70F3441 ghs-multi RenesasUPD70F3441 virtio FaultInjection Zynq_PL_DualMicroblaze Zynq_PL_NoC Zynq_PL_NoC_node Zynq_PL_NostrumNoC Zynq_PL_NostrumNoC_node Zynq_PL_RO Zynq_PL_SingleMicroblaze Zynq_PL_TTELNoC Zynq_PL_TTELNoC_node XilinxML505 XilinxML505 zc702 zc706 Zynq Zynq_PL_Default Zynq_PS