Vừa

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

branch-predictorsaturating-countermemorycpuinterview

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

  1. Sau reset: mọi mục dự đoán không rẽmẫu
  2. 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.

Đ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.