Làm UVM nhanh hơn thông qua hệ thống cấu hình mới - Semiwiki

Làm cho UVM nhanh hơn thông qua hệ thống cấu hình mới – Semiwiki

Nút nguồn: 3036575

Phương pháp xác minh phổ quát (UVM) là một cách phổ biến để giúp xác minh các thiết kế SystemVerilog và nó bao gồm một hệ thống cấu hình Thật không may, có một số vấn đề về tốc độ và cách sử dụng. Rich Edelman từ Siemens EDA đã viết một bài báo chi tiết dài 20 trang về chủ đề cách tránh những vấn đề này và tôi đã xem qua nó để tóm tắt những điểm nổi bật cho bạn. Các kỹ sư xác minh sử dụng cơ sở dữ liệu cấu hình UVM để đặt các giá trị, sau đó lấy các giá trị này trong quá trình kiểm tra UVM của họ. Một ví dụ về cài đặt và nhận giá trị 'T' là:

uvm_config#(T)::set(scope, instance_path_name, field_name, value); uvm_config#(T)::get(scope, instance_path_name, field_name, value);

Việc kết nối bàn kiểm tra UVM với thiết bị được kiểm tra sẽ sử dụng cơ sở dữ liệu cấu hình để vượt qua các giao diện ảo. Có ba vấn đề khi sử dụng cấu hình UVM:

  • Mã lớn, khoảng 2,600 dòng mã
  • Yêu cầu khớp loại chính xác, vì vậy 'int' và 'bit' không giống nhau
  • Mã chậm

Hãy xem xét trường hợp mã chậm, vì với hàng nghìn lệnh gọi tới set() sử dụng tên có ký tự đại diện có thể mất tới 30 phút để hoàn thành giai đoạn 'đặt' và 'nhận'.

Thời gian đã trôi qua phút

Rich đề xuất một giải pháp mới cho cấu hình UVM có tốc độ nhanh hơn nhiều, chỉ mất vài giây.

giải pháp mới tối thiểu

Nếu mã UVM của bạn tránh sử dụng ký tự đại diện và có ít lệnh 'đặt' thì mã của bạn sẽ chạy nhanh hơn.

Các giải pháp khả thi cho các vấn đề về cấu hình UVM là:

  • Thay vào đó hãy sử dụng biến toàn cục
  • Sử dụng cấu hình UVM với một set()
  • Sử dụng cấu hình UVM với một vài set()
  • Sử dụng cây cấu hình
  • Thử thứ gì khác

Cách tiếp cận cuối cùng để thử điều gì đó khác biệt là giải pháp mới và nó tiếp tục sử dụng API set() và get(), sau đó đơn giản hóa bằng cách loại bỏ tham số hóa của cấu hình, loại bỏ quyền ưu tiên và loại bỏ thay đổi thuật toán tra cứu. Kết quả của phương pháp mới này là tốc độ nhanh.

Mục cấu hình mới của bạn được xác định trong lớp dẫn xuất từ ​​'config_item' và ví dụ bên dưới hiển thị 'int value' làm thuộc tính đang được đặt. Với mục đích gỡ lỗi, bạn thêm chức năng in đẹp.

lớp my_special_config_item mở rộng config_item; hàm mới(tên chuỗi = "my_special_config_item"); super.new(tên); giá trị int của hàm cuối; chuỗi hàm ảo Convert2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); lớp cuối chức năng

'config_item' có thuộc tính tên và tên này được tra cứu cùng với tên phiên bản. Đối tượng cấu hình cũng có hàm get_name() để trả về tên. Để tìm bất kỳ “instance_name.field_name” nào, cơ sở dữ liệu cấu hình sử dụng mảng kết hợp để có tốc độ tra cứu và tạo nhanh.
Để truy nguyên, bạn có thể tìm ra ai đã đặt hoặc ai đã gọi get, vì tên tệp và số dòng là các trường trong lệnh gọi hàm set() và get().

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

Hàng đợi truy cập có thể được in trong quá trình gỡ lỗi để xem ai đã gọi set() và get().

Để hỗ trợ các ký tự đại diện, cần phải thêm cơ chế tra cứu bằng cách sử dụng vùng chứa. Hãy xem xét tên phiên bản 'top.abcd*_0'.

cây container tối thiểu
Cây container

Phần ký tự đại diện của tên phiên bản được xử lý bằng cách sử dụng cây chứa thay vì mảng kết hợp.

Tổng kết

Việc chia sẻ dữ liệu giữa mô-đun/phiên bản và thế giới dựa trên lớp trong thử nghiệm UVM có thể được thực hiện bằng cách sử dụng cơ sở dữ liệu cấu hình UVM, chỉ cần lưu ý đến tốc độ chậm lại. Nếu phương pháp của bạn sử dụng nhiều cấu hình thì hãy cân nhắc sử dụng phương pháp mới được giới thiệu có gói sử dụng khoảng 300 dòng mã thay vì 2,600 dòng mã trong tệp cơ sở dữ liệu cấu hình UVM.

Đọc toàn bộ bài báo dài 20 trang, Tránh sự điên rồ về cấu hình một cách dễ dàng tại Siemens EDA.

Blog liên quan

Chia sẻ bài đăng này qua:

Dấu thời gian:

Thêm từ bánwiki