FC2カウンター FPGAの部屋 WSL2
fc2ブログ

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

FPGAの部屋

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

WSL2 上の Vitis 2020.2 と Vivado 2020.2 でデバックを行う

WSL2 上で動作する Vitis 2020.2 で ZYBO Z7-10 をコンフィグレーションして、アプリケーション・ソフトウェアを走らせる”で、WSL2 上で動作する Linux 版の Vitis 2020.2 から Windows 10 上で動作する hw_server に接続している ZYBO Z7-10 にコンフィギュレーションし、更にアプリケーション・ソフトウェアを起動して動作させることができた。
今回は、”WSL2 上で動作する Vitis 2020.2 で ZYBO Z7-10 をコンフィグレーションして、アプリケーション・ソフトウェアを走らせる”の環境を使用して、デバックを行ってみよう。

最初に Vivado 2020.2 の DMA_pow2_test プロジェクトのブロックデザインで DMA_pow2_0 の s_axi_control AXI4-Liteインターフェースと m_axi_gmem AXI4 インターフェースを選択して、右クリックし、右クリックメニューから Debug を選んで System ila を追加した。
WSL2_29_210624.png

論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。
Project Summary を示す。
WSL2_30_210624.png

Vitis 2020.2 で Assistant ウインドウのDMA_pow2_test_system -> DMA_pow2_test -> Debug を右クリックし、右クリックメニューから Debug -> Debugger_DMA_pow2_test-Default (前回作成した Debug Configuration)を選択した。
WSL2_39_210624.png

Vitis がデバックモードになって、最初の C コードで停止している。
WSL2_31_210624.png

最初にデバックモードで起動するのは、クロックが出力されないからだ。クロックは PS から PL に供給されているので、最初のブート・ソフトウェアが走らないとクロックが PL に供給されない。

Vivado で PROGRAM AND DEBUG -> Open Hardware Manager -> Open Target をクリックして出てきたメニューの内の Resent Target -> 192.168.3.32.Xilinx_tcf/Digilent/... を選択する。
WSL2_32_210624.png

すると、ILA デフォルト・ダッシュボードが表示されて、波形を見ることができる。
WSL2_33_210624.png

ILA デフォルト・ダッシュボードをフローとして、トリガボタンをクリックし、トリガ待ちにした。
なお、トリガ条件は DMA_pow2_0_m_axi_gmem : ARVALID の立ち上がりとした。
WSL2_34_210624.png

Vitis に戻って Resume ボタンをクリックして、アプリケーション・ソフトウェアを走らせる。
WSL2_35_210624.png

アプリケーション・ソフトウェアが走って、ILA デフォルト・ダッシュボードに波形が表示された。
WSL2_36_210624.png

真ん中を拡大した。
AXI4 インターフェースの Read で 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 を Read した。
WSL2_37_210624.png

AXI4 インターフェースの Write で Read した値を 2 乗した数を Write しているのが分かる。
WSL2_38_210624.png

最後に Tera Term の画面を示す。
WSL2_40_210624.png
  1. 2021年06月25日 04:31 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0

WSL2 上で動作する Vitis 2020.2 で ZYBO Z7-10 をコンフィグレーションして、アプリケーション・ソフトウェアを走らせる

WSL2 上で動作する Vivado 2020.2 で ZYBO Z7-10 をコンフィグレーションする”では WSL 上で動作する Linux 版の Vivado 2020.2 から Windows 10 上で動作する hw_server に接続している ZYBO Z7-10 にコンフィギュレーションすることができた。
今回は、WSL2 上で動作する Linux 版の Vitis 2020.2 から Windows 10 上で動作する hw_server に接続している ZYBO Z7-10 にコンフィギュレーションし、更にアプリケーション・ソフトウェアを起動して動作させてみよう。

最初に WSL2 上で Vitis HLS 2020.2 の DMA_pow2 プロジェクトを作成して、DMA pow2 IP を作成する。

WSL2 上の Vitis HLS 2020.2 の DMA_pow2 プロジェクトを示す。
WSL2_15_210622.png

DMA_pow2n.cpp のソース・ファイルを貼っておく。

// DMA_pow2.cpp
// 2018/05/08 by marsee
//

int DMA_pow2(volatile int *in, volatile int *out){
#pragma HLS INTERFACE s_axilite port=out
#pragma HLS INTERFACE s_axilite port=in
#pragma HLS INTERFACE m_axi depth=10 port=out offset=slave
#pragma HLS INTERFACE m_axi depth=10 port=in offset=slave
#pragma HLS INTERFACE s_axilite port=return

    for (int i=0; i<10; i++){
        int temp = in[i];
        out[i] = temp * temp;
    }

    return(0);
}



C コードの合成結果を示す。
WSL2_16_210623.png

Export RTL 結果を示す。
WSL2_17_210623.png

WSL2 上の Vivado 2020.2 で DMA_pow2_test プロジェクトを作成した。
下の図は、論理合成、インプリメンテーション、ビットストリームの生成が終了した状態だ。
WSL2_18_210623.png

DMA_pow2_test ブロックデザインを示す。
WSL2_19_210623.png

Address Map を示す。
WSL2_20_210623.png

Project Summary を示す。
WSL2_21_210623.png

ハードウェアをエクスポートして、XSAファイルを作成した。

Vivado 2020.2 の Tools メニューから Launch Vitis IDE を選択して、Vitis 2020.2 を起動する。

Vitis 2020.2 が起動して Workspace を設定するので、DMA_pow2_test フォルダに vitis_work フォルダを新規作成して、Workspace
として設定した。

DMA_pow2_test アプリケーション・プロジェクトの作成時に、DMA_pow2_test_wrapper プラットフォームを作成した。

tset_dma.c を作成して、DMA_pow2_test アプリケーション・プロジェクトの src フォルダに入れた。

DMA_pow2_test アプリケーション・プロジェクトのビルドを行って成功した。
WSL2_22_210623.png

Assistant ウインドウで、DMA_pow2_test_system -> DMA_pow2_test -> Debug を右クリックし、Run -> Run Configuration... を選択する。
Run Configuration ダイアログが開いた。
Single Application Debug を右クリックし、右クリックメニューから New Configuration を選択する。
WSL2_23_210623.png

Dubugger_DMA_pow2_test-Default コンフィグレーションが生成された。
Connection の New ボタンをクリックする。
WSL2_24_210624.png

Target Connection Details ダイアログが表示された。
ここで New Target Connection を作成して Test Connection ボタンをクリックして、テストしたのだが、パケットが届かないというダイアログばかりが表示された。(実際は届いていたようだ)
なお、Windows 10 のファイヤー・ウォールで、3121 TCPポートは開けてある。”WSL2 上で動作する Vivado 2020.2 で ZYBO Z7-10 をコンフィグレーションする”を参照。

いろいろと試行錯誤したときに”AR# 64759: SDK - リモート ターゲット デバッグ用の設定”を見つけた。これによると、PowerShell で hw_server を起動するのではなく、XSCT コンソールから hw_server を起動している。
XSCT コンソールを使用すると、2020.2 のインストール・フォルダに行く必要がないので、この方が良さそうだ。
XSCT コンソールはWindows 10 のスタートボタンをクリックし、Xilinx Design Tools -> Xilinx Software Commandline Tool (XSCT) v2020.2.2 で起動することができる。

XSCT コンソールで hw_server を起動した。
WSL2_25_210624.png

Target Connection Details ダイアログで、Target Name と Host に IP アドレスを入れて、Advanced ボタンをクリックすると Zybo Z7 が出ているので大丈夫そうだ。
OKボタンをクリックする。
クリック後にまた、パケット届いていないというダイアログが出るが無視して良いようだ。
WSL2_26_210624.png

Tera Term を立ち上げて、ZYBO Z7-10のシリアルポートに接続する。

Run Configuration ダイアログで、Apply ボタンをクリックし、Run ボタンをクリックした。
WSL2_27_210624.png

Tera Term に演算の結果が表示された。成功だ。
WSL2_28_210624.png

test_dma.c を貼っておく。
このコードのバグにフィックスでは、IDA さんにお世話になりました。ありがとうございます。

/* * test_dma.c * *  Created on: 2017/12/02 *      Author: masaaki */

#include <stdio.h>
#include "xdma_pow2.h"
#include "xparameters.h"

void Xil_DCacheFlush(void);
void Xil_DCacheInvalidate(void);

volatile int data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
volatile int result[10];

int main(){
    XDma_pow2 XDMA_pow2_ap;
    XDma_pow2_Config *XDMA_pow2_apPtr;
    int i;

    // Look Up the device configuration
    XDMA_pow2_apPtr = XDma_pow2_LookupConfig(0);
    if (!XDMA_pow2_apPtr){
        fprintf(stderr, "XDma_pow2 configuration failed.\n");
        return(-1);
    }

    // Initialize the Device
    int Xlap_status = XDma_pow2_CfgInitialize(&XDMA_pow2_ap, XDMA_pow2_apPtr);
    if (Xlap_status != XST_SUCCESS){
        fprintf(stderr, "Could not Initialize XDma_pow2\n");
        return(-1);
    }

    XDma_pow2_Set_in_r(&XDMA_pow2_ap, (u32)&data[0]);
    XDma_pow2_Set_out_r(&XDMA_pow2_ap, (u32)&result[0]);

    Xil_DCacheFlush(); // Flush data[10] cache to memory

    XDma_pow2_Start(&XDMA_pow2_ap);

    while(!XDma_pow2_IsDone(&XDMA_pow2_ap)) ;

    Xil_DCacheInvalidate(); // Flush result[10] cache to memory

    for(i=0; i<10; i++){
        printf("data[%d] = %d, result[%d] = %d\n", i, data[i], i, result[i]);
    }

    return 0;

}


しかし、パケットが届いていないというダイアログが出ているのに、パケットが届いているとはどういう訳だろう。。。
人騒がせなバグだ。だいぶ時間をロスしてしまった。。。
  1. 2021年06月24日 05:14 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0

WSL2 上で動作する Vivado 2020.2 で ZYBO Z7-10 をコンフィグレーションする

WSL2 上で動作する Linux 用 Vivado 2020.2 で ZYBO Z7-10 をコンフィグレーションすることにした。
WSL2 上で動作する Linux 用 Vivado 2020.2 では、USB が使えないので、コンフィグレーションすることができないそうだ。そのため、Vivado でコンフィグレーションするときに Remote Server を指定して、Windows 上で動作する hw_server と接続し、ZYBO Z7-10 をコンフィギュレーションする。

なお、これらをやる際には、ツィッターのタイムラインの方々にはとてもお世話になった。特に IDA さんにお世話になりました。ありがとうございます。

WSL2 上の Vivado 2020.2 で ZYBO Z7-10 の LED_test プロジェクトを作成した。
WSL2_5_210622.png

LED_test.v を示す。SW0 と LD0 を接続しただけだ。

module LED_test(
    input SW0,
    output LD0
    );
    wire SW0;
    wire LD0;
    
    assign LD0 = SW0;
endmodule


制約ファイルの LED_test.xdc を示す。

set_property PACKAGE_PIN M14 [get_ports LD0]
set_property PACKAGE_PIN G15 [get_ports SW0]
set_property IOSTANDARD LVCMOS33 [get_ports LD0]
set_property IOSTANDARD LVCMOS33 [get_ports SW0]


論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。

Windows 10 で PowerShell を立ち上がて、Vivado 2020.2 の bin フォルダに行って、hw_server.bat を起動した。
.\hw_server.bat
WSL2_6_210622.png

PROGRAM AND DEBUG -> Open Hardware Manager -> Open Target -> open New Target... を選択した。
WSL2_7_210622.png

Open New Hardware Target ダイアログが表示された。
WSL2_8_210622.png

Hardware Server Settings 画面で Remote server を選択して、Host name に IP アドレスを入れる。
WSL2_9_210622.png

Windows 10 でもう 1 つ PowerShell を立ち上げて、ipconfig /all で IP アドレスを確認した。
WSL2_10_210622.png

確認した IP アドレスを Host name に入れた。
WSL2_11_210622.png

しかし、これで接続できなかった。
Windows 10 のファイヤー・ウォールではじかれていると思って、”Windows10で特定のポートを開放する”を参考にして、 3121 番 TCP 受信ポートを開けた。
WSL2_12_210622.png

すると、Windows 10 の hw_server に接続できた。
WSL2_13_210622.png

Open Hardware Target Summary 画面が表示された。Finish ボタンをクリックした。
WSL2_14_210622.png

Program device をクリックした。
WSL2_15_210622.png

Program device ダイアログが表示された。
Bitstream file に LED_test.bit が表示されている。
Program ボタンをクリックして、コンフィギュレーションを行った。
WSL2_16_210622.png

コンフィギュレーションができて、SW0 を ON/OFF すると LD0 が点灯・消灯した。
WSL2_17_210622.png
  1. 2021年06月22日 20:49 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0

Windows のパスの長さの制限 260 文字を解除

これまで、Windows のパスの長さの制限の 260 文字にどれだけ苦しめられていたか分かりません。仕方ないので、subst コマンドで Vivado プロジェクトのフォルダを z: や y: に割り当て使っていました。Viavdo はとっても深くフォルダを掘ってしまうので、すぐにパスの長さが 260 文字超えちゃってエラーになっちゃうんですよね。

昨日、ittou_ogami さんに教えていただいたのは、”Windows 10で既定の256文字パス制限(MAX_PATH)を変更する方法”でしたが、ちょっとレジストリエディタを使用して面倒なのと、画像が拡大できないので、よく分からなかったため”【Windows】パスの260文字制限の解除方法”を真似してやってみました。

早速やってみましょう。
最初に、Windows 10 で左下のウインドウマークを右クリックして右クリックメニューから Windows PowerShell (管理者)を選択します。
レジストリ「LongPathsEnabled」設定が 0 だと、ロング・パスが無効だそうです。
(Get-Item -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem").GetValue("LongPathsEnabled")
コマンドを実行すると 0 でした。無効です。
win260limit_1_200701.png

(Get-Item -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem")
コマンドを実行すると、レジストリのリストが見えます。確かに、上から 3 つ目の” LongPathsEnable ”は 0 になっているが分かります。
win260limit_2_200701.png

LongPathsEnable を 1 にします。
Set-ItemProperty "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" -Name LongPathsEnabled -value 1
コマンドを実行しました。

もう一度、
(Get-Item -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem")
コマンドを実行すると、上から 3 つ目の” LongPathsEnable ”は 1 になっているのが分かります。
win260limit_3_200701.png

これで、パスの長さが 260 文字の制限は外れたはず。PetaLinux のビルドをもう一度やってみます。
  1. 2020年07月02日 04:20 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0

X サーバーの VcXsrv を WSL2 で使用する

Windows 10 上の X サーバーソフトウェアとして Xming を使っていたのですが、ライセンスの関係や nautilus で子ウインドウを出したときに GUI でウインドウ・サイズを調整できないので、VcXsrv を使うことにしました。

VcXerv をインストールして起動して、WSL2 から nautilus を立ち上げてもディスプレイが見つからないといわれて起動しません。その解決策は”WSL2におけるVcXsrvの設定”に書いてありました。

Additional parameters for VcXsrv という入力フォームに

-ac

と入力するそうです。

これで Vitis も起動することができましたが、今度はキーボードが US キーボードになっているようです。記号の入力がうまく行きません。
それで、”VcXsrv日本語キーボード問題”を見て、

-xkblayout jp

を設定することにしました。

VcXsrv を起動してからの設定を書いておきます。
最初の Display settings 画面。
VcXsrv_1_200628.png

Client startup 画面。
VcXsrv_2_200628.png

Extra settings 画面。
Disable access control のチェックを外して、
Additional parameters for VcXerv に

-ac -xkblayout jp

を入力しました。
VcXsrv_3_200628.png

Finish configuration 画面。そのまま完了ボタンをクリックします。
VcXsrv_4_200628.png

これで VcXsrv が立ち上がって、WSL2 のウインドウを表示しました。
  1. 2020年06月28日 11:50 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0

WSL2 の Ubuntu-18.04 のホームディレクトリを Windows10 の Explorer で見る

WSL2 の Ubuntu-18.04 のホームディレクトリを Windows10 の Explorer で見たいということでやってみた。

検索すると”WSL2 と Windows Terminal”がヒットした。それによると WSL2 はバーチャルマシンなので、Windows 10 のフォルダにマップされていないということで、共有するようだ。

Explorer のアドレスに

\\wsl$\Ubuntu-18.04

を入れるとUbuntu 18.04 のルートディレクトリが見えた。
WSL_Ubuntu_37_200626.png

  1. 2020年06月26日 21:36 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0

WSL2 で Vitis 2019.2 を動かしてみた

ノートパソコンの Windows 10 Professional を 2004 にアップデートしたので、WSL2 での Vitis 2019.2 を試してみた。

最初に、WSL2 にして Vitis 2019.2 を起動したら、DISPLAY環境変数でエラーが出たので、諦めて WSL1 に戻したのだったが、ツィッターでいしたにさん(@taichi600730)に教えていただいて、Vitis 2019.2 の GUI が上がるようになった。ありがとうございました。

さて、WSL2 への変更の方法は”Windows 10 用 Windows Subsystem for Linux のインストール ガイド”を参照した。

もうすでに WSL1 は入っているので、”WSL 2 に更新する”からやることにした。

管理者として PowerShell を開き、以下を実行した。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.329

イメージのバージョン: 10.0.19041.329

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。


あれ?再起動と書いてあるけど、再起動していなような?しかし、前に試していることもあるので、再起動した方が良いだろう?
これ以前にやったことは、”WSL 2 Linux カーネルの更新”の x64 マシン用の最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロードしてインストールした。これは必須のようだ。

Ubuntu 18.04 を WSL2 にアップグレードするコマンドを示す。(”「WSL 2」へのバージョンアップでLinux互換環境はどう変わるのか?”を参照)
wsl --set-version Ubuntu-18.04 2

PS C:\WINDOWS\system32> wsl --set-version Ubuntu-18.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。


WSL のステータスを示すコマンドを示す。
wsl -l -v

PS C:\WINDOWS\system32> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2


Ubuntu-18.04 は WSL2 に更新されていた。

この辺りのやり取りのPowerShell の画面を貼っておく。
WSL2_1_200616.png

X サーバーの Xming を走らせて、Vitis 2019.2 を起動したところ、NO DISPLAY と言われて起動できなかった。

いしたにさんに教えていただいた”WSL2のGUI設定でつまずいたところ”をみて、 .bashrc に

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

を設定したが、また NO DISPLAY と言われた。
WSL2_2_200616.png

Xming の Spacify parameter settings の No Access Control Disable Server Access Control にチェックを入れて起動すると Vitis の IDE が起動した。
WSL2_3_200616.png

ワークスペースを選択して、アクセラレーション・アプリケーション・プロジェクトで、Hardware を再ビルドしたところ成功した。
WSL2_4_200616.png

(2020/07/01:追記)
WSL で Emacs を使うための設定”で、WSL1 と WSL2 の DISPLAY 環境を自動切換えする .bashrc の記述を見つけたので、ここに貼っておく。

if [ -z "$DISPLAY" ]; then
    if wsl.exe -l -v 2> /dev/null | sed 's/[^[:print:]]//g' | grep " $WSL_DISTRO_NAME " | grep -q '2$'; then
        # for WSL2
        export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0
    else
        # for WSL1
        export DISPLAY=:0
    fi
fi

  1. 2020年06月17日 04:14 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0