1

我正在尝试对一段 vhdl 代码中的整数进行一些数学运算,但是当我尝试编译该工具时,会显示“运算符的 0 定义“+”在此处匹配”。这是我正在尝试做的事情:

for i in 0 to arr_size - 1 loop
   for j in 0 to arr_size - 1 loop
      for k in 0 to arr_size - 1 loop
         for l in 0 to arr_size - 1 loop
            for m in 0 to arr_size - 1 loop
               mega_array(i)(j)(k)(l)(m) <= i*(arr_size**4) + j*(arr_size**3) + k*(arr_size**2) + l*(arr_size**1) + m*(arr_size**0);
            end loop;
         end loop;
      end loop;
   end loop;
end loop;

在设置了 mega_array 的行中遇到了问题。请注意,整个块都在一个进程中。

此外:

arr_size : integer := 4;
sig_size : integer := 32

type \1-line\ is array (arr_size - 1 downto 0) of unsigned (sig_size - 1 downto 0);
type square is array (arr_size - 1 downto 0) of \1-line\;
type cube is array (arr_size - 1 downto 0) of square;
type hypercube is array (arr_size - 1 downto 0) of cube;
type \5-cube\ is array (arr_size - 1 downto 0) of hypercube;

signal mega_array : \5-cube\;
4

1 回答 1

2

阅读您的旧帖子时,mega_array 是一个 4 级数组,最低级别是无符号的。在这个问题的代码中,我看到了 5 个级别。所以在第五级你有bit。您不能将 a 分配integer给 a std_logic

难道这个代码就是你想要的吗?

    for i in 0 to arr_size - 1 loop                -- 5-cube
        for j in 0 to arr_size - 1 loop            -- hypercube
            for k in 0 to arr_size - 1 loop        -- cube
                for l in 0 to arr_size - 1 loop    -- square
                   for m in 0 to arr_size - 1 loop -- 1-line
                      mega_array(i)(j)(k)(l) <= to_unsigned(i*(arr_size**4) + j*(arr_size**3) + k*(arr_size**2) + l*(arr_size**1), 32);
                   end loop
                end loop;
            end loop;
        end loop;
    end loop;

to_unsigned函数将 转换为,integerunsigned类型是什么1-line。第二个参数是将整数转换成的向量的大小。它必须与 的大小相同1-line

于 2013-02-18T13:44:14.950 回答