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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
# SiFive Freedom E SDK README #
This repository, maintained by SiFive Inc, makes it easy to get started developing
software for the Freedom E and Freedom S Embedded RISC-V Platforms.
### Contents ###
#### Freedom Metal Compatibility Library ####
* Board Support Packages for
- SiFive HiFive 1 (sifive-hifive1)
- SiFive Freedom E310 Arty (freedom-e310-arty)
- SiFive CoreIP (e.g. coreip-e31)
- SiFive CoreIP Arty FPGA Evaluation targets (e.g. coreip-e31-arty)
* A Few Example Programs
- Example programs targeting the Freedom Metal compatibility library can be identified
as submodules within the software/ directory, rather than being maintained in-tree
like the legacy examples are.
#### (Deprecated) Legacy Freedom E SDK Library ####
As we transition to supporting SiFive targets and examples with the new Freedom Metal
compatibility library, the legacy Freedom E SDK libraries and examples are still available
within this repository.
* Board Support Packages for
- SiFive HiFive 1 (freedom-e300-hifive1)
- SiFive Freedom E310 Arty (freedom-e300-arty)
- SiFive CoreIP Arty FPGA Evaluation Targets (e.g. coreplexip-e31-arty)
- Additional legacy targets are contained within the bsp/env/ directory.
* A Few Example Programs
- Example programs targeting the legacy Freedom E SDK can be identified as being tracked
within this repository in the software/ directory, rathre than being maintained
out-of-tree like the Freedom Metal examples are.
Legacy examples can be built using the same commands as the Freedom Metal examples and simply
omitting the `BSP=mee` argument or substituting it with `BSP=legacy`.
### Setting up the SDK ###
First, clone this repository:
```
git clone --recursive https://github.com/sifive/freedom-e-sdk.git
```
If at first you omit the `--recursive` option, you can update submodules using the command:
```
git submodule update --init --recursive
```
To see Makefile options:
```
cd freedom-e-sdk
make help
```
#### Install the RISC-V Toolchain ####
The RISC-V GNU Toolchain and OpenOCD are available from the SiFive Website at
https://www.sifive.com/boards
For OpenOCD and/or RISC-V GNU Toolchain, download the .tar.gz for your platform,
and unpack it to your desired location. Then, use the `RISCV_PATH` and
`RISCV_OPENOCD_PATH` variables when using the tools:
```
cp openocd-<date>-<platform>.tar.gz /my/desired/location/
cp riscv64-unknown-elf-gcc-<date>-<platform>.tar.gz /my/desired/location
cd /my/desired/location
tar -xvf openocd-<date>-<platform>.tar.gz
tar -xvf riscv64-unknown-elf-gcc-<date>-<platform>.tar.gz
export RISCV_OPENOCD_PATH=/my/desired/location/openocd
export RISCV_PATH=/my/desired/location/riscv64-unknown-elf-gcc-<date>-<version>
```
### Updating your SDK ###
If you'd like to update your SDK to the latest version:
```
cd freedom-e-sdk
git pull origin master
git submodule update --init --recursive
```
### Using the Tools ###
#### Building an Example ####
To compile a bare-metal RISC-V program:
```
cd freedom-e-sdk
make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] software
```
#### Uploading to the Target Board ####
```
cd freedom-e-sdk
make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] upload
```
#### Debugging a Target Program ####
```
cd freedom-e-sdk
make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] debug
```
#### Cleaning a Target Program Build Directory ####
```
cd freedom-e-sdk
make BSP=mee [PROGRAM=hello] [BOARD=sifive-hifive1] clean
```
Run `make help` for more commands.
### Benchmarking ###
#### Dhrystone ####
After setting up the software and debug toolchains, you can build and
execute everyone's favorite benchmark as follows:
- Compile the benchmark with the command `make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone`. Note that a slightly different linker file is used for Dhrystone which stores read only data in DTIM instead of external flash.
- Run on the HiFive1 board with the command `make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone`.
This will take a few minutes. Sample output is provided below.
- Compute DMIPS by dividing the Dhrystones per Second result by 1757, which
was the VAX 11/780's performance. In the example below, 729927 / 1757 =
415 DMIPS.
- Compute DMIPS/MHz by dividing by the clock rate: in the example below,
415 / 268 = 1.55 DMIPS/MHz.
```
core freq at 268694323 Hz
Dhrystone Benchmark, Version 2.1 (Language: C)
<snip>
Microseconds for one run through Dhrystone: 1.3
Dhrystones per Second: 729927.0
```
#### CoreMark ####
We cannot distribute the CoreMark benchmark, but following are instructions
to download and run the benchmark on the HiFive1 board:
- Download CoreMark from EEMBC's web site and extract the archive from
http://www.eembc.org/coremark/download.php.
- Copy the following files from the extracted archive into the
`software/coremark` directory in this repository:
- `core_list_join.c`
- `core_main.c`
- `coremark.h`
- `core_matrix.c`
- `core_state.c`
- `core_util.c`
- Compile the benchmark with the command `make software PROGRAM=coremark`.
- Run on the HiFive1 board with the command `make upload PROGRAM=coremark`.
- Divide the reported Iterations/Sec by the reported core frequency in MHz to
obtain a CoreMarks/MHz value.
### For More Information ###
Documentation, Forums, and much more available at
[dev.sifive.com](https://dev.sifive.com)
|