2011-08-10 20 views
0

私は平均2〜4個の8ビットstd_logic_vector入力信号を持つVHDLに2つのパッケージ関数を書き込もうとしています。私は次のavgtwoコードを実装すると、私のシミュレーションで2倍以上の答えが得られます。それは戻り操作のようなものです。sum(sum'high downto 1)は合計の上位8ビットを取っていません...何が欠けていますか?関数内のstd_logic_vector変数の平均を計算する

library IEEE; 
    use IEEE.STD_LOGIC_1164.all; 
    use IEEE.STD_LOGIC_UNSIGNED.all; 
    use IEEE.NUMERIC_STD.ALL; 

    package my_package is 
     function avgtwo(v1, v2 : std_logic_vector) return std_logic_vector; 
     function avgfour(v1, v2, v3, v4 : std_logic_vector) return std_logic_vector; 
    end my_package; 

    package body my_package is 
     function avgtwo 
     (
      v1, v2 : std_logic_vector 
     ) 
     return std_logic_vector is 
     variable sum : std_logic_vector(v1'high+1 downto 0) := (others => '0'); 
     begin 
      sum := std_logic_vector(unsigned(v1)) + std_logic_vector(unsigned(v2)); 
      return sum(sum'high downto 1); 
     end function avgtwo; 


     function avgfour 
     (
      v1, v2, v3, v4 : std_logic_vector 
     ) 
     return std_logic_vector is 
     variable sum : std_logic_vector(v1'high+2 downto 0) := (others => '0'); 
     begin 
      sum := std_logic_vector(unsigned(v1)) + std_logic_vector(unsigned(v2)) + std_logic_vector(unsigned(v3)) + std_logic_vector(unsigned(v4)); 
      return sum(sum'high downto 2); 
     end function avgfour; 

    end my_package; 

答えて

0

私が間違っていたことを理解しました。受信変数と同じサイズの2つのstd_logic_vectorsを追加していることを確認する必要があります。

「avgtwo」関数で

:だから私は、次のように合計行を編集しavgfour機能に関する同様の

sum := std_logic_vector(unsigned('0' & v1)) + std_logic_vector(unsigned('0' & v2)); 

を - 代わりに「0」の「00」を使用します。

関連する問題