2

3 つのスコアボードに接続された分析ポートがあります。分析ポートで書き込みが行われると、サブスクライバー (スコアボード) が特定の順序で呼び出されます。しかし、私はそれらが別の順序で呼び出されることを望みます。

明示的な順序付けの実際の使用例は次のとおりです。1 つのスコアボードはロギングのみを行うため、最初に呼び出す必要があります。もう一方のスコアボードは非常に基本的な下位レベルのチェックを行うため、2 番目に呼び出す必要があります。3 番目のスコアボードは非常に複雑な高レベルのチェックを行うため、最後に呼び出す必要があります。

SV スニペット:

sb1 = scoreboard_1::type_id::create("sb1", null);
sb2 = scoreboard_2::type_id::create("sb2", null);
sb3 = scoreboard_3::type_id::create("sb3", null);

// Connect analysis port to scoreboard
m_ap = new("ap", null);
m_ap.connect(sb2.m_imp);
m_ap.connect(sb3.m_imp);
m_ap.connect(sb1.m_imp);
m_ap.resolve_bindings();

// Write
m_ap.write(10);

現在の出力:

# UVM_INFO design.sv(15) @ 0: sb1 [write] scoreboard_1
# UVM_INFO design.sv(32) @ 0: sb2 [write] scoreboard_2
# UVM_INFO design.sv(49) @ 0: sb3 [write] scoreboard_3

サブスクライバーが呼び出される順序を制御するにはどうすればよいですか? 私はそれらがこの順序であることを望みます:

  • スコアボード_3
  • スコアボード_2
  • スコアボード_1

EDA Playground のサンプル コード: http://www.edaplayground.com/x/2zQ

4

3 に答える 3

3

を呼び出すと、分析ポートのプロバイダーは、文字列の連想配列内に配置されますconnect()。を実行するforeachと (「参考文献」を参照resolve_bindings())、辞書順で項目が取得されます。これは、UVM の現在の実装によってのみ機能します。将来の実装では、順序付けが定義されていないオブジェクトの連想配列を使用することが決定される可能性があります。

分析ポートの背後にある主なアイデアは、接続する必要がないということです。つまり、各サブスクライバーは、そのポートに接続されている他のサブスクライバーから完全に独立しているため、順序付けに依存することはできません。

書き込みが特定の順序で確実に実行されるようにしたい場合は、テストベンチ構造を介して強制する必要があります。特定の順序で呼び出しを委任する AP に接続された最上位のスコアボードを用意するか、スコアボードを連鎖させるかのいずれかです。スコアボード 1 が処理を行ってからスコアボード 2 に書き込み、スコアボード 2 が処理を行ってからスコアボード 3 に書き込みます。

于 2014-04-09T15:11:41.247 に答える
1

主要なシミュレータ (ModelSim/Questa、INCISIV、および VCS) では、文字列連想配列の順序uvm_port_base.svhはアルファベット順です。つまり、分析ポートの書き込み順序は、サブスクライバー名のアルファベット順に対応しています。

要求された順序でサブスクライバーの書き込みを取得するには、名前を次のように変更します。

sb1 = scoreboard_1::type_id::create("-sb1", null);
sb2 = scoreboard_2::type_id::create("--sb2", null);
sb3 = scoreboard_3::type_id::create("---sb3", null);

出力が次のように変化します。

# UVM_INFO design.sv(49) @ 0: ---sb3 [write] scoreboard_3
# UVM_INFO design.sv(32) @ 0: --sb2 [write] scoreboard_2
# UVM_INFO design.sv(15) @ 0: -sb1 [write] scoreboard_1

EDA Playground の修正: http://www.edaplayground.com/x/3bf

于 2014-04-10T20:52:30.660 に答える
0

サブスクライバーが呼び出される順序は「未定義」です。つまり、シミュレータ間を移動すると、順序が変わる可能性があります。したがって、順序に依存せずに機能するようにコードを設計する必要があります。

順序が重要な場合は、コード内で明確にします (つまり、動作を 1 つの大きなスコアボードに合成してから、順序どおりに委譲します)。文書化されていない動作に依存しないでください。

于 2014-04-15T15:12:26.010 に答える