Age | Commit message (Collapse) | Author |
|
Signed-off-by: Nathaniel Graff <nathaniel.graff@sifive.com>
|
|
There's a handful of things that went wrong here:
* The read-only data sections were mapped to flash, which is very slow.
I just put them in the data segment, so they end up in the scratchpad.
This is about a 10x hit, so it's really important.
* The toolchain was an old version, which didn't have a fast memcpy
implementation on 32-bit systems. This is about a 2x hit.
* Some compiler flags were incorrect, including
* -Os instead of -O3
* Missing -mexplicit-relocs
* Missing -DNOENUM
* Missing -falign-functions=4
I haven't checked how much those hurt
With this, I get
$ make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
$ make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
Execution starts, 10000000 runs through Dhrystone
Execution ends
Final values of the variables used in the benchmark:
Int_Glob: 5
should be: 5
Bool_Glob: 1
should be: 1
Ch_1_Glob: A
should be: A
Ch_2_Glob: B
should be: B
Arr_1_Glob[8]: 7
should be: 7
Arr_2_Glob[8][7]: 10000010
should be: Number_Of_Runs + 10
Ptr_Glob->
Ptr_Comp: -2147470264
should be: (implementation-dependent)
Discr: 0
should be: 0
Enum_Comp: 2
should be: 2
Int_Comp: 17
should be: 17
Str_Comp: DHRYSTONE PROGRAM, SOME STRING
should be: DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->
Ptr_Comp: -2147470264
should be: (implementation-dependent), same as above
Discr: 0
should be: 0
Enum_Comp: 1
should be: 1
Int_Comp: 18
should be: 18
Str_Comp: DHRYSTONE PROGRAM, SOME STRING
should be: DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc: 5
should be: 5
Int_2_Loc: 13
should be: 13
Int_3_Loc: 7
should be: 7
Enum_Loc: 1
should be: 1
Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING
should be: DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING
should be: DHRYSTONE PROGRAM, 2'ND STRING
Microseconds for one run through Dhrystone: 1.3
Dhrystones per Second: 714285.6
which is 1.55 DMIPS/MHz at 262 MHz. It's still a bit slower than our
current stuff, but I don't remember what was actually in the HiFive1 so
I'm not sure what we should be getting. I verified the clock is
accurate with a stopwatch. I haven't bothered to go look through the
binary, but I think we're about 10 cycles off so it should be managable.
|
|
Everything still defaults to the flash, but users can optionally select
the scratchpad. Note that you have to be pretty careful about your
scratchpad programs, most of them won't fit. For example, printf is too
big to fit in the scratchpad.
|
|
Since our loader doesn't support multiple sections anyway, there's
really no reason to have all these sections floating around. They're
causing trouble due to misalignment so it's easiest to just group them
together so we can properly enforce alignment.
|
|
|
|
I'm hoping this will make everything more likely to align. We can't use
the other mechanism because our loader is lazy and assumes all the
sections are contiguous.
|
|
Without these alignment directives the sections are only required to be
aligned on word-sized boundries, but we sometimes require double-word
alignment. This allows the linker to sanely emit these sections.
|
|
|
|
|
|
|
|
|
|
Provide get_timer_value() and get_timer_freq() and use them. On Arty,
they use mcycle and the known-fixed core frequency, whereas on HiFive1
they use mtime and the known-fixed mtime frequency.
|
|
- Warm up I$ first.
- Correct for integer division truncation error.
- Wait for an RTC clock edge before starting the timing loop,
which removes an error proportional to the number of loop
iterations, allowing us to run for far less time.
|
|
This improves the instruction stream's spatial locality.
|
|
|
|
|
|
|
|
hifive1: Update OpenOCD Config script to optionally allow pulsing SRST
|
|
|
|
The --wrap feature of GNU ld supports a cleaner framework for linking in
alternative implementations of libc functions without cpp hacks.
Place wrappers in separate object files to reduce static code size.
|
|
|
|
|
|
|
|
|
|
|
|
Enable FPU in MSTATUS CSR during init
|
|
* Only attempts if FPU actually implemented in design
* Also initializes rounding modes, which are undefined at reset
|
|
This appears to resolve the issue of .sdata being assigned an incorrect
LMA (ld warning "section `.sdata' can't be allocated in segment 1").
|
|
This way, chips with FPU can run FPU instructions without taking
exceptions.
I've confirmed that dhrystone still runs successfully even on chips
with no FPU.
|
|
* Bump tool versions
* Use version of OpenOCD which can load programs into flash
* Bump OpenOCD to Handle ISSI Flash Programming
* Update Header files
* add initial support for hifive1
* add dhrystone
* add clock helper functions
* add openocd cfg file
* Demo_GPIO checkpoint -- compiles and runs but no blinky LEDs
* Remove riscv-tests submodule
* Remove FPGA files, as they are no longer relevant to this Repository
* Add openocd_upload script
* Add Pinmux Mappings
Adding the pinmux mappings to the Platform Header
* Add IOF Mappings to platform header
* Re-order the IOF Mapping declarations
* Add more useful things to platform headers
* Get GPIO Demo working again (except interrupts aren't working)
* Update README with more OS packages needed
A bare ubuntu-16.04.1-server installation could not run `make tools`
without these packages.
* bump openocd to get SCKDIV fix
* Remove duplicated help text for run_debug target
* Add package to README that is needed for openocd build
Without this package I was seeing two different failures like below
when running `make tools`.
/home/scottj/freedom-e-sdk/openocd/configure: line 4533: syntax error near unexpected token `0.23'
/home/scottj/freedom-e-sdk/openocd/configure: line 4533: `PKG_PROG_PKG_CONFIG(0.23)'
Makefile:70: recipe for target '/home/scottj/freedom-e-sdk/toolchain/bin/openocd' failed
make: *** [/home/scottj/freedom-e-sdk/toolchain/bin/openocd] Error 2
... or ...
+ autoconf
configure.ac:12: error: possibly undefined macro: AC_MSG_WARN
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:240: error: possibly undefined macro: AC_MSG_NOTICE
configure.ac:342: error: possibly undefined macro: AC_DEFINE
Makefile:70: recipe for target '/home/scottj/freedom-e-sdk/toolchain/bin/openocd' failed
make: *** [/home/scottj/freedom-e-sdk/toolchain/bin/openocd] Error 1
* Bump OpenOCD to not overwrite SCKDIV when flashing
* Roll back CoreMark
|