.. _Hifive1:
=======
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.
.. code-block:: bash
$ 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`.
.. code-block:: bash
~/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 '.
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.