[wiki:Component SocLib Components General Index] = !VciIopic = == 1) Functional Description == This component is a multi-channels, programmable, Hardware Interrupt to Software Interrupt translator. It can be used to translate a number of hardware interrupt lines (HWI) to the same number of write triggered interrupt (WTI) that can be handled by a !VciXicu component. It acts as a VCI initiator, to send a single flit VCI packet to the target !VciXicu interrupt controller, when a rising/falling edge is detected on a given HWI input. It acts also as a memory mapped VCI target, as the addresses of the WTI associated to a given HWI must be configured by the software. It supports both 32 and 64 bits for the VCI data field width. For each HWI input channel, there is four 32 bits addressable registers: '''IOPIC_ADDRESS''' This READ/WRITE register contains the 32 LSB bits of the physical WTI address associated to the HWI channel. The hardware RESET value is 0. '''IOPIC_EXTEND''' This READ/WRITE register contains the 32 MSB bits of the physical WTI address associated to the HWI channel. The hardware RESET value is 0. '''IOPIC_MASK''' This READ/WRITE register contains actually a boolean: the corresponding HWI will be transmitted as a WTI only if the register value is not 0. The hardware RESET value is 0. '''IOPIC_STATUS''' This READ-ONLY register register contains the HWI channel status. Only the two LSB bits are significant: * Bit 0 : HWI line current value. * Bit 1 : ERROR reported in a WTI transaction when this bit is set. Any read access to the IOPIC status register reset the ERROR bit. The number of 32 bits words occupied by a single HWI channel is defined by the '''IOPIC_SPAN''' parameter, For extensibility issues, the software drivers must use the mnemonics defined [source:trunk/soclib/soclib/module/infrastructure_component/interrupt_infrastructure/vci_iopic/include/soclib/iopic.h here] to access this component. == 2) Component definition & usage source:trunk/soclib/soclib/module/infrastructure_component/interrupt_infrastructure/vci_iopic/caba/metadata/vci_iopic.sd {{{ Uses( 'vci_iopic' ) }}} == 3) CABA Implementation == === CABA sources === * interface : source:trunk/soclib/soclib/module/infrastructure_component/interrupt_infrastructure/vci_iopic/caba/source/include/vci_iopic.h * implementation : source:trunk/soclib/soclib/module/infrastructure_component/interrupt_infrastructure/vci_iopic/caba/source/src/vci_iopic.cpp === CABA Constructor parameters === {{{ VciIopic( sc_module_name name, // Component Name const soclib::common::MappingTable &mt, // Mapping Table const soclib::common::IntTab &srcid, // Initiator index const soclib::common::IntTab &tgtid, // Target index const size_t channels ); // Number of HWI channels (inputs) }}} === CABA Ports === * sc_in '''p_clk''' : Global system clock * sc_in '''p_resetn''' : Global system reset * soclib::caba::!VciInitiator '''p_vci_initiator''' : VCI initiator port * soclib::caba::!VciTarget '''p_vci_target''' : VCI target port * sc_in *'''p_hwi''' : Input interrupts ports array