OVPsim — это эмулятор многопроцессорной платформы (часто называемый полносистемным симулятором ), используемый для запуска неизмененных производственных двоичных файлов целевого оборудования. Он имеет общедоступные API , позволяющие пользователям создавать свои собственные модели процессоров , периферийных устройств и платформ. Различные модели доступны с открытым исходным кодом. [1] OVPsim является ключевым компонентом инициативы «Открытые виртуальные платформы» (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-битные RV64I, RV64 М, РВ64ИМАК, РВ64Ф, РВ64Д, РВ64К , RV64G, RV64GC, RV64GCN, RV64IMAFD подмножества ISA), 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 с открытым исходным кодом. Существуют также модели различных типов системных компонентов, включая ОЗУ, ПЗУ, кэш и мост. Существуют периферийные модели, такие как 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.
OP API предназначен для управления, подключения и наблюдения за платформами. Этот API можно вызвать из C, C++ или SystemC. Платформа обеспечивает базовую структуру проекта, а также создает, соединяет и настраивает компоненты. Платформа также определяет сопоставление адресов и программное обеспечение, загружаемое на процессоры. С помощью OP очень легко указать очень сложные и полные платформы множества различных процессоров, локальной и общей памяти, кэшей, шинных мостов, периферийных устройств и всех их сложных карт адресов, прерываний, операционных систем и прикладного программного обеспечения.
OP API заменил ICM API в 2016 году. ICM API по-прежнему можно использовать на старых платформах.
Моделирование процессора обеспечивается 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 [15] в качестве эталонного симулятора. Ведущие полупроводниковые компании, такие как Renesas, использовали симулятор для разработки процессоров, о чем сообщается в ведущих публикациях электронной промышленности. [16] Он был выбран исследовательским проектом ЕС NEPHRON+ в качестве среды разработки программного обеспечения и тестирования. [17] Компания VinChip Systems Inc. из Ченнаи , Индия, использовала OpenOCD и OVPsim для разработки, возможно, первого 32-битного процессора, разработанного в Индии. [18] Модели OVP и виртуальные платформы составляют основу для других видов деятельности, проводимых Imperas.
... VinChip Systems Inc. выпустила ..., который, по ее утверждению, является первым 32-битным процессором, разработанным в Индии. ...Поддержку виртуального прототипирования обеспечил...симулятор OVPsim...