如何在不循环的情况下将一段信号分配给单个标准逻辑?
how to assign a slice of signal to single std logic without looping?
我有这个代码
for i in 63 downto 48 loop
s1(i)<= b(31);
end loop;
我想摆脱循环,使用一个赋值语句
类似的东西
s1(63 downto 48)<= b(31)
但它不起作用,因为我正在将一个标准矢量分配给单个标准逻辑
我想将 std 向量分配给另一个具有相同值的 std 向量(这里是 b(31) )
在 vhdl 中可以吗?
这个怎么样:
s1(63 downto 48) <= (others => b(31));
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));
等等
我有这个代码
for i in 63 downto 48 loop
s1(i)<= b(31);
end loop;
我想摆脱循环,使用一个赋值语句
类似的东西
s1(63 downto 48)<= b(31)
但它不起作用,因为我正在将一个标准矢量分配给单个标准逻辑
我想将 std 向量分配给另一个具有相同值的 std 向量(这里是 b(31) )
在 vhdl 中可以吗?
这个怎么样:
s1(63 downto 48) <= (others => b(31));
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));
等等