System c что это
Перейти к содержимому

System c что это

  • автор:

System c что это

Язык SystemC — это библиотека специальных классов для языка C++, которая позволяет создавать эффективные и точные модели программных алгоритмов, аппаратных архитектур, интерфейсов и схем на системном уровне, т.е. практически всех компонентов встроенных систем.

На данном сайте представлен базовый материал, посвященный языку SystemC:

Обзор современных языков описания аппаратуры; особенности построения моделей на языке SystemC; описание этапов создания моделей с использованием среды разработки ЦА, поддерживающей язык SystemC; основы SystemC; примеры разработки моделей ЦА на языке SystemC; материал, включающий различные статьи, посвященные языку SystemC; ссылки на литературу.

28.07.2008 — Добавлен новый материал «Знакомство с SystemC».

SystemC

SystemC — язык проектирования и верификации моделей системного уровня, реализованный в виде C++ библиотеки с открытым исходным кодом. [1] Библиотека включает в себя ядро событийного моделирования, что позволяет получить исполняемую модель устройства. Язык применяется для построения транзакционных и поведенческих моделей, а также для высокоуровневого синтеза.

Язык SystemC использует ряд понятий, схожих с теми, которые имеют языки описания аппаратуры VHDL и Verilog: интерфейсы, процессы, сигналы, событийность, иерархия модулей. Стандарт SystemC не вносит ограничения на использование языка C++ при описании моделей систем.

Разработан черновик стандарта на синтез SystemC, целью которого является определить подмножество языков С++ и SystemC, пригодное для поведенческого и RTL синтеза. [2]

Стандарты

  • IEEE Std. 1666-2005 IEEE Standard SystemC Language Reference Manual [3]

Пример

Пример описания модели сумматора:

#include "systemc.h" // подключение заголовочного файла библиотеки SystemC SC_MODULE(adder) // декларация модуля (класса)  sc_inint> a, b; // порты sc_outint> sum; void do_add() // процесс  sum = a + b; > SC_CTOR(adder) // конструктор  SC_METHOD(do_add); // регистрация процесса do_add в ядре моделирования sensitive   ; // список чувствительности процесса do_add > >; 

Особенности языка

Модули (module)

Модули — базовые строительные блоки в SystemC. Модель в SystemC обычно состоит из нескольких модулей, которые общаются через порты.

Сигналы (signal)

Сигналы в SystemC являются эквивалентом посылки по проводу (wire).

Порты (port)

Через порты происходит общение модуля с внешним миром (обычно с другими модулями).

Процессы (process)

Процессы — главные вычислительные элементы. Процессы выполняются параллельно.

Каналы (channel)

Через каналы в SystemC происходит общение элементов. Каналы могут быть простыми проводами или сложными соединительными механизмами наподобие очередей FIFO или шин.

Интерфейсы (interface)

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

События (events)

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

Типы данных

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

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

  • sc_int<> 64-разрядное знаковое целое число
  • sc_uint<> 64-разрядное беззнаковое целое число
  • sc_bigint<> знаковое целое число произвольной разрядности
  • sc_biguint<> беззнаковое целое число произвольной разрядности
  • sc_bit 2-значный бит
  • sc_logic 4-значный бит
  • sc_bv<> вектор (одномерный массив) из sc_bit
  • sc_lv<> вектор sc_logic

Типы чисел с фиксированной точкой (Fixed point types):

  • sc_fixed<> templated signed fixed point
  • sc_ufixed<> templated unsigned fixed point
  • sc_fix untemplated signed fixed point
  • sc_ufix untemplated unsigned fixed point

Список приложений, поддерживающих SystemC

  • AldecActive-HDL, Riviera [4] , совместное моделирование.
  • Cadence Design Systems C-to-Silicon Compiler [5] , синтез.
  • Synopsys System Studio [6] , моделирование, анализ, верификация.
  • Mentor Graphics Catapult C Synthesis [7] , синтез.
  • Forte Design Systems Cynthesizer [8] , синтез.
  • Calypto SLEC System [9] , анализ кода.
  • Jeda Validation Tools Suite [10] , анализ кода.
  • SystemCrafter SystemCrafter SC [11] , синтез.

Примечания

  1. About SystemC (англ.) . — краткое описание языка SystemC. (недоступная ссылка — история) Проверено 13 августа 2009.
  2. OSCI Drafts Under Public Review (англ.) . — список черновиков стандартов OSCI. Архивировано из первоисточника 21 марта 2012.Проверено 13 августа 2009.
  3. IEEE-SA GetIEEE 1666 Terms of Use
  4. Aldec — Technologies — SystemC
  5. Cadence C-to-Silicon Compiler
  6. System Studio
  7. Catapult C Synthesis — Correct-by-Construction, High-Quality RTL, 10-100x Faster — Mentor Graphics
  8. Cynthesizer Closes the ESL-to-Silicon Gap
  9. Calypto | SLEC System
  10. JEDA Products | ESL Model Validation Automation
  11. SystemCrafter — Products

См. также

  • Программное обеспечение по алфавиту
  • Библиотеки C++
  • САПР
  • Стандарты IEEE
  • Языки описания аппаратуры
  • Языки проектирования

Wikimedia Foundation . 2010 .

  • Syslinux
  • System Idle Process

Полезное

Смотреть что такое «SystemC» в других словарях:

  • SystemC — is often thought of as a hardware description language like VHDL and Verilog, but is more aptly described as a system description language , since it exhibits its real power during transaction level modeling and behavioral modeling. SystemC is a… … Wikipedia
  • SystemC — ist eine Modellierungs und Simulationssprache insbesondere für die Entwicklung von komplexen elektronischen Systemen, die sowohl Hardware als auch Softwarekomponenten enthalten. Im Gegensatz zu reinen Hardwarebeschreibungssprachen (wie VHDL und… … Deutsch Wikipedia
  • SystemC — es frecuentemente descrito como un lenguaje de descripción de hardware como son VHDL y Verilog, pero es más adecuado describirlo como un lenguaje de descripción de sistemas, puesto que es realmente útil cuando se usa para modelar sistemas a nivel … Wikipedia Español
  • SystemC — es frecuentemente descrito como un lenguaje de descripción de hardware como son VHDL y Verilog, pero es más adecuado describirlo como un lenguaje de descripción de sistemas, puesto que es realmente útil cuando se usa para modelar sistemas a nivel … Enciclopedia Universal
  • SystemC — Introduction SystemC est souvent présenté comme un langage de description de matériel, au même titre que VHDL ou verilog. En fait, SystemC est un langage de description de plus haut niveau, puisqu il permet une modélisation de systèmes au niveau… … Wikipédia en Français
  • Hardware description language — In electronics, a hardware description language or HDL is any language from a class of computer languages and/or programming languages for formal description of electronic circuits. It can describe the circuit s operation, its design and… … Wikipedia
  • Transaction-level modeling — (TLM) is a high level approach to modeling digital systems where details of communication among modules are separated from the details of the implementation of functional units or of the communication architecture. Communication mechanisms such… … Wikipedia
  • NCSim — Incisive Developer(s) Cadence Design Systems Operating system Cross platform Type Simulator License proprietary … Wikipedia
  • Juzzle — est une plateforme de développement open source de mise au point et d exploitation de simulateurs, utilisée depuis de nombreuses années dans les domaines de la simulation scientifique par la communauté industrielle française. Cet environnement se … Wikipédia en Français
  • Verilog — Класс языка: Язык описания аппаратуры Появился в: 1983 1984 Автор(ы): Phil Moorby, Prabhu Goel Расширение файлов: .v Verilog, Verilog HDL (англ. Verilog Hardwar … Википедия
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

system , _wsystem

Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

int system( const char *command ); int _wsystem( const wchar_t *command ); 

Параметры

command
Команда для выполнения.

Возвращаемое значение

Если параметр command имеет значение NULL и найден интерпретатор команд, возвращает ненулевое значение. Если интерпретатор команды не найден, возвращает значение 0 и задает errno значение ENOENT . Если command это не NULL так, system возвращает значение, возвращаемое интерпретатором команд. Она возвращает значение 0, только если интерпретатор команд возвращает значение 0. Возвращаемое значение -1 указывает на ошибку и errno имеет одно из следующих значений:

значение Description
E2BIG Список аргументов (который зависит от системы) слишком велик.
ENOENT Не удается найти интерпретатор команд.
ENOEXEC Невозможно выполнить файл интерпретатора команд, так как формат недействителен.
ENOMEM Недостаточно памяти доступно для выполнения команды; или доступная память повреждена; или недопустимый блок существует, который указывает, что вызывающий процесс был выделен неправильно.

Дополнительные сведения о кодах возврата см. в разделе errno , _doserrno _sys_errlist и _sys_nerr .

Замечания

Функция system передает параметр command интерпретатору команд, который выполняет эту строку как команду операционной системы. Для поиска файла интерпретатора команд CMD.exe функция system использует переменные среды COMSPEC и PATH . Если параметр command имеет значение NULL , функция только проверяет, существует ли интерпретатор команд.

Перед вызовом system необходимо явно очистить или fflush _flushall закрыть любой поток.

_wsystem — это версия system с расширенными символами; аргумент command для _wsystem — строка расширенных символов. В остальном эти функции ведут себя одинаково.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью «Глобальное состояние» в CRT.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tsystem system system _wsystem

Требования

Маршрут Обязательный заголовок
system или
_wsystem или или

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

В этом примере функция system используется для печати (TYPE) текстового файла.

// crt_system.c #include int main( void )

Входные данные: crt_system.txt

Line one. Line two. 

Выходные данные

Line one. Line two. 

System c что это

Модули и
Иерархия

Рисунок 2.1 – Главные компоненты языка SystemC

Имитатор SystemC имеет 3 главные фазы работы: разработка, выполнение и постобработка [1]. Выполнение всех операторов до конструкции sc_start() есть фаза разработки. На этом этапе происходит инициализация структур данных и подготовка к следующей фазе выполнения. Фаза выполнения передает управление ядру моделирования SystemC, которое управляет работой всех процессов и создает иллюзию параллельности их выполнения. Постобработка связана с удалением всех созданных структур данных, освобождением памяти и завершением этапа моделирования.

Принцип работы ядра моделирования SystemC схож с языками VHDL и Verilog. Если обратиться к Verilog и VHDL, то может показаться, что каждый процесс начинается сразу. В действительности проходит некоторое время между инициализацией кода и началом моделирования. В SystemC, также как и в C/C++, есть строго определенная точка входа в программу. В случае SystemC – sc_main().

В библиотеке SystemC существует тип данных sc_time для того чтобы измерять время в процессе моделирования. У времени есть две составляющие: числовое значение и размерность. Языком поддерживается измерение времени в секундах, миллисекундах, микросекундах, наносекундах, пикосекундах, фемтосекундах.

Соответствующие спецификаторы времени следующие:

  • SC_SEC // секунды
  • SC_MS // миллисекунды
  • SC_US // микросекунды
  • SC_NS // наносекунды
  • SC_PS // пикосекунды
  • SC_FS // фемтосекунды

Объявление переменных времени выглядит следующим образом:

sc_time имя_переменной (числовой значение, спецификатор);
sc_time t_Period(10, SC_NS);

Над переменными типа sc_time SystemC позволяет производить операции сложения, вычитания, масштабирования и др. В библиотеке определена константа SC_ZERO_TIME, которая соответствует времени 0.

Метод sc_start() запускает фазу моделирования, которая состоит из инициализации и выполнения. Метод может принимать параметр типа sc_time, который является ограничением максимального времени моделирования. Без параметра sc_start() запускает фазу моделирования, которая будет протекать бесконечно, пока в программе не встретится метод sc_stop(), который принудительно завершает моделирование.

Метод wait() используется в SystemC для того чтобы моделировать задержки реальных действий (например: механических воздействий, химических реакций или распространения сигнала). С помощью метода можно приостановить выполнение процесса SC_THREAD на промежуток времени или до появления какого-либо события:

sc_time t_delay(25, SC_FS);
wait(t_delay);

Данный метод позволяет определить в момент вызова, сколько времени прошло с начала моделирования, например:

sc_time t_delay1(10, SC_NS);
sc_time t_delay2(25, SC_NS);
cout wait(t_dalay1);
cout wait(t_delay2);
cout В результате исполнения данного проекта, мы получем на экране следующие сообщения:
Текущее время моделирования: 0 s
Текущее время моделирования: 10 ns
Текущее время моделирования: 35 ns

В «таблице 2.1» представлены типы данных, поддерживаемые SystemC. В «таблице 2.2» представлены операции над данными, поддерживаемые SystemC [1].

Таблица 2.1 – Основные типы данных, поддерживаемые SystemC

Одиночный бит, принимающий значение true или false. Использовать данных тип не рекомендуется, более предпочтительно применение типа bool

Вектор, содержащий n бит. Рекомендуется использовать sc_uint , где это возможно

Одиночный бит, который принимает значения 0, 1, X, Z

Вектор, содержащий n бит, типа sc_logic

Вектор, содержащий n целых чисел, размером 64 бит

Вектор, содержащий n целых чисел, размером более 64 бит

К поддерживаемым типам данных также относятся другие типы данных С++, такие как bool, int, unsigned int, long, unsigned long, char, unsigned char, short, unsigned short, struct, enum.

Таблица 2. Операции над данными, поддерживаемые SystemC

&(and), |(or), ^(xor), and ~(not)

Инкремент и декремент

to_uint( ) и to_int( )

Модуль в SystemC – это базовый элемент, включающий в себя процессы (processes) и другие модули. SC_MODULE – макроc C++. На «рисунке 2.2» изображен модуль, который включает в себя несколько процессов.

Рисунок 2.1 – Модуль, содержащий несколько процессов

Описание каждого модуля на SystemC содержится в заголовочном файле module_name.h и содержит:

  • Объявление портов;
  • Объявление внутренних сигналов;
  • Объявление внутренних переменных;
  • Объявление экземпляров подмодулей;
  • Конструктор;
  • Деструктор;
  • Процессы;
  • Функции процессов;
  • Вспомогательные функции.

Пример описания заголовочного файла модуля SystemC:

#include «systemc.h»
SC_MODULE (имя модуля)
SC_CTOR (module_name) // Конструктор
//Объявление процессов
//Объявление чувствительного списка
>
>;

Порты необходимы для взаимодействия модулей между собой. Каждый модуль может включать любое количество входных (inputs), выходных (outputs) и смешанных (inouts) портов.

Порты — это члены объекта SC_MODULE. Вы можете объявлять любое число портов типа sc_in, sc_out, sc_inout. Конструкция sc_inout позволяет читать значение из выходного порта модуля.
Пример описания портов на SystemC:

SC_MODULE (module_name)
sc_in < bool >port_name;
sc_out < char >port_name;
sc_inout < sc_logic >port_name;
SC_CTOR ( module_name)
// Объявление процессов
// Объявление списка чувствительных сигналов
>
>;

Порты используются для взаимодействия модуля с другими модулями. Внутри модуля необходимо использовать внутренние сигналы (Internal Signals) для передачи данных от одного процесса к другому.
Пример описания сигналов на SystemC:

SC_MODULE (module_name)
// Объявление портов
sc_in < port_type>port_name;
sc_out < port_type>port_name;
// Объявление сигналов
sc_signal < signal_type>signal_name;
sc_signal < signal_type>signal1, signal2;
SC_CTOR ( module_name)
// Объявление процессов
// Объявление списка чувствительных сигналов
>
>;

Внутри модуля вам предоставляется возможность создавать переменные любого типа, поддерживаемого SystemC и C++. Эти переменные могут участвовать во всех взаимодействиях внутри создаваемого модуля.
Пример описания переменных на SystemC:

SC_MODULE (module_name)
// Объявление портов
sc_in < port_type>port_name;
sc_out < port_type>port_name;
// Объявление внутренних сигналов
sc_signal < signal_type>signal_name;
// Объявление внутренних переменных
int count_val; //Internal counter
sc_int mem[1024]; // Массив sc_int
SC_CTOR ( module_name)
// Объявление процессов
// Объявление списка чувствительных сигналов
>
>;

Примечание. Нельзя использовать внутренние переменные для взаимодействия между процессами. Это может привести к ошибкам на этапе симуляции проекта.

Вы можете объявлять одну или несколько функций, которые не являются процессами. Этот тип функций не будет объявлен в конструкторе модуля. Данные функции могут быть вызваны внутри процесса для реализации дополнительных вычислений. На данный тип функций не накладываются ограничения на использование аргументов и тип возвращаемых значений.

С помощью методов чтения и записи можно считывать значения из портов или сигналов, а также записывать значения в порты или сигналы. Рекомендуется использовать функции read() и write() для чтения и записи значений:

address = into.read(); // чтение адреса
temp1 = address; // сохранение адреса
data_tmp = memory[address]; // чтение адреса из памяти
outof.write(data_tmp); // запись в выходной порт

Примечание. Для того чтобы считать или записать отдельный бит порта или сигнала, необходимо сначала записать значение этого порта или сигнала во внутреннюю переменную и произвести выборку отдельного бита из переменной:

sc_signal > a;
sc_int b;
bool c;
b = a.read();
c = b[0];
// c = a[0]; //Данная запись не корректна в SystemC

Изменение значения при присваивании сигналу или выходному порту не происходит до завершения процесса. В случае с внутренними переменными присваивание происходит мгновенно.

Чтобы создать иерархический модуль, необходимо:

  • Объявить в начале модуля объекты составных модулей;
  • В конструкторе модуля необходимо задать уникальное имя каждому отдельному составному элементу;
  • Записать значения во входные порты каждого отдельного модуля, а также указать переменную, сигнал или выходной порт, куда будет записан результат работы модуля.

Процессы в SystemC необходимы для того, чтобы в системе описать параллельное поведение физических элементов [3, c.77]. Это означает, что все процессы выполняются одновременно, а не последовательно как функции в C++.

Описание процесса схоже с описанием функции на C++. Процесс объявляется как функция класса SC_MODULE и регистрируется в его конструкторе. Процесс не принимает параметров и не возвращает значения.

Разработчику необходимо задать список чувствительных входов и сигналов модуля, чтобы определить изменения на каких входах должны спровоцировать начало работы процесса модуля.

Процесс способен читать и записывать значения входных и выходных портов, внутренних сигналов (Internal Signals) и внутренних переменных (Internal variables).

Самый простой тип процесса в SystemC это SC_THREAD. Процесс SC_THREAD в SystemC идентичен программному потоку. В C/C ++ программы, есть только один поток, работающий для всей программы. Ядро SystemC позволяет многим потокам выполняться параллельно. Процесс SC_THREAD запускается в процессе моделирования только один раз, однако его выполнение можно приостановить методом wait(). При завершении процесса, запустить его повторно нельзя, поэтому, данный тип процесса, как правило, содержит бесконечный цикл, имеющий по крайней мере один вызов функции wait().

В отличие от процесса SC_THREAD, процесс SC_METHOD никогда не приостанавливается (вызов функции wait() внутри процесса SC_METHOD приведет к ошибке), однако может быть вызван несколько раз в процессе моделирования, что делает его в некоторых случаях более предпочтительным. Данный тип процесса подобен процессам языков VHDL и Verilog. SC_METHOD поддерживает конструкцию next_trigger(), которая определяет динамическую чувствительность процесса (последующего вызова).

Процесс SC_CTHREAD является небольшой модификацией процесса SC_THREAD с добавлением возможности динамической чувствительности, речь о котором в данной работе не пойдет.

Процесс в SystemC объявляется в теле модуля и регистрируется как процесс внутри конструктора. Необходимо объявлять процесс как функцию void, не содержащую аргументов. При регистрации функции как SC_METHOD процесс, необходимо использовать конструкцию SC_METHOD, которая имеет один аргумент – имя процесса.

Пример описания процесса на SystemC:

SC_MODULE(my_module)
sc_in a;
sc_in b;
sc_out x;
sc_out y;
sc_signalc;
sc_signal d;
void my_method_proc();
SC_CTOR(my_module)
SC_METHOD(my_method_proc);
// Объявление списка чувствительных сигналов
>
>;

Процессы реагируют на изменение сигналов, которые находятся в списке чувствительных входов. Возможно использование функций sensitive(), sensitive_pos() или sensitive_neg() или потоков sensitive, sensitive_pos, sensitive_neg при описании списка чувствительности (sensitivity list).

Для комбинаторной логики, спискок чувствительных входов приравнивает все входные порты (input и inout ports) и сигналы (signals) к входным сигналам процесса. Для реализации level-sensitive входов необходимо использовать метод sensitive так, как показано в примере:

SC_MODULE(my_module)
sc_in a;
sc_in b;
sc_out y;
sc_signalc;
void my_method_proc();
SC_CTOR(my_module)
SC_METHOD(my_method_proc);
// Объявление списка чувствительных сигналов sensitive sensitive(b); //Функциональное описание
sensitive(e); //Функциональное описание
>
>;

Примечание: Во избежание риска возникновения ошибок на этапе симуляции проекта, включайте все входные порты в список чувствительных портов при реализации комбинаторной логики. В примере показана ситуация с неполным перечнем входов, отображенном в списке чувствительных портов.

void comb_proc ()
out_x = in_a & in_b & in_c;
>
SC_CTOR( comb_logic_complete )
SC_METHOD( comb_proc);
sensitive >

Пример описания заголовочного файла модели элемента 3И на SystemC:
#include «systemc.h»

Конструкция Edge-Sensitive используется для реализации последовательностной логики, при моделировании триггеров. Для этого необходимо использовать такие потоки как sensitive_neg (срез), sensitive_pos (фронт). Входные порты должны иметь тип sc_in, ниже приведен пример использования конструкции edge-sensitive:

SC_MODULE(my_module)
sc_in a;
sc_in b;
sc_in clock;
sc_out y;
sc_in reset;
sc_signalc;
void my_method_proc();
SC_CTOR(my_module)
SC_METHOD(my_method_proc);
sensitive_pos (clock); // Функциональное описание
sensitive_neg >
>;

Ограничения при использовании Sensitivity Lists:

  • Нельзя совмещать конструкции Level-Sensitive и Edge-Sensitive в одном процессе;
  • Нельзя применять тип sc_logic для реализации синхросигнала (clock) или других Edge-Sensitive’s входов. Допустимым является только тип sc_in.

Пример описания заголовочного файла JK-триггера на SystemC:

Событие – это нечто, происходящее в определенное время. У события нет никакого значения и продолжительности, оно либо произошло, либо еще нет. В SystemC событие определяется с помощью класса sc_event. Процессы могут реагировать на события, но для этого в списке чувствительности процесса должно быть явно указано событие, к которому он будет чувствителен, например,
sc_event delay;

SC_METHOD(do_delay);
sensitive

Событие можно вызвать с помощью метода notify(), в качестве параметра может быть указан промежуток времени в формате sc_time, через которое событие должно произойти (в таком случае, событие будет запланированным), например,

// Событие произойдет немедленно
delay.notify();
// Событие произойдет через промежуток времени 0
delay.notify(SC_ZERO_TIME);
// Событие произойдет через промежуток времени 20 нс (запланированное событие)
delay.notify(20, SC_NS);
Отменить вызов запланированного события можно с помощью метода cancel():
delay.cancel();

Ниже приведен пример модели логического элемента НЕ7404, задержка срабатывания которого реализовано с помощью события:

В данном примере временная задержка реализована с использованием события. Событие delay, объявленное в теле модуля происходит тогда, когда, на входе элемента НЕ меняется входной сигнал (sc_in A;), метод do_delay чувствителен к изменению сигнала A. Команда delay.notify(22, SC_NS) активизирует событие delay спустя 22 ns, в свою очередь метод do_not, чувствительный к событию delay, реагирует и меняет значение на выходе елемента НЕ.

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

Интерфейс в SystemC – это абстрактный класс, наследуемый от базового класса sc_interface, в котором объявлены виртуальные методы, которые используют каналы и порты [3, c.130].

Канал в SystemC – это класс, который осуществляет один или более интерфейсов SystemC, наследуется от sc_channel или от sc_prim_channel [3, c.130].

В случае использования интерфейсов, мы можем создавать модули, не зависимые от реализации каналов коммуникации, примером интерфейса в SystemC может служить sc_mutex_if. Примитивный канал, реализующий данный интерфейс – это sc_mutex. Данный канал используется при моделировании разделяемого ресурса:

sc_mutex NAME;
NAME.lock(); // Чтобы занять ресурс NAME
NAME.trylock(); // Чтобы занять ресурс NAME (true – ресурс не занят, false – иначе).
NAME.unlock() // Освободить ресурс

В SystemC существуют также другие примитивные каналы, такие как sc_fifo и sc_semaphore. Sc_signal, речь о котором шла в предыдущих главах данной работы, тоже является каналом SystemC.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *