
- •Введение
- •Проектирование цифровых устройств на языках описания аппаратного состава
- •История Verilog
- •Архитектура ПЛИС
- •Пример реализации модуля на Verilog
- •Язык Verilog
- •Лексические элементы
- •Комментарии
- •Числа
- •Строки
- •Идентификаторы
- •Ключевые слова
- •Типы данных
- •Набор значений
- •Проводники
- •Регистры
- •Входы, выходы и двунаправленные порты
- •Векторы
- •Массивы
- •Тип integer
- •Тип time
- •Параметры
- •Операторы
- •Арифметические операторы
- •Операторы сравнения
- •Побитовые операторы
- •Логические операторы
- •Операторы сокращения
- •Операторы сдвига
- •Операторы конкатенации
- •Операторы повторения
- •Тернарный условный оператор
- •Модули
- •Объявление модуля
- •Создание экземпляра модуля
- •Поведенческое описание
- •Блоки begin … end
- •Циклы
- •Условный оператор if…else
- •Оператор выбора case
- •Применение языка Verilog
- •Регистры, проводники и описание схем
- •Примеры модулей
- •Дешифратор
- •Синхронный счетчик до 5 со сбросом и разрешением
- •Моделирование
- •Задание временных зависимостей
- •Задание задержек
- •Задание событий
- •Использование задержек и событий внутри присваиваний
- •Оператор ожидания
- •Процедурные структуры
- •Блок always
- •Блок initial
- •Поведенческое описание
- •Системные процессы и функции
- •Ввод/вывод на экран
- •Считывание времени
- •Управление процессом моделирования
- •Директивы компилятора
- •Задание шага временной сетки
- •Задание и использование макроса
- •Включение файлов
- •Создание тестбенча
- •Тестбенч дешифратора
- •Тестбенч счетчика
- •Контрольные вопросы
- •Список литературы
Оглавление
1. |
Введение................................................................................................................................. |
6 |
|
1.1. Проектирование цифровых устройств на языках описания аппаратного состава...... |
6 |
||
1.2. |
|
История Verilog................................................................................................................ |
10 |
1.3. |
|
Архитектура ПЛИС ......................................................................................................... |
11 |
1.4. Пример реализации модуля на Verilog.......................................................................... |
15 |
||
2. |
Язык Verilog........................................................................................................................ |
20 |
|
2.1. |
|
Лексические элементы .................................................................................................... |
20 |
2.1.1. |
Комментарии ................................................................................................................ |
20 |
|
2.1.2. |
Числа.............................................................................................................................. |
20 |
|
2.1.3. |
Строки ........................................................................................................................... |
22 |
|
2.1.4. |
Идентификаторы.......................................................................................................... |
22 |
|
2.1.5. |
Ключевые слова............................................................................................................ |
23 |
|
2.2. |
|
Типы данных .................................................................................................................... |
23 |
2.2.1. |
Набор значений............................................................................................................. |
23 |
|
2.2.2. |
Проводники................................................................................................................... |
23 |
|
2.2.3. |
Регистры........................................................................................................................ |
24 |
|
2.2.4. Входы, выходы и двунаправленные порты............................................................... |
24 |
||
2.2.5. |
Векторы......................................................................................................................... |
25 |
|
2.2.6. |
Массивы ........................................................................................................................ |
25 |
|
2.2.7. |
Тип integer..................................................................................................................... |
26 |
|
2.2.8. |
Тип time......................................................................................................................... |
27 |
|
2.2.9. |
Параметры..................................................................................................................... |
27 |
|
2.3. |
|
Операторы......................................................................................................................... |
28 |
2.3.1. |
Арифметические операторы........................................................................................ |
28 |
|
2.3.2. |
Операторы сравнения .................................................................................................. |
29 |
|
2.3.3. |
Побитовые операторы.................................................................................................. |
29 |
|
2.3.4. |
Логические операторы................................................................................................. |
30 |
|
2.3.5. |
Операторы сокращения ............................................................................................... |
30 |
2.3.6. |
Операторы сдвига......................................................................................................... |
31 |
|
2.3.7. |
Операторы конкатенации............................................................................................ |
31 |
|
2.3.8. |
Операторы повторения................................................................................................ |
32 |
|
2.3.9. |
Тернарный условный оператор................................................................................... |
32 |
|
2.3.10. |
Приоритет операторов................................................................................................. |
32 |
|
2.3.11. |
Присваивания................................................................................................................ |
33 |
|
2.4. |
|
Модули.............................................................................................................................. |
36 |
2.4.1. |
Объявление модуля...................................................................................................... |
36 |
|
2.4.2. |
Создание экземпляра модуля...................................................................................... |
37 |
|
2.5. |
|
Поведенческое описание................................................................................................. |
38 |
2.5.1. |
Блоки begin … end........................................................................................................ |
38 |
|
2.5.2. |
Циклы............................................................................................................................ |
39 |
|
2.5.3. |
Условный оператор if…else........................................................................................ |
40 |
|
2.5.4. |
Оператор выбора case .................................................................................................. |
42 |
|
3. |
Применение языка Verilog............................................................................................... |
45 |
|
3.1. Регистры, проводники и описание схем........................................................................ |
45 |
||
3.2. |
|
Примеры модулей............................................................................................................ |
49 |
3.2.1. |
Дешифратор.................................................................................................................. |
49 |
|
3.2.2. |
Синхронный счетчик до 5 со сбросом и разрешением............................................. |
50 |
|
4. |
Моделирование .................................................................................................................. |
52 |
|
4.1. |
|
Задание временных зависимостей.................................................................................. |
52 |
4.1.1. |
Задание задержек.......................................................................................................... |
52 |
|
4.1.2. |
Задание событий........................................................................................................... |
52 |
|
4.1.3. |
Использование задержек и событий внутри присваиваний..................................... |
53 |
|
4.1.4. |
Оператор ожидания...................................................................................................... |
53 |
|
4.2. |
|
Процедурные структуры................................................................................................. |
54 |
4.2.1. |
Блок always.................................................................................................................... |
54 |
|
4.2.2. |
Блок initial ..................................................................................................................... |
54 |
|
4.2.3. |
Поведенческое описание............................................................................................. |
55 |
|
4.3. Системные процессы и функции.................................................................................... |
56 |
Оглавление |
2 |
4.3.1. |
Ввод/вывод на экран.................................................................................................... |
56 |
4.3.2. |
Считывание времени.................................................................................................... |
57 |
4.3.3. |
Управление процессом моделирования..................................................................... |
57 |
4.4. |
Директивы компилятора ................................................................................................. |
57 |
4.4.1. Задание шага временной сетки................................................................................... |
58 |
|
4.4.2. Задание и использование макроса.............................................................................. |
58 |
|
4.4.3. |
Включение файлов....................................................................................................... |
59 |
4.5. |
Создание тестбенча.......................................................................................................... |
59 |
4.5.1. |
Тестбенч дешифратора................................................................................................ |
60 |
4.5.2. |
Тестбенч счетчика........................................................................................................ |
63 |
Приложение 1. Ключевые слова Verilog.............................................................................. |
67 |
|
Контрольные вопросы............................................................................................................. |
68 |
|
Список литературы.................................................................................................................. |
70 |
Оглавление |
3 |
МГТУ им. Н.Э. Баумана Факультет «Информатика и Системы Управления» Кафедра ИУ-3 «Информационные системы и телекоммуникации» ФЕДОРОВ СЕРГЕЙ ВЛАДИМИРОВИЧ ЯЗЫК VERILOG
Электронное учебное пособие МОСКВА 2009 год МГТУ им. Баумана
Оглавление |
4 |
Аннотация
Впособии рассматриваются основные возможности языка описания аппаратного состава
Verilog.
Внастоящее время, в связи со значительным ростом степени интеграции цифровых схем, разработка цифровых схем осуществляется на высоком уровне абстракции, в том числе на специальных языках описания аппаратного состава. Язык Verilog – один из наиболее распространенных языков описания аппаратного состава, предоставляющий необходимые возможности для описания и моделирования цифровых схем.
Основное внимание в данном пособии уделено реализации синтезируемых описаний и соответствующему подмножеству языка. Рассмотрены основы создания тестовых модулей (тестбенчей) для моделирования в САПР. Пособие может использоваться в курсах, посвященных логическому проектированию схем и проектированию цифровых схем на программируемых логических интегральных схемах (ПЛИС).
Оглавление |
5 |
1. Введение
1.1. Проектирование цифровых устройств на языках описания аппаратного состава
До появления микросхем высокой степени интеграции традиционным подходом к проектированию цифровых устройств был схемный ввод на уровне блоков, соответствующих стандартным микросхемам низкой степени интеграции и примитивов, таких, как логические вентили и триггеры.
В настоящее время, в связи со значительным ростом степени интеграции, произошел переход к описанию цифровых схем на высоком уровне абстракции. При этом часто используется подход “сверху вниз”, причем нижним уровнем описания часто является не описание функционирования модулей на уровне регистров и вентилей, называемое “уровнем регистровых передач” (RTL – register transfer level), а описание поведения схемы, ее логики работы, называемое “поведенческим описанием” (behavioral description level).
Для описания схем и их моделирования были разработаны так называемые языки описания аппаратного состава (HDL – hardware description language). Современные средства проектирования поддерживают моделирование и синтез логических схем, функционирование которых описано на этих языках.
Использование языков описания аппаратного состава обеспечивает ряд важных преимуществ:
•использование высокоуровневых описаний позволяет сократить сроки проектирования;
•спроектированные модули могут быть синтезированы для любой аппаратной платформы и технологической базы;
•возможности современных синтезаторов позволяют эффективно исследовать пространство возможных решений при синтезе и поиска компромисса по
быстродействию, энергопотреблению и объему логики;
Оглавление |
6 |
•упрощается поддержка, аудит и верификация проекта.
Внастоящее время наиболее популярными языками, применяемыми для описания цифровых систем, являются языки Verilog HDL и VHDL.
Впроектировании цифровых систем можно выделить несколько уровней детализации, которые одновременно соответствуют переходам между процессами разработки при реализации подхода “сверху вниз”:
•Требования к системе
•Формальное представление
•Архитектура
•Регистры и логика
•Вентили
•Транзисторы
Требования к системе формализуются в виде технического задания, технических требований и прочей проектной документации.
Формальное представление может быть осуществлено, например, в виде блок-схемы алгоритма, диаграммы потока данных в системе или конечного автомата. В настоящее время имеются САПР, поддерживающие такие представления системы и реализующие их автоматическую трансляцию в синтезируемые описания на языках описания аппаратного состава.
Однако пока что средства трансляции формального представления на более низкие уровни не позволяют получить гарантированно эффективных реализаций, так как при проектировании аппаратуры требуется учитывать ее особенности. Современные высокоуровневые средства описания могут вселить в неопытного разработчика надежду на “легкое” и “быстрое” проектирование, без необходимости разбираться с особенностями схемной реализации комбинаторных функций, триггеров, устройств памяти и т.д..
Оглавление |
7 |
Например, можно создать цифровой фильтр в Матлабе, экспортировать в Verilog и синтезировать в аппаратную реализацию. К сожалению, при таком подходе зачастую генерируются крайне неэффективные аппаратные реализации, которые требуют в дальнейшем значительной доводки. Правка кода на более низких уровнях зачастую не дает должного эффекта, так как грамотные технические решения должны приниматься уже на уровне формального представления, исходя из знания особенностей и ограничений аппаратуры. По этой причине начинающему разработчику следует сначала детально разобраться в особенностях аппаратной реализации на уровне триггеров и вентилей.
Описание на уровне архитектуры в Verilog обычно реализуется как поведенческое описание. При этом используются операторы, схожие с операторами обычных языков программирования – условный оператор, оператор выбора и т.д. Таким образом описывается поведение схемы и одновременно задается архитектура, как в части комбинаторных функций, так и регистровой логики.
Например, следующий код:
always @(*) begin
a=b+d;
end;
читается как “всегда при изменении любого входного сигнала записать в a сумму текущих значений b иd” и приводит при переходе на более низкиеуровни к синтезу сумматора (рис.
1).
Оглавление |
8 |

Рис. 1. Сумматор
Код:
always @(posedge clk) begin
a<=b+d;
end;
читается как “всегда при поступлении положительного фронта тактового импульса clk записывать в a сумму b и d в этот момент времени” и приводит к синтезу сумматора с регистром на выходе (рис. 2).
Рис. 2. Сумматор с регистром на выходе
Представление схемы в виде регистров и логики на Verilog реализуется на уровне регистровых передач. В сравнении с рассмотренным выше примером поведенческого
Оглавление |
9 |