Только структурных описаний недостаточно для задания объекта, нужно описывать также поведение (функции объекта). Поведенческое описание, как минимум, должно быть задано для сущностей нижнего иерархического уровня. Однако в практике проектирования СБИС превалирует нисходящий стиль, следовательно, проектирование начинается с разработки алгоритмов (поведенческих описаний) верхнего иерархического уровня.
В описаниях поведения фигурируют типы данных, операторы, процессы, процедуры, функции и т.п.
Семантика простых типов данных понятна уже из их названий: INTEGER (целые числа), REAL (вещественные числа, их нужно записывать с десятичной точкой), BIT (со значениями 0 и 1), BOOLEAN (со значениями TRUE и FALSE), BIT_VECTOR (строка бит), POSITIVE (положительные целые числа), NATURAL (натуральные числа), CHARACTER (символы кода ASCII), STRING (строка символов).
Отметим, что после символа — (двойной дефис) следует примечание.
Константы в VHDL описываются следующим образом:
constant <имя>: <тип> := <значение>;
Например:
constant numb: integer := 1025;
constant col: string := "black";
Переменные декларируются следующим образом:
variable <имя>: <тип>;
Начальные значения переменных могут быть заданы в декларациях, например:
signal reg: BIT_VECTOR := "1001100101";
variable vol: real := 5.4;
Отметим, что значения величин типа BIT и CHARACTER так же, как и отдельных элементов массивов BIT_VECTOR и STRING, обрамляются апострофами, а сочетания из более чем одного значения этих массивов заключаются в кавычки.
Типы могут быть введены разработчиком модели с помощью описаний следующего вида:
type <идентификатор> is (<список_значений>);
Например, конечное множество значений задается в виде перечислимого типа
type octal_digits is ('0','1','2','3','4','5','6','7');
type color is ("red","green","blue");
Список значений может иметь одну из следующих форм.
В случае скалярных величин — диапазон возможных значений в виде
range <минимальное_значение> to <максимальное_значение>;
Например:
range 1 to 10;
range 10 downto 1;
Другой пример — задание часто используемого типа Time:
type Time is range -1E9 to 1E9
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
Аналогично с помощью конструкции units задаются единицы измерения других физических величин.
В случае массива
array (<диапазон_индексов>) of <тип_элементов_массива>;
Например, вектор из 16 действительных чисел:
array (0 to 15) of real;
Отметим, что границы диапазонов значений величин или индексов могут быть представлены не только конкретными числовыми значениями, но и в параметрическом виде, если предварительно определены их значения с помощью декларации generic.
В случае записи
record
<список_идентификаторов_и_их_типов>;
end record;
Например:
Day: INTEGER range 1 to 31;
Month: month_list; -- month_list - ранее описанный тип;
Year: INTEGER range 1900 to 2100;
end record;
В VHDL применяются операторы присваивания, назначения сигнала, управления, вызова процедур и ряд других. В арифметических выражениях, встречающихся в операторах, используются знаки операций + (сложение), — (вычитание), * (умножение), / (деление), mod (деление по модулю), rem (остаток), ** (возведение в степень), abs (абсолютная величина); в логических выражениях — not (НЕ — отрицание), and (И — конъюнкция), or (ИЛИ — дизъюнкция), nand (И-НЕ), nor (ИЛИ-НЕ), xor (исключающее ИЛИ). Знак & использован для указания операции конкатенации. Знаки отношений составляют множество {=, /=, <, <=, >, >=}.
Рассмотрим примеры поведенческого описания схемы рис. 1.
Рис. 1.  
Первый вариант:
architecture alg of schema is
signal z1,z2: BIT;
begin
z1 <= not ((a and c) or (b and c));
z2 <= not ((d and c) or (e and c));
y <= not (z1 or z2);
end alg;
Второй вариант, в котором сигналы a,b,d,e представлены в виде элементов двоичного вектора X:
entity schema is
port (c: in BIT; X: in BIT_VECTOR (1 to 4); y: out BIT);
end schema;
architecture alg of schema is
signal z1,z2: BIT;
begin
z1 <= not ((X(1) and c) or (X(2) and c));
z2 <= not ((X(3) and c) or (X(4) and c));
y <= not (z1 or z2);
end alg;
Форма представления процедур и функций в VHDL аналогична формам, используемым во многих алгоритмических языках. Вид описания процедуры:
procedure <имя> (<список_параметров>) is <описания_типов>;
begin <тело>
end <имя>;
Описание функции:
function <имя> (<список_параметров>) return <тип_функции> is
begin <тело>
end <имя>;
В теле функции имеется оператор return, выражение, записанное в нем, определяет возвращаемое значение функции.
В пакеты оформляются части описаний, используемые неоднократно в разных местах VHDL-модели. Пакет имеет форму:
package <имя> is <описание_типов_и/или_функций> end <имя>;
Коды функций помещаются в тело пакета:
package body <имя> is
<описание_процедур_и/или_функций>
end <имя>;
Если описываются только типы, тело пакета не требуется.
Если пакет нужно использовать в некоторой сущности, то перед ее описанием (перед фразой entity) достаточно сделать ссылку на пакет в виде:
use <имя_пакета>;
Например, в нижеследующей записи отражено использование библиотек компонентов IEEE, DW03 и широко распространенных пакетов IEEE.std_logic_1164.all, IEEE.std_logic_arith.all и DW03.DW03_components.all:
library IEEE, DW03;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use DW03.DW03_components.all;
entity unit1 is port (....
В VHDL имеются стандартные (предопределенные) атрибуты:
В частности, эти стандартные значения позволяют лаконично описывать некоторые важные ситуации. Например:
X='1' and not X'STABLE
X='1' and X'EVENT
Эти выражения оказываются истинным в момент положительного фронта сигнала X и, следовательно, с помощью любого из этих выражений можно представлять события, происходящие по положительному фронту сигнала. Если вместо X = '1' записать X = '0', то эти выражения будут соответствовать отрицательному фронту сигнала X.
Как уже отмечалось, в программах моделирования на VHDL используется событийный метод. Можно выделить две фазы моделирования. На первой из них устанавливаются исходные значения переменных и сигналов, настраиваются внешние сигналы, модельное время устанавливается в ноль. Вторая фаза — моделирование до истечения установленного времени T.
В языке VHDL допускаются смешанные описания, имеющие место, если в архитектурном теле одновременно присутствуют как операторы поведенческого моделирования, так и элементы структурного описания. Например,
architecture unit of schema is
component add
port (x1,x2: in BIT; y: out BIT);
end component;
signal b: BIT;
begin
b <= not a;
E1: add
port map (a,b,d);
end unit;