Введение в стандарт IEEE. Справочное руководство по языку VHDL (Пересмотр стандарта IEEE. 1076-1987), страница 13

Операция

Оператор VHDL

Разрядность результата

абсолютное значение

abs

та же, что и у операнда

сложение

+

Больше, чем у операнда

вычитание

-

Больше, чем у операнда

умножение

*

Сумма разрядностей операндов

деление

/

та же, что и у делимого

целая часть

mod

та же что и у второго операнда

остаток от деления

rem

та же что и у второго операнда

Совместное использование ресурса.

     Инструментальные средства синтеза автоматически выполняют устранение общих подвыражений для булевых и арифметических выражений. Следующий пример кода содержит два сумматора, которые складывают одинаковые числа a и b.

signal a,b,c,d : integer range 0 to 255 ;

...

process (a,b,c,d) begin

if ( a+b = c ) then <statements>

elsif ( a+b = d) then <more_statements>

 end if ;

end process ;

Правильное использование круглых скобок приводит к тому, что инструментальные средства синтеза устраняют общие подвыражения. Следующий фрагмент кода можно изменить так, чтобы использовать один сумматор совместно.

o1 <= a + b + c;

o2 <= b + c + d;

Вставив круглые скобки, можно использовать совместно сумматор для входов b и с, как показано ниже.

o1 <= a + (b + c);

o2 <= (b + c) + d;

     Инструментальные средства синтеза автоматически накладывают ограничение на количество совместного использования ресурса для арифметических выражений, которые являются взаимоисключающими. Рассмотрим следующий пример:

process (a,b,c,test) begin

if (test=TRUE) then

o <= a + b ;

else

o <= a + c ;

end if ;

end process ;

     Первоначально созданы, два сумматора и мультиплексор, но после того как ресурс, совместно использующий один сумматор, автоматически уменьшен, код примет следующий вид:

process (a,b,c,test) begin

variable tmp : integer range 0 to 255 ;

begin

if (test=TRUE) then

tmp := b ;

else

tmp := c ;

end if ;

o <= a + tmp ;

end process ;

Ограничения на использование автоматического ресурса, следующие:

·  Сложные операторы должны управлять тем же самым сигналом.

·  Сложные операторы должны иметь одинаковый тип (например, два сумматора) и иметь одинаковую разрядность  (например, 8-разрядные сумматоры).

Примеры приложений.

Далее вы можете найти примеры описания на языке VHDL общих микро функций, которые используются в цифровом логическом проекте, включая блоки регистра, счетчики, сдвиговые регистры, и конечные автоматы.

Построение конечных автоматов.

     Логическая модель конечного автомата имеет входные управляющие воздействия и ответы на выходе, также она имеет несколько битов внутренней памяти, чтобы следить за самыми последними событиями. Конечный автомат использует синхронизацию, чтобы одновременно перейти на один шаг.

     В VHDL конечные автоматы обычно описываются вместе с комбинационным блоком, который декодирует и управляет текущим и следующим состоянием, плюс блок регистра, чтобы синхронизировать машину с часами системы и применять другое средство управления типа предварительной установки или сброса. Каждый активный переход часов вызывает изменение  текущего состояния на следующее состояние.


     Диаграмма состояний представленная выше описывает арбитр ресурса, который распределяет ресурс, типа шины, в одной схеме одновременно. Арбитр имеет три основных входных сигнала с именами R1, R2, и R3, и три основных выходных сигнала с именами A1, A2, и A3. Входные сигналы - линии запроса, исходящие из отдаленной схемы, и выходные сигналы - линии подтверждения, возвращающиеся к той же самой отдаленной схеме.

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity arbiter is