如何使std_logic_vector由std_logic_vectorin vhdl组成

时间:2017-04-30 13:14:15

标签: vhdl

我有这样的信号:

sw : std_logic_vector(7 downto 0);

现在我想制作另一个,将其作为高位,其余为1:

std_logic_vector(31 downto 0) := (7 downto 0 => sw, others => '1');

但它不会编译。有什么帮助吗?我不想一点一点地做。

2 个答案:

答案 0 :(得分:1)

我不完全确定应该将这个较小的信号放在哪里,但你可能想要这样做:

signal sw: std_logic_vector(7 downto 0);
signal big: std_logic_vector(31 downto 0);

big <= sw & x"FFFFFF";

这将sw矢量分配给大矢量的8个最高有效位,并将“1”分配给其余位。如果你想做其他事情,写在评论中。

答案 1 :(得分:1)

您要做的是在初始化期间将信号 - 可变 - 分配给另一个信号。你期望发生什么?

即。在您定义信号的那一刻,您只能初始化它。如果您想为信号指定某些内容,则必须编写声明

  • 定义 - &gt;初始化
  • 声明 - &gt;分配

因此,在这种情况下,您可以将big定义为更大的范围,并在初始化中修复常量位

signal big : std_logic_vector(31 downto 0) => (others => '1');

如果您想将sw分配到big的任何部分,请在begin之后执行此操作。

big(31 downto 24) <= sw;

big(7 downto 0) <= sw;

等。初始化为“1”的位将被赋值覆盖。