FC2カウンター FPGAの部屋 Vivado シミュレータのDPI-C その2

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado シミュレータのDPI-C その2

Vivado シミュレータのDPI-C その1”の続き。

前回は、DPI のexample の simple_import をやってみた。今回は、simple_export をやってみよう。

今回も、aster_ismの工作室さんの”Vivado SimulatorによるDPI-Cシミュレーション”を参考にさせて頂く。

VirtualBox 上のUbuntu 16.04 の /opt/Xilinx/Vivado/2016.4/examples/xsim/systemverilog/dpi/simple_export ディレクトリがある。
DPI_examples_1_170809.png

やはり、README と file.sv, function.c, run.csh があった。
README を引用する。

Steps
-----
1. Run the setup for Xilinx executables.
2. Check if the executables "xsc" and "xelab" are in your PATH.
3. Invoke run.csh

This example shows a simple DPI-C export usage. The System Verilog code (file.sv)
calls a function "cFunc" defined in function.c that in turn calls a function "svFunc" which is
defined on the SV side in the file file.sv.
1. First the xvlog/xelab combination is run to generate the header dpi.h that is included
in the function.c
2. Then the C code is compiled using xsc to create a dll in directory xsim.dir/xsc/dpi.so.
3. This dll is then linked into when using "xelab" to compile the file.sv

The return value is checked by the System Verilog code triggering a "PASSED" output for a valid run.


function.c を引用する。


#include "dpi.h"

int cFunc(int x)
{
  return svFunc(x) ;
}

// XSIP watermark, do not delete 67d7842dbbe25473c3c32b93c0da8047785f30d78e8a024de1b57352245f9689


file.sv を引用する。


module TOP();

  export "DPI-C" function svFunc ; 

  int svValue ;

  function int svFunc(input int x) ;
    svValue = x + 1 ;
    return svValue + 3 ;
  endfunction

  import "DPI-C" function int cFunc(input int x) ;

  int result ;
  
  initial
  begin
    svValue = 15 ;
    result = cFunc(3) ;
    if (svValue != 4)
    begin
      $display("FAILED") ;
      $finish ;
    end
    if (result == 7)
      $display("PASSED") ;
    else
      $display("FAILED") ;
  end

endmodule


前回の simple_import では、C の関数を呼び出して、その値を使用するだけだったのだが、simple_export では、呼び出したC の関数からSystemVerilog の関数を呼び出している。

run.csh を引用する。

#!/bin/csh -xvf
xvlog -sv file.sv
xelab TOP -dpiheader dpi.h
xsc function.c
xelab TOP -sv_lib dpi -R


Ubuntu 16.04 上で、/opt/Xilinx/Vivado/2016.4/examples/xsim/systemverilog/dpi/simple_export ディレクトリを ~/DPI_examples ディレクトリにコピー&ペーストして、そのディレクトリの中の./run.csh を起動した。
DPI_examples_3_170809.png
DPI_examples_4_170809.png
DPI_examples_5_170809.png

PASSED が表示されたので成功だ。

~/DPI_examples/simple_export ディレクトリには、やはり、いろいろなファイルが生成されている。
DPI_examples_2_170809.png
  1. 2017年08月11日 05:21 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3882-37cd5f8b
この記事にトラックバックする(FC2ブログユーザー)