如何在vhdl中使用运算符“ +”?

时间:2019-04-29 10:09:45

标签: compiler-errors vhdl quartus

我写了一些代码,其中包含一个执行加法运算的过程。我使用“ +”符号,编译器无法识别它。我知道vhdl不支持该符号,但是我们的教授要求我们在我们的代码。有什么办法可以使用“ +”而不会出错?

我使用了所有我知道的没有结果的库。这是我的代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
use ieee.std_logic_signed.all;
use ieee.std_logic_arith.all;

package arith_operation is
  constant size: integer :=8;
  constant select_bits: integer :=3;
  procedure add( x,y: in bit_vector(size-1 downto 0);
                 sum: out bit_vector(size-1 downto 0); c_out: out bit );
end arith_operation;

package body arith_operation is
  procedure add
         ( x,y: in bit_vector(size-1 downto 0);
           sum: out bit_vector(size-1 downto 0);
           c_out: out bit) is
  variable s: bit_vector(size downto 0);
  begin
    s:= ("0" & x) + ("0" & y);
    sum:= s(size-1 downto 0);
    c_out:= s(size);
  end procedure add;
end arith_operation;

这是出现的错误:

Error (10327): VHDL error at arith_operation.vhd(22): can't determine definition of operator ""+"" -- found 0 possible definitions

1 个答案:

答案 0 :(得分:0)

这是因为您的代码未包含任何使用位向量执行算术运算的软件包。直到VHDL 2008为止,还没有用于此的软件包。 VHDL 2008引入了numeric_bit_unsigned以允许使用bit_vectors进行无符号算术,以及引入了numeric_bit来使用bit定义无符号和有符号类型。 (这与与使用std_logic作为基本元素类型定义的相同类型的numeric_std相反)。

您还遇到冲突和非标准库的问题。非标准的std_logic_arith与numierc_std冲突时,应将其删除。 std_logic_unsigned和std_logic_signed都是非标准的,并使用std_logic_vectors执行算术运算,并且还定义了相同的函数。理想情况下,您不会使用任何一个库,因为它们是非标准的VHDL,但是如果您必须使用它们,则使用它们的最简单方法是仅包含一个或另一个,而不同时包含两者。 (您可以同时使用两者,但是随后您将需要使用具有完整路径的函数)。您可以改用VHDL 2008中添加的numeric_std_unsigned来实现SLV的无符号运算。