【问题标题】:VHDL Generate Array Of STD_LOGIC_VECTORS with Reducing LengthVHDL生成具有减少长度的STD_LOGIC_VECTORS数组
【发布时间】:2017-08-13 20:30:49
【问题描述】:

我正在尝试创建一个长度减小的 std_logic_vectors 数组。我尝试使用通用 std_logic_vector 创建一个数组,然后使用 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;

以及返回通用 std_logic_vector 的函数:

   function and_vector(vec: std_logic_vector; x: std_logic; length: natural) return std_logic_vector is
    variable result: std_logic_vector(length - 1 downto 0);
begin
    for i in 0 to length - 1 loop
        result(i) := vec(i) and x;
    end loop;

    return result;
end function;

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

【问题讨论】:

  • 为什么你的 AND 结果不是 a 的长度?

标签: arrays vhdl fpga xilinx


【解决方案1】:

and_planes 是一个类型而不是一个信号,所以你不能分配给它! 此外,您正在创建一个部分受约束的类型,它需要在对象(例如信号)声明中受到约束。

VHDL 不支持不规则数组。 (其中每个元素具有不同大小的数组)。如果您需要它进行模拟,您可以使用访问类型并模拟 C 中的参差不齐的数组。如果您需要它进行综合,那么您可以使用一维数组和一些函数来模拟一个参差不齐的数组来计算嵌套的边界向量。

看到我的这个回答:


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

-- slice 'a' and gate it by 'b(i)'
and_planes(i) <= a(i downto 0) and b(i); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多