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[1] - Справочное руководство по языку SystemC (LRM). LRM обеспечивает окончательное изложение семантики SystemC. OSCI также предоставляет имитатор для подтверждения концепции с открытым исходным кодом (иногда неправильно называемый эталонным симулятором), который можно загрузить с веб-сайта OSCI.[2] Хотя намерением 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. Это могут быть простые провода или сложные механизмы связи, например ФИФО или автобусные каналы.

Элементарные каналы:

  • сигнал: эквивалент провода
  • буфер
  • фифо
  • мьютекс
  • семафор

Интерфейсы

Порты используют интерфейсы для связи с каналами.

События

События позволяют синхронизировать процессы и должны быть определены во время инициализации.

Типы данных

SystemC представляет несколько типов данных, которые поддерживают моделирование оборудования.

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

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

Типы логики:

  • sc_bit 2-значный одиночный бит
  • sc_logic 4-значный одиночный бит
  • sc_bv <п> вектор длины п из sc_bit
  • sc_lv <п> вектор длины п из 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 extension 1.0 LRM выпущена
  • 2011-11-10 IEEE утверждает стандарт IEEE 1666–2011 для SystemC[3]
  • 2016-04-06 IEEE утверждает стандарт IEEE 1666.1–2016 для SystemC AMS

SystemC ведет свое происхождение от работы над языком программирования Scenic, описанной в статье DAC 1997 года.[4]

РУКА ООО, CoWare, Synopsys и CynApps объединились для разработки SystemC (позже CynApps стал Forte Design Systems ), чтобы запустить его первую черновую версию в 1999 году.[5][6] Главным конкурентом в то время был SpecC другой пакет с открытым исходным кодом на основе C, разработанный Калифорнийский университет в Ирвине персонал и некоторые японские компании.

В июне 2000 г. группа стандартов, известная как Инициатива Open SystemC была создана, чтобы обеспечить нейтральную в отрасли организацию для проведения мероприятий по SystemC и предоставить крупнейшим конкурентам Synopsys, Cadence и Mentor Graphics, демократическое представительство в разработке SystemC.

Пример кода

Пример кода сумматор:

#включают "systemc.h"SC_MODULE(сумматор)          // объявление модуля (класса){  sc_in<int> а, б;        // порты  sc_out<int> сумма;  пустота do_add()           // процесс  {    сумма.записывать(а.читать() + б.читать()); // или просто sum = a + b  }  SC_CTOR(сумматор)          // конструктор  {    SC_METHOD(do_add);    // регистрируем do_add в ядре    чувствительный << а << б;  // список чувствительности do_add  }};

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

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

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

Примечания

  1. ^ «Обзор стандартов». standard.ieee.org.
  2. ^ www.systemc.org, веб-сайт инициативы Open SystemC В архиве 2008-10-06 на Wayback Machine
  3. ^ IEEE утверждает пересмотренный стандарт IEEE 1666 ™ «Язык SystemC» для проектирования электронных систем на уровне системы, добавляя поддержку моделирования на уровне транзакций - http://www.businesswire.com/news/home/20111109006054/en/IEEE-Approves-Revised-IEEE-1666%E2%84%A2-%E2%80%9CSystemC-Language%E2%80%9D
  4. ^ "ScenicDAC1997". CiteSeerX  10.1.1.56.6483. Цитировать журнал требует | журнал = (Помогите)
  5. ^ Synopsys и Co-Ware Inc., которые сделали большую часть работы над SystemC - http://www.electronicsweekly.com/Articles/1999/12/07/13906/stm-synopsys-in-3-year-rampd-deal.htm
  6. ^ "РУКА рад что Synopsys, CoWare и другие компании объединились на SystemC, потому что, если она будет принята в отрасли, она упростит наш мир ", - сказал Тюдор Браун, технический директор РУКА Ltd »в Babel языков, претендующих на роль в SoC - http://www.eetimes.com/ip99/ip99story1.html
  7. ^ http://sourceforge.net/projects/powersim/

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

  • 1666-2005 - Справочное руководство по стандартному языку системы C IEEE. 2006. Дои:10.1109 / IEEESTD.2006.99475. ISBN  0-7381-4871-7.
  • 1666-2011 - Справочное руководство стандарта IEEE для стандартного языка SystemC. 2012. Дои:10.1109 / IEEESTD.2012.6134619. ISBN  978-0-7381-6801-2.
  • Т. Грёткер, С. Ляо, Г. Мартин, С. Свон, Системный дизайн с SystemC. Спрингер, 2002. ISBN  1-4020-7072-1
  • Linux Live CD на основе SystemC с учебником по C ++ / SystemC
  • Дж. Бхаскер, Праймер SystemC, Второе издание, Star Galaxy Publishing, 2004. ISBN  0-9650391-2-9
  • Д. К. Блэк, Дж. Донован, SystemC: с нуля, 2-е изд., Springer 2009. ISBN  0-387-69957-0
  • Джордж Фрейзер, SystemC: аппаратно-ориентированные конструкции в C ++
  • Франк Генассия (редактор), Моделирование на уровне транзакций с помощью SystemC: концепции и приложения TLM для встроенных систем, Springer 2006. ISBN  0-387-26232-6
  • Стэн Ю. Ляо, Стивен В. К. Тцзян, Раджеш К. Гупта: Эффективная реализация реактивности для моделирования оборудования в среде живописного дизайна. DAC 1997: 70-75

внешняя ссылка