ЛР2 > Исследование комбинационных устройств: особенности языка Verilog

ЛР2 > Исследование комбинационных устройств: особенности языка Verilog

Скачать Материалы к лабораторной работе по Verilog №2.

1. Теоретические сведения

Языки описания аппаратуры (HDL, Hardware Descripion Language) могут быть использованы на всех этапах разработки цифровых электронных систем. Они применяются на этапах проектирования, верификации, синтеза и тестирования аппаратуры, а так же для передачи данных о проекте, его модификации и сопровождении.

Языки описания аппаратуры, в основном, используются для проектирования программируемых логических устройств (PLD – Programmable Logic Devices) различного уровня сложности, вентильных программируемых матриц (FPGA – Field Programmable Gate Array). На сегодняшний день нашли применение несколько таких языков. Наиболее популярные из них – Абель, Palasm и Cupl (используются для устройств малой степени сложности), Verilog и VHDL (для сложных PLD и FPGA устройств).

Преимущества HDL:

HDL позволяют создавать принципиальные схемы, иерархические блоки, алгоритмы функционирования устройств, а также тестовые файлы (test-bench) для проверки созданных модулей.

Язык Verilog

Verilog — это язык описания аппаратуры, используемый для разработки и моделирования электронных систем. Этот язык (также известный как Verilog HDL) позволяет осуществить проектирование, верификацию и реализацию (например, в виде СБИС) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.

Verilog был разработан фирмой Gateway Design Automaton для использования внутри компании. Затем, в 1989 г., Verilog был открыт для общего использования. Стандарт для данного языка был принят в 1995 году (IEEE1364-1995).

Verilog имеет простой синтаксис, сходный с языком программирования “С”. Малое количество служебных слов и простота основных конструкций упрощают изучение и позволяют создавать эффективные приложения. На описание одной и той же конструкции в Verilog потребуется в 3–4 раза меньше символов, чем в VHDL.

Интересной особенностью Verilog является наличие стандарта PLI (Program Language Interface), который позволяет включать функции, написанные пользователем (например, на С), в код симулятора.

Краткие теоретические сведения по языку Verilog

Поддерживаемые типы данных:

Создавать свои типы данных в Verilog нельзя.

Кроме основных типов данных, которые присущи всем языкам программирования, в HDL вводится новое понятие – сигнал.

Сигналы бывают двух основных типов:

Отличие сигналов wire от сигналов reg состоит в том, что reg способен сохранять присвоенное значение (работает как переменная в языках программирования или как устройство последовательного типа). К сигналам типа wire требуется прилагать непрерывное воздействие (как устройство комбинационного типа). То есть wire моделирует связь (или устройство), которая переходит в неопределенное состояние при отключении входного воздействия. Существуют также типы wand, wor, tri0, tri1, triand, trior, trireg для моделирования различных типов связей (wand – wired and или «монтажное И», tri0 – подтягивающий резистор к нулевому уровню, trireg – накопительная емкость, и т.п.), но такие цепи встречаются редко и используются только для моделирования.

Идентификаторы:

Идентификаторы в Verilog являются чувствительными к прописным и строчным символам и подчиняются обычным правилам: не могут начинаться с цифры или знака $ и могут содержать буквы, цифры, $, и символ подчеркивания.

Комментарии:

Комментарии в языке Verilog бывают двух типов и полностью соответствуют комментариям языка C++:

Маленький пример:

Допустимые значения для сигналов:

Всего существует четыре типа значений, которые могут принимать сигналы (wire и reg): 0, 1, z, x. Первые три соответствуют двум логическим уровням и состоянию с высоким импедансом. Четвертый (х) означает неопределенное состояние и используется при моделировании неинициализированных сигналов, при возникновении конфликтов (два выхода с противоположными состояниями соединены вместе), указания нестабильных состояний триггеров (при нарушении временных соотношений между входами данных и тактовым входом) и т.п. Другими словами – во всех случаях, когда моделирующая программа не может определить значение для данного сигнала.

Для указания значения многоразрядных сигналов (констант, переменных) используются следующие конструкции:

1) 1’bz – одноразрядный высокоимпедансный сигнал;

2) 10’d1_000 – десятиразрядное число 1000 записанное в десятичном виде (символ подчеркивания игнорируется);

3) 4’bx01z – четырехразрядный двоичный сигнал с неопределенным старшим битом, высокоимпедансным младшим, вторым и третьим в состоянии логических «1» и «0», соответственно.

В общем виде – вначале указывается разрядность сигнала, потом одинарная кавычка ‘(не путать с апострофом ), далее основание системы счисления (b,o,d,h) и цифры использующиеся в данной системе счисления, задающие значение сигнала.

Для двоичной системы допускается использование символов z и x.

Символ подчеркивания служит для улучшения восприятия записи и игнорируется при синтезе и моделировании. Использование констант без указания разрядности не желательно, так как по умолчанию константа воспринимается с разрядностью, равной 32 бита.

Данные типа integer могут присваиваться регистрам.

Файлы языка Verilog

Имеют расширение “.v”. Например: “module1.v”, “NCO.v”, “oscillator.v”

Структурное описание:

Основной структурной единицей программы на языке Verilog является module. Модуль описывается ключевыми словами moduleendmodule. В одном программном файле может присутствовать несколько модулей. Модули не могут быть вложенными. Другие модули могут подключаться к входным и выходным портам модуля, образуя иерархическую структуру. При запуске компилятора языка Verilog, он формирует иерархическое дерево проекта из всех входящих модулей и находит модуль верхнего уровня иерархии. Важно помнить, что имя модуля верхнего уровня иерархии должно совпадать с именем файла, в котором этот модуль описан!

📎📎📎📎📎📎📎📎📎📎