2016-04-30 17 views
0
library ieee; 
use ieee.std_logic_unsigned.all; 
use ieee.numeric_std.all; 
use ieee.std_logic_1164.all; 
entity DistanceCal is 
    port(timeIn : in integer; 
     Distance : out std_logic_vector(15 downto 0)); 
end DistanceCal; 

architecture behav of DistanceCal is 
    signal conv_int : std_logic_vector(to_unsigned(timeIn, conv_int'length)); 
begin 
    process(timeIn) 
    begin 
    conv_int <= std_logic_vector(to_unsigned((timeIn*340/2), conv_int'length)); 
    end process; 
    Distance <= conv_int; 
end behav; 

整数をバイナリ表現に変換する必要がありますが、整数の値がわかりません。私は何をすべきか?整数をVHDLのバイナリ表現に変換するにはどうすればよいですか?

+0

、私はすでにそれを変換することができます。ご清聴ありがとうございました。 –

答えて

1

あなたの宣言はconv_intで無効です。最初は、conv_intがまだ定義されていないため、右側のサブタイプの指示にconv_intを使用することはできません。他の信号(またはオブジェクト)を使用することができます。 Distance、これは以前に宣言されています。そして、あなたはtoまたはdowntostd_logic_vectorの長さだけでなく、例えばで範囲を指定する必要があります:

signal conv_int : std_logic_vector(to_unsigned(timeIn, Distance'length)-1); 

しかし、今の範囲は推敲中に制約されていないので、このは、どちらかを動作しませんtimeIn理由定数ではありません。つまり、コンパイル時に配列タイプstd_logic_vectorの範囲を指定する必要があります。

それはあなたが後でDistanceconv_intを割り当てるためDistance用としてconv_intのための同じ範囲を持つためにここに意味をなさないと思います。この宣言は有効です:

signal conv_int : std_logic_vector(Distance'range); 

この変更を加えると、コードが分析され、複雑になります(コンパイル/合成)。整数式timeIn*340/2conv_int'lengthにバイナリ表現を切り捨てながらunsignedに変換し、その後、実行時に/シミュレーション時に評価されます。次のように今、この行で「バイナリ」変換

conv_int <= std_logic_vector(to_unsigned((timeIn*340/2), conv_int'length)); 

にあなたの整数で動作します最後にこれをstd_logic_vectorに変換します。 timeInの値がfloor(2 ** 16/170)= 101より大きい場合、切り捨ては予期せぬDistanceになることに注意してください。


コードをさらに向上させることができます:あなたは非標準のシノプシスパッケージstd_logic_unsignedを避ける必要があります

  1. 。標準IEEEパッケージnumeric_stdのみを使用してください。

  2. 処理は、同時実行文として書かれた1ライナーconv_int <= ...に相当します。バリアントはtimeInが変更されたとき(および起動後に1回)に実行されるためです。

  3. conv_intが出力Distanceにのみ割り当てられている場合は、中間信号は必要ありません。

  4. timeInが2 ** 31/170より小さい限り、340/2の乗算は170の乗算と等価になります。これは、切り詰めに関する上記の要件のために当てはまります。このように、あなたのアーキテクチャはに減少させることができる

:今

architecture behav of DistanceCal is 
begin 
    Distance <= std_logic_vector(to_unsigned(timeIn*170, Distance'length)); 
end behav; 
関連する問題