- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!streaming_dma_afu
Intel PACのサンプル streaming_dma_afu の動作をあれこれ調査.
::ソフトウェア
* sw/fpga_dma_st_test.cpp
** main関数.引数の解析(parse_args)
** do_action で処理を開始
* sw/fpga_dma_st.cpp
** MMIOWrite64Blk/MMIOWrite32Blk/MMIORead64Blk/MMIORead32Blk
** dispatcherWorker
** completionWorker
** fpgaDMAOpen/fpgaDMAClose/fpgaGetDMAChannelType/fpgaDMATransferInit/fpgaDMATransferReset/fpgaDMATransferDestroy
** fpgaDMATransferSetSrc/fpgaDMATransferSetDst/fpgaDMATransferSetLen/fpgaDMATransferSetTransferType/
*** pthread_mutex_lockとってfpga_dma_transfer_t方の引数のパラメタをアップデート
** fpgaDMATransferSetTxControl/fpgaDMATransferSetRxControl/fpgaDMATransferSetTransferCallback/fpgaDMATransferSetLast/fpgaDMATransferGetBytesTransferred/fpgaDMATransferCheckEopArrived
** fpgaDMATransfer
*** dma->ingress_queue.push(sw_desc) でDMA処理を実行
** fpgaDMAInvalidate
*** pthread_mutex_lockとってfpga_dma_transfer_t方の引数のパラメタをアップデート
* sw/fpga_dma_st_test_utils.cpp
** do_action - 実際の処理のエントリ関数
*** non_loopback_test/loopback_testを呼び出す
** loopback_tset
*** pthread_createでm2sworkerとs2mworkerを起動.各スレッドが終了するまで待つ(pthread_join)
** non_loopback_test
*** config->directionによって m2sworker か s2mworker を呼び出す
** stomCb/mtosCb - バイト数のカウント
** m2sworker, s2mworker
*** fpgaDMATransferSetSrc, fpgaDMATransferSetDst, fpgaDMATransferSetLen, fpgaDMATransferSetTransferTypeでDMAセット
*** m2sworker: fpgaDMATransferSetTxControl(transfer, TX_NO_PACKET/GENERATE_SOP/GENERATE_EOP/TX_NO_PACKET) で 送信
*** s2mworker: fpgaDMATransferSetRxControl(transfer, rx_ctrl); で 受信
* sw/fpga_pattern_checker.cpp
** start/stop_checker, wait_for_checker_completeでpacket_generaterの制御
*** fpgaReadMMIO32/fpgaWriteMMIO32でレジスタの読み書きをして制御する
* sw/fpga_pattern_gen.cpp
** start/stop_generator, wait_for_generator_completeでpacket_generaterの制御
*** fpgaReadMMIO32/fpgaWriteMMIO32でレジスタの読み書きをして制御する
* sw/fpga_dma.h
** fpgaDMAXXX系などの関数のプロトタイプ
* sw/fpga_dma_st_common.h
** debug_print/error_printなどの定義
* sw/fpga_dma_st_internal.h
** FPGA制御関連のdefineや構造体
* sw/fpga_dma_st_test_utils.h
** fpga_dma_st_testで使う定数などの定義
* sw/fpga_dma_types.h
** DMA転送用の構造体の定義
* sw/fpga_pattern_checker.h
** pattern_checkerのレジスタのベースアドレス,レジスタ読み書き用の構造体
* sw/fpga_pattern_gen.h
** pattern_generatorのレジスタのベースアドレス,レジスタ読み書き用の構造体
* sw/x86-sse2.h
** x86 SSE2でデータのアライメントを取るためのヘルパー関数のプロトタイプ
* sw/x86-sse2.S
** x86 SSE2でデータのアライメントを取るためのヘルパー関数の実装(アセンブラ)
::ハードウェア
* hw/rtl/QSYS_IPs/custom_pattern_generator/mtm_custom_pattern_generator.v
** パターンジェネレータ.pattern_memoryのデータをAvalon-STで出力
* hw/rtl/QSYS_IPs/custom_pattern_checker/mtm_custom_pattern_checker.v
** パターンチェッカ.Avalon-STで受け取ったデータとpattern_memoryのデータを比較する
* hw/rtl/QSYS_IPs/avst_decimator/avst_decimator.sv
** Avalon-STで入ってきたデータをAvalon-STで打ち返す(snk_data -> src_data)
** decimation_counterの値でsrc_validを制御(なので,decimationされる)