Skip to content

functionally equivalent change to avoid loops in Xcelium simulations

Created by: strichmo

When regressing the interrupt controller changes I had a small handful of simulations hanging to the point where they were not advancing time.

After more testing, I determined that the pr_stall_o signal was triggering alternate always blocks in the controller.

This is technically a stable loop, as the pr_stall_o value always resolves to 1, but the simulator was not smart enough to keep from retriggering the always_comb block.

Based on AppNotes from support.cadence.com this scenario can also be alleviated by avoiding the usage of multiple assignments in one of the always blocks. This PR resolves pr_stall_o's assignment into a single assignment in its always_comb block. There should be no functional change introduced.

I tried to use Xcelium's -delay_trigger switch but that causes a massive simulation performance hit with our mm_ram module.

The change was regressed against 100s of random interrupt tests and the hang is now gone.

Merge request reports

Loading