blob: 555137c35943d9f503d8e453ec081787873911c9 [file] [log] [blame]
//////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Syntacore LLC © 2016-2021
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileContributor: Syntacore LLC
// //////////////////////////////////////////////////////////////////////////
/// @file <scr1_ipic.svh>
/// @brief IPIC header file
///
`ifndef SCR1_IPIC_SVH
`define SCR1_IPIC_SVH
`include "scr1_arch_description.svh"
`ifdef SCR1_IPIC_EN
//-------------------------------------------------------------------------------
// Parameters declaration
//-------------------------------------------------------------------------------
parameter SCR1_IRQ_VECT_NUM = 16; // must be power of 2 in the current implementation
parameter SCR1_IRQ_VECT_WIDTH = $clog2(SCR1_IRQ_VECT_NUM+1);
parameter SCR1_IRQ_LINES_NUM = SCR1_IRQ_VECT_NUM;
parameter SCR1_IRQ_LINES_WIDTH = $clog2(SCR1_IRQ_LINES_NUM);
parameter logic [SCR1_IRQ_VECT_WIDTH-1:0] SCR1_IRQ_VOID_VECT_NUM = SCR1_IRQ_VECT_WIDTH'(SCR1_IRQ_VECT_NUM);
parameter SCR1_IRQ_IDX_WIDTH = $clog2(SCR1_IRQ_VECT_NUM);
// Address decoding parameters
parameter logic [2:0] SCR1_IPIC_CISV = 3'h0; // RO
parameter logic [2:0] SCR1_IPIC_CICSR = 3'h1; // {IP, IE}
parameter logic [2:0] SCR1_IPIC_IPR = 3'h2; // RW1C
parameter logic [2:0] SCR1_IPIC_ISVR = 3'h3; // RO
parameter logic [2:0] SCR1_IPIC_EOI = 3'h4; // RZW
parameter logic [2:0] SCR1_IPIC_SOI = 3'h5; // RZW
parameter logic [2:0] SCR1_IPIC_IDX = 3'h6; // RW
parameter logic [2:0] SCR1_IPIC_ICSR = 3'h7; // RW
parameter SCR1_IPIC_ICSR_IP = 0;
parameter SCR1_IPIC_ICSR_IE = 1;
parameter SCR1_IPIC_ICSR_IM = 2;
parameter SCR1_IPIC_ICSR_INV = 3;
parameter SCR1_IPIC_ICSR_IS = 4;
parameter SCR1_IPIC_ICSR_PRV_LSB = 8;
parameter SCR1_IPIC_ICSR_PRV_MSB = 9;
parameter SCR1_IPIC_ICSR_LN_LSB = 12;
parameter SCR1_IPIC_ICSR_LN_MSB = SCR1_IPIC_ICSR_LN_LSB
+ SCR1_IRQ_LINES_WIDTH;
parameter logic [1:0] SCR1_IPIC_PRV_M = 2'b11;
//-------------------------------------------------------------------------------
// Types declaration
//-------------------------------------------------------------------------------
typedef enum logic {
SCR1_CSR2IPIC_RD,
SCR1_CSR2IPIC_WR
`ifdef SCR1_XPROP_EN
,
SCR1_CSR2IPIC_ERROR = 'x
`endif // SCR1_XPROP_EN
} type_scr1_csr2ipic_wr_e;
`endif // SCR1_IPIC_EN
`endif // SCR1_IPIC_SVH