网站建设 响应式,软件开发培训,江西 网站制作,公司网页设计流程10-1 phase:basic UVM测试平台层次结构与Phase执行顺序解析
这个案例和上一篇10-1基本类似,可以跳过,区别是这个案例少了上篇很奇怪的AA类的中间层 文章目录 ✅ 区别总结:代码1 与 代码2 的核心差异 UVM Phase执行顺序的准确解析:组件层次结构对执行顺序的影响 一、核心问…10-1 phase:basic UVM测试平台层次结构与Phase执行顺序解析这个案例和上一篇10-1基本类似,可以跳过,区别是这个案例少了上篇很奇怪的AA类的中间层文章目录✅ 区别总结:代码1 与 代码2 的核心差异UVM Phase执行顺序的准确解析:组件层次结构对执行顺序的影响一、核心问题:组件层次结构如何影响UVM Phase执行顺序二、关键代码差异:中间组件AA的有无代码1(包含多余中间组件AA):代码2(直接使用A组件,无多余中间层次):三、组件层次结构对比代码1的层次结构(包含AA中间组件):代码2的层次结构(直接使用A组件):四、执行顺序对比代码1的`build_phase`执行顺序(自底向上):代码2的`build_phase`执行顺序(自底向上):五、仿真日志对比代码1的build_phase日志:代码2的build_phase日志:六、关键分析:为什么这个差异很重要?1. UVM核心机制:自底向上执行顺序2. 日志输出顺序与执行顺序的混淆3. 为什么代码1中的AA是多余的?七、UVM最佳实践:组件层次结构设计✅ 正确做法(代码2风格):❌ 错误做法(代码1风格):八、UVM设计哲学:为什么需要自底向上执行?代码1的错误示例(如果在AA中访问a):九、UVM Phase执行顺序的权威验证十、结论:组件层次结构是UVM设计的核心十一、UVM最佳实践建议✅ 正确设计组件层次结构❌ 错误设计(避免)十二、总结基于上一篇代码小修一下,这里将上一篇代码简称为1,修改后为2module top;import uvm_pkg::*;//Create a topology// top// | |// u1(A) u2(A)// | | | |// b1(B) d1(D) b1(B) d1(D)//No run phaseclassDextends uvm_component;functionnew(string name,uvm_component parent);super.new(name,parent);endfunction functionvoidbuild_phase(uvm_phase phase);$display("%0t: %0s: build",$time,get_full_name());endfunction functionvoidend_of_elaboration_phase(uvm_phase phase);$display("%0t: %0s: end_of_elaboration",$time,get_full_name());endfunction functionvoidstart_of_simulation_phase(uvm_phase phase);$display("%0t: %0s: start_of_simulation",$time,get_full_name());endfunction functionvoidextract_phase(uvm_phase phase);$display("%0t: %0s: extract",$time,get_full_name());endfunction functionvoidcheck_phase(uvm_phase phase);$display("%0t: %0s: check",$time,get_full_name());endfunction functionvoidreport_phase(uvm_phase phase);$display("%0t: %0s: report",$time,get_full_name());endfunction endclass//Has run phaseclassBextends uvm_component;rand logic[7:0]delay;functionnew(string name,uvm_component parent);super.new(name,parent);endfunction functionvoidbuild_phase(uvm_phase phase);$display("%0t: %0s: build",$time,get_full_name());endfunction functionvoidend_of_elaboration_phase(uvm_phase phase);$display("%0t: %0s: end_of_elaboration",$time,get_full_name());endfunction functionvoidstart_of_simulation_phase(uvm_phase phase);$display("%0t: %0s: start_of_simulation",$time,get_full_name());endfunction functionvoidextract_phase(uvm_phase phase);$display("%0t: %0s: extract",$time,get_full_name());endfunction functionvoidcheck_phase(uvm_phase phase);$display("%0t: %0s: check",