Как представить Integer больше, чем integer'high

Есть ли способ использовать предопределенные типы из STD_LOGIC_1164 или STD_NUMERIC для представления целого числа в диапазоне от 0 до 2^32-1? (учитывая, что целочисленный тип по умолчанию находится в диапазоне от -2^31-1 до 2^31-1)

Мне нужно реализовать 32-битный счетчик и искал какой-то способ сохранить код, используя целочисленный тип вместо std_logic_vector. Любой шаблон проектирования для этого?

Или лучше спросить: как лучше всего объявить 32-разрядное (без знака) целое число, поддерживающее операции>/<, =, +- /?

Заранее

Edit1: я нашел один вариант - объявить сигнал как std_logic_vector(от 31 до 0) и выполнить преобразования при выполнении сравнений или операций +-. Ex: counter <= counter + std_logic_vector(unsigned(value) + 1).. Тем не менее, пока не нашли способ сделать деление (например, если требуется 1/4 от значения счетчика)

2 ответа

Решение

Используя типы Integer, вы не можете (по крайней мере, не переносимо; могут быть некоторые инструменты VHDL, которые выходят за рамки минимума и предлагают 64-разрядное целое число)

Используя IEEE.numeric_std, вы можете объявить Unsigned с полным 32-битным диапазоном (или 53-битным, если хотите), и он должен делать все, что вам нужно., Если только я не пойму вас неправильно.

use ieee.numeric_std.all;

а затем использовать unsigned тип данных - это работает как битовый вектор с математическими операциями, определенными для него. Вы можете выбрать, сколько бит вы хотите. Например:

signal mynum : unsigned(234 downto 0)
Другие вопросы по тегам