Arm DesignStart ProgramではCortex-M3も開放されており、こちらもRTLシミュレーション環境が用意されていた。
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
正しく実行できたようだ。