码迷,mamicode.com
首页 > 其他好文 > 详细

UVM中的dirver组件

时间:2015-05-08 16:25:15      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

一般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函数,再无其他。

 

相应的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的执行之间的关系是如何的。

UVM中的dirver组件

标签:

原文地址:http://www.cnblogs.com/-9-8/p/4487881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!