Open Virtual Platforms: Fast Simulation, Free open source models, Public APIs

Virtual Platforms have emerged as a highly effective alternative to the use of hardware prototypes or emulation systems for embedded software development. These mechanisms enable early project starts, comprehensive verification solutions, and advanced code analysis and debug, to significantly improve code quality and time-to-market.

OVP was formed in 2008 by Imperas Software, who donated a range of capabilities and model libraries to simplify the creation and use of virtual platforms. Imperas also provide a simulator, OVPsim, to demonstrate the OVP capabilities. Many engineers in both commercial and academic organizations have taken advantage of the tools and libraries on numerous projects worldwide.

OVP Overview

OVPsim, a high-performance software simulator, allows the simulation of code on processor models at 100s of millions of instructions per second on typical desktop machines. The OVP models interface to Imperas’ M*SDK range of advanced Verification, Profiling and Analysis (VAP) tools as well as the company’s unique 3Debug debugger. GDB and the Eclipse IDE may also be leveraged as part of the OVPsim solution.

Fully functional models, many of them open source, are available for processors from ARM, Imagination Technologies MIPS, Altera, OpenCores, PowerPC, Renesas, Synopsys ARC, Xilinx and others. The models and Imperas tools support homogeneous and heterogeneous multicore architectures as well as other functionality contained within the specific processors. In addition, a range of peripheral models and other components are included as well as complete example platforms for specific architectures.

The OVP APIs allow for a comprehensive modeling environment allowing users to easily create a wide variety of high performance components for use with OVPsim and other OVP simulators. Interfaces are included to industry standards, such as SystemC and TLM2.

See the model families available from OVPworld


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