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

signal small_int : integer range 255 downto 0 ;

small_int  использует только восемь битов, вместо 32 битов, если диапазон не был определен.

Стандартный числовой пакет - Арифметический.

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

Ниже вы найдет описание сложных выражений типа сложения, вычитания, и умножения.

Числовой пакет.

     Объяснение этого понятия достаточно сложно, если рассматривать числовой стандартный пакет как набор операторов и функций преобразования, которые упрощают состав сложных арифметических уравнений. Пакет numeric_std обеспечивает типы данных, которые упрощают VHDL арифметику. Это типы - без знаковый и знаковый, безусловные массивы элементов типа std_logic. Как правило, знаковый тип представляет из себя двоичные числа с дополнительным разрядом для знака, в то время как тип без знака представляется величиной без знака у которой соответствующий разряд отсутствует. Так как оба типа безусловные, диапазон числа определен числом битов, используемых для его представления.

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity add4 is

port(data_a, data_b  : in unsigned (3 downto 0);

data_out        : out unsigned (3 downto 0));

end;

architecture behavior of add4 is

begin

data_out <=  data_a + data_b;

end;

Таблица приведенная ниже отражает результаты моделирование 4-разрядного сумматора, описание которого на языке VHDL вы только что видели.

время(ns)

data_a

data_b

data_out

0

0

0

0

25

1

1

2

75

3

3

6

100

4

4

8

125

5

5

10

175

7

7

14

200

8

8

0

225

9

9

2

250

10

10

4

300

12

12

8

325

13

13

10

350

14

14

12

375

15

15

14

     В примере кода 4-разрядного сумматора ADD4 используется без знаковый тип, для определения шины ввода и вывода. 4-разрядное число без знака представляет диапазон от 0 до 15. Если использовать знаковый тип, то числа будут иметь диапазон от -8 до 7. Рекомендует использовать соглашение нумерации элементов массива в соответствии с которым наименьший значащий бит должен имеет самый маленький индекс - 0.

     Обратите внимание на результаты моделирования, начиная с момента времени 200 ns и далее. Поскольку выходная шина (data_out) имеет только 4 бита, для нее максимальное значение без знака - 15. Исходный текст может быть откомпилирован и выполнен как устройство; однако для того чтобы сумматор можно было включить как модуль в большую схему или другой блок на VHDL, сигналы должны быть преобразованы обратно к уже знакомому типу std_logic_vector. Улучшенный пример этого исходного текста приведен ниже.

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity add4 is

port(data_a, data_b  : in std_logic_vector(3 downto 0);

data_out        : out std_logic_vector(4 downto 0));

end;

architecture behavior of add4 is

begin

process (data_a, data_b)

variable op1, op2 : unsigned (4 downto 0);

begin

-- увеличение операторов на 1 бит

op1 := resize(unsigned(data_a),5);

op2 := resize(unsigned(data_b),5);

-- сложение и приведение к типу std_logic_vector

data_out <=  std_logic_vector(op1 + op2);

  end process;

end;