Dễ

Ràng buộc cho gói tin: khoảng [a:b], kích thước mảng và & thiếu ngoặc

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 · ~20 phút

randomizationconstraintimplicationdynamic-arraytrap

Ràng buộc (constraint) là ngôn ngữ để mô tả "mọi kích thích hợp lệ". Viết thiếu thì testbench sinh dữ liệu rác; viết thừa thì bỏ sót cả một vùng của thiết kế mà không ai biết. Bài này là một gói tin nhỏ với bốn quy tắc.

Kiểu kind_e và các trường đã có trong starter (giữ nguyên tên):

typedef enum bit [1:0] { READ, WRITE, IDLE } kind_e;

class pkt;
  rand kind_e     kind;
  rand bit [15:0] addr;
  rand bit [4:0]  len;
  rand bit [7:0]  payload[];
endclass

Viết các constraint sao cho mọi lần randomize() thành công cho ra gói thoả:

  1. len từ 1 đến 16 (mọi giá trị trong khoảng đều phải có thể xuất hiện).
  2. payload.size() == len.
  3. Gói WRITE có addr chia hết cho 4. Gói READ không bị ràng buộc về địa chỉ.
  4. Gói IDLE có len == 1 và addr == 0.

Và ràng buộc của bạn phải cho phép nơi gọi thêm ràng buộc inline, ví dụ p.randomize() with { kind == WRITE; addr inside {[16'h100:16'h1FF]}; }.

Testbench randomize hàng nghìn lần, kiểm từng gói theo 4 quy tắc, và đo thêm vài thống kê (có gói WRITE không, READ có địa chỉ lẻ không, len có trải khắp khoảng không) để phát hiện ràng buộc thừa. Đề cần simulator hỗ trợ đầy đủ randomize của IEEE 1800.

Các case

  1. 200 gói ngẫu nhiên hợp lệmẫu
  2. Gói WRITE vẫn xuất hiện và căn 4mẫ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ó: Dễ. Điểm gốc 20.