.. | ||
blake2s | ||
firmware.lds | ||
lib.c | ||
lib.h | ||
main.c | ||
Makefile | ||
proto.c | ||
proto.h | ||
README.md | ||
start.S | ||
types.h |
Tillitis Key firmware
Build the firmware
You need Clang with 32 bit RISC-V support. You can check this with:
$ llc --version | grep riscv32
riscv32 - 32-bit RISC-V
or just try building.
Build the FPGA bitstream with the firmware using make
in the
hw/application_fpga
directory.
If your available objcopy
and size
commands is anything other than
the default llvm-objcopy-14
and llvm-size-14
define OBJCOPY
and
SIZE
to whatever they're called on your system.
Using QEMU
Checkout the mta1
branch of our version of the
qemu and build:
$ git clone -b mta1 https://github.com/tillitis/qemu
$ mkdir qemu/build
$ cd qemu/build
$ ../configure --target-list=riscv32-softmmu --disable-werror
$ make -j $(nproc)
(Built with warnings-as-errors disabled, see this issue.)
Run it like this:
$ /path/to/qemu/build/qemu-system-riscv32 -nographic -M mta1_mkdf,fifo=chrid -bios firmware.elf \
-chardev pty,id=chrid
This attaches the FIFO to a tty, something like /dev/pts/16
which
you can use with host software to talk to the firmware.
To quit QEMU you can use: Ctrl-a x
(see Ctrl-a ?
for other commands).
Debugging? Use the HTIF console by removing -DNOCONSOLE
from the
CFLAGS
and using the helper functions in lib.c
for printf-like
debugging.
You can also use the qemu monitor for debugging, e.g. info registers
, or run qemu with -d in_asm
or -d trace:riscv_trap
.
Happy hacking!