欢迎光临
我们一直在努力

UVM中的Scoreboard设计:从简单比较到复杂参考模型的完整指南

UVM中的Scoreboard设计:从简单比较到复杂参考模型

摘要

Scoreboard(记分板)是UVM验证环境的核心组件,负责比较DUT的实际输出与参考模型的预期输出。一个设计良好的Scoreboard是验证环境质量的重要体现。本文将从简单的数据比较出发,逐步介绍如何构建复杂的参考模型。

1. Scoreboard的基本架构

Driver -> DUT -> Monitor -> Scoreboard
^
Reference Model ————|

Scoreboard通常通过uvm_analysis_imp接收来自Monitor的数据,并与参考模型的输出进行比对。

2. 简单Scoreboard实现

class simple_scoreboard extends uvm_scoreboard;
`uvm_component_utils(simple_scoreboard)

// 接收DUT输出的分析端口
uvm_analysis_imp #(packet, simple_scoreboard) analysis_export;

// 存储期望值的队列
packet exp_queue[$];

function void write(packet pkt);
packet exp_pkt;
if (exp_queue.size() == 0) begin
`uvm_error("SCB", "Unexpected transaction received!")
return;
end
exp_pkt = exp_queue.pop_front();
if (pkt.data !== exp_pkt.data) begin
`uvm_error("SCB", $sformatf(
"Data mismatch! Got: %0h, Expected: %0h",
pkt.data, exp_pkt.data))
end else begin
`uvm_info("SCB", "Transaction PASSED", UVM_HIGH)
end
endfunction
endclass

3. 带参考模型的Scoreboard

对于复杂设计,需要在Scoreboard内部实现参考模型(Reference Model):

class adder_scoreboard extends uvm_scoreboard;
// 两个输入端口
uvm_analysis_imp_a #(operand_t, adder_scoreboard) imp_a;
uvm_analysis_imp_b #(operand_t, adder_scoreboard) imp_b;
// 一个输出端口
uvm_analysis_imp_out #(result_t, adder_scoreboard) imp_out;

operand_t op_a_queue[$];
operand_t op_b_queue[$];

// 参考模型:计算期望结果
function void write_out(result_t result);
operand_t a, b;
result_t expected;
a = op_a_queue.pop_front();
b = op_b_queue.pop_front();
expected.sum = a.value + b.value; // 参考模型逻辑
if (result.sum !== expected.sum)
`uvm_error("SCB", "Adder result mismatch!")
endfunction
endclass

4. Scoreboard设计最佳实践

实践说明
使用TLM端口 通过uvm_analysis_imp解耦Monitor与Scoreboard
错误统计 记录pass/fail数量,在report_phase中汇总
超时检测 检查期望队列是否长期非空,防止数据丢失
参考模型分离 将参考模型逻辑封装为独立类,提高可维护性

结论

Scoreboard是验证环境的"裁判",其设计质量直接决定验证的有效性。从简单的队列比较到复杂的参考模型,工程师需要根据DUT的复杂度选择合适的Scoreboard架构。


欢迎关注我的个人网站:www.bcbao.club

B站: bc宝懂一点IC

赞(0)
未经允许不得转载:171主机测评 » UVM中的Scoreboard设计:从简单比较到复杂参考模型的完整指南
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址