Arrays 用VHDL生成缩减长度的STD_逻辑_向量数组

Arrays 用VHDL生成缩减长度的STD_逻辑_向量数组,arrays,vhdl,fpga,xilinx,Arrays,Vhdl,Fpga,Xilinx,我正在尝试创建一个长度减少的std_逻辑_向量数组。我试着用一个通用的std_逻辑_向量生成一个数组,然后用一个generate语句生成向量 architecture behavioral of dadda_mul_32bit is type and_planes is array (0 to 31) of std_logic_vector; begin generate_and_plane: for i in 0 to 31 generate and_pl

我正在尝试创建一个长度减少的std_逻辑_向量数组。我试着用一个通用的std_逻辑_向量生成一个数组,然后用一个generate语句生成向量

architecture behavioral of dadda_mul_32bit is

type and_planes is array (0 to 31) of std_logic_vector;    

begin

generate_and_plane:
    for i in 0 to 31 generate
        and_planes(i) <= and_vector(a, b(i), i); 
    end generate generate_and_plane;

end behavioral;

我是否错误地使用了generate语句?

和_planes
是一种类型,而不是信号,因此您无法将其指定给它! 此外,您正在创建一个部分受约束的类型,需要在对象(例如信号)声明中对其进行约束

VHDL不支持不规则数组。(每个元素大小不同的数组)。如果在模拟中需要它,可以使用访问类型并模拟C中的不规则数组。如果在合成中需要它,则可以使用一维数组和一些函数模拟不规则数组以计算嵌套向量的边界

请看我的回答:


顺便说一句,VHDL-2008增加了一个重载:
“and”(std_logic,std_logic_vector)
,因此不需要函数来计算单个位与向量中每个位的anding

-- slice 'a' and gate it by 'b(i)'
and_planes(i) <= a(i downto 0) and b(i); 
--将“a”切片,并通过“b(i)”将其选通

而_planes(i)
和_planes
是一种类型而不是信号,因此您不能将其指定给它! 此外,您正在创建一个部分受约束的类型,需要在对象(例如信号)声明中对其进行约束

VHDL不支持不规则数组。(每个元素大小不同的数组)。如果在模拟中需要它,可以使用访问类型并模拟C中的不规则数组。如果在合成中需要它,则可以使用一维数组和一些函数模拟不规则数组以计算嵌套向量的边界

请看我的回答:


顺便说一句,VHDL-2008增加了一个重载:
“and”(std_logic,std_logic_vector)
,因此不需要函数来计算单个位与向量中每个位的anding

-- slice 'a' and gate it by 'b(i)'
and_planes(i) <= a(i downto 0) and b(i); 
--将“a”切片,并通过“b(i)”将其选通

和_平面(i)为什么你的结果和长度不是a?为什么你的结果和长度不是a?