FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

Arm DesignStart Cortex-M3を試す(3. Modelsimを使ってDhrystoneを流す)

Arm DesignStart ProgramではCortex-M3も開放されており、こちらもRTLシミュレーション環境が用意されていた。

https://community.arm.com/cfs-filesystemfile/__key/communityserver-components-secureimagefileviewer/communityserver-blogs-components-weblogfiles-00-00-00-37-86/designstart_2D00_chip.png_2D00_900x506x2.jpg_2D00_900x506x2.jpg?_=636704413372858051

DesignStartのウェブサイトから Cortex-M3のデザインをダウンロードする。AT421-MN-80001-r0p0-02rel0というパッケージ名で公開されているのだが、これをダウンロードして展開する。

AT421-MN-80001-r0p0-02rel0/m3designstart/logical/testbench/execution_tb に移動して、make helpを実行してみると使い方が分かる。

$ make help
###################################################################
This is the top Makefile for the execution testbench
make or make help shows this extra information

See make.cfg for additional build configuration settings

Usage: make target [options]
target is one of:
compile                     : compile the testbench (simulator can be vcs, mti, ius)
run                         : run a test (simulator can be vcs, mti, ius)
runall                      : run all tests (simulator can be vcs, mti, ius)
tests                       : compile all tests
testcode                    : compile a specific test
clean                       : clean the compiled testbench
clean_tests                 : clean all compiled test code
clean_all                   : clean the compiled testbench and all compiled test code
options can be:
TESTNAME=<test>             : specify the test name
PLUSARGS=<plusargs_list>    : run time options
BUILDOPTS=<buildopts_list>  : build time options
SIMULATOR=<ius,mti,vcs>     : choose simulator tool
TOOL_CHAIN=<ds5,gcc,keil>   : choose C compiler tool
DSM=no                      : used with compile and run time. Setting DSM=yes will pick Carbon model

使えるシミュレータとしては、VCS, ModelSim, Incisiveがあるらしい。 SIMULATOR=オプションで指定する。また、テストパタンはTESTNAME=で記述する。

テストパタンとしては、AT421-MN-80001-r0p0-02rel0/m3designstart/logical/testbench/testcodesの中から指定すればいいのかな?

apb_mux_tests
cxdt
default_slaves_tests
designtest_m3
dhry
dualtimer_demo
generic
gpio_driver_tests
gpio_tests
hello
interrupt_demo
keil_multiple
memory_tests
rtx_demo
self_reset_demo
sleep_demo
timer_driver_tests
timer_tests
uart_driver_tests
uart_tests
watchdog_demo

例えば、Dhrystoneを実行する場合には以下のように実行する。 compile / runの順で実行するのが良いようだ。

$ make compile
$ make run TESTNAME=dhry
options.mk:106: "Warning: TARMAC trace would not be generated for obfuscated RTL"
 >> Running testbench with mti   and DSM=no
export LD_LIBRARY_PATH=:/home/msyksphinz/riscv64/lib; export TARMAC_ENABLE=1; vsim  -quiet -assertdebug -voptargs="+acc=blnr"  tb_fpga_shield -64 -c -do "radix hex; run 40000us ;quit -f"  | tee "mti_dhry_run.log"
Reading pref.tcl

# 10.5b

# vsim -quiet -assertdebug -voptargs="+acc=blnr" tb_fpga_shield -c -do "radix hex; run 40000us ;quit -f"
# Start time: 23:28:17 on Oct 24,2018
# ** Warning: Design size of 39941 statements exceeds ModelSim-Intel FPGA Starter Edition recommended capacity.
# Expect performance to be adversely affected.
# radix hex
# hexadecimal
#  run 40000us
# ** Warning: (vsim-3116) Problem reading symbols from linux-gate.so.1 : can not open ELF file.
# Loading CXDT from parameter IMAGENAME (./CXDT.bin)
# *
# * Max. address:                        001ffff
# * Begin of full protection address:    0000000
# * Begin of half protection address:    0010000
# * Begin of quarter protection address: 0018000
# *
# ===========================================================
#
#  nvSRAM Power UP
# *
# * Max. address:                        001ffff
# * Begin of full protection address:    0000000
# * Begin of half protection address:    0010000
# * Begin of quarter protection address: 0018000
# *
# ===========================================================
#
...

という訳でModelSim Intel FPGA Starter Editionを使っているのだが、30分以上実行してもまだ終わらない。。。なかなか先は長い。。。

という訳で、helloを実行してみる。

$ make run TESTNAME=hello
...
#  nvSRAM Power UP
# 130040.000ns UART: Hello world
# 161640.000ns UART: ** TEST PASSED **
# 164720.000ns UART: Test Ended
# ** Note: $stop    : ../verilog/cmsdk_uart_capture_ard.v(240)
#    Time: 164720 ns  Iteration: 1  Instance: /tb_fpga_shield/u_cmsdk_uart_capture_ard
# Break in NamedBeginStat p_sim_end at ../verilog/cmsdk_uart_capture_ard.v line 240
# Stopped at ../verilog/cmsdk_uart_capture_ard.v line 240
# quit -f
# End time: 00:27:15 on Oct 25,2018, Elapsed time: 0:01:30
# Errors: 0, Warnings: 2

正しく実行できたようだ。