1

次の構造を持つ VHDL のエンティティがあります。

-- Imports...
entity myentity is
  port (..specifying in and out signals..);
end myentity;

architecture beh_myentity of myentity is
  begin
    process(..sensitivity list..)
      -- Some variables
      file myfile : text open write_mode 
                    is "myentlog.txt";  -- <== My problem is here!!!
        begin
          -- ..The process body..
    end process;
end beh_myentity;

ファイルを開くのに問題はありません。すべてが機能します。私は問題があります。テストベンチを作成して実行するときは、通常、エンティティのインスタンスを 1 つ作成します。しかし、私の場合は、2 つのインスタンスを配置する必要があります。私の問題は、ファイル名との競合が発生し、1 つのプロセスが (同じ) ログ ファイルのオープンと書き込みに必然的に失敗することです。

これを解決したいので、ここで質問します:

  1. ポートにシグナルがあります。シグナル値をファイル名に追加してもよろしいですか? 残念ながら、これは最善の方法ではありません (そのようなことがうまくいくかどうかさえわかりません)。

  2. テストベンチでエンティティのインスタンス名を表す変数を取得する方法はありますか?

  3. ファイル名の最後に添付できるように、文字列をエンティティに渡す方法はありますか?

ありがとうございました

4

2 に答える 2

3

ポートではなくジェネリックとしてファイル名を渡してみてください。

http://www.ics.uci.edu/~jmoorkan/vhdlref/generics.html

于 2013-01-11T10:55:19.583 に答える
3

ファイル名を含む文字列型のシグナル。またはジェネリック (これも文字列型)。

この信号により、テストベンチ内の異なる時点で同じエンティティに異なるファイル名を割り当てることができます。VHDL-1993 以降を使用すると、アーキテクチャfile_open()は新しいファイル名で呼び出すことができます。

ジェネリックは、それぞれの異なるエンティティに固定のファイル名を与えます。

アプリケーションにとって最も単純なものを使用してください。

具体的な質問: 1) はい、シグナルが文字列の場合、ファイル名全体を文字列として渡すか、接尾辞を渡すことができます。実行時に文字列を生成しているため、VHDL-93 (またはそれ以降) の構文が必要です

process (...) is
file my_file;
begin
   file_open(my_file, base_name & suffix & ".txt", read_mode);
   ...
   file_close(my_file);
end process;

2) 最善の方法は、テストベンチでファイル名を生成して渡すことです。ただし、エンティティからの出力ポートは機能します。当然、このエンティティを合成することはできません...

3) もちろん…

entity myentity is
  generic ( base_name : string := "testfile");
  port    (suffix : in string);
end myentity;

(2) で必要な文字列を渡します。

例のように、VHDL-87 構文を使用する必要がある場合は、名前全体をジェネリックとして渡します。

file myfile : text open write_mode is base_name;
于 2013-01-11T10:57:21.087 に答える