Khó

FIFO first-word-fall-through trên SRAM đọc đồng bộ

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

fifofwftsramprefetchpipelineinterview

FIFO first-word-fall-through (FWFT, còn gọi là show-ahead) đưa phần tử đầu ra dout ngay khi có: empty = 0 nghĩa là dout đã hợp lệ, và rd_en chỉ là lệnh "đã dùng xong, đưa phần tử kế". Giao tiếp này khớp với valid/ready nên rất phổ biến. Khó ở chỗ bộ nhớ thật (SRAM, block RAM của FPGA) đọc đồng bộ: dữ liệu ra sau cạnh clock, không thể đọc tổ hợp.

Bộ nhớ đã cho sẵn (có trong môi trường chấm, không nộp lại):

module sram_1r1w #(parameter int W = 8, parameter int D = 4) (
  input  logic clk,
  input  logic we, input logic [$clog2(D)-1:0] waddr, input logic [W-1:0] wdata,
  input  logic re, input logic [$clog2(D)-1:0] raddr,
  output logic [W-1:0] rdata          // = m[raddr] sau cạnh lên có re = 1
);
// đọc và ghi cùng địa chỉ trong một nhịp: rdata là giá trị CŨ

Viết:

module fifo_fwft (
  input  logic       clk,
  input  logic       rst_n,   // reset bất đồng bộ, tích cực mức thấp
  input  logic       wr_en,
  input  logic [7:0] din,
  output logic       full,
  input  logic       rd_en,
  output logic [7:0] dout,
  output logic       empty
);

Yêu cầu:

  1. Dữ liệu phải lưu trong một sram_1r1w #(.W(8), .D(4)). Ngoài SRAM chỉ được dùng tối đa 2 thanh ghi dữ liệu 8 bit.
  2. Ghi khi wr_en && !full tại cạnh lên; lấy ra khi rd_en && !empty. Gọi n = số lần ghi − số lần lấy ra: full = (n == 4) chính xác.
  3. empty = 0 thì dout là phần tử cũ nhất chưa lấy ra.
  4. Một phần tử ghi ở cạnh k phải xuất hiện ở dout (nếu nó là phần tử đầu) chậm nhất sau cạnh k + 2.
  5. Khi wr_en = rd_en = 1 liên tục, FIFO phải lấy ra được ở mọi nhịp sau giai đoạn khởi động (thông lượng 1 phần tử/nhịp).

Testbench đổi đầu vào ở cạnh xuống và kiểm full, empty, dout 1 ns sau đó. Yêu cầu 1 không được testbench kiểm, nhưng là một phần của đề: lời giải dùng nhiều thanh ghi hơn thì chỉ đang tránh bài toán.

Các case

  1. Ghi một, đọc mộtmẫu
  2. Ghi ba rồi đọc hếtmẫ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ó: Khó. Điểm gốc 80.