Virtual sequence: hai agent song song, fork…join và p_sequencer
Class cần viết: dual_vseq · cần máy chấm có UVM · 6 case (2 mẫu) · giới hạn 20 s/case · ~30 phút
Một DUT có hai cổng (ví dụ cổng ghi và cổng đọc), mỗi cổng có agent UVM riêng. Kịch bản test cần điều phối cả hai: chạy đồng thời rồi mới kết thúc. Đó là việc của virtual sequence, chạy trên một virtual sequencer giữ handle tới các sequencer thật.
Đã cho sẵn (gói vseq_pkg):
class op_item extends uvm_sequence_item; bit [15:0] addr; endclass
class burst_seq extends uvm_sequence #(op_item); // gửi n giao dịch addr = base, base+1, …
bit [15:0] base; int unsigned n = 4;
endclass
class dual_vsqr extends uvm_sequencer; // virtual sequencer
uvm_sequencer #(op_item) a;
uvm_sequencer #(op_item) b;
endclass
Viết class dual_vseq extends uvm_sequence (chạy trên dual_vsqr) với các trường:
bit [15:0] base_a, base_b;
int unsigned n_a = 4, n_b = 4;
body():
- chạy một
burst_seq(base_a, n_a) trên sequencer a và mộtburst_seq(base_b, n_b) trên sequencer b, đồng thời; - khi cả hai đã xong, chạy một
burst_seqvớibase = 16'hFFFF, n = 1trên sequencer a; body()chỉ trả về sau khi mọi việc trên đã xong.
Testbench có hai driver, mỗi giao dịch mất 2 ns, ghi lại thời điểm bắt đầu xử lý. Đề cần máy chấm có engine UVM hỗ trợ đầy đủ randomize.
Các case
- Hai burst dài bằng nhaumẫu
- Burst B dài hơnmẫ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.