| module ibex_int_controller ( |
| output wire irq_req_ctrl_o; |
| output wire [4:0] irq_id_ctrl_o; |
| input wire [4:0] irq_id_i; |
| assign irq_enable_ext = m_IE_i; |
| localparam [1:0] IRQ_PENDING = 1; |
| assign irq_req_ctrl_o = exc_ctrl_cs == IRQ_PENDING; |
| assign irq_id_ctrl_o = irq_id_q; |
| localparam [1:0] IDLE = 0; |
| always @(posedge clk or negedge rst_n) |
| exc_ctrl_cs <= exc_ctrl_ns; |
| localparam [1:0] IRQ_DONE = 2; |
| exc_ctrl_ns = exc_ctrl_cs; |
| if (irq_enable_ext && irq_i) begin |
| exc_ctrl_ns = IRQ_PENDING; |
| ctrl_ack_i: exc_ctrl_ns = IRQ_DONE; |
| ctrl_kill_i: exc_ctrl_ns = IDLE; |
| default: exc_ctrl_ns = IRQ_PENDING; |
| IRQ_DONE: exc_ctrl_ns = IDLE; |