我想检查std_logic_vector是否包含负整数

fan*_*lla 2 vhdl

我怎样才能检查是否...(...)然后...结束if; 构造如果std_logic_vector变量保存负数的位?如果是负数,我必须为其赋值为零.我有 :

signal sum : std_logic_vector (15 downto 0);
sum<= (...);
if (...) then
   sum<=x"00";
end if;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dan*_*zar 5

你不能添加两个STD_LOGIC_VECTOR,因为语言对它应该执行的算术一无所知.这是因为,对于综合工具,声明为的每个信号/端口/变量STD_LOGIC_VECTOR只不过STD_LOGIC是多值逻辑类型的数组.对这种类型的算术没有意义.

如果要对接口类似于公开的类型的类型使用算术STD_LOGIC_VECTOR,则应使用SIGNED(对于带符号算术)和UNSIGNED(对于无符号算术)类型IEEE.NUMERIC_STD.为了在这些类型之间进行转换,只需使用类型名称显式转换它们,如下所示:

std_logic_vector_variable := UNSIGNED(unsigned_variable);
unsigned_variable := STD_LOGIC_VECTOR(std_logic_vector_variable);
Run Code Online (Sandbox Code Playgroud)

所以,总结一下 - signal sum应该声明为SIGNED,因为你显然要对它进行算术运算.然后,您可以自由地使用所需的比较和算术运算.生成的代码应该看起来或多或少像这样:

use IEEE.NUMERIC_STD.ALL;
-- entity and architecture declarations...
signal sum : SIGNED (15 downto 0);
-- inside some process...
if (sum <= 0) then sum <= 0; end if;
Run Code Online (Sandbox Code Playgroud)