FC2カウンター FPGAの部屋 2017年04月06日

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

FPGAの部屋

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

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる6(FPGA Manager)

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる5(デバイスツリー・オーバーレイ)”の続き。

前回は、デバイスツリー・オーバーレイを試して、成功した。今回は、FPGAをコンフィギュレーションする FPGA Manager を試してみた。

(2017/04/06:修正 デバイスツリー・オーバーレイとFPGA Manager がうまく動作した)

最初に PYNQ ボードのFPGA 部分をコンフィギュレーションする。
まずは、lsmod で、どんなモジュールが insmod されているか?を確かめた。
fpgacfg も入っている。
ls /dev/fpgacfg0 をやってみたが、すでにデバイスがあった。
PYNQ_Linux_ikwzm_70_170405.png

pynq_led_test_wrapper.bit を WinSCP で PYNQ ボードの Debian に転送した。/home/fpga/device_tree_overlay ディレクトリに転送した。
PYNQ_Linux_ikwzm_77_170405.png

FPGA をコンフィギュレーションした。
su
echo 1 > /sys/class/fpgacfg/fpgacfg0/data_format
echo 1 > /sys/class/fpgacfg/fpgacfg0/load_start
cp pynq_led_test_wrapper.bit /dev/fpgacfg0

PYNQ_Linux_ikwzm_72_170405.png
するとDONEランプが点灯した。

次に、デバイスツリー・オーバーレイを行った。
mkdir /config/device-tree/overlays/uio_gpio_0
cp uio_gpio_0.dtbo /config/device-tree/overlays/uio_gpio_0/dtbo
echo 1 > /config/device-tree/overlays/uio_gpio_0/status
ls /dev/uio0

PYNQ_Linux_ikwzm_73_170405.png

/dev/uio0 をユーザーからもリード、ライトできるように、chmod を 666 に設定した。
ls -l /dev/uio0
chmod 666 /dev/uio0
ls -l /dev/uio0

PYNQ_Linux_ikwzm_74_170406.png

pynq_led_test.c を作成した。
PYNQ_Linux_ikwzm_79_170406.png

// pynq_led_test.c
// 2017/04/06 by marsee
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

 int main() {
    int fd;
    volatile unsigned int *led_gpio;

    fd = open("/dev/uio0", O_RDWR);
    if (fd < 1){
        fprintf(stderr, "/dev/uio0 open error\n");
        exit(-1);
    }

    led_gpio = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    
    if (led_gpio == MAP_FAILED){
        fprintf(stderr, "mmap error\n");
        exit(-1);
    }
    
    unsigned int i = 0;  
    while(i<17){
        led_gpio[0] = i++;
        sleep(1);
    }
    
    munmap((void *)led_gpio, 0x10000);
    return(0);
}


pynq_led_test.c を gcc でコンパイルした。
gcc -o pynq_led_test pynq_led_test.c
PYNQ_Linux_ikwzm_80_170406.png

./pynq_led_test を起動すると、LD3~0が2進数で +1 されて表示された。
PYNQ_Linux_ikwzm_81_170406.png

デバイスツリー・オーバーレイとFPGA Manager がうまく動作した。
  1. 2017年04月06日 06:09 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0