Phân tích chuỗi cấu hình key=value bằng phương thức string
Class cần viết: kv_parser · cần máy chấm có SystemVerilog · 7 case (2 mẫu) · giới hạn 4 s/case · ~25 phút
Testbench thường nhận cấu hình qua plusarg dạng chuỗi, ví dụ +CFG=mode=burst;len=16;seed=7, rồi phải tự tách ra. UVM cũng làm vậy với +uvm_set_config_int=.... Bài này luyện các phương thức của kiểu string trong SystemVerilog và tư duy xử lý biên khi parse.
class kv_parser;
function int parse(string s); // phân tích s, trả về số cặp HỢP LỆ trong s
function bit has(string k);
function string get(string k, string dflt = "");
function int get_int(string k, int dflt = 0); // giá trị chuyển bằng atoi(); khoá chưa có → dflt
function int errors(); // tổng số đoạn lỗi đã gặp qua mọi lần parse
function void clear(); // xoá mọi cặp (không xoá errors)
endclass
Quy tắc:
- Chuỗi gồm các đoạn ngăn cách bởi
;. Đoạn rỗng (hai dấu;liền nhau,;ở đầu hay cuối) bị bỏ qua, không tính là lỗi. - Đoạn hợp lệ có dạng
khoá=giá trị: tách ở dấu=đầu tiên. Khoá phải khác rỗng. Giá trị có thể rỗng hoặc chứa thêm=. - Đoạn không có
=, hoặc có khoá rỗng, là đoạn lỗi: tăngerrors()và bỏ qua. - Khoá đã có thì lần sau ghi đè giá trị. Các lần
parsecộng dồn vào cùng một bảng. - Không cắt khoảng trắng. Chuỗi kiểm thử không chứa khoảng trắng.
Ví dụ: parse("mode=burst;len=16;;x;url=a=b;e=") trả 4. Khi đó get("url") = "a=b", get("e") = "", get_int("len") = 16, errors() = 1 (đoạn x).
Các case
- Hai cặp cơ bảnmẫu
- Đoạn cuối không có dấu ;mẫ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.