Vừa

Subscriber nhận handle bị tái sử dụng: phải chép, và clone() không chép gì

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

uvmsubscriberanalysiscopytrap

Bạn tích hợp một VIP cũ. Monitor của nó, vì lý do hiệu năng, tạo một đối tượng sample duy nhất, rồi mỗi lần lấy được mẫu mới thì ghi đè các trường và gọi ap.write(s) với cùng handle đó. Không sửa được VIP. Viết subscriber thu thập mẫu sao cho dữ liệu đã cất không bị đổi về sau.

Gói sample_pkg (có sẵn, không có do_copy hay field macro):

class sample extends uvm_sequence_item;
  int unsigned ch;  int val;  longint ts;
endclass

Viết:

class sample_collector extends uvm_subscriber #(sample);
  `uvm_component_utils(sample_collector)
  sample       got[$];                  // mọi mẫu đã nhận, theo thứ tự, mỗi mẫu là một ĐỐI TƯỢNG RIÊNG
  int unsigned per_ch[int unsigned];    // số mẫu theo kênh
  function new(string name, uvm_component parent);
  function void write(sample t);
  function int max_val(int unsigned ch);  // giá trị val lớn nhất của kênh ch; kênh chưa có mẫu thì trả 0
endclass

Testbench đóng vai monitor cũ: gọi write nhiều lần với cùng một handle, đổi trường giữa các lần gọi, rồi mới kiểm got, per_ch và max_val. Nó còn sửa đối tượng của monitor sau cùng để chắc rằng bản đã cất độc lập.

Các case

  1. 3 mẫu từ monitor tái sử dụng đối tượngmẫu
  2. Đếm số mẫu theo kênhmẫ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.