使用 -sv_lib、-sv_liblist 和 -sv_root 的导入示例 - 2023.2 简体中文

Vivado Design Suite 用户指南: 逻辑仿真 (UG900)

Document ID
UG900
Release Date
2023-10-18
Version
2023.2 简体中文

代码

假定存在:

  • 两个文件,每个文件包含一个 C 语言函数
  • 一个 SystemVerilog 文件,它使用下列函数:
    • function1.c
    • function2.c
    • file.sv

function1.c

#include "svdpi.h"
DPI_DLLESPEC
int myFunction1()
{
    return 5;
}

function2.c

#include <svdpi.h>
DPI_DLLESPEC
int myFunction2()
{
    return 10;
}

file.sv

module m();
import "DPI-C" pure function int myFunction1 (); 
import "DPI-C" pure function int myFunction2 ();
integer i, j;
initial
begin
#1;
  i = myFunction1();
  j = myFunction2();
  $display(i, j);
  if( i == 5 && j == 10)
    $display("PASSED");
  else
    $display("FAILED");
end
endmodule

用法

将 C 语言文件编译和链接到 Vivado 仿真器内的方法如下所述。

单步骤流程(最简单的流程)

xsc function1.c function2.c
xelab -svlog file.sv -sv_lib dpi

流程描述:

xsc 编译器会编译并链接 C 语言代码以创建共享库 xsim.dir/xsc/dpi.so,xelab 则通过 -sv_lib 开关来引用此共享库。

双步骤流程

xsc -compile function1.c function2.c -work abc
xsc -shared/-shared_systemc abc/function1.lnx64.o abc/function2.lnx64.o -work abc 
xelab -svlog file.sv -sv_root abc -sv_lib dpi -R

流程描述:

  • 将两个 C 语言文件编译到工作目录 abc 中的对应对象代码内。
  • 将这两个文件链接在一起,以创建共享库 dpi.so
  • 确保通过 -sv_root 开关从工作库 abc 中提取此库。
    提示: -sv_root 会指定查找通过 -sv_lib 开关指定的共享库的位置。在 Linux 上,如果未指定 -sv_root 并且 DPI 库名称带有前缀 lib 和后缀 .so,那么请为共享库位置使用 LD_LIBRARY_PATH 环境变量。

双步骤流程(与上述流程相同但附加多个选项)

xsc -compile function1.c function2.c -work "abc" -v 1
xsc -shared/-shared_systemc "abc/function1.lnx64.o" "abc/function2.lnx64.o" -work "abc" -o final -v 1 
xelab -svlog file.sv -sv_root "abc" -sv_lib final -R

流程描述:

如果您要自行进行编译和链接,可以使用 -verbose 开关来查看用于调用编译器的路径和选项。随后,您可根据自己的需求对此路径和选项进行调整。在以上示例中,创建了一个专用共享库 final。此示例还演示了文件路径中空格的用法。