enjoy-digital / litex

Build your hardware, easily!

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Loading binary hangs up

roby2014 opened this issue · comments

Hi. Trying to simulate my rust binary with:

riscv64-elf-objcopy mybin -O binary mybin.bin
litex_sim --output-dir=target/litex_sim --cpu-variant=minimal --rom-init=mybin.bin

however, when running it, the litex gets stuck around here:

.....

- V e r i l a t i o n   R e p o r t: Verilator 5.024 2024-04-05 rev UNKNOWN.REV
- Verilator: Built from 0.480 MB sources in 5 modules, into 0.776 MB in 22 C++ files needing 0.000 MB
- Verilator: Walltime 0.167 s (elab=0.021, cvt=0.104, bld=0.000); cpu 0.000 s on 1 threads; alloced 15.531 MB
make -j -C /home/roby/repos/colorlight-litex-rs/app/target/litex_sim/gateware/obj_dir -f Vsim.mk Vsim
make[1]: Entering directory '/home/roby/repos/colorlight-litex-rs/app/target/litex_sim/gateware/obj_dir'
g++  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -Os -c -o veril.o /home/roby/litex/litex/litex/build/sim/core/veril.cpp
g++  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -Os -c -o sim_init.o ../sim_init.cpp
g++ -Os  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -c -o verilated.o /usr/share/verilator/include/verilated.cpp
g++ -Os  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -c -o verilated_dpi.o /usr/share/verilator/include/verilated_dpi.cpp
g++ -Os  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -c -o verilated_vcd_c.o /usr/share/verilator/include/verilated_vcd_c.cpp
g++ -Os  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -c -o verilated_threads.o /usr/share/verilator/include/verilated_threads.cpp
/usr/bin/python3 /usr/share/verilator/bin/verilator_includer -DVL_INCLUDE_OPT=include Vsim.cpp Vsim___024root__DepSet_h104c642d__0.cpp Vsim___024root__DepSet_hb1836b75__0.cpp Vsim_sim__DepSet_h837b84dc__0.cpp Vsim_sim__DepSet_h40728c06__0.cpp Vsim_VexRiscv__DepSet_hda50bfa8__0.cpp Vsim_VexRiscv__DepSet_h9f7c89a9__0.cpp Vsim__Dpi.cpp Vsim__Trace__0.cpp Vsim__ConstPool_0.cpp Vsim___024root__Slow.cpp Vsim___024root__DepSet_h104c642d__0__Slow.cpp Vsim___024root__DepSet_hb1836b75__0__Slow.cpp Vsim_sim__Slow.cpp Vsim_sim__DepSet_h837b84dc__0__Slow.cpp Vsim_sim__DepSet_h40728c06__0__Slow.cpp Vsim_VexRiscv__Slow.cpp Vsim_VexRiscv__DepSet_hda50bfa8__0__Slow.cpp Vsim_VexRiscv__DepSet_h9f7c89a9__0__Slow.cpp Vsim__Syms.cpp Vsim__Trace__0__Slow.cpp Vsim__TraceDecls__0__Slow.cpp > Vsim__ALL.cpp
echo "" > Vsim__ALL.verilator_deplist.tmp
g++ -Os  -I.  -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=1 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=1 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable    -ggdb -Wall -O3   -I/home/roby/litex/litex/litex/build/sim/core   -c -o Vsim__ALL.o Vsim__ALL.cpp
Archive ar -rcs Vsim__ALL.a Vsim__ALL.o
g++    veril.o sim_init.o verilated.o verilated_dpi.o verilated_vcd_c.o verilated_threads.o Vsim__ALL.a   libdylib.o modules.o pads.o parse.o sim.o -lpthread -Wl,--no-as-needed -ljson-c -lz -lm -lstdc++ -Wl,--no-as-needed -ldl -levent  -pthread -lpthread -latomic   -o Vsim
rm Vsim__ALL.verilator_deplist.tmp
make[1]: Leaving directory '/home/roby/repos/colorlight-litex-rs/app/target/litex_sim/gateware/obj_dir'
make: Leaving directory '/home/roby/repos/colorlight-litex-rs/app/target/litex_sim/gateware'

[serial2console] loaded (0x63cfd09a42f0)
[clocker] loaded
[xgmii_ethernet] loaded (0x63cfd09a42f0)
[gmii_ethernet] loaded (0x63cfd09a42f0)
[jtagremote] loaded (0x63cfd09a42f0)
[ethernet] loaded (0x63cfd09a42f0)
[serial2tcp] loaded (0x63cfd09a42f0)
[spdeeprom] loaded (addr = 0x0)
[clocker] sys_clk: freq_hz=1000000, phase_deg=0

Any idea how I can debug this?

See comment on #1935, but you should be getting a vcd file you can view in gtkwave. Look at the main bus address and data to see what your code is up to.
You could maybe use renode too and get full debug access to your code.

I'm able to simulate it with

litex_sim --output-dir=target/litex_sim --cpu-type=vexriscv --rom-init=$1.bin --no-compile-software

however, not with --integrated-main-ram-size=0x4000 --ram-init=$1.bin
--sdram-init=$1.bin also gets stuck

How is this causing the issue?

Interesting...

litex_sim --output-dir=target/litex_sim --cpu-type=vexriscv --rom-init=$1.bin --no-compile-software --gtkwave-savefile

[roby@thonkpad firmware]$ gtkwave target/litex_sim/gateware/sim.vcd

GTKWave Analyzer v3.3.118 (w)1999-2023 BSI

Near byte 49154, VCD search table NULL..is this a VCD file?
No symbols in VCD file..is it malformed?  Exiting!