2016-03-25 58 views
2

是否有人可以解释我的区别:VHDL范围分配

grant_o(1 downto 1) <= grant_s(1); 

grant_o(1) <= grant_s(1); 

第一个通过合成工具不走。

+1

在第一个信号赋值语句中,目标是切片名称(一维数组),右手表达式是一个索引名称,表示命名对象的一个​​元素。目标数组的类型是指定对象的类型。右手表达式的类型是指定对象的元素的类型。表达式的类型和目标的类型不一样。 – user1155120

+1

尽管在这种情况下问题是显而易见的,但最好通过“不通过”来报告您的意思......比如实际的错误信息,以及它是否在模拟中首先工作。当你模拟这个问题应该被捕获... –

+0

谢谢你们!它清楚你的建议。 –

回答

3

语法mySignal(index)访问数组的单个元素。所以表达式的值是元素类型。

语法mySignal(index1 downto index2)访问数组中的一系列元素。所以表达式的值是相同的数组类型,但是具有改变的范围约束。

如果您使用grant_o(1 downto 1) <= grant_s(1 downto 1);,则您的第一个示例可以正常工作。

或者

grant_o(1 downto 1) <= (others => grant_s(1));

两种变体创建在右侧的阵列,因此它可以被分配到左侧。你的例子使用了一个长度范围。

+0

我会写一些像“表达式类型”而不是“返回类型”。 –

+0

@MartinZabel固定 – Paebbels

+0

非常感谢。清除:) –