feat(tests): add crosspage fetch test (#68)
- feat(tests): add crosspage fetch test
Signed-off-by: ngc7331 ngc7331@outlook.com
- feat(tests/crosspage-fetch): refactor with flags
Signed-off-by: ngc7331 ngc7331@outlook.com
- fix(tests/crosspage-fetch): split dst_dir
Signed-off-by: ngc7331 ngc7331@outlook.com
Signed-off-by: ngc7331 ngc7331@outlook.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
The Abstract Machine (AM)
Get Started for Memory Images (Workloads)
In this section, we demonstrate how to build memory images (
base_address = 0x80000000) for simulation.clone
nexus-amfrom github:enter tests or benchmark directory (using
apps/coremarkas an example):use the “.bin” file as the memory image for RTL simulation
Here we use the DiffTest RTL-simulation framework as an example. NEMU and other designs should work similarly if the base address is 0x8000_0000.
How to build benchmark flash image
Some designs have a read-only bootrom for bring-up. This section builds the bootrom (flash) image whose base address is 0x1000_0000. We will be using
riscv64-xs-flashinstead ofriscv64-xsto fix into the new address space. Do NOT follow the steps in this section if you don’t know what the bootrom means.enter benchmark directory (using
apps/coremarkas an example):you will find a “.bin” file, this is a benchmark image for flash
to add the flash image to simulation in DiffTest, you can use the
-Foption:Explanation of multi-processor bring-up drivers
The driver consists of the following functions (implemented in am/src/xs/isa/riscv/mpe.c) :
_mpe_init(void (*entry)()): register anentryprocedure that each processor will run into after initialization_ncpu(): return the total number of processors_cpu(): return the hartID of current processor (start from 0)_atomic_xchg(intptr_t *addr, intptr_t newval): atomic exchange function,replace the value in *addr with newval and return the original value_atomic_add(intptr_t *addr, intptr_t adder): atomic adding function,increment value in *addr with adder and return the original value_barrier(): barrier function,wait until all processors arrive here(For more atomic operations, You can implement it yourself using a similar format as _atomic_add)
A simple demo is provided in tests/amtest/src/tests/mp.c Here is the instruction to build and run
The output should be like this:
Note that both
sumandatomic_sumare incremented 100 times per CPU parallelly. However,atomic_sumutilizes atomic primitive. Thus, we havesum<= 200 &&atomic_sum== 200.How to build AM image for 16550
The major difference between RTL simulation with Verilator and FPGA of Xiangshan is that FPGA is using 16550 at 0x310b0000, while RTL simulation is using UARTLITE at 0x40600000. So we should change the serial devices when compiling for FPGA by
Then run
build/hello-riscv64-xs.binon FPGARemember to
rm -rf $AM_HOME/am/build buildif you want to switch back to uartlite.How to generate compile_commands.json
compile_commands.jsoncan be used in many language servers to help completion.If you don’t have bear on your machine, please search.