PYNQ > FIFO loopbackを含むDMA転送のBlock Design (Vivado v2019.1) > v2017.2の方法から変更

```txt:動作環境
Windows 10 Pro (v1909) 
PYNQ-Z1 (Digilent) (以下、PYNQと表記)
Vivado v2019.1 (64-bit)
```

### 概要

- DMAを使ったPS<->PLの転送を行うBlock Designを作成する
- AXI DMAを使う
- AXI FIFOを使ってループバックする
- Tutorialに従うがVivado v2019.1になった変更に対応する
    - 旧: AXI  Interconnect
    - 今回: AXI Smart Connect
    - 実際にはVivadoが自動でしてくれる。AXI Interconnectがなく、AXI Smart Connectがあるようになる。

### Tutorial

- Using the AXI DMA in Vivado
    - http://www.fpgadeveloper.com/2014/08/using-the-axi-dma-in-vivado.html
    - 2014年8月6日
    - Vivado 2017.2での作成
    - ビデオ (27分)もある
        - http://www.fpgadeveloper.com/2017/10/using-axi-dma-in-vivado-reloaded.html

### Vivado v2019.1での操作

- Part: cv7z020clg400-1
- ZYNQ Processing System追加
- ZYNQ Processing Systemダブルクリック
    - Presets > Apply Configuration
        - pynq_revC.tcl 読み込み (PYNQ-Z1用のプリセット)
    - PS-PL Configuration
        - M AXI GP0 interfaceチェック
            - ( AXI Non Secure Enablement > GP Master AXI Interface以下にある )
        - S AXI HP0 interfaceチェック
            - ( HP Slave AXI Interface 以下にある)
            - High performanceだそうな (要確認)

プリセット読み込み
![コメント 2020-07-18 110405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/b0cfe458-9400-01d8-fcb5-2e3d39f27686.png)

図. M AXI GP0 interfaceチェック
![コメント 2020-07-18 110635.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/ec85799c-9d4a-1552-cefe-58eb3bf91da6.png)

図. S AXI HP0 interfaceチェック
![コメント 2020-07-18 110605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/f202a1e2-00a9-45fc-aa8c-4dd0505d9ee6.png)

- AXI Direct Memory Access 追加
- AXI4-Stream Data FIFO追加
- Run Block Automation実行
    - 設定そのまま OK
- Run Connection Automation実行
    - S_AXI_LITE選択
    - S_AXI_HP0選択
        - Master: /axi_dma_0/M_AXI_MM2S を選択
- AXI4-Stream Data FIFOとAXI Direct Memory Accessを接続
    - S_AXIS <-> M_AXIS_MM2S
        - M_AXI_MM2Sではなく、M_AXIS_MM2S
    - M_AXIS <-> S_AXIS_S2MM

図. S_AXIS <-> M_AXIS_MM2S接続
![コメント 2020-07-18 111143.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/a595f2d3-5696-a1b5-c193-c0cd5289324e.png)

図. M_AXIS <-> S_AXIS_S2MM接続
![コメント 2020-07-18 111158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/ca12263a-eaef-7a6b-6976-baafd9dfc03d.png)


- Run Connection Automation
    - M_AXI_S2MM チェック
    - M_AXI_SG チェック
    - s_axix_aclkチェック

あとは「Create HDL Wrapper」をしてRun Synthesisを実施して、それ以降を逐次実施するとbistreamが完成する。
Core i7-6700K 4.00GHzで15分はかかる。

Warningがいくつか出る。このあたりは今後学習する項目。

### 完成したBlock Design

![コメント 2020-07-18 112321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/e6feef08-392d-80ab-2ceb-1b5ba4586e52.png)



### 今後

PYNQでDMA関連の処理を実装する予定。

- Docs » PYNQ Libraries » DMA
    - PYNQ v2.5.1
    - https://pynq.readthedocs.io/en/v2.5.1/pynq_libraries/dma.html#dma

問題はallocateがPYNQのv2.5でないと動かないこと。
PYNQのバージョンを上げるか、別の方法を探すことになる。

[DigilentにあるPYNQ-Z1 Image](https://reference.digilentinc.com/reference/programmable-logic/pynq-z1/start?_ga=2.262501132.1498677483.1595041164-1520856802.1595041164)はv2.4?。

### 関連

情報整理で見つけた気になる記事。AXI DMAでなくBRAMを使う。

- PYNQ を使って Python で手軽に FPGA を活用 (5)
    - https://www.acri.c.titech.ac.jp/wordpress/archives/36#toc3


- Digilentが提供するPYNQ-Z1のImage v2.4に対応するDMAの実装
    - https://pynq.readthedocs.io/en/v2.4/pynq_libraries/dma.html
    - 試したが、うまく動作せず



### その後 (2020-08-08)

上記で生成したBlock Designではうまく動作しなかった。
代わりに下記を参考にしたものではうまく動作した。

https://github.com/Xilinx/PYNQ_Workshop/blob/master/Session_4/6_dma_tutorial.ipynb
https://github.com/Xilinx/PYNQ_Workshop/tree/master/Session_4/bitstream