Bài viết này là một hướng dẫn tải, cài đặt và chạy mô phỏng sử dụng thư viện UVM (Universal Verification Methodology). Bài viết dành cho các bạn bắt đầu tìm hiểu về UVM nhưng chưa biết bắt đầu từ đâu, làm thế nào để chạy thử một ví dụ cơ bản. Bài viết này không hướng dẫn chi tiết về UVM và chỉ hướng dẫn một ví dụ để các bạn có công cụ để chạy thử nghiệm và nghiên cứu tiếp.
1) Một vài lưu ý trước khi bắt đầu
Các thông số về phần mềm và phần cứng mà tác giả đang sử dụng:
- Phần mềm mô phỏng: QuestaSim-64 10.2c. Cách cài đặt và sử dụng các bạn hãy đọc bài viết hướng dẫn.
- Hệ điều hành Window 7 Professional 64-bit
- CPU: Intel core i7-2760QM 2.4GHz
- RAM: 8 GB
Nếu bạn là người hoàn toàn mới tiếp xúc và bắt đầu nghiên cứu về mô phỏng cho các thiết kế vi mạch hoặc FPGA. Bạn hãy tải và chạy thử một vài ví dụ trong bài viết hướng dẫn về QuestaSim ở trên trước khi đọc bài viết này.
Tại sao dùng QuestaSim? Tác giả không dùng các phần mềm mô phỏng khác như VCS (Synopsys) hoặc Incisive, Xcelium (Cadence) mà dùng QuestaSim (hoặc ModelSim) vì nó dễ tìm source và cài đặt.
2) Tải thư viện UVM ở đâu?
Sau khi cài QuestaSim, mặc định phần mềm có thể hỗ trợ thư viện UVM hoặc không. Tuy nhiên, thư viện UVM được hỗ trợ sẵn có thể không phải là phiên bản mới nhất. Để tải và sử dụng phiên bản mới nhất bạn cần vào trang web của Accellera và truy cập link sau:
Trong link trên bạn cần chú ý các mục sau:
- Current release: Phiên bản UVM mới nhất được công bố hiện tại.
- Previous releases: Các phiên bản UVM đã công bố trước đó.
Ở đây, tác giả không dùng phiên bản UVM mới nhất là UVM 2017 v1.0 mà sử dụng phiên bản UVM1.2 (2014-06). Các bạn hãy tải các phần sau:
- Code của thư viện ở link "Class Library Code", file: uvm-1.2.tar.gz
- Hướng dẫn của thư viện ở link "UVM User Guide", file: uvm_users_guide_1.2.pdf
- Mô tả chi tiết các class của thư viện ở link "Standard Universal Verification Methodology Class Reference", file: UVM_Class_Reference_Manual_1.2.pdf
Hình 1: Tải thư viện UVM và các hướng dẫn sử dụng |
Sau khi giải nén thư viện UVM bạn sẽ có được thư mục uvm-1.2 như sau:
3) Làm thế nào sử dụng thư viện UVM trên QuestaSim?
Tạo một file ví dụ có nội dung như sau:
Ví dụ 1: Ví dụ cơ bản sử dụng thư viện UVM
Nhấp chuột vào dòng ảnh báo lỗi bạn có thể thấy các thông điệp lỗi như sau:
** Error: D:/4.Blog/uvm/hello_world.sv(2): Cannot open `include file "C:/questasim64_10.2c/ovm-2.1.2/../verilog_src/ovm-2.1.2/src/uvm.sv".
** Error: D:/4.Blog/uvm/hello_world.sv(7): (vlog-2163) Macro `uvm_component_utils is undefined.
** Error: D:/4.Blog/uvm/hello_world.sv(7): near "(": syntax error, unexpected '(', expecting function or task
Lý do là vì QuestaSim sẽ không hiểu các thành phần của UVM. Trường hợp dùng GUI, hoạt động Compile/Compile Selected đã chọn tương đương với việc thực thi một lệnh trong cửa sổ Transcript của QuestaSim như sau:
vlog -work work -vopt -sv D:/4.Blog/uvm/hello_world.sv
Trong đó:
do run.do
Lưu ý, các bạn hãy thay đoạn lệnh sau bằng đường dẫn thư mục UVM1.2 trên máy tính của bạn.
+incdir+C:/questasim64_10.2c/uvm-1.2/src
Sau khi chạy các lệnh trên, QuestaSim sẽ hiện lên 1 của sổ báo hoàn thành quá trình mô phỏng, hãy chọn "No". Nếu bạn chọn "Yes", trình mô phỏng QuestaSim sẽ đóng.
Quan sát kết quả trên Transcript của QuestaSim, bạn sẽ thấy có đoạn sau:
UVM_INFO @ 0: reporter [RNTST] Running test hello_world...
# UVM_INFO C:/questasim64_10.2c/uvm-1.2/src/base/uvm_traversal.svh(279) @ 0: reporter [UVM/COMP/NAMECHECK] This implementation of the component name checks requires DPI to be enabled
# UVM_INFO hello_world.sv(14) @ 0: uvm_test_top [WARNING] HELLO WORLD
# UVM_INFO C:/questasim64_10.2c/uvm-1.2/src/base/uvm_report_server.svh(847) @ 0: reporter [UVM/REPORT/SERVER]
# --- UVM Report Summary ---
#
# ** Report counts by severity
# UVM_INFO : 4
# UVM_WARNING : 0
# UVM_ERROR : 0
# UVM_FATAL : 0
# ** Report counts by id
# [RNTST] 1
# [UVM/COMP/NAMECHECK] 1
# [UVM/RELNOTES] 1
# [WARNING] 1
#
Hãy chú ý đến các vị trí tô đỏ, các vị trí này thể hiện kết quả từ ví dụ hello_world.sv.
Chú ý, nếu bạn gặp vấn đề về việc thiếu C/C++ compiler hãy đọc bài viết hướng dẫn cài đặt QuestaSim.
Lịch sử cập nhật:
1) 2019.July.31 - Thêm chú ý về việc cài đặt C/C++compiler
- bin: Chứa một số script perl
- docs: Hướng dẫn về các class của UVM, nội dung như file UVM_Class_Reference_Manual_1.2.pdf
- examples: Ví dụ chạy trên phần mềm VCS
- src: Toàn bộ source code của thư viện UVM
- release-notes: Liệt kê tất cả các điểm mới cập nhật của phiên bản này so với phiên bản trước đó
- UVM_reference.html: Hướng dẫn về các class của UVM như trong thư mục docs.
Hình 2: Thư mục thư viện UVM1.2 |
Tạo một file ví dụ có nội dung như sau:
Ví dụ 1: Ví dụ cơ bản sử dụng thư viện UVM
//Include UVM library
`include "uvm.sv"
import uvm_pkg::*;
//Create the example class
class hello_world extends uvm_test;
//Register hello_world to Factory
`uvm_component_utils (hello_world)
//constructor
function new (string name = "hello_world", uvm_component parent);
super.new(name, parent);
endfunction //
virtual task run_phase (uvm_phase phase);
`uvm_info("WARNING", "HELLO WORLD", UVM_LOW);
endtask: run_phase
endclass: hello_world
//
//Call and run hello_world
//
module tb;
//
initial begin
run_test ("hello_world");
end //
endmodule: tbNội dung của ví dụ trên được lưu trong một file tên hello_world.sv gồm các thành phần sau:
- Gọi và sử dụng các thành phần thư viện UVM ở khai báo include và import
- Tạo một class mở rộng từ uvm_test để in ra dòng "HELLO WORLD". Class này giống như một test.
- Tạo module để chạy test hello_world.
Hình 3: Lỗi khi compile bằng GUI |
** Error: D:/4.Blog/uvm/hello_world.sv(2): Cannot open `include file "C:/questasim64_10.2c/ovm-2.1.2/../verilog_src/ovm-2.1.2/src/uvm.sv".
** Error: D:/4.Blog/uvm/hello_world.sv(7): (vlog-2163) Macro `uvm_component_utils is undefined.
** Error: D:/4.Blog/uvm/hello_world.sv(7): near "(": syntax error, unexpected '(', expecting function or task
Lý do là vì QuestaSim sẽ không hiểu các thành phần của UVM. Trường hợp dùng GUI, hoạt động Compile/Compile Selected đã chọn tương đương với việc thực thi một lệnh trong cửa sổ Transcript của QuestaSim như sau:
vlog -work work -vopt -sv D:/4.Blog/uvm/hello_world.sv
Trong đó:
- vlog là lệnh compile
- -work work là option tạo ra thư viện làm việc tên work sau khi compile. Thư viện này nằm bên của sổ Library.
- -sv D:/4.Blog/uvm/hello_world.sv là option chỉ ra cho QuestaSim biết vị trí file code System Verilog
Để compile và chạy file hello_world.sv với thư viện UVM1.2 đã chuẩn bị phía trên. Các bạn thực hiện theo thứ tự các lệnh sau trên của sổ Transcript của QuestaSim:
#Compile
vlog -work work -sv hello_world.sv +incdir+C:/questasim64_10.2c/uvm-1.2/src +define+UVM_CMDLINE_NO_DPI +define+UVM_REGEX_NO_DPI +define+UVM_NO_DPI
#Simulate
vsim -novopt work.tb
#Running
run 1ns
Hoặc bạn lưu tất cả lệnh trên vào 1 file text ,ví dụ như run.do, sau đó chạy lệnh sau trên cửa sổ Transcript của QuestaSim:
do run.do
Lưu ý, các bạn hãy thay đoạn lệnh sau bằng đường dẫn thư mục UVM1.2 trên máy tính của bạn.
+incdir+C:/questasim64_10.2c/uvm-1.2/src
Sau khi chạy các lệnh trên, QuestaSim sẽ hiện lên 1 của sổ báo hoàn thành quá trình mô phỏng, hãy chọn "No". Nếu bạn chọn "Yes", trình mô phỏng QuestaSim sẽ đóng.
Hình 4: Cửa số báo quá trình mô phỏng đã hoàn tất |
UVM_INFO @ 0: reporter [RNTST] Running test hello_world...
# UVM_INFO C:/questasim64_10.2c/uvm-1.2/src/base/uvm_traversal.svh(279) @ 0: reporter [UVM/COMP/NAMECHECK] This implementation of the component name checks requires DPI to be enabled
# UVM_INFO hello_world.sv(14) @ 0: uvm_test_top [WARNING] HELLO WORLD
# UVM_INFO C:/questasim64_10.2c/uvm-1.2/src/base/uvm_report_server.svh(847) @ 0: reporter [UVM/REPORT/SERVER]
# --- UVM Report Summary ---
#
# ** Report counts by severity
# UVM_INFO : 4
# UVM_WARNING : 0
# UVM_ERROR : 0
# UVM_FATAL : 0
# ** Report counts by id
# [RNTST] 1
# [UVM/COMP/NAMECHECK] 1
# [UVM/RELNOTES] 1
# [WARNING] 1
#
Hãy chú ý đến các vị trí tô đỏ, các vị trí này thể hiện kết quả từ ví dụ hello_world.sv.
Chú ý, nếu bạn gặp vấn đề về việc thiếu C/C++ compiler hãy đọc bài viết hướng dẫn cài đặt QuestaSim.
Lịch sử cập nhật:
1) 2019.July.31 - Thêm chú ý về việc cài đặt C/C++compiler
0 bình luận:
Đăng nhận xét