在vhdl中如何使std_逻辑_向量由std_逻辑_向量组成

在vhdl中如何使std_逻辑_向量由std_逻辑_向量组成,vhdl,Vhdl,我有这样的信号: sw : std_logic_vector(7 downto 0); 现在我想做另一个,它将作为高位,剩下的是: std_logic_vector(31 downto 0) := (7 downto 0 => sw, others => '1'); 但它不会编译。需要帮忙吗?我不想一点一点地做这件事。我不完全确定这个较小的信号应该去哪里,但您可能想这样做: signal sw: std_logic_vector(7 downto 0); signal big:

我有这样的信号:

sw : std_logic_vector(7 downto 0);
现在我想做另一个,它将作为高位,剩下的是:

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:std_逻辑_向量(7到0);
信号大:标准逻辑向量(31到0);

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

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

big <= sw & x"FFFFFF";
信号sw:std_逻辑_向量(7到0);
信号大:标准逻辑向量(31到0);

big您要做的是在初始化过程中为另一个信号分配一个可变信号。你预计会发生什么

即,在定义信号时,只能对其进行初始化。如果你想给信号赋值,你必须写一个声明

  • 定义->初始化
  • 声明->分配
因此,在这种情况下,您可以定义一个更大的范围,并在初始化时固定常量位

signal big : std_logic_vector(31 downto 0) => (others => '1');
当您要将
sw
分配给
big
的任何部分时,请在
开始后执行该操作

big(31 downto 24) <= sw;

big(31到24)您要做的是在初始化过程中为另一个信号分配一个可变的信号。你预计会发生什么

即,在定义信号时,只能对其进行初始化。如果你想给信号赋值,你必须写一个声明

  • 定义->初始化
  • 声明->分配
因此,在这种情况下,您可以定义一个更大的范围,并在初始化时固定常量位

signal big : std_logic_vector(31 downto 0) => (others => '1');
当您要将
sw
分配给
big
的任何部分时,请在
开始后执行该操作

big(31 downto 24) <= sw;

big(31到24)我想要类似的东西,但实际上sw是6到0,所以你的方式有点难看,如果可能的话,我更喜欢前面的符号……我认为这是不可能的。你必须分别分配每一位。看,这个主题有很好的解释。我想要类似的东西,但实际上sw是6到0,所以你的方式有点难看,如果可能的话,我更喜欢前面的符号……我认为这是不可能的。您必须分别分配每个位。看,这个主题有很好的解释。您没有指定哪个VHDL工具,这对于使用-2008兼容模式的聚合中是否支持切片非常重要。假设目标子类型为std_logic_vector(31到0),则对于位置关联,该聚合将为(sw,others=>'1'),对于命名关联,该聚合将为(31到24=>sw,others=>'1')。请参阅VHDL 2008—新材料Peter Ashenden和Jim Lewis,6.4片集合,或IEEE Std 1076-2008,9.3.3.3阵列集合。您的工具链中可能不支持数组聚合中的片。您尚未指定哪个VHDL工具,这对于使用-2008兼容模式的聚合中是否支持片可能很重要。假设目标子类型为std_logic_vector(31到0),则对于位置关联,该聚合将为(sw,others=>'1'),对于命名关联,该聚合将为(31到24=>sw,others=>'1')。请参阅VHDL 2008—新材料Peter Ashenden和Jim Lewis,6.4片集合,或IEEE Std 1076-2008,9.3.3.3阵列集合。工具链中可能不支持数组聚合中的切片。