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;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.