【问题标题】:assign data(i) into std_logic_vector(0 downto 0) in vhdl将数据(i)分配到 vhdl 中的 std_logic_vector(0 downto 0)
【发布时间】: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 &lt;= source_vector(0 downto 0); 使用切片名称或dest_vector(0) &lt;= source_vector(0); 使用目标和右侧的索引名称。还有dest_vector &lt;= "" &amp; 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 &lt;= "" &amp; source_vector(0); 可能会更清楚地表达正在解决的问题。另见 5.3.2.2 索引约束和离散范围空数组、兼容满足的定义。

标签: vector vhdl type-conversion


【解决方案1】:

user1155120 2017 年 7 月 16 日 19:47 的回答

使用dest_vector &lt;= source_vector(0 downto 0);,它使用切片名称或dest_vector(0) &lt;= source_vector(0);,它对目标和右侧都使用索引名称。还有dest_vector &lt;= "" &amp; source_vector(0);,它从上下文中派生连接结果的类型,同时将空数组连接到元素类型的值。请参阅 IEEE Std 1076-2008 8.4 索引名称、8.5 切片名称、9.2.5 添加运算符(“&”)和 12.5 重载解析的上下文(“&”)。

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 2016-09-14
    • 2019-02-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多