问题一:数字IC验证流程是什么?
1、阅读设计Specification
清楚需要验证的东西
2、编写验证工作的指导性文件 -- 验证计划(重点)
提取验证功能点,明确接口文件,明确DUT接口信号,TB的结构,检查点,功能覆盖率,测试用例规划,验证工作结束的标准。
3、搭建TB(重点)
依据验证计划搭建TB,Debug,调通第一个demo testcase
4、编写测试用例(重点)
依据验证计划编写测试用例。主要的验证阶段,验证RTL每个功能点。TB/RTL Debug
5、起Regression
周期性的起Regression(回归测试)。为随机测试案例提供不同的seed。
6、分析代码/功能覆盖率
分析覆盖率,新增测试用例
7、测试报告
覆盖率报告,测试用例结果(pass/fail),覆盖率结果。
问题二:uvm的phase是如何自动运行起来的?
从build_phase到最后的finial_phase,自动运行会经过一下几个主要步骤:
1、再tb_top.sv中的某个地方调用run_test(),这个函数再uvm_root.sv中,是整个tb树形结构的根节点,整个函数主要干三件事:
(1) 通过factory模式create你自己希望运行的testcase instance,不管你的testcase叫什么,最后uvm都会给他重命名为”uvm_test_top“
(2) 调用uvm_phase的一个函数,叫做m_uvm_phase()。
(3) 等待m_uvm_phase()函数调用结束,kill所有和此函数有关的进程,如果允许则调用$finish结束仿真进程,退出仿真器。
2、m_uvm_phase()主要工作:
(1) 创建uvm默认的所有phase,即build_phase ... finial_phase等,并将其组织成实际的有向图结构;实现这一步主要靠调用uvm_domain class中的get_common_domian().
(2) 开始运行(1)中创建组织好的phase,当然如果有用户自定义的phase,也会在规定的时间点运行起来;实现这一步主要是靠调用对应的phase的execute_phase()函数和一个无线循环的监控进程。
3、uvm_domian中的get_common_domain()主要干三件事:
(1) 创建phase有向图结果的第一部分,即build->connent->end_of_elab