From e9ab3d71d57dea1e68ec61dc69df0082d88655cd Mon Sep 17 00:00:00 2001 From: Charles Papon Date: Mon, 26 Jun 2017 14:44:52 +0200 Subject: [PATCH] update readme add uart.elf binary for testing --- README.md | 20 ++++++++++++++++++++ src/test/resources/elf/uart.elf | Bin 0 -> 53156 bytes 2 files changed, 20 insertions(+) create mode 100755 src/test/resources/elf/uart.elf diff --git a/README.md b/README.md index fd8caf0..05a8ff0 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,9 @@ sbt "run-main VexRiscv.GenFull" sbt "run-main VexRiscv.GenSmallest" ``` +NOTE : +The VexRiscv could need the unreleased master-head of SpinalHDL. If it fail to compile, just get the SpinalHDL repository and do a "sbt publish-local" in it. + ## Tests To run tests (need the verilator simulator), go in the src/test/cpp/regression folder and run : @@ -79,9 +82,26 @@ Work for the GenFull, but not for the GenSmallest as this configuration has no d Then you can use the https://github.com/SpinalHDL/openocd_riscv tool to create a GDB server connected to the target (the simulated CPU) ```sh +#in the VexRiscv repository, to run the simulation on which one OpenOCD can connect itself => +sbt "run-main VexRiscv.GenFull" +cd src/test/cpp/regression +make run DEBUG_PLUGIN_EXTERNAL=yes + +#In the openocd git, after building it => src/openocd -c "set VEXRISCV_YAML PATH_TO_THE_GENERATED_CPU0_YAML_FILE" -f tcl/target/vexriscv_sim.cfg + +#Run a GDB session with an elf RISCV executable (GenFull CPU) +YourRiscvToolsPath/bin/riscv32-unknown-elf-gdb VexRiscvRepo/src/test/resources/elf/uart.elf +target remote localhost:3333 +monitor reset halt +load +continue + +# Now it should print messages in the Verilator simulation of the CPU ``` +## Using eclipse to run the software and debug it +You can use the eclipse + zilin embedded CDT plugin to do it. ## Cpu plugin structure diff --git a/src/test/resources/elf/uart.elf b/src/test/resources/elf/uart.elf new file mode 100755 index 0000000000000000000000000000000000000000..672b9b181a4c6aa7889021cec604f5e7d3de1a66 GIT binary patch literal 53156 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 literal 0 HcmV?d00001