2012-11-18 21 views
5

STD_LOGIC_1164またはSTD_NUMERICの事前定義型を使用して、0〜2^32-1の範囲の整数を表す方法はありますか? (デフォルトの整数型の範囲は-2^31-1から2^31-1までです)整数より大きい整数を表現する方法

32ビットカウンタを実装する必要があり、std_logic_vectorの代わりに整数型を使用してコードを保存する方法を探していました。これのための任意のデザインパターン?

または、よく質問されています:操作をサポートする32ビット(符号なし)整数を宣言する最良の方法>/<、=、+ - /?予め

Tahnks

EDIT1:私が見つけた1つのオプションSTD_LOGIC_VECTOR(0とdownto 31)のように信号を宣言するために、及び比較または+を行うときの変換を実行することであった - 操作を..例:カウンタ< =カウント+ (カウンタの値の1/4が必要な場合など)

+0

std_logic_vectorよりもnumeric_stdを優先します。 4で除算(または2の累乗)するには、numeric_stdのシフト演算子を調べるか、ベクトルをスライスします。出力<= "00"&入力(31ダウン2); –

答えて

7

Integer型を使用している場合は、次のようになります。std_logic_vector(unsigned(value)+ 1) (少なくとも移植可能ではありません;最小限を超えて64ビット整数を提供するVHDLツールがいくつかあります)

IEEE.numeric_stdを使用すると、完全な32ビット範囲(必要に応じて53ビット)のUnsignedを宣言することができます。何を求めているのか誤解しない限り、必要なものすべてを実行する必要があります。

+0

これは本当に問題を解決しました。私は自分のシグナルをunsigned(31 downto 0)と宣言し、必要な操作をサポートしています(出力にマップするためにstd_logic_vector(counter)を使用していますが)。答えをありがとう。 – mbrandalero

+1

write()とwriteline()を使ってテキストファイルに大きな整数を書き込む方法はありますか?通常、このような整数to_integer(unsigned(sig1))に変換します。ネイティブに大きな数字をファイルに書き込めないHDLを使っているとは思えません。 –

2
use ieee.numeric_std.all; 

unsignedデータ型を使用します。これは、数学演算が定義されたビットベクトルとして動作します。必要なビット数を選択できます。例:

signal mynum : unsigned(234 downto 0) 
関連する問題