如何使 std_logic_vector 在 vhdl 中由 std_logic_vector 组成

how to make std_logic_vector consist of std_logic_vectorin vhdl

我有这样的信号:

sw : std_logic_vector(7 downto 0);

现在我想再做一个,将它作为高位,1 其余的:

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

但无法编译。有什么帮助吗?我不想一点点做。

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

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

big <= sw & x"FFFFFF";

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

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

即在你定义一个信号的那一刻,你只能初始化它。如果你想给信号分配一些东西,你必须写一个声明

  • 定义 -> 初始化
  • 声明 -> 赋值

所以这种情况下可以定义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”的位将被赋值覆盖。