-1

VHDL コードを設計してテストしました。ISIM (ザイリンクス シミュレータ) を使用してコードをテストしました。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 を使用します。

signal 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 <= 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」の「signed」および「unsigned」タイプを「integer」タイプと同じように使用してみてください。

于 2014-10-23T12:36:38.463 に答える