1

問題の説明:

SystemVerilog で設計し、同じ言語でテストベンチを作成します。インタープリターを e. 理想的には、シミュレーターが何らかの行にヒットしたときに、シミュレーション時にターミナル ポップアップが表示されるようにします。

考えられるアイデア:

DPI-C を調べたところ、インタープリターから実行するには、プロジェクト内のすべてのタスクを「エクスポート」する必要があるようです。ただし、これを自動的に行う方法や、より良い方法があるかどうかはわかりません。さらに、C に 2 番目のシェルを開いて SystemVerilog タスク (実行したい) を入力させる方法がわかりません。

これは私の同僚が繰り返す問題であり、テストベンチをコンパイルするまでに 10 分間待たなくても済むようになれば、人生の苦痛が大幅に軽減されます。

4

3 に答える 3

1

シミュレーターの対話型コマンド ライン ターミナルに移動してみてはどうでしょうか。これは、UNIX などの典型的なシェル端末ではありません。これは、シミュレータに関連付けられたベンダー固有のインタラクティブ モードです。ほとんどの場合、Verilog の でトリガーされ$stopます。これはベンダー固有であるため、すべての機能についてマニュアルを参照する必要があります。一部の機能では、Verilog/SystemVerilog で定義されたタスクと関数を呼び出すことができます。

また、1 つのシミュレーションですべての条件を実行する必要がないようにも思えます。あなたの状況では、一度コンパイルして何度も実行する戦略がうまくいくはずです。SystemVerilog システム関数は$test$plusargs$value$plusargsシミュレーションの開始に使用される引数を検出できます。IEEE Std 1800-2012 § 21.6コマンドライン入力を参照してください

// ...
int testid;
// ...
initial begin
  // ...
  if(!$value$pluseargs("TESTID=%d",testid)) begin
    // code if +TESTID= is not an argument
  end
  case(testid)
  0 : run_task_test0(/*...*/);
  1 : run_task_test1(/*...*/);
  2 : run_task_test2(/*...*/);
  3 : run_task_test3(/*...*/);
  // ...
  endcase
  // ...
end

次に、一度コンパイルして、必要な回数だけシミュレーションを開始します。

% [compile-cmd]
% [sim-cmd] +TESTID=0
% [sim-cmd] +TESTID=3
% [sim-cmd] +TESTID=1
% [sim-cmd] +TESTID=2
于 2015-04-21T20:26:19.867 に答える
0

最善の策は、テスト用にある種のスクリプト言語で DPI を使用することです。たとえば、私はこれがうまく機能するのを見てきました: Python -> Boost.Python -> C++ -> DPI -> Verilog/SystemVerilog

テストでできることは制限されます (2 つの言語間の TLM インターフェースとしてアプローチします。つまり、2 つの言語間でトランザクションをやり取りするだけです)。Python の「yield」を読んで、Python とシミュレータの間で制御をやり取りする方法を理解してください。

于 2015-05-26T20:47:42.127 に答える