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

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

FPGAの部屋

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

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

Vivado シミュレータでDPI (Direct Programming Interface)をやってみることにした。

参考にするのは、aster_ismの工作室さんの”Vivado SimulatorによるDPI-Cシミュレーション”だ。
Vivado SimulatorによるDPI-Cシミュレーション”によるとVivado シミュレータのDPI のサンプルが /opt/Xilinx/Vivado/バージョン番号/examples/xsim/systemverilog/dpi/ にあるそうだ。

VirtualBox 上のUbuntu 16.04 の /opt/Xilinx/Vivado/2016.4/examples/xsim/systemverilog/dpi/ に行ってみると、simple_import と simple_export の2つのディレクトリがあった。
DPI_examples_11_170809.png

そのうちの simple_import ディレクトリの中に入ってみた。
DPI_examples_6_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 import usage. The System Verilog code (file.sv)
calls a function "myFunction" that is defined on the C side in the file function.c.
The C code is compiled using xsc to create a dll in directory xsim.dir/xsc/dpi.so.
This dll is then linked into when using "xelab" to compile the file.sv
You could use your own compiler (gcc) for compiling and creating a dll.
myFunction() call into the C code returns an C integer value of 5 which is then checked
by the System Verilog code triggering a "PASSED" output for a valid run.


function.c を引用する。


#include "svdpi.h"

DPI_DLLESPEC
int myFunction()
{
    return 5;
}


// XSIP watermark, do not delete 67d7842dbbe25473c3c32b93c0da8047785f30d78e8a024de1b57352245f9689


file.sv を引用する。


module m();

import "DPI-C" pure function int myFunction ();

int i;

initial
begin
#1;
  i = myFunction();
  if( i == 5)
    $display("PASSED");
  else
    $display("FAILED");
  $finish();
end


endmodule


最後に run.csh を引用する。

#!/bin/csh -xvf
xsc function.c
xvlog -svlog file.sv
xelab work.m -sv_lib dpi -R


run.csh のコマンドについては、”Vivado Design Suite ユーザー ガイド ロジック シ ミ ュレーシ ョ ン UG900 (v2017.1) 2017 年 4 月 5 日”の 171 ページの”付録 D Vivado シミュレータのダイレクト プログラミング インターフェイス (DPI)”に書いてある。
そこから引用する。

xsc コ ンパイ ラ を使用する と、 1 つまたは複数の C フ ァ イルから共有ラ イブラ リ (Windows の場合は .a、 Linux の場合は .so) を作成でき ます。


xvlog はSystemVerilog を解析するパーサーのようだ。
xelab はシミュレータ・コンパイラで、HDL モデルがスナップショットにコンパイルされるそうだ。

さて、Ubuntu 16.04 上で、/opt/Xilinx/Vivado/2016.4/examples/xsim/systemverilog/dpi/simple_import ディレクトリを ~/DPI_examples ディレクトリにコピー&ペーストして、そのディレクトリの中の./run.csh を起動してみた。
最初に csh がインストールされていなかったので、sudo apt-get install csh でインストールした。
DPI_examples_8_170809.png
DPI_examples_9_170809.png
DPI_examples_10_170809.png

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

なお、 ~/DPI_examples/simple_import ディレクトリはいろいろなファイルが生成されている。
DPI_examples_7_170809.png
  1. 2017年08月10日 04:33 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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