- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!気づいたら
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になるなあ.