execute1: Simplify the interrupt logic a little
authorPaul Mackerras <paulus@ozlabs.org>
Tue, 7 Apr 2020 08:38:18 +0000 (18:38 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Tue, 7 Apr 2020 10:04:00 +0000 (20:04 +1000)
commitd77033aa92b372e52e96b6d8d3f5aa990d5e412c
treef81253a6601a82a63c38053b5fac2faaf0a76303
parentfe077a116aaec84a7cfdc5ae8cad077b7df891ab
execute1: Simplify the interrupt logic a little

This makes some simplifications to the interrupt logic which will
help with later commits.

- When irq_valid is set, don't set exception to 1 until we have a
  valid instruction.  That means we can remove the if e_in.valid = '1'
  test from the exception = '1' block.

- Don't assert stall_out on the first cycle of delivering an
  interrupt.  If we do get another instruction in the next cycle,
  nothing will happen because we have ctrl.irq_state set and we
  will just continue writing the interrupt registers.

- Make sure we deliver as many completions as we got instructions,
  otherwise the outstanding instruction count in control.vhdl gets
  out of sync.

- In writeback, make sure all of the other write enables are ignored
  when e_in.exc_write_enable is set.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
execute1.vhdl
writeback.vhdl