Hifive1¶
An eval board from sifive.
Tools¶
The easiest way to get working are the riscv packages in Ubuntu Bionic. They come pre-configured and ready for use. Currently used version is 2.30.
$ dpkg -l | grep risvc
ii binutils-riscv64-linux-gnu 2.30-20ubuntu2~18.04
To upload the compiled binary, an risc-v enabled openocd and a special gdb is needed. Both come from the sifive.com website.
Board Setup¶
From the Freedom E-SDK
download the whole freedom-e300-hifive1 directory and place it at risc-v/board/
Application Setup¶
Checkout amforth svn with at least rev. 2300. It contains an appl/hifive1 directory with the necessary files. place the binaries for openocd and gdb somewhere in your PATH and call make.
The Makefile at hifive/ can upload the hex file to the controller using openocd and gdb.
~/amforth/appl/hifive$ make
openocd -f ~/amforth/risc-v/board/freedom-e300-hifive1/openocd.cfg & \
riscv64-unknown-elf-gdb ./amforth.hex --batch -ex "set remotetimeout 240" \
-ex "target extended-remote localhost:3333" \
-ex "monitor reset halt" \
-ex "monitor flash protect 0 64 last off" \
-ex "load" \
-ex "monitor resume" \
-ex "monitor shutdown" \
-ex "quit" && \
echo "Successfully uploaded 'amforth.hex' to freedom-e300-hifive1."
Open On-Chip Debugger 0.10.0+dev-g2c183e3-dirty (2018-01-03-10:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 10000 kHz
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
Info : clock speed 10000 kHz
Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=0
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=1
Info : Examined RISCV core; XLEN=32, misa=0x40001105
Info : Listening on port 3333 for gdb connections
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=2
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=3
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=4
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=5
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=6
Info : dtmcontrol_idle=5, dbus_busy_delay=1, interrupt_high_delay=7
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=7
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=8
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=9
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=10
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=12
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=14
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=16
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=18
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=20
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=23
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=26
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=29
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=32
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=36
Info : [0] Found 2 triggers
halted at 0x204001a2 due to debug interrupt
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : accepting 'gdb' connection on tcp/3333
Info : Found flash device 'issi is25lp128' (ID 0x0018609d)
0x204001a2 in ?? ()
Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
halted at 0x204001a2 due to debug interrupt
halted at 0x204001a2 due to debug interrupt
cleared protection for sectors 64 through 255 on flash bank 0
cleared protection for sectors 64 through 255 on flash bank 0
Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
halted at 0x204001a2 due to debug interrupt
Loading section .sec1, size 0x59b4 lma 0x20400000
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=40
Info : Retrying memory read starting from 0x80000000 with more delays
Info : dtmcontrol_idle=5, dbus_busy_delay=2, interrupt_high_delay=45
Info : Retrying memory read starting from 0x800000d8 with more delays
halted at 0x80000004 due to software breakpoint
halted at 0x80000004 due to software breakpoint
halted at 0x80000004 due to software breakpoint
halted at 0x80000004 due to software breakpoint
halted at 0x80000004 due to software breakpoint
Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
halted at 0x80000004 due to software breakpoint
Start address 0x20400000, load size 22964
Transfer rate: 56 KB/sec, 11482 bytes/write.
shutdown command invoked
shutdown command invoked
A debugging session is active.
Inferior 1 [Remote target] will be detached.
Quit anyway? (y or n) [answered Y; input not from terminal]
Remote communication error. Target disconnected.: Die Verbindung wurde vom Kommunikationspartner zurückgesetzt.
Successfully uploaded 'amforth.hex' to freedom-e300-hifive1.
This shall give the amforth prompt at the serial terminal. Sometimes the openocd process does not terminate properly. Either kill it manually or start another make upload to terminate it.
Features¶
The serial command line uses 38400 8N1.
The RGB led is initialized at boot time and can be accessed with the color command
names red
, green
, blue
, white
, black
and a few others.
There is a separate wordlist called riscv-wordlist that contains controller
specific words like CSR registers. Use riscv-wordlist show-wordlist
to get
a listing of the available words. The word @cycle
returns a double cell number
of the cpu cycles since boot.