UVM driver: lái handshake valid/ready đúng luật
Class cần viết: wr_driver · cần máy chấm có UVM · 6 case (2 mẫu) · giới hạn 20 s/case · ~40 phút
Driver là nơi giao dịch trừu tượng biến thành tín hiệu trên dây. Một driver sai luật giao thức làm mọi kết quả phía sau mất ý nghĩa: DUT có thể "đúng" chỉ vì được lái sai theo cách dễ chịu. Bài này viết driver cho một bus ghi đơn giản theo luật valid/ready (giống kênh AW/W của AXI).
Gói hỗ trợ (có sẵn):
interface wr_if (input logic clk);
logic valid, ready; logic [7:0] addr; logic [15:0] data;
endinterface
class wr_item extends uvm_sequence_item;
bit [7:0] addr; bit [15:0] data;
int unsigned delay; // số nhịp valid = 0 trước giao dịch này
endclass
Viết:
class wr_driver extends uvm_driver #(wr_item);
`uvm_component_utils(wr_driver)
virtual wr_if vif;
int unsigned n_sent; // số giao dịch đã bắt tay xong
function new(string name, uvm_component parent);
function void build_phase(uvm_phase phase); // vif từ config_db, tên "vif"
task run_phase(uvm_phase phase);
endclass
Luật bus (lấy mẫu ở sườn lên clk):
- Một giao dịch được chuyển ở sườn có
valid = 1vàready = 1. - Đã bật
validthì giữvalid = 1và giữ nguyênaddr,datacho tới sườn bắt tay. - Giữa giao dịch k (bắt tay ở sườn P) và giao dịch k + 1 (delay = d):
valid = 0ở đúng d sườn P+1 … P+d, vàvalid = 1từ sườn P+d+1. Khi d = 0 thì không có nhịp nghỉ nào. - Gọi
item_done()sau khi bắt tay. Khi không có giao dịch nào,valid = 0.
Đổi tín hiệu bằng gán non-blocking (<=) ngay sau sườn lên. Testbench (vai DUT) đổi ready ở sườn xuống, kiểm luật ở mọi sườn lên, và chỉ đưa các giao dịch từ một sequence có sẵn.
Các case
- Một giao dịch, ready luôn bằng 1mẫu
- Ba giao dịch delay = 0: không có bọ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à 3 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.