我有这样的信号:
sw : std_logic_vector(7 downto 0);
现在我想制作另一个,将其作为高位,其余为1:
std_logic_vector(31 downto 0) := (7 downto 0 => sw, others => '1');
但它不会编译。有什么帮助吗?我不想一点一点地做。
答案 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)
您要做的是在初始化期间将信号 - 可变 - 分配给另一个信号。你期望发生什么?
即。在您定义信号的那一刻,您只能初始化它。如果您想为信号指定某些内容,则必须编写声明。
因此,在这种情况下,您可以将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”的位将被赋值覆盖。