System verilog 在SystemVerilog测试台中,我如何最好地描述可以交错的多周期事务

System verilog 在SystemVerilog测试台中,我如何最好地描述可以交错的多周期事务,system-verilog,verification,test-bench,System Verilog,Verification,Test Bench,我想描述使用任务的事务。我使用的是时钟块cb。这个任务是我想做的,但是写接缝的值是随机的,当这样做的时候,我想没有定义谁最后驱动写的顺序 task automatic write_trans(input int data); fork begin cb.write <= '1; cb.data <= data; end begin ##1;

我想描述使用任务的事务。我使用的是时钟块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

根据驱动器语句在其计划成熟(更新)的插槽内执行的顺序,最后一个驱动器语句获胜。您可以按如下方式编写任务:

task automatic write_trans(input int data);
  cb.write <= '1;
  cb.data <= data;
  cb.write <= ##1 '0; 
endtask
任务自动写入传输(输入整数数据);

这是我错过的语言的一个方面。这为我解决了很多问题,谢谢!
task automatic write_trans(input int data);
  cb.write <= '1;
  cb.data <= data;
  cb.write <= ##1 '0; 
endtask