Vừa

Register file 2 cổng đọc, 1 cổng ghi, x0 = 0 và bypass

Module cần viết: regfile · 6 case (2 mẫu) · giới hạn 4 s/case · ~25 phút

register-filememorybypasscpuinterview

Register file là bộ nhớ nhỏ, nhanh nhất trong CPU. Một CPU RISC-V cơ bản đọc hai toán hạng và ghi một kết quả mỗi nhịp. Bài này gồm hai chi tiết mà người phỏng vấn hay hỏi: thanh ghi x0 luôn bằng 0, và bypass, tức đọc ngay giá trị đang được ghi trong cùng nhịp. Nhờ bypass, lệnh ở tầng decode không phải chờ thêm một nhịp sau khi tầng writeback ghi.

module regfile (
  input  logic       clk,
  input  logic       rst_n,        // reset bất đồng bộ: mọi thanh ghi = 0
  input  logic [2:0] ra1, ra2,     // địa chỉ đọc
  output logic [7:0] rd1, rd2,     // dữ liệu đọc (tổ hợp)
  input  logic       we,
  input  logic [2:0] wa,
  input  logic [7:0] wd
);

8 thanh ghi 8 bit, x0 … x7:

  • Ghi: ở sườn lên, nếu we = 1 và wa != 0 thì x[wa] = wd. Ghi vào x0 bị bỏ qua.
  • Đọc (tổ hợp): rd1 = giá trị của x[ra1], với hai ngoại lệ:
    • ra1 == 0 thì luôn ra 0;
    • bypass: nếu we = 1, wa == ra1 và wa != 0 thì ra wd ngay trong nhịp đó.
  • rd2 tương tự với ra2.

Testbench đặt tín hiệu ở sườn xuống và đọc rd1, rd2 1 ns sau đó, trước sườn lên kế tiếp.

Các case

  1. Ghi rồi đọc lạimẫu
  2. x0 luôn bằng 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à 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.