Mã Hamming(7,4): mã hoá và sửa lỗi 1 bit
Module cần viết: hamming74 · 6 case (2 mẫu) · giới hạn 4 s/case · ~25 phút
Bộ nhớ và đường truyền có thể bị lật bit do nhiễu hay bức xạ. Mã Hamming(7,4) thêm 3 bit parity vào 4 bit dữ liệu, đủ để phát hiện và sửa mọi lỗi 1 bit. Đây là ý tưởng nền của ECC trong DRAM/SRAM, và là câu phỏng vấn thiết kế tổ hợp quen thuộc.
module hamming74 (
input logic [3:0] d, // dữ liệu cần mã hoá
output logic [6:0] cw, // từ mã: cw[k-1] là bit ở VỊ TRÍ k (k = 1…7)
input logic [6:0] rx, // từ mã nhận được (có thể sai 1 bit)
output logic [3:0] dout, // dữ liệu sau khi sửa
output logic [2:0] syndrome, // vị trí bit sai (1…7), 0 nếu không sai
output logic corrected // 1 nếu đã sửa một bit
);
| Vị trí | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Nội dung | p1 | p2 | d[0] | p4 | d[1] | d[2] | d[3] |
p1= XOR các vị trí 3, 5, 7;p2= XOR 3, 6, 7;p4= XOR 5, 6, 7 (parity chẵn).- Bên nhận:
s1= XOR vị trí 1, 3, 5, 7 củarx;s2= XOR 2, 3, 6, 7;s4= XOR 4, 5, 6, 7.syndrome = {s4, s2, s1}. doutlấy từ các vị trí 3, 5, 6, 7 sau khi lật bit ở vị trísyndrome(nếu khác 0).
Ví dụ: d = 4'b1011 → cw = 7'b1010101 (đọc từ vị trí 7 về 1). Nếu nhận rx sai ở vị trí 6 thì syndrome = 6, corrected = 1, dout = 1011.
Mạch tổ hợp; testbench đọc ngõ ra 1 ns sau khi đổi đầu vào.
Các case
- Mã hoá đủ 16 giá trị dữ liệumẫu
- Giải mã mã đúng: syndrome = 0mẫ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.