randc: hoán vị ngẫu nhiên, và vì sao đối tượng mới làm hỏng chu kỳ
Class cần viết: perm8 · cần máy chấm có SystemVerilog · 6 case (2 mẫu) · giới hạn 4 s/case · ~15 phút
Kiểm một bộ nhớ 8 ô theo thứ tự ngẫu nhiên nhưng không bỏ sót ô nào; phát 8 lệnh với ID khác nhau rồi mới dùng lại ID; xáo bài. Tất cả cần hoán vị ngẫu nhiên, và SystemVerilog có sẵn công cụ cho việc đó.
Viết class perm8 với method:
function int next(); // trả về một số 0..7
Yêu cầu: với mỗi đối tượng, các lần gọi next() thứ 1–8, 9–16, 17–24… mỗi khối là một hoán vị của 0..7 (mỗi số đúng một lần). Các hoán vị phải ngẫu nhiên (không lặp lại một thứ tự cố định). Nhiều đối tượng perm8 hoạt động độc lập: gọi xen kẽ giữa chúng không ảnh hưởng tới khối của từng đối tượng.
Starter dùng rand và đã có hàm next(); xem vì sao nó không đạt. Đề cần simulator hỗ trợ đầy đủ randomize/covergroup của IEEE 1800.
Các case
- 8 lần gọi đầu là hoán vịmẫu
- 10 khối liên tiếpmẫ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.