blob: af5a2e8a547e4694ebebd944240411026cc93b9c [file] [log] [blame]
// SPDX-FileCopyrightText: 2020 Efabless Corporation
//
// 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
// `default_nettype none
module mprj_io #(
parameter AREA1PADS = 18 // Highest numbered pad in area 1
) (
inout vddio,
inout vssio,
inout vdda,
inout vssa,
inout vccd,
inout vssd,
inout vdda1,
inout vdda2,
inout vssa1,
inout vssa2,
inout vccd1,
inout vccd2,
inout vssd1,
inout vssd2,
input vddio_q,
input vssio_q,
input analog_a,
input analog_b,
input porb_h,
inout [`MPRJ_IO_PADS-1:0] io,
input [`MPRJ_IO_PADS-1:0] io_out,
input [`MPRJ_IO_PADS-1:0] oeb,
input [`MPRJ_IO_PADS-1:0] hldh_n,
input [`MPRJ_IO_PADS-1:0] enh,
input [`MPRJ_IO_PADS-1:0] inp_dis,
input [`MPRJ_IO_PADS-1:0] ib_mode_sel,
input [`MPRJ_IO_PADS-1:0] vtrip_sel,
input [`MPRJ_IO_PADS-1:0] slow_sel,
input [`MPRJ_IO_PADS-1:0] holdover,
input [`MPRJ_IO_PADS-1:0] analog_en,
input [`MPRJ_IO_PADS-1:0] analog_sel,
input [`MPRJ_IO_PADS-1:0] analog_pol,
input [`MPRJ_IO_PADS*3-1:0] dm,
output [`MPRJ_IO_PADS-1:0] io_in,
inout [`MPRJ_IO_PADS-8:0] analog_io
);
wire [`MPRJ_IO_PADS-1:0] loop1_io;
wire [6:0] no_connect;
sky130_ef_io__gpiov2_pad_wrapped area1_io_pad [AREA1PADS - 1:0] (
`USER1_ABUTMENT_PINS
`ifndef TOP_ROUTING
,.PAD(io[AREA1PADS - 1:0]),
`endif
.OUT(io_out[AREA1PADS - 1:0]),
.OE_N(oeb[AREA1PADS - 1:0]),
.HLD_H_N(hldh_n[AREA1PADS - 1:0]),
.ENABLE_H(enh[AREA1PADS - 1:0]),
.ENABLE_INP_H(loop1_io[AREA1PADS - 1:0]),
.ENABLE_VDDA_H(porb_h),
.ENABLE_VSWITCH_H(vssio),
.ENABLE_VDDIO(vccd),
.INP_DIS(inp_dis[AREA1PADS - 1:0]),
.IB_MODE_SEL(ib_mode_sel[AREA1PADS - 1:0]),
.VTRIP_SEL(vtrip_sel[AREA1PADS - 1:0]),
.SLOW(slow_sel[AREA1PADS - 1:0]),
.HLD_OVR(holdover[AREA1PADS - 1:0]),
.ANALOG_EN(analog_en[AREA1PADS - 1:0]),
.ANALOG_SEL(analog_sel[AREA1PADS - 1:0]),
.ANALOG_POL(analog_pol[AREA1PADS - 1:0]),
.DM(dm[AREA1PADS*3 - 1:0]),
.PAD_A_NOESD_H(),
.PAD_A_ESD_0_H({analog_io[AREA1PADS - 8:0], no_connect}),
.PAD_A_ESD_1_H(),
.IN(io_in[AREA1PADS - 1:0]),
.IN_H(),
.TIE_HI_ESD(),
.TIE_LO_ESD(loop1_io[AREA1PADS - 1:0])
);
sky130_ef_io__gpiov2_pad_wrapped area2_io_pad [`MPRJ_IO_PADS - AREA1PADS - 1:0] (
`USER2_ABUTMENT_PINS
`ifndef TOP_ROUTING
,.PAD(io[`MPRJ_IO_PADS - 1:AREA1PADS]),
`endif
.OUT(io_out[`MPRJ_IO_PADS - 1:AREA1PADS]),
.OE_N(oeb[`MPRJ_IO_PADS - 1:AREA1PADS]),
.HLD_H_N(hldh_n[`MPRJ_IO_PADS - 1:AREA1PADS]),
.ENABLE_H(enh[`MPRJ_IO_PADS - 1:AREA1PADS]),
.ENABLE_INP_H(loop1_io[`MPRJ_IO_PADS - 1:AREA1PADS]),
.ENABLE_VDDA_H(porb_h),
.ENABLE_VSWITCH_H(vssio),
.ENABLE_VDDIO(vccd),
.INP_DIS(inp_dis[`MPRJ_IO_PADS - 1:AREA1PADS]),
.IB_MODE_SEL(ib_mode_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
.VTRIP_SEL(vtrip_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
.SLOW(slow_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
.HLD_OVR(holdover[`MPRJ_IO_PADS - 1:AREA1PADS]),
.ANALOG_EN(analog_en[`MPRJ_IO_PADS - 1:AREA1PADS]),
.ANALOG_SEL(analog_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
.ANALOG_POL(analog_pol[`MPRJ_IO_PADS - 1:AREA1PADS]),
.DM(dm[`MPRJ_IO_PADS*3 - 1:AREA1PADS*3]),
.PAD_A_NOESD_H(),
.PAD_A_ESD_0_H(analog_io[`MPRJ_IO_PADS - 8:AREA1PADS - 7]),
.PAD_A_ESD_1_H(),
.IN(io_in[`MPRJ_IO_PADS - 1:AREA1PADS]),
.IN_H(),
.TIE_HI_ESD(),
.TIE_LO_ESD(loop1_io[`MPRJ_IO_PADS - 1:AREA1PADS])
);
endmodule
// `default_nettype wire