Checker UVM cho bộ cộng 8 bit
Class cần viết: adder_checker · cần máy chấm có UVM · 7 case (2 mẫu) · giới hạn 15 s/case · ~25 phút
Trong một môi trường UVM, monitor quan sát bộ cộng 8 bit và gửi mỗi phép cộng ra analysis port dưới dạng adder_txn. Bạn viết checker, tức subscriber nhận giao dịch, để quyết định DUT tính đúng hay sai.
Package adder_pkg cho sẵn (đã import vào code của bạn):
class adder_txn extends uvm_sequence_item;
bit [7:0] a, b; // hai toán hạng đưa vào DUT
bit [8:0] sum; // tổng DUT trả về, 9 bit (bit 8 là nhớ)
...
function string convert2string(); // "a=.. b=.. sum=.."
endclass
Yêu cầu
Viết class adder_checker extends uvm_subscriber #(adder_txn):
| Thành phần | Yêu cầu |
|---|---|
| Đăng ký factory | `uvm_component_utils(adder_checker). Testbench tạo checker bằng adder_checker::type_id::create("chk", null) |
int unsigned n_pass, n_fail |
số giao dịch DUT tính đúng / sai |
function void write(adder_txn t) |
giao dịch đúng khi t.sum bằng a + b tính đủ 9 bit. Đúng thì tăng n_pass; sai thì tăng n_fail và báo `uvm_error("ADDER", <thông điệp>) |
Giao dịch đúng không được sinh UVM_WARNING hay UVM_ERROR.
Testbench kiểm gì
Testbench gọi chk.analysis_export.write(t) cho từng giao dịch, rồi so:
n_pass/n_failvới mô hình tham chiếu của nó;- số
UVM_ERRORvà số báo cáo mang id"ADDER", đếm quauvm_report_server.
Case mẫu:
| Case | Giao dịch (a, b → sum DUT trả) | Mong đợi |
|---|---|---|
| 1 | (1,2→3) (10,20→30) (0,7→7) (100,27→127) (64,63→127) | n_pass = 5, n_fail = 0, 0 UVM_ERROR |
| 2 | (1,2→3) (3,4→8) (5,5→10) (9,9→18) (40,2→42) | n_pass = 4, n_fail = 1, 1 UVM_ERROR |
Case ẩn có phép cộng có nhớ, giá trị biên 0/255, DUT mất bit nhớ, 400 giao dịch ngẫu nhiên, và kiểm id của báo cáo.
Luật bài nộp
- Code được đặt bên trong một package đã có sẵn
import uvm_pkg::*;,`include "uvm_macros.svh"vàimport adder_pkg::*;. - Chỉ viết class: không khai báo
modulehaypackage, không dùng`timescale,`includehay DPI.
Đề này cần máy chấm có engine UVM. Một lượt chấm đề UVM lâu hơn đề thường (từ vài giây tới vài phút) vì phải biên dịch cùng testbench UVM.
Các case
- 5 giao dịch đúng, không có nhớmẫu
- 1 giao dịch sai trong 5mẫu
Cùng 5 case ẩn kiểm các yêu cầu còn lại của đề. Case ẩn chỉ báo đúng/sai, không nói chi tiết: tự tìm chỗ sai từ đề, hoặc mở gợi ý.
Testbench có mô hình tham chiếu riêng, độc lập với lời giải mẫu. Lời giải mẫu đã chạy qua mọi case trên simulator thật, và 3 bản lỗi mẫu đều bị ít nhất một case bắt. Case mẫu sai sẽ cho biết chỗ sai đầu tiên (giá trị mong đợi so với giá trị nhận được); case ẩn chỉ báo đúng/sai.