美文网首页
UVM---seq/sqr/driver

UVM---seq/sqr/driver

作者: li_li_li_1202 | 来源:发表于2022-02-18 16:42 被阅读0次

    UVM的seq/sqr/driver是紧密相连的,从user的角度来看,有一套common的模板,user就只管用就行了。
    很多时候,我就只是只知道怎么用,并不清楚里面的实现机制,一旦出现不常见的bug时,就只能干瞪眼,所以作为一名IC验证工程师是十分有必要了解一下源码的。
    TLM相关的东西,我们先不详细讲解。

    公共模板

    driver
    • seq_item_port.get_next_item(req):向seqr发送请求seq
    • rsp/req都是在uvm_sequence里面已经定义好的
    • rsp.set_id_info(req):设置对应的id信息
    • seq_item_port.put_response(rsp):将rsp传递给seq
    • seq_item_port.item_done():表示发送完成
    seq
    • get_response(rsp):获得从driver传送的rsp


      top connect
    • 在顶层将drv.seq_item_port与sqr.seq_item_export连接起来

    response handler 的使用

    在driver中的put_response与seq中的get_response是成对存在的,也就是说,seq中要get driver中的put,是阻塞的。


    • put_response会response_queue.push_back
    • get_response会response_queue.pop_front,如果队列为空的话,就会一直等待,从而是阻塞的。

    可以使用response handler来处理这种阻塞问题。response handler实际上是只调用了driver一侧的put_response,但是在seq一侧又预留了接口,用于处理response。

    • driver中照样进行put_response,但是在seq中不用get_response,而是使用response_handler.
    • response_handler的调用是在put_response中由driver调起来,调到seq中实现的,所以就没有get_response,但是在seq一段又能看到driver来的response。这样的会就没有了阻塞的问题

    前面我们说过,seq的启动的方式,有三种,但其实他们的本质上都是调用了uvm_sequence_item的start函数,start函数里面的body()task就是一个callback函数。所以user在应用的时候,都会在body里面进行重写。

    相关文章

      网友评论

          本文标题:UVM---seq/sqr/driver

          本文链接:https://www.haomeiwen.com/subject/iijdlrtx.html