-1

我设计并测试了我的 VHDL 代码。我使用 ISIM(xilinx 模拟器)来测试代码。ISIM 有问题,所以我切换到 modelsim SE 10c。当我通过 xilinx ise 运行 modelsim 时,modelsim 出现以下错误

致命:(vsim-3421) 值 -14 超出范围 -7 到 7。

我相关的 VHDL 代码是

图书馆 IEEE;

使用 IEEE.STD_LOGIC_1164.ALL;

使用 IEEE.NUMERIC_STD.ALL;

图书馆UNISIM;

使用 UNISIM.VComponents.all;

信号 img_int :整数范围 -7 到 7 ;

信号 add1 :整数范围 -7 到 7 ;

信号 add2 :整数范围 -7 到 7 ;

进程(时钟)

开始

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 <= add1 + add2;

问题线是

img_int <= add1 + add2;

任何人都可以告诉为什么modelsim会给出这个错误?

4

1 回答 1

0

因为 'add1' 的最小可能值为 -7。'add2' 也一样。将 'add1' 与 'add2' 相加会得到最小值 -14。该值 (-14) 不能保存在您的“img_int”信号中。

您可以将 'img_int' 的范围扩展到例如整数范围 -14 到 14 或截断结果。

无论如何:尝试使用库“ieee.numeric_std”的“有符号”和“无符号”类型,以及“整数”类型。

于 2014-10-23T12:36:38.463 回答