Vừa

CRC-8 nối tiếp từng bit (đa thức 0x07)

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

crclfsrserialsequentialinterview

CRC (cyclic redundancy check) phát hiện lỗi trong Ethernet, USB, SMBus, bộ nhớ flash… Phần cứng của nó rất gọn: một LFSR có đầu vào dữ liệu. Bài này dựng CRC-8 với đa thức x⁸ + x² + x + 1 (viết gọn 0x07, cấu hình CRC-8/SMBUS) và nạp dữ liệu nối tiếp từng bit, bit cao (MSB) trước.

module crc8 (
  input  logic       clk,
  input  logic       rst_n,      // reset bất đồng bộ: crc = 0
  input  logic       init,       // đồng bộ: xoá crc = 0 ở sườn lên (ưu tiên hơn bit_valid)
  input  logic       bit_valid,  // 1: nạp bit_in ở sườn lên này
  input  logic       bit_in,
  output logic [7:0] crc
);

Ở mỗi sườn lên, nếu init = 0 và bit_valid = 1:

fb  = crc[7] ^ bit_in
crc = (crc << 1) ^ (fb ? 8'h07 : 8'h00)

Giá trị khởi đầu 0, không đảo bit, không XOR ở cuối. Kiểm tra nhanh: byte 0x01 cho CRC 0x07; chuỗi ASCII "123456789" (9 byte, mỗi byte MSB trước) cho 0xF4.

Testbench đặt tín hiệu và đọc crc ở sườn xuống của clock.

Các case

  1. Một byte 0x01 → 0x07mẫu
  2. Chuỗi "123456789" → 0xF4mẫu

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