E31 evaluation simulation

hello, I have some question for the E31 rtl simulation, I try to use toolchain to generate hex file, and I write a timer interrupt program , but when I use vcs to simulate the E31 rtl with this program, I find that when the program try to access the address 0x02004000(the TIMER_CMP),the value of PC will jump into zero, what’s wrong with it ???

Can you share the source code?

Do you set mtvec in your application? It could be that you are taking a trap prior to setting up the trap entry/exit.

yes, I see the bsp package have set mtvec at init.c

but I just access the address 0x0200_0000,why it will produce a trap ??

What do you mean you are “accessing” the address? Are you reading, writing? Are you using the proper size access (lw, lh, lb, ld?) If you write the TIMER_CMP value, then it’s quite likely you take an interrupt which you may not have set up properly. Can you share the code that is causing the trap?

Address 0x0200_0000 is the Machine Software Pending register in the CLINT. If you write a 1 to the LSB of this register, and software interrupts are enabled in the mie, then this will cause a trap.

Without seeing your code, we don’t know for sure what is going on. What I wrote above is simply one possibility.

thank you for your answer, I have solve the problem,but sometimes, I try to write the address 0x3000_0000 that is the periphery device region, It also produce a trap, why ?

yes,I write the address, and it take a trap but not a interrupt