get_next_item是一个阻塞方法(driver-sequencer API的一部分),阻塞直到sequence_item可供driver处理为止,并返回指向sequence_item的指针。try_next_item是非阻塞版本,如果没有sequence_item可用于driver处理,则它将返回空指针。
get_next_item是一个阻塞调用,用于从sequencer FIFO获取sequence_item以供driver处理。driver处理完sequence_item后,需要先使用item_done完成握手,然后再使用get_next_item()请求新的sequence_item。
get()也是一个阻塞调用,它从sequencer FIFO获取sequence_item以供driver处理。但是,在使用get()时,由于get()方法隐式完成了握手,因此无需显式调用item_done()。
driver的get()方法是一个阻塞调用,从sequencer FIFO获取sequence_item以供driver处理。一旦有sequence_item可用,它就会解锁,并与sequencer完成握手。peek()方法类似于get(),并阻塞直到sequence_item可用为止。但是,它不会从sequencer FIFO中删除sequence。因此,多次调用peek()将在driver中返回相同的sequence_item。
item_done()方法是driver中的一种非阻塞方法,用于在get_next_item()或try_next_item()成功之后与sequencer完成握手。如果不需要发回响应,则不带参数调用item_done(),它将完成握手,而无需在sequencer响应FIFO中放置任何内容。如果希望将响应发送回去,则将item_done()与指向响应sequence_item的句柄作为参数一起传递。该响应句柄将放置在sequencer响应FIFO中,sequence通过这种方式进行响应。
task body();
seq_item_c req;
start_item(req);
#10 ns;
assert(req.randomize());
finish_item(req);
endtask
正确答案将在下一期公布,或者到下面的文章获取答案