1

信号を使った算術演算用に 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 として再び表す方法。

4

2 に答える 2

1

あなたの質問にはもう少し洗練が必要だと思います。Verilog のタグが付けられている理由がわかりません。あなたが示した 16 進数は符号付きではなく、std_logic_vector はそもそも算術ではありません (そのような解釈の追加は std_logic_arith などで行われますが、unsigned と signed from を使用することをお勧めします)。 numeric_std)。そのため、減算が機能するには、コードにさらに多くのものが必要であり、表示される負の数は別のものからのものでなければなりません。おそらくシミュレーター?シミュレーターと波形ビューアーには、信号の解釈方法に関する独自の設定がある傾向があります。

したがって、サンプルを展開して、使用している環境を示し、実際に求めている操作を説明してください。差の絶対値を取るつもりだったのですか、それとも飽和演算を使用したのですか?

于 2015-05-26T08:39:27.363 に答える