| |
学习UVM基础知识,面向对象设计思想OOP,可以增加重用性,多态性,扩展性。对于OOP的概念需要花时间理解和实践。
UVM Overview。验证平台组建:testbench、component、env。验证方法论:function coverage、random env,满足全面、快速测试。在不修改testbench情况下,通过修改testcase的方式以提高测试灵活性和效率。分层测试的思想:分三级block level、IP level、Soc level。
UVM基本元素component(ovm_object、component、agent、test、sequencer等)、元素间链接communication、元素间传输数据data。
UVM规定元素运行顺序phase:build、connect、endif、startof、run、extract、check...。runtest是平台执行入口,用于找到工程中的test并执行。runtest执行时在工厂中找到想要运行的testcase,testcase要注册到工厂中。runtest执行可以通过+UVM_TESTNAME传递需要测试的test,test_name要提前注册到工厂中。runtest可以看到import进来的UVM_PKG的所有信息。phase执行顺序,是通过父子关系决定的,不是指类的父子关系,而是module包含关系,是引用与显性的定义。build时是自上而下的顺序,主要原因是,上层要替换底层组件,同时梳理出结构。run操作是并行执行的,其他phase从下而上运行,因为经过build阶段,上层清晰知道下层信息,所以可以自底而上运行。build时替换的操作与好处:上层执行set_inst_override_bytype宏,可以再顶层搜寻工厂中的组件,用于替换底层某组件。举个具体例子,设计时可以设计多个driver(正常或异常的处理),在某个testcase组件中,就可以调用异常driver实现测试异常用例,而不需要修改平台或env,灵活性重用性强。
UVM TLM:基于事务传输,通过fuction:get/put用于组件间通信。
Transaction class:这个类无phase概念,也需要注册到工厂。sequence:即sequence item。sequncer、driver、agent(passive仅打开monitor、active打开driver和monitor)、env、testclass。
UVM 中report/filter功能,开发时将打印加好,可以通过UVM_MEDIUM设置HIGH、LOW、DEBUG,选择过滤打印条件,确定打印信息层次。这是debug的灵活性。