8

有没有办法使用 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 downto 0),并在进行比较或 +- 操作时执行转换。例如:counter <= counter + std_logic_vector(unsigned(value) + 1)..仍然没有找到除法的方法(例如,如果需要计数器值的 1/4)

4

2 回答 2

9

使用整数类型,您不能(至少,不可移植;可能有一些 VHDL 工具超出最小值并提供 64 位整数)

使用 IEEE.numeric_std,您可以声明一个具有完整 32 位范围(或 53 位,如果您愿意)的无符号,它应该做您想要的一切。需要,除非我误解了您的要求。

于 2012-11-18T22:46:09.870 回答
6
use ieee.numeric_std.all;

然后使用unsigned数据类型 - 它作为一个位向量运行,并为其定义了数学运算。您可以选择所需的位数。例如:

signal mynum : unsigned(234 downto 0)
于 2012-11-19T14:36:41.387 回答