Рекомендуем

Проектирование конечных автоматов. Теория и практикаСоловьев В.В. Проектирование конечных автоматов. Теория и практика
Язык Verilog в проектировании встраиваемых систем на FPGAСоловьев В.В. Язык Verilog в проектировании встраиваемых систем на FPGA
Язык SystemVerilog для синтезаСоловьев В.В. Язык SystemVerilog для синтеза

Книга

Язык SystemVerilog для моделирования


Тиражирование книги начато в 2023 г.
688 стр.
Формат 70x100/16 (170x240 мм)
Исполнение: в твердом переплете
ISBN 978-5-9912-1019-5
ББК 32.85
УДК 658.512:519.87:004.3'12
Аннотация

Рассмотрена версия популярного языка проектирования SystemVerilog, предназначенная для моделирования. Достаточно полно описаны основные синтаксические элементы и конструкции языка с точки зрения их практического использования. Каждая конструкция языка сопровождается примером. Изложение материала не привязывается к определенной элементной базе или конкретному программному средству проектирования, поэтому материал книги может использоваться при разработке проектов как на микросхемах ASIC, так и на FPGA(ПЛИС). Язык SystemVerilog полностью наследует язык Verilog и предоставляет новые возможности для разработки больших и сложных проектов на самых верхних уровнях проектирования: системном, абстрактном и уровне транзакций. Кроме того, язык SystemVerilog включает новые языковые конструкции верификации проектов, обеспечивающие новые возможности для описания тестового окружения сложного проекта. В результате получился язык с очень широкими и разнообразными возможностями, которые трудно в деталях описать в одной книге. В предлагаемой книге, в основном, описываются подмножества языка и конструкции языка SystemVerilog, которые предназначены для моделирования: классы, утверждения, функциональное покрытие, рандомизация, а также программы, блоки синхронизации, события, семафоры, почтовые ящики и многое другое.

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

Оглавление

Предисловие

Глава 1. Введение
1.1. История языка SystemVerilog
1.2. Первоисточники языка SystemVerilog
1.3. Стандарты языка SystemVerilog
1.4. Введение в верификацию цифровых систем
1.4.1. Разработчики аппаратуры и инженеры по верификации
1.4.2. Взаимодействие тестируемого проекта и тестового стенда
1.4.3. Проблемы тестирования на различных уровнях проектирования
1.5. Тестовый стенд
1.5.1. Плоский тестовый стенд
1.5.2. Многоуровневый тестовый стенд
1.5.3. Функциональные модели шин
1.6. Утверждения
1.7. Функциональное покрытие
1.8. Рандомизация
1.8.1. Направленное тестирование
1.8.2. Тестирование на основе рандомизации
1.8.3. Ограниченное случайное управляющее воздействие
1.8.4. Объекты рандомизации
1.8.5. Начальные значения в рандомизации
1.9. Выполнение моделирования
1.9.1. Введение в событийное моделирование
1.9.2. Время моделирования, временной интервал, гонки
1.9.3. Регионы событий
1.9.4. Алгоритм моделирования
1.9.5. Статическая формальная верификация и логические конусы
1.10. Системные задачи отображения информации
1.10.1. Задачи отображения и записи
1.10.2. Спецификации формата
1.10.3. Размер отображаемых данных
1.10.4. Неизвестные значения и значения высокого импеданса
1.10.5. Формат шаблона назначений
1.10.6. Задачи стробированного мониторинга
1.10.7. Задачи непрерывного мониторинга
1.10.8. Системная задача формата времени $timeformat

Глава 2. Типы данных
2.1. Основные типы данных
2.1.1. Сети
2.1.2. Переменные
2.1.3. Целочисленные типы данных
2.1.4. Типы данных действительных чисел
2.1.5. Строковый тип данных
2.1.6. Тип данных событие
2.2. Массивы фиксированного размера
2.2.1. Объявление массивов
2.2.2. Многомерные массивы
2.2.3. Инициализация массивов при объявлении
2.2.4. Обращение к элементам, частям и фрагментам массивов
2.2.5. Присваивание значений массивам
2.2.6. Реализация циклов по элементам массивов
2.2.7. Операции над массивами
2.3. Другие виды массивов
2.3.1. Динамические массивы
2.3.2. Очереди
2.3.3. Ассоциативные массивы
2.4. Системные функции и методы для работы с массивами
2.4.1. Системные функции
2.4.2. Методы
2.4.3. Построение табло с помощью методов поиска
2.5. Выбор способа хранения данных
2.5.1. Гибкость
2.5.2. Использование памяти
2.5.3. Скорость
2.5.4. Доступ к данным
2.5.5. Выбор оптимальной структуры данных
2.6. Пользовательские типы
2.7. Структуры
2.7.1. Объявление структур
2.7.2. Присваивание значений структурам
2.7.3. Распакованные и упакованные структуры
2.8. Объединения
2.8.1. Объявление объединений
2.8.2. Распакованные и упакованные объединения
2.8.3. Обращение к элементам объединения
2.8.4. Теговые объединения
2.9. Перечисляемые типы
2.9.1. Объявление переменных перечисляемого типа
2.9.2. Автоматическая генерация меток перечисляемого типа
2.9.3. Значения перечисляемого типа
2.9.4. Выполнение операций на переменных перечисляемого типа
2.9.5. Системные методы для перечисляемых типов
2.9.6. Печать перечисляемых типов
2.9.7. Приведение выражений к перечисляемому типу
2.10. Константы
2.10.1. Константы parameter и localparam
2.10.2. Константы specparm
2.10.3. Константы const
2.10.4. Знак $ как значение параметра
2.11. Приведение типов
2.11.1. Статическая операция приведения типов
2.11.2. Динамическая системная функция приведения типов $cast
2.11.3. Приведение битовых потоков
2.11.4. Операция type
2.11.5. Системные функции преобразования типов
2.12. Пакеты
2.12.1. Определение пакетов
2.12.2. Ссылки на содержимое пакетов
2.12.3. Условная компиляция пакетов
2.13. Передача данных через порты и в качестве аргументов подпрограмм
2.13.1. Передача значений через порты модулей и интерфейсов
2.13.2. Передача в качестве аргументов подпрограмм массивов, структур и объединений

Глава 3. Выражения, операции и операторы назначения
3.1. Выражения
3.1.1. Константные выражения
3.1.2. Агрегатные выражения
3.1.3. Знаковые и беззнаковые арифметические выражения
3.1.4. Использование в выражениях операции назначения
3.1.5. Выражения строковых литералов
3.1.6. Размер битовых выражений
3.2. Операции
3.2.1. Приоритет операций
3.2.2. Операции с 2-мя и с 4-мя состояниями
3.2.3. Операции назначения
3.2.4. Операции инкремента и декремента
3.2.5. Операции равенства с подстановочными знаками
3.2.6. Логические операции
3.2.7. Операции сдвига
3.2.8. Конкатенация строк
3.2.9. Операция членства в множестве
3.2.10. Операции с битовыми потоками
3.3. Операторы назначения
3.4. Непрерывные назначения
3.5. Процедурные назначения
3.5.1. Оператор блокирующего назначения (=)
3.5.2. Оператор неблокирующего назначения (<=)
3.6. Управление временем в процедурных операторах назначения
3.6.1. Управление временем в операторах блокирующего назначения
3.6.2. Внутренние задержки в операторах блокирующего назначения
3.6.3. Управление временем в операторах неблокирующего назначения
3.6.4. Внутренние задержки в операторах неблокирующего назначения
3.7. Процедурные непрерывные назначения

Глава 4. Процессы и потоки
4.1. Процессы
4.2. Управление процедурным временем
4.2.1. Оператор управления задержками #
4.2.2. Оператор управления событиями @
4.2.3. Оператор ожидания wait
4.2.4. Управление процедурным временем внутри назначения
4.3. Процедурные блоки
4.3.1. Последовательный блок begin–end
4.3.2. Параллельные блоки (fork-join, join any и join none)
4.3.3. Время начала и время окончания процедурных блоков
4.3.4. Имена процедурных блоков
4.3.5. Метки процедурных операторов
4.4. Структурные процедуры
4.4.1. Процедура initial
4.4.2. Процедуры always
4.4.3. Процедура final
4.5. Управление процессами
4.5.1. Оператор wait fork
4.5.2. Оператор wait order
4.5.3. Оператор disable
4.5.4. Оператор disable fork
4.5.5. Тонкое управление процессами
4.6. Потоки
4.7. Управление потоками
4.7.1. Блоки fork–join
4.7.2. Блоки fork–join и begin–end
4.7.3. Использование блока fork–join none
4.7.4. Использование блока fork–join any
4.7.5. Создание потоков в классе
4.7.6. Динамические потоки
4.7.7. Автоматические переменные в потоках
4.7.8. Ожидание всех порожденных потоков
4.7.9. Совместное использование переменных в потоках
4.8. Отключение потоков
4.8.1. Отключение одного потока
4.8.2. Отключение нескольких потоков
4.8.3. Отключение задачи, которая вызывается несколько раз

Глава 5. Процедурные операторы
5.1. Условный оператор if–else
5.1.1. Конструкция if–else–if
5.1.2. Квалификаторы unique, unique0 и priority
5.2. Оператор case
5.2.1. Операторы casez и casex
5.2.2. Константные выражения в операторах case
5.2.3. Квалификаторы unique, unique0 и priority в операторах case
5.2.4. Атрибуты full case и parallel case
5.2.5. Атрибут full case
5.2.6. Атрибут parallel case
5.2.7. Сравнение квалификаторов unique и priority с атрибутами full case и parallel case и конструкциями else и default
5.2.8. Квалификатор inside оператора case
5.3. Операторы циклов
5.3.1. Цикл for
5.3.2. Цикл repeat
5.3.3. Цикл foreach
5.3.4. Цикл while
5.3.5. Цикл do–while
5.3.6. Цикл forever
5.4. Операторы переходов

Глава 6. Модули
6.1. Определение модулей
6.2. Стили и уровни описания проектов
6.2.1. Структурный стиль описания проектов
6.2.2. Поведенческий стиль описания проектов
6.2.3. Уровни описания проекта
6.3. Элементы модулей
6.4. Объявления портов
6.4.1. Форматы объявления портов ANSI и non-ANSI
6.5. Экземпляры модулей
6.6. Неявные соединения портов
6.6.1. Нотация .name неявного соединения портов
6.6.2. Нотация .* неявного соединения портов
6.7. Псевдонимы сетей
6.7.1. Оператор alias
6.7.2. Неявные объявления сетей в операторе alias
6.8. Использование псевдонимов сетей с нотациями неявных соединений .name и .*
6.9. Передача значений через порты модулей
6.10. Параметризованные модули
6.10.1. Объявление параметризованных модулей
6.10.2. Создание экземпляров параметризованных модулей
6.10.3. Параметризованные типы
6.11. Внешние модули (прототипы модулей)

Глава 7. Задачи и функции
7.1. Общая информация
7.2. Автоматические и статические задачи и функции
7.3. Задачи
7.3.1. Объявление задач
7.3.2. Вызов задач
7.4. Функции
7.4.1. Объявление функций
7.4.2. Возвращаемые значения
7.4.3. Аргументы функций типа output и inout
7.4.4. Функции типа void
7.4.5. Рекурсивные функции
7.5. Константные функции
7.6. Вызовы подпрограмм и передача аргументов
7.6.1. Передача аргументов по значению
7.6.2. Передача аргументов по ссылке
7.6.3. Значения аргументов по умолчанию
7.6.4. Передача аргументов по имени
7.6.5. Передача в качестве аргументов массивов, структур и объединений
7.7. Пустые задачи и функции
7.8. Параметризованные задачи и функции
7.9. Сравнение задач и функций
7.10. Системные задачи и функции

Глава 8. Интерфейсы
8.1. Общая информация
8.2. Объявление интерфейсов
8.2.1. Группирование сигналов с помощью интерфейсов8
8.2.2. Порты интерфейсов
8.2.3. Использование нотаций .name и .*
8.2.4. Глобальные и локальные интерфейсы
8.3. Использование интерфейсов в качестве портов модулей
8.4. Создание экземпляров интерфейсов и подключение интерфейсов к портам модуля
8.4.1. Создание экземпляров интерфейсов
8.4.2. Подключение интерфейсов к портам модулей
8.4.3. Подключение интерфейсов к другим интерфейсам
8.5. Ссылка на сигналы в пределах интерфейса
8.6. Модпорты интерфейсов
8.6.1. Определения модпортов
8.6.2. Два способа подключения интерфейсов с модпортами к экземплярам модуле
8.6.3. Ограничение доступа к сигналам интерфейса с помощью модпортов
8.7. Использование в интерфейсах задач и функций
8.7.1. Интерфейсные методы
8.7.2. Импорт интерфейсных методов в модпорты
8.7.3. Экспорт интерфейсных методов
8.8. Использование в интерфейсах процедурных блоков
8.9. Параметризованные интерфейсы
8.10. Выражения модпортов

Глава 9. Классы
9.1. Объявление класса
9.1.1. Синтаксис объявления класса
9.1.2. Объявление классов в пакете
9.1.3. Объявление класса с typedef
9.2. Создание объектов класса
9.2.1. Дескриптор класса и дескриптор объекта
9.2.2. Конструкторы классов
9.2.3. Дескрипторы и объекты
9.2.4. Освобождение памяти для объектов
9.2.5. Вызов типизированного конструктора
9.3. Обращение к свойствам и методам объекта
9.3.1. Обращение к свойствам объекта
9.3.2. Обращение к методам объекта
9.3.3. Дескриптор this
9.3.4. Константные свойства класса
9.4. Работа с динамическими объектами
9.4.1. Передача объектов и дескрипторов методам
9.4.2. Изменение дескриптора в методе
9.4.3. Изменение объектов «в полете»
9.4.4. Массивы дескрипторов
9.5. Статические свойства и статические методы класса
9.5.1. Статические свойства класса
9.5.2. Статические методы класса
9.6. Вложенные классы
9.7. Копирование объектов
9.7.1. Копирование объекта с помощью оператора new (неглубокое копирование)
9.7.2. Написание функции глубокого копирования
9.8. Наследование классов
9.8.1. Базовые классы и подклассы
9.8.2. Обращение к элементам базового класса
9.8.3. Скрытие и инкапсуляция данных
9.8.4. Понижение — приведение дескриптора базового класса к указателю на объем производного класса
9.8.5. Виртуальные методы
9.8.6. Абстрактные (виртуальные) классы и чистые виртуальные методы
9.8.7. Полиморфизм
9.9. Объявления методов вне класса
9.10. Параметризованные классы и специализация
9.10.1. Параметризованные классы
9.10.2. Специализация класса
9.11. Оператор разрешения области действия класса (::)
9.11.1. Общая информация
9.11.2. Оператор :: для параметризованных классов
9.12. Интерфейсные классы
9.12.1. Синтаксис интерфейсного класса
9.12.2. Реализация интерфейсного класса
9.12.3. Расширение по сравнению с реализацией
9.12.4. Параметры и определение типов в интерфейсном классе
9.12.5. Приведение и назначение ссылки объекта
9.12.6. Ромбовидные отношения
9.12.7. Специализация параметризованного интерфейсного класса
9.12.8. Частичная реализация
9.13. Примеры использования классов
9.13.1. Структура упрощенного тестового стенда
9.13.2. Базовая транзакция
9.13.3. Расширение класса транзакций для ввода ошибок
9.13.4. Класс драйвера
9.13.5. Класс простого генератора
9.13.6. Шаблон концептуального проекта при создании генератора
9.13.7. Класс окружающей среды
9.13.8. Простой тестовый стенд

Глава 10. Синхронизация моделирования и блоки синхронизации
10.1. Введение в синхронизацию процесса моделирования
10.1.1. Взаимодействие проекта и тестового стенда
10.1.2. Регионы событий
10.1.3. Определение задержек между проектом и тестовым стендом
10.2. Блоки синхронизации
10.2.1. Объявление блока синхронизации
10.2.2. Входные и выходные перекосы
10.2.3. Иерархические выражения, сигналы и контекст блока синхронизации
10.2.4. Программы и блоки синхронизации
10.2.5. Интерфейсы и блоки синхронизации
10.3. События блока синхронизации
10.4. Синхронизация по умолчанию
10.5. Оператор задержки цикла ##
10.6. Глобальная синхронизация
10.7. Выборка входов
10.8. Синхронные приводы (синхронная установка выходов)
10.8.1. Приводы и неблокирующие назначения
10.8.2. Управление выходными сигналами синхронизации
10.9. Генератор синхросигналов
10.10. Примеры использования синхронизации
10.10.1. Простой арбитр с тестовым стендом
10.10.2. Работа с событиями синхронизации
10.10.3. Управление сигналами интерфейса через блок синхронизации
10.10.4. Использование в интерфейсе двунаправленных сигналов

Глава 11. Программы
11.1. Синтаксис программ
11.2. Функционирование соединений портов программы при отсутствии блока синхронизации
11.3. Устранение гонок тестового стенда
11.4. Вызов программ из модулей и вызов задач и функций из программ
11.5. Анонимные программы
11.6. Завершение программ
11.7. Пример использования программы

Глава 12. Утверждения
12.1. Введение
12.1.1. Происхождение утверждений языка SystemVerilog
12.1.2. Что такое утверждение?
12.1.3. Преимущества использования утверждений
12.2. Немедленные утверждения
12.3. Отложенные утверждения
12.3.1. Действия отложенных утверждений
12.3.2. Точки очистки отложенных утверждений
12.3.3. Отключения отложенных утверждений
12.4. Параллельные утверждения
12.4.1. Параллельные утверждения с булевыми выражениями
12.4.2. Операция импликации
12.4.3. Основы синхронизации
12.4.4. Многопоточность параллельных утверждений
12.4.5. Функции выбора значений
12.4.6. Формальные аргументы
12.4.7. Оператор отключения свойств disable iff
12.4.8. Уровни серьезности
12.4.9. Оператор bind связывания свойств
12.4.10. Различия между последовательностями и свойствами
12.4.11. Операторы параллельных утверждений
12.5. Последовательности
12.5.1. Объявление последовательностей
12.5.2. Операции над последовательностями
12.5.3. Вызов подпрограмм из последовательностей
12.5.4. Последовательности как формальный аргумент
12.5.5. Последовательность как предшественник
12.5.6. Последовательности в списке чувствительности
12.5.7. Подпоследовательности (последовательность в последовательности)
12.5.8. Пустая последовательность [*0]
12.5.9. Сильные и слабые последовательности
12.5.10. Функции выбора прошлых и будущих значений
12.5.11. Конечная точка последовательности
12.5.12. Составление последовательностей из более простых последовательностей
12.5.13. Вырожденные последовательности
12.6. Свойства
12.6.1. Объявление свойств
12.6.2. Свойство последовательности
12.6.3. Операции над свойствами
12.6.4. Рекурсивные свойства
12.7. Системные задачи и функции, используемые в утверждениях
12.7.1. Задачи управления утверждениями $assertoff, $asserton, $assertkill
12.7.2. Задачи управления блоками активности утверждений $assertpasson, $assertpasson, $assertfailoff, $assertfailon, $assertnonvacuous, $assertvacuousoff
12.7.3. Универсальная задача управления утверждением $assertcontrol
12.7.4. Системные функции битовых векторов
12.8. Утверждения с множественными синхросигналами
12.8.1. Последовательности с множественными синхросигналами
12.8.2. Свойства с множественными синхросигналами
12.8.3. Потоки синхронизации
12.8.4. Конечная точка последовательности с множественными синхросигналами
12.8.5. Инициализация локальных переменных в случае множественных синхросигналов
12.9. Локальные переменные в последовательностях и свойствах
12.9.1. Объявление локальных переменных и основы их использования
12.9.2. Локальная переменная как формальный аргумент
12.9.3. Локальные переменные и метод triggered
12.9.4. Локальные переменные с участием операций or, and и intersect
12.9.5. Примеры использования локальных переменных
12.10. Асинхронные утверждения

Глава 13. Функциональное покрытие
13.1. Введение
13.1.1. Методика верификации и функциональное покрытие
13.1.2. Типы покрытия
13.1.3. Стратегии функционального покрытия
13.1.4. Пример простого функционального покрытия
13.2. Группы покрытия
13.2.1. Синтаксис группы покрытия
13.2.2. Формальные и актуальные аргументы группы покрытия
13.2.3. Запуск групп покрытия
13.2.4. Группы покрытия в класс
13.3. Точки покрытия
13.4. Бины
13.4.1. Синтаксис объявления бинов
13.4.2. Определение бинов для значений
13.4.3. Бины с конструкцией with
13.4.4. Бины для переходов
13.4.5. Автоматическое создание бинов
13.4.6. Ограничение количества автоматически создаваемых бинов
13.4.7. Бины с подстановочными знаками
13.4.8. Игнорирование значений или переходов точки покрытия
13.4.9. Недопустимые значения или переходы точки покрытия
13.4.10. Покрытие конечного автомата
13.5. Перекрестное покрытие (покрытие пересечения)
13.5.1. Синтаксис перекрестного покрытия
13.5.2. Определение бинов перекрестного покрытия
13.6. Опции покрытия
13.6.1. Опции экземпляров покрытия
13.6.2. Опции типа группы покрытия
13.7. Методы покрытия
13.7.1. Использование методов покрытия
13.7.2. Переопределение пользователем метода sample
13.8. Системные задачи и функции покрытия

Глава 14. Рандомизация
14.1. Введение
14.1.1. Основные концепции рандомизации
14.1.2. Что необходимо рандомизировать
14.1.3. Использование классов при рандомизации
14.1.4. Проверка результата рандомизации
14.2. Случайные переменные
14.2.1. Модификатор rand
14.2.2. Модификатор randc
14.2.3. Массивы
14.2.4. Структуры
14.2.5. Объединения
14.2.6. Перечисления
14.3. Методы рандомизации
14.3.1. Метод randomize()
14.3.2. Методы pre randomize() и post randomize()
14.3.3. Пример использования метода pre randomize()
14.4. Ограничения
14.4.1. Блоки ограничений
14.4.2. Наследование ограничений, абстрактный (виртуальный) класс и чистые ограничения
14.4.3. Оператор членства в наборе inside
14.4.4. Взвешенные распределения (оператор dist)
14.4.5. Ограничение уникальности (оператор unique)
14.4.6. Двунаправленные ограничения
14.4.7. Оператор импликации (–>)
14.4.8. Условный оператор if–else
14.4.9. Оператор эквивалентности (<–>)
14.4.10. Оператор цикла но элементам массива foreach
14.4.11. Оператор сокращения массива with
14.4.12. Глобальные ограничения
14.4.13. Упорядочивание случайных переменных (конструкция solve–before)
14.4.14. Статические ограничения
14.4.15. Функции в ограничениях
14.4.16. Защита от ограничений
14.4.17. Мягкие ограничения
14.4.18. Встроенные ограничения
14.5. Вероятности решений
14.5.1. Вероятности решений без ограничений
14.5.2. Использование импликации
14.5.3. Использование импликации и двунаправленных ограничений
14.5.4. Управление распределением с помощью конструкции solve–before2
14.6. Управление рандомизацией
14.6.1. Управление случайными переменными (метод rand mode())
14.6.2. Управление ограничениями (метод constraint mode())
14.6.3. Управление встроенными случайными переменными (метод randomize())
14.6.4. Проверка встроенных ограничений
14.6.5. Динамическая модификация ограничений
14.6.6. Допустимые ограничения
14.7. Рандомизация массивов
14.7.1. Размер массива
14.7.2. Сумма элементов массива
14.7.3. Ограничение отдельных элементов массива
14.7.4. Создание массива уникальных значений
14.7.5. Рандомизация массива дескрипторов
14.7.6. Пример использования рандомизации массива
14.8. Системные функции и методы рандомизации
14.8.1. Системная функция $urandom
14.8.2. Системная функция $urandom range()
14.8.3. Метод srandom()
14.8.4. Метод get randstate()
14.8.5. Метод set randstate()
14.9. Системные функции генерации случайных чисел и вероятностного распределения
14.9.1. Функция $random5
14.9.2. Функции вероятностного распределения
14.10. Генераторы случайных чисел и стабильность случайности
14.10.1. Генераторы случайных чисел
14.10.2. Стабильность случайности
14.10.3. Свойства стабильности случайности
14.10.4. Стабильность потока
14.10.5. Стабильность объекта
14.10.6. Ручная затравка рандомизации
14.11. Оператор случайного выбора randcase
14.12. Генерация случайных последовательностей
14.12.1. Веса случайности продукций
14.12.2. Операторы продукции if–else
14.12.3. Оператор продукции case
14.12.4. Оператор продукции repeat
14.12.5. Чередование продукций (оператор randjoin)
14.12.6. Прерывание продукций (операторы break и return)
14.12.7. Передача значений между продукциями
14.13. Методы рандомизации для построения тестовых стендов
14.13.1. Использование переменных в ограничениях
14.13.2. Использование неслучайных значений
14.13.3. Проверка значений с помощью ограничений
14.13.4. Рандомизация отдельных переменных
14.13.5. Выключение и включение ограничений
14.13.6. Использование встроенных ограничений
14.13.7. Использование внешних ограничений
14.13.8. Расширение класса
14.14. Пример использования рандомизации при построении тестового стенда

Глава 15. Контролеры
15.1. Объявление контролеров
15.2. Создание экземпляра контролера
15.3. Вывод сигналов синхронизации и сброса из контекста
15.4. Процедуры контролера
15.5. Группы покрытия в контролерах
15.6. Переменные контролера
15.6.1. Назначения переменных контролера
15.6.2. Рандомизация переменных контролера с предположениями
15.6.3. Планирование семантик
15.7. Функции в контролерах
15.8. Пример сложного контролера

Глава 16. Синхронизация процессов и связь между процессами
16.1. События
16.1.1. Инициирование события
16.1.2. Ожидание события
16.1.3. Устойчивый запуск события с помощью метода triggered
16.1.4. Указание последовательности событий с помощью оператора wait order
16.1.5. Операции над событиями
16.2. Примеры использования событий
16.2.1. Блокировка процессов на фронте событий
16.2.2. Ожидание запуска события с помощью метода triggered
16.2.3. Использование события в цикле
16.2.4. Передача события подпрограмме в качестве аргумента
16.2.5. Ожидание нескольких событий
16.3. Семафоры
16.3.1. Методы работы с семафорами
16.3.2. Пример использования семафоров
16.4. Почтовые ящики
16.4.1. Методы работы с почтовыми ящиками
16.4.2. Параметризованные почтовые ящики
16.5. Примеры использования почтовых ящиков
16.5.1. Простое использования почтового ящика для передачи данных между двумя объектами
16.5.2. Почтовый ящик в тестовом стенде
16.5.3. Ограниченные почтовые ящики
16.5.4. Несинхронизированные потоки, взаимодействующие с почтовым ящиком
16.5.5. Синхронизация потоков с помощью ограниченного почтового ящика и метки peek()
16.5.6. Синхронизация потоков с помощью почтового ящика и события
16.5.7. Синхронизация потоков с помощью двух почтовых ящиков

Глава 17. Временные характеристики
17.1. Маршрут проектирования с временными характеристиками
17.2. Модели задержек
17.2.1. Единицы измерения времени
17.2.2. Нотации задержек
17.2.3. Классификация задержек по соединению
17.3. Блок спецификации
17.3.1. Параметры спецификации
17.3.2. Объявление путей модуля
17.3.3. Простые пути модуля
17.3.4. Параллельное соединение
17.3.5. Полное соединение
17.3.6. Пути, чувствительные к фронту
17.3.7. Пути, зависящие от состояния
17.3.8. Объявление нескольких путей модулей в одном операторе
17.3.9. Полярность пути модуля
17.3.10. Назначение задержек путям модуля
17.3.11. Определение задержек переходов на путях модуля
17.4. Проверки синхронизации
17.4.1. Проверки синхронизации с использованием окна стабильности
17.4.2. Проверки синхронизации для тактовых и управляющих сигналов
17.4.3. Спецификаторы управления фронтом
17.4.4. Уведомители
17.4.5. Включение проверок синхронизации
17.5. Стандартный формат задержек SDF
17.5.1. SDF в процессе проектирования
17.5.2. Раздел заголовка
17.5.3. Раздел ячеек
17.5.4. Задержки
17.5.5. Определение задержек
17.5.6. Проверки синхронизации
17.6. Обратное аннотирование
17.6.1. Отображение конструкций файла SDF в язык SystemVerilog
17.6.2. Множественные аннотации
17.6.3. Загрузка данных синхронизации из файла SDF
17.7. Пример использования временных характеристик при описании пользовательского D-триггера

Глава 18. Защита исходного кода проекта от несанкционированного доступа
18.1. Общая информация
18.2. Обработка защитных конвертов
18.2.1. Шифрование
18.2.2. Дешифрование
18.3. Директивы прагмы protect
18.4. Описание директив прагмы protect
Глава 19. Структура многоуровневого тестового стенда с потоками и межпроцессными связями
19.1. Транзактор (Agent)
19.2. Класс конфигурации
19.3. Класс среды
19.4. Программа тестового стенда

Заключение

Приложение А. Ключевые слова языка SystemVerilog

Литература

Список сокращений

Предметный указатель