Math vhdl中整数的算术运算
我试图在一段vhdl代码中对整数进行一些数学运算,但当我试图编译该工具时,它会显示“0运算符定义”+“此处匹配”。以下是我想做的: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
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;