Sửa đường trễ và cặp hoán đổi viết bằng blocking
Module cần viết: delay_swap · 6 case (2 mẫu) · giới hạn 4 s/case · ~15 phút
Starter được viết bởi một người quen lập trình phần mềm: mọi phép gán đều là =. Trông thì hợp lý, nhưng ở mỗi sườn clock, mạch không làm điều người viết nghĩ. Sửa để đúng đặc tả.
module delay_swap (
input logic clk,
input logic rst_n, // reset bất đồng bộ: mọi thanh ghi = 0
input logic [7:0] d,
output logic [7:0] q1, q2, q3, // đường trễ: q1 = d trễ 1 nhịp, q2 trễ 2 nhịp, q3 trễ 3 nhịp
input logic load, // nạp: x = d, y = ~d
input logic swap, // hoán đổi: x và y đổi giá trị cho nhau
output logic [7:0] x, y
);
- Đường trễ: ở mỗi sườn lên,
q1 ← d,q2 ← q1,q3 ← q2, dùng giá trị trước sườn. - Cặp x, y:
load = 1thìx ← d,y ← ~d. Ngược lại nếuswap = 1thì x và y đổi giá trị cho nhau. Không có gì thì giữ nguyên.
Testbench đặt tín hiệu và đọc ngõ ra ở sườn xuống của clock.
Các case
- Một xung đi qua đường trễ 3 tầngmẫu
- Hoán đổi x và ymẫ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à 3 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.