我想将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
库中的一些错误(尽管在代码中没有看到,但我确实包含了这些错误)
我做错了什么?
答案 0 :(得分:0)
您的代码和您的问题有很多问题...这是要修复的问题列表:
std_logic_arith
是一个包,而不是一个库。 IEEE
将是VHDL 库。std_logic_arith
。请改用软件包numeric_std
。numeric_std
时,unsigned
的值将用to_integer
转换为整数:cnt := to_integer(unsigned(AktPos));
Reset
,Notaus
,Betrieb
,AktPos
,ESR
和ESL
不属于灵敏度列表计时的过程。zustand
是枚举类型。因此,变量zustands_vektor
对包含标量离散值的对象使用了错误的命名。向量是一个数组。通常,对于初学者来说,在VHDL中使用变量是没有用的。您最有可能想要使用信号。 VHDL是一种硬件描述语言,而不是一种编程语言,您可以在其中使用变量来解决日常问题。