What are virtual prototypes?

Virtual Prototypes 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 Prototypes 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 Prototypes 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 Prototype should not see any difference when running virtual than when running in the real embedded system.

The speed of Software Virtual Prototypes 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 Prototype 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 Prototypes 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 prototypes available as Extendable Platform Kits (EPKs). EPKs are virtual prototypes  (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.


Currently available Imperas / OVP Virtual Platforms / Virtual Prototypes.

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