Введение
Расширения C++ для моделирования встраиваемых систем
британская компания в сфере здравоохранения. SystemC – это набор классов и макросов C++, предоставляющих интерфейс моделирования, управляемый событиями (см. также моделирование дискретных событий). Эти средства позволяют разработчику моделировать параллельные процессы, каждый из которых описывается с использованием стандартного синтаксиса C++. Процессы SystemC могут взаимодействовать в моделируемой среде реального времени, используя сигналы всех типов данных, предлагаемых C++, некоторые дополнительные типы, предоставляемые библиотекой SystemC, а также определяемые пользователем. В некоторых аспектах SystemC сознательно имитирует языки описания аппаратуры VHDL и Verilog, однако его точнее описывать как язык системно-уровневого моделирования. SystemC применяется для системно-уровневого моделирования, исследования архитектуры, моделирования производительности, разработки программного обеспечения, функциональной верификации и высокоуровневого синтеза. SystemC часто ассоциируется с проектированием на уровне электронных систем (ESL) и моделированием на уровне транзакций (TLM).
SystemC is a set of C++ classes and macros which provide an event driven simulation interface (see also discrete event simulation). These facilities enable a designer to simulate concurrent processes, each described using plain C++ syntax. SystemC processes can communicate in a simulated real time environment, using signals of all the datatypes offered by C++, some additional ones offered by the SystemC library, as well as user defined. In certain respects, SystemC deliberately mimics the hardware description languages VHDL and Verilog, but is more aptly described as a system level modeling language. SystemC is applied to system level modeling, architectural exploration, performance modeling, software development, functional verification, and high level synthesis. SystemC is often associated with electronic system level (ESL) design, and with transaction level modeling (TLM).
Языковые спецификации
SystemC определяется и продвигается организацией Open SystemC Initiative (OSCI — теперь Accellera) и был утвержден IEEE Standards Association в качестве стандарта IEEE 1666 2011 — Руководства по языку SystemC (LRM). LRM содержит окончательное определение семантики SystemC. OSCI также предоставляет симулятор, реализующий концепцию с открытым исходным кодом (иногда ошибочно называемый эталонным симулятором), который можно загрузить с веб-сайта OSCI. Хотя изначально OSCI предполагала, что коммерческие разработчики и научные учреждения смогут создавать оригинальное программное обеспечение, соответствующее стандарту IEEE 1666, на практике большинство реализаций SystemC в той или иной степени базировались на симуляторе, реализующем концепцию, разработанном OSCI.
По сравнению с HDL
SystemC имеет семантическое сходство с VHDL и Verilog, но при использовании в качестве языка описания аппаратуры может обладать большим синтаксическим избытком по сравнению с ними. С другой стороны, он предоставляет более широкие возможности выражения, подобные объектно-ориентированному проектированию и классам-шаблонам. Хотя SystemC формально является библиотекой классов C++, его иногда рассматривают как самостоятельный язык. Исходный код компилируется с библиотекой SystemC (включающей в себя ядро симуляции) для получения исполняемого файла. Производительность реализации OSCI с открытым исходным кодом, как правило, ниже, чем у коммерческих симуляторов VHDL/Verilog при моделировании на уровне передачи регистров.
Версии
Версия SystemC 1 включала в себя типичные средства языка описания аппаратуры, такие как структурная иерархия и соединения, точность по тактовому циклу, дельта-циклы, четырехзначная логика (0, 1, X, Z) и функции разрешения конфликтов на шине. Начиная с версии SystemC 2, основное внимание уделялось абстракции коммуникаций, моделированию на уровне транзакций и моделированию виртуальных платформ. Также были добавлены абстрактные порты, динамические процессы и уведомления о событиях с временной задержкой.
Модули
В SystemC существует понятие класса-контейнера, называемого модулем. Это иерархическое образование, которое может содержать другие модули или процессы. Модули являются базовыми строительными блоками иерархии проектирования в SystemC. Модель SystemC обычно состоит из нескольких модулей, взаимодействующих посредством портов. Модули можно рассматривать как основной строительный элемент SystemC.
Порты
Порты обеспечивают связь изнутри модуля с внешней средой (обычно с другими модулями) посредством каналов.
Сигналы
SystemC поддерживает сигналы с разрешением конфликтов и без разрешения конфликтов. Сигналы с разрешением конфликтов могут иметь более одного источника (шины), в то время как сигналы без разрешения конфликтов могут иметь только один источник.
Экспорт
Модули имеют порты, посредством которых они соединяются с другими модулями. SystemC поддерживает порты однонаправленного и двунаправленного действия. Экспорты включают каналы и обеспечивают связь изнутри модуля с внешней средой (обычно с другими модулями).
Процессы
Процессы используются для описания функциональности. Процессы содержатся внутри модулей. SystemC предоставляет три различных абстракции процессов для использования разработчиками аппаратного и программного обеспечения. Процессы являются основными вычислительными элементами. Они выполняются параллельно.
Интерфейсы
Порты используют интерфейсы для связи с каналами.
События
События обеспечивают синхронизацию между процессами и должны быть определены на этапе инициализации.
Оценка мощности и энергии в SystemC
Оценка мощности и энергопотребления может быть выполнена в SystemC посредством моделирования. Powersim – это библиотека классов SystemC, предназначенная для вычисления мощности и энергии, потребляемой аппаратным обеспечением, описанным на системном уровне. Для этого отслеживаются операторы C++ и для каждого типа данных SystemC могут применяться различные энергетические модели. Моделирование с использованием Powersim не требует внесения изменений в исходный код приложения.