2

これは本当に難しいことではありません。

生の 64 ビットIEEE 754 倍精度浮動小数点データをファイルから読み取り、std_logic_vector(63 downto 0). ModelSim ALTERA 10.1b を使用しています。

生のバイナリ データを 64 ビット ベクトルに読み込もうとしました。

type double_file is file of std_logic_vector(63 downto 0);
file infile1: double_file open read_mode is "input1.bin";

variable input1 : std_logic_vector(63 downto 0) := (others => '0');

read(infile1, input1);

しかし、これはうまくいきません。どうやら ModelSimは、入力データの各バイトstd_logicを( 'U''Z''-'など) として解釈しようとします。 ここに画像の説明を入力


realただし、データを変数に正常に読み取ることができます。

type real_file is file of real;
file infile1: real_file open read_mode is "input1.bin";

variable input1 : real;

read(infile1, input1);

しかし、この時点では、その変数をに変換する方法がわかりません。ほとんどすべてのGoogle の結果は、「これはできません。合成できません」とだけ言っています。私はそれを完全に理解しています-これは単なるシミュレーション用です。realstd_logic_vector(63 downto 0)real

4

3 に答える 3

2

キーはieee.float_pkgです。

まず、 を使用して浮動小数点to_floatに変換します。real

variable in1_r : real;
variable in1_f : float64;

in1_f := to_float(in1_r, in1_f);  -- in1_f passed for sizing

次に、単純にfloat64を slv に変換します。

variable in1_slv : std_logic_vector(63 downto 0);

in1_slv := to_std_logic_vector( in1_f );

これは、中間を排除して、ワンライナーでも実行できますfloat64

in1_slv <= to_std_logic_vector( to_float(in1_r, float64'high, -float64'low) );

ここで重要なのはto_float、ターゲット サイズを知る必要があるということです。中間値がないため、 の定義を使用しておよびパラメータを直接float64渡すことができます。Helped の定義を見てみましょう。exponent_widthfraction_widthfloat64to_float64

この質問は役に立ちました: IEEE Float型からstd_logic_vectorへの変換

于 2013-07-22T06:10:57.687 に答える
2

パッケージの David Bishop のユーザー ガイドは、ここにあります。

さらに、固定および浮動小数点パッケージというタイトルの David と私のプレゼンテーションをhttp://www.synthworks.com/papers/index.htmで見つけることができます。

于 2013-07-22T16:58:39.250 に答える