blob: b8ba7f142cdc8361f775a5fb7bcab914f12405d1 [file] [log] [blame]
Tim Edwards581068f2020-11-19 12:45:25 -05001// `default_nettype none
shalan0d14e6e2020-08-31 16:50:48 +02002module chip_io(
3 // Package Pins
Tim Edwards9eda80d2020-10-08 21:36:44 -04004 inout vddio, // Common padframe/ESD supply
5 inout vssio, // Common padframe/ESD ground
6 inout vccd, // Common 1.8V supply
7 inout vssd, // Common digital ground
8 inout vdda, // Management analog 3.3V supply
9 inout vssa, // Management analog ground
10 inout vdda1, // User area 1 3.3V supply
11 inout vdda2, // User area 2 3.3V supply
12 inout vssa1, // User area 1 analog ground
13 inout vssa2, // User area 2 analog ground
14 inout vccd1, // User area 1 1.8V supply
15 inout vccd2, // User area 2 1.8V supply
16 inout vssd1, // User area 1 digital ground
17 inout vssd2, // User area 2 digital ground
18
Tim Edwards04ba17f2020-10-02 22:27:50 -040019 inout gpio,
Tim Edwards61bfc1f2020-10-03 11:51:17 -040020 input clock,
21 input resetb,
shalan0d14e6e2020-08-31 16:50:48 +020022 output flash_csb,
23 output flash_clk,
Tim Edwards61bfc1f2020-10-03 11:51:17 -040024 inout flash_io0,
25 inout flash_io1,
shalan0d14e6e2020-08-31 16:50:48 +020026 // Chip Core Interface
Tim Edwardsf51dd082020-10-05 16:30:24 -040027 input porb_h,
Tim Edwards581068f2020-11-19 12:45:25 -050028 input por,
Tim Edwardsf51dd082020-10-05 16:30:24 -040029 output resetb_core_h,
Tim Edwardsef8312e2020-09-22 17:20:06 -040030 output clock_core,
Tim Edwards04ba17f2020-10-02 22:27:50 -040031 input gpio_out_core,
32 output gpio_in_core,
33 input gpio_mode0_core,
34 input gpio_mode1_core,
35 input gpio_outenb_core,
36 input gpio_inenb_core,
shalan0d14e6e2020-08-31 16:50:48 +020037 input flash_csb_core,
38 input flash_clk_core,
39 input flash_csb_oeb_core,
40 input flash_clk_oeb_core,
41 input flash_io0_oeb_core,
42 input flash_io1_oeb_core,
shalan0d14e6e2020-08-31 16:50:48 +020043 input flash_csb_ieb_core,
44 input flash_clk_ieb_core,
45 input flash_io0_ieb_core,
46 input flash_io1_ieb_core,
shalan0d14e6e2020-08-31 16:50:48 +020047 input flash_io0_do_core,
48 input flash_io1_do_core,
shalan0d14e6e2020-08-31 16:50:48 +020049 output flash_io0_di_core,
50 output flash_io1_di_core,
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,
Tim Edwards581068f2020-11-19 12:45:25 -050066 output [`MPRJ_IO_PADS-1:0] mprj_io_in,
67 // User project direct access to gpio pad connections for analog
68 // (all but the lowest-numbered 7 pads)
69 inout [`MPRJ_IO_PADS-8:0] mprj_analog_io
shalan0d14e6e2020-08-31 16:50:48 +020070);
Tim Edwardsef8312e2020-09-22 17:20:06 -040071
shalan0d14e6e2020-08-31 16:50:48 +020072 wire analog_a, analog_b;
73 wire vddio_q, vssio_q;
Tim Edwards9eda80d2020-10-08 21:36:44 -040074
75 // Instantiate power and ground pads for management domain
76 // 12 pads: vddio, vssio, vdda, vssa, vccd, vssd
77 // One each HV and LV clamp.
78
Tim Edwardsf645a842020-10-10 21:36:49 -040079 // HV clamps connect between one HV power rail and one ground
80 // LV clamps have two clamps connecting between any two LV power
81 // rails and grounds, and one back-to-back diode which connects
82 // between the first LV clamp ground and any other ground.
83
Tim Edwards4c733352020-10-12 16:32:36 -040084 sky130_ef_io__vddio_hvc_pad mgmt_vddio_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040085 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040086 `HVCLAMP_PINS(vddio, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -040087 );
shalan0d14e6e2020-08-31 16:50:48 +020088
Tim Edwards4c733352020-10-12 16:32:36 -040089 sky130_ef_io__vdda_hvc_pad mgmt_vdda_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -040090 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040091 `HVCLAMP_PINS(vdda, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -040092 );
shalan0d14e6e2020-08-31 16:50:48 +020093
Tim Edwards4c733352020-10-12 16:32:36 -040094 sky130_ef_io__vccd_lvc_pad mgmt_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -040095 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040096 `LVCLAMP_PINS(vccd, vssio, vccd, vssd, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -040097 );
shalan0d14e6e2020-08-31 16:50:48 +020098
Tim Edwards4c733352020-10-12 16:32:36 -040099 sky130_ef_io__vssio_hvc_pad mgmt_vssio_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400100 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400101 `HVCLAMP_PINS(vddio, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400102 );
shalan0d14e6e2020-08-31 16:50:48 +0200103
Tim Edwards4c733352020-10-12 16:32:36 -0400104 sky130_ef_io__vssa_hvc_pad mgmt_vssa_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400105 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400106 `HVCLAMP_PINS(vdda, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400107 );
shalan0d14e6e2020-08-31 16:50:48 +0200108
Tim Edwards4c733352020-10-12 16:32:36 -0400109 sky130_ef_io__vssd_lvc_pad mgmt_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400110 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400111 `LVCLAMP_PINS(vccd, vssio, vccd, vssd, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400112 );
shalan0d14e6e2020-08-31 16:50:48 +0200113
Tim Edwards9eda80d2020-10-08 21:36:44 -0400114 // Instantiate power and ground pads for user 1 domain
115 // 8 pads: vdda, vssa, vccd, vssd; One each HV and LV clamp.
116
Tim Edwards4c733352020-10-12 16:32:36 -0400117 sky130_ef_io__vdda_hvc_pad user1_vdda_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400118 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400119 `HVCLAMP_PINS(vdda1, vssa1)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400120 );
shalan0d14e6e2020-08-31 16:50:48 +0200121
Tim Edwards4c733352020-10-12 16:32:36 -0400122 sky130_ef_io__vccd_lvc_pad user1_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400123 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400124 `LVCLAMP_PINS(vccd1, vssd1, vccd1, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400125 );
126
Tim Edwards4c733352020-10-12 16:32:36 -0400127 sky130_ef_io__vssa_hvc_pad user1_vssa_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400128 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400129 `HVCLAMP_PINS(vdda1, vssa1)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400130 );
131
Tim Edwards4c733352020-10-12 16:32:36 -0400132 sky130_ef_io__vssd_lvc_pad user1_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400133 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400134 `LVCLAMP_PINS(vccd1, vssd1, vccd1, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400135 );
136
137 // Instantiate power and ground pads for user 2 domain
138 // 8 pads: vdda, vssa, vccd, vssd; One each HV and LV clamp.
139
Tim Edwards4c733352020-10-12 16:32:36 -0400140 sky130_ef_io__vdda_hvc_pad user2_vdda_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400141 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400142 `HVCLAMP_PINS(vdda2, vssa2)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400143 );
144
Tim Edwards4c733352020-10-12 16:32:36 -0400145 sky130_ef_io__vccd_lvc_pad user2_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400146 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400147 `LVCLAMP_PINS(vccd2, vssd2, vccd2, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400148 );
149
Tim Edwards4c733352020-10-12 16:32:36 -0400150 sky130_ef_io__vssa_hvc_pad user2_vssa_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400151 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400152 `HVCLAMP_PINS(vdda2, vssa2)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400153 );
154
Tim Edwards4c733352020-10-12 16:32:36 -0400155 sky130_ef_io__vssd_lvc_pad user2_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400156 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400157 `LVCLAMP_PINS(vccd2, vssd2, vccd2, vssd, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400158 );
shalan0d14e6e2020-08-31 16:50:48 +0200159
Tim Edwards04ba17f2020-10-02 22:27:50 -0400160 wire [2:0] dm_all =
161 {gpio_mode1_core, gpio_mode1_core, gpio_mode0_core};
shalan0d14e6e2020-08-31 16:50:48 +0200162 wire[2:0] flash_io0_mode =
163 {flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core};
164 wire[2:0] flash_io1_mode =
165 {flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core};
shalan0d14e6e2020-08-31 16:50:48 +0200166
Tim Edwards9eda80d2020-10-08 21:36:44 -0400167 // Management clock input pad
168 `INPUT_PAD(clock, clock_core);
169
170 // Management GPIO pad
Tim Edwards04ba17f2020-10-02 22:27:50 -0400171 `INOUT_PAD(
172 gpio, gpio_in_core, gpio_out_core,
shalan0d14e6e2020-08-31 16:50:48 +0200173 gpio_inenb_core, gpio_outenb_core, dm_all);
174
Tim Edwards9eda80d2020-10-08 21:36:44 -0400175 // Management Flash SPI pads
shalan0d14e6e2020-08-31 16:50:48 +0200176 `INOUT_PAD(
177 flash_io0, flash_io0_di_core, flash_io0_do_core,
178 flash_io0_ieb_core, flash_io0_oeb_core, flash_io0_mode);
179 `INOUT_PAD(
180 flash_io1, flash_io1_di_core, flash_io1_do_core,
181 flash_io1_ieb_core, flash_io1_oeb_core, flash_io1_mode);
shalan0d14e6e2020-08-31 16:50:48 +0200182
shalan0d14e6e2020-08-31 16:50:48 +0200183 `OUTPUT_PAD(flash_csb, flash_csb_core, flash_csb_ieb_core, flash_csb_oeb_core);
184 `OUTPUT_PAD(flash_clk, flash_clk_core, flash_clk_ieb_core, flash_clk_oeb_core);
185
shalan0d14e6e2020-08-31 16:50:48 +0200186 // NOTE: The analog_out pad from the raven chip has been replaced by
Tim Edwards04ba17f2020-10-02 22:27:50 -0400187 // the digital reset input resetb on caravel due to the lack of an on-board
Tim Edwardsef8312e2020-09-22 17:20:06 -0400188 // power-on-reset circuit. The XRES pad is used for providing a glitch-
189 // free reset.
Tim Edwards9eda80d2020-10-08 21:36:44 -0400190
Tim Edwards4c733352020-10-12 16:32:36 -0400191 sky130_fd_io__top_xres4v2 resetb_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400192 `MGMT_ABUTMENT_PINS
Tim Edwardsef8312e2020-09-22 17:20:06 -0400193 `ifndef TOP_ROUTING
Tim Edwardse2ef6732020-10-12 17:25:12 -0400194 .PAD(resetb),
Tim Edwardsef8312e2020-09-22 17:20:06 -0400195 `endif
Tim Edwardse2ef6732020-10-12 17:25:12 -0400196 .TIE_WEAK_HI_H(xresloop), // Loop-back connection to pad through pad_a_esd_h
197 .TIE_HI_ESD(),
198 .TIE_LO_ESD(),
199 .PAD_A_ESD_H(xresloop),
200 .XRES_H_N(resetb_core_h),
201 .DISABLE_PULLUP_H(vssio), // 0 = enable pull-up on reset pad
202 .ENABLE_H(porb_h), // Power-on-reset
203 .EN_VDDIO_SIG_H(vssio), // No idea.
204 .INP_SEL_H(vssio), // 1 = use filt_in_h else filter the pad input
205 .FILT_IN_H(vssio), // Alternate input for glitch filter
206 .PULLUP_H(vssio), // Pullup connection for alternate filter input
207 .ENABLE_VDDIO(vccd)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400208 );
shalan0d14e6e2020-08-31 16:50:48 +0200209
210 // Corner cells (These are overlay cells; it is not clear what is normally
Tim Edwards9eda80d2020-10-08 21:36:44 -0400211 // supposed to go under them.)
212
Tim Edwardsef8312e2020-09-22 17:20:06 -0400213 `ifndef TOP_ROUTING
Tim Edwards4c733352020-10-12 16:32:36 -0400214 sky130_ef_io__corner_pad mgmt_corner [1:0] (
215 .VSSIO(vssio),
216 .VDDIO(vddio),
217 .VDDIO_Q(vddio_q),
218 .VSSIO_Q(vssio_q),
219 .AMUXBUS_A(analog_a),
220 .AMUXBUS_B(analog_b),
221 .VSSD(vssio),
222 .VSSA(vssio),
223 .VSWITCH(vddio),
224 .VDDA(vdda),
225 .VCCD(vccd),
226 .VCCHIB(vccd)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400227 );
Tim Edwards4c733352020-10-12 16:32:36 -0400228 sky130_ef_io__corner_pad user1_corner (
229 .VSSIO(vssio),
230 .VDDIO(vddio),
231 .VDDIO_Q(vddio_q),
232 .VSSIO_Q(vssio_q),
233 .AMUXBUS_A(analog_a),
234 .AMUXBUS_B(analog_b),
235 .VSSD(vssd1),
236 .VSSA(vssa1),
237 .VSWITCH(vddio),
238 .VDDA(vdda1),
239 .VCCD(vccd1),
240 .VCCHIB(vccd)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400241 );
Tim Edwards4c733352020-10-12 16:32:36 -0400242 sky130_ef_io__corner_pad user2_corner (
243 .VSSIO(vssio),
244 .VDDIO(vddio),
245 .VDDIO_Q(vddio_q),
246 .VSSIO_Q(vssio_q),
247 .AMUXBUS_A(analog_a),
248 .AMUXBUS_B(analog_b),
249 .VSSD(vssd2),
250 .VSSA(vssa2),
251 .VSWITCH(vddio),
252 .VDDA(vdda2),
253 .VCCD(vccd2),
254 .VCCHIB(vccd)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400255 );
256 `endif
shalan0d14e6e2020-08-31 16:50:48 +0200257
258 mprj_io mprj_pads(
Tim Edwardse2ef6732020-10-12 17:25:12 -0400259 .vddio(vddio),
260 .vssio(vssio),
261 .vccd(vccd),
262 .vssd(vssd),
263 .vdda1(vdda1),
264 .vdda2(vdda2),
265 .vssa1(vssa1),
266 .vssa2(vssa2),
267 .vccd1(vccd1),
268 .vccd2(vccd2),
269 .vssd1(vssd1),
270 .vssd2(vssd2),
271 .vddio_q(vddio_q),
272 .vssio_q(vssio_q),
273 .analog_a(analog_a),
274 .analog_b(analog_b),
275 .porb_h(porb_h),
Tim Edwardse2ef6732020-10-12 17:25:12 -0400276 .io(mprj_io),
277 .io_out(mprj_io_out),
278 .oeb(mprj_io_oeb),
279 .hldh_n(mprj_io_hldh_n),
280 .enh(mprj_io_enh),
281 .inp_dis(mprj_io_inp_dis),
282 .ib_mode_sel(mprj_io_ib_mode_sel),
283 .vtrip_sel(mprj_io_vtrip_sel),
284 .holdover(mprj_io_holdover),
285 .slow_sel(mprj_io_slow_sel),
286 .analog_en(mprj_io_analog_en),
287 .analog_sel(mprj_io_analog_sel),
288 .analog_pol(mprj_io_analog_pol),
289 .dm(mprj_io_dm),
Tim Edwards581068f2020-11-19 12:45:25 -0500290 .io_in(mprj_io_in),
291 .analog_io(mprj_analog_io)
shalan0d14e6e2020-08-31 16:50:48 +0200292 );
293
Tim Edwardsef8312e2020-09-22 17:20:06 -0400294endmodule
Tim Edwards581068f2020-11-19 12:45:25 -0500295// `default_nettype wire