Freedom E300 Accelerator Interrupt


(Ânderson Ignacio da Silva) #1

Hi,
I’m working with Freedom E300 platform and I’ve also developed a hardware accelerator that runs with Rocket Chip project through RoCC interface. I’ve tested some HA like accumulator and character count with Freedom and it worked fine as expected but now I’ve created a HA that generates an interruption for 1 clock cycle when it finishes computing the results and what’s happening is that the processor it’s not triggering the interrupt from the accelerator. I already configured the correspondent interruption bit in MIP and MIE and I’ve also enabled the XS in mstatus bit. This is my _init function and in the image below there’s a waveform of the same HA working with Rocket chip tiny core emulator.

void _init()
{
write_csr(mstatus, MSTATUS_FS | MSTATUS_MIE | MSTATUS_XS);
write_csr(mip,4096); // bit 12 - rocc
write_csr(mie,4096); // bit 12 - rocc
#ifndef NO_INIT
uart_init(115200);

printf(“core freq at %d Hz\n”, get_cpu_freq());

write_csr(mtvec, &trap_entry);
#endif
}

Could you point me what do you think that could be doing wrong in the settings to work with such rocc interrupt mode?

Ps.: If I try to read the variables that the accelerator should write I generate two trap entries:
(UART Console)

SMVM Example:   
Cleaning accelerator registers...
Loading X and Y to the accelerator...
Loading data and row to the accelerator...
Loading ptr and NNZ to the accelerator...
Processing A(m,l)*X(l,1) = y(m,1)...
Reading output variables....
Trap entry - mcause = 8000000c
Trap entry - mcause = 5
Trap entry - mcause = 5
Trap entry - mcause = 5
Trap entry - mcause = 5
Trap entry - mcause = 5
Trap entry - mcause = 5
Trap entry - mcause = 5
...