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。
我有一个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。