我设计并测试了我的VHDL代码。我使用ISIM(xilinx模拟器)来测试代码。 ISIM是越野车所以我改用了modelsim SE 10c。 当我通过xilinx运行modelsim时,我在modelsim中得到以下错误
致命:( vsim-3421)值-14超出范围-7到7.
我的相关VHDL代码是
library IEEE;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
图书馆UNISIM;
使用UNISIM.VComponents.all;
信号img_int:整数范围-7到7;
信号add1:整数范围-7到7;
信号add2:整数范围-7到7;
进程(clk)
开始
if rising_edge(clk) then
add1 <= to_integer( signed(e(0)) ) + to_integer( signed(e(1)) ) +
to_integer( signed(e(2)) ) + to_integer( signed(e(3)) );
add2 <= to_integer( signed(e(4)) ) + to_integer( signed(e(5)) ) +
to_integer( signed(e(6)) ) + to_integer( signed(e(7)) );
end if;
结束过程;
img_int&lt; = add1 + add2;
问题在于
img_int&lt; = add1 + add2;
可以说明为什么modelsim会出现此错误吗?
答案 0 :(得分:0)
因为&#39; add1&#39;的最小可能值是-7。同样适用于&#39; add2&#39;。 添加&#39; add1&#39;与&#39; add2&#39;给出最小值-14。 该值(-14)不能保存在您的&#39; img_int&#39;信号。
你可以扩展&#39; img_int&#39;的范围。例如整数范围-14到14或截断结果。
无论如何:尝试使用&#39;签名&#39;并且&#39;未签名&#39; liberary的类型&ieee.numeric_std&#39; I.S.O.类型&#39;整数&#39;。