Hello all,
We recently upgraded our NOEL-V system from GPL 2023.4 to 2025.2, running on a Xilinx VCU118 FPGA. After the update, our ADA port (developed by @GuillermoVidal) stopped working. We updated all addresses as per the documentation, but still face these issues:
-
When printing through grmon with forward enable on UART0, part or all of the message is lost. Disabling forward and monitoring UART externally works fine.
-
Cores parked in WFI don’t wake up or receive interrupts. We found new interrupt related parameters (nintdom
, intcconf
) for the noelvsys
module in the source, but they’re undocumented.
Are there undocumented changes that could cause these issues? If not, what else might explain why previously working software fails even after updating the addresses?
Thanks in advance for your support.
Best,
Marc
Hi!
Intcconf configures which interrupt controllers to include in the system. Unfortunately it looks like there isn’t any documentation for this generic right now. This is what the values mean.
intcconf:
0: PLIC
1: APLIC
2: PLIC and APLIC (can’t be used simultaneously)
nintdom is currently not used in noelvsys.vhd so that should be irrelevant.
For the WFI instruction would it be possible for you to test triggering a timer interrupt or a software interrupt when the hart is parked to see if that wakes the core? If that works then we can most likely exclude issues with the WFI mechanism it self. My guess is that the issue has to do with interrupt delivery which would also likely explain the erratic UART behavior.
Hello!
Thanks for the quick reply.
The cores parked with WFI do not wake up when interrupted by software and timer interrupts. Previously, the slave cores would proceed after getting software interrupted, but they currently execute WFI indefinitely.
The latter part is expected, i.e. that the WFI is a NOP. We had issues with the WFI instruction in our release testing, we didn’t have time to debug exactly what was going on before the release which is why we changed the WFI to be a NOP. This is a legal to do according to the RISC-V spec. It should be working again in the next release.
Since WFI is currently a NOP we are back to the issue of interrupts not being taken at all. One other thing that just came to mind that likely has changed since your last release is the enabling of the smrnmi and the smdbltrp extensions.
From the spec:
mnstatus also holds the NMIE bit. When NMIE=1, non-maskable interrupts are enabled. When NMIE=0, all interrupts are disabled.
Could you try setting mnstatus.nmie => 1? To also prevent the core from entering the double trap handler could you also set mstatus.mdt and mstatus.sdt => 0.
I think later versions of GRMON does this automatically but it could be the case that the version you are using doesn’t do that.
I am not completely sure what the issue was with the WFI instruction, I’ll do some digging to see if I can get more details about that. If you wish to experiment, then “proper” WFI behavior can be enabled by setting PWRDEN to true.
$GRLIB/lib/gaisler/noelv/pkg/noelv.vhd
constant PWRDEN : boolean := false;