Mô hình ADC bằng real: int'() làm tròn, $rtoi cắt, và phép chia nguyên
Class cần viết: adc_model · cần máy chấm có SystemVerilog · 6 case (2 mẫu) · giới hạn 4 s/case · ~25 phút
Testbench cho mạch hỗn hợp (mixed-signal) thường cần mô hình ADC/DAC viết bằng real. Các phép chuyển đổi giữa real và số nguyên trong SystemVerilog không giống C, và một mô hình sai lệch một mã sẽ báo lỗi giả cho RTL đúng (hoặc tệ hơn, che lỗi thật).
ADC lưỡng cực bits bit, điện áp tham chiếu vref, mã bù 2. Viết class adc_model với hai hàm static:
| Hàm | Trả về |
|---|---|
int quantize(real v, real vref, int bits) |
⌊ v / vref · 2^(bits−1) ⌋, kẹp trong [−2^(bits−1), 2^(bits−1) − 1] |
real to_volts(int code, real vref, int bits) |
điện áp giữa ô của mã: (code + 0.5) · vref / 2^(bits−1) |
2 ≤ bits ≤ 16, vref > 0. ⌊x⌋ là số nguyên lớn nhất không vượt quá x (với số âm: ⌊−0.3⌋ = −1).
Ví dụ với vref = 1.0, bits = 4 (8 mức mỗi phía, mỗi ô rộng 0.125): quantize(0.3) = 2, quantize(−0.3) = −3, quantize(0.99) = 7, quantize(5.0) = 7, quantize(−5.0) = −8, to_volts(2) = 0.3125.
Các case
- quantize: v rơi đúng biên ômẫu
- quantize: v dương giữa ômẫ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.