Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

NVIDIAがGPUのKernel Modulesを公開したので、ソースコード解析をしてみる(その2)

はじめに

NVIDIAGPUのKernel Modulesを公開したので、ソースコード解析をしてみる、(その2)

今回は、GSP (GPU System Processor)。GPSについては、ここにちょっと書いてあった。

download.nvidia.com

www.tomshardware.com

www.phoronix.com

また、こんな記事もあった。

wccftech.com

NVIDIA GSP may be modeled after the RISC-V Falcon microcontroller, first introduced by NVIDIA in 2016.

ということで。RISC-V&Falcon上で動くソフトウェアなんですね。

ソースコードのどこ?

ソースコードは、ここ。

  • ampere : ga100, ga102
  • turing : tu102

github.com

kernel_gsp.c を覗いてみたら、

  • _kgspRpcSendMessage : GSP client RM RPC send routine
  • _kgspRpcRunCpuSequencer

おわりに

ソースコードには、GSP (GPU System Processor) もありました。

NVIDIAがGPUのKernel Modulesを公開したので、ソースコード解析をしてみる(その1)

はじめに

NVIDIAGPUのKernel Modulesを公開したので、ソースコード解析をしてみる、(その1)

NVIDIAGPUのKernel Modulesのソースコードを公開しました。

developer.nvidia.com

ということで、久しぶりに、ソースコード解析をしたいと思います。今回は、ざっくり、わかったこと。。

公開されたソースコード

ソースコードは、github にて公開されています。

github.com

どのGPUソースコードが公開された?

では、どのGPUソースコードが公開されたのでしょうか?

下記のところには、

  • ampere
  • maxwel
  • turing

があります。

github.com

  • ampere は、ga100
  • maxwell は、gm107
  • turing は、tu102

Falcon/RISC-V

Falconにアクセスするためのコードも含まれています。

  • ampere は、ga100 と ga102
  • turing は、tu102

github.com

PCIe Switch

PCIe Switch としては、PLXが有名ですが、下記のコードの中には、

  • NVIDIA : BR03, BR04
  • PLX : 87xx and 97xx
  • PMC Sierra : 85xx and 40xx
  • MELLANOX : CX6 PCIe bridge

の4社がリストアップされています。

github.com

Hardware Broadcast なるものがありました。ここにも

この資料によると

おわりに

明日も、いろいろ見ていきます。

Xilinx xsim で Software Driven Verification ができるっぽい (その5)

はじめに

Xilinx xsim で Software Driven Verification ができるっぽい の5回目。

下記のツイートのアンケートの結果から、5/22(日)、14:00-16:00 に雑談会をやることにしました。

XilinxのxsimでSoftware Driven Verificationの雑談会

connpass.com

Xilinxのxsim(HDLシミュレータ)でSoftware Driven Verificationの雑談会です。

Google Meetにて、

前半、1時間 @Vengineer が Xilinxのxsim(HDLシミュレータ) で Software Driven Verification について、説明します。
後半は前半で時間切れになり、継続して雑談したい場合のみ行います。(Google Meetは1時間で切れるという理由もあります)

後半、1時間
にて、行います。

参加者には、別途、Google Meet の URL をメールにて、ご連絡します。

おわりに

まだ、資料作っていないのです。。。

Xilinx xsim で Software Driven Verification ができるっぽい (その4)

はじめに

Xilinx xsim で Software Driven Verification ができるっぽい の4回目。

今回は、例題を見ていきます。

Vivado (2021.2) をインストールすると、examples/xsim/verilog/xsi/counter が Xilinx Simulator Interface の例題です。

ディレクトリの中身

$ ls counter.prj counter.v README run.bat run.csh set_env.csh testbench.cpp xsi_loader.cpp xsi_loader.h xsi_shared_lib.h

  • counter.prj : xelab のプロジェクトファイル
  • counter.v : verilog HDL コード
  • README : to do
  • run.bat : Windowsでのバッチファイル
  • run.csh : linux でのスクリプトファイル (csh)
  • set_env.csh : 環境設定ファイル
  • testbench.cpp : テストベンチのソースファイル
  • xsi_loader.cpp : Xilinx Simulator Interface の C++ ラッパーファイル
  • xsi_loader.h : Xilinx Simulator Interface の C++ ヘッダファイル
  • xsi_shared_lib.h : 共有ライブラリのラッパーファイル

to do

Linux では、

source set_env.csh
./run.csh

を実行すればいい。csh がインストールされていないときは、インストールする必要があります。

run.csh 内で、run_simulation を生成し、run_simulation を実行します。LD_LIBRARY_PATHに、${VIVADO_HOME}/lib/lxn64.o を追加する必要あり。

./run_simulation
Design DLL     : xsim.dir/counter/xsimk.so
Sim Engine DLL : librdi_simulator_kernel.so
Simulation time: 30

 *** starting to count ***
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
ERROR info @"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"
@"Counter++
"


 *** done counting ***
Total successful checks: 15
PASSED test

Ubuntu では動きました。。。

おわりに

4回に分けて、Xilinx Simulator Interface を使うことにより、Xilinx xsim で、Software Driven Verification ができるんじゃないかな?と思いました。

Xilinx xsim で Software Driven Verification ができるっぽい (その3)

はじめに

Xilinx xsim で Software Driven Verification ができるっぽい の3回目。

今回は、Xilinx Simulator Interface を使って、どうやってシミュレーションをするのかをみていきます。

クロックのドライブ

下記は、loader の中で Xilinx Simulator Interface の API をラッピングしたものです。. 以下は API 名になります。

クロック(clk) に 1 => シミュレーション => 0 にするには、下記のようなコードになります。

    const s_xsi_vlog_logicval one_val  = {0X00000001, 0X00000000};
    const s_xsi_vlog_logicval zero_val = {0X00000000, 0X00000000};

    int clk = loader.get_port_number("clk");
    loader.put_value(clk, &one_val); // set clk to 1
    loader.run(5);
    loader.put_value(clk, &zero_val); // set clk to 1
    loaderrun(5);

one_val と zero_val は、Vivado Simulator Verilog Data Format になります。

typedef struct t_xsi_vlog_logicval {
    XSI_UINT32 aVal;
    XSI_UINT32 bVal;
} s_xsi_vlog_logicval, *p_xsi_vlog_logicval;

信号のリードとライト

各信号へのリートおよびライトは、上記のクロックと同じようにします。

ただし、ベクター値の場合は、上記の one_val / zero_val ではなく、ベクター値に対応した値にする必要があります。

信号へのライトは、クロック(clk) に 1 をライトした後、xsi_run 関数にて時間を進めた後、データにライトおよびリードすることになります。

おわりに

次回は、例題を見てみます。

Xilinx xsim で Software Driven Verification ができるっぽい (その2)

はじめに

昨日のブログでは、Xilinx xsim で Software Driven Verification ができるっぽいということを書きました。

Xilinx Simulator Interface を使えば、Verilator での C++ を使ったケースと同じような感じにすればいいのでは?と思った次第です。

Xilinx Simulator Interface

docs.xilinx.com

APIは、次のようなもので、かなり簡単なものの

  • xsi_load で データベースからDesignを取り出す
  • xsi_open でシミュレーションのオープン
  • xsi_get_port_number でポート名からポート番号を取り出す
  • xsi_get_value でポート番号の信号にデータをリード
  • xsi_put_value でポート番号の信号にデータをライト
  • xsi_trace_all で信号のダンプ
  • xsi_run で、シミュレーションを進める
  • xsi_get_time でシミュレーション時間を得る
  • xsi_restart で、シミュレーションのリセット
  • xsi_close で終了

xsi_load 関数では、第1引数がデザイン、第2引数がシミュレータエンジン。

xsi_loader("xsim.dir/mySnapshot/xsimk.so","librdi_simulator_kernel.so");
  • xsi_open 関数で指定する引数は、ログファイル名と波形ファイル名。
typedef struct t_xsi_setup_info {
    char* logFileName; 
    char* wdbFileName;
} s_xsi_setup_info, *p_xsi_setup_info;
xsiHandle xsi_open(p_xsi_setup_info setup_info); 

デザインは、HDLをコンパイルしたときに作成された xsim.dir ディレクトリの下にあるデザイン(ここでは、mySnapshot) の下にある xsimk.so です。 シミュレータエンジンは、lib/lnx64.o の下の librdi_simulator_kernel.so です。

  • xsi_get_port_number 関数では、ポート名からポート番号を返します。このポート番号を使って、データのリード・ライトを行います。

  • xsi_get_value 関数で、ポートの信号のリードを、xsi_put_value 関数で、ポートの信号へのライトを行います。しかしながら、値は、Vivado Simulator Verilog Data Formatにて設定する必要があります。

typedef struct t_xsi_vlog_logicval {
    XSI_UINT32 aVal;
    XSI_UINT32 bVal;
} s_xsi_vlog_logicval, *p_xsi_vlog_logicval;

Verilatorは2値ですが、xsim は4値のシミュレータなので、上記のような Data Format を使って、4値の表現を行っています。Verilog HDL/SystemVerilogにおける、PLI (Programming Language Interface) での表現と基本的には同じですね。

  • xsi_trace_all 関数を実行すると、各信号を xsi_open で指定したファイル (wdbFileName) にダンプされます。

  • xsi_run 関数で、シミュレーションを実行します。引数でしていする値は、`timescale で指定した精度で実行される。

  • xsi_get_time 関数で、シミュレーション時間を獲得できる。

  • xsi_reset 関数で、シミュレーションが時間 0 に リセットされます。

  • xsi_close 関数で、終了します。

  • xsi_get_status 関数では、各APIを実行した時のステータスを、xsi_get_error_info 関数ではエラーの情報を得ることができます。

おわりに

今回は、Xilinx Simulator Interface の各APIについて見てみました。次回は、これらAPIを使って、どのようにシミュレーションを実行するかをみていきます。

Xilinx xsim で Software Driven Verification ができるっぽい (その1)

はじめに

  • Verilator : SystemC + SystemVerilog
  • Questa Intel FPGA 64bit Edition : SystemC + SystemVerilog

にて、Software Driven Verification ができることは、下記のように紹介しました。

vengineer.hatenablog.com

vengineer.hatenablog.com

Xilinx の xsim でも Software Driven Verification ができるっぽい

Xilinx の xsim でもできそうかな?と思って調べていたら、Xilinx Simulator Interface なるものを見つけました。

docs.xilinx.com

これを使えば、VerilatorのC++と同じようなことができそう。

おわりに

次回は、Xilinx Simulator Interface がどのような感じになっているかを見ていきます