【问题标题】:Arithmetic operations on integers in vhdlvhdl 中整数的算术运算
【发布时间】:2013-02-18 13:27:52
【问题描述】:

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

【问题讨论】:

  • 问题很可能出在Library/Use子句或者mega_array的声明中;值得将它们添加到问题中。 “0 个定义匹配”通常意味着有 2 个或更多可见(不明确)定义,因为您有太多重叠的“使用”子句。

标签: math integer vhdl operations


【解决方案1】:

阅读您的旧帖子时,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的大小相同。

【讨论】:

  • 它说它期望 to_unsigned 的类型为“std_ulogic”
  • 在您发布的代码中,恕我直言,还有一个循环太多了。在“m”循环中,您处于unsigned 的位级别。在这一点上,您尝试分配一个整数(覆盖为“无符号”)。恕我直言,你不需要'm'级别。为您分配“l”级别的计算值。
  • 你忘记了“超立方体”关卡。
  • 位 -> 1 行(32 位无符号)-> 正方形 -> 立方体 -> 5 立方体。超立方体和 5 立方体具有相同的类型。我没有看到使用超立方体。 Mega_array 是 5-cube 类型。
  • 是的,那是错误的。一个 5-cube 是一组超立方体。 PS:这就是问题所在,哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多