Vừa

Bộ đếm có nạp, cho phép và cờ tràn

Module cần viết: counter_ld · 8 case (2 mẫu) · giới hạn 4 s/case · ~20 phút

sequentialcounterpriorityparameter

Viết bộ đếm lên W bit:

module counter_ld #(parameter int W = 4) (
  input  logic         clk,
  input  logic         rst,    // reset ĐỒNG BỘ, tích cực mức cao
  input  logic         en,
  input  logic         ld,
  input  logic [W-1:0] din,
  output logic [W-1:0] q,
  output logic         wrap
);

Tại mỗi sườn lên clk, xét theo thứ tự ưu tiên giảm dần:

điều kiện q sau sườn clock
rst = 1 0
ld = 1 din
en = 1 q + 1 (quay về 0 sau giá trị lớn nhất)
còn lại giữ nguyên

wrap là tín hiệu tổ hợp:

wrap = en & ~ld & ~rst & (q == giá trị lớn nhất 2^W − 1)

nghĩa là "sườn clock kế tiếp sẽ đếm từ giá trị lớn nhất về 0".

Testbench đổi đầu vào ở sườn xuống, chờ 1 ns rồi đọc wrap; q được đọc ở sườn xuống, trước khi đổi đầu vào. Testbench gắn hai bản W=4 và W=8.

Các case

  1. Reset rồi đếm 0 → 5mẫu
  2. en = 0 giữ nguyên giá trịmẫu

Cùng 6 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.

Đ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.