【问题标题】:how to assign a slice of signal to single std logic without looping?如何在不循环的情况下将一片信号分配给单个标准逻辑?
【发布时间】:2016-11-30 11:59:23
【问题描述】:

我有这个代码

for i in 63 downto 48 loop
     s1(i)<= b(31);
   end loop;

我想摆脱循环,使用一个分配语句

类似的东西

s1(63 downto 48)<= b(31)

但它不起作用,因为我将 std 向量分配给单个 std 逻辑

我想将 std 向量分配给另一个具有相同值的 std 向量(此处为 b(31) )

在 vhdl 中有可能吗?

【问题讨论】:

    标签: syntax vhdl slice assign


    【解决方案1】:

    这个怎么样:

    s1(63 downto 48) <= (others => b(31));
    

    【讨论】:

      【解决方案2】:

      在这种情况下,Jeff 的回答应该可以解决问题,因为从分配目标中知道所需的类型(包括索引范围)。

      但在更复杂的表达式中,有些情况并非如此,因为(others =&gt; x) 没有指定所创建对象的大小。

      所以也值得知道你可以在数组聚合中显式指定一个范围,然后说

      s1(63 downto 48) <= (15 downto 0 => b(31));
      s1(63 downto 48) <= (63 downto 48 => b(31)); -- a bit clearer
      s1(63 downto 48) <= (63 => not b(31), 62 downto 48 => b(31));
      

      等等

      【讨论】:

      • 赋值涉及子类型转换。只要分配目标的每个元素都有一个匹配元素,聚合中的范围就无关紧要。对于在表达式中使用聚合,何时允许使用 others 的规则可以在 VHDL 标准 IEEE Std 1076-2008 9.3.3.3 数组聚合第 6 段中找到。子类型(索引约束)根据第 7 和 8 段施加.
      • @user1155120 re: 聚合范围,是的,在第二个版本中匹配索引的目的是文档,而不是功能。
      猜你喜欢
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2013-02-03
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多