”
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 プロジェクトを示す。

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 コードの合成結果を示す。

Export RTL 結果を示す。

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

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

Address Map を示す。

Project Summary を示す。

ハードウェアをエクスポートして、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 アプリケーション・プロジェクトのビルドを行って成功した。

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

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

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 を起動した。

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

Tera Term を立ち上げて、ZYBO Z7-10のシリアルポートに接続する。
Run Configuration ダイアログで、Apply ボタンをクリックし、Run ボタンをクリックした。

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

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