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

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

FPGAの部屋

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

Ultra96用PMOD拡張ボード12(改版した基板に部品を実装した)

Ultra96用PMOD拡張ボード11(改版した基板が届いた)”の続き。

前回届いたUltra96用PMOD拡張基板に部品を実装した。
これでテストできる。
OV5642_35_181215.jpg

OV5642_36_181215.jpg

ボードのスペルが間違っているのは、ご愛嬌ということで許して。。。
もしうまく行ったら欲しい人いるのかな? コミケで売ってみたい。
  1. 2018年12月15日 20:41 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

秋月電子カメラモジュールOV5642を使う9(デバイスツリー・オーバレイ用ファイルの整備)

秋月電子カメラモジュールOV5642を使う8(OV5642用Vivadoプロジェクト)”の続き。

前回は、Ultra96 用の cam_test_182 のVivado プロジェクトを少し改変して、OV5642用のVivado プロジェクトを作った。今回は、Debian 上でソフトウェアを起動するために、デバイスツリー・オーバレイ関連のファイルを整備する。

まずは、Ultra96 のDebian を起動して、~/examples/ ディレクトリに行って、 cam_cap_ov5642 ディレクトリを作成した。
cd ~/examples/
mkdir cam_cap_ov5642

OV5642_27_181212.png

nautilus を起動して、cam_capture ディレクトリの内のアプリケーションの実行ファイルの cam_capture 以外を cam_cap_ov5652 ディレクトリにコピーした。
OV5642_28_181212.png

パソコンからUltra96 のDebian に SFTP して、前回作成した cam_test_ov5642.bin をcam_cap_ov5652 ディレクトリにアップロードした。
OV5642_29_181212.png

SFTP したcam_cap_ov5652 ディレクトリの cam_test_ov5642.bin を /lib/firmware/ ディレクトリにコピーした。
sudo cp cam_test_ov5642.bin /lib/firmware/
OV5642_30_181212.png

/lib/firmware/ ディレクトリに cam_test_ov5642.bin がコピーされた。
OV5642_31_181212.png

cam_capture.dtb を削除して、cam_capture.dts を cam_cap_ov5642.dts に名前を変更した。
OV5642_32_181212.png

各dts ファイルを書き換えた。
最初に fpga-load.dts から示す。

/dts-v1/;
/ {
    fragment@0 {
        target-path = "/fpga-full";
        __overlay__ {
            firmware-name = "cam_test_ov5642.bin";
        };
    };
};


fclk01-zynqmp.dts を示す。

/dts-v1/;/plugin/;
/ {
    fragment@0 {
        target-path = "/amba";
        __overlay__ {
            fclk0 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&clk 0x47>;
                insert-rate   = "100000000";
                insert-enable = <1>;
                remove-rate   = "1000000";
                remove-enable = <0>;
            };
            
            fclk1 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&clk 0x48>;
                insert-rate   = "24000000";
                insert-enable = <1>;
                remove-rate   = "1000000";
                remove-enable = <0>;
            };
        };
    };
};


cam_cap_ov5642.dts を示す。

/dts-v1/;/plugin/;
/ {
    fragment@0 {
        target-path = "/amba_pl@0";
        #address-cells = <2>;
        #size-cells = <2>;

        __overlay__ {
            #address-cells = <2>;
            #size-cells = <2>;

            mt9d111_inf_axis-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0000000 0x0 0x1000>;
            };
            
            axi_iic-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0001000 0x0 0x1000>;
            };
            
            DMA_Write_sFB-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0010000 0x0 0x10000>;
            };

            cam_cap_ov5642-udmabuf4 {
                compatible  = "ikwzm,udmabuf-0.10.a";
                device-name = "udmabuf4";
                size = <0x00800000>;
            };
        };
    };
};


各 dts をコンパイルした。
dtc -I dts -O dtb -o fpga-load.dtb fpga-load.dts
dtc -I dts -O dtb -o fclk01-zynqmp.dtb fclk01-zynqmp.dts

OV5642_33_181214.png

dtc -I dts -O dtb -o cam_cap_ov5642.dtb cam_cap_ov5642.dts
OV5642_34_181214.png

各 dts ファイルをコンパイルして dtb ファイルを生成した。

各デバイスツリーをロードするシェルスクリプト lddtovray.sh を示す。

#!/bin/bash

sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load.dtb /config/device-tree/overlays/fpga/dtbo
sudo mkdir /config/device-tree/overlays/fclk01
sudo cp fclk01-zynqmp.dtb /config/device-tree/overlays/fclk01/dtbo
sudo mkdir /config/device-tree/overlays/cam_cap_ov5642
sudo cp cam_cap_ov5642.dtb /config/device-tree/overlays/cam_cap_ov5642/dtbo

sleep 0.5
sudo chmod 666 /dev/uio*
sudo chmod 666 /dev/udmabuf4


各デバイスツリーを削除するシェルスクリプト rmdtovray.sh を示す。

#!/bin/bash

sudo rmdir /config/device-tree/overlays/cam_cap_ov5642/
sudo rmdir /config/device-tree/overlays/fclk01
sudo rmdir /config/device-tree/overlays/fpga/

  1. 2018年12月14日 04:47 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96用PMOD拡張ボード11(改版した基板が届いた)

Ultra96用PMOD拡張ボード10(基板の改版3)”の続き。

昨日、改版したUltra96 用PMOD 拡張ボードが届いた。

早速、部品を実装して試してみたい。配送業者にDHL を選んで、基板発注から到着まで 12 日だった。
Ultra96_ext_board2_25_181213.jpg
  1. 2018年12月13日 05:42 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

SDSoC 2018.3 WebPACK が出ています

Xilinx 社のSDSoC 開発環境のダウンロードページにSDSoC 2018.3 WebPACK が出ています。
ついにSDSoC のWebPACK が出たようです。これで、心置きなくSDSoC を使えそうですね。
SDSoC_WebPACK_181213.png

でも、おかしなことに SDSoC 2018.3 のリリース・ノートにWebPACK のことが書いていないです。なぜでしょうか?
まだダウンロードしてインストールしたことないですが、やってみたいと思います。
  1. 2018年12月13日 05:24 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

秋月電子カメラモジュールOV5642を使う8(OV5642用Vivadoプロジェクト)

秋月電子カメラモジュールOV5642を使う7(OV5642の設定レジスタの設定値2)”の続き。

前回は、OV5642を使用するための設定レジスタの設定値を決定して、Python でC コードに変換した。今回は、Ultra96 用の cam_test_182 のVivado プロジェクトを少し改変して、OV5642用のVivado プロジェクトを作ろう。

まずは、HDL/Ultra96 ディレクトリの cam_test_182 ディレクトリ(Vivado 2018.2 のプロジェクト)をコピーして、ペーストし、名前を cam_test_ov5642_182 に変更した。
OV5642_25_181212.png

cam_test ブロック・デザインを起動して、Zynq UltraScale+ MPSoC をダブルクリックしてダイアログを表示させた。
Page Navigator からClock Configuration を選択し、Output Clocks のPL Fabric Clocks のPL1 を 24 MHz に設定した。
OV5642_21_181211.png

そして、もう一度、Generate BitStream をクリックして、論理合成、インプリメンテーション、ビットストリームを行った。
OV5642_22_181211.png

結果を示す。
OV5642_26_181212.png

問題なさそうだ。
次に、Export Hardware をビットストリーム付で行った。

~/HDL/cam_test_ov5642_182/cam_test_182.sdk/cam_test_wrapper_hw_platform_1 ディレクトリの cam_test_wrapper.bit を上のディレクトリにコピーした。
cam_test_wrapper.bif は”Ultra96用PMOD拡張ボードでカメラ入力11(Debian上でカメラ画像を画像ファイルに1)”で作ってあるので、コマンドを入力して、cam_test_ov5642.bin を作成する。
bootgen -image cam_test_wrapper.bif -arch zynqmp -w -o cam_test_ov5642.bin
OV5642_23_181212.png

cam_test_ov5642.bin が作成された。
OV5642_24_181212.png
  1. 2018年12月12日 05:28 |
  2. CMOSイメージセンサ
  3. | トラックバック:0
  4. | コメント:0

秋月電子カメラモジュールOV5642を使う7(OV5642の設定レジスタの設定値2)

秋月電子カメラモジュールOV5642を使う6(OV5642の設定レジスタの設定値)”の続き。

前回は、OV5642を使用するための設定レジスタの設定値を半分程度決定した。今回は、OV5642を使用するための設定レジスタの設定値を決定して、Python でC コードに変換してみよう。

OV5642を使用するための設定レジスタの設定値を示す。全部で 322 個になった。これは、インターフェース誌の2014年の11月号のダウンロードデータにOV5642の初期設定レジスタ一覧を示す「表2.pdf」があるので、それの設定値を頂いて、設定値が異なるところを書き換えて、足りない設定値を追加した。変更点は、インターフェースのカメラ画像はVGAだが、私の設定値ではSVGA の 800 x 600 ピクセルであることだ。
OV5642_18_181210.png

現在はLibreOffice Calc で作ってあるので、それを CSV ファイルに変換した。
OV5642_19_181210.png

Python で CSV ファイルを読んで、C コードに変換した。
Python のプログラムを作る際に参考にしたのは、”PythonでCSVの読み書き”だ。
作成したPython コードを貼っておく。

import csv

with open('OV5642_SVGA_regset.csv', 'r') as f:
    reader = csv.reader(f)
    header = next(reader)  # ヘッダーを読み飛ばしたい時
    
    for row in reader:
        print("cam_i2c_write(axi_iic, 0x78, {0}, {1});".format(row[1], row[2]),)


Python だと少ない行数で書けるので、とっても良い。
Jupyter Notebook での実行結果を示す。
OV5642_20_181210.png

これで、OV5642のレジスタ設定用のプログラムも完成した。
  1. 2018年12月11日 04:31 |
  2. CMOSイメージセンサ
  3. | トラックバック:0
  4. | コメント:0

秋月電子カメラモジュールOV5642を使う6(OV5642の設定レジスタの設定値)

秋月電子カメラモジュールOV5642を使う5(OV5642インターフェースIP)”の続き。

OV5642のインターフェースIP を作ろうとし作ったのだが、設定レジスタの設定により、作成済みのMT9D111 のインターフェースIP と違いが無くなったためMT9D111 のインターフェースIP を使用することにした。今回は、OV5642を使用するための設定レジスタの設定値を決定する。ただしまだ半分くらいだ。

基本的に、OV5642の設定レジスタの設定値はインターフェース誌の2014年11月号の”ウェアラブルの可能性を探る 徹底研究!指先サイズ スーパーカメラ”に基づいているが、インターフェース誌では、640 x 480 ピクセルのVGA のところを 800 x 600 の SVGA でしかも、MT9D111 と同じフォーマットで出力波形を出すという目標があるので、設定レジスタの設定値を1つ1つ確認している。

インターフェース誌の2014年の11月号のダウンロードデータにOV5642の初期設定レジスタ一覧を示す「表2.pdf」があるので、それの設定値を頂いて、設定値が異なるところを書き換えている。
なお、説明は、OV5642 データシートのものをコピペしてある。
一部を引用する。
OV5642_17_181210.png

まだ、半分だが、早急に表を完成させて、その表のデータから設定するC コードを出力するプログラムをPython で作りたい。
  1. 2018年12月10日 05:12 |
  2. CMOSイメージセンサ
  3. | トラックバック:0
  4. | コメント:0
»