广州网站推广电话,login to view all v2.0 wordpress,北京市网页设计,网站侧面的虚浮代码在SystemVerilog和UVM验证环境中#xff0c;run_test() 是启动UVM仿真流程的核心函数。它负责初始化UVM框架、创建测试用例实例#xff0c;并触发UVM的Phase机制来执行验证环境的构建和运行
1. run_test() 的作用
run_test() 是UVM提供的内置函数#xff0c;定义在UVM库中… 在SystemVerilog和UVM验证环境中run_test() 是启动UVM仿真流程的核心函数。它负责初始化UVM框架、创建测试用例实例并触发UVM的Phase机制来执行验证环境的构建和运行
1. run_test() 的作用
run_test() 是UVM提供的内置函数定义在UVM库中uvm_root.svh主要功能如下 初始化UVM根对象uvm_root启动全局Phase流程。 根据参数动态创建测试用例实例通过UVM工厂机制。 根据指定的测试用例名称通过参数或命令行使用 UVM 的工厂机制创建相应的测试用例对象。 触发UVM各阶段的执行如 build_phase、connect_phase、run_phase 等。 测试用例对象会调用 build_phase 方法在这个阶段会创建并配置验证环境中的各个组件如激励发生器Sequencer、驱动器Driver、监测器Monitor、计分板Scoreboard等。 结束仿真当所有阶段执行完毕后仿真结束。
2. run_test() 的调用位置
通常在顶层模块top的 initial 块中调用位于DUT实例化和时钟/复位生成之后
module top;// 时钟和复位生成initial beginclk 0;forever #5 clk ~clk;rst 1;#10 rst 0;end// DUT实例化dut u_dut(.clk(clk), ...);// UVM启动initial begin// 配置接口到uvm_config_db可选uvm_config_db#(virtual dut_if)::set(null, *, dut_vif, dut_if_inst);// 启动测试用例run_test(my_test_case);end
endmodule
3. run_test() 的执行流程
(1) 初始化UVM根对象 创建 uvm_root 单例 UVM通过 uvm_root::get() 获取全局根对象负责管理所有UVM组件和Phase调度。
(2) 动态创建测试用例 工厂模式Factory run_test(my_test_case) 中的字符串参数对应一个已注册的测试用例类。 UVM工厂根据该名称创建测试用例实例my_test_case 必须通过 uvm_component_utils 宏注册。 class my_test_case extends uvm_test;uvm_component_utils(my_test_case) // 注册到工厂...
endclass
(3) 启动Phase机制 自顶向下执行Phase run_test() 触发UVM的Phase流程从根对象uvm_root开始递归调用所有组件的Phase方法 build_phase创建子组件并配置参数。 connect_phase连接TLM端口和分析端口。 end_of_elaboration_phase验证环境构建完成后的最终检查。 start_of_simulation_phase仿真开始前的初始化操作。 run_phase启动激励生成、监测和检查并行执行。 run_phase 结束run_phase 是执行实际测试逻辑的主要阶段当 run_phase 中的所有任务都完成后该阶段结束。通常测试用例中的激励生成、数据监测等操作都在这个阶段完成。后续清理阶段执行run_phase 结束后会依次执行后续的清理阶段。例如extract_phase 用于提取测试结果数据check_phase 用于检查测试结果是否符合预期report_phase 用于生成测试报告。验证环境结束当所有阶段都执行完毕后验证环境结束仿真也随之停止。