好的,我想做的是将一个较小的std_vector分配给一个较大的std_vector,并用零填充高位。但是,我想要一些通用且简单的东西,而不必涉及每个零件的大小。

例如,如果我有:

signal smaller_vec: std_logic_vector(15 downto 0);
signal larger_vec: std_logic_vector(31 downto 0);


我可以:

larger_vec <= X"0000" & smaller_vec;


但是,如果我不知道较小向量的大小,该怎么办。是否指定所有高位为零?

我知道other子句,但是由于需要两行内容,所以会变得凌乱:

larger_vec(smaller_vec'high downto 0) <= smaller_vec;
larger_vec(31 downto smaller_vec'length) <= (others => '0');


我以为我可以使用:

larger_vec <= "" & smaller_vec;


但这没用。有任何想法吗?

最佳答案

你有没有尝试过:

larger_vec <= (31 downto smaller_vec'length => '0') & smaller_vec;


过去我遇到过类似代码的综合工具问题,所以我使用了:

constant ZERO : std_logic_vector(larger_vec'range) := (others => '0');
. . .
larger_vec <= ZERO(31 downto smaller_vec'length) & smaller_vec;

关于vhdl - 用前导零填充std_logic_vector,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29122734/

10-13 09:28