Знакомство с SystemC
 

3. СОЗДАНИЕ МОДЕЛЕЙ НА SYSTEMC С ПОМОЩЬЮ СРЕДЫ РАЗРАБОТКИ ЦА

 

На главную | К содержанию | К предыдущей главе | К следующей главе

3.1. Компиляция проекта SystemC


Проект на языке SystemC состоит из набора файлов .cpp и .h. Для того чтобы полноценно работать, не требуется какая-либо среда разработки, поддерживающая данный язык. Достаточным условием является наличие компилятора C++ и библиотеки SystemC. На «рисунке 3.1» изображена схема процесса компиляции проекта на SystemC.


Рисунок 3.1 – Процесс компиляции проекта SystemC


Компилятор C++ обрабатывает файлы .h и .cpp из набора файлов проекта SystemC и создает объектные файлы (расширение файла .o). После создания объектных файлов компоновщик связывает созданные объектные файлы и соответствующие объектные файлы библиотеки SystemC (и других библиотек, таких как стандартная библиотека шаблонов или STL). В результате создается исполняемый файл, который содержит в себе ядро моделирования SystemC с функциональными возможностями исходного проекта.


Компилятор и компоновщик должны располагать информацией о местонахождении файла заголовка (systemc.h) и откомпилированной библиотеки SystemC.


3.2. MS Visual Studio 2005


Мощным средством для создания моделей ЦА на языке SystemC является MS Visual Studio 2005. Приведем описание этапов создания проекта с помощью данной среды разработки.


3.2.1. Предварительная настройка


Прежде чем начать работать с данной средой разработки, необходимо выполнить ряд действий по установке библиотеки SystemC и настройке MS Visual Studio:


Итак, у нас имеется библиотека SystemC версии 2.2 [2]. В папке msvc71 находится рабочий проект библиотеки, который необходимо откомпилировать, чтобы получить библиотеку “systemc.lib”. Для этого нужно запустить файл “SystemC.vcproj” и нажать F7.


Далее необходимо выполнить следующие шаги по настройке MS Visual Studio:

  1. Выбрать Tools -> Options . . . Projects and Solutions -> VC++ Directories;
  2. Выбрать show directories for: Library files;
  3. Добавить, нажав на кнопку New, новую запись: “$(SYSTEMC)\SystemC\Debug”;
  4. Выбрать show directories for: Include files;
  5. Добавить, нажав на кнопку New, новую запись:”$(SYSTEMC)\..\src”.

         Также необходимо добавить переменную среду (мой комьютер -> свойства -> переменные среды –> создать переменную среду) и указать значение “C:\apps\systemc-2.2\msvc71” – путь к библиотеке SystemC на диске.


3.2.2. Создание пустого проекта


Чтобы создать пустой проект SystemC в MS Visual Studio 2005, необходимо выполнить следующие действия:

  1. Запустить Visual Studio. На стартовой странице выбрать New Project -> Win32 Console Project. Задать имя проекта и нажать ок;
  2. Установить галочку “Empty project” на странице Application Settings. Нажать кнопку Finish;
  3. Открыть настройки проекта, нажав правой кнопкой мыши на название проекта и выбрав Properties;
  4. Выбрать C/C++ tab -> General properties и установить значение “Detect 64-bit Portability Issues” “No”;
  5. Выбрать C/C++ tab, Language properties и установить “Enable Run-Time Type Info” “Yes”;
  6. Выбрать C/C++ tab, Command Line properties и добавить /vmg в “Additional Options:”;
  7. Выбрать Linker tab, Input properties и ввести “systemc.lib” в “Additional Dependencies”.

3.2.3. Пример создания проекта SystemC в MS Visual Studio 2005


Создадим простой пример SystemC на Visual Studio – тестирование логического элемента 2И. Начнем с создания пустого проекта, ход описан в «пункте 3. 2. 2» данной работы.


Добавим в проект файл заголовка and2.h и спроектируем описание модуля элемента 2И с задержкой переключения 20 нс:


#include "systemc.h"
SC_MODULE(and2)
{
sc_in <bool> A, B;
sc_out <bool> F;
sc_event delay;
void do_delay(){delay.notify(20, SC_NS);}
void do_and2(){F.write( A.read() && B.read() );}
SC_CTOR(and2)
{
SC_METHOD(do_delay);
sensitive << A << B;
SC_METHOD(do_and2);
sensitive << delay;
}
};


Далее нам потребуется отдельный модуль, который будет генерировать входные сигналы, назовем его stim, а файл, соответственно, stim.h:


#include "systemc.h"
SC_MODULE(stim)
{
sc_out <bool> A, B;
sc_in <bool> Clk;
void do_stim()
{
while(1)
{
A.write(false);
B.write(false);
wait();
A.write(true);
B.write(false);
wait();

                            A.write(false);
B.write(true);
wait();
A.write(true);
B.write(true);
wait();
}
}
SC_CTOR(stim)
{
SC_THREAD(do_stim);
sensitive << Clk.neg();
}
};


Данный модуль чувствителен к срезу синхросигнала Clk, который будет реализован в main.cpp. Задача данного модуля – менять значения входных сигналов A и B, поступающих на логический элемент 2И. Метод wait() в данном случае приостанавливает работу процесса модуля до следующего переключения Clk из 1 в 0. Поэтому, задержка переключения сигналов A и B будет равна периоду синхросигнала.


Далее следует описание файла main.cpp, реализующего функцию sc_main(). Главная задача данной функции – это объявление всех объектов проекта (объект Stim и and2), соединение этих объектов посредством сигналов, а также запуск фазы моделирования:


#include "systemc.h"
#include "and2.h"
#include "stim.h"
int sc_main(int argc, char* argv[])
{
sc_signal <bool> A, B, F;
sc_clock Clk("TestClock", 50, SC_NS, 0, 0, SC_NS);
// Создание объекта класса stim и назначение его портам сигналов
stim Stim1("Stimulus");
Stim1(A, B, Clk);
// Создание объекта класса and2 и назначение его портам сигналов
and2 a("AND2");
a(A, B, F);
// Создание файла трассировки и добавление сигналов
sc_trace_file* Tf;
Tf = sc_create_vcd_trace_file("traces");
Tf -> set_time_unit(-12);
sc_trace(Tf, A  , "A" );
sc_trace(Tf, B  , "B" );
sc_trace(Tf, F  , "F" );
sc_trace(Tf, Clk  , "Clk" );
// Запуск фазы моделирования от 0 до 300 нс
sc_start(300, SC_NS);
// Закрытие файла трассировки
sc_close_vcd_trace_file(Tf);
return 0;
}


Назначение портам сигналов можно делать двумя способами:

  1. Stim1(A, B, Clk); // Компактная форма записи
  2. Stim1.A(A); Stim1.B(B); Stim1.Clk(Clk); // Полная запись

         Оба способа равнозначны. Преимуществом первого является очень компактная форма записи, однако при ее использовании необходимо быть очень внимательным, чтобы правильно назначить соответствие между портами и сигналами (в процессе моей работы возникали такого рода ошибки, которые очень не просто было обнаружить). Чтобы исключить возможность возникновения такого рода ошибок, рекомендуется использовать второй способ записи.


Очень важным моментом является создание файла трассировки. Полученную временную диаграмму можно открыть, например, с помощью Active-HDL 7.1.


Остается лишь откомпилировать созданный нами проект и запустить исполняемый файл. В результате работы программы мы получили временную диаграмму работы логического элемента 2И, изображенную на «рисунке 3.2».


Рисунок 3.2 – Временная диаграмма работы логического элемента 2И


3.3. Aldec Active-HDL version 7.1


Начиная с версии 7.1, система проектирования цифровой аппаратуры Active-HDL поддерживает язык SystemC. В состав пакета входят: компилятор g++, библиотека SystemC версии 2.2, а также встроенный отладчик С++. Предварительной настройки системы проектирования Active-HDL для работы с библиотекой SystemC не требуется.


3.3.1. Создание проекта


При запуске Active-HDL 7.1 предложит нам открыть существующую рабочую область или создать новую. Необходимо создать новую рабочую область, ввести название новой рабочей области и указать для нее путь на жестком диске, диалоговая панель изображена на «рисунке 3.3».


Рисунок 3.3 – Создание новой рабочей области


В следующем диалоговом окне необходимо выбрать пункт “Создать пустой проект” и нажать кнопку “Далее”. При появлении следующего диалогового окна нажать “Далее”, оставив настройки без изменений. Затем необходимо ввести название проекта и указать путь для него на жестком диске, диалоговая панель изображена на «рисунке 3.4».



Рисунок 3.4 – Создание нового проекта


3.3.2. Создание модуля SystemC


Создать модуль SystemC в Active-HDL можно двумя способами:

  1. Добавляя файлы в проект вручную (также как и в Visual Studio);
  2. С помощью “Sourse File Wizard”.

         Воспользуемся вторым способом, т. к. он очень удобный и позволяет сэкономить время. Итак, чтобы создать модуль необходимо нажать “File -> New -> SystemC Source”, в результате появится диалоговая панель создания модуля, изображенная на «рисунке 3.5». Необходимо отметить галочку “Add the generated file to the design” и нажать кнопку “Далее”.



Рисунок 3.5 – Создание нового модуля


Далее необходимо ввести название модуля, а также название файлов .h и .cpp (рисунок 3.6).

 


Рисунок 3.6 – Ввод названия модуля, а также имен файлов .h и .cpp


Настройки следующего диалогового окна необходимо оставить без изменений. На «рисунке 3.7» изображено диалоговое окно настройки конфигурации компиляции модуля.

 


Рисунок 3.7 – Настройки компиляции модуля SystemC


Следующее окно позволяет создать порты модуля (рисунок 3.8).



Рисунок 3.8 – Настройка портов модуля


В результате к проекту были добавлены следующие файлы: and2.h, and2.cpp и and2.dlm (рисунок 3.9).


Рисунок 3.9 – Структура проекта


Далее нам необходимо доработать созданные шаблонные файлы and2.h и and2.cpp. Файл and2.h:


#ifndef __and2_h__
#define __and2_h__
#include <systemc.h>
SC_MODULE( and2 )
{
sc_in< bool > A, B;
sc_out< bool > F;
sc_event delay;
SC_CTOR( and2 ):
A("A"),
B("B"),
F("F")
{
SC_METHOD(do_delay);
sensitive << A << B;
SC_METHOD(do_and2);
sensitive << delay;
}
void do_delay();
void do_and2();
};
Файл and2.cpp:
#include "and2.h"
void and2::do_delay()
{
delay.notify(20, SC_NS);
}         
void and2::do_and2()
{
F.write( A.read() && B.read() );
}
SC_MODULE_EXPORT( and2 )
#endif //__and2_h__


Примечание: После редактирования файлов, необходимо их сохранить. В Visual Studio сохранение происходит автоматически при выполнении команды “Build”.


3.3.3. Компиляция проекта


Необходимо открыть файл and2.dlm и установить галочку “Add C/C++ library to design”. Далее нужно нажать на правой кнопкой мыши на файле and2.dlm и выбрать “Build”, в результате чего модуль SystemC будет откомпилирован и добавлен в библиотеку проекта. Если на этапе компиляции возникают ошибки, то компилятор сообщит об обнаруженных ошибках (также как и в Visual Studio). Если же ошибок в проекте нет, то можно переходить к следующему этапу проектирования – верификации проекта (в данном случае верификации модуля 2И).


3.3.4. Верификация проекта


Чтобы перейти к этапу симуляции проекта, необходимо задать входные сигналы проекта (в данном случае, А и В). В окне проекта необходимо выбрать вкладку “Structure” и сделать активным откомпилированный модуль and2, находящийся в библиотеке проекта. Далее создадим временную диаграмму, нажав на кнопку “New Waveform”. Чтобы добавить сигналы во временную диаграмму, необходимо нажать на кнопку “Add Signals” и добавить сигналы A, B и F. После чего, нажав сначала на правую кнопку по сигналу A, затем по сигналу B, выбрать “Simulators”, для того чтобы задать входные сигналы. Active-HDL 7.1 позволяет использовать 8 различных способов для создания входных сигналов, в нашем случае удобно использовать “Clock”: 20Mhz для сигнала A (рисунок 3.10) и 10Mhz для сигнала B.


Рисунок 3.10 – Настройка сигнала A


После чего необходимо запустить фазу симуляции, нажав на кнопку “Run Until”, установив время моделирования 250 ns. Результат моделирования представлен на «рисунке 3.11».

 


Рисунок 3.11 – Результат моделирования проекта


3.4. Сравнительный анализ рассмотренных систем проектирования


MS Visual Studio 2005 и Aldec Active-HDL 7.1 поддерживают язык SystemC и делают работу с ним очень удобной и приятной. Попробую перечислить основные плюсы и минусы, выявленные мною в ходе работы, для каждой среды разработки:
Плюсы MS Visual Studio 2005:

  1. Проста в освоении (особенно для программистов), так как принцип написания проекта на SystemC кардинально не отличается от разработки C++ приложения;
  2. Возможность работать непосредственно с библиотекой SystemC (имеется возможность открыть любой файл, чтобы посмотреть конкретную реализацию любого класса или шаблона из библиотеки одним щелчком);
  3. Во время отладки  есть возможность проследить за ходом выполнения программы, включая выполнение системных SystemC функций (позволяет понять, как же все-таки работает ядро моделирования SystemC изнутри).

         Минусы MS Visual Studio 2005:

  1. Требуется предварительная настройка;
  2. Отсутствуют шаблоны стандартных модулей;
  3. Нет постпроцессора моделирования.

Плюсы Aldec Active-HDL 7.1:

  1. Не требуется предварительной настройки;
  2. Поддержка современных языков HDL (VHDL, Verilog, SystemC) с возможностью применения их в одном проекте;
  3. Имеются шаблоны стандартных модулей на SystemC;
  4. Универсальная программа Waveform Editor, которая объединяет в себе функции графического редактора внешних воздействий и постпроцессора моделирования. Редактор внешних воздействий поддерживает восемь типов описаний входных сигналов, позволяет сохранять шаблоны сигналов и использовать их в дальнейшем, что очень экономит время;
  5. Многофункциональный текстовый редактор HDL Editor, который позволяет использовать как готовые шаблоны стандартных модулей на SystemC, так и создавать свои, структурировать и автоматически форматировать текст программы;
  6. Имеется встроенный C++ отладчик.

Принципиальных минусов Aldec Active-HDL 7.1 мною не выявлено.

           
В результате можно сделать вывод о том, что использование системы проетирования Active-HDL является более предпочтительным, так как она предоставляет больше возможностей разработчику, делая работу с библиотекой SystemC максимально удобной и быстрой. Однако Visual Studio также может быть очень полезным инструментом в написании моделей на SystemC.

На главную | К содержанию | К предыдущей главе | К следующей главе