blob: 36b08df264964714691cc881eed24b45f842dfb8 [file] [log] [blame]
shalan0d14e6e2020-08-31 16:50:48 +02001module chip_io(
2 // Package Pins
Tim Edwards9eda80d2020-10-08 21:36:44 -04003 inout vddio, // Common padframe/ESD supply
4 inout vssio, // Common padframe/ESD ground
5 inout vccd, // Common 1.8V supply
6 inout vssd, // Common digital ground
7 inout vdda, // Management analog 3.3V supply
8 inout vssa, // Management analog ground
9 inout vdda1, // User area 1 3.3V supply
10 inout vdda2, // User area 2 3.3V supply
11 inout vssa1, // User area 1 analog ground
12 inout vssa2, // User area 2 analog ground
13 inout vccd1, // User area 1 1.8V supply
14 inout vccd2, // User area 2 1.8V supply
15 inout vssd1, // User area 1 digital ground
16 inout vssd2, // User area 2 digital ground
17
Tim Edwards04ba17f2020-10-02 22:27:50 -040018 inout gpio,
Tim Edwards61bfc1f2020-10-03 11:51:17 -040019 input clock,
20 input resetb,
shalan0d14e6e2020-08-31 16:50:48 +020021 output flash_csb,
22 output flash_clk,
Tim Edwards61bfc1f2020-10-03 11:51:17 -040023 inout flash_io0,
24 inout flash_io1,
shalan0d14e6e2020-08-31 16:50:48 +020025 // Chip Core Interface
Tim Edwardsf51dd082020-10-05 16:30:24 -040026 input porb_h,
27 output resetb_core_h,
Tim Edwardsef8312e2020-09-22 17:20:06 -040028 output clock_core,
Tim Edwards04ba17f2020-10-02 22:27:50 -040029 input gpio_out_core,
30 output gpio_in_core,
31 input gpio_mode0_core,
32 input gpio_mode1_core,
33 input gpio_outenb_core,
34 input gpio_inenb_core,
shalan0d14e6e2020-08-31 16:50:48 +020035 input flash_csb_core,
36 input flash_clk_core,
37 input flash_csb_oeb_core,
38 input flash_clk_oeb_core,
39 input flash_io0_oeb_core,
40 input flash_io1_oeb_core,
shalan0d14e6e2020-08-31 16:50:48 +020041 input flash_csb_ieb_core,
42 input flash_clk_ieb_core,
43 input flash_io0_ieb_core,
44 input flash_io1_ieb_core,
shalan0d14e6e2020-08-31 16:50:48 +020045 input flash_io0_do_core,
46 input flash_io1_do_core,
shalan0d14e6e2020-08-31 16:50:48 +020047 output flash_io0_di_core,
48 output flash_io1_di_core,
Tim Edwards44bab472020-10-04 22:09:54 -040049 // porbh, returned to the I/O level shifted down and inverted
50 input por,
Tim Edwards6d9739d2020-10-19 11:00:49 -040051 // User project IOs
Tim Edwards44bab472020-10-04 22:09:54 -040052 inout [`MPRJ_IO_PADS-1:0] mprj_io,
shalan0d14e6e2020-08-31 16:50:48 +020053 input [`MPRJ_IO_PADS-1:0] mprj_io_out,
Tim Edwards44bab472020-10-04 22:09:54 -040054 input [`MPRJ_IO_PADS-1:0] mprj_io_oeb,
Tim Edwardsef8312e2020-09-22 17:20:06 -040055 input [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n,
shalan0d14e6e2020-08-31 16:50:48 +020056 input [`MPRJ_IO_PADS-1:0] mprj_io_enh,
Tim Edwardsef8312e2020-09-22 17:20:06 -040057 input [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
58 input [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
Tim Edwards04ba17f2020-10-02 22:27:50 -040059 input [`MPRJ_IO_PADS-1:0] mprj_io_vtrip_sel,
60 input [`MPRJ_IO_PADS-1:0] mprj_io_slow_sel,
61 input [`MPRJ_IO_PADS-1:0] mprj_io_holdover,
Tim Edwardsef8312e2020-09-22 17:20:06 -040062 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_en,
63 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
64 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
65 input [`MPRJ_IO_PADS*3-1:0] mprj_io_dm,
shalan0d14e6e2020-08-31 16:50:48 +020066 output [`MPRJ_IO_PADS-1:0] mprj_io_in
67);
Tim Edwardsef8312e2020-09-22 17:20:06 -040068
shalan0d14e6e2020-08-31 16:50:48 +020069 wire analog_a, analog_b;
70 wire vddio_q, vssio_q;
Tim Edwards9eda80d2020-10-08 21:36:44 -040071
72 // Instantiate power and ground pads for management domain
73 // 12 pads: vddio, vssio, vdda, vssa, vccd, vssd
74 // One each HV and LV clamp.
75
Tim Edwardsf645a842020-10-10 21:36:49 -040076 // HV clamps connect between one HV power rail and one ground
77 // LV clamps have two clamps connecting between any two LV power
78 // rails and grounds, and one back-to-back diode which connects
79 // between the first LV clamp ground and any other ground.
80
Tim Edwards4c733352020-10-12 16:32:36 -040081 sky130_ef_io__vddio_hvc_pad mgmt_vddio_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040082 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040083 `HVCLAMP_PINS(vddio, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -040084 );
shalan0d14e6e2020-08-31 16:50:48 +020085
Tim Edwards4c733352020-10-12 16:32:36 -040086 sky130_ef_io__vdda_hvc_pad mgmt_vdda_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -040087 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040088 `HVCLAMP_PINS(vdda, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -040089 );
shalan0d14e6e2020-08-31 16:50:48 +020090
Tim Edwards4c733352020-10-12 16:32:36 -040091 sky130_ef_io__vccd_lvc_pad mgmt_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -040092 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040093 `LVCLAMP_PINS(vccd, vssio, vccd, vssd, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -040094 );
shalan0d14e6e2020-08-31 16:50:48 +020095
Tim Edwards4c733352020-10-12 16:32:36 -040096 sky130_ef_io__vssio_hvc_pad mgmt_vssio_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040097 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040098 `HVCLAMP_PINS(vddio, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -040099 );
shalan0d14e6e2020-08-31 16:50:48 +0200100
Tim Edwards4c733352020-10-12 16:32:36 -0400101 sky130_ef_io__vssa_hvc_pad mgmt_vssa_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400102 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400103 `HVCLAMP_PINS(vdda, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400104 );
shalan0d14e6e2020-08-31 16:50:48 +0200105
Tim Edwards4c733352020-10-12 16:32:36 -0400106 sky130_ef_io__vssd_lvc_pad mgmt_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400107 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400108 `LVCLAMP_PINS(vccd, vssio, vccd, vssd, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400109 );
shalan0d14e6e2020-08-31 16:50:48 +0200110
Tim Edwards9eda80d2020-10-08 21:36:44 -0400111 // Instantiate power and ground pads for user 1 domain
112 // 8 pads: vdda, vssa, vccd, vssd; One each HV and LV clamp.
113
Tim Edwards4c733352020-10-12 16:32:36 -0400114 sky130_ef_io__vdda_hvc_pad user1_vdda_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400115 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400116 `HVCLAMP_PINS(vdda1, vssa1)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400117 );
shalan0d14e6e2020-08-31 16:50:48 +0200118
Tim Edwards4c733352020-10-12 16:32:36 -0400119 sky130_ef_io__vccd_lvc_pad user1_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400120 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400121 `LVCLAMP_PINS(vccd1, vssd1, vccd1, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400122 );
123
Tim Edwards4c733352020-10-12 16:32:36 -0400124 sky130_ef_io__vssa_hvc_pad user1_vssa_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400125 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400126 `HVCLAMP_PINS(vdda1, vssa1)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400127 );
128
Tim Edwards4c733352020-10-12 16:32:36 -0400129 sky130_ef_io__vssd_lvc_pad user1_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400130 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400131 `LVCLAMP_PINS(vccd1, vssd1, vccd1, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400132 );
133
134 // Instantiate power and ground pads for user 2 domain
135 // 8 pads: vdda, vssa, vccd, vssd; One each HV and LV clamp.
136
Tim Edwards4c733352020-10-12 16:32:36 -0400137 sky130_ef_io__vdda_hvc_pad user2_vdda_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400138 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400139 `HVCLAMP_PINS(vdda2, vssa2)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400140 );
141
Tim Edwards4c733352020-10-12 16:32:36 -0400142 sky130_ef_io__vccd_lvc_pad user2_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400143 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400144 `LVCLAMP_PINS(vccd2, vssd2, vccd2, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400145 );
146
Tim Edwards4c733352020-10-12 16:32:36 -0400147 sky130_ef_io__vssa_hvc_pad user2_vssa_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400148 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400149 `HVCLAMP_PINS(vdda2, vssa2)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400150 );
151
Tim Edwards4c733352020-10-12 16:32:36 -0400152 sky130_ef_io__vssd_lvc_pad user2_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400153 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400154 `LVCLAMP_PINS(vccd2, vssd2, vccd2, vssd, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400155 );
shalan0d14e6e2020-08-31 16:50:48 +0200156
Tim Edwards04ba17f2020-10-02 22:27:50 -0400157 wire [2:0] dm_all =
158 {gpio_mode1_core, gpio_mode1_core, gpio_mode0_core};
shalan0d14e6e2020-08-31 16:50:48 +0200159 wire[2:0] flash_io0_mode =
160 {flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core};
161 wire[2:0] flash_io1_mode =
162 {flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core};
shalan0d14e6e2020-08-31 16:50:48 +0200163
Tim Edwards9eda80d2020-10-08 21:36:44 -0400164 // Management clock input pad
165 `INPUT_PAD(clock, clock_core);
166
167 // Management GPIO pad
Tim Edwards04ba17f2020-10-02 22:27:50 -0400168 `INOUT_PAD(
169 gpio, gpio_in_core, gpio_out_core,
shalan0d14e6e2020-08-31 16:50:48 +0200170 gpio_inenb_core, gpio_outenb_core, dm_all);
171
Tim Edwards9eda80d2020-10-08 21:36:44 -0400172 // Management Flash SPI pads
shalan0d14e6e2020-08-31 16:50:48 +0200173 `INOUT_PAD(
174 flash_io0, flash_io0_di_core, flash_io0_do_core,
175 flash_io0_ieb_core, flash_io0_oeb_core, flash_io0_mode);
176 `INOUT_PAD(
177 flash_io1, flash_io1_di_core, flash_io1_do_core,
178 flash_io1_ieb_core, flash_io1_oeb_core, flash_io1_mode);
shalan0d14e6e2020-08-31 16:50:48 +0200179
shalan0d14e6e2020-08-31 16:50:48 +0200180 `OUTPUT_PAD(flash_csb, flash_csb_core, flash_csb_ieb_core, flash_csb_oeb_core);
181 `OUTPUT_PAD(flash_clk, flash_clk_core, flash_clk_ieb_core, flash_clk_oeb_core);
182
shalan0d14e6e2020-08-31 16:50:48 +0200183 // NOTE: The analog_out pad from the raven chip has been replaced by
Tim Edwards04ba17f2020-10-02 22:27:50 -0400184 // the digital reset input resetb on caravel due to the lack of an on-board
Tim Edwardsef8312e2020-09-22 17:20:06 -0400185 // power-on-reset circuit. The XRES pad is used for providing a glitch-
186 // free reset.
Tim Edwards9eda80d2020-10-08 21:36:44 -0400187
Tim Edwards4c733352020-10-12 16:32:36 -0400188 sky130_fd_io__top_xres4v2 resetb_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400189 `MGMT_ABUTMENT_PINS
Tim Edwardsef8312e2020-09-22 17:20:06 -0400190 `ifndef TOP_ROUTING
Tim Edwardse2ef6732020-10-12 17:25:12 -0400191 .PAD(resetb),
Tim Edwardsef8312e2020-09-22 17:20:06 -0400192 `endif
Tim Edwardse2ef6732020-10-12 17:25:12 -0400193 .TIE_WEAK_HI_H(xresloop), // Loop-back connection to pad through pad_a_esd_h
194 .TIE_HI_ESD(),
195 .TIE_LO_ESD(),
196 .PAD_A_ESD_H(xresloop),
197 .XRES_H_N(resetb_core_h),
198 .DISABLE_PULLUP_H(vssio), // 0 = enable pull-up on reset pad
199 .ENABLE_H(porb_h), // Power-on-reset
200 .EN_VDDIO_SIG_H(vssio), // No idea.
201 .INP_SEL_H(vssio), // 1 = use filt_in_h else filter the pad input
202 .FILT_IN_H(vssio), // Alternate input for glitch filter
203 .PULLUP_H(vssio), // Pullup connection for alternate filter input
204 .ENABLE_VDDIO(vccd)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400205 );
shalan0d14e6e2020-08-31 16:50:48 +0200206
207 // Corner cells (These are overlay cells; it is not clear what is normally
Tim Edwards9eda80d2020-10-08 21:36:44 -0400208 // supposed to go under them.)
209
Tim Edwardsef8312e2020-09-22 17:20:06 -0400210 `ifndef TOP_ROUTING
Tim Edwards4c733352020-10-12 16:32:36 -0400211 sky130_ef_io__corner_pad mgmt_corner [1:0] (
212 .VSSIO(vssio),
213 .VDDIO(vddio),
214 .VDDIO_Q(vddio_q),
215 .VSSIO_Q(vssio_q),
216 .AMUXBUS_A(analog_a),
217 .AMUXBUS_B(analog_b),
218 .VSSD(vssio),
219 .VSSA(vssio),
220 .VSWITCH(vddio),
221 .VDDA(vdda),
222 .VCCD(vccd),
223 .VCCHIB(vccd)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400224 );
Tim Edwards4c733352020-10-12 16:32:36 -0400225 sky130_ef_io__corner_pad user1_corner (
226 .VSSIO(vssio),
227 .VDDIO(vddio),
228 .VDDIO_Q(vddio_q),
229 .VSSIO_Q(vssio_q),
230 .AMUXBUS_A(analog_a),
231 .AMUXBUS_B(analog_b),
232 .VSSD(vssd1),
233 .VSSA(vssa1),
234 .VSWITCH(vddio),
235 .VDDA(vdda1),
236 .VCCD(vccd1),
237 .VCCHIB(vccd)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400238 );
Tim Edwards4c733352020-10-12 16:32:36 -0400239 sky130_ef_io__corner_pad user2_corner (
240 .VSSIO(vssio),
241 .VDDIO(vddio),
242 .VDDIO_Q(vddio_q),
243 .VSSIO_Q(vssio_q),
244 .AMUXBUS_A(analog_a),
245 .AMUXBUS_B(analog_b),
246 .VSSD(vssd2),
247 .VSSA(vssa2),
248 .VSWITCH(vddio),
249 .VDDA(vdda2),
250 .VCCD(vccd2),
251 .VCCHIB(vccd)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400252 );
253 `endif
shalan0d14e6e2020-08-31 16:50:48 +0200254
255 mprj_io mprj_pads(
Tim Edwardse2ef6732020-10-12 17:25:12 -0400256 .vddio(vddio),
257 .vssio(vssio),
258 .vccd(vccd),
259 .vssd(vssd),
260 .vdda1(vdda1),
261 .vdda2(vdda2),
262 .vssa1(vssa1),
263 .vssa2(vssa2),
264 .vccd1(vccd1),
265 .vccd2(vccd2),
266 .vssd1(vssd1),
267 .vssd2(vssd2),
268 .vddio_q(vddio_q),
269 .vssio_q(vssio_q),
270 .analog_a(analog_a),
271 .analog_b(analog_b),
272 .porb_h(porb_h),
273 .por(por),
274 .io(mprj_io),
275 .io_out(mprj_io_out),
276 .oeb(mprj_io_oeb),
277 .hldh_n(mprj_io_hldh_n),
278 .enh(mprj_io_enh),
279 .inp_dis(mprj_io_inp_dis),
280 .ib_mode_sel(mprj_io_ib_mode_sel),
281 .vtrip_sel(mprj_io_vtrip_sel),
282 .holdover(mprj_io_holdover),
283 .slow_sel(mprj_io_slow_sel),
284 .analog_en(mprj_io_analog_en),
285 .analog_sel(mprj_io_analog_sel),
286 .analog_pol(mprj_io_analog_pol),
287 .dm(mprj_io_dm),
288 .io_in(mprj_io_in)
shalan0d14e6e2020-08-31 16:50:48 +0200289 );
290
Tim Edwardsef8312e2020-09-22 17:20:06 -0400291endmodule