当前位置: 首页 > news >正文

武汉洪山区做网站的公司安徽seo优化规则

武汉洪山区做网站的公司,安徽seo优化规则,2023年的毒株又来了,奶制品网站建设的需求分析目录1、加入base_test2、UVM中测试用例的启动1、加入base_test UVM使用的是一种树形结构,书中最初这棵树的树根是my_driver,后来由于要放置其他component,树根变成 了my_env。但在实际应用的UVM验证平台中my_env并不是树根,通常树…

目录

    • 1、加入base_test
    • 2、UVM中测试用例的启动


1、加入base_test

UVM使用的是一种树形结构,书中最初这棵树的树根是my_driver,后来由于要放置其他component,树根变成
了my_env。但在实际应用的UVM验证平台中my_env并不是树根,通常树根是一个基于uvm_test派生的类。先讲述base_test,真正的测试用例都是基于base_test派生的一个类

class base_test extends uvm_test; //派生自uvm_testmy_env env;function new(string name = "base_test", uvm_component parent = null);super.new(name, parent);endfunctionextern virtual function void buil_phase(uvm_phase phase);extern virtual function void repor_phase(uvm_phase phase);`uvm_component_utils(base_test) //component类
endclass
function void base_test::build_phase(uvm_phase phase);super.build_phase(phase);env = my_env::type_id::create("env", this);uvm_config_db#(uvm_object_wrapper)::set(this, "env.i_agt.sqr.main_phase","default_sequence", my_sequence::type_id::get());//设置sequencer的default_sequence,此处设置了以后其他地方不需要再设置default_sequence
endfunction
function void base_test::report_phase(uvm_phase phase); //在main_phase结束后执行uvm_report_server server;int err_num;super.report_phase(phase);server = get_report_server();err_num = server.get_serverity_count(UVM_ERROR);if(err_num != 0) begin //根据UVM_ERROR的数量打印不同信息$display("TEST CASE FAILED");endelse begin$display("TEST CASE PASSED");end
endfunction
  • 通常在base_test中做如下事情:第一,设置整个验证平台的超时退出时间;第二,通过config_db设置验证平台中某些参数的值。 这些根据不同的验证平台及不同的公司而不同,没有统一的答案。
  • 在把my_env放入base_test中之后,UVM树的层次结构如图所示::
  • top_tb中run_test的参数从my_env变成了base_test,并且config_db中设置virtual interface的路径参数要做如下改变:
initial beginrun_test("base_test");
end
intial beginuvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.drv", "vif", input_if);uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.mon", "vif", input_if);uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.o_agt.mon", "vif", output_if);
end

2、UVM中测试用例的启动

  • 测试DUT是否按照预期工作,需要对其施加不同的激励,这些激励称为测试向量或pattern。一种激励作为一个测试用例,不同激励就是不同的测试用例。测试用例的数量是衡量验证人员工作成果的最直接目标。
  • 伴随着验证的进行,测试用例的数量一直在增加,在增加的过程中重要的是保证后加的测试用例不影响已建的测试用例。前面通过设置default_sequence的形式启动my_sequence。假如存在my_sequence2,如何在不影响my_sequence的前提下将其启动:最理想的办法是在命令行中指定参数来启动不同的测试用例
  • 无论是在my_env中设置default_sequence,还是在base_test中或top_tb中设置,都必须修改相关的设置代码才能启动my_sequence2。为了解决这个问题,先看两个不同的测试用例。my_case0的定义如下:
class case0_sequence extends uvm_sequence #(my_transaction);my_transaction m_trans;...virtual task body();if(starting_phase != null)starting_phase.raise_objection(this);repeat(10) begin`uvm_do(m_trans)end#100;if(starting_phase != null)starting_phase.drop_objection(this);endtask...
endclass
class my_case0 extends base_test;function new(string name = "my_case0", uvm_componet parent = null);super.new(name, parent);endfunctionextern virtual function void build_phase(uvm_phase phase);`uvm_component_utils(my_case0)
endclass
function void my_case0::build_phase(uvm_phase phase);super.build_phase(phase);uvm_config_db#(uvm_object_wrapper)::set(this, "env.i_agt.sqr.main_phase","default_sequence", case0_sequence::type_id::get());
endfunction		

my_case1的定义如下:

class case1_sequence extends uvm_sequence #(my_transaction);my_transaction m_trans;...virtual task body();if(starting_phase != null)starting_phase.raise_objection(this);repeat(10) begin`uvm_do_with(m_trans, {m_trans.pload.size() == 60;}) //uvm_do系列宏的一个,随机化时提供对某些字段的约束end#100;if(starting_phase != null)starting_phase.drop_objection(this);endtask...
endclass
class my_case1 extends base_test;function new(string name = "my_case1", uvm_component parent = null);super.new(name, parent);endfunctionextern virtual function void build_phase(uvm_phase phase);`uvm_component_utils(my_cas1)
endclass
function void my_case1::build_phase(uvm_phase phase);super.build_phase(phase);uvm_config_db#(uvm_object_wrapper)::set(this, "env.i_agt_sqr.main_phase", "default_sequence", case1_sequence::type_id::get());
endfunction
  • 要启动my_case0,需要在top_tb中更改run_test的参数:(启动my_case1也同理)
initial beginrun_test("my_case0");
end

当my_case0运行的时候需要修改代码,重新编译后才能运行;当my_case1运行时也需如此,这相当不方便。UVM也提供对不加参数的run_test的支持:

initial beginrun_test();
end

在这种情况下,UVM会利用UVM_TEST_NAME从命令行中寻找测试用例的名字,创建它的实例并运行。下面代码可以启动my_case0:

<sim command> + UVM_TEST_NAME=my_case1

整个启动及执行的流程如图所示:
在这里插入图片描述
启动后,整棵UVM树的结构如图所示:与前面UVM树结构的唯一区别在于树根的类型从base_teset变成了my_casen。(书中应该打印错误,这里应该是my_case0)
在这里插入图片描述

http://www.lbrq.cn/news/2375479.html

相关文章:

  • 网站备案进度百度账号注册
  • 昆明公司做网站seo精准培训课程
  • 网站开发语安卓优化大师官方版本下载
  • 重庆技术网站建设网站内部链接优化方法
  • 网站建设行业解决方案新媒体口碑营销案例
  • 做海外正品代购的十个网站免费网站在线观看人数在哪
  • 专业做网站哪里有营销软文广告
  • 政府网站建设服务商最新舆情信息网
  • 怎么提高自己网站的知名度广州seo诊断
  • 郑州网站seo优化希爱力双效片用后感受
  • 做料理网站关键词怎么设置发布软文的平台
  • 上海自助建站 上海网站建设拉新推广赚钱的app
  • 找工作平台网站深圳互联网公司排行榜
  • 广告联盟没有网站怎么做廊坊关键词排名首页
  • 网站流量超seo外链发布软件
  • seo发展前景怎么样啊玉溪seo
  • 下城区网站建设价格查询seo百度快速排名
  • 化妆品网站源码asp北京中文seo
  • 网站的营销推广百度推广在哪里能看到
  • 全国做网站找哪家好网络广告策划案
  • 如何做网站支付链接今日军事新闻最新消息新闻报道
  • 嘉兴手机端建站模板seo服务外包客服
  • 成都用设计公司网站网络营销的优势有哪些?
  • 大家做网站都会去哪找素材关键词资源
  • 如何访问自己做的网站企业管理咨询培训
  • 做韦恩图的网站长春网站seo公司
  • 做网站如何不被忽悠公司网站设计与制作
  • 厦门网站免费制作seo内部优化方式包括
  • 做界面的网站苏州百度关键词优化
  • 如何做网站地图txt海口seo计费
  • SVN使用过程中的几个疑问与解答
  • C++ :vector的介绍和使用
  • 产品经理如何绘制流程图
  • 【JVM】深入理解 JVM 类加载器
  • 摩尔投票法:高效寻找数组中的多数元素
  • 大语言模型任务分解与汇总:从认知瓶颈到系统化解决方案