blob: 5f1463b93aa7731dc9d4b17704140e47ad1e5a43 [file] [log] [blame]
`timescale 1ns/1ns
`ifndef AW
`define AW 32
`endif
`ifndef DW
`define DW 64
`endif
//`define DBG
module AHBlite_sys_0(
`ifdef USE_POWER_PINS
input VPWR,
input VGND,
`endif
input HCLK,
input HRESETn,
input [`AW-1: 0] HADDR,
input [`DW-1: 0] HWDATA,
input HWRITE,
input [1: 0] HTRANS,
input [2:0] HSIZE,
output HREADY,
output [`DW-1: 0] HRDATA,
input wire [3: 0] fdi_S0,
output wire [3: 0] fdo_S0,
output wire [0: 0] fdoe_S0,
output wire [0: 0] fsclk_S0,
output wire [0: 0] fcen_S0,
input wire [`DW-1: 0] SRAMRDATA_S1,
output wire [7: 0] SRAMWEN_S1,
output wire [`DW-1: 0] SRAMWDATA_S1,
output wire [0: 0] SRAMCS0_S1,
//output wire [0: 0] SRAMCS1_S1,
//output wire [0: 0] SRAMCS2_S1,
//output wire [0: 0] SRAMCS3_S1,
output wire [9: 0] SRAMADDR_S1,
input wire [15: 0] GPIOIN_S2,
output wire [15: 0] GPIOOUT_S2,
output wire [15: 0] GPIOPU_S2,
output wire [15: 0] GPIOPD_S2,
output wire [15: 0] GPIOOEN_S2,
output wire [3:0] db_reg,
input wire [0: 0] RsRx_SS0_S0,
output wire [0: 0] RsTx_SS0_S0,
output wire [0: 0] uart_irq_SS0_S0,
input wire [0: 0] RsRx_SS0_S1,
output wire [0: 0] RsTx_SS0_S1,
output wire [0: 0] uart_irq_SS0_S1,
input wire [0: 0] MSI_SS0_S2,
output wire [0: 0] MSO_SS0_S2,
output wire [0: 0] SSn_SS0_S2,
output wire [0: 0] SCLK_SS0_S2,
input wire [0: 0] MSI_SS0_S3,
output wire [0: 0] MSO_SS0_S3,
output wire [0: 0] SSn_SS0_S3,
output wire [0: 0] SCLK_SS0_S3,
input wire [0: 0] scl_i_SS0_S4,
output wire [0: 0] scl_o_SS0_S4,
output wire [0: 0] scl_oen_o_SS0_S4,
input wire [0: 0] sda_i_SS0_S4,
output wire [0: 0] sda_o_SS0_S4,
output wire [0: 0] sda_oen_o_SS0_S4,
input wire [0: 0] scl_i_SS0_S5,
output wire [0: 0] scl_o_SS0_S5,
output wire [0: 0] scl_oen_o_SS0_S5,
input wire [0: 0] sda_i_SS0_S5,
output wire [0: 0] sda_o_SS0_S5,
output wire [0: 0] sda_oen_o_SS0_S5,
output wire [0: 0] pwm_SS0_S6,
output wire [0: 0] pwm_SS0_S7,
output wire [31:0] IRQ
);
//Inputs
wire HSEL_S0, HSEL_S1, HSEL_S2;
//Outputs
wire [`DW-1:0] HRDATA_S0, HRDATA_S1;
wire [31:0] HRDATA_S2, HRDATA_SS0;
wire HREADY_S0, HREADY_S1, HREADY_S2, HREADY_SS0, HREADY;
wire [1:0] HRESP_S2;
wire [15: 0] WGPIODIN_S2;
wire [15: 0] WGPIODOUT_S2;
wire [15: 0] WGPIOPU_S2;
wire [15: 0] WGPIOPD_S2;
wire [15: 0] WGPIODIR_S2;
//AHB Bus
AHBlite_BUS0 AHB(
.HCLK(HCLK),
.HRESETn(HRESETn),
// Master Interface
.HADDR(HADDR),
.HWDATA(HWDATA),
.HREADY(HREADY),
.HRDATA(HRDATA),
// Slave # 0
.HSEL_S0(HSEL_S0),
.HREADY_S0(HREADY_S0),
.HRDATA_S0(HRDATA_S0),
// Slave # 1
.HSEL_S1(HSEL_S1),
.HREADY_S1(HREADY_S1),
.HRDATA_S1(HRDATA_S1),
// Slave # 2
.HSEL_S2(HSEL_S2),
.HREADY_S2(HREADY_S2),
.HRDATA_S2({32'd0, HRDATA_S2}),
// Subsystem # 0
.HSEL_SS0(HSEL_SS0),
.HREADY_SS0(HREADY_SS0),
.HRDATA_SS0({32'd0, HRDATA_SS0})
);
//Digital module # 0
QSPI_XIP_CTRL S0 (
`ifdef USE_POWER_PINS
.VPWR(VPWR),
.VGND(VGND),
`endif
.HCLK(HCLK),
.HRESETn(HRESETn),
.HSEL(HSEL_S0),
.HADDR(HADDR),
.HREADY(HREADY),
.HWRITE(HWRITE),
.HTRANS(HTRANS),
.HRDATA(HRDATA_S0),
.HREADYOUT(HREADY_S0),
.din(fdi_S0),
.dout(fdo_S0),
.douten(fdoe_S0),
.sck(fsclk_S0),
.ce_n(fcen_S0)
);
//Digital module # 1
AHBSRAM S1 (
.HCLK(HCLK),
.HRESETn(HRESETn),
.HSEL(HSEL_S1),
.HADDR(HADDR),
.HREADY(HREADY),
.HWRITE(HWRITE),
.HTRANS(HTRANS),
.HSIZE(HSIZE),
.HWDATA(HWDATA),
.HRDATA(HRDATA_S1),
.HREADYOUT(HREADY_S1),
.SRAMRDATA(SRAMRDATA_S1),
.SRAMWEN(SRAMWEN_S1),
.SRAMWDATA(SRAMWDATA_S1),
.SRAMCS0(SRAMCS0_S1),
.SRAMADDR(SRAMADDR_S1)
);
//Digital module # 2
GPIO S2 (
.WGPIODIN(WGPIODIN_S2),
.WGPIODOUT(WGPIODOUT_S2),
.WGPIOPU(WGPIOPU_S2),
.WGPIOPD(WGPIOPD_S2),
.WGPIODIR(WGPIODIR_S2),
.GPIOIN(GPIOIN_S2),
.GPIOOUT(GPIOOUT_S2),
.GPIOPU(GPIOPU_S2),
.GPIOPD(GPIOPD_S2),
.GPIOOEN(GPIOOEN_S2)
);
AHBlite_GPIO S_2 (
.HCLK(HCLK),
.HRESETn(HRESETn),
.HSEL(HSEL_S2),
.HADDR(HADDR[5:3]),
.HWRITE(HWRITE),
.HTRANS(HTRANS),
.HSIZE(HSIZE),
.HWDATA(HWDATA[31:0]),
.HREADY(HREADY),
.HREADYOUT(HREADY_S2),
.HRDATA(HRDATA_S2[31:0]),
.HRESP(HRESP_S2),
.WGPIODIN(WGPIODIN_S2),
.WGPIODOUT(WGPIODOUT_S2),
.WGPIOPU(WGPIOPU_S2),
.WGPIOPD(WGPIOPD_S2),
.WGPIODIR(WGPIODIR_S2),
.IRQ(IRQ[15:0])
);
apb_sys_0 apb_sys_inst_0(
`ifdef USE_POWER_PINS
.VPWR(VPWR),
.VGND(VGND),
`endif
// Global signals
.HCLK(HCLK),
.HRESETn(HRESETn),
// AHB Slave inputs
.HADDR(HADDR),
.HTRANS(HTRANS),
.HWRITE(HWRITE),
.HWDATA(HWDATA[31:0]),
.HSEL(HSEL_SS0),
.HREADY(HREADY),
// AHB Slave outputs
.HRDATA(HRDATA_SS0),
.HREADYOUT(HREADY_SS0),
.RsRx_S0(RsRx_SS0_S0),
.RsTx_S0(RsTx_SS0_S0),
.RsRx_S1(RsRx_SS0_S1),
.RsTx_S1(RsTx_SS0_S1),
.MSI_S2(MSI_SS0_S2),
.MSO_S2(MSO_SS0_S2),
.SSn_S2(SSn_SS0_S2),
.SCLK_S2(SCLK_SS0_S2),
.MSI_S3(MSI_SS0_S3),
.MSO_S3(MSO_SS0_S3),
.SSn_S3(SSn_SS0_S3),
.SCLK_S3(SCLK_SS0_S3),
.scl_i_S4(scl_i_SS0_S4),
.scl_o_S4(scl_o_SS0_S4),
.scl_oen_o_S4(scl_oen_o_SS0_S4),
.sda_i_S4(sda_i_SS0_S4),
.sda_o_S4(sda_o_SS0_S4),
.sda_oen_o_S4(sda_oen_o_SS0_S4),
.scl_i_S5(scl_i_SS0_S5),
.scl_o_S5(scl_o_SS0_S5),
.scl_oen_o_S5(scl_oen_o_SS0_S5),
.sda_i_S5(sda_i_SS0_S5),
.sda_o_S5(sda_o_SS0_S5),
.sda_oen_o_S5(sda_oen_o_SS0_S5),
.pwm_S6(pwm_SS0_S6),
.pwm_S7(pwm_SS0_S7),
.IRQ(IRQ[31:16])
);
`ifdef DBG
always @(posedge HCLK)
if(HTRANS[1] & HREADY)
$display("Mem request (%d) A:%X" HWRITE HADDR);
`endif
endmodule