Vừa

Làm tròn Q8.8 về số nguyên: half-to-even và số âm

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

fixed-pointroundingsigneddsptrap

Số Q8.8 là số có dấu 16 bit, 8 bit phần nguyên và 8 bit phần lẻ: giá trị thật bằng q / 256. Cuối một bộ lọc số, ta thường phải làm tròn về số nguyên. Kiểu làm tròn chuẩn của IEEE 754 và của nhiều DSP là half-to-even (còn gọi là banker's rounding): phần lẻ đúng 0.5 thì làm tròn về số chẵn gần nhất, để sai số không bị lệch về một phía khi cộng dồn.

module round_q88 (
  input  logic signed [15:0] q,   // Q8.8, giá trị thật q / 256 trong [−128, 127.996]
  output logic signed [8:0]  y    // số nguyên gần q / 256 nhất; phần lẻ đúng 0.5 → về số chẵn
);
q / 256 y
2.25 2
2.75 3
2.5 2
3.5 4
−1.25 −1
−2.5 −2
−0.5 0
127.5 128

Mạch tổ hợp; testbench đọc y 1 ns sau khi đổi q.

Các case

  1. Số dương, phần lẻ khác 0.5mẫu
  2. Số dương, phần lẻ đúng 0.5mẫ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.

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