Sequencer和Driver之间通信机制
sequencer产生transaction,,而driver负责接收transaction。 一个sequence在向sequencer发送transaction前,要先向sequence发送一个请求,sequencer把这个请求放在一个仲裁队列中。
如图所示,在Sequencer里的有个task body函数,当一个sequence启动之后,会自动执行body中的代码。在body()中,用到了一个宏uvm_do。这个宏是UVM最常用的宏之一。作为sequencer,它需要做两件事情:第一,检测仲裁队列seqr.wait_for_grant()里是否有某个sequence发送transaction的请求;第二,检测driver里seq_item_port.get_next_item(req)是否申请transaction。
1、如果仲裁队列里有发送请求,但是driver没有申请transaction,那么sequencer将会一直处于等待状态,直到driver申请新的transaction,想当一次握手。 此时,sequencer同意sequence的发送请求,sequence在得到sequencer的批准后,产生一个transaction并交给sequencer,后者把这个transaction交给driver,driver里的seq_item_port_item_done()会给Sequencer确认完成信号。相当二次握手
2、