ee_king的个人空间 https://blog.eetop.cn/1494617 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Connections to DUT Interfaces(从Connect/TwoKingdomsFactory开始_2)

已有 792 次阅读| 2018-9-28 08:42 |系统分类:芯片设计

        Connecting the testbench to the DUT

       【此处需一幅图】

       在wishbone包装器中,为基类driver创建派生的concrete class driver的实例重载。请注意,此示例中的代码设置为处理wishbone总线包装器的多个实例(因此还有多个DUT),这是使用WB_ID参数来统一实例重载的原因。此参数在top_mac模块中设置。

        module top_mac;

               wb_bus_wrapper #(0) wb_bus_0();
               ...

        endmodule

        module wb_bus_wrapper #(int WB_ID = 0);
        ...

               // Concrete driver class
               class wb_bus_bfm_driver_c #(int ID = WB_ID) extends wb_bus_bfm_driver_base;
                    ...
               endclass

                initial begin
                    //set inst override of concrete bfm driver for base bfm driver
                    wb_bus_bfm_driver_base::type_id::set_inst_override(
                          wb_bus_bfm_driver_c #(WB_ID)::get_type(),
                          $sformatf("*env_%0d*", WB_ID));
                    ...
                end

        endmodule

        【此处需一幅图】

       在testbench中的wishbone agent中,声明了一个基类driver句柄。当它由factory创建时,重载将生效,并且将创建派生的concrete class driver object。作为此object的Verilog域来说,此对象包含的wishbone总线包装器及其Verilog路径将指示它位于top_mac(wb_bus_0)内部创建的wishbone总线包装器实例内。从UVM的角度来看,该对象是wishbone agent的UVM分层子代(不是子类,仅仅是agent包含了此object),其ports连接到wishbone agent中的ports。

       class wb_master_agent extends uvm_agent;
       ...
            //ports
            uvm_analysis_port #(wb_txn) wb_agent_drv_ap;
            ...
            // components
            wb_bus_bfm_driver_base wb_drv;
            wb_config m_config;
            ...
            function void build_phase(uvm_phase phase);
                 super.build_phase(phase);
                 if (!uvm_config_db #(wb_config)::get(this, "", "wb_config", m_config)) // get config object
                     `uvm_fatal("Config Fatal", "Can't get the wb_config")
                 //ports
                 wb_agent_drv_ap = new("wb_agent_drv_ap", this);
                 ...
                 //components
                 wb_drv = wb_bus_bfm_driver_base::type_id::create("wb_drv", this); // driver
                 ...
            endfunction : build_phase

            function void connect_phase(uvm_phase phase);
                 super.connect_phase(phase);
                 //analysis ports
                 wb_drv.wb_drv_ap.connect(wb_agent_drv_ap);
                 ...
                 // child ports
                 wb_drv.seq_item_port.connect(wb_seqr.seq_item_export);
            endfunction : connect_phase

            function void end_of_elaboration_phase(uvm_phase phase);
                 wb_drv.m_id = m_config.m_wb_master_id;
                 ...
            endfunction : end_of_elaboration_phase
      endclass

      (在http://verificationacademy.com/uvm-ovm上在线下载源代码示例)。



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 20:19 , Processed in 0.033737 second(s), 18 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部