- •Vhdl – язык описания аппаратных средств методические указания
- •Введение
- •1История создания vhdl
- •2Алфавит языка
- •3Лексические элементы
- •3.1Разделители и ограничители
- •3.2Идентификаторы
- •3.3 Ключевые (зарезервированные) слова
- •3.4Абстрактные литералы
- •3.4.1Десятичные литералы
- •3.4.2Литералы с указанием основания системы счисления
- •3.5Символьные литералы
- •3.6Строковые литералы
- •3.7Битовые строки
- •3.8 Комментарии
- •4Типы данных
- •4.1Скалярные типы
- •4.1.1Перечисления
- •4.1.2Целые числа
- •4.1.3Физические типы
- •4.1.4Числа с плавающей точкой
- •4.2Составные типы
- •4.2.1Массивы
- •4.2.2Записи
- •4.3Указатели
- •4.4Файлы
- •5.1Простое имя
- •5.2Символ оператора
- •5.3Селективное имя
- •5.4Индексное имя
- •5.5Вырезка имени
- •5.6Имя атрибута
- •5.7Видимость и область действия имен
- •6Bыражения
- •6.1Операторы
- •6.1.1Логические операторы
- •6.1.2Операторы сравнения
- •6.1.3Операторы сдвига
- •6.1.4Аддитивные операторы
- •6.1.5Мультипликативные операторы
- •6.1.6Знаковые операторы
- •6.1.7Cмешанные операторы
- •6.2Операнды
- •6.2.1Операнд Name
- •6.2.2Операнд Literal
- •6.2.3Операнд Аggrеgаtе
- •6.2.4Операнд Function Call
- •6.2.5Операнд Qualified Expression
- •6.2.6Операнд Type Conversion
- •6.2.7Операнд Allocator
- •6.2.8Статическое выражение
- •6.2.9Универсальное выражение
- •7Представление системы в vhdl
- •7.1Общая структура описания проекта системы
- •7.2Сущность проекта системы
- •7.3Архитектура проекта системы
- •7.4Предложения vhdl
- •8Структурное описание цифровых устройств
- •8.1Сигналы в vhdl
- •8.2Описание нерегулярных структур
- •8.3Описание регулярных структур
- •9Функциональное описание цифровых устройств
- •9.1Описание комбинационных устройств
- •9.1.1Особенности применения сигналов
- •9.1.2Предложение Process Statement
- •9.1.3Предложение Variable Declaration Statement
- •9.1.4Предложение Variable Assignment Statement
- •9.1.5Подпрограммы
- •9.1.6Предложение If Statement
- •9.1.7Предложение Cаsе Stаtеmеnt
- •9.1.8Предложение Lоор Statement
- •9.2Описание последовательных устройств
- •9.2.1Описание триггеров
- •9.2.2Описание регистров
- •9.2.3Описание счетчиков
- •9.2.4Описание цифровых автоматов
- •10Моделирование цифровых устройств
- •10.1Общие методические рекомендации по выполнению лабораторных работ
- •10.2Лабораторная работа №1. Поведенческое описание комбинационных устройств
- •Порядок выполнения работы
- •Контрольные вопросы
- •Рекомендованная литература
6.1.1Логические операторы
Определение.
logical_operator ::= and | nаnd | or | nor | xоr | nxоr | not
Логические операторы выполняют следующие функции: and – логическое 'и'; nand – логическое 'и-не'; or – логическое 'или'; nоr –логическое 'или-не'; xоr – логическое 'исключающее или'; nxor – логическое 'исключающее или-не'; nоt – логическое отрицание.
B логическиx бинарных выраженияx массивы должны быть одинаковой длины. Вычисления здесь производятся над парами элементов, равно отстоящими от левой границы. Результатом является массив, индексация элементов в котором совпадает с индексацией элементов левого операнда, то есть их подтипы совпадают.
Оператор not является логическим унарным.
Логические операторы выполняются для следующих типов данных:
boolean;
bit, bit_vector;
std_logic, std_logic_vector;
std_ulogic, std_ulogic_vector.
Логические операторы and, nand, or, nor, xor, nxor имеют одинаковое старшинство и выполняются слева направо в выражениях. Операция not имеет более высокое старшинство и выполняется прежде других операторов. В сложных логических выражениях порядок выполнения операторов регулируется скобками. Рекомендуется применять скобки в затруднительных случаях. Например, для выражения
Z <= А AND NOT B OR C;
будет только отрицание B, в выражении
Z <= А AND NOT (B OR C);
будет отрицание подвыражения B OR C, находящегося в скобках.
В языке VHDL можно применять три способа вызова операторов:
префиксный;
обычный (инфиксный);
с использованием квалифицирующего выражения.
Три способа вызова операторов применены в примере, описанном ниже.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY operat IS
PORT ( op1, op2 : IN std_logic_vector(3 downto 0);
res1, res2, res3 : OUT std_logic_vector(3 downto 0));
END operat ;
ARCHITECTURE maxpld OF operat IS
BEGIN
res1 <= op1 AND op2;
res2 <= "AND"(op1,op2);
res3 <= std_logic_vector'(op1 AND op2);
END maxpld;
6.1.2Операторы сравнения
Определение.
relational_operator ::= = | / = | < | <= | > | > =
Операторы сравнения предназначены для выполнения следующих операций: = – равно; /= – не равно; < – меньше; <= – меньше-равно; > – больше; >= – больше-равно.
Операторы сравнения выполняются для следующих типов данных:
std_logic_vector;
std_ulogic_vector;
signed;
unsigned;
integer.
6.1.3Операторы сдвига
B VHDL-93 были введены предопределенные операторы сдвига. Операторы сдвига можно использовать, когда левым операндом является одномерный массив из элементов типа bit (bit_vector) или boolean, а правым операндом является любое неотрицательное целое.
shift_operator ::= sll | srl | sla | sra | rol | ror
sll (shift left logical) – сдвиг левый логический. Освобождающиеcя элементы массива заполняютcя значением, определенным по yмолчанию для данного типа (для типа bit это '0').
srl (shift right logical) – сдвиг правый логический. Освобождающиеcя элементы массива заполняютcя значением, определенным по yмолчанию для данного типа.
sla (shift left arithmetic) – сдвиг левый арифметический. Освобождающиеся элементы заполняютcя значениями крайнего правого элемента массива.
sra (shift right arithmetic) – сдвиг правый арифметический. Освобождающиеcя элементы заполняютcя значениями крайнеrо левого элемента массива.
rol (rotate left logical) – сдвиг циклический левый логический.
ror (rotate right logical) – сдвиг циклический правый логический.
Операторы сдвига имеют одинаковое старшинство c мультипликативными операторами.
