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

Спец курс (Избранные главы VHDL)/Верификация описания — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
(Слайд:Иерархия и структура проекта)
(Слайд:Введение времени)
Строка 201: Строка 201:
 
if (t_MEASURE > t_HOLD) { error ("Setup violated") }
 
if (t_MEASURE > t_HOLD) { error ("Setup violated") }
 
</source>
 
</source>
 +
 +
 +
===Слайд:Запуск выполнения '''sc_start()'''===
 +
 +
{{Ор|<big>'''Функция запускающая выполнения главного процесса '''</big>}}
 +
 +
{{Сн|'''Пример запуска моделирования на 60 секунд модельного времени'''}}
 +
 +
<source lang="cpp">
 +
int sc_main(int argc, char* argv[]) { // args unused
 +
simple_process_ex my_instance ("my_instance");
 +
sc_start(60.0,SC_SEC); // Limit sim to one minute
 +
return 0 ;
 +
}</source>
 +
 +
===Слайд:Контроль текущего времени моделирования '''sc_time_stamp ()'''===
 +
 +
<source lang="cpp">
 +
std::cout << " The time is now "
 +
<< sc_time_stamp()
 +
<< "!" << std::endl;</source>
 +
 +
После запуска моделирования в консоли получим
 +
The time is now 0 ns! 
 +
 +
 +
===Слайд: Остановка выполнения моделирования wait(sc_time)===
 +
 +
 +
{{Ор|<big>'''Функция останавливающая выполнение процесса до заданного времени или до прихода события'''</big>}}
 +
 +
<source lang="cpp">
 +
void simple_process_ex::my_thread_process (void) {
 +
wait (10,SC_NS);
 +
std::cout<< "Now at "<< sc_time_stamp() << std::endl;
 +
sc_time t_DELAY(2,SC_MS); // keyboard debounce time
 +
t_DELAY *= 2;
 +
std::cout<< "Delaying "<< t_DELAY<< std::endl;
 +
wait(t_DELAY);
 +
std::cout << "Now at " << sc_time_stamp()
 +
<< std::endl;
 +
}</source>
 +
 +
% . /run_example
 +
Now at 10 ns
 +
Delaying 4 ms
 +
Now at 4000010 ns
  
 
===Слайд:Иерархия и структура проекта===
 
===Слайд:Иерархия и структура проекта===

Версия 16:02, 14 ноября 2012

Заголовок
Верификация описания.
Автор
Зайцев В.С.
Нижний колонтитул
Спец курс (Избранные главы VHDL)/Верификация описания
Дополнительный нижний колонтитул
Зайцев В.С., 13:16, 2 декабря 2013

Содержание

Слайд:Верификация описания

Процевв верификации.png

Слайд:Верификация описания:step

  • Среда моделирования
    • Active-HDL™
    • Riviera-PRO™
    • NC-Sim®
    • ModelSim®
    • QuestaSim®
    • VCS-MX®
  • Структура проекта
    • Тестовое окружение
    • RTL-модель (Verilog,VHDL)
    • Эталонная модель (SystemC)
    • Assert'ы (psl, OVVM, UVM)
    • Отчеты и базы по результатам моделирования

Слайд:Эталонная модель на языке SystemC

  1. Высокий уровень абстракции
  2. Скорость моделирования
  3. Возможности языка C++
  4. Инструменты для автоматизации
  5. Совместное моделирование с другими HDL-языками

Основы языка SystemC

Слайд:Типы данных (Форматы и способ представления данных)

Типы данных.png

Слайд:Типы данных (native)

                // Пример типа данных C++ 
 int spark_offset; 
 unsigned repairs = 0 ;            // Count repair
 unsigned long mileage;            // Miles driven
 short int speedometer;            // -20.. 0.. 100 MPH
 float temperature;                // Engine temp in C
 double time_of_last_request;      //Time of bus
 std:: string license_plate;       // Text for license
 const bool WARNING_LIGHT = true;  // Status
 enum compass {SW,W,NW,N,NE,E, SE, S} ;

Слайд:Типы данных (Arithmetic)

                // Пример целочисленных типов данных C++ 
sc_int<LENGTH> NAME...;
sc_uint<LENGTH> NAME...;
sc_bigint<BITWIDTH> NAME...;
sc_biguint<BITWIDTH> NAME...;
// SystemC integer data types
sc_int<5> seat_position=3; //5 bits: 4 plus sign
sc_uint<13> days_SLOC(4000); //13 bits: no sign
sc_biguint<80> revs_SLOC; // 80 bits: no sign

Слайд:Типы данных (Boolean)

                // Пример типа данных SystemC
sc_bit NAME...;
sc_bv<BITWIDTH> NAME...;
  • sc_bit и sc_bv могут принимать значения: SC_LOGIC_1 и SC_LOGIC_0.
  • Для сокращения типов, можно использовать Log_1 и Log_0 или ‘1’ и ‘0’.
  • Над этим типом данных возможно выполнение битовых операций and, or, xor (&,|, ^).
  • Для обращения к отдельным битам и массивам [], range().
sc_bit flag(SC_LOGIC_1); // more efficient to use bool
sc_bv<5> positions = "01101";
sc_bv<6> mask = "100111";
sc_bv<5> active = positions & mask;// 00101
sc_bv<1> all = active. and_reduce (); // SC_LOGIC_0
positions. range (3,2) = "00"; // 00001
positions [2] = active[0] ^ flag;

Слайд:Типы данных (Несколько значений )

                // Пример типа данных SystemC 
sc_logic NAME[,NAME]...;
sc_lv<BITNIDTH> NAME[,NAME ]...;
sc_logic buf(sc_dt::Log_Z);
sc_lv<8> data_drive ("zz01XZ1Z");
data_drive.range (5,4) = "ZZ";// ZZZZXZ1Z
buf = '1';

Слайд:Операторы SystemC

Операции.png

Слайд:Главный модуль MAIN

Описание на языке C++
int main(int argc, char* argv[]) {
BODY_OF_PROGRAM
return EXIT_CODE; // 
}
Описание на языке SystemC
int sc_main(int argc, char* argv[]) {
//ELABORATION
sc_start(); // <-- Simulation begins & ends
            // in this function!
//[POST-PROCESSING]
return EXIT_CODE; // 
}

Слайд: Модуль

#include <systemc.h>
SC_MODULE(module_name) {
MODULE_BODY
};

Содержит:

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

Слайд: Конструктор (SC_CTOR)

SC_CTOR(module_name)
: Initialization // OPTIONAL
{
Subdesign_Allocation
Subdesign_Connectivity
Process_Registration
Miscellaneous_Setup
}
  • Объявление под модулей
  • Подключение и соединение с подмодулями
  • Регистрация процессов на SystemC
  • Обеспечение постоянной чувствительности
  • 'Разнообразные пользовательские объявления

Слайд: Конструктор (SC_HAS_PROCESS)

//FILE: module_name.h
SC_MODULE(module_name) {
SC_HAS_PROCESS(module_name);
module_name(sc_module_name instname[, other_args…])
: sc_module(instname)
[, other_initializers]
{
CONSTRUCTOR_BODY
}
};
  • Все возможности конструктора SC_CTOR
  • Альтернативный метод создания модуля
  • Позволяет создавать конструктор с аргументами(+ к имени модуля)
  • Используется, если желаете расположить конструктор в файле описания .cpp (не в файле .h)

Слайд: Процесс SC_THREAD

SC_MODULE(simple_process_ex) {
   SC_CTOR(simple_process_ex) {
      SC_THREAD(my_thread_process);
   }
   void my_thread_process(void);
};

SC_THREAD в SystemC:

  1. аналог initial block в Verilog
  2. process без списка чувствительности с оператором wait() в VHDL.

Слайд:Введение времени

Единицы измерения времени

SC_SEC // seconds
SC_MS  // milliseconds
SC_US  // microseconds
SC_NS  // nanoseconds
SC_PS  // picoseconds
SC_FS  // femtoseconds
Объявление переменной типа sc_time
sc_time t_PERIOD(5, SC_NS) ;
sc_time t_TIMEOUT (100, SC_MS) ;
sc_time t_MEASURE, t_CURRENT, t_LAST_CLOCK;
t_MEASURE = (t_CURRENT-t_LAST_CLOCK) ;
if (t_MEASURE > t_HOLD) { error ("Setup violated") }


Слайд:Запуск выполнения sc_start()

Функция запускающая выполнения главного процесса

Пример запуска моделирования на 60 секунд модельного времени

int sc_main(int argc, char* argv[]) { // args unused
simple_process_ex my_instance ("my_instance");
sc_start(60.0,SC_SEC); // Limit sim to one minute
return 0 ;
}

Слайд:Контроль текущего времени моделирования sc_time_stamp ()

std::cout << " The time is now "
<< sc_time_stamp()
<< "!" << std::endl;

После запуска моделирования в консоли получим

The time is now 0 ns!  


Слайд: Остановка выполнения моделирования wait(sc_time)

Функция останавливающая выполнение процесса до заданного времени или до прихода события

void simple_process_ex::my_thread_process (void) {
wait (10,SC_NS);
std::cout<< "Now at "<< sc_time_stamp() << std::endl;
sc_time t_DELAY(2,SC_MS); // keyboard debounce time
t_DELAY *= 2;
std::cout<< "Delaying "<< t_DELAY<< std::endl;
wait(t_DELAY);
std::cout << "Now at " << sc_time_stamp()
<< std::endl;
}
% . /run_example
Now at 10 ns
Delaying 4 ms
Now at 4000010 ns

Слайд:Иерархия и структура проекта

Слайд:Модель параллельной обработки

Слайд:Добавление модулей и способы их соединения между собой

Слайд:Управление процессом и контроль статуса моделирования

Слайд: VHDL и SystemC конструкции

Слайд: Entity

Слайд: Architecture

Слайд: Generic

Слайд: Process без списка чувствительности

Слайд: Process со списком чувствительности

Слайд: Работа с файлами

Слайд: Работа с переменными

Слайд: Работа с сигналами

Слайд: Арифметические, логические, операции присваивания

Слайд: Конструкции С++

Слайд: Создание модуля

Слайд: Коммуникации между модулями

Слайд: Управление процессом моделирования (сообщения, запуск останов моделирования)

Слайд: Компиляция описания

Слайд: Запуск моделирования только SystemC описания

Слайд: Запуск моделирования SystemC описания и VHDL