VHDL Quartus不识别+&引用;及-&引用;

VHDL Quartus不识别+&引用;及-&引用;,vhdl,quartus,Vhdl,Quartus,所以我试着做一个程序,在一个简单的条件下执行加法或减法,但我的VHDL编译器一直告诉我,它不能识别“+”和“-”是什么意思。 我也不确定我正在使用的图书馆 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; ENTITY ADDSUBS IS PORT( CNTRL: in std_logic; NUM1, NUM2: in std_logic_vector(7 downto 0);

所以我试着做一个程序,在一个简单的条件下执行加法或减法,但我的VHDL编译器一直告诉我,它不能识别“+”和“-”是什么意思。 我也不确定我正在使用的图书馆

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;

ENTITY ADDSUBS IS
PORT( CNTRL: in std_logic;
      NUM1, NUM2: in std_logic_vector(7 downto 0);
      SUM: out std_logic_vector(8 downto 0));
END ADDSUBS;

ARCHITECTURE A4 OF ADDSUBS IS
BEGIN
SUM <= ('0' & NUM1) + ('0' & NUM2) WHEN (CNTRL='0') ELSE
       ('0' & NUM1) - ('0' & NUM2) WHEN (CNTRL='1');
END;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体ADDSUBS是
端口(CNTRL:标准逻辑中;
NUM1,NUM2:标准逻辑向量(7到0);
求和:输出标准逻辑向量(8到0);
末端附加接头;
ADDSUBS的架构A4为
开始

SUM您还没有包含任何可以使用标准逻辑向量进行算术运算的包。('0'&NUM1)仍然是std_逻辑_向量,您需要将其强制转换为无符号/有符号:

unsigned('0' & NUM1)

如果不使用已经为我工作的2008个IEEE包NealIdSydStUnSudio和,也可以使用STDDYLogic(Un)签名库来指定编译器应该考虑的内容。StdLogLogic(Un)签名库是非标准VHDL,一般建议是避免使用它们。如果您希望使用SLV实现无符号算术,VHDL 2008会添加数字_std_unsigned(无符号版本)。