”
axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる2(Vivado でビットファイルと hwh ファイルを生成)”の続き。
TKEEP と TSTRB は、入力された信号を出力するか、オール 1 にする必要がありそうだ。それを踏まえて、再度 axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させてみようということで、前回は、DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを再度、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを生成した。今回は、Jupyter Notebook で動作を確認し、ILA ダッシュボードで波形を確認する。
Jupyter Notebook に DMA_pow2_wrapper.bit をアップロードして、名前を DMA_pow2.bit に変更した。
また、DMA_pow2.hwh もアップロードした。
これで Python3 コードを動作させたところ、動作した。。。良かった。result には data の値を 2 乗した値が入っている。


python3 のコード部分のみを示す。
from pynq import allocate, Overlay
DMA_pow2_axis_i = Overlay("./DMA_pow2.bit")
dma = DMA_pow2_axis_i.axi_dma_0
pow2 = DMA_pow2_axis_i.DMA_pow2_axis_0
import numpy as np
data = allocate(shape=(10), dtype=np.uint32)
result = allocate(shape=(10), dtype=np.uint32)
for i in range(10):
data[i] = i
print(data)
print(result)
def run_kernel():
dma.sendchannel.transfer(data)
dma.recvchannel.transfer(result)
pow2.write(0x00,0x01) # start
dma.sendchannel.wait()
dma.recvchannel.wait()
run_kernel()
print(result)
del data
del result
ILA ダッシュボードを起動して波形を観察する。
最初に、axi_dma_0 の MM2S の ARVALID の立ち上がりでトリガーを掛けた。

10 バーストで 0 〜 9 まで DMA Read している。問題ない。
AXI4-Stream 部分を見たが、全く問題ない。うまく行っている。

axi_dma_0 の S2MM の AWVALID の立ち上がりでトリガーを掛けた。
きちんと 10 バーストで DMA Write が終了している。これが正常の波形だ。
結論として、Xilinx 社の DMA IP に AXI4-Stream で入力する時は、少なくとも TKEEP をケアする必要がある。入力した値を返すか、オール 1 にする。できれば、TSTRB も TKEEP と同様にケアしておいて損はない。
- 2022年03月09日 04:00 |
- KRIA KV260 Vision AI Starter Kit
-
| トラックバック:0
-
| コメント:0