1

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

一旦添加了足够的信号,在我的案例 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 是我进程中的一个整数变量。如果没有简单的方法,我还能怎么做?

4

1 回答 1

3

假设您想计算 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

是首选...

于 2013-02-06T14:12:43.997 回答