それが(書き込みシーケンスは、アドレスのリスト/キューを作成するIE)書き込みシーケンスからデータを収集し、仮想/メインシーケンスを聞かせすることはできません場合は、この配列に読み出しシーケンス
main_sequence {
write_sequence.start(...);
write_sequence.get_address_list(arr);
read_sequence.set_address_list(arr);
read_sequence.start(...);
}
を渡します
私たちは、以下のアプローチを試みることができる -
1)リストは、シーケンサーに記憶することができます。シーケンサーはエージェントの一部であるため、テスト全体の実行に使用できます。また、それらが別のスレッドから実行されていてもシーケンスに提供されます。 したがって、2つの配列はシーケンサーを介して話すことができます。
write_sequence {
my_sequencer ;
$cast(my_sequencer,m_sequencer);
my_sequencer.set_address_list(arr);
}
read_sequence {
my_sequencer ;
$cast(my_sequencer,m_sequencer);
my_sequencer.get_address_list(arr);
}
2)あなたはスコアボードのアプローチが好きなら、あなたは取得し、アドレスリストの設定を処理するためのクラスを作成することができます。クラスはトップenvでインスタンス化され、スコアボードに接続されます。スコアボードは、クラスを使用してアドレスリストを設定できます。 読み取りシーケンスでは、uvm_config_dbを使用してこのクラスのハンドルを取得し、それを使用してアドレスリストを取得できます。 [クラスはトップenvのuvm_config_dbにも入れられます]。 この方法では、スコアボードが読み取りを開始する前にアドレスを受信して処理することを確認する必要があります。
お返事ありがとうございました 私はuvm_blocking_put/get_portとuvm_tlm_fifoを使用しました 私はシーケンサーにget portを入れました。環境内では、put-getポートをtlm_fifo経由で接続します。私は環境でtlm_fifoを作成しました。 が非常に奇妙な問題に直面し、データが失われました 私はスコアボードからデータを送信しています。シーケンスから取得すると、別のデータが表示されます。 また、putポートは異常な動作をしますが、tlm_fifoのサイズは1です。しかし、putポートは3つのトランザクションをtlm_fifoに一度に送信し、1つずつ送信し始めます。 – haykp