我怎样才能检查是否...(...)然后...结束if; 构造如果std_logic_vector变量保存负数的位?如果是负数,我必须为其赋值为零.我有 :
signal sum : std_logic_vector (15 downto 0); sum<= (...); if (...) then sum<=x"00"; end if;
谢谢!
你不能添加两个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);
所以,总结一下 - 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;