Vừa

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

uvmsubscribercheckerreportingfactory

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_fail với mô hình tham chiếu của nó;
  • số UVM_ERROR và số báo cáo mang id "ADDER", đếm qua uvm_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 module hay package, không dùng `timescale, `include hay 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

  1. 5 giao dịch đúng, không có nhớmẫu
  2. 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.

Đang kết nối máy chấm…
Đang nạp bản nháp…

Tab để thụt lề. Nhấn Esc rồi Tab để rời trình soạn. Bản nháp tự lưu trong trình duyệt.

Gợi ý

Mỗi gợi ý mở trước khi AC giảm 10% điểm của đề.

Lời giải và phân tích

Lịch sử nộp bài

Chưa có lượt nào.

Độ khó: Vừa. Điểm gốc 40.