信号を使った算術演算用に VHDL でコードを書いています。次のようにシグナルを宣言しました。
signal x : std_logic_vector (7 downto 0);
signal y: std_logic_vector (7 downto 0);
signal z: std_logic_vector ( 7 downto 0);
z<= x-y ;
詳細に:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
USE ieee.std_logic_arith.conv_std_logic_vector;
library ieee_proposed;
use ieee_proposed.fixed_pkg.all;
signal heat0,heat1,heat2 : std_logic_vector(31 downto 0);
signal Data_In, M_AXIS_TDATA Fixed_input_tdata: std_logic_vector (31 downto 0);
shared variable float, h0,h1,h2,fixed1,fixed2,fixed3,fixed_shift :ufixed (23 downto -8);
shared variable fixed_64: ufixed (31 downto -32);
float := to_ufixed(unsigned (Fixed_input_tdata), 23,-8);
h2 := to_ufixed(unsigned(Data_In),23,-8);
heat1 <= Data_in;
h1 := to_ufixed(unsigned(heat1),23,-8);
heat0<= heat1;
h0 := to_ufixed(unsigned(heat0),23,-8);
heat1_mult := std_logic_vector(unsigned(heat1) sll 1);
fixed_shift := to_ufixed(unsigned (heat1_mult), 23,-8);
fixed1 := fixed_shift+h2;
fixed2 := h0-fixed1;
fixed_64 := fixed2 *float;
fixed3 := h1+fixed_64;--(23 downto -8);
M_AXIS_TDATA <= std_logic_vector (fixed3);
std_logiC-vector の算術演算を固定小数点で行うのは正しい方法ですか?
例として、z= 0x01-0x11 を見てみましょう。これにより、負の出力 (0xF0) が得られます。しかし、負の出力は必要ありません。この値を正の値として見たいです。これらの信号タイプを unsigned に変更しようとしましたが、それでも成功しませんでした。実際、vhdl には複雑な数学演算がいくつかあるため、ここでは例を挙げて説明をわかりやすくしています。符号付きの値を使用したくありません。正の符号なし出力を送信する方法は?
さらに別の例: 出力が bf978000 の場合、負の数 -1.18 として表示されます。ネガティブではなく、ポジティブであってほしい。
別の例を挙げましょう。
z= 2+ [0.2 * (4-10) ] = 0.8 . 0.8 固定小数点形式 (0x000000cd) (24 整数、8 小数形式): 0.2 は固定小数点形式で 0x00000033 です。(24 整数、8 小数形式) しかし、[0x00000002 + (0x00000033 * (0x00000004-0x0000000A) ] = FFFFFED0 を取得しています (これは負の数です)。その出力を 0.8 として再び表す方法。