Vừa

UVM factory: đăng ký lớp con, override theo kiểu và theo instance

Class cần viết: fac_setup · cần máy chấm có UVM · 6 case (2 mẫu) · giới hạn 15 s/case · ~25 phút

uvmfactoryoverridepolymorphism

Factory là cơ chế giúp test thay một lớp bằng lớp con của nó mà không sửa code tạo đối tượng: đổi mọi giao dịch thành giao dịch có lỗi, hay chỉ một driver thành phiên bản chậm. Mọi component UVM đều tạo bằng type_id::create chính là để test có thể override như vậy.

Gói fac_pkg (đã import sẵn):

class base_txn extends uvm_object;      // đã đăng ký factory
  virtual function string kind(); return "base"; endfunction
endclass
class base_drv extends uvm_component;   // đã đăng ký factory
  virtual function int delay(); return 1; endfunction
endclass

Viết ba class:

class err_txn extends base_txn;         // kind() trả "err"
class slow_drv extends base_drv;        // delay() trả 10

class fac_setup;
  static function void     err_everywhere();         // từ giờ, mọi base_txn tạo bằng factory là err_txn
  static function void     slow_at(string path);     // chỉ component có ĐƯỜNG DẪN ĐẦY ĐỦ khớp path (có thể có *)
                                                     //   mới thành slow_drv
  static function base_txn make(string name);        // tạo một base_txn (tôn trọng mọi override)
endclass

Testbench gọi các hàm của fac_setup, rồi tạo base_txn và base_drv bằng factory (driver được đặt dưới một component env, ví dụ env.d1), và kiểm kind(), delay() cùng kiểu thật của đối tượng.

Các case

  1. Chưa override: make() tạo base_txnmẫu
  2. err_everywhere: mọi base_txn thành err_txnmẫ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à 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.

Đ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.