【发布时间】:2017-07-16 17:02:57
【问题描述】:
我有以下问题:
我的代码有这个常量值
constant source_vector : std_logic_vector(7 downto 0) := "1011000";
该值需要逐位输入到 std_logic_vector 类型的信号中。问题是目标向量的大小在常量中定义。对于测试,我使用的是 1 号。
constant k : integer := 1;
dest_vector : in std_logic_vector(k-1 downto 0);
当我尝试分配第一位时:
dest_vector <= std_logic_vector(to_unsigned(source_vector(0), k));
我收到了这个错误: 错误:[VRFC 10-925] 索引名称不是自然的
我尝试了几件事,但没有运气。也许我错过了什么……这里有什么建议吗?
【问题讨论】:
-
使用
dest_vector <= source_vector(0 downto 0);使用切片名称或dest_vector(0) <= source_vector(0);使用目标和右侧的索引名称。还有dest_vector <= "" & source_vector(0);,它从上下文中派生连接结果的类型,同时将空数组连接到元素类型的值。请参阅 IEEE Std 1076-2008 8.4 索引名称、8.5 切片名称、9.2.5 添加运算符(“&”)和 12.5 重载解析的上下文(其中“&”)。 -
对于您的原始表达式,在 numeric_std 包中找不到具有签名 [std_ulogic, natural return unsigned] 的函数
to_unsigned。基本类型为 std_ulogic 的值不能隐式转换为自然类型(to_unsigned[natural, natural return unsigned])。请参阅 4.10 一致性规则。 -
所以问题是:你为什么使用
to_unsigned? -
感谢@user1155120 提供的信息和参考资料。
(0 downto 0)工作正常,还索引目的地。我使用to_unsigned,因为正常分配不起作用,编译器消息暗示索引的值应该是一个整数,一件事导致另一件事......主要问题是分配一个位的值,但是以大小为 1 的向量的形式。 -
对于知识渊博的 VHDL 爱好者
dest_vector <= "" & source_vector(0);可能会更清楚地表达正在解决的问题。另见 5.3.2.2 索引约束和离散范围空数组、兼容和满足的定义。
标签: vector vhdl type-conversion