<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.simhard.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.simhard.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=164.177.206.33</id>
		<title>Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://www.simhard.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=164.177.206.33"/>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/164.177.206.33"/>
		<updated>2026-04-28T01:45:02Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:56:06Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Конструктор (SC_CTOR) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_CTOR(module_name)&lt;br /&gt;
: Initialization // могут отсутствовать объявления и инициализация сигналов&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation     &lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление списка чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с функциями ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;600&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
end soft;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
&lt;br /&gt;
  procedure skip_space (variable l : inout line) is&lt;br /&gt;
    variable char : character;&lt;br /&gt;
    variable flag : boolean:=true;&lt;br /&gt;
  begin  -- skip_space&lt;br /&gt;
    while flag loop&lt;br /&gt;
      if l'length = 0 then&lt;br /&gt;
        flag := false;&lt;br /&gt;
      elsif l(1) = ' ' then&lt;br /&gt;
        read(l, char);&lt;br /&gt;
      else&lt;br /&gt;
        flag := false;&lt;br /&gt;
      end if;&lt;br /&gt;
    end loop;&lt;br /&gt;
  end skip_space;&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
&lt;br /&gt;
    void skip_space (char ** str);&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: skip_space (char ** str)&lt;br /&gt;
{&lt;br /&gt;
  bool flag = true;&lt;br /&gt;
  &lt;br /&gt;
  while ( flag ) {               //&lt;br /&gt;
    if ( !strlen((*str)) )&lt;br /&gt;
      flag = false;&lt;br /&gt;
    else &lt;br /&gt;
      if ((*str)[0]==' ')&lt;br /&gt;
	(*str) += 1;&lt;br /&gt;
      else &lt;br /&gt;
	flag = false;&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:45:44Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Работа с переменными */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с функциями ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;600&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
end soft;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
&lt;br /&gt;
  procedure skip_space (variable l : inout line) is&lt;br /&gt;
    variable char : character;&lt;br /&gt;
    variable flag : boolean:=true;&lt;br /&gt;
  begin  -- skip_space&lt;br /&gt;
    while flag loop&lt;br /&gt;
      if l'length = 0 then&lt;br /&gt;
        flag := false;&lt;br /&gt;
      elsif l(1) = ' ' then&lt;br /&gt;
        read(l, char);&lt;br /&gt;
      else&lt;br /&gt;
        flag := false;&lt;br /&gt;
      end if;&lt;br /&gt;
    end loop;&lt;br /&gt;
  end skip_space;&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
&lt;br /&gt;
    void skip_space (char ** str);&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: skip_space (char ** str)&lt;br /&gt;
{&lt;br /&gt;
  bool flag = true;&lt;br /&gt;
  &lt;br /&gt;
  while ( flag ) {               //&lt;br /&gt;
    if ( !strlen((*str)) )&lt;br /&gt;
      flag = false;&lt;br /&gt;
    else &lt;br /&gt;
      if ((*str)[0]==' ')&lt;br /&gt;
	(*str) += 1;&lt;br /&gt;
      else &lt;br /&gt;
	flag = false;&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:17:55Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Работа с файлами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:17:32Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Работа с файлами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:17:11Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Process со списком чувствительности (пример 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:16:51Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Process со списком чувствительности (пример 1) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:15:25Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Process без списка чувствительности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:15:06Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Generic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:14:45Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:14:19Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Entity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;700&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:13:54Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Entity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Работа с файлами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  p_send      : process&lt;br /&gt;
   variable l : line;&lt;br /&gt;
   variable byte_r : std_logic_vector(0 to 7);&lt;br /&gt;
   variable good : boolean;&lt;br /&gt;
   variable f_first_byte : boolean:=false;     &lt;br /&gt;
  begin  -- process p1&lt;br /&gt;
   &lt;br /&gt;
    loop1: while not endfile(comfile) loop&lt;br /&gt;
&lt;br /&gt;
      readline (comfile,l);&lt;br /&gt;
      skip_space (l);                  &lt;br /&gt;
      next loop1 when l'length = 0;     &lt;br /&gt;
    &lt;br /&gt;
      for i in 1 to l'length loop&lt;br /&gt;
        str(i) &amp;lt;= l(i);&lt;br /&gt;
      end loop;  -- i&lt;br /&gt;
      str((l'length)+1 to 1000) &amp;lt;= (others =&amp;gt; ' ');&lt;br /&gt;
      str_l &amp;lt;= l'length;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;   &lt;br /&gt;
      if l(1) = '#' then                &lt;br /&gt;
        assert false report &amp;quot;коментарий:&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
      else                              &lt;br /&gt;
        assert false report &amp;quot;коментарий&amp;quot;&amp;amp;str(1 to str_l) severity NOTE;&lt;br /&gt;
        f_first_byte := true;&lt;br /&gt;
        while l'length /= 0 loop&lt;br /&gt;
          hread (l,byte_r,good);&lt;br /&gt;
          assert good report &amp;quot;ошибка&amp;quot; severity FAILURE;&lt;br /&gt;
          if f_first_byte then&lt;br /&gt;
            f_first_byte := false;      &lt;br /&gt;
            comand &amp;lt;= byte_r;&lt;br /&gt;
          end if;&lt;br /&gt;
          TX_VALID_i &amp;lt;= '1';&lt;br /&gt;
          DATA_IN_i &amp;lt;= byte_r;&lt;br /&gt;
          skip_space (l);       &lt;br /&gt;
          wait until TX_BUSY = '1';&lt;br /&gt;
        end loop;&lt;br /&gt;
        f_start_timer &amp;lt;= true;&lt;br /&gt;
        TX_VALID_i &amp;lt;= '0';             &lt;br /&gt;
        wait until f_get_answer or f_timer;       &lt;br /&gt;
        assert not f_timer report &amp;quot;1мкс&amp;quot; severity FAILURE;&lt;br /&gt;
        f_start_timer &amp;lt;= false;&lt;br /&gt;
      end if;      &lt;br /&gt;
    end loop;&lt;br /&gt;
  assert false report &amp;quot;======&amp;quot; severity failure;&lt;br /&gt;
  end process p_send;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;800&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void soft_sc_module :: p_send ()&lt;br /&gt;
{&lt;br /&gt;
  fin.open(comand_file.c_str(),ios::out);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;work4\n&amp;quot;;&lt;br /&gt;
  bool f_first_byte=false;&lt;br /&gt;
  if (!fin){&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;File invalide open&amp;quot;;&lt;br /&gt;
    exit (0);&lt;br /&gt;
  }&lt;br /&gt;
  while (!fin.eof()){&lt;br /&gt;
    fin.getline (str,1000);&lt;br /&gt;
    skip_space (&amp;amp;(str));       &lt;br /&gt;
    if (strlen(str)){         &lt;br /&gt;
      if (str[0] == '#') &lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;koment: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
      else {&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot;&amp;lt;&amp;lt; str &amp;lt;&amp;lt;endl;&lt;br /&gt;
	f_first_byte=true;&lt;br /&gt;
	//while ( str[0] != '\0' ){&lt;br /&gt;
	while ( strlen(str) ){&lt;br /&gt;
	  if ( str[0] == ' ' )&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	  else {&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; &amp;quot;1/2\n&amp;quot;;&lt;br /&gt;
	    byte_b.range(7,4)=str[0];&lt;br /&gt;
	    str++;&lt;br /&gt;
	    skip_space(&amp;amp;(str));&lt;br /&gt;
	    if (!strlen(str)){&lt;br /&gt;
	      cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;error&amp;quot;;&lt;br /&gt;
	      sc_stop();&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	      //cout &amp;lt;&amp;lt; &amp;quot;2/2\n&amp;quot;;&lt;br /&gt;
	      byte_b.range(3,0)=str[0];&lt;br /&gt;
	      str++;&lt;br /&gt;
              }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
	    &lt;br /&gt;
	    if (f_first_byte){&lt;br /&gt;
	      f_first_byte=false;&lt;br /&gt;
	      comand=byte_b;&lt;br /&gt;
	    }&lt;br /&gt;
	    //cout &amp;lt;&amp;lt; byte_b &amp;lt;&amp;lt; endl;&lt;br /&gt;
	    tx_valid_i.write(SC_LOGIC_1);&lt;br /&gt;
	    data_in.write(byte_b);&lt;br /&gt;
	    wait (tx_busy.posedge_event());&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	f_start_timer = true;&lt;br /&gt;
	tx_valid_i.write(SC_LOGIC_0);&lt;br /&gt;
	wait ( f_get_answer.posedge_event() | f_timer.posedge_event() );&lt;br /&gt;
	if ( f_timer ) {cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;sc_stop();}&lt;br /&gt;
	f_start_timer = false;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
    str=str_b;&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;error&amp;quot;;&lt;br /&gt;
  fin.close();&lt;br /&gt;
  sc_stop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T14:01:28Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Process со списком чувствительности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 1)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
--или &lt;br /&gt;
process (clk)&lt;br /&gt;
begin&lt;br /&gt;
if clk'event then&lt;br /&gt;
clk_i &amp;lt;= not clk_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
        period_ns=(1000000000)/System_CLK;&lt;br /&gt;
        SC_METHOD (clk_gen);&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: clk_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  clk_i.write(!clk_i.read());&lt;br /&gt;
  next_trigger (period_ns, SC_NS);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности (пример 2) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
--или &lt;br /&gt;
process (RST_N_i)&lt;br /&gt;
begin&lt;br /&gt;
if RST_N_i'event then&lt;br /&gt;
  RST_N &amp;lt;= RST_N_i;&lt;br /&gt;
end if;&lt;br /&gt;
end process;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	clk_i=true;&lt;br /&gt;
	SC_METHOD (rst_n_i2rst_n);&lt;br /&gt;
	sensitive &amp;lt;&amp;lt; rst_n_i;&lt;br /&gt;
	dont_initialize();&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void soft_sc_module :: reset_gen ()&lt;br /&gt;
{ &lt;br /&gt;
  rst_n_i.write( SC_LOGIC_0 );&lt;br /&gt;
  wait (100, SC_NS);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;run reset&amp;quot;;&lt;br /&gt;
  rst_n_i.write( SC_LOGIC_1 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F</id>
		<title>Спец курс (Избранные главы VHDL)/Верификация описания</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BF%D0%B5%D1%86_%D0%BA%D1%83%D1%80%D1%81_(%D0%98%D0%B7%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B_VHDL)/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F"/>
				<updated>2012-11-19T13:46:19Z</updated>
		
		<summary type="html">&lt;p&gt;164.177.206.33: /* Слайд: Process без списка чувствительности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slideshow style=&amp;quot;custis&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
;title: '''Верификация описания.'''&lt;br /&gt;
;author: Зайцев В.С.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SystemC_From_the_ground_up.mm]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания==&lt;br /&gt;
[[Файл:Процевв_верификации.png]]&lt;br /&gt;
&lt;br /&gt;
==Слайд:Верификация описания:step==&lt;br /&gt;
*{{Гол|''' &amp;lt;big&amp;gt;Среда моделирования&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Active-HDL™&lt;br /&gt;
** Riviera-PRO™&lt;br /&gt;
** NC-Sim®&lt;br /&gt;
** ModelSim®&lt;br /&gt;
** QuestaSim®&lt;br /&gt;
** VCS-MX®&lt;br /&gt;
* {{Гол|'''&amp;lt;big&amp;gt;Структура проекта&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
** Тестовое окружение&lt;br /&gt;
** RTL-модель (Verilog,VHDL)&lt;br /&gt;
** Эталонная модель (SystemC)&lt;br /&gt;
** Assert'ы (psl, OVVM, UVM)&lt;br /&gt;
** Отчеты и базы по результатам моделирования&lt;br /&gt;
&lt;br /&gt;
==Слайд:Эталонная модель на языке ''{{Зел| &amp;lt;big&amp;gt;SystemC&amp;lt;/big&amp;gt;}}''==&lt;br /&gt;
&lt;br /&gt;
# Высокий уровень абстракции&lt;br /&gt;
# Скорость моделирования&lt;br /&gt;
# Возможности языка C++&lt;br /&gt;
# Инструменты для автоматизации &lt;br /&gt;
# Совместное моделирование с другими HDL-языками&lt;br /&gt;
&lt;br /&gt;
== Основы языка SystemC ==&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Форматы и способ представления данных) ===&lt;br /&gt;
[[Файл:Типы_данных.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (native)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных C++ &lt;br /&gt;
 int spark_offset; &lt;br /&gt;
 unsigned repairs = 0 ;            // Count repair&lt;br /&gt;
 unsigned long mileage;            // Miles driven&lt;br /&gt;
 short int speedometer;            // -20.. 0.. 100 MPH&lt;br /&gt;
 float temperature;                // Engine temp in C&lt;br /&gt;
 double time_of_last_request;      //Time of bus&lt;br /&gt;
 std:: string license_plate;       // Text for license&lt;br /&gt;
 const bool WARNING_LIGHT = true;  // Status&lt;br /&gt;
 enum compass {SW,W,NW,N,NE,E, SE, S} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Arithmetic)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример целочисленных типов данных C++ &lt;br /&gt;
sc_int&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_uint&amp;lt;LENGTH&amp;gt; NAME...;&lt;br /&gt;
sc_bigint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
sc_biguint&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
// SystemC integer data types&lt;br /&gt;
sc_int&amp;lt;5&amp;gt; seat_position=3; //5 bits: 4 plus sign&lt;br /&gt;
sc_uint&amp;lt;13&amp;gt; days_SLOC(4000); //13 bits: no sign&lt;br /&gt;
sc_biguint&amp;lt;80&amp;gt; revs_SLOC; // 80 bits: no sign&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных (Boolean)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC&lt;br /&gt;
sc_bit NAME...;&lt;br /&gt;
sc_bv&amp;lt;BITWIDTH&amp;gt; NAME...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sc_bit и sc_bv могут принимать значения: '''SC_LOGIC_1''' и '''SC_LOGIC_0.''' &lt;br /&gt;
* Для сокращения типов, можно использовать '''Log_1 и Log_0''' или '''‘1’ и ‘0’.'''&lt;br /&gt;
* Над этим типом данных возможно выполнение битовых операций '''and, or, xor (&amp;amp;,|, ^).''' &lt;br /&gt;
* Для обращения к отдельным битам и массивам '''[], range()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_bit flag(SC_LOGIC_1); // more efficient to use bool&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; positions = &amp;quot;01101&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;6&amp;gt; mask = &amp;quot;100111&amp;quot;;&lt;br /&gt;
sc_bv&amp;lt;5&amp;gt; active = positions &amp;amp; mask;// 00101&lt;br /&gt;
sc_bv&amp;lt;1&amp;gt; all = active. and_reduce (); // SC_LOGIC_0&lt;br /&gt;
positions. range (3,2) = &amp;quot;00&amp;quot;; // 00001&lt;br /&gt;
positions [2] = active[0] ^ flag;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы данных ( многозначные (ZX10))===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;                // Пример типа данных SystemC &lt;br /&gt;
sc_logic NAME[,NAME]...;&lt;br /&gt;
sc_lv&amp;lt;BITNIDTH&amp;gt; NAME[,NAME ]...;&lt;br /&gt;
sc_logic buf(sc_dt::Log_Z);&lt;br /&gt;
sc_lv&amp;lt;8&amp;gt; data_drive (&amp;quot;zz01XZ1Z&amp;quot;);&lt;br /&gt;
data_drive.range (5,4) = &amp;quot;ZZ&amp;quot;;// ZZZZXZ1Z&lt;br /&gt;
buf = '1';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Операторы SystemC ===&lt;br /&gt;
[[Файл:Операции.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Главный модуль MAIN===&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке C++&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
BODY_OF_PROGRAM&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Гол|'''&amp;lt;big&amp;gt;Описание на языке SystemC&amp;lt;/big&amp;gt;'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
//ELABORATION&lt;br /&gt;
sc_start(); // &amp;lt;-- Simulation begins &amp;amp; ends&lt;br /&gt;
            // in this function!&lt;br /&gt;
//[POST-PROCESSING]&lt;br /&gt;
return EXIT_CODE; // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Модуль ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;systemc.h&amp;gt;&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
MODULE_BODY&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
Содержит:&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Порты&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Каналы связи&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявления переменных для хранения данных&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Другие модули с большей вложенностью&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Конструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Деструктор&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Функции -процессы&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Вспомогательные функции&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_CTOR)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_CTOR(module_name)&lt;br /&gt;
: Initialization // OPTIONAL&lt;br /&gt;
{&lt;br /&gt;
Subdesign_Allocation&lt;br /&gt;
Subdesign_Connectivity&lt;br /&gt;
Process_Registration&lt;br /&gt;
Miscellaneous_Setup&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Объявление под модулей&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Подключение и соединение с подмодулями&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Регистрация процессов на SystemC&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Обеспечение постоянной чувствительности&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Разнообразные пользовательские объявления&amp;lt;/big&amp;gt;}}''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Конструктор (SC_HAS_PROCESS)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//FILE: module_name.h&lt;br /&gt;
SC_MODULE(module_name) {&lt;br /&gt;
SC_HAS_PROCESS(module_name);&lt;br /&gt;
module_name(sc_module_name instname[, other_args…])&lt;br /&gt;
: sc_module(instname)&lt;br /&gt;
[, other_initializers]&lt;br /&gt;
{&lt;br /&gt;
CONSTRUCTOR_BODY&lt;br /&gt;
}&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Все возможности конструктора SC_CTOR&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Альтернативный метод создания модуля&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Позволяет создавать конструктор с аргументами(+ к имени модуля)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
* '''{{Фио|&amp;lt;big&amp;gt;Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)&amp;lt;/big&amp;gt;}}'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Процесс SC_THREAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE(simple_process_ex) {&lt;br /&gt;
   SC_CTOR(simple_process_ex) {&lt;br /&gt;
      SC_THREAD(my_thread_process);&lt;br /&gt;
   }&lt;br /&gt;
   void my_thread_process(void);&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Зел|'''SC_THREAD'''}} в '''SystemC''':&lt;br /&gt;
# аналог {{Зел|'''initial block'''}} в '''Verilog'''&lt;br /&gt;
# {{Зел|'''process'''}} без списка чувствительности с оператором '''wait()''' в '''VHDL'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Введение времени===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Единицы измерения времени'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_SEC // seconds&lt;br /&gt;
SC_MS  // milliseconds&lt;br /&gt;
SC_US  // microseconds&lt;br /&gt;
SC_NS  // nanoseconds&lt;br /&gt;
SC_PS  // picoseconds&lt;br /&gt;
SC_FS  // femtoseconds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Объявление переменной типа '''&amp;lt;/big&amp;gt;}}{{Зел|&amp;lt;big&amp;gt;'''sc_time'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_time t_PERIOD(5, SC_NS) ;&lt;br /&gt;
sc_time t_TIMEOUT (100, SC_MS) ;&lt;br /&gt;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;&lt;br /&gt;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;&lt;br /&gt;
if (t_MEASURE &amp;gt; t_HOLD) { error (&amp;quot;Setup violated&amp;quot;) }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Запуск выполнения '''sc_start()'''===&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция запускающая выполнения главного процесса '''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int sc_main(int argc, char* argv[]) { // args unused&lt;br /&gt;
simple_process_ex my_instance (&amp;quot;my_instance&amp;quot;);&lt;br /&gt;
sc_start(60.0,SC_SEC); // Limit sim to one minute&lt;br /&gt;
return 0 ;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot; The time is now &amp;quot;&lt;br /&gt;
&amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; &amp;quot;!&amp;quot; &amp;lt;&amp;lt; std::endl;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска моделирования в консоли получим&lt;br /&gt;
 The time is now 0 ns!  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд: Остановка выполнения моделирования wait(sc_time)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ор|&amp;lt;big&amp;gt;'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void simple_process_ex::my_thread_process (void) {&lt;br /&gt;
wait (10,SC_NS);&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Now at &amp;quot;&amp;lt;&amp;lt; sc_time_stamp() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time&lt;br /&gt;
t_DELAY *= 2;&lt;br /&gt;
std::cout&amp;lt;&amp;lt; &amp;quot;Delaying &amp;quot;&amp;lt;&amp;lt; t_DELAY&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
wait(t_DELAY);&lt;br /&gt;
std::cout &amp;lt;&amp;lt; &amp;quot;Now at &amp;quot; &amp;lt;&amp;lt; sc_time_stamp()&lt;br /&gt;
&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 % . /run_example&lt;br /&gt;
 Now at 10 ns&lt;br /&gt;
 Delaying 4 ms&lt;br /&gt;
 Now at 4000010 ns&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''sc_event'''===&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
[[Файл:Процес_моделирования_по_событиям.png]]&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:События '''SC_THREAD::wait()'''===&lt;br /&gt;
Процесс '''SC_THREAD''' процес выполняющийся {{Кр|'''&amp;lt;big&amp;gt;один раз!!&amp;lt;/big&amp;gt;'''}}, для управления работой такого процесса используют функцию задержки выполнения wait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;wait(time);&lt;br /&gt;
wait(event);&lt;br /&gt;
wait(event1 | event2) // до прихода любого из событий&lt;br /&gt;
wait(event1 &amp;amp; event2) // до прихода всех событий вместе&lt;br /&gt;
wait(timeout, event); // до прихода события ожидает в течении времени&lt;br /&gt;
wait ( timeout, event1 | event2 )&lt;br /&gt;
wait ( timeout, event1 &amp;amp; event2 )&lt;br /&gt;
wait(); // ожидание дельта цикла выполнения, статическая задержка&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Слайд:Запуск события (установка,назначение)===&lt;br /&gt;
&lt;br /&gt;
Для запуска события используется атрибут {{Зел|&amp;lt;big&amp;gt;'''.notify()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Он выполняет запуск событий,  отсчет времени идет от запуска моделирования. Для сброса точки отсчета используют {{Зел|&amp;lt;big&amp;gt;'''.cancel()'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_event action;&lt;br /&gt;
sc_time now(sc_time_stamp()); //вытягиваем текущее время моделирования&lt;br /&gt;
//стартуем событие немедленно&lt;br /&gt;
action.notify();&lt;br /&gt;
//следующее событие через 20 ms от текущего момента&lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
//переопределим событие на время 1.5 ns от текущего момента&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
//продублируем событие (не имеет эффекта)&lt;br /&gt;
action.notify(1.5, SC_NS);&lt;br /&gt;
//зададим событие от предыдущего на 1.5 ns&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
//запустим дельта цикл (не имеет эффекта)&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
//сбросим время задания события&lt;br /&gt;
action.cancel();&lt;br /&gt;
//зададим событие на 20 fs после сброса&lt;br /&gt;
action.notify(20,SC_FS);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Процесс со списком чувствительности SC_METHOD ===&lt;br /&gt;
{{ЖЛампа|24px}}Аналог '''process''' в '''VHDL''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;SC_METHOD(process_name);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Список чуствительности задаеться после ключевого слова {{Зел|'''sensitive'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; sensitive &amp;lt;&amp;lt; event [&amp;lt;&amp;lt; event] ;// поточный стил &lt;br /&gt;
 sensitive (event [, event] ); // стиль с использованием функции&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:dont_initialize() ===&lt;br /&gt;
{{ЖЛампа|24px}} Отменяет начальную установку значений &lt;br /&gt;
* После запуска моделирования конструктор создает модуль и инициализирует все процессы и переменные. &lt;br /&gt;
&lt;br /&gt;
* Это заставляет выполниться всем методам работающим по событию по одному разу во время запуска если событие устанавливалось в значение. &lt;br /&gt;
&lt;br /&gt;
* Для исключения начального выполнения используется функция '''dont_initialize()'''&lt;br /&gt;
&lt;br /&gt;
===Слайд: Стек событий '''sc_event_queue'''===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}  Событие можно задать не только от начального момента времени, а и от текущего.&lt;br /&gt;
&lt;br /&gt;
Для этого используется функция '''sc_event_queue()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sc_event_queue action;&lt;br /&gt;
sc_time now(sc_time_stamp()); &lt;br /&gt;
action.notify(20, SC_MS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(1.5,SC_NS);&lt;br /&gt;
action.notify(3.0,SC_NS);&lt;br /&gt;
action.notify(SC_ZERO_TIME);&lt;br /&gt;
action.notify(1,SC_SEC);&lt;br /&gt;
action.cancel_all();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совместное использование ресурсов===&lt;br /&gt;
&lt;br /&gt;
* При совместном использовании ресурсов, шин, памяти нужно разграничить область полномочий каждого процесса. &lt;br /&gt;
* Иначе при одновременной, к примеру записи будет происходить сбой или некорректная запись.&lt;br /&gt;
Если управлением доступом к одному ресурсу&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_mutex NAME;&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируется)&lt;br /&gt;
NAME.lock();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.try lock()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.unlock();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если управлением доступом к нескольким ресурсам&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;sc_semaphore NAME(COUNT);&lt;br /&gt;
// блокируем mutex NAME (ждем пока разблокируеться)&lt;br /&gt;
NAME.wait();&lt;br /&gt;
// Возвращает статус состояния блокировки&lt;br /&gt;
NAME.trywait()&lt;br /&gt;
//Возвращает число свободных ресурсов&lt;br /&gt;
NAME.get_value()&lt;br /&gt;
// Снимает блокировку&lt;br /&gt;
NAME.post();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта===&lt;br /&gt;
[[Файл:Иерархия.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (sc_main)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри '''главного''' модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{{Фио|&amp;lt;big&amp;gt;'''Стандартная конструкция блока хранения информации для RFID'''&amp;lt;/big&amp;gt;}}&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel wheel_FL(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
Wheel wheel_FR(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
sc_start();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE: main.cpp&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
int sc_main(int argc, char* argv[]) {&lt;br /&gt;
Wheel* wheel_FL; // pointer to FL wheel&lt;br /&gt;
Wheel* wheel_FR; // pointer to FR wheel&lt;br /&gt;
wheel_FL = new Wheel (&amp;quot;wheel_FL&amp;quot;); // create FL&lt;br /&gt;
wheel_FR = new Wheel (&amp;quot;wheel_FR&amp;quot;); // create FR&lt;br /&gt;
sc_start();&lt;br /&gt;
delete wheel_FL;&lt;br /&gt;
delete wheel_FR;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Иерархия и структура проекта (SC_MODULE)===&lt;br /&gt;
&lt;br /&gt;
{{ЖЛампа|24px}}Подключение и создание {{Зел|&amp;lt;big&amp;gt;'''модуля'''&amp;lt;/big&amp;gt;}} внутри другого модуля аналогично созданию {{Зел|&amp;lt;big&amp;gt;'''объекта'''&amp;lt;/big&amp;gt;}} заданного{{Зел| &amp;lt;big&amp;gt;'''класса'''&amp;lt;/big&amp;gt;}}, внутри другого класса. Поэтому объявления производиться в конструкторе верхнего модуля&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* {{Гол|'''Статический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel wheel_FL;&lt;br /&gt;
Wheel wheel_FR;&lt;br /&gt;
SC_CTOR(Body)&lt;br /&gt;
: wheel_FL(&amp;quot;wheel_FL&amp;quot;), //initialization&lt;br /&gt;
wheel_FR(&amp;quot;wheel_FR&amp;quot;) //initialization&lt;br /&gt;
{&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* {{Гол|'''Динамический метод'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;//FILE:Body.h&lt;br /&gt;
#include &amp;quot;Wheel.h&amp;quot;&lt;br /&gt;
SC_MODULE(Body) {&lt;br /&gt;
Wheel* wheel_FL;&lt;br /&gt;
Wheel* wheel_FR;&lt;br /&gt;
SC_CTOR(Body) {&lt;br /&gt;
wheel_FL = new Wheel(&amp;quot;wheel_FL&amp;quot;);&lt;br /&gt;
wheel_FR = new Wheel(&amp;quot;wheel_FR&amp;quot;);&lt;br /&gt;
// other initialization&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Типы портов ===&lt;br /&gt;
&lt;br /&gt;
* {{Сн|'''sc_port'''}}   - аналог inout порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_in'''}}     - аналог in порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_out'''}}    - аналог out порта в языке VHDL&lt;br /&gt;
* {{Сн|'''sc_export'''}} - внешний порт, порт который позволяет получить доступ к private данным модуля, но иерархически модулю не принадлежит. &lt;br /&gt;
{{ЖЛампа|24px}} Механизм использования '''sc_export''' порта напоминает '''доступ к сигналам по иерархии''', как в '''VHDL-2008'''.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Порты - точки подачи и снятия внешних воздействий===&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт.png]]&lt;br /&gt;
[[Файл:Порты_соединение_модулей_экспорт2.png]]&lt;br /&gt;
&lt;br /&gt;
===Слайд:Управление процессом и контроль статуса моделирования===&lt;br /&gt;
&lt;br /&gt;
== Слайд: VHDL и SystemC конструкции ==&lt;br /&gt;
===Слайд: Entity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (VHDL)'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   -- UART Speed&lt;br /&gt;
           System_CLK : integer := 50000000;  -- System CLK in Hz&lt;br /&gt;
           comand_file : string :=&amp;quot;/home/Vidokq/djin18reader/vhd/D18/comfile.txt&amp;quot; &lt;br /&gt;
           );&lt;br /&gt;
  port (&lt;br /&gt;
    CLK      : out  std_logic;                     -- system clk&lt;br /&gt;
    RST_N    : out  std_logic;                     -- system reset#    &lt;br /&gt;
    DATA_IN  : out  std_logic_vector(7 downto 0);  -- Transmit data&lt;br /&gt;
    DATA_OUT : in   std_logic_vector(7 downto 0);  -- Recieved data&lt;br /&gt;
    RX_VALID : in   std_logic;                     -- RX buffer data ready &lt;br /&gt;
    TX_VALID : out  std_logic;                     -- Data for TX avaible&lt;br /&gt;
    TX_BUSY  : in   std_logic;                     -- &lt;br /&gt;
    RX_BUSY  : in   std_logic);&lt;br /&gt;
 &lt;br /&gt;
end soft;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример поведенческой модели накопителя (Verilog)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public : &lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  tx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_busy;&lt;br /&gt;
    sc_in  &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_out;&lt;br /&gt;
    sc_in  &amp;lt; sc_logic &amp;gt;  rx_valid;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  tx_valid;&lt;br /&gt;
    sc_out &amp;lt; bool &amp;gt;  clk;&lt;br /&gt;
    sc_out &amp;lt; sc_logic &amp;gt;  rst_n;&lt;br /&gt;
    sc_out &amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
&lt;br /&gt;
    ifstream fin;&lt;br /&gt;
&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
      data_in(&amp;quot;data_in&amp;quot;),&lt;br /&gt;
      data_out (&amp;quot;data_out&amp;quot;),&lt;br /&gt;
      rx_valid(&amp;quot;rx_valid&amp;quot;),&lt;br /&gt;
      tx_valid(&amp;quot;tx_valid&amp;quot;),&lt;br /&gt;
      tx_busy(&amp;quot;tx_busy&amp;quot;),&lt;br /&gt;
      rx_busy(&amp;quot;rx_busy&amp;quot;),&lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      clk_i(&amp;quot;clk_i&amp;quot;),&lt;br /&gt;
      clk(&amp;quot;clk&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример Архитектуры на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
  file comfile : text open read_mode is comand_file;&lt;br /&gt;
  &lt;br /&gt;
begin  -- beh&lt;br /&gt;
-- тело архитектуры&lt;br /&gt;
  signal str        : string(1 to 1000) := (others =&amp;gt; ' ');&lt;br /&gt;
  signal RST_N_i    : std_logic;&lt;br /&gt;
  signal DATA_IN_i  : std_logic_vector(7 downto 0);&lt;br /&gt;
  signal f_get_answer       : boolean := false;&lt;br /&gt;
  signal tmd : time := 0 ms;&lt;br /&gt;
&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример аналогичной конструкции на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
  public :&lt;br /&gt;
    std::string comand_file;&lt;br /&gt;
  public :&lt;br /&gt;
    sc_signal&amp;lt; sc_logic &amp;gt;    rst_n_i;&lt;br /&gt;
    sc_signal&amp;lt; sc_lv &amp;lt; 8 &amp;gt; &amp;gt; data_in_i;&lt;br /&gt;
    sc_signal &amp;lt; bool &amp;gt; f_get_answer;&lt;br /&gt;
    sc_signal &amp;lt; sc_time &amp;gt; tmd;&lt;br /&gt;
    sc_time btmd (0, SC_MS);&lt;br /&gt;
  SC_CTOR(soft_sc_module)&lt;br /&gt;
      : &lt;br /&gt;
      rst_n_i(&amp;quot;rst_n_i&amp;quot;),&lt;br /&gt;
      data_in_i(&amp;quot;data_in_i&amp;quot;),&lt;br /&gt;
      f_get_answer(&amp;quot;f_get_answer&amp;quot;),&lt;br /&gt;
      tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
       str = new char [1000]; &lt;br /&gt;
//объявление функций &lt;br /&gt;
//выбор списка чувствительности&lt;br /&gt;
//установка значений по умолчанию&lt;br /&gt;
      tmd.write(btmd);&lt;br /&gt;
      // tmd = btmd; &lt;br /&gt;
//оператор присваивания перегружен и выолнит вызов функции write&lt;br /&gt;
      }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Generic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
entity soft is&lt;br /&gt;
  generic (UART_Speed : integer := 115200;   &lt;br /&gt;
           System_CLK : integer := 50000000&lt;br /&gt;
           );&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
architecture beh of soft is&lt;br /&gt;
 CLK_i &amp;lt;= not CLK_i after 1 ns * (1000000000 / System_CLK );&lt;br /&gt;
end beh;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC (sc_get_param)'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module)&lt;br /&gt;
      : rst_n(&amp;quot;rst_n&amp;quot;),&lt;br /&gt;
       tmd(&amp;quot;tmd&amp;quot;)&lt;br /&gt;
      { &lt;br /&gt;
	if (!sc_get_param(&amp;quot;System_CLK&amp;quot;,System_CLK)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	if (!sc_get_param(&amp;quot;UART_Speed&amp;quot;,UART_Speed)) cout &amp;lt;&amp;lt; &amp;quot;error get generic&amp;quot;;&lt;br /&gt;
	period_ns=(1000000000)/System_CLK;&lt;br /&gt;
	str = new char [1000]; &lt;br /&gt;
     }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {&lt;br /&gt;
	delete [] str_b;&lt;br /&gt;
      }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process без списка чувствительности ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slides split=&amp;quot;-----&amp;quot; width=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на VHDL'''}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
wait_byte_timer: process&lt;br /&gt;
begin  -- process wiat_timer&lt;br /&gt;
  wait for 0.5 ms;&lt;br /&gt;
  if (NOW - tmd) &amp;gt; 1 ms then&lt;br /&gt;
    if f_start_get_answer then&lt;br /&gt;
      f_byte_timer &amp;lt;= true;&lt;br /&gt;
      wait for 0.1 ms;&lt;br /&gt;
      f_byte_timer &amp;lt;= false;    &lt;br /&gt;
    end if;&lt;br /&gt;
  end if;&lt;br /&gt;
end process wait_byte_timer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
{{Фио|'''&amp;lt;big&amp;gt;&amp;lt;/big&amp;gt;Пример на SystemC'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
SC_MODULE (soft_sc_module)&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
    SC_CTOR(soft_sc_module):&lt;br /&gt;
      {	SC_METHOD (wait_byte_timer); }&lt;br /&gt;
    ~soft_sc_module()&lt;br /&gt;
      {      }&lt;br /&gt;
};&lt;br /&gt;
void soft_sc_module :: wait_byte_timer ()&lt;br /&gt;
{&lt;br /&gt;
  next_trigger (0.5,SC_MS);&lt;br /&gt;
  if ((sc_time_stamp()-tmd) &amp;gt; sc_time(1, SC_MS) )&lt;br /&gt;
    if (f_start_get_answer)&lt;br /&gt;
      {f_byte_timer=true;&lt;br /&gt;
      next_trigger (0.1,SC_MS);&lt;br /&gt;
      f_byte_timer=false;&lt;br /&gt;
      }&lt;br /&gt;
  cout&amp;lt;&amp;lt; &amp;quot;wait_byte_timer work\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/slides&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Слайд: Process со списком чувствительности ===&lt;br /&gt;
===Слайд: Работа с файлами ===&lt;br /&gt;
===Слайд: Работа с переменными ===&lt;br /&gt;
===Слайд: Работа с сигналами ===&lt;br /&gt;
===Слайд: Арифметические, логические, операции присваивания ===&lt;br /&gt;
===Слайд: Конструкции С++  ===&lt;br /&gt;
===Слайд: Создание модуля ===&lt;br /&gt;
===Слайд: Коммуникации между модулями ===&lt;br /&gt;
===Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)===&lt;br /&gt;
== Слайд: Компиляция описания ==&lt;br /&gt;
== Слайд: Запуск моделирования только SystemC описания ==&lt;br /&gt;
== Слайд: Запуск моделирования SystemC описания и VHDL ==&lt;/div&gt;</summary>
		<author><name>164.177.206.33</name></author>	</entry>

	</feed>