在 SystemVerilog 测试平台中,我如何最好地描述可以交错的多周期事务
In SystemVerilog test-benches how do I best describe multi-cycle transactions that can be interleaved
我想描述使用任务的事务。我正在使用时钟块 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
在下一个时钟周期变低。
//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);
根据驱动语句在它们计划成熟(更新)的槽中执行的顺序,最后一个驱动语句获胜。你可以这样写你的任务:
task automatic write_trans(input int data);
cb.write <= '1;
cb.data <= data;
cb.write <= ##1 '0;
endtask
这在 1800-2012 LRM §14.16.2 驱动时钟输出 信号中有解释。
我想描述使用任务的事务。我正在使用时钟块 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
在下一个时钟周期变低。
//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);
根据驱动语句在它们计划成熟(更新)的槽中执行的顺序,最后一个驱动语句获胜。你可以这样写你的任务:
task automatic write_trans(input int data);
cb.write <= '1;
cb.data <= data;
cb.write <= ##1 '0;
endtask
这在 1800-2012 LRM §14.16.2 驱动时钟输出 信号中有解释。