Nhị phân 8 bit → BCD 3 chữ số (double dabble)
Module cần viết: bin2bcd · 6 case (2 mẫu) · giới hạn 4 s/case · ~20 phút
Hiển thị một số nhị phân trên LED 7 đoạn hoặc màn hình cần đổi sang BCD: mỗi chữ số thập phân 4 bit. Chia cho 10 bằng phần cứng thì đắt. Thuật toán double dabble chỉ dùng dịch và cộng 3. Đây là bài phỏng vấn tổ hợp quen thuộc.
module bin2bcd (
input logic [7:0] bin, // 0 … 255
output logic [11:0] bcd // {trăm, chục, đơn vị}, mỗi chữ số 4 bit
);
| bin | bcd |
|---|---|
| 0 | 12'h000 |
| 9 | 12'h009 |
| 10 | 12'h010 |
| 255 | 12'h255 |
(Viết bcd ở dạng hex thì đọc ra đúng số thập phân.)
Double dabble cho 8 bit: bắt đầu với bcd = 0. Lặp 8 lần, mỗi lần lấy bit kế tiếp của bin (MSB trước):
- chữ số BCD nào ≥ 5 thì cộng thêm 3;
- dịch trái
{bcd, bit}một bit.
Mạch tổ hợp; testbench đọc ngõ ra 1 ns sau khi đổi bin.
Các case
- 0, 9, 10, 99, 100, 255mẫu
- Các số 0…19mẫ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.