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

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

FPGAの部屋

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

ZYBO Z7-20でPcam 5Cを使用する4(タイミングエラーの検討)

ZYBO Z7-20でPcam 5Cを使用する3(インプリメント)”の続き。

前回はインプリメントを行ったら、タイミングエラーが出てしまった。今回は、そのタイミングエラーの原因を探ってみよう。

Project Manager のImplementation → Open Implemented Design をクリックして、Implemented Desgin を開いた。

Timing タブをクリックする。
Intra-Clock Paths が赤くなっているので、タイミングエラーがことにあるはずだ。
dphy_hs_clock_p が赤くなっているので、開くと、ここがタイミングエラーだった。
dphy_data_hs_n[1], dphy_data_hs_n[0] だった。MIPI の 2 つのデータがタイミングエラーとのことだが、全部Logic Delay でNet Delay が 0 だと対応しようがないんじゃないだろうか?
MIPI_camera_20_180105.jpg

Requirement の 1.488 ns は、ZyboZ7_A.xdc の

create_clock -period 2.976 -name dphy_hs_clock_p -waveform {0.000 1.488} [get_ports dphy_hs_clock_clk_p]

で定義されている。
MIPI_camera_21_180106.png

その記述はMIPI_D_PHY_RX IP のMIPI_DPHY_reciver.vhd -> DPHY_LaneSFEN.vhd -> HS_Deserializer.vhd にあった。
MIPI_camera_22_180106.png

Deserializer の ISERDESE2 のDDLY ピンの部分だ。
MIPI_camera_23_180106.png

こんなところ、どうにもならないんじゃないだろうか?
もう一度、Implemented Desgin でパスをDevice 画面で見てみた。まずは、dphy_data_hs_n[1] から。
MIPI_camera_24_180106.png

パスは短いしパスの遅延は 0 ns だ。

次に、dphy_data_hs_n[0] を見てみよう。
MIPI_camera_25_180106.png

やはりパスは短い。

dphy_data_hs_n[1] のデータパスのクロックパスの遅延状況を示す。
MIPI_camera_26_180106.png

dphy_data_hs_n[0] のデータパスのクロックパスの遅延状況を示す。
MIPI_camera_27_180106.png

IDELAYE2 のIDELAY_TYPE も"VARIABLE"だし、このまま動作を確認してみようかと思う。
  1. 2018年01月06日 21:23 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20でPcam 5Cを使用する3(インプリメント)

ZYBO Z7-20でPcam 5Cを使用する2(pcam-5c プロジェクト)”の続き。

前回は、pcam-5c プロジェクトを生成した。今回は、pcam-5c プロジェクトのsystem ブロック・デザインを階層化して、論理合成、インプリメント、ビットストリームの生成を行う。

ブロック・デザインの system だが、IP が小さくなって見にくいので、階層化を行った。
MIPI 関連のIP と画像処理 IP をMIPI_image 階層にまとめた。更にHDMI 出力関連のIP を hdmi_out 階層としてまとめてある。

最初に、ブロック・デザインのトップの system から貼っておく。
MIPI_camera_15_180105.jpg

MIPI_image 階層を貼っておく。
MIPI_camera_16_180105.jpg

hdmi_out 階層を貼っておく。
MIPI_camera_17_180105.jpg

Address Editor 画面を貼っておく。
MIPI_camera_18_180105.jpg

これで論理合成、インプリメント、ビットストリームの生成を行った。
結果を示す。
MIPI_camera_19_180105.jpg

Timing エラーが発生している。次はその原因を探っていこう。
  1. 2018年01月05日 05:27 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

白線間走行畳み込みニューラルネットワーク のアーキテクチャの図を出力した

@yu4u さんの”畳み込みニューラルネットワークをKeras風に定義するとアーキテクチャを図示してくれるツールを作った”を使わせて頂いて、自分の白線間走行畳み込みニューラルネットワーク のアーキテクチャの図を出力する。

まずは、Github の yu4u/convnet-drawer から Clone or download ボタンをクリックして、Download ZIP を選択して、convert-drawer-master.zip ファイルをダウンロードした。

convert-drawer-master.zip ファイルを展開すると、convert-drawer-master フォルダがあったので、それをWindows 10 のドキュメント・フォルダにコピーした。そして、convert-drawer-master フォルダの名前を convert-drawer フォルダに変更した。

まずは、convert-drawer フォルダに入って、AlexNet.svg を Inkscape で見てみた。
CNN_Figure_1_180104.png

凄い。それらしくアーキテクチャ図が表示される。

それじゃ、AlexNet.py をコピーして、curve_tracing_cnn.py に名前を変更し、白線間走行CNN のアーキテクチャに合うように書き換えた。
CNN_Figure_2_180104.png

Windows Powershell を起動して、python .\curve_tracing_cnn.py を実行した。
すると、curve_tracing_cnn.svg ファイルが生成された。
CNN_Figure_3_180104.png

curve_tracing_cnn.svg ファイルを Inkscape で開いた。
CNN_Figure_4_180104.png

かっこよい図ができた。これは良い。使わせて頂こう。だいぶシンプルな畳み込みニューラルネットワークで白線間走行している。

curve_tracing_cnn.py を貼っておく。

# curve_tracing_cnn.py
# 2018/01/04

import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from convnet_drawer import Model, Conv2D, MaxPooling2D, Flatten, Dense


def main():
    model = Model(input_shape=(10, 56, 1))
    model.add(Conv2D(2, (5, 5), (1, 1)))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))
    model.add(Flatten())
    model.add(Dense(100))
    model.add(Dense(3))
    model.save_fig(os.path.splitext(os.path.basename(__file__))[0] + ".svg")


if __name__ == '__main__':
    main()

  1. 2018年01月04日 12:40 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20でPcam 5Cを使用する2(pcam-5c プロジェクト)

ZYBO Z7-20でPcam 5Cを使用する1(D-PHYインターフェース)”の続き。

前回は、MIPI のD-PHY インターフェースについて調べた。今回は、Digilent 社のZybo Z7 Pcam 5C Demo プロジェクトをダウンロードして、Vivado 2016.4 のプロジェクトを生成してみよう。

Pcam 5C のリソースセンターから、Zybo Z7 Pcam 5C Demo をクリックする。

Zybo Z7 Pcam 5C DemoDownloadGIT Repo をクリックする。

GitHub のDigilent/Zybo-Z7-20-pcam-5c が開く。

Clone or download ボタンをクリックして、Download ZIP をクリックした。
MIPI_camera_5_180104.jpg

Zybo-Z7-20-pcam-5c-master.zip を Z:\ZYBO_Z7 に保存した。
Zybo-Z7-20-pcam-5c-master.zip を解凍すると、Zybo-Z7-20-pcam-5c-master フォルダが作成された。
MIPI_camera_6_180104.jpg

Zybo-Z7-20-pcam-5c-master フォルダ以下のディレクトリ構造を示す。

Z:.
├─hw_handoff
├─proj
├─repo
│  ├─cache
│  ├─local
│  │  └─ip
│  │      ├─AXI_BayerToRGB
│  │      │  ├─hdl
│  │      │  └─xgui
│  │      └─AXI_GammaCorrection
│  │          ├─hdl
│  │          └─xgui
│  └─vivado-library
├─sdk
│  ├─pcam_vdma_hdmi
│  │  ├─bootimage
│  │  ├─Debug
│  │  └─src
│  │      ├─hdmi
│  │      ├─ov5640
│  │      └─platform
│  ├─pcam_vdma_hdmi_bsp
│  └─system_wrapper_hw_platform_0
└─src
    ├─bd
    │  └─system
    │      ├─hdl
    │      ├─hw_handoff
    │      ├─ip
    │      │  ├─system_auto_pc_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_auto_pc_1
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_auto_pc_2
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_AXI_BayerToRGB_1_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_AXI_GammaCorrection_0_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_axi_mem_intercon_0
    │      │  ├─system_axi_mem_intercon_1_0
    │      │  ├─system_axi_vdma_0_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_clk_wiz_0_0
    │      │  ├─system_MIPI_CSI_2_RX_0_0
    │      │  │  ├─hdl
    │      │  │  │  ├─cdc_fifo
    │      │  │  │  │  ├─cdc_fifo
    │      │  │  │  │  ├─hdl
    │      │  │  │  │  ├─sim
    │      │  │  │  │  ├─simulation
    │      │  │  │  │  └─synth
    │      │  │  │  ├─ila_rxclk
    │      │  │  │  │  ├─hdl
    │      │  │  │  │  │  └─verilog
    │      │  │  │  │  ├─ila_v6_2
    │      │  │  │  │  │  └─constraints
    │      │  │  │  │  ├─sim
    │      │  │  │  │  └─synth
    │      │  │  │  ├─ila_rxclk_lane
    │      │  │  │  │  ├─hdl
    │      │  │  │  │  │  └─verilog
    │      │  │  │  │  ├─ila_v6_2
    │      │  │  │  │  │  └─constraints
    │      │  │  │  │  ├─sim
    │      │  │  │  │  └─synth
    │      │  │  │  ├─ila_vidclk
    │      │  │  │  │  ├─hdl
    │      │  │  │  │  │  └─verilog
    │      │  │  │  │  ├─ila_v6_2
    │      │  │  │  │  │  └─constraints
    │      │  │  │  │  ├─sim
    │      │  │  │  │  └─synth
    │      │  │  │  └─line_buffer
    │      │  │  │      ├─hdl
    │      │  │  │      ├─line_buffer
    │      │  │  │      ├─sim
    │      │  │  │      ├─simulation
    │      │  │  │      └─synth
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_MIPI_D_PHY_RX_0_0
    │      │  │  ├─hdl
    │      │  │  │  ├─ila_scnn_refclk
    │      │  │  │  │  ├─hdl
    │      │  │  │  │  │  └─verilog
    │      │  │  │  │  ├─ila_v6_2
    │      │  │  │  │  │  └─constraints
    │      │  │  │  │  ├─sim
    │      │  │  │  │  └─synth
    │      │  │  │  ├─ila_sfen_refclk
    │      │  │  │  │  ├─hdl
    │      │  │  │  │  │  └─verilog
    │      │  │  │  │  ├─ila_v6_2
    │      │  │  │  │  │  └─constraints
    │      │  │  │  │  ├─sim
    │      │  │  │  │  └─synth
    │      │  │  │  └─ila_sfen_rxclk
    │      │  │  │      ├─hdl
    │      │  │  │      │  └─verilog
    │      │  │  │      ├─ila_v6_2
    │      │  │  │      │  └─constraints
    │      │  │  │      ├─sim
    │      │  │  │      └─synth
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_processing_system7_0_0
    │      │  │  ├─hdl
    │      │  │  │  └─verilog
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_ps7_0_axi_periph_0
    │      │  ├─system_rgb2dvi_0_0
    │      │  │  ├─sim
    │      │  │  ├─src
    │      │  │  └─synth
    │      │  ├─system_rst_clk_wiz_0_50M_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_rst_vid_clk_dyn_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_video_dynclk_0
    │      │  │  ├─sim
    │      │  │  ├─src
    │      │  │  └─synth
    │      │  ├─system_vtg_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_v_axi4s_vid_out_0_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  ├─system_xbar_0
    │      │  │  ├─sim
    │      │  │  └─synth
    │      │  └─system_xlconcat_0_0
    │      │      ├─sim
    │      │      └─synth
    │      └─ipshared
    │          ├─01bf
    │          │  └─hdl
    │          ├─04b4
    │          │  └─hdl
    │          ├─0b6b
    │          │  └─hdl
    │          ├─0ba0
    │          │  └─hdl
    │          ├─100a
    │          ├─1923
    │          │  └─hdl
    │          ├─1f32
    │          │  └─hdl
    │          ├─20df
    │          │  └─src
    │          ├─2e37
    │          ├─38e8
    │          │  └─hdl
    │          ├─39ba
    │          │  └─hdl
    │          ├─3c71
    │          │  └─hdl
    │          ├─40b8
    │          │  └─hdl
    │          ├─4e69
    │          │  └─hdl
    │          ├─52cb
    │          │  └─hdl
    │          ├─564d
    │          │  ├─hdl
    │          │  └─simulation
    │          ├─5ab6
    │          │  └─hdl
    │          ├─6039
    │          │  └─hdl
    │          ├─6273
    │          │  ├─hdl
    │          │  └─simulation
    │          ├─7dd0
    │          │  └─hdl
    │          ├─7e3a
    │          │  └─hdl
    │          ├─7ee0
    │          │  └─hdl
    │          ├─832a
    │          │  └─hdl
    │          ├─896d
    │          │  └─hdl
    │          ├─8c13
    │          │  └─hdl
    │          │      └─verilog
    │          ├─bf41
    │          │  └─hdl
    │          ├─d9f8
    │          │  └─hdl
    │          ├─df1b
    │          │  └─hdl
    │          ├─ed72
    │          │  └─hdl
    │          └─f822
    │              └─src
    ├─constraints
    ├─hdl
    ├─ip
    └─others


これで、Vivado 2016.4 のプロジェクトの作成を試みたのだが、IP のソースが足りないというエラーでプロジェクトを作成することができなかった。
Twitter でプロジェクトができないとつぶやいていたら、@torix3g さんが、Zybo-Z7-20-pcam-5c/repo/vivado-library@4c77837の中にIP のソースがあると教えてくれた。ありがとうございました。

Zybo-Z7-20-pcam-5c/repo/ には、vivado-library @ 4c77837 があるが、その下は別のGitHub のプロジェクトとなっているようだった。
MIPI_camera_7_180104.jpg

vivado-library @ 4c77837 をクリックすると、Digilent Vivado library に移動した。これは別のGitHub のプロジェクトだ。
MIPI_camera_8_180104.jpg

ip フォルダをクリックすると、2つのMIPI 関連のIP があるのが確認できる。
MIPI_camera_9_180104.jpg

ちなみに、通常のDigilent 社のGitHub のvivado-library ではMIPI の 2 つのIP は存在しない。リンクされていないディレクトリのようだ。

Digilent Vivado library に戻って、Download ZIPで vivado-library-4c77837154a3dd90ef1ed9feacdce41dbfc6e538.zip をダウンロードすることができた。
MIPI_camera_10_180104.jpg

Z:\ZYBO_Z7\vivado-library-4c77837154a3dd90ef1ed9feacdce41dbfc6e538.zip\vivado-library-4c77837154a3dd90ef1ed9feacdce41dbfc6e538 の下のすべてのファイルとフォルダをZ:\ZYBO_Z7\Zybo-Z7-20-pcam-5c-master\repo\vivado-library にコピーした。
MIPI_camera_11_180104.jpg

これでファイルがそろったので、Vivado 2016.4 を立ち上げた。

Tcl Console で、

cd z:/ZYBO_Z7/Zybo-Z7-20-pcam-5c-master/proj

を入力した。
MIPI_camera_12_180104.jpg

Tcl Console で、

source ./create_project.tcl

を入力した。
MIPI_camera_13_180104.jpg

すると、pcam-5c プロジェクトが作成された。
MIPI_camera_14_180104.jpg
  1. 2018年01月04日 05:23 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20でPcam 5Cを使用する1(D-PHYインターフェース)

2018 年の最初のFPGA の記事は ZYBO Z7 で Pcam 5C を使ってみるという記事にする。

まずは、Xilinx 社の XAPP 894 (v1.0) D-PHY ソリューション でD-PHY のことを学習しよう。

XAPP 894 (v1.0) D-PHY ソリューション で学習した内容を示す。
MIPI (Mobile Industry Processor Interface) は、MIPIアライアンスが策定したシリアル通信インターフェース規格で、カメラ・シリアル・インターフェース(CSI)とディスプレイ・シリアル・インターフェース(DSI)があるそうだ。そして、MIPI のインターフェース規格がD-PHY のようだ。
現在、1本でD-PHY をサポートできるI/O ピンがFPGAにないので、複数のピンを使用している。
その理由を示す。
XAPP 894 (v1.0) D-PHY ソリューション の図1:D-PHYの概要を引用する。
MIPI_camera_3_180103.jpg

D-PHYには、2つのモードがあって、LVDS のHS (HS Diff. Swing (e.g. 200mV))と、LVCMOS-1.2V の LP(Low-power Signaling Level (e.g. 1.2V))があるので、通常のFPGAの 1 ピンでは出力できない。

D-PHY の信号線には、クロック・ペアとデータのレーンがあるが、ZYBO Z7-20 のMIPI インターフェースは 2 つのデータ・レーンを使用している。

1つのD-PHY インターフェースには 4 のI/O ピンを必要とする。どんなインターフェースでFPGAのI/O ピンを使用しているかを示す図が、XAPP 894 (v1.0) D-PHY ソリューション の図 11 :FPGA 対応のD-PHY レシーバーだ。それを引用する。
MIPI_camera_4_180103.jpg

ZYBO Z7 では、XAPP 894 (v1.0) D-PHY ソリューション の図 11 :FPGA 対応のD-PHY レシーバーと同じ回路で接続されている。

ZYBO Z7 の回路図を見てみよう。

2ページのMIPI インターフェース部分を引用する。
MIPI_camera_1_180103.jpg

XAPP 894 (v1.0) D-PHY ソリューション の図 11 :FPGA 対応のD-PHY レシーバー と同じだった。

MIPI 関連の線がFPGA のどこに接続されているかだが、ZYBO Z7 の回路図の 11 ページにFPGA への接続図がある。
MIPI_camera_2_180103.jpg

例えば、レーン 0 は、MIPI_LANE0_P が M19 ピンに、MIPI_LANE0_N が M20 ピンに、LP_LANE_0_N が M18 ピンに、LP_LANE_0_P が L19 に接続されている。
  1. 2018年01月03日 08:06 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

ハンターマウンテン塩原スキー場に行ってきました

今日、2人の娘とハンターマウンテン塩原スキー場に行ってきました。

午前4時45分に家を出て、午前8時ころスキー場に着きました。
晴れているけど、寒そうでした。
hunter_1_180103.jpg

初心者用リフトで上に上がって、1本滑ったら、風が強く顔が寒くて千切れそうです。とても滑ってられません。
慌てて、ショップに顔面マスクを買いに行きました。これでやっと何とか滑れるようになりました。
リフトで上がっていっても風が冷たかったので、ゴンドラにしましたが、強風のため減速運転、しかも6人乗りのところ、4人しか乗せたなかったので、乗るまでに時間がかかりました。
ゴンドラ内で写真撮影しました。毛糸の帽子が見えているのは下の娘です。
hunter_2_180103.jpg

午前11時ころ、レストハウスで、食事にしました。2回はオムライス専用になったんですね。私は、ビーフシチューかけたオムライス 1,400 円にしました。味はまあまあでしたが、ビーフシチューはレトルトなんでしょうね。お肉がしょぼかったです。まあ、ゲレ食なので、仕方ありません。
このころは快晴ですが、やはり風が強かったです。素顔だと顔がもげそうです。。。
hunter_3_180103.jpg

食事を終えて、3本ほど滑って、また休憩しましたが、皆、疲れたということで、午後1時過ぎに変えることにしました。
合計6本か、7本しか、リフト、ゴンドラ乗りませんでした。もう年なので、あまり滑れません。雪を見て滑れただけで満足です。

そうそう、今年は、うちの先生にもらったサロモンの高い99 cm のファンスキーで滑ったのですが、板が硬かったです。斜面が少し急なところでスピードを出すには安定感があって良いのですが、緩斜面で曲がりにくい感じでした。
  1. 2018年01月02日 22:15 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

あけましておめでとうございます。今年もよろしくお願いします。

あけましておめでとうございます。今年もよろしくお願いします。

今年もいろいろとFPGAに実装して行きたいです。
監視ロボットを作ってYOLO2(じゃなくても良いのですが)をできればFPGAに実装したいと思っています。
intel のHLS を実装してみたいとか、SDSoC を使いこなしてみたいとか、reVISION やってみたいとか、いろいろとやりたいことがありますが、どこまでできるかは良く分かりません。

昨年の”FPGAの部屋”のアクセス記録です。合計、525,871 アクセスでした。皆さん、昨年はアクセスしていただいて、ありがとうございました。今年も”FPGAの部屋”をよろしくお願いいたします。
FPGAs_room_access_180101.png
  1. 2018年01月01日 06:12 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0