pulp-platform / pulpissimo

This is the top-level project for the PULPissimo Platform. It instantiates a PULPissimo open-source system with a PULP SoC domain, but no cluster.
Other
389 stars 169 forks source link

can't write L2 RAM via JTAG (nexys4 FPGA) #343

Open rem3-1415926 opened 2 years ago

rem3-1415926 commented 2 years ago

I have set up a VM with the simple runtime and the pulpissimo repo (both the current state and release 7.0.0) and I can seemingly correctly build and download the SoC on the nexys4 board (not video, DDR or A7. That mistake lays already in the past). However, I can't write anything into 0x1c00 0000 and above, where the L2 RAM should be according to the documentation and the linker scripts. So far I've tried:

So I conclude that it's just the RAM that cannot be written to for whichever reason. I have noticed that at some point you have removed the out of context IPs for BlockRAM, is it possible that something went wrong there, or am I missing something on my end?

I pretty much followed the instructions in the readmes of pulpissimo and pulp-runtime straight forward, minus the RTL simulation platform that I skipped and the FPU that I disabled. Both the UART send and the hello world example appear to have compiled to something useful (definitely not the series of 0x0 I'm reading back from the FPGA)

christian-lanius commented 2 years ago

I think the broken Nexys 4 project is a known issue, c.f. #289

rem3-1415926 commented 2 years ago

I thought I looked thoroughly for already existing issues on this, but apparently I missed #289.

However, I've actually gotten it to run by now - though I haven't figured out why exactly. I set up the entire thing anew, on a Redhat server with Vivado 2022.2 (I believe?), instead of the Ubuntu VM on my notebook and Vivado 2020.2 that I had before. Doing so revealed that the standard RAM configuration didn't quite fit into the available blockram (no warning or error on the previous setup), and after reducing the number of interleaved memory banks from 4 to 2, the above described issues seem to be solved.

Not sure if everything runs as it's supposed to, I haven't gotten the timer interrupts to work yet (timer itself seems to run). But then again, I haven't spent much time on that so I'm currently suspecting a user error on my end. That's the state as of right now. Not as conclusive as I'd like it to be, but since it will take some time until I get back to it, I figured I'd put up this quick update anyway.