Class tham số hoá theo kiểu: hàng đợi có giới hạn bounded_q #(T, N)
Class cần viết: bounded_q · cần máy chấm có SystemVerilog · 7 case (2 mẫu) · giới hạn 4 s/case · ~25 phút
Class tham số hoá (parameterized class) là nền của UVM. uvm_sequencer #(REQ), uvm_analysis_port #(T), uvm_tlm_fifo #(T) đều được viết một lần rồi dùng cho mọi kiểu giao dịch. Bài này viết một hàng đợi có giới hạn, chạy được với bất kỳ kiểu nào, và kiểm một điểm hay bị hỏi trong phỏng vấn: biến static của class tham số hoá thuộc về ai.
class bounded_q #(type T = int, int N = 4);
static int created; // số đối tượng đã tạo CỦA PHIÊN BẢN THAM SỐ NÀY
int drops; // số lần try_put thất bại vì đầy
function new(); // tăng created
function bit try_put(T v); // đầy (đã có N phần tử): trả 0, drops++; ngược lại thêm vào cuối, trả 1
function bit try_get(output T v); // rỗng: trả 0, v = giá trị mặc định của T; ngược lại lấy phần tử đầu
function bit peek(output T v); // như try_get nhưng không lấy ra
function int size();
function bit is_full();
endclass
Testbench dùng nhiều phiên bản cùng lúc:
bounded_q #(int, 4) a; // giống hệt bounded_q (tham số mặc định)
bounded_q #(string, 2) b;
bounded_q #(int, 1) c; // phiên bản khác: N khác
Giá trị mặc định của int là 0, của string là "".
Các case
- int, N = 4: đúng thứ tự FIFOmẫu
- string, N = 2mẫ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à 4 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.