# DPI-C và C++

Ví vụ về sử dụng DPI-C để gọi một hàm C++ bên ngoài từ một module System Verilog.

test.sv

module main;
    // khai báo một hàm c_main trong DPI-C 
    import "DPI-C" function void c_main(int argc, input string argv[]);
    initial begin
      string argv_str[3] = {"1","2","3"};
      c_main(3, argv_str);
    end
endmodule

dpi_exmpale.cpp

#include <svdpi.h>
#include <iostream>

// định nghĩa của hàm c_main
extern "C" void c_main(int argc, svOpenArrayHandle argv) {
    const char** argv_ptr = static_cast<const char**>(svGetArrayPtr(argv));
    
    std::cout << "Number of arguments: " << argc << std::endl;

    for (int i = 0; i < argc; ++i) {
        std::cout << "Argument " << i << ": " << argv_ptr[i] << std::endl;
    }
}

Hai tham số: argc và argv

  • argc (argument count): Đây là số lượng tham số được truyền vào hàm.
  • argv (argument vector): Đây là một mảng chứa các con trỏ chuỗi (C-strings) đến các tham số cụ thể truyền vào chương trình từ dòng lệnh. Các tham số này được lưu trữ dưới dạng chuỗi.

Kết quả:

Number of arguments: 3
Argument 0: 1
Argument 1: 2
Argument 2: 3