- •1.1 Введение
- •1.2 Идентификаторы в языке vhdl
- •1.3 Объекты языка vhdl
- •Декларация констант
- •Декларация переменных
- •Декларация сигналов
- •1.4 Типы данных
- •Тип “массив”. Объект типа array состоит из элементов одного типа. Ниже даны примеры массивов:
- •Перечислимый тип
- •Тип “с плавающей запятой”
- •1.5 Операции языка vhdl
- •Операции логические
- •Операции отношений
- •Операции суммирования, вычитания, конкатенации
- •Операции умножения, деления
- •Прочие операции
- •1.6 Последовательные операторы
- •Оператор присваивания
- •Оператор if
- •Оператор case
- •Оператор loop
- •1.7 Параллельные операторы
- •1.8 Описание интерфейса устройства
- •1.9 Архитектура
- •Поведенческое описание
- •Потоковое описание (dataflow)
- •Структурное описание.
- •Комбинированное описание архитектуры
- •1.10 Особенности синтеза схем по описаниям на языке vhdl
1.3 Объекты языка vhdl
Объекты это область хранения данных определенного типа. Создаются объекты посредством декларации объекта, например:
variable COUNT: INTEGER;
В результате порождается объект с именем COUNT, который хранит целочисленную величину. Кроме того, COUNT декларируется как класс variable.
Объекты – данные могут быть трех классов:
- сonstant (константа) - может хранить отдельное значение определенного типа. Это значение присваивается объекту в начале моделирования и не может изменяться в процессе моделирования.
- variable (переменная) - объект этого класса может хранить отдельное значение определенного типа, однако, в процессе моделирования ему могут присваиваться различные значения. Для этого используются выражения присваивания (variable assignment statement).
- signal (сигнал) – объект данного класса имеет предыдущее значение, имеет текущее значение и набор последующих значений.
Объекты класса signal моделируют проводные соединения в схемах, в то время как переменные (variable) и константы (constant) используются для моделирования поведения схемы, они аналогичны объектам, используемым в языках программирования C и Pascal.
Декларация констант
Декларации объектов (object declaration) имеют целью дать имя объекту, объявить его тип, класс и даже присвоить значение. Примеры деклараций констант описаны ниже:
constant RISE_TIME: TIME := 10ns;
constant BUS_WIDTH: INTEGER := 8:
В первом случае объявляется объект RISE_TIME, который хранит значение типа TIME, объекту в начале моделирования присваивается величина 10 наносекунд. Во втором случае объявляется, что BUS_WIDTH (ширина шины) типа INTEGER (целое) и ей присвоено значение 8.
Декларация переменных
Примеры деклараций объектов класса variable приведены ниже:
variable CTRL_STATUS: BIT_VECTOR(10 downto 0);
variable SUM: INTEGER range 0 to 100 := 10;
variable FOUND, DONE: BOOLEAN;
В первом случае декларируется переменная CTRL_STATUS как массив из 11 элементов, причем, каждый элемент типа BIT. Во втором случае переменная SUM декларируется как целое, лежащее в диапазоне от 0 до 100, в начале моделирования переменной присваивается значение 10. Если переменной в начале моделирования не задано значение, то используется значение по умолчанию. Им служит самое “левое” значение в наборе значений данного типа. Например, переменная типа BOOLEAN имеет набор значений (FALSE, TRUE) и в третьем примере начальное значение переменных FOUND и DONE будет взято по умолчанию, т.е. FALSE.
Декларация сигналов
Декларации объектов класса signal схожи с декларациями переменных:
signal CLOCK: BIT;
signal DATA_BUS: BIT_VECTOR(0 to 7);
signal GATE_DELAY: TIME := 10 ns;
В первом примере декларируется объект CLOCK типа BIT, начальное значение при моделировании будет взято по умолчанию, т.е. 0 (набор значений типа BIT: 0,1 и крайнее левое значение 0).
Не все объекты в языке VHDL создаются путем декларирования, например, входные/выходные порты всегда считаются объектами класса signal.
1.4 Типы данных
Каждый объект в языке VHDL может хранить значения, относящиеся к определенному набору. Это множество значений декларируется с помощью объявления типа (type declaration). Тип – это имя, которое связывается с определенным набором значений и набором операций. Некоторые типы предопределены языком VHDL. Например, BOOLEAN имеет набор значений FALSE, TRUE и набор операторов: and, or, nor, nand, not. В языке имеется возможность создавать новые типы с использованием деклараций и задания набора операций.
Все возможные типы в VHDL распадаются на четыре больших категории:
- scalar (скалярные),
- composite (композитные) – они состоят из элементов одного типа (массивы) или различного типа (записи),
- access type (типы доступа) – обеспечивают доступ к данному типу через указатели,
- file types (тип – файл) – обеспечивает доступ к объектам, содержащим последовательности значений данного типа.
В свою очередь скалярные типы подразделяются на четыре вида:
-enumeration (перечислимый тип),
-integer (целый тип),
-physical(физический тип),
-floating point (тип “с плавающей запятой”).
