VHDL:切片数组的各个部分

时间:2015-08-19 12:20:03

标签: arrays vhdl slice

我有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位变量怎么办?问题避免了,但没有解决。

1 个答案:

答案 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。