Vừa

Viết uvm_sequence: burst ghi, đọc lại để kiểm, dừng khi lỗi

Class cần viết: burst_seq · cần máy chấm có UVM · 8 case (2 mẫu) · giới hạn 20 s/case · ~30 phút

uvmsequencesequencerdriverresponse

Sequence là nơi viết kịch bản kích thích trong UVM. Driver biết cách đẩy một giao dịch lên dây, còn sequence quyết định gửi giao dịch nào, theo thứ tự nào, và phản ứng với kết quả ra sao. Bài này viết một sequence có dùng response: ghi một dải địa chỉ, tuỳ chọn đọc lại để tự kiểm, và dừng ngay khi bus báo lỗi.

Gói bus_seq_pkg (đã import sẵn):

typedef enum bit { READ = 0, WRITE = 1 } op_e;
class bus_item extends uvm_sequence_item;
  op_e op;  bit [31:0] addr, data;  bit err;
endclass

Viết:

class burst_seq extends uvm_sequence #(bus_item);
  `uvm_object_utils(burst_seq)
  int unsigned n = 4;        // số địa chỉ
  bit [31:0]   base;
  bit          verify = 0;   // 1: ghi xong thì đọc lại từng địa chỉ để so
  int unsigned n_err;        // số response có err = 1
  int unsigned n_mismatch;   // số lần đọc lại ra dữ liệu khác dữ liệu đã ghi
  bit          aborted;      // 1 nếu đã dừng sớm vì lỗi
  function new(string name = "burst_seq");
  task body();
endclass

body():

  1. Ghi: với i = 0 … n-1, gửi WRITE tới addr = base + 4*i với data = base ^ (i * 32'h0101_0101). Mỗi giao dịch gửi xong thì lấy response.
  2. Đọc lại (chỉ khi verify = 1): với i = 0 … n-1, gửi READ tới cùng các địa chỉ đó theo cùng thứ tự. Response có data khác dữ liệu đã ghi thì n_mismatch++.
  3. Lỗi: bất kỳ response nào có err = 1 (ghi hay đọc) thì n_err++, aborted = 1, và dừng ngay: không gửi thêm giao dịch nào.

Mỗi giao dịch có đúng một response. Testbench có sequencer và driver riêng. Driver mô phỏng một bộ nhớ, có thể được cấu hình để báo lỗi hoặc trả sai dữ liệu ở vài địa chỉ. Test gọi seq.start(sequencer) rồi kiểm các giao dịch driver nhận được và các bộ đếm của sequence.

Các case

  1. 4 lệnh ghimẫu
  2. Ghi rồi đọc lại, mọi thứ đúngmẫu

Cùng 6 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.