【问题标题】:VHDL how to use a std_logic_vector as index for an arrayVHDL如何使用std_logic_vector作为数组的索引
【发布时间】:2015-04-18 13:53:31
【问题描述】:

我想使用 std_logic_vector 作为数组的索引,例如:

Data: in std_logic_vector(7 downto 0);
signal counter : std_logic_vector(3 downto 0);

output <= Data(counter);

由于 VHDL 语法检查告诉我应该使用带有 Data 的整数作为索引,所以我想问一下是否可以使用 std_logic_vector 作为索引。

如果不是,如果我使用这样的计数器:

signal counter : integer range 0 to 7 := 7;

合成器会创建一个 8 位计数器(因为 7 是最大值)还是会创建一个 32 位计数器?我问这个问题是因为如果我将值 8 分配给计数器 vhdl 语法检查并不会告诉我这是一个错误。

【问题讨论】:

  • 合成器不强制执行 VHDL 标准(不像 ModelSim 这样的好模拟器)。根据 VHDL 标准,将 8 分配给 range 0 to 7 是非法的。合成器可能会接受它(并且可能分配 0),但你真的不应该依赖它。

标签: vector vhdl fpga


【解决方案1】:

要使用 std_logic_vector,您必须对其进行转换:

Data: in std_logic_vector(7 downto 0);
signal counter : std_logic_vector(3 downto 0);

output <= Data(to_integer(unsigned(counter)));

关于你的第二个问题,这将是一个 3 位计数器:

signal counter : integer range 0 to 7 := 7;

在物理上,整数和 std_logic_vector 没有区别。综合后将得到完全相同的硬件。 使用在您的代码中最有意义的数据类型。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多