我有STD_LOGIC_VECTOR (0 to 639)
。
在输入信号上,我必须遍历此向量并获得它的下一个2位。
我正在尝试用整数counter
制作类似的东西:
counter := counter+1;
MyVar := Data((counter*2) to ((counter*2)+1));
我得到以下内容:
错误(10394):module.vhd处的VHDL错误(227):范围的左边界必须是常量
upd:@ user1155120建议以下内容:将每一位向量写入MyVar的每个对应位
MyVar(0) := Data(counter * 2);
MyVar(1) := Data(counter * 2 + 1);
只要我使用2位MyVar
就可以正常工作,但如果我想使用16-32-80位变量怎么办?问题避免了,但没有解决。
答案 0 :(得分:1)
谷歌搜索显示错误消息来自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。