注册 登录
ET创芯网论坛(EETOP) 返回首页

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

日志

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

已有 443 次阅读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

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

关闭

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

小黑屋|手机版|Archiver|ET创芯网 ( 京ICP备:10050787号 京公网安备:110105001212 )

GMT+8, 2019-4-26 22:19 , Processed in 0.027448 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部