blob: 5bc4483fafb58217445c797298b9996226f723fe [file] [log] [blame]
Tim Edwards9eda80d2020-10-08 21:36:44 -04001module mprj_io #(
2 parameter AREA1PADS = 18 // Highest numbered pad in area 1
3) (
4 inout vddio,
5 inout vssio,
6 inout vdda,
7 inout vssa,
8 inout vccd,
9 inout vssd,
10
11 inout vdda1,
12 inout vdda2,
13 inout vssa1,
14 inout vssa2,
15 inout vccd1,
16 inout vccd2,
17 inout vssd1,
18 inout vssd2,
19
Tim Edwards04ba17f2020-10-02 22:27:50 -040020 input vddio_q,
21 input vssio_q,
22 input analog_a,
23 input analog_b,
Tim Edwards44bab472020-10-04 22:09:54 -040024 input porb_h,
25 input por,
26 inout [`MPRJ_IO_PADS-1:0] io,
Tim Edwards04ba17f2020-10-02 22:27:50 -040027 input [`MPRJ_IO_PADS-1:0] io_out,
Tim Edwards44bab472020-10-04 22:09:54 -040028 input [`MPRJ_IO_PADS-1:0] oeb,
shalan0d14e6e2020-08-31 16:50:48 +020029 input [`MPRJ_IO_PADS-1:0] hldh_n,
Tim Edwards04ba17f2020-10-02 22:27:50 -040030 input [`MPRJ_IO_PADS-1:0] enh,
shalan0d14e6e2020-08-31 16:50:48 +020031 input [`MPRJ_IO_PADS-1:0] inp_dis,
32 input [`MPRJ_IO_PADS-1:0] ib_mode_sel,
Tim Edwards04ba17f2020-10-02 22:27:50 -040033 input [`MPRJ_IO_PADS-1:0] vtrip_sel,
34 input [`MPRJ_IO_PADS-1:0] slow_sel,
35 input [`MPRJ_IO_PADS-1:0] holdover,
shalan0d14e6e2020-08-31 16:50:48 +020036 input [`MPRJ_IO_PADS-1:0] analog_en,
37 input [`MPRJ_IO_PADS-1:0] analog_sel,
38 input [`MPRJ_IO_PADS-1:0] analog_pol,
39 input [`MPRJ_IO_PADS*3-1:0] dm,
Tim Edwards04ba17f2020-10-02 22:27:50 -040040 output [`MPRJ_IO_PADS-1:0] io_in
shalan0d14e6e2020-08-31 16:50:48 +020041);
Tim Edwards9eda80d2020-10-08 21:36:44 -040042
43 wire [`MPRJ_IO_PADS-1:0] loop1_io;
44
Tim Edwards4c733352020-10-12 16:32:36 -040045 sky130_ef_io__gpiov2_pad area1_io_pad [AREA1PADS - 1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040046 `USER1_ABUTMENT_PINS
47 `ifndef TOP_ROUTING
Tim Edwards4c733352020-10-12 16:32:36 -040048 .PAD(io[AREA1PADS - 1:0]),
Tim Edwards9eda80d2020-10-08 21:36:44 -040049 `endif
Tim Edwards4c733352020-10-12 16:32:36 -040050 .OUT(io_out[AREA1PADS - 1:0]),
51 .OE_N(oeb[AREA1PADS - 1:0]),
52 .HLD_H_N(hldh_n[AREA1PADS - 1:0]),
53 .ENABLE_H(enh[AREA1PADS - 1:0]),
54 .ENABLE_INP_H(loop1_io[AREA1PADS - 1:0]),
55 .ENABLE_VDDA_H(porb_h),
56 .ENABLE_VSWITCH_H(vssio),
57 .ENABLE_VDDIO(vccd),
58 .INP_DIS(inp_dis[AREA1PADS - 1:0]),
59 .IB_MODE_SEL(ib_mode_sel[AREA1PADS - 1:0]),
60 .VTRIP_SEL(vtrip_sel[AREA1PADS - 1:0]),
61 .SLOW(slow_sel[AREA1PADS - 1:0]),
62 .HLD_OVR(holdover[AREA1PADS - 1:0]),
63 .ANALOG_EN(analog_en[AREA1PADS - 1:0]),
64 .ANALOG_SEL(analog_sel[AREA1PADS - 1:0]),
65 .ANALOG_POL(analog_pol[AREA1PADS - 1:0]),
66 .DM(dm[AREA1PADS*3 - 1:0]),
67 .PAD_A_NOESD_H(),
68 .PAD_A_ESD_0_H(),
69 .PAD_A_ESD_1_H(),
70 .IN(io_in[AREA1PADS - 1:0]),
71 .IN_H(),
72 .TIE_HI_ESD(),
73 .TIE_LO_ESD(loop1_io[AREA1PADS - 1:0])
Tim Edwards9eda80d2020-10-08 21:36:44 -040074 );
75
Tim Edwards4c733352020-10-12 16:32:36 -040076 sky130_ef_io__gpiov2_pad area2_io_pad [`MPRJ_IO_PADS - AREA1PADS - 1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040077 `USER2_ABUTMENT_PINS
78 `ifndef TOP_ROUTING
Tim Edwards4c733352020-10-12 16:32:36 -040079 .PAD(io[`MPRJ_IO_PADS - 1:AREA1PADS]),
Tim Edwards9eda80d2020-10-08 21:36:44 -040080 `endif
Tim Edwards4c733352020-10-12 16:32:36 -040081 .OUT(io_out[`MPRJ_IO_PADS - 1:AREA1PADS]),
82 .OE_N(oeb[`MPRJ_IO_PADS - 1:AREA1PADS]),
83 .HLD_H_N(hldh_n[`MPRJ_IO_PADS - 1:AREA1PADS]),
84 .ENABLE_H(enh[`MPRJ_IO_PADS - 1:AREA1PADS]),
85 .ENABLE_INP_H(loop1_io[`MPRJ_IO_PADS - 1:AREA1PADS]),
86 .ENABLE_VDDA_H(porb_h),
87 .ENABLE_VSWITCH_H(vssio),
88 .ENABLE_VDDIO(vccd),
89 .INP_DIS(inp_dis[`MPRJ_IO_PADS - 1:AREA1PADS]),
90 .IB_MODE_SEL(ib_mode_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
91 .VTRIP_SEL(vtrip_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
92 .SLOW(slow_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
93 .HLD_OVR(holdover[`MPRJ_IO_PADS - 1:AREA1PADS]),
94 .ANALOG_EN(analog_en[`MPRJ_IO_PADS - 1:AREA1PADS]),
95 .ANALOG_SEL(analog_sel[`MPRJ_IO_PADS - 1:AREA1PADS]),
96 .ANALOG_POL(analog_pol[`MPRJ_IO_PADS - 1:AREA1PADS]),
97 .DM(dm[`MPRJ_IO_PADS*3 - 1:AREA1PADS*3]),
98 .PAD_A_NOESD_H(),
99 .PAD_A_ESD_0_H(),
100 .PAD_A_ESD_1_H(),
101 .IN(io_in[`MPRJ_IO_PADS - 1:AREA1PADS]),
102 .IN_H(),
103 .TIE_HI_ESD(),
104 .TIE_LO_ESD(loop1_io[`MPRJ_IO_PADS - 1:AREA1PADS])
Tim Edwards9eda80d2020-10-08 21:36:44 -0400105 );
shalan0d14e6e2020-08-31 16:50:48 +0200106
Tim Edwards04ba17f2020-10-02 22:27:50 -0400107endmodule