【问题标题】:Convert element from std_logic_vector to integer vhdl将元素从 std_logic_vector 转换为整数 vhdl
【发布时间】:2013-02-06 13:36:30
【问题描述】:

我正在研究一个接收信号并将其添加到向量中的函数。

一旦添加了足够多的信号,在我的案例 4 中,然后我循环遍历向量并将其添加到我的进程中的整数变量中。

我无法将单个元素转换为整数。

我尝试使用 to_integer(unsigned(myVector)),但这是二进制到十进制的转换。

我只是想要它,这样当我像这样遍历我的向量时:

for i in 0 to myVector'length loop
    Sum := Sum + to_integer(myVector(i));
end loop;

1 或 0 的位值被转换为 1 或 0,我可以使用它来添加到我的总和中。

有什么想法吗?

谢谢

PS - myVector 是一个信号,Sum 是我进程中的一个整数变量。 如果没有简单的方法,我还能怎么做?

【问题讨论】:

  • 要理解这个问题,我们需要查看 (a) library 和 use 子句,以及 (b) myVector 的声明。我们知道它是某种东西的向量......

标签: for-loop vector vhdl typeconverter


【解决方案1】:

假设您要计算 numeric_std_unsigned 中的那些,问题只是 to_integer 需要处理一个向量(一个无符号)而 myVector(i) 是一个位(std_logic)

以下创建一个 to_integer 应该满意的 1 位无符号数。

for i in 0 to myVector'length loop
    Sum := Sum + to_integer(myVector(i downto i ));
end loop;

或者,如果综合工具不喜欢在循环中动态切片 myVector,

for i in 0 to myVector'length loop
    if myVector(i) = '1' then
        Sum := Sum + 1;
    end if;
end loop;

会的。

还请注意,循环边界可能存在范围错误...从 0 到长度可能比您拥有的元素多 1 次迭代 - 假设元素实际上从 0 开始,这是一个相当大的假设。

for i in myVector'low to myVector'high loop

首选...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多