我无法检查Unsigned(8 downto 0)数据类型是“ XXXXXXXX”还是“ UUUUUUUU”
在进程内部,将其作为变量甚至检查输入均无法使其正常工作。
有什么解决办法吗?
这是因为numeric_std
程序包使"="
函数过载,因此任何“ UUUU”或“ XXXX”值都将导致结果始终为假。请记住,numeric_std是算术运算,因此非数字值应导致此行为。
为了获得有效的比较,请先将无符号的转换为std_logic_vector:
if std_logic_vector(some_unsiged) = "XXXXXXXXX" then
numeric_std为“ =”运算符提供重载函数。IEEE Std 1076-2008 9.2.3关系运算符“为文件和保护类型以外的所有类型定义了相等和不相等运算符(=和/ =)。” 12.4使用子句“如果两个可能可见的声明是同形异义词,并且一个显式声明,另一个隐式声明,则隐式声明不会直接可见。”
“ =” [unsigned,unsigned return boolean]是在软件包numeric_std中声明为unsigned类型之后立即隐式声明的,并且不可见。它具有行为(9.2.3)“当且仅当左操作数的每个元素都有一个右操作数的匹配元素,且反之亦然,两个相同类型的复合值相等。相等,由元素类型的预定义相等运算符给出。” 虽然显式声明的“ =”行为是不同的。ieee.std_logic_1164。“ =”没有显式的过载声明。