对vhdl中整数的算术运算

时间:2013-02-18 13:27:52

标签: math integer vhdl operations

我正在尝试对一段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\;

1 个答案:

答案 0 :(得分:2)

当阅读旧帖子时,mega_array是一个4级的数组,最低级别是无符号。在这个问题的代码中,我看到了5个级别。所以在第五级你有bit。您无法将integer分配给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个函数会将integer转换为unsigned1-line的类型是什么。第二个参数是将整数转换为的向量的大小。它必须与1-line的大小相同。