OVPsim — это эмулятор многопроцессорной платформы (часто называемый полносистемным симулятором ), используемый для запуска неизмененных производственных двоичных файлов целевого оборудования. Он имеет общедоступные API, позволяющие пользователям создавать собственные модели процессоров , периферийных устройств и платформ. Различные модели доступны с открытым исходным кодом. [1] OVPsim — это ключевой компонент инициативы Open Virtual Platforms (OVP), [2] организации, созданной для продвижения использования открытых виртуальных платформ для разработки встроенного программного обеспечения. Для загрузки OVPsim требуется регистрация в OVP.
OVPsim разработан и поддерживается компанией Imperas. [3] Основная платформа моделирования является проприетарным программным обеспечением ; она доступна бесплатно для некоммерческого использования. Для коммерческого использования требуется недорогая лицензия от Imperas для покрытия расходов на обслуживание. Различные модели процессоров, периферийных устройств и платформ доступны как бесплатное программное обеспечение по лицензии Apache версии 2.0 .
Существует три основных компонента OVP: модели с открытым исходным кодом , быстрый симулятор OVPsim и API моделирования . Эти компоненты разработаны для упрощения сборки многоядерных гетерогенных или гомогенных платформ со сложными иерархиями памяти, системами кэширования и слоями встроенного программного обеспечения, которые могут работать со скоростью сотен MIPS на стандартных настольных ПК. OVPSim считается точным по инструкциям , но не точным по циклам. На домашней странице OVP есть много примеров компонентов и полных виртуальных платформ, которые могут загружать ядро Linux менее чем за 5 секунд.
В OVP есть несколько различных категорий моделей. Эти модели предоставляются как в виде предварительно скомпилированного объектного кода, так и в виде исходных файлов, как в некоторых случаях. OVPsim больше не предоставляет исходный код для моделей процессоров ARM и MIPS. В настоящее время существуют модели процессоров ARM (процессоры, использующие наборы инструкций ARMv4, ARMv5, ARMv6, ARMv7, ARMv8) до ARM Cortex-A72MPx4 (включая многокластерные модели ARMv8 с GICv3), Imagination MIPS (процессоры, использующие наборы инструкций MIPS32 , MIPS64 , microMIPS, nanoMIPS и MIPS R6) до ядер microAptiv, interAptiv, proAptiv и Warrior, Synopsys Virage ARC600/ARC700 и серии ARC EM, Renesas v850 , RH850, RL78 и m16c, PowerPC , Altera Nios II , Xilinx MicroBlaze , RISC-V (модели, использующие 32-битные RV32I, RV32M, RV32IM, RV32A, RV32IMA, RV32IMAC, RV32F, RV32D, RV32E, RV32EC, RV32C, RV32G, RV32GC, RV32GCN, RV32IMAFD и 64-битные подмножества ISA RV64I, RV64M, RV64IMAC, RV64F, RV64D, RV64C, RV64G, RV64GC, RV64GCN, RV64IMAFD), Andes Technology N25/NX25, N25F/NX25F, A25/AX25, A25F/AX25F, Microsemi CoreRISCV/MiV-RV32IMA, SiFive E31, E51, U54, U54-MC, Freedom U540, Codasip Series 1, 3, 5, 7 Ядра RISC-V, ядро Intel NiosV RISC-V, Texas Instruments TMS320 DSP и семейства OpenRisc . Группа OpenHW использует OVPsim в качестве эталона для своих ядер с открытым исходным кодом RISC-V CV32E40 и CV32E20. Существуют также модели многих различных типов системных компонентов, включая RAM, ROM, кэш и мост. Существуют периферийные модели, такие как Ethernet MAC, USB, DMA, UART и FIFO. Доступно несколько различных готовых платформ, включая наиболее распространенные операционные системы [4] ucLinux , Linux , Android , FreeRTOS , Nucleus , Micrium.
Одним из основных применений инфраструктуры моделирования OVP является возможность создания и моделирования пользовательских моделей — либо с нуля, либо с использованием одной из моделей с открытым исходным кодом в качестве отправной точки. API OVP адаптированы к различным типам моделей: процессорам, поведенческим моделям периферийных устройств и платформам. Для загрузки доступно более 100 вариантов исходных моделей.
Симулятор OVPsim доступен как справочный материал OVP и бесплатен для некоммерческого использования. Симулятор использует технологию динамической двоичной трансляции для достижения очень высоких скоростей симуляции. В некоторых случаях на обычных настольных компьютерах возможно более миллиарда симулированных инструкций в секунду. OVPsim доступен для хостов x86 Windows и Linux .
OVPsim поставляется с интерфейсом GDB RSP (Remote Serial Protocol), позволяющим отлаживать приложения, работающие на моделируемых процессорах, с помощью любого стандартного отладчика, поддерживающего этот интерфейс GDB RSP. OVPsim поставляется с графическим отладчиком Imperas iGui, а также с интерфейсом Eclipse IDE и CDT.
OVPsim может быть инкапсулирован и вызван из других сред моделирования [5] и поставляется в стандартной комплектации с файлами интерфейса для C , C++ и SystemC . [6] OVPsim включает собственные файлы интерфейса SystemC TLM 2.0. Также возможно инкапсулировать устаревшие модели процессоров и поведенческие модели, чтобы их мог использовать OVPsim.
Модели OVP создаются с использованием API C / C++ . Существует три основных API: OP, VMI, BHM/PPM.
API OP предназначен для управления, подключения и наблюдения за платформами. Этот API можно вызывать из C, C++ или SystemC. Платформа обеспечивает базовую структуру дизайна и создает, подключает и настраивает компоненты. Платформа также определяет сопоставление адресов и программное обеспечение, которое загружается на процессоры. С помощью OP очень легко указать очень сложные и полные платформы из множества различных процессоров, локальной и общей памяти, кэшей, шинных мостов, периферийных устройств и всех их сложных сопоставлений адресов, прерываний и операционных систем и прикладного программного обеспечения.
В 2016 году API OP заменил API ICM. API ICM по-прежнему можно использовать на старых платформах.
Моделирование процессора обеспечивается API VMI. Эти функции API предоставляют возможность легко описывать поведение процессора. Модель процессора, написанная на языке C с использованием VMI, декодирует целевую инструкцию для моделирования и транслирует ее в собственные инструкции x86, которые затем выполняются на ПК. VMI можно использовать для моделирования 8-, 16-, 32- и 64-битных архитектур. Существует механизм перехвата, позволяющий эмулировать вызовы функций в библиотеках времени выполнения приложений (таких как write, fstat и т. д.) без необходимости изменения модели процессора или моделируемого приложения.
Поведенческие компоненты, периферийные устройства и общая среда моделируются с использованием кода C и вызовов этих двух API. В основе этих API лежит механизм планирования на основе событий, позволяющий моделировать время, события и параллелизм. Периферийные модели предоставляют обратные вызовы, которые вызываются, когда прикладное программное обеспечение, работающее на процессорах, смоделированных на платформе, получает доступ к ячейкам памяти, где включено периферийное устройство.
OVPsim используется несколькими образовательными учреждениями для предоставления инфраструктуры моделирования для исследования параллельных вычислительных платформ, [7] [8] совместного проектирования аппаратного и программного обеспечения, [9] анализа производительности встроенных систем, [10] а также в качестве основы для разработки других встроенных инструментов. [ необходима ссылка ] Он также используется в образовательных курсах, позволяя студентам разрабатывать и отлаживать прикладное программное обеспечение, а также создавать виртуальные платформы и новые модели.
Ряд ведущих коммерческих организаций также используют OVPsim в качестве основы для своих продуктовых предложений. Технология была лицензирована MIPS [11] Technologies для предоставления поддержки моделирования для их линейки встроенных процессоров архитектуры MIPS , функций в партнерстве с ведущим поставщиком процессоров ARM, [12] [13] и является частью линейки продуктов Europractice [14] для общего доступа в европейских университетах. Версия OVPsim используется рабочей группой по соблюдению требований RISC-V Foundation [15] в качестве эталонного симулятора. Ведущие компании-производители полупроводников, такие как Renesas, использовали симулятор для своей работы по разработке процессоров, как раскрыто в ведущих публикациях электронной промышленности. [16] Он был выбран NEPHRON+, исследовательским проектом ЕС, для своей среды разработки программного обеспечения и тестов. [17] VinChip Systems Inc. из Ченнаи , Индия, использовала OpenOCD и OVPsim для разработки, возможно, первого 32-битного процессора, разработанного в Индии. [18] Модели OVP и виртуальные платформы формируют основу для других видов деятельности, осуществляемых Imperas.
... VinChip Systems Inc. выпустила ..., который, по ее словам, является первым 32-разрядным процессором, разработанным в Индии. ... Поддержка виртуального прототипирования была предоставлена ... симулятором OVPsim ...