SystemVerilogお勉強(2)

とりあえず、Vivado環境でサンプルコードを動かしてみよう。

サンプルコード

とりあえず、サンプルを触る。

/opt/Xilinx/Vivado/2017.2/examples/xsim/systemverilog/dpi

simple_export simple_import

simple_import

importを試してみましょう。

cp -R /opt/Xilinx/Vivado/2017.2/examples/xsim/systemverilog/dpi/simple_import/ .
cd simple_import/

ソースコードを見てみよう

さて、ソースコードでもチェックしてみよう。

function.c

function.cはmyFunction()を呼びだされたら5を返すようですね。

#include "svdpi.h"

DPI_DLLESPEC
int myFunction()
{
    return 5;
}

file.sv

file.svはmyFunction()を呼び出して、戻り値が5かチェックして終わっちゃうようです。

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

以下、結果ですねん。

$ xsc function.c
Multi-threading is on. Using 10 slave threads.
Running compilation flow
Waiting for 1 sub-compilation(s) to finish...
0 sub-compilation(s) remaining...
Done compilation
Done linking: "/simple_import/xsim.dir/xsc/dpi.so"
$ xvlog -svlog file.sv
INFO: [VRFC 10-2263] Analyzing SystemVerilog file "/simple_import/file.sv" into library work
INFO: [VRFC 10-311] analyzing module m
$ xelab work.m -sv_lib dpi -R
Vivado Simulator 2017.2
Copyright 1986-1999, 2001-2016 Xilinx, Inc. All Rights Reserved.
Running: /opt/Xilinx/Vivado/2017.2/bin/unwrapped/lnx64.o/xelab work.m -sv_lib dpi -R
Multi-threading is on. Using 10 slave threads.
Starting static elaboration
Completed static elaboration
Starting simulation data flow analysis
Completed simulation data flow analysis
Time Resolution for simulation is 1ps
Compiling module work.m
Built simulation snapshot work.m

****** Webtalk v2017.2 (64-bit)
  **** SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017
  **** IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017
    ** Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.

INFO: [Common 17-1460] Use of init.tcl in /opt/Xilinx/Vivado/2017.2/scripts/init.tcl is deprecated. Please use Webtalk_init.tcl
Sourcing tcl script '/opt/Xilinx/Vivado/2017.2/scripts/init.tcl'
invalid command name "enable_beta_device*"
    while executing
"enable_beta_device*"
    (file "/opt/Xilinx/Vivado/2017.2/scripts/init.tcl" line 1)
INFO: [Common 17-206] Exiting Webtalk at Mon Jul 31 11:14:59 2017...

****** xsim v2017.2 (64-bit)
  **** SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017
  **** IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017
    ** Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.

INFO: [Common 17-1460] Use of init.tcl in /opt/Xilinx/Vivado/2017.2/scripts/init.tcl is deprecated. Please use xsim_init.tcl
Sourcing tcl script '/opt/Xilinx/Vivado/2017.2/scripts/init.tcl'
invalid command name "enable_beta_device*"
    while executing
"enable_beta_device*"
    (file "/opt/Xilinx/Vivado/2017.2/scripts/init.tcl" line 1)
INFO: [Common 17-206] Exiting xsim at Mon Jul 31 11:15:04 2017...
$

また、イリーガルなことをやっちまった。

ESデバイスを使えるように"enable_beta_device*"をVivadoの起動時に実行するようにしてるんだけど、「コマンドがダメェ〜!!!」って言ってますよ。

あのなぁ〜

とりあえず、ESデバイスの指定は取り除いて・・・

$ xelab work.m -sv_lib dpi -R
Vivado Simulator 2017.2
Copyright 1986-1999, 2001-2016 Xilinx, Inc. All Rights Reserved.
Running: /opt/Xilinx/Vivado/2017.2/bin/unwrapped/lnx64.o/xelab work.m -sv_lib dpi -R
Multi-threading is on. Using 10 slave threads.
Starting static elaboration
Completed static elaboration
Starting simulation data flow analysis
Completed simulation data flow analysis
Time Resolution for simulation is 1ps
Compiling module work.m
Built simulation snapshot work.m

****** xsim v2017.2 (64-bit)
  **** SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017
  **** IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017
    ** Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.

source xsim.dir/work.m/xsim_script.tcl
# xsim {work.m} -autoloadwcfg -runall
Vivado Simulator 2017.2
Time resolution is 1 ps
run -all
PASSED
$finish called at time : 1 ns : File "/simple_import/file.sv" Line 16
exit
INFO: [Common 17-206] Exiting xsim at Mon Jul 31 11:18:19 2017...
$

はい、OKでした。

PASSEDが表示されたからOKってことでいいかしら?

だから、インド式なんだよなぁ〜。

これでESデバイスを有効にするのを忘れて、ESデバイスを合成して怒られるんでしょ?

たまったもんじゃない。