blob: cad84e76330b0d359d39f39532063988f3b10f37 [file] [log] [blame]
// Copyright 2017 ETH Zurich and University of Bologna.
// Copyright and related rights are licensed under the Solderpad Hardware
// License, Version 0.51 (the “License”); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
// http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law
// or agreed to in writing, software, hardware and materials distributed under
// this 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.
`ifndef APB_BUS_SV
`define APB_BUS_SV
`include "config.sv"
`define ROM_ADDR_WIDTH 12
`define ROM_START_ADDR 32'h8000
`define ASIC 1
`define USE_ZERO_RISCY 1
// SOC PERIPHERALS APB BUS PARAMETRES
`define NB_MASTER 9
// MASTER PORT TO CVP
`define UART_START_ADDR 32'h1A10_0000
`define UART_END_ADDR 32'h1A10_0FFF
// MASTER PORT TO GPIO
`define GPIO_START_ADDR 32'h1A10_1000
`define GPIO_END_ADDR 32'h1A10_1FFF
// MASTER PORT TO SPI MASTER
`define SPI_START_ADDR 32'h1A10_2000
`define SPI_END_ADDR 32'h1A10_2FFF
// MASTER PORT TO TIMER
`define TIMER_START_ADDR 32'h1A10_3000
`define TIMER_END_ADDR 32'h1A10_3FFF
// MASTER PORT TO EVENT UNIT
`define EVENT_UNIT_START_ADDR 32'h1A10_4000
`define EVENT_UNIT_END_ADDR 32'h1A10_4FFF
// MASTER PORT TO I2C
`define I2C_START_ADDR 32'h1A10_5000
`define I2C_END_ADDR 32'h1A10_5FFF
// MASTER PORT TO FLL
`define FLL_START_ADDR 32'h1A10_6000
`define FLL_END_ADDR 32'h1A10_6FFF
// MASTER PORT TO SOC CTRL
`define SOC_CTRL_START_ADDR 32'h1A10_7000
`define SOC_CTRL_END_ADDR 32'h1A10_7FFF
// MASTER PORT TO DEBUG
`define DEBUG_START_ADDR 32'h1A11_0000
`define DEBUG_END_ADDR 32'h1A11_7FFF
`define APB_ASSIGN_SLAVE(lhs, rhs) \
assign lhs.paddr = rhs.paddr; \
assign lhs.pwdata = rhs.pwdata; \
assign lhs.pwrite = rhs.pwrite; \
assign lhs.psel = rhs.psel; \
assign lhs.penable = rhs.penable; \
assign rhs.prdata = lhs.prdata; \
assign rhs.pready = lhs.pready; \
assign rhs.pslverr = lhs.pslverr;
`define APB_ASSIGN_MASTER(lhs, rhs) `APB_ASSIGN_SLAVE(rhs, lhs)
////////////////////////////////////////////////////////////////////////////////
// Only general functions and definitions are defined here //
// These functions are not intended to be modified //
////////////////////////////////////////////////////////////////////////////////
interface APB_BUS
#(
parameter APB_ADDR_WIDTH = 32,
parameter APB_DATA_WIDTH = 32
);
logic [APB_ADDR_WIDTH-1:0] paddr;
logic [APB_DATA_WIDTH-1:0] pwdata;
logic pwrite;
logic psel;
logic penable;
logic [APB_DATA_WIDTH-1:0] prdata;
logic pready;
logic pslverr;
// Master Side
//***************************************
modport Master
(
output paddr, pwdata, pwrite, psel, penable,
input prdata, pready, pslverr
);
// Slave Side
//***************************************
modport Slave
(
input paddr, pwdata, pwrite, psel, penable,
output prdata, pready, pslverr
);
endinterface
`endif