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

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

日志

Testbench/Factory(从Factory Coding Convention 2: Constructor Defaults开始)

已有 760 次阅读| 2018-9-19 15:11 |系统分类:芯片设计

         Factory Coding Convention 2: Constructor Defaults

      uvm_component和uvm_object构造函数是virtual methods,这意味着用户必须遵循其原型模板。为了在build phase期间支持延迟构造,factory构造函数应该包含构造函数参数的默认值。这允许使用默认值在factory内部构建factory注册类,然后将类属性重新分配给通过uvm_component_registry包装类的create method传递的参数。 components and objects的默认值不同:

        // For a component:
        class my_component extends uvm_component;

        function new(string name = "my_component", uvm_component parent = null);
             super.new(name, parent);
        endfunction

        // For an object
        class my_item extends uvm_sequence_item;

        function new(string name = "my_item");
             super.new(name);
        endfunction

        Factory Coding Convention 3: Component and Object creation

       使用uvm_component_registry的create method在build phase期间创建测试平台组件。首先构造该类,然后在正确分配名称和父参数后,将指针指向该类的指针到其测试平台中的声明句柄。对于components来说,构建过程是自上而下的,它允许更高层次的组件和配置来控制实际构建的内容。
        根据需要创建object类,同样使用create method。
        以下代码片段说明了如何完成此操作:

        class env extends uvm_env;

        my_component m_my_component;
        my_param_component #(.ADDR_WIDTH(32), .DATA_WIDTH(32)) m_my_p_component;

        // Constructor & registration macro left out

        // Component and Parameterized Component create examples
        function void build_phase( uvm_phase phase );
              m_my_component = my_component::type_id::create("m_my_component", this);
               m_my_p_component = my_param_component #(32, 32)::type_id::create("m_my_p_component", this);
        endfunction: build

        task run_phase( uvm_phase phase );
             my_seq test_seq;
             my_param_seq #(.ADDR_WIDTH(32), .DATA_WIDTH(32)) p_test_seq;

             // Object and parameterised ojbect create examples
             test_seq = my_seq::type_id::create("test_seq");
             p_test_seq = my_param_seq #(32,32)::type_id::create("p_test_seq");
             //....
         endtask: run【应该是笔误:应为"endtask: run_phase"】


点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 访问数
关闭

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

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

GMT+8, 2024-4-25 01:54 , Processed in 0.033853 second(s), 18 queries , Gzip On, Redis On.

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