!気づいたら 7月.2019年も後半戦. !Intel PACでSignal Tap使う PACでSiganl Tap使う練習. [Accelerator Functional Unit (AFU) Developer’s Guide for Intel(R) Programmable Acceleration Card with Intel(R) Arria(R) 10 GX FPGA|https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug-afu-dev.pdf] を参考に,サンプル nlb_mode_0_stp を動かしてみる. まずは, % cd $OPAE_PLATFORM_ROOT/hw/samples/nlb_mode_0_stp/ に移動. % afu_synth_setup --source hw/rtl/filelist_mode_0_stp.txt build_synth % cd build_synth % rtl_src_config --qsf --rel build ../hw/rtl/filelist_mode_0_stp.txt >hw/afu.qsf # 変更してなければ不要な気が % ${OPAE_PLATFORM_ROOT}/bin/run.sh としてビルド. ここで,filelist_mode_0_stp.txt をみてみると, +define+INCLUDE_REMOTE_STP C:filelist_mode_0.txt QI:../par/${OPAE_PLATFORM_FPGA_FAMILY}/extra_tcl-0_stp.tcl ../par/nlb_0_stp.sdc と,INCLUDE_REMOTE_STPのバリアントがついていることが確認できる. 参照されている,hw/rtl/filelist_mode_0.txtの中身は, +define+NLB400_MODE_0 C:filelist_base.txt で,さらに,hw/rtl/filelist_base.txtの中身は, +define+BIST_AFU nlb_400.json test_sw1.sv test_rdwr.sv test_lpbk1.sv requestor.sv nlb_lpbk.sv nlb_csr.sv nlb_C1Tx_fifo.sv ccip_std_afu.sv ccip_interface_reg.sv ccip_debug.sv arbiter.sv nlb_gram_sdp.v pipeline.sv platform/${OPAE_PLATFORM_FPGA_FAMILY}/local_mem.sv resync.v altera_std_synchronizer_nocut.v QSYS_IPs/${OPAE_PLATFORM_FPGA_FAMILY}/RAM/req_C1TxRAM2PORT.qsys QSYS_IPs/${OPAE_PLATFORM_FPGA_FAMILY}/RAM/lpbk1_RdRspRAM2PORT.qsys include_files/common ../par/stp_basic.stp ../par/nlb_0_stp.sdc となっていて,これが実体っぽい. また,filelist_mode_0_stp.txtに書いてあるpar/${OPAE_PLATFORM_FPGA_FAMILY}/extra_tcl-0_stp.tclには, set_global_assignment -name ENABLE_SIGNALTAP ON set_global_assignment -name USE_SIGNALTAP_FILE ../hw/par/A10/stp_basic.stp と書いてあった.このファイルは,build_synth/hw/afu.qsf の中で, source ../../hw/par/A10/extra_tcl-0_stp.tcl と参照される. 推測だけど,afu_synth_setup の--sourceに指定するファイルでは, C: foo って書くとfooが,afu_synth_setup時に展開されて, QI: bar って書くとbarが,build_synth/hw/afu.qsfで参照されるてQuartusで使われる,の,かな. ビルドがおわったら nlb_400.gbs っていうのができたので, % sudo fpgaconf nlb_400.gbs でコンフィグレーション. ソフトウェアは,$OPAE_PLATFORM_ROOT/hw/samples/nlb_mode_0_stp/sw/READMEにも書いてあるように $OPAE_PLATFORM_ROOT/sw/opae-1.1.2-1/samples/ の下. % gcc -std=c99 hello_fpga.c -lopae-c -luuid とかして,コンパイル. リモートデバッグには, * $OPAE_PLATFORM_ROOT/hw/remote_debug/mmlink_setup_profiled.tcl * $OPAE_PLATFORM_ROOT/hw/remote_debug/remote_debug.sof を使う.これはインストールされたものを使う. 一つターミナルを開いて % sudo mmlink -P 3333 を実行. 別のターミナルで %export PATH=どこか/intelFPGA_pro/quartus/sopc_builder/bin:$PATH (自分の環境だと) % export PATH=/home/miyoshi/data/inteldevstack/intelFPGA_pro/quartus/sopc_builder/bin:$PATH として, % cd $OPAE_PLATFORM_ROOT/hw/remote_debug % system-console --rc-script=mmlink_setup_profiled.tcl remote_debug.sof localhost 3333 とか. QuartusでメニューのFileでstpを指定するとSignal Tapが開く. JTAG Chain configurationに, "system-console on localhost"っていうのがみえてるのでそれを指定. とりあえず,JTAG Readyになった. $OPAE_PLATFORM_ROOT/sw/opae-1.1.2-1/samples/ の下でコンパイルしたa.outを ./a.out -s として実行(FPGA_OPEN_SHAREDをつけてfpgaOpenを呼ぶ)するとプログラムは実行できた. ...けど,Ready to acquireにならないな インストール時に展開されたであろう, * ./hw/par/A10/stp_basic.stp * ./bin/nlb_mode_0_stp.gbs ならReady to acquireになるなあ.