ランダム シードを作成するために、VHDL テストベンチでシステム タイムスタンプを取得したいと考えています。
どうやってやるの?
ちなみに、OSVVM ライブラリの RandomPkg を使用しています。
よろしく。
ランダム シードを作成するために、VHDL テストベンチでシステム タイムスタンプを取得したいと考えています。
どうやってやるの?
ちなみに、OSVVM ライブラリの RandomPkg を使用しています。
よろしく。
汎用 VHDL アプローチの場合、システム時間をジェネリックとしてテスト ベンチ エンティティに渡すことができます。テスト ベンチが次のようになっている場合:
entity seed_tb is
generic(SEED : natural := 0);
end entity;
architecture sim of seed_tb is
begin
assert FALSE report "SEED = " & integer'image(SEED) severity NOTE;
end architecture;
次に、Linux で ModelSim シミュレーターを使用すると、コンパイルおよび実行のコマンド ラインは次のようになります。
> vlib work
> vcom seed_tb.vhd
> vsim seed_tb -c -gSEED=`date +%s` -do "run; exit"
1970 年 1 月 1 日以降のdate +%s
秒数は、VHDL の自然な型に収まります (さらに 25 年後でも :-)。
このアプローチには、デバッグが必要な場合に、コマンド ラインから同じシードを使用してシミュレーションを簡単に再実行できるという利点があります。
外部オブジェクト (アーキテクチャ、サブ プログラム) をサポートする VHDL ツール スイートを使用すると、システム コールからシステム時間を返す外部サブプログラムを作成できます。
シード値をファイルに配置して読み取ることができます。これを実行してシミュレーターを起動するシェル スクリプト ラッパーが思い浮かびます。
procfs 関数は、ファイル読み取りとしてシステム時間へのアクセスを提供できます。
システム時間の概念は、VHDL では一般的に重要ではないことに気付くかもしれません。