将std_logic_vector转换为无符号整数时发生VHDL错误

时间:2018-12-15 19:46:40

标签: vhdl

我想将16位std_logic_vector转换为整数,以在实现摩尔机的过程中使用它。

entity steuerung is
  port (
    Clk            : in std_logic;
    Reset           : in std_logic;
    AktPos          : in std_logic_vector(15 downto 0);
    Notaus          : in std_logic; 
    Betrieb         : in std_logic; 
    HPR             : in std_logic;   
    HPL             : in std_logic;
    ESR             : in std_logic;
    ESL             : in std_logic;
    CntClr          : out std_logic;
    LedR            : out std_logic;    
    LedG            : out std_logic;        
    M_An            : out std_logic;
    M_Li            : out std_logic;
    M_Re            : out std_logic;
    State           : out std_logic_vector(5 downto 0)  
  );
end steuerung;

architecture BEHAVE of steuerung is
begin
  process (Reset, Clk, Notaus, Betrieb, AktPos, ESR, ESL) is
    type zustand is (steht, links, rechts, neuUnten, neuOben, alarm);

    variable zustands_vektor : zustand;
    variable ausgabe_vektor  : std_logic_vector(5 downto 0);
    variable cnt             : integer range 0 to 65535 := conv_integer(unsigned(AktPos));

但是关于最后一行代码,我遇到了一些错误。 控制台告诉我以下内容:

“没有声明为“未签名”  找不到匹配'conv_integer'的重载函数” 以及std_logic_arith库中的一些错误(尽管在代码中没有看到,但我确实包含了这些错误)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的代码和您的问题有很多问题...这是要修复的问题列表:

  • 出于文档原因,使用英语标识符,因此像我这样的本地人可以阅读并理解您的问题和代码。此外,您在同一文件中混合了德国和英语标识符。
  • 添加完整的代码,以便我们可以看到周围的上下文。需要调查并解释您的错误。
  • std_logic_arith是一个,而不是一个IEEE将是VHDL
  • 请勿使用软件包std_logic_arith。请改用软件包numeric_std
  • 使用程序包numeric_std时,unsigned的值将用to_integer转换为整数:
    cnt := to_integer(unsigned(AktPos));
  • 信号:ResetNotausBetriebAktPosESRESL不属于灵敏度列表计时的过程。
  • 变量的初始值分配仅执行一次。可能这不是您想要实现的,对吗?
  • 类型zustand是枚举类型。因此,变量zustands_vektor对包含标量离散值的对象使用了错误的命名。向量是一个数组。

通常,对于初学者来说,在VHDL中使用变量是没有用的。您最有可能想要使用信号。 VHDL是一种硬件描述语言,而不是一种编程语言,您可以在其中使用变量来解决日常问题。