我正在尝试对一段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\;
答案 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
转换为unsigned
,1-line
的类型是什么。第二个参数是将整数转换为的向量的大小。它必须与1-line
的大小相同。