vhdl减法标准逻辑向量

vhdl减法标准逻辑向量,vhdl,Vhdl,我试图减去2个std逻辑向量,得到错误 p2 <= p1(11 downto 0)- idata(11 downto 0); std\u logic\u vector类型只是std\u logic的一个数组,它本身没有任何数值解释,因此在尝试应用减号(-)等数值运算时会出错 不要使用Synopsys非标准的std\u logic\u签名/未签名/arith软件包 VHDL-2002:使用标准ieee.numeric_std包中的无符号类型,将std_逻辑_向量转换为无符号表示,允许使用减

我试图减去2个std逻辑向量,得到错误

p2 <= p1(11 downto 0)- idata(11 downto 0);

std\u logic\u vector
类型只是
std\u logic
的一个数组,它本身没有任何数值解释,因此在尝试应用减号(
-
)等数值运算时会出错

不要使用Synopsys非标准的
std\u logic\u签名/未签名/arith
软件包

VHDL-2002:使用标准
ieee.numeric_std
包中的
无符号
类型,将
std_逻辑_向量
转换为
无符号
表示,允许使用减号等数字运算。代码如下:

use ieee.numeric_std.all;
...
p2 <= std_logic_vector(unsigned(p1(11 downto 0)) - unsigned(idata(11 downto 0)));
use ieee.numeric_std_unsigned.all;
...
p2 <= p1(11 downto 0) - idata(11 downto 0);

顺便说一句,请查看类似问题。

VHDL标准的-2008版本也包含了一个数字\u std \u无符号包,它为std \u逻辑\u向量提供无符号操作包装。使用
数字\u std \u无符号
包使用VHDL-2008兼容代码更新了答案。2008不是向后兼容2002吗?尽管我导入了ieee.numeric_std.all,但我无法获得上面的2002年答案进行编译,抱怨没有对operator+进行声明。上面的VHDL-2002代码中的结构在为VHDL-2008编译时也是可用的,并且被广泛使用,因为从VHDL-2002迁移到VHDL-2008编译时通常不会重写代码。
use ieee.numeric_std_unsigned.all;
...
p2 <= p1(11 downto 0) - idata(11 downto 0);