【问题标题】:How to represent Integer greater than integer'high如何表示大于整数的整数'high
【发布时间】:2012-11-18 17:51:47
【问题描述】:

有什么方法可以使用 STD_LOGIC_1164 或 STD_NUMERIC 中的预定义类型来表示从 0 到 2^32-1 的整数? (考虑到默认的整数类型范围从-2^31-1到2^31-1)

我需要实现 32 位计数器,并且正在寻找某种方法来使用整数类型而不是 std_logic_vector 来保存代码。有任何设计模式吗?

或者,最好问一下:声明支持操作 >/

提前解决

Edit1:我发现的一个选项是将信号声明为 std_logic_vector(31 downto 0),并在进行比较或 +- 操作时执行转换。例如:counter

【问题讨论】:

  • 尽可能选择 numeric_std 而不是 std_logic_vector。要除以 4(或 2 的幂),要么查看 numeric_std 中的移位运算符,要么自己切片向量。输出

标签: vhdl


【解决方案1】:

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

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

【讨论】:

  • 这确实解决了这个问题。我将我的信号声明为 unsigned(31 downto 0),现在它支持我需要的操作(有时虽然使用 std_logic_vector(counter) 映射到输出)。感谢您的回答。
  • 如何使用 write() 和 writeline() 将大整数写入文本文件?通常,我转换为像这样的整数 to_integer(unsigned(sig1))。我不敢相信我们使用的 HDL 不能在本地将大数字写入文件。
【解决方案2】:
use ieee.numeric_std.all;

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

signal mynum : unsigned(234 downto 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 2014-05-17
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2021-07-22
    相关资源
    最近更新 更多