Bài viết này hướng dẫn cách cài đặt và sử dụng thư viện SystemC UVM (Universal Verification Methodology) và SCV phục vụ cho việc xây dựng môi trường mô phỏng UVM-SystemC.
Danh sách các bài viết liên quan:
1) Tổng quan
Để xây dựng một môi trường mô phỏng UVM với SystemC chúng ta cần các thành phần thư viện như sau:
- Thư viện SystemC (SystemC Library) - Thư viện xây dựng trên ngôn ngữ C/C++ chứa và định nghĩa các class, method, kiểu dữ liệu và nhân mô phỏng (simulation kernel) cơ sở dùng cho việc mô hình hóa hệ thống gồm cả phần cứng và phần mềm.
- Thư viện các thành phần UVM (UVM-SystemC Library) - Thư viện chứa các class, method, và kiểu dữ liệu dùng để tạo các thành phần cho môi trường mô phỏng theo phương pháp UVM
- Thư viện SCV (SystemC Verification Library) - Thư viện chứa một tập các API (Application Programming Interface) chung dùng cho các hoạt động kiểm tra trên SystemC như tạo các giá trị ràng buộc, ghi chép lại transaction, ...
Các thưc viện trên có thể tải miễn phí với mã nguồn mở tại website của Accellera ở các liên kết sau đây:
Các bước cơ bản để cài đặt và sử dụng các thư viện của SystemC như sau:
- Tìm hiểu các ràng buộc về cài đặt và đặc điểm hỗ trợ của thư viện, xem trong file INSTALL, README và RELEASENOTES của gói cài đặt, như:
- Phiên bản hệ điều hành (OS), để biết thư viện hoạt động tốt (đã được kiểm tra) trên nền tảng nào
- Phiên bản trình biên dịch (compiler C/C++), để biết thư viện có thể được tổng hợp tốt (đã được kiểm tra) với trình biên dịch nào
- Thư viện liên kết, để biết thư viện này sẽ yêu cầu cần có thư viện nào khác hay không? hoặc thư viện này có thể hoạt động chung với thư viện nào khác hay không?
- Chuẩn bị môi trường cài đặt chứa các phần mềm (tool) đúng với yêu cầu của thư viện gồm
- Hệ điều hành
- Cài đặt các công vụ liên quan:
- make/gmake: https://www.gnu.org/software/make/
- gcc: https://gcc.gnu.org/
- Lưu ý, các bạn có thể dùng các phần mềm và công cụ như hệ điều hành, trình biên dịch, ... khác với phiên bản mà thư viện yêu cầu nhưng điều này không được đảm bảo (non-offical) vì việc kiểm tra trên các nền tảng này chưa được thực hiện đầy đủ
- Cài đặt thư viện
- Tải gói cài đặt và giải nén
- Tạo thư mục sẽ chứa dữ liệu sau khi cài đặt
- Tiến hành cài đặt (Thư viện SystemC phải được cài đặt đầu tiên trước các gói thư viện khác)
2) Môi trường cài đặt
Môi trường cài đặt và sử dụng các thư viện SystemC dùng để minh họa trong bài viết này có thông số như sau:
- Hệ điều hành Windows 7 Professional 64-bit
- Cygwin terminal 3.1.2, phiên bản 32-bit, chúng ta không dùng phiên bản Cygwin 64-bit vì việc chạy mô phỏng file .exe sau khi biên dịch code SystemC không như mong muốn như đã trình bày trong bài viết
- Công cụ giải nén: tar phiên bản 1.29
- Công cụ tạo các file thực thi và cấu hình từ mã nguồn: make phiên bản 4.2.1
- Trình biên dịch C/C++: gcc phiên bản 7.4.0
Các gói thư viện được sử dụng:
- Thư viện SystemC phiên bản 2.3.3 (systemc-2.3.3)
- Đây không phải phiên bản mới nhất, phiên bản mới nhất là 2.3.3 tính đến ngày 28.12.2019 nhưng không được sử dụng vì phiên bản mới nhất của SCV không hỗ trợ
- Thư viện SystemC-UVM phiên bản 1.0-beta2 (uvm-systemc-1.0-beta2)
- Mới nhất, tính đến ngày 28.12.2019
- Thư viện SCV phiên bản 2.0.1 (scv-2.0.1)
- Mới nhất, tính đến ngày 28.12.2019
Mọi lệnh được trình bày sau đây đều thực hiện trên Cygwin terminal. Các bạn hãy tham khảo cách cài đặt và sử dụng chi tiết ở bài viết sau.
3) Cài đặt thư viện SystemC
Hướng dẫn này đã được trình bày trong bài viết sau đây nên sẽ không trình bày lại.
Hiện nay, phiên bản mới nhất là 2.3.3 tuy nhiên nó chưa được kiểm tra với thư viện SCV. Thư viện SCV mới nhất chỉ hỗ trợ tốt trên phiên bản 2.3.1, 2.3.0 và 2.2.0 tùy vào hệ điều hành.
Các nền tảng cài đặt được hỗ trợ gồm:
o Linux
* Architectures
- x86 (32-bit)
- x86_64 (64-bit)
- x86 (32-bit) application running on x86_64 (64-bit) kernel
(../configure --host=i686-linux-gnu)
o Mac OS X
* Architectures
- x86 (32-bit)
- x86_64 (64-bit)
- powerpc (32-bit) [deprecated]
- powerpc64 (64-bit) [deprecated]
o Solaris
* Architectures
- SPARC (32-bit)
o BSD
* Architectures
- x86 (32-bit)
- x86_64 (64-bit)
o Windows
* Compatibility layer
- Cygwin
- MinGW / MSYS
* Architectures
- x86 (32-bit)
- x86_64 (64-bit)
Trình biện dịch được hỗ trợ gồm:
- GNU C++ (gcc), phiên bản 3.4 trở lên
- Clang C++ phiên bản 3.0 trở lên
Giả sử sau khi cài đặt đường dẫn thư mục cài đặt thư viện SystemC của bạn là:
/cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/SystemC233_lib
Chú ý, đường dẫn này sẽ sử dụng cho các phần hướng dẫn tiếp theo.
4) Cài đặt thư viện SystemC-UVM
Lệnh:
mkdir UvmSystemC_lib
Kết quả: ví dụ đường dẫn thư mục đã tạo là:
/cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/UvmSystemC_lib
Lệnh:
tar -xzf uvm-systemc-1.0-beta2.tar.gz
Kết quả: thư mục chứa source cài đặt được tạo
uvm-systemc-1.0-beta2
Lệnh:
cd uvm-systemc-1.0-beta2
Nội dung thư mục source:
Hình 1: Thư mục source của thư viện SystemC-UVM |
4.4) Cấu hình cài đặt
Lệnh: khai báo đường dẫn thư mục cài đặt ở prefix và đường dẫn thư viện SystemC đã cài đặt trước đó ở --with-systemc
./configure --prefix=/cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/UvmSystemC_lib --with-systemc=/cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/SystemC233_lib
Kết quả: Nếu không có bất kỳ lỗi nào phát sinh trong quá trình cấu hình, bạn sẽ nhận được một bảng tóm tắt thông báo các thông tin cấu hình:
- Phiên bản thư viện UVM-SystemC 1.0-beta2
- Nền tảng cài đặt là i686-pc-cygwin
- Các thư mục đã được thiết lập cho việc cài đặt (Directory setup)
- Nền tảng cài đặt (Target architecture): cygwin
- Các thiết lập cho việc xây dựng (build) thư viện (Build settings)
4.5) Cài đặt thư viện
Nếu thư mục cài đặt đã được cài thư viện trước đó và đây là lần cài đặt lại thì cần thực thi lệnh sau để xóa bỏ dữ liệu cũ trước khi cài đặt:
make clean
Lệnh cài đặt:
make install
Kết quả: Thư mục cài đặt sẽ xuất hiện các thành phần của thư viện UVM-SystemC:
- docs: chứa các file hướng dẫn về thư viện UVM-SystemC
- examples: các source code để bạn có thể tham khảo
- include: các header (.h) file
- lib-cygwin: cấu hình sử dụng thư viện UVM-SystemC. Lưu ý, tên thư mục này sẽ khác nhau tùy nên tảng cài đặt. Ở đây, tác giả cài trên cygwin nên tên thư mục là lib-cygwin
Hình 3: Thư mục UvmSystemC_lib sau khi cài đặt |
Hình 4: Thông tin trên terminal khi kết thúc quá trình cài đặt thư viện UVM-SystemC |
5) Cài đặt thư viện SCV
5.2) Giải nén gói thư viện SCV ở một thư mục bất kỳ
5.1) Tạo thư mục để cài đặt (nếu muốn)
Lệnh:mkdir scv201_lib
Kết quả: ví dụ đường dẫn thư mục đã tạo là:
/cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/scv201_libLưu ý, bạn có thể không cần tạo thư mục này mà có thể cài thư viện SCV vào cùng thư mục với thư viện SystemC.
Lệnh:
tar -xzf scv-2.0.1.tar.gz
Kết quả: thư mục chứa source cài đặt được tạo
scv-2.0.15.3) Chuyển đến thư mục đã giải nén
Lệnh:
cd scv-2.0.1
5.4) Cấu hình cài đặt
Thư viện SCV phiên bản 2.0.1 không hỗ trợ gcc 7.4 và nền tảng cygwin. Trong script cấu hình cài đặt SCV, phiên bản hệ điều hành và trình biên dịch sẽ được kiểm tra. Nếu script phát hiện nền tảng hoặc trình biên dịch đang dùng không nằm trong danh sách được hỗ trợ, nó sẽ báo lỗi và không thực hiện việc cấu hình cài đặt.
Hình 6: Báo lỗi "not supported" với trình biên dịch gcc và nền tảng cygwin |
Để có thể sử dụng trên nền tảng Cygwin và trình biên dịch gcc 7.4, bạn cần chỉnh sửa lại script cấu hình trong thư mục mã nguồn, file scv-2.0.1/configure.
Đầu tiên, tìm đến dòng "checking for supported operating system" trong script, dòng 16109 và 16110. Bạn sẽ thấy đoạn code dưới đây:
case "$target_os" in solaris2.5*|solaris2.6|solaris2.7|solaris2.8|solaris2.9|solaris2.10|solaris2.11|hpux11*|linux-gnu|darwin* |mingw32)
Đoạn code trên liệt kê một danh sách các hệ điều hành và nền tảng được hỗ trợ như mingw32, linux-gnu, solaris2.5, ... và không có cygwin. Bạn hãy thêm cygwin vào danh sách kiểm tra này.
case "$target_os" in solaris2.5*|solaris2.6|solaris2.7|solaris2.8|solaris2.9|solaris2.10|solaris2.11|hpux11*|linux-gnu|darwin* |mingw32|cygwin)
Tiếp theo, tìm đến dòng 16084, bắt đầu với chuỗi ký tự SUPPORTED_CXX_VERSIONS, nội dung dòng này liệt kê các phiên bản gcc được hỗ trợ. Bạn cần thêm 7.4 vào danh sách này.
SUPPORTED_CXX_VERSIONS="(3.2|3.4|4.1|4.2|4.3|4.4|4.5|4.6|4.7|4.8|4.9|5.4|6.1|6.3|7.4)"
Sau đó, chạy lệnh cấu hình cài đặt với đường dẫn thư mục thư viện SystemC đã cài trước đó:
./configure --with-systemc=/cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/SystemC233_lib
Lệnh trên không chứa tùy chọn "--prefix" nên thư viện SCV sẽ được cài vào thư mục SystemC233_lib, chung với thư viện SystemC. Trong quá trình, script configure thực thi, bạn sẽ thấy hiệu quả của việc chỉnh sửa trên qua hai thông báo sau trên cygwin terminal:
checking for supported C++ compiler... gcc 7.4 is supported
checking for supported operating system... cygwin is supported
Lưu ý, việc gcc 7.4 và cygwin không có trong danh sách được hỗ trợ là bởi vì thư viện chưa được kiểm tra đầy đủ và toàn diện trên các nền tảng này. Việc chỉnh sửa để có thể cài đặt và sử dụng có thể gây ra lỗi "nào đó". Nếu bạn không muốn gặp rủi ro thì hãy cài đặt và sử dụng trên các nền tảng đã được khuyến cáo.
HÌnh 7: Hiển thị trên cygwin khi quá trình cấu hình cài đặt scv-2.0.1 kết thúc |
5.5) Cài đặt thư viện
Nếu thư mục cài đặt đã được cài thư viện trước đó và đây là lần cài đặt lại thì cần thực thi lệnh sau để xóa bỏ dữ liệu cũ trước khi cài đặt:
make clean
Tiếp theo, thực hiện một số chỉnh sửa ở file /scv-2.0.1/src/scv/scv_init_seed.cpp trước khi cài đặt như sau:
- Thêm "#define _BSD_SOURCE" vào đầu file
- Sửa dòng 52 từ " #include <time.h>" thành " #include <sys/time.h>"
Nếu các dòng trên không được chỉnh sửa, lỗi sau đây sẽ xuất hiện khi thực thi cài đặt:
Hình 8: Lỗi xuất hiện ở file scv_init_seed.cpp |
Biên dịch lại mã nguồn:
make
Hình 9: Thông điệp hiển thị trên cygwin sau khi kết thúc lệnh make |
Thực thi lệnh cài đặt:
make install
Kết quả: Trong thư mục /cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/SystemC233_lib/include sẽ có thư viện SCV gồm:
- scv.h
- scv/
Hình 10: Hiển thị trên cygwin sau khi kết thúc quá trình cài đặt SCV |
6) Kiểm tra các thư viện đã cài đặt
- Tải môi trường UVM-SystemC trên Github
- Vào thư mục apbUartUvmSystemC/sim, chỉnh sửa lại đường dẫn các thư viện và đường dẫn môi trườn trong file run.csh
setenv SYSTEMCLIB cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/SystemC233_lib
setenv UVMLIB cygdrive/d/20.Project/0.Library/001_SystemC/002_Lib/UvmSystemC_lib
setenv WDIR cygdrive/d/20.Project/3.Github/apbUartUvmSystemC
- Thực thi lệnh ./run.csh trong thư mục sim
- Kết quả: file testTop.exe được tạo ra và không có bất kỳ lỗi nào
Hình 11: Thư mục apbUartUvmSystemC/sim |
Dữ liệu có thể tải:
Lịch sử cập nhật:
1. 2019.Apr.29 - Tạo lần đầu
Danh sách tác giả:
1. Trương Công Hoàng Việt
2. Lê Hoàng Vân
3. Nguyễn Hùng Quân
Mình không hiểu tại sao phải dùng SystemC trong khi đã có System Verilog và Verilog?
Trả lờiXóaBạn có thể tham khảo ở bài viết này.
Xóahttp://nguyenquanicd.blogspot.com/2019/04/systemchigh-level-designbai-1-hld-la-gi.html?m=1
Nó giúp thời gian phát triển một sản phẩm mới nhanh hơn. Nhờ SystemC, driver và phần mềm ứng dụng có thể được phát triển sớm mà không cần chờ phần cứng (chip) hoàn thành