タスクを使ったトランザクションについて説明したいと思います。クロッキングブロックCBを使用しています。このタスクは私がやりたいことのようなものですが、このようにする場合、書き込みシームの値はランダムになるため、誰が最後に書き込みを行うかについて定義された順序はないと思います。
task automatic write_trans(input int data);
fork
begin
cb.write <= '1;
cb.data <= data;
end
begin
##1;
//But only if there is no other transactions driving write to 1
cb.write <= '0;
end
join_any
endtask
したがって、トランザクションwrite
を 1 つだけ実行すると、次のクロック サイクルで Low になります。
//for isolated transactions write should be 0,1,0;
write_trans('h17);
##2;
//for these two transactions write should be 0,1,1,0;
write_trans('h18);
##1;
write_trans('h19);