Đa hình: hàm virtual qua handle lớp cha
Class cần viết: shape · cần máy chấm có SystemVerilog · 6 case (2 mẫu) · giới hạn 4 s/case · ~20 phút
Đa hình là nền tảng của UVM: sequencer giữ handle kiểu uvm_sequence_item, factory trả về handle lớp cha, còn driver gọi phương thức mà không cần biết lớp con cụ thể. Mọi thứ đều dựa vào phương thức virtual.
Viết các class sau (có thể đặt trong cùng một file):
| Class | Yêu cầu |
|---|---|
shape |
virtual function real area() trả 0.0; virtual function string name() trả "shape"; static function real total_area(shape s[$]) trả tổng area() của mọi phần tử |
rect extends shape |
function new(real w, real h); area() = w*h; name() = "rect" |
circle extends shape |
function new(real r); area() = 3.14159 * r * r; name() = "circle" |
square extends rect |
function new(real a) (hình vuông cạnh a, dùng lại rect); name() = "square" |
Testbench chỉ dùng handle kiểu shape:
shape s;
rect r = new(3, 4);
s = r;
s.area(); // phải ra 12.0, không phải 0.0
s.name(); // "rect"
Kết quả real được so với sai số 1e-6. Chỉ viết class.
Đề này cần máy chấm có engine SystemVerilog.
Các case
- rect 3×4 và circle r=1 qua handle shapemẫu
- name() của từng lớp qua handle shapemẫu
Cùng 4 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.