Vừa

Bug hunt OOP: biến che thuộc tính, static, clone và super.new

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

classconstructorstaticclonevirtualdebugtrap

Một kỹ sư mới viết hai class gói tin cho testbench. Mọi thứ biên dịch sạch, nhưng scoreboard báo lỗi khắp nơi. Starter là code gốc của họ, chứa năm bug. Sửa sao cho đúng đặc tả dưới đây; giữ nguyên tên class, tên method và danh sách đối số.

class pkt

Thành phần Đặc tả
int id; bit [7:0] data; thuộc tính
new(int id = -1, bit [7:0] data = 0) gán id, data từ đối số
int total() số đối tượng pkt (kể cả lớp con và bản clone) đã được tạo từ đầu mô phỏng; gọi qua đối tượng nào cũng cho cùng kết quả
pkt clone() trả về một đối tượng mới, cùng kiểu thực sự với đối tượng gốc, cùng giá trị mọi thuộc tính; sửa bản clone không ảnh hưởng bản gốc

class prio_pkt extends pkt

Thành phần Đặc tả
int prio; thuộc tính thêm
new(int id = -1, bit [7:0] data = 0, int prio = 0) gán cả ba thuộc tính
clone() như trên: bản clone là một prio_pkt, giữ cả prio, kể cả khi gọi qua một handle kiểu pkt

Testbench gọi clone() qua handle kiểu pkt rồi $cast kết quả sang prio_pkt khi đối tượng gốc là prio_pkt.

Các case

  1. new gán đúng thuộc tínhmẫu
  2. total() đếm mọi đối tượngmẫ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à 5 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.