СистемаC
SystemC — это набор классов и макросов C++ , которые предоставляют интерфейс моделирования , управляемого событиями (см. также моделирование дискретных событий ). Эти средства позволяют разработчику моделировать параллельные процессы , каждый из которых описывается с использованием простого C++ синтаксиса . Процессы SystemC могут взаимодействовать в моделируемой среде реального времени, используя сигналы всех типов данных, предлагаемых C++, некоторых дополнительных типов, предлагаемых библиотекой SystemC, а также определяемых пользователем. В некоторых отношениях SystemC намеренно имитирует языки описания аппаратного обеспечения VHDL и Verilog , но его более точно можно назвать языком моделирования системного уровня .
SystemC применяется для моделирования на уровне системы , исследования архитектуры, моделирования производительности, разработки программного обеспечения , функциональной проверки и высокоуровневого синтеза . SystemC часто ассоциируется с проектированием на уровне электронной системы (ESL) и моделированием на уровне транзакций (TLM).
Спецификация языка [ править ]
SystemC определен и поддерживается Инициативой Open SystemC (OSCI — теперь Accellera ) и одобрен Ассоциацией стандартов IEEE как 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) и функции разрешения шины.
Начиная с версии 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 > 64sc_biguint<n>
n -битное целое число без знака для n > 64
Типы логики:
sc_bit
2-значный одиночный битsc_logic
4-значный одиночный битsc_bv<n>
вектор длины n sc_bitsc_lv<n>
вектор длины n sc_logic
Типы фиксированных точек:
sc_fixed<>
шаблонная фиксированная точка со знакомsc_ufixed<>
шаблонная фиксированная точка без знакаsc_fix
нешаблонная фиксированная точка со знакомsc_ufix
нешаблонная фиксированная точка без знака
История [ править ]
- 27 сентября 1999 г. объявлено об инициативе Open SystemC.
- 01 марта 2000 г. выпущен SystemC V0.91.
- 28 марта 2000 г. выпущен SystemC V1.0.
- 01 февраля 2001 г. выпущена спецификация SystemC V2.0 и исходный код бета-версии V1.2.
- 03.06.2003 выпущен SystemC 2.0.1 LRM (справочное руководство по языку).
- 6 июня 2005 г. выпущен стандарт моделирования на уровне транзакций SystemC 2.1 LRM и TLM 1.0.
- 12 декабря 2005 г. IEEE утверждает стандарт IEEE 1666–2005 для SystemC.
- 13 апреля 2007 г. выпущена SystemC v2.2.
- 09.06.2008 Выпущена библиотека TLM-2.0.0.
- 27 июля 2009 г. выпущен TLM-2.0 LRM в сопровождении библиотеки TLM-2.0.1.
- 2010-03-08 SystemC AMS 1.0 LRM Выпущены расширения
- 10 ноября 2011 г. IEEE утверждает стандарт IEEE 1666–2011 для SystemC. [3]
- 06 апреля 2016 г. IEEE утверждает стандарт IEEE 1666.1–2016 для SystemC AMS.
- 05.06.2023 IEEE утверждает стандарт IEEE 1666–2023.
SystemC берет свое начало от работы над языком программирования Scenic, описанным в статье DAC 1997 года. [4]
ARM Ltd., CoWare , Synopsys и CynApps объединились для разработки SystemC (позже CynApps стала Forte Design Systems ) и выпустила ее первую черновую версию в 1999 году. [5] [6] Главным конкурентом в то время был SpecC, еще один пакет с открытым исходным кодом на основе C, разработанный сотрудниками Калифорнийского университета в Ирвине и некоторыми японскими компаниями.
В июне 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 [7] — это библиотека классов SystemC, предназначенная для расчета мощности и энергопотребления оборудования, описанного на системном уровне. С этой целью операторы C++ отслеживаются, и для каждого типа данных SystemC можно использовать разные модели энергопотребления. Моделирование с помощью Powersim не требует каких-либо изменений в исходном коде приложения.
См. также [ править ]
Примечания [ править ]
- ^ «Просмотр стандартов» . Standards.ieee.org .
- ^ www.systemc.org, веб-сайт Open SystemC Initiative. Архивировано 6 октября 2008 г. на Wayback Machine.
- ^ (10 ноября 2011 г.) IEEE утверждает пересмотренный стандарт IEEE 1666™ «Язык SystemC» для проектирования электронных систем, добавляющий поддержку моделирования на уровне транзакций.
- ^ Ляо, Стэн; Цзян, Стив; Гупта, Раджеш (1997). «СценическийDAC1997» . стр. 100-1 70–75. CiteSeerX 10.1.1.56.6483 .
- ^ Synopsys and Co-Ware Inc., которые выполнили большую часть работы над SystemC — http://www.electronicsweekly.com/Articles/1999/12/07/13906/stm-synopsys-in-3-year- рампа-deal.htm
- ^ « ARM рада, что Synopsys , CoWare и другие компании объединились в SystemC, потому что, если она будет принята отраслью, это упростит наш мир», — сказал Тюдор Браун , технический директор ARM Ltd» в Babel о конкурирующих языках. на роль в SoC - http://www.eetimes.com/ip99/ip99story1.html
- ^ Загрузка Powersim | SourceForge.net
Ссылки [ править ]
- 1666-2005 — Справочное руководство по стандартному языку IEEE System C. 2006. doi : 10.1109/IEESTD.2006.99475 . ISBN 0-7381-4871-7 .
- Стандарт IEEE для стандартного языка SystemC. Справочное руководство . 2012. doi : 10.1109/IEESTD.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
- Стэн Ю. Ляо, Стивен В.К. Цзян, Раджеш К. Гупта: Эффективная реализация реактивности для моделирования оборудования в среде живописного проектирования. КСР 1997: 70–75.
Внешние ссылки [ править ]
- Официальный сайт
- Учебное пособие по SystemC
- ESCUG — Европейская группа пользователей SystemC
- NASCUG — Североамериканская группа пользователей SystemC
- LASCUG - Латиноамериканская группа пользователей SystemC
- ISCG - Индийская группа пользователей SystemC
- EDA Playground — бесплатная среда разработки C++/SystemC на базе веб-браузера.