OpenCores
URL https://opencores.org/ocsvn/s1_core/s1_core/trunk

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [hdl/] [rtl/] [s1_top/] [int_ctrl.v] - Rev 114

Compare with Previous | Blame | View Log

/*
 * S1 Interrupt Controller
 *
 * (C) 2007 Fabrizio Fazzino
 *
 * LICENSE:
 * This is a Free Hardware Design; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 * The above named program is distributed in the hope that it will
 * be useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * DESCRIPTION:
 * This block implements the Interrupt Controller used by the S1
 * to detect if some peripheral raised an interrupt request.
 * A proper interrupt packet is sent to the SPARC Core by the
 * bridge with one of the 64 interrupt sources (provided by this
 * controller) encoded in the 6-bit Interrupt Source field.
 * Please note that IRQ 0 is reserved for Power-On Reset (handled
 * directly by the bridge) so up to 63 external peripherals can be
 * connected to the S1.
 * Note also that currently the interrupt vector is hardwired to
 * all zeroes.
 */
 
module int_ctrl (
    sys_clock_i, sys_reset_i, sys_irq_i,
    sys_interrupt_source_o
  );
 
  // System inputs
  input sys_clock_i;
  input sys_reset_i;
 
  // Incoming Interrupt Requests
  input[63:0] sys_irq_i;
 
  // Encoded Interrupt Source
  output[5:0] sys_interrupt_source_o;
  reg[5:0] sys_interrupt_source_o;
 
  // Encoding of the source using priority and ignoring IRQ 0
  always @(posedge sys_clock_i) begin
    if(sys_reset_i==1) sys_interrupt_source_o = 0;
    else if(sys_irq_i[63]) sys_interrupt_source_o = 63;
    else if(sys_irq_i[62]) sys_interrupt_source_o = 62;
    else if(sys_irq_i[61]) sys_interrupt_source_o = 61;
    else if(sys_irq_i[60]) sys_interrupt_source_o = 60;
    else if(sys_irq_i[59]) sys_interrupt_source_o = 59;
    else if(sys_irq_i[58]) sys_interrupt_source_o = 58;
    else if(sys_irq_i[57]) sys_interrupt_source_o = 57;
    else if(sys_irq_i[56]) sys_interrupt_source_o = 56;
    else if(sys_irq_i[55]) sys_interrupt_source_o = 55;
    else if(sys_irq_i[54]) sys_interrupt_source_o = 54;
    else if(sys_irq_i[53]) sys_interrupt_source_o = 53;
    else if(sys_irq_i[52]) sys_interrupt_source_o = 52;
    else if(sys_irq_i[51]) sys_interrupt_source_o = 51;
    else if(sys_irq_i[50]) sys_interrupt_source_o = 50;
    else if(sys_irq_i[49]) sys_interrupt_source_o = 49;
    else if(sys_irq_i[48]) sys_interrupt_source_o = 48;
    else if(sys_irq_i[47]) sys_interrupt_source_o = 47;
    else if(sys_irq_i[46]) sys_interrupt_source_o = 46;
    else if(sys_irq_i[45]) sys_interrupt_source_o = 45;
    else if(sys_irq_i[44]) sys_interrupt_source_o = 44;
    else if(sys_irq_i[43]) sys_interrupt_source_o = 43;
    else if(sys_irq_i[42]) sys_interrupt_source_o = 42;
    else if(sys_irq_i[41]) sys_interrupt_source_o = 41;
    else if(sys_irq_i[40]) sys_interrupt_source_o = 40;
    else if(sys_irq_i[39]) sys_interrupt_source_o = 39;
    else if(sys_irq_i[38]) sys_interrupt_source_o = 38;
    else if(sys_irq_i[37]) sys_interrupt_source_o = 37;
    else if(sys_irq_i[36]) sys_interrupt_source_o = 36;
    else if(sys_irq_i[35]) sys_interrupt_source_o = 35;
    else if(sys_irq_i[34]) sys_interrupt_source_o = 34;
    else if(sys_irq_i[33]) sys_interrupt_source_o = 33;
    else if(sys_irq_i[32]) sys_interrupt_source_o = 32;
    else if(sys_irq_i[31]) sys_interrupt_source_o = 31;
    else if(sys_irq_i[30]) sys_interrupt_source_o = 30;
    else if(sys_irq_i[29]) sys_interrupt_source_o = 29;
    else if(sys_irq_i[28]) sys_interrupt_source_o = 28;
    else if(sys_irq_i[27]) sys_interrupt_source_o = 27;
    else if(sys_irq_i[26]) sys_interrupt_source_o = 26;
    else if(sys_irq_i[25]) sys_interrupt_source_o = 25;
    else if(sys_irq_i[24]) sys_interrupt_source_o = 24;
    else if(sys_irq_i[23]) sys_interrupt_source_o = 23;
    else if(sys_irq_i[22]) sys_interrupt_source_o = 22;
    else if(sys_irq_i[21]) sys_interrupt_source_o = 21;
    else if(sys_irq_i[20]) sys_interrupt_source_o = 20;
    else if(sys_irq_i[19]) sys_interrupt_source_o = 19;
    else if(sys_irq_i[18]) sys_interrupt_source_o = 18;
    else if(sys_irq_i[17]) sys_interrupt_source_o = 17;
    else if(sys_irq_i[16]) sys_interrupt_source_o = 16;
    else if(sys_irq_i[15]) sys_interrupt_source_o = 15;
    else if(sys_irq_i[14]) sys_interrupt_source_o = 14;
    else if(sys_irq_i[13]) sys_interrupt_source_o = 13;
    else if(sys_irq_i[12]) sys_interrupt_source_o = 12;
    else if(sys_irq_i[11]) sys_interrupt_source_o = 11;
    else if(sys_irq_i[10]) sys_interrupt_source_o = 10;
    else if(sys_irq_i[9]) sys_interrupt_source_o = 9;
    else if(sys_irq_i[8]) sys_interrupt_source_o = 8;
    else if(sys_irq_i[7]) sys_interrupt_source_o = 7;
    else if(sys_irq_i[6]) sys_interrupt_source_o = 6;
    else if(sys_irq_i[5]) sys_interrupt_source_o = 5;
    else if(sys_irq_i[4]) sys_interrupt_source_o = 4;
    else if(sys_irq_i[3]) sys_interrupt_source_o = 3;
    else if(sys_irq_i[2]) sys_interrupt_source_o = 2;
    else if(sys_irq_i[1]) sys_interrupt_source_o = 1;
    else sys_interrupt_source_o = 0;
  end
 
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.