We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 62124

2014.2 MicroBlaze, I/O Module - Fast (Low-latency) Interrupt mode doesn't work


I am using the interrupt controller in I/O Module and testing MicroBlaze Fast (Low-latency) Interrupt.

Interrupt is periodically generated from the PIT (Programmable Interval Timer) in I/O Module.

When the interrupt signal is generated, the vector address is supplied to MicroBlaze.

MicroBlaze should jump to the vector address, but it instead jumps to 0x10.

This is the standard interrupt vector address.

However, this happens only for the first interrupt.

For the second interrupt or later, MicroBlaze jumps to the vector address which is supplied from IOMODULE as expected.


There is a bug in MicroBlaze Vivado releases before 2014.3.

C_EDGE_IS_POSITIVE is used even when C_INTERRUPT_IS_EDGE = 0 which should not be the case.
On the AXI_INTC, the interrupt can be changed to level but this is not possible with the IO_MODULE.
The IO_Module only supports edge level on the interrupt to MicroBlaze.

C_EDGE_IS_POSITIVE cannot be changed in Vivado. It is possible to change it with ISE.

Furthermore the default value is '1' in ISE and in Vivado it is set to '0'

As a result of this bug, MicroBlaze will latch the interrupt_address on the falling edge instead of the rising edge.

In most cases, this latching will get the correct address but it might occasionally get the default value (which is 0x10) instead.


This bug is fixed in Vivado 2014.3.

You will need to either wait for 2014.3 and upgrade or make a local copy of MicroBlaze and modify the bd.tcl to change the default value of C_EDGE_IS_POSITIVE.
AR# 62124
Date Created 09/22/2014
Last Updated 09/23/2014
Status Active
Type General Article
  • Microblaze
  • I/O Module