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

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

日志

SVTB-factory

已有 241 次阅读| 2016-6-8 20:12 |个人分类:验证杂谈


svm_factory.sv
===========================================

virtual class svm_object;
endclass

===========================================
class svm_component extends svm_object;
    string name;
    
   function new(string name)
      this.name = name;
  endfuction

  virtual task run_test();
  endtask

endclass
===========================================

class svm_object_wrapper;
  pure virtual function string get_type_name();
  pure virtual function svm_object create_object(string name);
endclass

class svm_component_registry #(type T = int,  string Tname = "<unkown>") extends svm_object_wrapper;
     typedef svm_component_registry#(T,Tname) this_type;

    static this_type me = get();
    static function this_type get();
           if (me == null)  me = new();
           svm_factory f = new();
           f.register(me);
          return me;
    endfunction

     function string get_type_name();
            return  Tname;
     endfuction

     function svm_object create_obj(string name );
            T obj;  
           obj = new();
           return obj
    endfunction


endclass

===========================================
class svm_factory;
   static svm_object_wrapper m_type_name[string];
   static svm_factory m_inst;

    static  function svm_factory get();
          if (m_inst == null)  m_inst = new();
    endfuction

    static function void register(svm_object_wrapper c);
           m_type_name[c.get_type_name()] = c;
     endfucntion

    static function svm_object  get_test_name(string tname = "");
            string name;
            svm_component   temp_comp;
            svm_object_wrapper  sow;
            if(!$value$plusarg("+TESTNAME=%s",name)) begin
                $display(" +TESTNAME NOT FOUND");
                if(testname == "")
                    $finish();
                else
                  name = tname;
           end
           sow = m_type_name[name];
           $cast(temp_comp, sow.create_object(sow.get_type_name()));
           return temp_comp;
    endfunction

endclass
===========================================

点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 8

    获赞
  • 34

    评论
  • 访问数
关闭

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

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

GMT+8, 2024-4-27 04:00 , Processed in 0.021354 second(s), 11 queries , Gzip On, Redis On.

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