ザイリンクスVivadoでカスタムコプロセッサIPをテストしています。 2つの32ビットベクトルに対して '*'演算子を使用して符号なし乗算を実行すると、結果が32ビットを超えると、上位32ビット、つまり上位32ビットに反映されないことがわかりましたがすべて0で、下位32ビットが結果の一部を表示します。IEEE.numeric_stdで '*'演算子を使用した場合のオーバーフローの処理
16449 * 4171239345 gives 613432305
私はnumeric_stdライブラリを読み、それが読み取ります
-- Id: A.15
function "*" (L, R: UNSIGNED) return UNSIGNED;
-- Result subtype: UNSIGNED((L'LENGTH+R'LENGTH-1) downto 0).
-- Result: Performs the multiplication operation on two UNSIGNED vectors
-- that may possibly be of different lengths.
は、32ビットを超える乗算するのに適していない「*」演算子ですか?
ありがとうございます!
をさんは、この動作を示しMCVEを見てみましょう。 'ieee.numeric_std.unsigned。" * ""演算子が32ビットに制限される理由はありません。 –