Примечание. Программное обеспечение PassMark может получать компенсацию за продажи по ссылкам на этом сайте через партнерские программы.
">DVCon 2021. Личный взгляд на историю SystemVerilog и Superlog
Информация о модели
На этой странице представлена подробная информация о модели быстрого процессора OVP ядра ARM AArch64. Владельцем IP-адреса процессора является ARM Holdings. Дополнительную информацию можно получить здесь.
Модель быстрого процессора OVP написана на C. Предоставляет C API для использования на платформах на основе C. Предоставляет собственный интерфейс C++ для использования на платформах SystemC TLM2.
Модель написана с использованием API VMI OVP, который предоставляет интерфейс виртуальной машины, определяющий поведение процессора. API VMI проводит четкую границу между моделью и симулятором, обеспечивая очень хорошую оптимизацию и высокую скорость мирового класса. производительность.
Модель предоставляется в виде двоичного общего объекта, а также доступна в виде исходного кода (у разных моделей разные условия лицензирования). Это позволяет загружать и использовать двоичный файл модели или использовать исходный код для изучения и изменения модели.
Модель прошла тщательный контроль качества и регрессионное тестирование.
Параллельное моделирование с использованием Imperas QuantumLeap
Инструменты разработки встроенного программного обеспечения
Эта модель выполняет инструкции целевой архитектуры и предоставляет интерфейс для доступа к отладке. Предоставляется интерфейс к GDB, что позволяет подключать многие стандартные отладчики, использующие интерфейс GDB/RSP. Для получения дополнительной информации посмотрите видео OVP здесь.
Симулятор набора инструкций (ISS) для ARM AArch64
ISS — это инструмент разработки программного обеспечения, который принимает инструкции для целевого процессора и выполняет их. Сердцем ISS является модель процессора. Imperas разработала ряд продуктов ISS для использования при разработке встраиваемого программного обеспечения, в которых используется эта модель быстрого процессора. Imperas ARM AArch64 ISS работает в системах Windows/Linux x86 и использует кросс-компилированный elf-файл вашей программы и обеспечивает очень быстрое выполнение. ARM AArch64 ISS также предоставляет доступ к стандартным отладчикам GDB/RSP и подключается к Eclipse IDE и отладчикам Imperas.
Обзор модели быстрого процессора ARM AArch64
Название варианта модели: AArch64 Описание: Модель процессора ARM Лицензирование: Использование двоичной модели по лицензии, регулирующей использование симулятора.
Обратите внимание, что для моделей процессоров ARM лицензия включает следующие условия:
Лицензиату предоставляется неисключительная, всемирная, непередаваемая, отзывная лицензия на:
Если Лицензиату не предоставляется исходный код: использовать и копировать только (права на изменения не предоставляются) модель с единственной целью проектирования, разработки, анализа, отладки, тестирования, проверки, проверки и оптимизации программного обеспечения, которое: ( а) (i) для систем на базе ARM; и (ii) не включает Модели ARM или любую их часть; и (б) такие модели ARM нельзя использовать для эмуляции системы на базе ARM для запуска прикладного программного обеспечения в производственной или реальной среде.
Если исходный код предоставляется Лицензиату: использовать, копировать и изменять модель с единственной целью проектирования, разработки, анализа, отладки, тестирования, проверки, проверки и оптимизации программного обеспечения, которое: (a) (i) для систем на базе ARM; и (ii) не включает Модели ARM или любую их часть; и (б) такие модели ARM нельзя использовать для эмуляции системы на базе ARM для запуска прикладного программного обеспечения в производственной или реальной среде.
В случае любого Лицензиата, который является либо академическим, либо образовательным учреждением, цели должны быть ограничены внутренним использованием.
За исключением случаев, когда такая деятельность разрешена применимым законодательством, Лицензиат не имеет права перепроектировать, декомпилировать или дизассемблировать эту модель. Если эта модель была предоставлена Лицензиату в Европе, Лицензиат не имеет права перепроектировать, декомпилировать или дизассемблировать Модель в целях исправления ошибок.
Лицензионное соглашение не дает Лицензиату права производить в кремнии какие-либо продукты на основе этой модели.
Лицензионное соглашение не дает Лицензиату права использовать эту модель для оценки действительности любого патента ARM.
Источник модели доступен по отдельному лицензионному соглашению об использовании программного обеспечения Imperas. Ограничения: Конвейеры инструкций никаким образом не моделируются. Предполагается, что все инструкции выполняются немедленно. Это означает, что инструкции барьера инструкций (например, ISB, CP15ISB) обрабатываются как NOP, за исключением любого неопределенного поведения инструкции, которое моделируется. Модель не реализует поведение спекулятивной выборки. Кэш ветвей не моделируется. Кэши и буферы записи никак не моделируются. Все загрузки, выборки и сохранения выполняются немедленно и по порядку и полностью синхронны (как если бы память была строго упорядоченной или типа Device-nGnRnE). Инструкции барьера данных (например, DSB, CP15DSB) обрабатываются как NOP, за исключением любого неопределенного поведения инструкции, которое моделируется. Инструкции по работе с кэшем реализованы как NOP, за исключением любого неопределенного поведения инструкций, которое моделируется. Реальные временные эффекты не моделируются: предполагается, что все инструкции выполняются за один цикл. Мониторы производительности реализованы только как интерфейс регистров, за исключением счетчика циклов, который реализован с учетом одной инструкции на цикл. TLB точны с точки зрения архитектуры, но не точны с точки зрения устройства. Это означает, что все операции обслуживания TLB и преобразования адресов реализованы полностью, но объем кэш-памяти больше, чем в реальном устройстве. Регистры отладки реализованы, но не работают (этого достаточно для загрузки таких операционных систем, как Linux). Состояние отладки не реализовано. Проверка: Модели были тщательно протестированы компанией Imperas. Модели ARM Cortex-A успешно использовались клиентами для имитации SMP Linux, Ubuntu Desktop, VxWorks и ThreadX на виртуальных платформах Xilinx Zynq. Основные функции: AArch64 реализован на уровне EL3, EL2, EL1 и EL0. . Реализованы следующие основные функции ARMv8.2: ARMv8.2-FP16, SVE Система памяти: Реализованы расширения безопасности (также известные как TrustZone). Чтобы сделать незащищенный доступ видимым извне, переопределите ID_AA64MMFR0_EL1.PARange, указав требуемый размер физической шины (32, 36, 40, 42, 44, 48 или 52 бита) и подключите процессор к шине на один бит шире (33, 37). , 41, 43, 45, 49 или 53 бит соответственно). Дополнительным старшим битом является бит NS, указывающий на незащищенный доступ. Если незащищенный доступ не требуется делать видимым извне, подключите процессор к шине точно такого размера, который подразумевает ID_AA64MMFR0_EL1.PARange. Реализована трансляция адресов VMSA EL1, EL2 и EL3 stage 1. Реализована трансляция адресов VMSA stage 2. LPA (расширение больших физических адресов) реализовано в стандарте ARMv8. Поведение TLB управляется параметром ASIDCacheSize. Если этот параметр равен 0, то одновременно будет поддерживаться неограниченное количество записей TLB. Если этот параметр отличен от нуля, то изначально одновременно будут поддерживаться только записи TLB для различных ASID до ASIDCacheSize; по мере использования новых ASID записи TLB для менее использовавшихся ASID удаляются, что в некоторых случаях повышает производительность модели (особенно при использовании 16-битных ASID). Если модель обнаружит, что кэш записей TLB слишком мал (выбросы записей происходят очень часто), она автоматически увеличит размер кэша. В этом варианте ASIDCacheSize равен 8 Расширенные возможности SIMD и операций с плавающей запятой: Реализованы инструкции SIMD и VFP. Модель реализует ловушки исключений, если для FPTrap установлено значение 1 в MVFR0 (для AArch32) или MVFR0_EL1 (для AArch64). Когда используются ловушки исключений с плавающей запятой, кумулятивные флаги исключений не обновляются (другими словами, кумулятивное состояние флага всегда такое же, как до выполнения инструкции, даже для инструкций SIMD). Когда несколько разрешенных исключений вызываются одной операцией с плавающей запятой, сообщается об исключении, которое находится в позиции младшего бита в FPSCR (для AArch32) или FPCR (для AArch64). Когда несколько разрешенных исключений вызываются различными вычислениями элемента SIMD, сообщаемое исключение выбирается из операции SIMD с наименьшим индексом. Свяжитесь с Imperas, если требования к отчету об исключениях отличаются от указанных. В этом варианте реализованы перехваченные исключения (FPTrap=1) Особенности SVE: Реализован SVE с 512-битными векторами. Точный набор поддерживаемых ширин векторов можно указать с помощью параметра «SVEImplementedSizes». Этот параметр является маской, в которой размер вектора Nx128 поддерживается, если бит 1. Для векторных нагрузок SVE по первому отказу и без отказа значение UNKNOWN, возвращаемое для ошибочных нагрузок (или отключенных FFR), может быть указано с помощью параметра «SVEFaultUnknown». . В этом варианте «SVEFaultUnknown» — это 0xdfdfdfdfdfdfdfdf. При работе с длиной вектора меньше максимальной длины значение недоступных элементов вектора и предиката сохраняется. Универсальный таймер: Присутствует универсальный таймер. Используйте параметр «override_timerScaleFactor», чтобы указать скорость счетчика как часть скорости процессора в MIPS (например, 10 означает, что счетчики универсального таймера увеличиваются каждые 10 инструкций процессора). Маска отладки: Возможно включить модель функции отладки в различных категориях. Это можно сделать статически с помощью параметра «override_debugMask» или динамически с помощью команды «debugflags». Включенные функции отладки указываются с использованием значения битовой маски следующим образом: Значение 0x004: включить отладку сопоставлений MMU/MPU. Значение 0x080: включить отладку всех обращений к системным регистрам. Значение 0x100: включить отладку всех ловушек доступа к системным регистрам. Значение 0x200: включить подробную отладку другого разнообразного поведения (например, причину, по которой конкретная инструкция не определена). Значение 0x400: включить отладку таймеров монитора производительности Значение 0x800: включить динамическую проверку записей TLB по содержимому таблицы страниц в памяти (находит некоторые классы ошибок, когда записи таблицы страниц обновляются без последующего сброса затронутые записи TLB). Все остальные биты в битовой маске отладки зарезервированы и не должны быть установлены в ненулевые значения. Поддержка интеграции: Эта модель реализует ряд неархитектурных псевдорегистров и другие функции. для облегчения интеграции. Запрос транзакции памяти: Два регистра предназначены для использования в функциях обратного вызова памяти для предоставления дополнительной информации о текущем доступе к памяти. Регистр transactPL указывает уровень выполнения процессором текущего доступа (0-3). Обратите внимание, что для инструкций загрузки/сохранения перевода (например, LDRT, STRT) сообщаемый уровень выполнения будет равен 0, что указывает на доступ EL0. Регистр transactAT указывает тип доступа к памяти: 0 для обычного чтения или записи; и 1 для физического доступа в результате обхода таблицы страниц. Запрос обхода таблицы страниц: Банковый набор регистров предоставляет информацию о последнем завершенном обходе таблицы страниц. Существует до шести банков регистров: банк 0 предназначен для обхода этапа 1, банк 1 — для обхода этапа 2, а банки 2–5 — для обхода этапа 2, инициированного поиском записей уровня 0–3 этапа 1 соответственно. Банки 1-5 присутствуют только для процессоров с расширениями виртуализации. Текущий активный банк можно установить с помощью регистра PTWBankSelect. Регистр PTWBankValid — это битовая маска, указывающая, какие банки содержат достоверные данные: например, значение 0xb указывает, что банки 0, 1 и 3 содержат достоверные данные. В каждом банке есть регистры, в которые записываются адреса и значения, прочитанные во время обхода таблицы страниц. Регистр PTWBase записывает базовый адрес таблицы, регистр PTWInput содержит входной адрес, с которого начинается обход, регистр PTWOutput содержит адрес результата, а регистр PTWPgSize содержит размер страницы (PTWOutput и PTWPgSize действительны, только если обход таблицы страниц завершается). Регистры PTWAddressL0-PTWAddressL3 записывают прочитанные адреса от уровня 0 до уровня 3 соответственно. Регистр PTWAddressValid представляет собой битовую маску, указывающую, какие адресные регистры содержат допустимые данные: биты 0-3 указывают PTWAddressL0-PTWAddressL3 соответственно, бит 4 указывает PTWBase, бит 5 указывает PTWInput, бит 6 указывает как PTWOutput, так и PTWPgSize. Например, значение 0x73 указывает, что PTWBase, PTWInput, PTWOutput, PTWPgSize и PTWAddressL0-L1 допустимы, а PTWAddressL2-L3 — нет. Регистр PTWAddressNS представляет собой битовую маску, указывающую, находится ли адрес в незащищенной памяти: биты 0-3 указывают PTWAddressL0-PTWAddressL3 соответственно, бит 4 указывает PTWBase, бит 6 указывает PTWOutput (PTWInput является VA и, следовательно, не имеет защищенного/незащищенного Информация). Регистры PTWValueL0-PTWValueL3 содержат значения записей таблицы страниц, считанные на уровне от 0 до уровня 3. Регистр PTWValueValid — это битовая маска, указывающая, какие регистры значений содержат достоверные данные: биты 0-3 указывают PTWValueL0-PTWValueL3 соответственно. Проходы по таблице страниц артефактов: Регистры также доступны для того, чтобы позволить среде моделирования инициировать обход таблицы страниц артефактов (например, чтобы определить конечный PA, соответствующий данному VA). Регистр PTWI_EL1S инициирует безопасный обход таблицы EL1 для выборки. Регистр PTWD_EL1S инициирует безопасный обход таблицы EL1 для загрузки или сохранения (обратите внимание, что современные процессоры ARM имеют унифицированные TLB, поэтому эти регистры являются синонимами). Регистры PTW[ID]_EL1NS инициируют обход для незащищенного доступа EL1. Регистры PTW[ID]_EL2 инициируют обход EL2. Регистры PTW[ID]_S2 инициируют обход этапа 2. Регистры PTW[ID]_EL3 инициируют обход AArch64 EL3. Наконец, регистры PTW[ID]_current инициируют обход в текущем режиме (полезно в контексте обратного вызова памяти). Каждый проход заполняет регистры запроса, описанные выше. События MMU и обхода таблицы страниц: Доступны два события, которые позволяют среде моделирования получать уведомления о действиях обхода MMU и таблицы страниц. Событие mmuEnable срабатывает при включении или отключении любого MMU. Событие pageTableWalk запускается по завершении любого обхода таблицы страниц (включая обход артефактов). Преобразование адреса артефакта: Среда моделирования может инициировать операцию преобразования адреса артефакта путем записи в архитектурные регистры преобразования адреса (например, ATS1CPR). . Результаты таких трансляций записываются в реестр поддержки интеграции ArtiftPAR вместо архитектурного реестра PAR. Это означает, что такие записи артефактов не будут нарушать состояние архитектуры. Недействительность TLB: Среда моделирования может привести к сбросу состояния TLB для одного или нескольких режимов преобразования адресов в процессоре путем записи в регистр артефактов ResetTLB. . Аргумент представляет собой значение битовой маски, в котором ненулевые биты выбирают TLB, подлежащие сбросу, следующим образом: Бит 0: EL0/EL1, этап 1, безопасный TLB Бит 1: EL0/EL1, этап 1, не -secure TLB Бит 2: EL2 этап 1 TLB Бит 3: EL0/EL1 незащищенный этап 2 TLB Бит 4: EL3 этап 1 TLB Остановка Причина Самоанализ: < br />Регистр артефакта HaltReason можно прочитать, чтобы определить причину или причины остановки процессора. Этот регистр представляет собой битовое поле со следующей кодировкой: бит 0 указывает, что процессор выполнил инструкцию ожидания события (WFE); бит 1 указывает, что процессор выполнил команду ожидания прерывания (WFI); а бит 2 указывает, что процессор находится в состоянии сброса. Мониторинг доступа к системному регистру: Если параметр "enableSystemMonitorBus" имеет значение True, артефактная 32-разрядная шина "SystemMonitor" включена для каждого PE. Каждый системный регистр, прочитанный или записанный этим PE, затем виден как прочитанный или записанный на этой шине артефактов, и поэтому его можно отслеживать с помощью обратных вызовов, установленных в клиентской среде (используйте opBusReadMonitorAdd/opBusWriteMonitorAdd или icmAddBusReadCallback/icmAddBusWriteCallback, в зависимости от клиентского API). . Формат адреса на шине следующий: биты 31:26 - ноль, бит 25 - 1, если доступ AArch64, 0, если доступ AArch32, бит 24 - 1, если незащищенный доступ, 0, если безопасный доступ биты 23:20 - значение CRm биты 19:16 - значение CRn биты 15:12 - значение op2 биты 11:8 - значение op1 биты 7:4 - значение op0 (AArch64) или номер сопроцессора (AArch32) биты 3:0 - ноль Например, для просмотра незащищенных операций записи в CNTFRQ_EL0 в AArch64 состояние, установите монитор записи в диапазоне адресов 0x020e0330:0x020e0333. Реализация системного регистра: Если параметр "enableSystemBus" равен True, артефакт 32-битной шины "System" включен для каждого PE. Подчиненные обратные вызовы, установленные на этой шине, могут использоваться для реализации измененного поведения системных регистров (используйте opBusSlaveNew или icmMapExternalMemory, в зависимости от клиентского API). Формат адреса на шине такой же, как и для шины системного монитора, описанной выше.
Модель загружается (требуется регистрация и вход в систему) в пакете arm.model для Windows32 и Linux32 Скачиваемый симулятор OVP (требуется регистрация и вход в систему) в пакете OVPsim для Windows32 и Linux32 Страница загрузки OVP здесь. Документация OVP, содержащая обзорную информацию о моделях процессоров, доступна в OVP_Guide_To_Using_Processor_Models.pdf.
Полная документация по конкретной модели для варианта AArch64 доступна в OVP_Model_Specific_Information_arm_AArch64.pdf.
В этом файле описывается ABI для экспорта регистров ID/функций ЦП AArch64 в пространство пользователя. Доступность этого ABI объявляется через HWCAP_CPUID в HWCAP.
1. Мотивация¶
Архитектура ARM определяет набор регистров функций, которые описывают возможности ЦП/системы. Доступ к этим системным регистрам ограничен с уровня EL0, и у приложения нет надежного способа извлечь эту информацию для принятия более эффективных решений во время выполнения. Информация, доступная приложению через HWCAP, ограничена, однако есть некоторые проблемы с их использованием.
- Любое изменение HWCAP требует обновления пользовательского пространства (например, libc) для обнаружения новых изменений, которые могут появиться в дистрибутивах через много времени. Предоставление доступа к регистрам позволяет приложениям получать информацию, не требуя обновления цепочек инструментов.
- Доступ к HWCAP иногда ограничен (например, до libc или когда ld инициализируется во время запуска).
- HWCAP не могут эффективно представлять нелогическую информацию. Архитектура определяет канонический формат для представления функций в регистрах ID; это хорошо определено и способно представлять все допустимые варианты архитектуры.
2. Требования¶
3. Реализация¶
Инфраструктура построена на эмуляции инструкции MRS.Доступ к ограниченному системному регистру из приложения генерирует исключение и заканчивается тем, что SIGILL доставляется процессу. Инфраструктура подключается к обработчику исключений и эмулирует операцию, если источник принадлежит поддерживаемому пространству системных регистров.
Инфраструктура эмулирует только следующее пространство системных регистров:
(См. Таблицу C5-6 «Кодировки системных инструкций для доступа к системным регистрам без отладки» в ARMv8 ARM DDI 0487A.h, список регистров).
- Значение поля "ОПРЕДЕЛЕННАЯ РЕАЛИЗАЦИЯ" равно 0.
- Значение зарезервированного поля заполняется зарезервированным значением, как определено архитектурой.
- Значение поля «видимый» содержит общесистемное безопасное значение для конкретной функции (за исключением MIDR_EL1, см. раздел 4).
- Все остальные поля (т. е. невидимые поля) указывают на отсутствие функции (как определено архитектурой).
4. Список регистров с видимыми функциями¶
ПРИМЕЧАНИЕ. «Видимые» поля MIDR_EL1 будут содержать значение, доступное на ЦП, где оно извлекается, и не является общесистемным безопасным значением.
Читайте также:
|