sequence_libraryの "select_sequence"をカスタマイズしようとしているときに直面している1つの問題を理解してください。 私は "select_sequence"をカスタマイズして、シーケンスを正確な順序で実行する必要があります。これは外部ファイルで書かれています。 そのため、私は登録されたすべてのシーケンスタイプのコンテナを踏んでいます:sequences [$]。ダイナミックキャスティングキャストが必要なシーケンスと一致する場合は、select_sequence関数から数値を返します。つまり、シーケンスを実行するライブラリを作成します。シーケンスライブラリでselect_sequenceをカスタマイズする際の問題
これは私のコードから一部です:
class cfgSeqncLib extends uvm_sequence_library #(seqItem_cfg);
`uvm_object_utils(cfgSeqncLib)
`uvm_sequence_library_utils(cfgSeqncLib)
rstSeqnc resetSequence;
function int unsigned select_sequence(int unsigned max);
static int unsigned counter;
select_sequence = counter;
counter++;
if (counter > max)
counter = 0;
foreach (sequences[i])
begin
if ($cast(resetSequence, sequences[i]))
$display("%t: <><><>><>< ResetSeq: Casting IS Successfull", $time);
else
$display("%t: >>>>>>>>ResetSeq: Casting is NOT Successfull", $time);
end // foreach
endfunction
endclass
そして、私は使用してライブラリ内のリセットシーケンスを追加しました: `uvm_add_to_seq_lib(rstSeqnc、cfgSeqncLib)コマンドを使用します。
事は$ケースが は\ >>>>>>>> ResetSeqそれは常に印刷シミュレーション中1すなわちを返さないことである:私はそのリセットシーケンスを見ることができるにもかかわらず
を成功していません鋳造がされていますsequence_libによって実行されますが、キャストは決してtrueを返しません。 理由を説明していただけますか?
UVMコードを使用している場合
は、私は、鋳造作品よりも、次のようにselect_sequence
機能を変更します。Simulaiton中に
function int unsigned select_sequence(int unsigned max);
static int unsigned counter;
uvm_object_wrapper wrap;
uvm_object obj;
select_sequence = counter;
counter++;
if (counter > max)
counter = 0;
foreach (sequences[i])
begin
wrap = sequences[i];
obj = factory.create_object_by_type(wrap,get_full_name(),
$sformatf("%s:%0d",wrap.get_type_name(),sequences_executed+1));
if ($cast(resetSequence, obj))
$display("%t: !!!!!!! ResetSeq: Casting IS Successfull", $time);
else
$display("%t: >>>>>>>>ResetSeq: Casting is NOT Successfull", $time);
end // foreach
endfunction
は私が取得しています:
!!!!!!! ResetSeq: Casting IS Successfull
私が理解できない理由でキャスティングselect_sequenceの最初のバージョンは動作しませんが、後者の場合は動作します。誰かがこれを私に説明してください。
説明をいただきありがとうございます。今は明らかです。 – haykp
あなたは歓迎です –