Math vhdl中整数的算术运算

Math vhdl中整数的算术运算,math,integer,vhdl,operations,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

我试图在一段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_数组是一个4级数组,最低级别是一个无符号数组。在这个问题的代码中,我看到了5个级别。因此,在第五级,您有
。不能将
整数
分配给
标准逻辑

这是你想要的密码吗

    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;
对于0到arr_大小的i-in-1循环--5-cube
对于0到arr_size-1的j循环——超立方体
对于0到arr_size-1的k循环--立方体
对于0中的l到arr_大小-1循环--平方
对于0中的m到arr_大小-1循环--1行

mega_数组(i)(j)(k)(l)问题可能出现在库/使用条款或mega_数组声明中;值得将它们添加到问题中。“0定义匹配”通常意味着有2个或更多可见(不明确)定义,因为您有太多重叠的“Use”子句。它表示希望在您发布的代码中使用“std_ulogic”类型,但仍然有一个循环太多。在“m”循环中,您处于
无符号
的位级别。在这一位,您尝试分配一个整数(转换为“unsigned”)。嗯,你不需要“m”级别。在“l”级别分配您的计算值。您忘记了“超级立方体”级别。位->1行(32位无符号)->正方形->立方体->5立方体。超立方体和5-立方体具有相同的类型。我看不出使用了超立方体。Mega_阵列属于5-cube类型。是的,这是错误的。5-立方体是超立方体的数组。PS:这就是问题所在,哈哈。
    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;