SystemVerilog的UVM学习(三)
forever begin
f_sbd_cmp_finished = $fopen("sbd_cmp_finished","r");
if(0==f_sbd_cmp_finished)begin
`uvm_info("cas_scoreboard","Waiting for sbd compare",UVM_LOW);
end
else begin
`uvm_info("cas_scoreboard","All the test results have been compared",UVM_LOW);
$fclose(f_sbd_cmp_finished);
break;
end
end
phase.drop_objection(this);
分析一下:
这段代码是用来实现 等待文件状态 的功能,直到文件 sbd_cmp_finished 被正确写入,并且所有测试结果完成比较。该代码还与 UVM 测试框架中的 阶段管理 (通过 drop_objection)相关。下面是逐行的详细分析:
1. forever begin ... end 循环结构
forever begin
forever是一个 无限循环,意味着程序会一直在这个循环内执行,直到显式调用break语句退出循环。- 这个循环的目的是不断检查
sbd_cmp_finished文件是否存在,直到文件中的比较结果完成。
2. 打开文件 sbd_cmp_finished
f_sbd_cmp_finished = $fopen("sbd_cmp_finished","r");
$fopen("sbd_cmp_finished","r")是 SystemVerilog 的文件操作系统任务,用于以 只读模式 ("r") 打开文件sbd_cmp_finished。f_sbd_cmp_finished是一个文件描述符,用于在后续文件操作中引用文件。$fopen返回文件描述符,如果文件无法打开,会返回0。
3. 检查文件是否成功打开
if(0==f_sbd_cmp_finished)begin
`uvm_info("cas_scoreboard","Waiting for sbd compare",UVM_LOW);
end
-
if(0==f_sbd_cmp_finished):检查 文件是否成功打开。如果f_sbd_cmp_finished等于0,则说明文件打开失败,可能是文件还没有生成或无法访问。- 如果文件没有打开,说明比较还没有完成。
-
uvm_info("cas_scoreboard","Waiting for sbd compare",UVM_LOW):输出一条 UVM 信息,表示 正在等待文件完成比较。"cas_scoreboard"是信息的标识符,"Waiting for sbd compare"是消息内容,UVM_LOW表示这是一个 低优先级的信息,适用于开发调试阶段。
4. 文件成功打开,表示比较完成
else begin
`uvm_info("cas_scoreboard","All the test results have been compared",UVM_LOW);
$fclose(f_sbd_cmp_finished);
break;
end
else:如果f_sbd_cmp_finished不为0,即文件成功打开,说明文件中保存的比较结果已经完成。uvm_info("cas_scoreboard","All the test results have been compared",UVM_LOW):输出一条 UVM 信息,表示 所有的测试结果已经比较完成。这条信息帮助开发人员确认比较工作已经完成。$fclose(f_sbd_cmp_finished);:关闭文件,释放文件资源。break;:退出forever循环,因为比较已经完成,不再需要继续检查文件。
5. phase.drop_objection(this);
phase.drop_objection(this);
-
phase.drop_objection(this)是 UVM 中的一个方法,用来通知 UVM 阶段管理器,当前阶段(run_phase)已经完成,可以结束该阶段。phase是当前阶段的对象,drop_objection表示 放弃对当前阶段的阻止,允许阶段的结束。this:表示当前对象(fpu_add_test),this被传递给phase.drop_objection,表示当前组件已经完成其任务,允许该阶段结束。
6. 总结:
这段代码实现了以下几个功能:
- 等待文件
sbd_cmp_finished的生成:通过不断检查文件是否成功打开,等待文件生成并表示比较结果已完成。 - 输出调试信息:在文件未打开时,输出 "等待比较",在文件打开并比较完成后,输出 "所有测试结果已比较"。
- 关闭文件:当文件成功打开后,关闭文件资源。
- 结束阶段:通过
phase.drop_objection(this),告知 UVM 当前阶段的工作已完成,可以结束该阶段。
这种结构在测试中常用于 同步等待某些外部操作(如文件写入、外部信号等) 的完成,确保测试执行按正确的顺序进行。

浙公网安备 33010602011771号