Update docs for the trace generator
This commit is contained in:
parent
75f06d6e84
commit
2a7e7172a9
@ -12,9 +12,10 @@ out waiting for the response.
|
|||||||
|
|
||||||
## Configuring Rocket-Chip with groundtest
|
## Configuring Rocket-Chip with groundtest
|
||||||
|
|
||||||
The groundtest package defines a GroundTestTile, which extends a rocket-chip Tile.
|
The groundtest package defines a GroundTestTile, which extends a
|
||||||
A number of Configs in rocket-chip instantiate GroundTestTile(s) in place of
|
rocket-chip Tile. A number of Configs in rocket-chip instantiate
|
||||||
other types of Tiles (see rocket-chip/src/main/scala/TestConfigs.scala).
|
GroundTestTile(s) in place of other types of Tiles (see
|
||||||
|
[TestConfigs.scala](https://github.com/ucb-bar/rocket-chip/blob/master/src/main/scala/TestConfigs.scala)).
|
||||||
|
|
||||||
Running a ground test can be achieved in rocket-chip as follows
|
Running a ground test can be achieved in rocket-chip as follows
|
||||||
(assuming the `build.sh` script in the
|
(assuming the `build.sh` script in the
|
||||||
@ -54,9 +55,15 @@ Putting the generator and the checker together, we can automatically search for
|
|||||||
|
|
||||||
The [tracegen+check.sh](https://github.com/ucb-bar/groundtest/blob/master/scripts/tracegen%2Bcheck.sh) script provides an automated way to run a number of randomized tests. The number of tests, initial seed, and other parameters can be set via environment variables or the command line, see the script for more details.
|
The [tracegen+check.sh](https://github.com/ucb-bar/groundtest/blob/master/scripts/tracegen%2Bcheck.sh) script provides an automated way to run a number of randomized tests. The number of tests, initial seed, and other parameters can be set via environment variables or the command line, see the script for more details.
|
||||||
|
|
||||||
The examples that follow assume that the `groundtest/scripts`
|
Before running the script, first ensure that:
|
||||||
directory is in your `PATH` and that `rocket-chip/emulator` is your
|
|
||||||
current working directory.
|
- the file `rocket-chip/riscv-tools/riscv-tests/build/isa/rv64ui-p-simple`
|
||||||
|
exists (this is produced by the `build.sh` script in the
|
||||||
|
`rocket-chip/riscv-tools` directory);
|
||||||
|
- `rocket-chip/groundtest/scripts` in your `PATH`;
|
||||||
|
- `rocket-chip/emulator` is your current working directory.
|
||||||
|
|
||||||
|
Now the script can be run as follows.
|
||||||
|
|
||||||
```
|
```
|
||||||
> make CONFIG=TraceGenConfig
|
> make CONFIG=TraceGenConfig
|
||||||
@ -67,28 +74,20 @@ Testing against WMO model:
|
|||||||
50: .......... .......... .......... .......... ..........
|
50: .......... .......... .......... .......... ..........
|
||||||
|
|
||||||
OK, passed 100 tests
|
OK, passed 100 tests
|
||||||
LR/SC success rate: 2%
|
LR/SC success rate: 88%
|
||||||
Load-external rate: 47%
|
Load-external rate: 45%
|
||||||
```
|
```
|
||||||
|
|
||||||
### Running Manually
|
### Running Manually
|
||||||
|
|
||||||
To run a single test with a specified random seed:
|
Suppose we have built the Rocket Chip emulator with the TraceGenConfig
|
||||||
|
configuration as above. Running it using the
|
||||||
|
[tracegen.py](https://github.com/ucb-bar/groundtest/blob/master/scripts/tracegen.py)
|
||||||
|
wrapper script with a few command-line options gives us a random
|
||||||
|
trace:
|
||||||
|
|
||||||
```
|
```
|
||||||
> make CONFIG=TraceGenConfig
|
> tracegen.py ./emulator-Top-TraceGenConfig 1 rv64ui-p-simple
|
||||||
> tracegen.py ./emulator-Top-TraceGenConfig 1 > trace.log
|
|
||||||
> toaxe.py trace.log > trace.axe
|
|
||||||
> axe check WMO trace.axe
|
|
||||||
OK
|
|
||||||
```
|
|
||||||
|
|
||||||
### Longer Explanation
|
|
||||||
|
|
||||||
Suppose we have built the Rocket Chip emulator with the TraceGenConfig configuration as above. Running it using the tracegen.py wrapper script with a few command-line options gives us a random trace:
|
|
||||||
|
|
||||||
```
|
|
||||||
> tracegen.py ./emulator-Top-TraceGenConfig 1
|
|
||||||
1: load-req 0x0000000008 #0 @64
|
1: load-req 0x0000000008 #0 @64
|
||||||
1: store-req 5 0x0000100008 #1 @65
|
1: store-req 5 0x0000100008 #1 @65
|
||||||
1: store-req 7 0x0000000010 #2 @66
|
1: store-req 7 0x0000000010 #2 @66
|
||||||
@ -110,7 +109,7 @@ Suppose we have built the Rocket Chip emulator with the TraceGenConfig configura
|
|||||||
|
|
||||||
Main points:
|
Main points:
|
||||||
|
|
||||||
- the numeric command-line option sets the random seed;
|
- the second command-line option sets the random seed;
|
||||||
- the first number on each line of the trace is the core id;
|
- the first number on each line of the trace is the core id;
|
||||||
- \#N denotes a request-id N;
|
- \#N denotes a request-id N;
|
||||||
- @T denotes a time T in clock cycles;
|
- @T denotes a time T in clock cycles;
|
||||||
@ -124,7 +123,7 @@ We convert these traces to axe format using the
|
|||||||
[toaxe.py](https://github.com/ucb-bar/groundtest/blob/master/scripts/toaxe.py) script.
|
[toaxe.py](https://github.com/ucb-bar/groundtest/blob/master/scripts/toaxe.py) script.
|
||||||
|
|
||||||
```
|
```
|
||||||
> tracegen.py ./emulator-Top-TraceGenConfig 1 | toaxe.py -
|
> tracegen.py ./emulator-Top-TraceGenConfig 1 rv64ui-p-simple | toaxe.py -
|
||||||
# &M[2] == 0x0000000010
|
# &M[2] == 0x0000000010
|
||||||
# &M[0] == 0x0000000008
|
# &M[0] == 0x0000000008
|
||||||
# &M[3] == 0x0000000108
|
# &M[3] == 0x0000000108
|
||||||
@ -147,7 +146,7 @@ Main points:
|
|||||||
|
|
||||||
Axe traces can be validated using the [axe](https://github.com/CTSRD-CHERI/axe) tool (must be downloaded and installed seperately):
|
Axe traces can be validated using the [axe](https://github.com/CTSRD-CHERI/axe) tool (must be downloaded and installed seperately):
|
||||||
```
|
```
|
||||||
> tracegen.py ./emulator-Top-TraceGenConfig 1 | toaxe.py - | axe check WMO -
|
> tracegen.py ./emulator-Top-TraceGenConfig 1 rv64ui-p-simple | toaxe.py - | axe check WMO -
|
||||||
OK
|
OK
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user