如何在没有循环的情况下将一片信号分配给单个std逻辑?

时间:2016-11-30 11:59:23

标签: syntax vhdl slice assign

我有这段代码

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可以吗?

2 个答案:

答案 0 :(得分:4)

这个怎么样:

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

答案 1 :(得分:1)

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

但有些情况下,在更复杂的表达式中,它不是因为(others => 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));