stringtranslate.com

СистемаC

SystemC — это набор классов и макросов C++ , которые предоставляют интерфейс моделирования , управляемый событиями (см. также дискретное моделирование событий ). Эти возможности позволяют проектировщику моделировать параллельные процессы , каждый из которых описывается с использованием простого синтаксиса C++ . Процессы SystemC могут взаимодействовать в моделируемой среде реального времени, используя сигналы всех типов данных, предлагаемых C++, некоторые дополнительные типы, предлагаемые библиотекой SystemC, а также определяемые пользователем. В некоторых отношениях SystemC намеренно имитирует языки описания оборудования VHDL и Verilog , но более точно описывается как язык моделирования системного уровня .

SystemC применяется к моделированию на уровне системы , архитектурному исследованию, моделированию производительности, разработке программного обеспечения , функциональной проверке и высокоуровневому синтезу . SystemC часто ассоциируется с проектированием на уровне электронной системы (ESL) и с моделированием на уровне транзакций (TLM).

Спецификация языка

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

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

Типы логики:

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

История

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.

Пример кода

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

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

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

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

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

Примечания

  1. ^ "Просмотр стандартов". IEEE . Архивировано из оригинала 21 декабря 2007 г.
  2. ^ www.systemc.org, веб-сайт Open SystemC Initiative Архивировано 06.10.2008 на Wayback Machine
  3. ^ (10 ноября 2011 г.) IEEE одобряет пересмотренный стандарт IEEE 1666™ «SystemC Language» для проектирования электронных систем на уровне, добавляя поддержку моделирования на уровне транзакций
  4. ^ Ляо, Стэн; Тьянг, Стив; Гупта, Раджеш (1997). "ScenicDAC1997". стр. 70–75. 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. ^ « ARM рада, что Synopsys , CoWare и другие компании объединились для SystemC, потому что если это будет принято отраслью, это упростит наш мир», — сказал Тюдор Браун, главный технический директор ARM Ltd. в Babel о языках, конкурирующих за роль в SoC - http://www.eetimes.com/ip99/ip99story1.html
  7. ^ Загрузка Powersim | SourceForge.net

Ссылки

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