6

背景:

イーサネット MAC 用の VHDL テスト ベンチを作成しています。テストベンチは、パッケージと結合されたエンティティ + アーキテクチャ ファイルで構成されます。テストベンチが MAC に送信するイーサネット フレームを、wireshark からエクスポートしたバイナリ ファイルから読み取りたいと考えています。
私は VHDL 2008 で書いており、Mentor Graphics Model Technology ModelSim ALTERA vcom 10.0d Compiler を使用しています。

問題:

私がこれまでに見つけた VHDL/modelsim でバイナリ データを読み取るためのすべてのソリューションは、bit_vector の 1 ビットがファイル内の複数のビットで表される特別なファイル形式を使用します。VHDL でバイナリ ファイルを 8 ビットの bit_vectors に読み込むようにしたいと考えています。
これまでに得た最も近いものは、8 ビット ASCII 文字をバイナリ表現で直接書き込むことができる文字型ファイルを使用することでした。

4

3 に答える 3

4

私は解決策を見つけました。データを8ビット部分で直接解釈したい場合は、文字タイプのファイルを使用し、 'POS属性を使用してそれらを整数に変換する必要があります。次に、これらの整数をビットベクトルに変換できます。これは私がそれをした方法です:

LIBRARY ieee;
  USE ieee.std_logic_1164.ALL;
  USE ieee.numeric_bit.ALL;

LIBRARY std;
  USE std.textio.all;

...

TYPE t_char_file IF FILE OF character;
TYPE t_byte_arr IS ARRAY (natural RANGE <>) OF bit_vector(7 DOWNTO 0);

SIGNAL read_arr_byte : t_byte_arr(0 to 199);

...

read_file: PROCESS (start) IS
  FILE file_in : t_char_file OPEN read_mode IS "./38478.bin";  -- open the frame file for reading
  VARIABLE char_buffer : character;
BEGIN
  IF start'EVENT AND start = '1' THEN
    FOR i IN read_arr_byte'RANGE LOOP
      read(file_in, char_buffer);
      read_arr_byte(i) <= bit_vector(to_unsigned(character'POS(char_buffer), 8));
    END LOOP;  -- i
    file_close(file_in);
  END IF;
END PROCESS read_file;
于 2013-01-08T12:59:38.080 に答える
1

以前はこれを行っていましたが、適切なデータ型の定数配列として記述されたデータを使用して、あらゆる入力を実際の VHDL ファイルに変換する短いスクリプトを (本格的なテキスト処理言語で) 作成する方が生産的であることがわかりました。

これは、VHDL IMHO でファイルの解析を行うよりもはるかに簡単です。

于 2013-01-08T14:10:15.640 に答える