## Vexriscv with AES128 ECB on the memory mapped bus ### In the simulation: From inside the folder ```vexriscv``` start the simulation with ``` sbt "runMain quantumrisc.PQVexRiscvSim" ``` Connect ```openocd-vexriscv``` to the simulation. Therefore open a new console, navigate again to the ```vexriscv``` folder and go with ``` openocd-vexriscv -f vexriscvsim.cfg ``` Now you might want to compile and upload the C code to the simulation. Compile the C project from inside the folder ```c_project``` with ``` make PLATFORM=pqvexriscvsim ``` The compilation has created a file with the name ```main.elf```. Upload this file via GDB to the simulation (from inside the folder ```c_project```) with ``` riscv64-unknown-elf-gdb -tui -ex 'set remotetimeout 30' -ex 'target extended-remote :3333' -ex 'load' -ex 'break main' -ex 'continue' main.elf ``` One breakpoint at the start of the main function is already set. You might want to set another one inside the While(1) loop. Mabye at line 70 with: ``` b 70 ``` Continuing the next breakpoint works with ```c```. The UART output from the Vexriscv is visible in the first concolse, where you started the simulation. ### On the ULX3S Board: ``` sbt "runMain quantumrisc.PQVexRiscvUlx3s" ``` Copy the created ```*ulx3s.v``` verilog file and the memory files ```*ulx3s*.bin``` to the folder ```ulx3s```. From there run ```make``` to create the bitstream: ``` make PQVexRiscvUlx3s.bit ``` Flash the bitstream to the board: ``` sudo fujprog PQVexRiscvUlx3s.bit ``` The Vexrisc is now running on the ULX3S Board. Now connect ```openocd``` to it. To do that, you need an external JTAG Adapter. The one i'm using is a Adafruit TF232H. The description for the wiring is available in one of my other projects: https://github.com/ThorKn/vexriscv-ulx3s-simple-plugin This time you need a different configfile, contained in the ```vexriscv``` folder: ``` sudo openocd-vexriscv -f tf2323h_openocd.cfg ``` Build the C project for a different ```PLATFORM``` then before (in the sim): ``` make PLATFORM=pqvexriscvulx3s ``` Uploading via GDB and using GDB is the same as above: ``` riscv64-unknown-elf-gdb -tui -ex 'set remotetimeout 30' -ex 'target extended-remote :3333' -ex 'load' -ex 'break main' -ex 'continue' main.elf ``` To see the UART output you can use the UART interface from the ULX3S board. Just open a Terminal program of your choice (i.e. GTKTerm) and connect it over USB with the parameters ```115200 - 8 - N - 1```.