Рекомендуем

Разработка цифровых устройств на основе ПЛИС Xilinx<sup>®</sup> с применением языка VHDLТарасов И.Е. Разработка цифровых устройств на основе ПЛИС Xilinx® с применением языка VHDL297 р.
ПЛИС Xilinx. Языки описания аппаратуры VHDL и Verilog, САПР, приемы проектированияТарасов И.Е. ПЛИС Xilinx. Языки описания аппаратуры VHDL и Verilog, САПР, приемы проектирования
Язык Verilog в проектировании встраиваемых систем на FPGAСоловьев В.В. Язык Verilog в проектировании встраиваемых систем на FPGA

Книга

Язык SystemVerilog для синтеза

2022 г.
440 стр.
Тираж 500 экз.
Формат 70x100/16 (170x240 мм)
Исполнение: в мягкой обложке
ISBN 978-5-9912-0970-0
ББК 32.85
УДК 658.512:519.87:004.3'12
Аннотация

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

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

Оглавление

Предисловие

Глава 1. Предварительное знакомство с языком SystemVerilog
1.1. История языка SystemVerilog
1.2. Первоисточники языка SystemVerilog
1.3. Стандарты языка SystemVerilog
1.4. Базовые элементы языка SystemVerilog
1.4.1. Белые знаки
1.4.2. Комментарии
1.4.3. Операции
1.4.4. Идентификаторы
1.4.5. Ключевые слова
1.5. Логические значения
1.6. Числа
1.6.1. Представление целых чисел
1.6.2. Представление действительных чисел
1.7. Атрибуты
1.8. Параллелизм языка SystemVerilog
1.9. Синтез и моделирование проектов
1.9.1. Модель проекта для синтеза
1.9.2. Моделирование проекта
1.10. Конструктивные элементы языка SystemVerilog
1.10.1. Модули
1.10.2. Пакеты
1.10.3. Интерфейсы
1.10.4. Примитивы
1.10.5. Программы
1.10.6. Контролеры
1.10.7. Конфигурации
1.11. Единицы компиляции
1.12. Усовершенствования языка SystemVerilog для синтеза
1.13. Выводы

Глава 2. Модули
2.1. Определение модулей
2.2. Стили и уровни описания проектов
2.2.1. Структурный стиль описания проектов
2.2.2. Поведенческий стиль описания проектов
2.2.3. Уровни описания проекта
2.3. Элементы модулей
2.4. Объявления портов
2.5. Экземпляры модулей
2.6. Неявные соединения портов
2.6.1. Нотация .name неявного соединения портов
2.6.2. Нотация .* неявного соединения портов
2.7. Вложенные модули
2.8. Псевдонимы цепей
2.8.1. Оператор alias
2.8.2. Неявные объявления цепей в операторе alias
2.9. Использование псевдонимов цепей с нотациями неявных соединений .name и .*
2.10. Передача значений через порты модулей
2.11. Параметризованные модули
2.11.1. Объявление параметризованных модулей
2.11.2. Создание экземпляров параметризованных модулей
2.11.3. Параметризованные типы
2.12. Внешние модули (прототипы модулей)
2.13. Выводы

Глава 3. Основные типы данных
3.1. Определения
3.1.1. Типы данных и объекты данных
3.1.2. Типы сингулярный, агрегированный, интегральный и простой битовый вектор
3.1.3. Сети и переменные
3.2. Сети
3.2.1. Объявление сетей
3.2.2. Задержки
3.2.3. Типы сетей
3.2.4. Логическая мощность сигналов цепей
3.2.5. Значения сигналов сетей
3.2.6. Особенности синтеза
3.3. Переменные
3.3.1. Явные и неявные объявления переменных
3.3.2. Объявление переменных
3.3.3. Инициализация переменных
3.3.4. Переменные с 4 и с 2-мя состояниями
3.3.5. Статические и автоматические переменные
3.3.6. Инициализация статических и автоматических переменных
3.3.7. Область действия и время жизни переменных
3.4. Векторы
3.4.1. Векторы и скаляры
3.4.2. Выбор битов и битовых полей
3.5. Целочисленные типы данных
3.6. Типы данных действительных чисел
3.7. Строковый тип данных
3.8. Константы
3.8.1. Константы языка SystemVerilog
3.8.2. Константы parameter и localparam
3.8.3. Константы specparam
3.8.4. Константы const
3.8.5. Знак $ как значение параметра
3.9. Выводы

Глава 4. Пользовательские и перечисляемые типы
4.1. Пользовательские типы
4.2. Перечисляемые типы
4.2.1. Объявление переменных перечисляемого типа
4.2.2. Базовый тип перечисляемых типов
4.2.3. Автоматическая генерация меток перечисляемого типа
4.2.4. Значения перечисляемого типа
4.2.5. Введённые и анонимные перечисления
4.2.6. Выполнение операций на переменных перечисляемого типа
4.2.7. Приведение выражений к перечисляемому типу
4.2.8. Специальные системные методы для перечисляемых типов
4.2.9. Печать перечисляемых типов
4.3. Выводы

Глава 5. Совместимость и приведение типов
5.1. Совместимость типов
5.1.1. Совпадающие типы
5.1.2. Эквивалентные типы
5.1.3. Совместимость типов по назначению, по приведению и несовместимости типов
5.1.4. Совместимость сетевых типов
5.1.5. Системная функция $typename
5.2. Приведение типов
5.2.1. Статическая операция приведения типов
5.2.2. Динамическая системная функция приведения типов $cast
5.2.3. Приведение битовых потоков
5.2.4. Перечисляемые типы в числовых выражениях 1
5.2.5. Операция type 1
5.2.6. Системные функции преобразования типов 1
5.3. Выводы 1

Глава 6. Структуры и объединения
6.1. Структуры 1
6.1.1. Объявление структур
6.1.2. Шаблоны назначений
6.1.3. Присваивание значений структурам
6.1.4. Распакованные и упакованные структуры
6.1.5. Передача структур через порты модулей
6.1.6. Передача структур в качестве аргументов задачам и функциям
6.2. Объединения
6.2.1. Распакованные и упакованные объединения
6.2.2. Теговые объединения
6.3. Пример использования структур и объединений
6.4. Выводы

Глава 7. Массивы
7.1. Массивы в языке SystemVerilog
7.1.1. Упакованные массивы
7.1.2. Распакованные массивы
7.1.3. Инициализация массивов при объявлении
7.1.4. Присваивание значений массивам
7.1.5. Копирование массивов
7.1.6. Копирование массивов и структур с помощью приведения битовых потоков
7.1.7. Операции над массивами
7.1.8. Память
7.1.9. Многомерные массивы
7.1.10. Обращение к элементам и фрагментам (частям) массивов
7.1.11. Передача массивов через порты и как аргументы задачам и функциям
7.1.12. Массивы, структуры и объединения
7.1.13. Реализация циклов над элементами массивов (оператор foreach)
7.1.14. Пример использования массивов
7.2. Конкатенация распакованных массивов
7.3. Другие виды массивов
7.3.1. Динамические массивы
7.3.2. Ассоциативные массивы
7.3.3. Очереди
7.4. Системные функции и методы для работы с массивами
7.4.1. Системные функции
7.4.2. Системная функция $bits
7.4.3. Методы обработки массивов
7.5. Выводы

Глава 8. Места объявлений элементов проекта
8.1. Пакеты
8.1.1. Определение пакетов
8.1.2. Ссылки на содержимое пакетов
8.1.3. Рекомендации по синтезу
8.1.4. Встроенный пакет std
8.2. Единицы компиляции
8.2.1. Внешние объявления единиц компиляции
8.2.2. Явный доступ к внешним объявлениям
8.2.3. Импорт пакетов в единицы компиляции
8.2.4. Условная компиляция пакетов
8.3. Объявления в процедурных блоках
8.4. Области видимости идентификаторов
8.5. Иерархические и точечные имена
8.6. Ссылки на имена вверх по иерархии
8.7. Привязка вспомогательного кода к контекстам или экземплярам модулей
8.8. Выводы

Глава 9. Операции и выражения
9.1. Выражения, операции и операнды
9.2. Константные выражения
9.3. Агрегатные выражения
9.4. Операции
9.4.1. Приоритет операций
9.4.2. Использование в выражениях целочисленных литералов
9.4.3. Операции с 2-мя и с 4-мя состояниями
9.4.4. Использование в выражениях операции назначения
9.5. Описание операций
9.5.1. Операции назначения
9.5.2. Операции инкремента и декремента
9.5.3. Арифметические операции
9.5.4. Арифметические выражения со знаковыми и беззнаковыми типами
9.5.5. Операции отношения
9.5.6. Операции равенства
9.5.7. Операции равенства с подстановочными знаками
9.5.8. Логические операции
9.5.9. Побитовые операции
9.5.10. Операции редукции
9.5.11. Операции сдвига
9.5.12. Условная операция
9.5.13. Операция конкатенации
9.5.14. Операция репликации
9.5.15. Конкатенация строк
9.5.16. Операция членства в множестве
9.5.17. Потоковые операции
9.6. Размер битовых выражений
9.7. Знаковые выражения
9.8. Выражения строковых литералов
9.9. Конструкция let
9.10. Выводы

Глава 10. Операторы назначения
10.1. Назначения в языке SystemVerilog
10.2. Непрерывные назначения
10.3. Процедурные назначения
10.3.1. Оператор блокирующего назначения ( =)
10.3.2. Оператор неблокирующего назначения (< =)
10.3.3. Особенности синтеза процедурных операторов блокирующего и неблокирующего назначения
10.4. Управление временем в процедурных операторах назначения
10.4.1. Управление временем в операторах блокирующего назначения
10.4.2. Внутренние задержки в операторах блокирующего назначения
10.4.3. Управление временем в операторах неблокирующего назначения
10.4.4. Внутренние задержки в операторах неблокирующего назначения
10.5. Процедурные непрерывные назначения
10.6. Выводы

Глава 11. Процессы
11.1. Управление процедурным временем
11.1.1. Оператор управления задержками #
11.1.2. Оператор управления событиями @
11.1.3. Оператор ожидания wait
11.1.4. Управление процедурным временем внутри назначения
11.2. Процедурные блоки
11.2.1. Последовательный блок begin-end
11.2.2. Параллельные блоки (fork-join, join any, join none)
11.2.3. Время начала и время окончания процедурных блоков
11.2.4. Имена процедурных блоков
11.2.6. Метки процедурных операторов
11.3. Структурные процедуры
11.3.1. Процедура initial
11.3.2. Процедуры always
11.3.3. Процедура final
11.4. Управление процессами
11.4.1. Оператор wait fork
11.4.2. Оператор wait order
11.4.3. Оператор disable
11.4.4. Оператор disable fork
11.4.5. Тонкое управление процессами
11.5. Выводы

Глава 12. Процедурные операторы
12.1. Условный оператор if-else
12.1.1. Конструкция if-else-if
12.1.2. Квалификаторы unique, unique0 и priority
12.1.3. Особенности синтеза квалификаторов unique, unique0, priority в конструкции if-else-if
12.2. Оператор case
12.2.1. Операторы casez и casex
12.2.2. Константные выражения в операторах case
12.2.3. Квалификаторы unique, unique0 и priority в операторах case
12.2.4. Особенности синтеза квалификаторов unique, unique0, priority в операторе case
12.2.5. Атрибуты синтеза full case и parallel case
12.2.6. Атрибут full case
12.2.7. Атрибут parallel case
12.2.8. Сравнение квалификаторов unique и priority с атрибутами full case и parallel case и конструкциями else и default
12.2.9. Квалификатор inside оператора case
12.3. Операторы циклов
12.3.1. Цикл for
12.3.2. Цикл repeat
12.3.3. Цикл foreach
12.3.4. Цикл while
12.3.5. Цикл do-while
12.3.6. Цикл forever
12.5. Операторы переходов
12.5.1. Оператор continue
12.5.2. Оператор break
12.5.3. Оператор return4
12.6. Выводы

Глава 13. Задачи и функции
13.1. Общая информация
13.2. Автоматические и статические задачи и функции
13.3. Задачи
13.3.1. Объявление задач
13.3.2. Вызов задач
13.4. Функции
13.4.1. Объявление функций
13.4.2. Возвращаемые значения
13.4.3. Аргументы функций типа output и inout
13.4.4. Функции типа void
13.4.5. Рекурсивные функции
13.5. Константные функции
13.6. Вызовы подпрограмм и передача аргументов
13.6.1. Передача аргументов по значению
13.6.2. Передача аргументов по ссылке
13.6.3. Значения аргументов по умолчанию
13.6.4. Передача аргументов по имени
13.6.5. Передача в качестве аргументов массивов, структур и объединений
13.7. Пустые задачи и функции
13.8. Параметризованные задачи и функции
13.9. Сравнение задач и функций
13.10. Системные задачи и функции
13.10.1. Функции для работы с битовыми выражениями
13.11. Выводы

Глава 14. Интерфейсы
14.1. Общая информация
14.2. Объявление интерфейсов
14.2.1. Пример цифровой системы без использования интерфейсов
14.2.2. Группирование сигналов с помощью интерфейсов
14.2.3. Порты интерфейсов
14.2.4. Использование нотаций .name и .*
14.2.5. Глобальные и локальные интерфейсы
14.3. Использование интерфейсов в качестве портов модулей
14.3.1. Явно объявленные интерфейсные порты
14.3.2. Универсальные интерфейсные порты
14.4. Создание экземпляров интерфейсов и подключение интерфейсов к портам модулей
14.4.1. Создание экземпляров интерфейсов
14.4.2. Подключение интерфейсов к портам модулей
14.4.3. Подключение интерфейсов к другим интерфейсам
14.5. Ссылка на сигналы в пределах интерфейса
14.6. Модпорты интерфейсов
14.6.1. Определения модпортов
14.6.2. Два способа подключения интерфейсов с модпортами к экземплярам модулей
14.6.3. Ограничение доступа к сигналам интерфейса с помощью модпортов
14.6.4. Сравнение различных способов описания интерфейсов
14.7. Использование в интерфейсах задач и функций
14.7.1. Интерфейсные методы
14.7.2. Импорт интерфейсных методов в модпорты
14.7.3. Экспорт интерфейсных методов
14.8. Использование в интерфейсах процедурных блоков
14.9. Параметризованные интерфейсы
14.10. Несинтезируемые конструкции интерфейсов
14.11. Выводы

Глава 15. Генерация кода
15.1. Синтаксис конструкций генерации
15.2. Конструкции генерации циклов
15.3. Конструкции условной генерации
15.4. Внешние имена неименованных блоков генерации
15.5. Выводы

Глава 16. Директивы компиляции
16.1. Возврат к умалчиваемым значениям директив компиляции
16.2. Определение значения единицы времени
16.3. Макроопределения
16.3.1. Подстановка макросов в текстовую строку
16.3.2. Создание из макросов имён идентификаторов
16.4. Директивы условной компиляции
16.5. Определение умалчиваемого типа цепей
16.6. Определение логических значений для неподсоединённых входов
16.7. Обозначение модулей как модули ячеек
16.8. Прагмы0
16.9. Включение файлов
16.10. Определение номеров строк исходного кода
16.11. Директивы ` FILE и ` LINE
16.12. Директивы `begin keywords и `end keywords
16.13. Выводы

Глава 17. Примитивы
17.1. Где можно найти готовое решение
17.2. Примитивы языка SystemVerilog
17.2.1. Типы примитивов
17.2.2. Сила драйвера
17.2.3. Задержки
17.2.4. Массивы примитивов
17.2.5. Список терминалов
17.2.6. Логические вентили and, nand, or, nor, xor и xnor
17.2.7. Буферы buf и not
17.2.8. Буферы bufif1, bufif0, notif1 и notif0
17.2.9. Переключатели MOS
17.2.10. Двунаправленные переключатели
17.2.11. Источники pullup и pulldown
17.3. Пользовательские примитивы
17.3.1. Объявление пользовательских примитивов
17.3.2. Комбинационные пользовательские примитивы
17.3.3. Последовательностные пользовательские примитивы, чувствительные к уровню управляющего сигнала
17.3.4. Последовательностные пользовательские примитивы, чувствительные к фронту управляющего сигнала
17.3.5. Инициализация последовательностных пользовательских примитивов
17.3.6. Пользовательские примитивы, чувствительные как к уровню, так и к фронту управляющего сигнала
17.3.7. Создание экземпляров пользовательских примитивов
17.4. Выводы

Глава 18. Конфигурация проекта
18.1. Конфигурации
18.2. Конфигурационные блоки
18.3. Файл карты библиотеки
18.4. Иерархические конфигурации
18.5. Указание в конфигурации значений параметров модулей
18.6. Примеры конфигурации проекта
18.6.1. Исходное описание проекта
18.6.2. Использование конфигурации, заданной в файле карты библиотеки
18.6.3. Использование оператора default
18.6.4. Использование оператора cell
18.6.5. Использование оператора instance
18.6.6. Использование иерархической конфигурации
18.7. Выводы

Заключение

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

Список примеров

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

Литература

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