2 changed files with 98 additions and 97 deletions
@ -1,97 +0,0 @@ |
|||
========================================================================== |
|||
RISC-V ISA Simulator |
|||
========================================================================== |
|||
# Author : Andrew Waterman, Yunsup Lee |
|||
# Date : June 19, 2011 |
|||
# Version : (under version control) |
|||
|
|||
The RISC-V ISA Simulator implements a functional model of one or more |
|||
RISC-V processors. |
|||
|
|||
-------------------------------------------------------------------------- |
|||
Build Steps |
|||
-------------------------------------------------------------------------- |
|||
|
|||
We assume that the RISCV environment variable is set to the RISC-V tools |
|||
install path, and that the riscv-fesvr package is installed there. |
|||
|
|||
% mkdir build |
|||
% cd build |
|||
% ../configure --prefix=$RISCV --with-fesvr=$RISCV |
|||
% make |
|||
% [sudo] make install |
|||
|
|||
-------------------------------------------------------------------------- |
|||
Compiling and Running a Simple C Program |
|||
-------------------------------------------------------------------------- |
|||
|
|||
Install spike (see Build Steps), riscv-gcc, and riscv-pk. |
|||
|
|||
Write a short C program and name it hello.c. Then, compile it into a RISC-V |
|||
ELF binary named hello: |
|||
|
|||
% riscv-gcc -o hello hello.c |
|||
|
|||
Now you can simulate the program atop the proxy kernel: |
|||
|
|||
% spike pk hello |
|||
|
|||
-------------------------------------------------------------------------- |
|||
Simulating a New Instruction |
|||
-------------------------------------------------------------------------- |
|||
|
|||
Adding an instruction to the simulator requires two steps: |
|||
|
|||
1. Describe the instruction's functional behavior in the file |
|||
riscv/insns/<new_instruction_name>.h. Examine other instructions |
|||
in that directory as a starting point. |
|||
|
|||
2. Add the opcode and opcode mask to riscv/opcodes.h. Alternatively, |
|||
add it to the riscv-opcodes package, and it will do so for you: |
|||
|
|||
% cd ../riscv-opcodes |
|||
% vi opcodes // add a line for the new instruction |
|||
% make install |
|||
|
|||
3. Rebuild the simulator. |
|||
|
|||
-------------------------------------------------------------------------- |
|||
Interactive Debug Mode |
|||
-------------------------------------------------------------------------- |
|||
|
|||
To invoke interactive debug mode, launch spike with -d: |
|||
|
|||
% spike -d pk hello |
|||
|
|||
To see the contents of a register (0 is for core 0): |
|||
|
|||
: reg 0 a0 |
|||
|
|||
To see the contents of a memory location (physical address in hex): |
|||
|
|||
: mem 2020 |
|||
|
|||
To see the contents of memory with a virtual address (0 for core 0): |
|||
|
|||
: mem 0 2020 |
|||
|
|||
You can advance by one instruction by pressing <enter>. You can also |
|||
execute until a desired equality is reached: |
|||
|
|||
: until pc 0 2020 (stop when pc=2020) |
|||
: until mem 2020 50a9907311096993 (stop when mem[2020]=50a9907311096993) |
|||
|
|||
Alternatively, you can execute as long as an equality is true: |
|||
|
|||
: while mem 2020 50a9907311096993 |
|||
|
|||
You can continue execution indefinitely by: |
|||
|
|||
: r |
|||
|
|||
At any point during execution (even without -d), you can enter the |
|||
interactive debug mode with <control>-<c>. |
|||
|
|||
To end the simulation from the debug prompt, press <control>-<c> or: |
|||
|
|||
: q |
|||
@ -0,0 +1,98 @@ |
|||
RISC-V ISA Simulator |
|||
====================== |
|||
|
|||
Author : Andrew Waterman, Yunsup Lee |
|||
|
|||
Date : June 19, 2011 |
|||
|
|||
Version : (under version control) |
|||
|
|||
About |
|||
------------- |
|||
|
|||
The RISC-V ISA Simulator implements a functional model of one or more |
|||
RISC-V processors. |
|||
|
|||
Build Steps |
|||
--------------- |
|||
|
|||
We assume that the RISCV environment variable is set to the RISC-V tools |
|||
install path, and that the riscv-fesvr package is installed there. |
|||
|
|||
$ mkdir build |
|||
$ cd build |
|||
$ ../configure --prefix=$RISCV --with-fesvr=$RISCV |
|||
$ make |
|||
$ [sudo] make install |
|||
|
|||
Compiling and Running a Simple C Program |
|||
------------------------------------------- |
|||
|
|||
Install spike (see Build Steps), riscv-gcc, and riscv-pk. |
|||
|
|||
Write a short C program and name it hello.c. Then, compile it into a RISC-V |
|||
ELF binary named hello: |
|||
|
|||
$ riscv-gcc -o hello hello.c |
|||
|
|||
Now you can simulate the program atop the proxy kernel: |
|||
|
|||
$ spike pk hello |
|||
|
|||
Simulating a New Instruction |
|||
------------------------------------ |
|||
|
|||
Adding an instruction to the simulator requires two steps: |
|||
|
|||
1. Describe the instruction's functional behavior in the file |
|||
riscv/insns/<new_instruction_name>.h. Examine other instructions |
|||
in that directory as a starting point. |
|||
|
|||
2. Add the opcode and opcode mask to riscv/opcodes.h. Alternatively, |
|||
add it to the riscv-opcodes package, and it will do so for you: |
|||
|
|||
$ cd ../riscv-opcodes |
|||
$ vi opcodes // add a line for the new instruction |
|||
$ make install |
|||
|
|||
3. Rebuild the simulator. |
|||
|
|||
Interactive Debug Mode |
|||
--------------------------- |
|||
|
|||
To invoke interactive debug mode, launch spike with -d: |
|||
|
|||
$ spike -d pk hello |
|||
|
|||
To see the contents of a register (0 is for core 0): |
|||
|
|||
: reg 0 a0 |
|||
|
|||
To see the contents of a memory location (physical address in hex): |
|||
|
|||
: mem 2020 |
|||
|
|||
To see the contents of memory with a virtual address (0 for core 0): |
|||
|
|||
: mem 0 2020 |
|||
|
|||
You can advance by one instruction by pressing <enter>. You can also |
|||
execute until a desired equality is reached: |
|||
|
|||
: until pc 0 2020 (stop when pc=2020) |
|||
: until mem 2020 50a9907311096993 (stop when mem[2020]=50a9907311096993) |
|||
|
|||
Alternatively, you can execute as long as an equality is true: |
|||
|
|||
: while mem 2020 50a9907311096993 |
|||
|
|||
You can continue execution indefinitely by: |
|||
|
|||
: r |
|||
|
|||
At any point during execution (even without -d), you can enter the |
|||
interactive debug mode with `<control>-<c>`. |
|||
|
|||
To end the simulation from the debug prompt, press `<control>-<c> or: |
|||
|
|||
: q |
|||
Loading…
Reference in new issue