Введение

Расширения C++ для моделирования встраиваемых систем

британская компания в сфере здравоохранения. SystemC – это набор классов и макросов C++, предоставляющих интерфейс моделирования, управляемый событиями (см. также моделирование дискретных событий). Эти средства позволяют разработчику моделировать параллельные процессы, каждый из которых описывается с использованием стандартного синтаксиса C++. Процессы SystemC могут взаимодействовать в моделируемой среде реального времени, используя сигналы всех типов данных, предлагаемых C++, некоторые дополнительные типы, предоставляемые библиотекой SystemC, а также определяемые пользователем. В некоторых аспектах SystemC сознательно имитирует языки описания аппаратуры VHDL и Verilog, однако его точнее описывать как язык системно-уровневого моделирования. SystemC применяется для системно-уровневого моделирования, исследования архитектуры, моделирования производительности, разработки программного обеспечения, функциональной верификации и высокоуровневого синтеза. SystemC часто ассоциируется с проектированием на уровне электронных систем (ESL) и моделированием на уровне транзакций (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 не требует внесения изменений в исходный код приложения.