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.

Пример кода

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

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

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

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

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

Примечания

  1. ^ «Просмотр стандартов» . Standards.ieee.org .
  2. ^ www.systemc.org, веб-сайт Open SystemC Initiative. Архивировано 6 октября 2008 г. на Wayback Machine.
  3. ^ (10 ноября 2011 г.) IEEE утверждает пересмотренный стандарт IEEE 1666™ «Язык SystemC» для проектирования электронных систем, добавляющий поддержку моделирования на уровне транзакций.
  4. ^ Ляо, Стэн; Цзян, Стив; Гупта, Раджеш (1997). «ЖивописныйDAC1997». стр. 70–75. CiteSeerX 10.1.1.56.6483 . 
  5. ^ Synopsys and Co-Ware Inc., которые выполнили большую часть работы над SystemC — http://www.electronicsweekly.com/Articles/1999/12/07/13906/stm-synopsys-in-3-year- рампа-deal.htm
  6. ^ « ARM рада, что Synopsys , CoWare и другие компании объединились в SystemC, потому что, если она будет принята отраслью, это упростит наш мир», — сказал Тюдор Браун, технический директор ARM Ltd» в Babel о конкурирующих языках. на роль в SoC - http://www.eetimes.com/ip99/ip99story1.html
  7. ^ Загрузка Powersim | SourceForge.net

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

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