VHDL:切片数组的不同部分

VHDL: slice a various part of an array

我有一个STD_LOGIC_VECTOR (0 to 639)。 在传入信号上,我必须遍历此向量并获取它的下 2 位。

我正在尝试使用整数 counter:

counter := counter+1;
MyVar := Data((counter*2) to ((counter*2)+1));

我得到以下信息:

Error (10394): VHDL error at module.vhd(227): left bound of range must be a constant

更新:@user1155120 建议以下内容:将向量的每一位写入 MyVar 的每一位相应位

MyVar(0) := Data(counter * 2);
MyVar(1) := Data(counter * 2 + 1);

只要我使用 2 位就可以正常工作 MyVar,但是如果我想使用 16-32-80 位变量怎么办?问题避免了,但没有解决。

Google 显示错误消息来自 Quartus II(参见 ID: 10394)。它提供的 LRM 参考不是特别有用,它是对综合的限制,您不能为多路复用器定义可变宽度字长。不够聪明,无法检测到两个边界都被引用到计数器。

如果你分别为 MyVar 的每一位表达一个多路复用器会怎样? (索引名称而不是切片名称,两个变量赋值给 MyVar(1)MyVar(0))。

MyVar(0) := Data(counter * 2);
MyVar(1) := Data(counter * 2 + 1);

此线程 need a help with strange error" left bound of the range must be a constant " 建议使用循环来分配目标切片范围的每一位,这也在每个元素的基础上使用索引名称。

for i in MyVar'RANGE loop
    MyVar(i) := Data(counter * 2 + i);
end loop;

counter 只需要索引范围的一半,您总是将它乘以 2。