FC2カウンター FPGAの部屋 2018年10月22日
FC2ブログ

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

FPGAの部屋

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

デバイスツリー・オーバーレイをテストするためのVivado 2018.2 のプロジェクトを作成する2

デバイスツリー・オーバーレイをテストするためのVivado 2018.2 のプロジェクトを作成する”の続き。

前回は、その DMA_pow2 IP を使用してVivado 2018.2 でDMA_pow2_test プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、SDKを使用して、ベアメタル・アプリケーションを作成して、動作をチェックする。

まずは、Vivado 2018.2 でハードウェアをエクスポートした。
次に、Vivado 2018.2 からSDK を立ち上げた。
Ultra96_ikwzm_51_181020.png

Aplication Project を新規作成する。
Project Name を test_dma として、 Next > ボタンをクリックする。
Ultra96_ikwzm_52_181020.png

Available Templates から Empty Application を選択して、Finish ボタンをクリックした。
Ultra96_ikwzm_53_181020.png

test_dma 、 test_dma_bsp プロジェクトが作成された。
test_dma プロジェクトを展開して、Debug/src を展開して、src で右クリックし、New -> Source File を選択すると、ダイアログが開く。
Source File に test_dma.c と入力してFinish ボタンをクリックする。
Ultra96_ikwzm_54_181020.png

test_dma.c が生成された。
test_dma.c のコードを書いた。
セーブすると、ビルドされて test_dma.elf が生成された。
Ultra96_ikwzm_55_181020.png

Ultra96 をJTAG モードにして、電源ON。
SDK のXilinx メニューからProgram FPGA を選択し、FPGAにビット・ファイルをダウンロードした。
Ultra96_ikwzm_56_181020.png

アプリケーション・ソフトを走らせる前に gtkterm を起動した。(Windows だったら Tera Term を起動)
sudo gtkterm

そして、stdin, stdout に使用する psu_uart_0 を psu_uart_1 に変更した。(”SDKでstdin, stdout に割り当てられるデバイスを変更”を参照のこと)

SDK の test_dma/Binaries/test_dma.elf を右クリックし、右クリックメニューから Run As -> 1 Launch on Hardware (System Debugger) を選択して、アプリケーション・ソフトを走らせた。
Ultra96_ikwzm_57_181020.png

アプリケーション・ソフトが起動して、gtkterm に表示された。
Ultra96_ikwzm_58_181020.png

うまく 2乗されている。

最後に test_dma.c を貼っておく。

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

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

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

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]);

    XDma_pow2_Start(&XDMA_pow2_ap);

    while(!XDma_pow2_IsDone(&XDMA_pow2_ap)) ;

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

    return 0;

}

  1. 2018年10月22日 04:20 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0