zoukankan      html  css  js  c++  java
  • UVM中的driver组件

    一般UVM环境中的Driver组件,派生自uvm_driver。

    uvm_dirver派生自uvm_component。  

              class  uvm_driver #(type REQ = uvm_sequence_item, type RSP = REQ)  extends uvm_component

    其中定义了两个Ports:seq_item_port,driver一般用这个接口向sequencer索要sequence。

                                  rsp_port,driver向相应的sequencer发送response。

    还有一个new函数,再无其他。

    driver内部通过调用get函数来向sequencer索要transaction

    相应的uvm_sequencer,派生自uvm_sequencer_param_base,继而派生自uvm_sequencer_base。

        class  uvm_sequencer #(type REQ=uvm_sequence_item, RSP=REQ)  extends uvm_sequencer_param_base (#REQ,RSP)

    定义有一个seq_item_export。提供访问这个sequencer的接口实现。

        uvm_seq_item_pull_imp #(REQ,RSP,this_type)  seq_item_export

    其中接口的类型是uvm_sqr_if_base #(REQ,RSP)。

    它实现的方法有:get_next_item/try_next_item,先在该sequencer中选择优先级最高的sequence,然后该sequence wait_for_grant,

                                                                        然后uvm_sequence_base::pre_do,randomized,post_do。

                           item_done,一旦上一个task被调用,那这个task也必须被调用。表示一个sequence结束,fifo可以移出。

    Driver中在得到sequence后,需要将sequence变为DUT能够接收的信号类型。

    在agent中必须在connect_phase中,连接driver.seq_item_port.connect(sequencer.seq_item_export)。所以sequence在执行时

            必须指定sequencer,而sequencer又与driver相连接在一起,最终完成向DUT发送transaction的目的。当然对于很简单的

             transaction也可以直接在sequence中就向DUT发送信号。

    不过有一个疑惑的地方,sequence中的task body()与sequencer的seq_item_port的执行之间的关系是如何的。

           答:sequence body主要完成transaction的create/random/send,之后的transaction才会发送给driver

                 sequencer会更根据poriority,phase,connect来调用正确的sequence给driver。

  • 相关阅读:
    RHEL简单管理SELINUX
    CentOS配置samba服务
    CentOS中配置NFS服务
    CentOS里route命令详解
    Linux 进程管理之四大名捕
    编辑器之神-VIM
    纠结的链接——ln、ln -s、fs.symlink、require
    History(历史)命令用法 15 例
    备份MySQL数据库
    MySQL 资源大全
  • 原文地址:https://www.cnblogs.com/-9-8/p/4487881.html
Copyright © 2011-2022 走看看