Bộ dự đoán rẽ nhánh 2 bit (bảng 16 bộ đếm bão hoà)
Module cần viết: bp2bit · 7 case (2 mẫu) · giới hạn 4 s/case · ~25 phút
CPU pipeline phải đoán hướng của lệnh rẽ nhánh trước khi biết kết quả. Bộ dự đoán 2 bit là thiết kế kinh điển trong sách Hennessy & Patterson. Mỗi lệnh rẽ nhánh (chọn theo vài bit địa chỉ) có một bộ đếm bão hoà 2 bit, nên một lần đoán sai lẻ loi, như lần thoát khỏi vòng lặp, không làm đổi ngay dự đoán.
module bp2bit (
input logic clk,
input logic rst_n, // reset bất đồng bộ: mọi bộ đếm = 2'b01
input logic [3:0] idx, // mục cần dự đoán
output logic taken, // dự đoán cho mục idx (tổ hợp)
input logic upd, // 1: cập nhật ở sườn lên này
input logic [3:0] upd_idx, // mục cần cập nhật (kết quả thật đã biết)
input logic outcome // 1: lệnh đã rẽ; 0: không rẽ
);
| Bộ đếm | Dự đoán | outcome = 1 | outcome = 0 |
|---|---|---|---|
| 00 strongly not-taken | không rẽ | 01 | 00 |
| 01 weakly not-taken | không rẽ | 10 | 00 |
| 10 weakly taken | rẽ | 11 | 01 |
| 11 strongly taken | rẽ | 11 | 10 |
taken là bit cao của bộ đếm tại idx. Khi upd = 1, chỉ bộ đếm tại upd_idx thay đổi. Testbench đặt tín hiệu và đọc taken ở sườn xuống của clock.
Các case
- Sau reset: mọi mục dự đoán không rẽmẫu
- Một lần rẽ là đủ đổi dự đoánmẫ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.