UVM monitor: lấy mẫu luồng valid/ready qua virtual interface
Class cần viết: stream_mon · cần máy chấm có UVM · 7 case (2 mẫu) · giới hạn 20 s/case · ~35 phút
Monitor là "mắt" của testbench. Nó nhìn tín hiệu trên dây, dựng lại giao dịch, rồi phát cho scoreboard và coverage qua analysis port. Monitor không bao giờ lái tín hiệu. Một monitor lấy mẫu sai thì mọi kiểm tra phía sau đều sai theo, nên đây là thành phần cần viết chính xác nhất.
Gói hỗ trợ (đã có sẵn):
interface stream_if (input logic clk);
logic valid, ready, last; logic [7:0] data;
endinterface
class stream_pkt extends uvm_sequence_item;
byte unsigned bytes[$];
endclass
Viết:
class stream_mon extends uvm_monitor;
`uvm_component_utils(stream_mon)
virtual stream_if vif;
uvm_analysis_port #(stream_pkt) ap;
int unsigned n_beats; // tổng số byte đã thật sự được chuyển
function new(string name, uvm_component parent);
function void build_phase(uvm_phase phase); // lấy vif từ config_db, tên "vif"
task run_phase(uvm_phase phase);
endclass
Giao thức luồng:
- Một byte được chuyển ở sườn lên
clkkhivalid = 1vàready = 1. Khivalid = 1, ready = 0, phía gửi giữ nguyên byte đó cho tới khi được nhận. - Byte có
last = 1là byte cuối của gói. Gói có thể dài 1 byte. Giữa các byte của một gói có thể có nhịpvalid = 0. - Mỗi gói hoàn chỉnh được phát đúng một lần qua
ap.write(...), ngay ở sườn nhận byte cuối, với đủ các byte theo thứ tự.
Test của testbench đặt vif vào config_db, tạo stream_mon bằng factory, nối ap tới một subscriber, rồi lái tín hiệu ở sườn xuống của clock. Subscriber giữ handle mọi gói nhận được và chỉ kiểm nội dung khi kết thúc.
Các case
- Một gói 4 byte, phía nhận luôn sẵn sàngmẫu
- Hai gói liền nhaumẫ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.