SystemC - SystemC

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 представляет несколько типов данных, которые поддерживают моделирование оборудования.

Расширенные стандартные типы:

  • sc_int < n > n -битовое целое число со знаком
  • sc_uint < n > n -битовое целое число без знака
  • sc_bigint < n > n -битовое целое число со знаком для n > 64
  • sc_biguint < n > n -битовое целое число без знака для n > 64

Типы логики:

  • sc_bit 2-значный одиночный бит
  • sc_logic 4-значный одиночный бит
  • sc_bv < n > вектор длины n sc_bit
  • sc_lv < n > вектор длины n из sc_logic

Типы фиксированной точки:

  • sc_fixed <> шаблонная фиксированная точка со знаком
  • sc_ufixed <> шаблонная фиксированная точка без знака
  • sc_fix незаметная фиксированная точка со знаком
  • sc_ufix беззнаковая фиксированная точка без знака

История

  • 1999-09-27 Объявлена ​​инициатива Open SystemC
  • 2000-03-01 Выпущен SystemC V0.91
  • 2000-03-28 Выпущен SystemC V1.0
  • 2001-02-01 Выпущена спецификация SystemC V2.0 и исходный код V1.2 Beta
  • 2003-06-03 Выпущен SystemC 2.0.1 LRM (справочное руководство по языку)
  • 2005-06-06 Выпущен стандарт моделирования на уровне транзакций SystemC 2.1 LRM и TLM 1.0
  • 2005-12-12 IEEE утверждает стандарт IEEE 1666–2005 для SystemC
  • 2007-04-13 Выпущен SystemC v2.2
  • 2008-06-09 Выпущена библиотека TLM-2.0.0
  • 2009-07-27 Выпущен TLM-2.0 LRM с библиотекой TLM-2.0.1
  • 2010-03-08 Выпущены расширения SystemC AMS 1.0 LRM
  • 2011-11-10 IEEE утверждает стандарт IEEE 1666–2011 для SystemC
  • 2016-04-06 IEEE утверждает стандарт IEEE 1666.1–2016 для SystemC AMS

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_in<int> a, b;        // ports
  sc_out<int> 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 << a << b;  // sensitivity list of do_add
  }
};

Оценка мощности / энергии в SystemC

Оценка мощности / энергии может быть выполнена в SystemC посредством моделирования. Powersim - это библиотека классов SystemC, предназначенная для расчета мощности и энергопотребления оборудования, описываемого на системном уровне. С этой целью отслеживаются операторы C ++, и для каждого типа данных SystemC могут использоваться разные модели энергопотребления. Моделирование с помощью Powersim не требует изменения исходного кода приложения.

Смотрите также

Ноты

Рекомендации

внешние ссылки

  • Официальный веб-сайт
  • SystemC Учебник
  • ESCUG - Европейская группа пользователей SystemC
  • NASCUG - Североамериканская группа пользователей SystemC
  • LASCUG - Латиноамериканская группа пользователей SystemC
  • ISCUG - Индийская группа пользователей SystemC
  • EDA Playground - бесплатная среда разработки C ++ / SystemC на базе веб-браузера