aboutsummaryrefslogtreecommitdiff
path: root/README
blob: 71827bc7d18e0aa06db7683c84f5feae5f8abb50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
==========================================================================
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 14

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