SystemC - это набор классов и макросов C ++, которые предоставляют интерфейс моделирования, управляемый событиями (см. Также моделирование дискретных событий ). Эти возможности позволяют проектировщику моделировать параллельные процессы, каждый из которых описывается с использованием простого синтаксиса C ++. Процессы SystemC могут обмениваться данными в смоделированной среде реального времени, используя сигналы всех типов данных, предлагаемых C ++, некоторых дополнительных, предлагаемых библиотекой SystemC, а также определяемых пользователем. В некоторых отношениях SystemC намеренно имитирует языки описания оборудования VHDL и Verilog, но более точно описывается как язык моделирования на уровне системы.
SystemC применяется для моделирования на уровне системы, исследования архитектуры, моделирования производительности, разработки программного обеспечения, функциональной проверки и синтеза высокого уровня. SystemC часто ассоциируется с проектированием на уровне электронной системы (ESL) и с моделированием на уровне транзакций (TLM).
SystemC определена и продвигается инициативой Open SystemC (OSCI - теперь Accellera ) и одобрена IEEE Standards Association как IEEE 1666-2011 - Справочное руководство по языку SystemC (LRM). LRM обеспечивает окончательное изложение семантики SystemC. OSCI также предоставляет имитатор с открытым исходным кодом, подтверждающий концепцию (иногда неправильно называемый эталонным симулятором), который можно загрузить с веб-сайта OSCI. Хотя намерением OSCI было, чтобы коммерческие поставщики и научные круги могли создавать оригинальное программное обеспечение, совместимое с IEEE 1666, на практике большинство реализаций SystemC, по крайней мере, частично основывались на имитаторе проверки концепции OSCI.
SystemC имеет семантическое сходство с VHDL и Verilog, но можно сказать, что он имеет синтаксические накладные расходы по сравнению с ними при использовании в качестве языка описания оборудования. С другой стороны, он предлагает более широкий диапазон выражений, аналогичный объектно-ориентированному разделению дизайна и классам шаблонов. Хотя SystemC является строго библиотекой классов C ++, иногда рассматривается как самостоятельный язык. Исходный код можно скомпилировать с библиотекой SystemC (которая включает ядро моделирования), чтобы получить исполняемый файл. Производительность реализации OSCI с открытым исходным кодом обычно менее оптимальна, чем у коммерческих симуляторов VHDL / Verilog при использовании для моделирования уровня передачи регистров.
SystemC версии 1 включает общие функции языка описания оборудования, такие как структурная иерархия и возможность подключения, точность тактового цикла, дельта-циклы, четырехзначная логика (0, 1, X, Z) и функции разрешения шины. Начиная с версии 2, центр внимания SystemC переместился на абстракцию связи, моделирование на уровне транзакций и моделирование виртуальной платформы. В SystemC версии 2 добавлены абстрактные порты, динамические процессы и уведомления о событиях по времени.
В SystemC есть понятие контейнерного класса, называемого модулем. Это иерархический объект, в котором могут содержаться другие модули или процессы.
Модули - это основные строительные блоки иерархии проектирования SystemC. Модель SystemC обычно состоит из нескольких модулей, которые обмениваются данными через порты. Модули можно рассматривать как строительный блок SystemC.
Порты обеспечивают связь изнутри модуля с внешним (обычно с другими модулями) по каналам.
SystemC поддерживает разрешенные и неразрешенные сигналы. У разрешенных сигналов может быть более одного драйвера (шины), в то время как у неразрешенных сигналов может быть только один драйвер.
У модулей есть порты, через которые они подключаются к другим модулям. SystemC поддерживает однонаправленные и двунаправленные порты.
Экспорт включает каналы и обеспечивает связь изнутри модуля с внешним (обычно с другими модулями).
Процессы используются для описания функциональности. Процессы содержатся внутри модулей. SystemC предоставляет три различных абстракции процессов для использования разработчиками оборудования и программного обеспечения. Процессы - это основные вычислительные элементы. Они совпадают.
Каналы - это коммуникационные элементы SystemC. Они могут быть либо простыми проводами, либо сложными механизмами связи, такими как FIFO или шинные каналы.
Элементарные каналы:
Порты используют интерфейсы для связи с каналами.
События позволяют синхронизировать процессы и должны быть определены во время инициализации.
SystemC представляет несколько типов данных, которые поддерживают моделирование оборудования.
Расширенные стандартные типы:
Типы логики:
Типы фиксированной точки:
SystemC ведет свое происхождение от работы над языком программирования Scenic, описанной в статье DAC 1997 года.
ARM Ltd., CoWare, Synopsys и CynApps объединились для разработки SystemC (CynApps позже стал Forte Design Systems ), чтобы запустить его первый вариант проекта в 1999 году главный конкурент в то время был SpecC другой на основе C пакет с открытым исходным кодом, разработанный UC Irvine персонала и некоторые японские компании.
В июне 2000 года была сформирована группа стандартов, известная как Open SystemC Initiative, чтобы обеспечить нейтральную в отрасли организацию для проведения мероприятий SystemC и дать возможность крупнейшим конкурентам Synopsys, Cadence и Mentor Graphics, демократически представиться в разработке SystemC.
Пример кода сумматора :
#include "systemc.h" SC_MODULE(adder) // module (class) declaration { sc_inlt;intgt; a, b; // ports sc_outlt;intgt; sum; void do_add() // process { sum.write(a.read() + b.read()); //or just sum = a + b } SC_CTOR(adder) // constructor { SC_METHOD(do_add); // register do_add to kernel sensitive lt;lt; a lt;lt; b; // sensitivity list of do_add } };
Оценка мощности / энергии может быть выполнена в SystemC посредством моделирования. Powersim - это библиотека классов SystemC, предназначенная для расчета мощности и энергопотребления оборудования, описываемого на системном уровне. С этой целью отслеживаются операторы C ++, и для каждого типа данных SystemC могут использоваться разные модели энергопотребления. Моделирование с помощью Powersim не требует изменения исходного кода приложения.