uvm pre_abort when fatal exit

本文深入探讨了UVMpre_abort()函数的作用与实现。此函数在UVM_EXIT前调用,如遇到致命错误时触发。文章详细解释了如何通过调用extract和report函数来确保在测试结束时(尤其是当测试以UVM_FATAL状态结束时),能够打印出scoreboard的状态,从而帮助开发者更好地理解错误原因。

   // UVM pre_abort() : Called prior to UVM_EXIT, e.g. when a fatal occurs
   //
   virtual function void pre_abort();
      // Call extract and report so that the state of the scoreboard is printed
      // if the test ends with a UVM_FATAL
      do_check();
      do_report;
   endfunction
UVM(Universal Verification Methodology)中,验证平台的执行顺序是由各个phase(阶段)管理的。对于测试平台中的`pre_start`和`pre_body`方法,其执行顺序如下: `pre_start`方法在`pre_body`之前执行。具体来说,当一个序列(sequence)被启动时,UVM框架会首先调用`pre_start`方法,然后执行`pre_body`方法,接着是`body`方法,最后是`post_body`和`post_start`方法[^3]。这种顺序确保了在执行主要的激励生成逻辑(即`body`方法)之前,所有的准备工作(如资源分配、配置设置等)已经完成。 以下是一个简单的代码示例,展示了`pre_start`和`pre_body`的执行顺序: ```systemverilog class my_sequence extends uvm_sequence; `uvm_object_utils(my_sequence) function new(string name = "my_sequence"); super.new(name); endfunction virtual task pre_start(); `uvm_info("SEQ", "Executing pre_start", UVM_LOW) endtask virtual task pre_body(); `uvm_info("SEQ", "Executing pre_body", UVM_LOW) endtask virtual task body(); `uvm_info("SEQ", "Executing body", UVM_LOW) endtask virtual task post_body(); `uvm_info("SEQ", "Executing post_body", UVM_LOW) endtask virtual task post_start(); `uvm_info("SEQ", "Executing post_start", UVM_LOW) endtask endclass ``` 在上述代码中,当`my_sequence`被启动时,控制台将按照以下顺序输出信息: 1. `Executing pre_start` 2. `Executing pre_body` 3. `Executing body` 4. `Executing post_body` 5. `Executing post_start`[^4] 这种执行顺序确保了在进入`body`之前,所有的准备工作已经完成,从而保证了测试平台的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值