blob: 2a2bea7814aef8f2f199bd616141b42a2a7248de [file] [log] [blame]
Matt Venn08cd6eb2020-11-16 12:01:14 +01001`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,
28 output resetb_core_h,
Tim Edwardsef8312e2020-09-22 17:20:06 -040029 output clock_core,
Tim Edwards04ba17f2020-10-02 22:27:50 -040030 input gpio_out_core,
31 output gpio_in_core,
32 input gpio_mode0_core,
33 input gpio_mode1_core,
34 input gpio_outenb_core,
35 input gpio_inenb_core,
shalan0d14e6e2020-08-31 16:50:48 +020036 input flash_csb_core,
37 input flash_clk_core,
38 input flash_csb_oeb_core,
39 input flash_clk_oeb_core,
40 input flash_io0_oeb_core,
41 input flash_io1_oeb_core,
shalan0d14e6e2020-08-31 16:50:48 +020042 input flash_csb_ieb_core,
43 input flash_clk_ieb_core,
44 input flash_io0_ieb_core,
45 input flash_io1_ieb_core,
shalan0d14e6e2020-08-31 16:50:48 +020046 input flash_io0_do_core,
47 input flash_io1_do_core,
shalan0d14e6e2020-08-31 16:50:48 +020048 output flash_io0_di_core,
49 output flash_io1_di_core,
Tim Edwards44bab472020-10-04 22:09:54 -040050 // porbh, returned to the I/O level shifted down and inverted
51 input por,
Tim Edwards6d9739d2020-10-19 11:00:49 -040052 // User project IOs
Tim Edwards44bab472020-10-04 22:09:54 -040053 inout [`MPRJ_IO_PADS-1:0] mprj_io,
shalan0d14e6e2020-08-31 16:50:48 +020054 input [`MPRJ_IO_PADS-1:0] mprj_io_out,
Tim Edwards44bab472020-10-04 22:09:54 -040055 input [`MPRJ_IO_PADS-1:0] mprj_io_oeb,
Tim Edwardsef8312e2020-09-22 17:20:06 -040056 input [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n,
shalan0d14e6e2020-08-31 16:50:48 +020057 input [`MPRJ_IO_PADS-1:0] mprj_io_enh,
Tim Edwardsef8312e2020-09-22 17:20:06 -040058 input [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
59 input [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
Tim Edwards04ba17f2020-10-02 22:27:50 -040060 input [`MPRJ_IO_PADS-1:0] mprj_io_vtrip_sel,
61 input [`MPRJ_IO_PADS-1:0] mprj_io_slow_sel,
62 input [`MPRJ_IO_PADS-1:0] mprj_io_holdover,
Tim Edwardsef8312e2020-09-22 17:20:06 -040063 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_en,
64 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
65 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
66 input [`MPRJ_IO_PADS*3-1:0] mprj_io_dm,
shalan0d14e6e2020-08-31 16:50:48 +020067 output [`MPRJ_IO_PADS-1:0] mprj_io_in
68);
Tim Edwardsef8312e2020-09-22 17:20:06 -040069
shalan0d14e6e2020-08-31 16:50:48 +020070 wire analog_a, analog_b;
71 wire vddio_q, vssio_q;
Tim Edwards9eda80d2020-10-08 21:36:44 -040072
73 // Instantiate power and ground pads for management domain
74 // 12 pads: vddio, vssio, vdda, vssa, vccd, vssd
75 // One each HV and LV clamp.
76
Tim Edwardsf645a842020-10-10 21:36:49 -040077 // HV clamps connect between one HV power rail and one ground
78 // LV clamps have two clamps connecting between any two LV power
79 // rails and grounds, and one back-to-back diode which connects
80 // between the first LV clamp ground and any other ground.
81
Tim Edwards4c733352020-10-12 16:32:36 -040082 sky130_ef_io__vddio_hvc_pad mgmt_vddio_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040083 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040084 `HVCLAMP_PINS(vddio, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -040085 );
shalan0d14e6e2020-08-31 16:50:48 +020086
Tim Edwards4c733352020-10-12 16:32:36 -040087 sky130_ef_io__vdda_hvc_pad mgmt_vdda_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -040088 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040089 `HVCLAMP_PINS(vdda, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -040090 );
shalan0d14e6e2020-08-31 16:50:48 +020091
Tim Edwards4c733352020-10-12 16:32:36 -040092 sky130_ef_io__vccd_lvc_pad mgmt_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -040093 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040094 `LVCLAMP_PINS(vccd, vssio, vccd, vssd, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -040095 );
shalan0d14e6e2020-08-31 16:50:48 +020096
Tim Edwards4c733352020-10-12 16:32:36 -040097 sky130_ef_io__vssio_hvc_pad mgmt_vssio_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -040098 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -040099 `HVCLAMP_PINS(vddio, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400100 );
shalan0d14e6e2020-08-31 16:50:48 +0200101
Tim Edwards4c733352020-10-12 16:32:36 -0400102 sky130_ef_io__vssa_hvc_pad mgmt_vssa_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400103 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400104 `HVCLAMP_PINS(vdda, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400105 );
shalan0d14e6e2020-08-31 16:50:48 +0200106
Tim Edwards4c733352020-10-12 16:32:36 -0400107 sky130_ef_io__vssd_lvc_pad mgmt_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400108 `MGMT_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400109 `LVCLAMP_PINS(vccd, vssio, vccd, vssd, vssa)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400110 );
shalan0d14e6e2020-08-31 16:50:48 +0200111
Tim Edwards9eda80d2020-10-08 21:36:44 -0400112 // Instantiate power and ground pads for user 1 domain
113 // 8 pads: vdda, vssa, vccd, vssd; One each HV and LV clamp.
114
Tim Edwards4c733352020-10-12 16:32:36 -0400115 sky130_ef_io__vdda_hvc_pad user1_vdda_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400116 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400117 `HVCLAMP_PINS(vdda1, vssa1)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400118 );
shalan0d14e6e2020-08-31 16:50:48 +0200119
Tim Edwards4c733352020-10-12 16:32:36 -0400120 sky130_ef_io__vccd_lvc_pad user1_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400121 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400122 `LVCLAMP_PINS(vccd1, vssd1, vccd1, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400123 );
124
Tim Edwards4c733352020-10-12 16:32:36 -0400125 sky130_ef_io__vssa_hvc_pad user1_vssa_hvclamp_pad [1:0] (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400126 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400127 `HVCLAMP_PINS(vdda1, vssa1)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400128 );
129
Tim Edwards4c733352020-10-12 16:32:36 -0400130 sky130_ef_io__vssd_lvc_pad user1_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400131 `USER1_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400132 `LVCLAMP_PINS(vccd1, vssd1, vccd1, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400133 );
134
135 // Instantiate power and ground pads for user 2 domain
136 // 8 pads: vdda, vssa, vccd, vssd; One each HV and LV clamp.
137
Tim Edwards4c733352020-10-12 16:32:36 -0400138 sky130_ef_io__vdda_hvc_pad user2_vdda_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400139 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400140 `HVCLAMP_PINS(vdda2, vssa2)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400141 );
142
Tim Edwards4c733352020-10-12 16:32:36 -0400143 sky130_ef_io__vccd_lvc_pad user2_vccd_lvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400144 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400145 `LVCLAMP_PINS(vccd2, vssd2, vccd2, vssd, vssio)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400146 );
147
Tim Edwards4c733352020-10-12 16:32:36 -0400148 sky130_ef_io__vssa_hvc_pad user2_vssa_hvclamp_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400149 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400150 `HVCLAMP_PINS(vdda2, vssa2)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400151 );
152
Tim Edwards4c733352020-10-12 16:32:36 -0400153 sky130_ef_io__vssd_lvc_pad user2_vssd_lvclmap_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400154 `USER2_ABUTMENT_PINS
Tim Edwardsf645a842020-10-10 21:36:49 -0400155 `LVCLAMP_PINS(vccd2, vssd2, vccd2, vssd, vssio)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400156 );
shalan0d14e6e2020-08-31 16:50:48 +0200157
Tim Edwards04ba17f2020-10-02 22:27:50 -0400158 wire [2:0] dm_all =
159 {gpio_mode1_core, gpio_mode1_core, gpio_mode0_core};
shalan0d14e6e2020-08-31 16:50:48 +0200160 wire[2:0] flash_io0_mode =
161 {flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core};
162 wire[2:0] flash_io1_mode =
163 {flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core};
shalan0d14e6e2020-08-31 16:50:48 +0200164
Tim Edwards9eda80d2020-10-08 21:36:44 -0400165 // Management clock input pad
166 `INPUT_PAD(clock, clock_core);
167
168 // Management GPIO pad
Tim Edwards04ba17f2020-10-02 22:27:50 -0400169 `INOUT_PAD(
170 gpio, gpio_in_core, gpio_out_core,
shalan0d14e6e2020-08-31 16:50:48 +0200171 gpio_inenb_core, gpio_outenb_core, dm_all);
172
Tim Edwards9eda80d2020-10-08 21:36:44 -0400173 // Management Flash SPI pads
shalan0d14e6e2020-08-31 16:50:48 +0200174 `INOUT_PAD(
175 flash_io0, flash_io0_di_core, flash_io0_do_core,
176 flash_io0_ieb_core, flash_io0_oeb_core, flash_io0_mode);
177 `INOUT_PAD(
178 flash_io1, flash_io1_di_core, flash_io1_do_core,
179 flash_io1_ieb_core, flash_io1_oeb_core, flash_io1_mode);
shalan0d14e6e2020-08-31 16:50:48 +0200180
shalan0d14e6e2020-08-31 16:50:48 +0200181 `OUTPUT_PAD(flash_csb, flash_csb_core, flash_csb_ieb_core, flash_csb_oeb_core);
182 `OUTPUT_PAD(flash_clk, flash_clk_core, flash_clk_ieb_core, flash_clk_oeb_core);
183
shalan0d14e6e2020-08-31 16:50:48 +0200184 // NOTE: The analog_out pad from the raven chip has been replaced by
Tim Edwards04ba17f2020-10-02 22:27:50 -0400185 // the digital reset input resetb on caravel due to the lack of an on-board
Tim Edwardsef8312e2020-09-22 17:20:06 -0400186 // power-on-reset circuit. The XRES pad is used for providing a glitch-
187 // free reset.
Tim Edwards9eda80d2020-10-08 21:36:44 -0400188
Tim Edwards4c733352020-10-12 16:32:36 -0400189 sky130_fd_io__top_xres4v2 resetb_pad (
Tim Edwards9eda80d2020-10-08 21:36:44 -0400190 `MGMT_ABUTMENT_PINS
Tim Edwardsef8312e2020-09-22 17:20:06 -0400191 `ifndef TOP_ROUTING
Tim Edwardse2ef6732020-10-12 17:25:12 -0400192 .PAD(resetb),
Tim Edwardsef8312e2020-09-22 17:20:06 -0400193 `endif
Tim Edwardse2ef6732020-10-12 17:25:12 -0400194 .TIE_WEAK_HI_H(xresloop), // Loop-back connection to pad through pad_a_esd_h
195 .TIE_HI_ESD(),
196 .TIE_LO_ESD(),
197 .PAD_A_ESD_H(xresloop),
198 .XRES_H_N(resetb_core_h),
199 .DISABLE_PULLUP_H(vssio), // 0 = enable pull-up on reset pad
200 .ENABLE_H(porb_h), // Power-on-reset
201 .EN_VDDIO_SIG_H(vssio), // No idea.
202 .INP_SEL_H(vssio), // 1 = use filt_in_h else filter the pad input
203 .FILT_IN_H(vssio), // Alternate input for glitch filter
204 .PULLUP_H(vssio), // Pullup connection for alternate filter input
205 .ENABLE_VDDIO(vccd)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400206 );
shalan0d14e6e2020-08-31 16:50:48 +0200207
208 // Corner cells (These are overlay cells; it is not clear what is normally
Tim Edwards9eda80d2020-10-08 21:36:44 -0400209 // supposed to go under them.)
210
Tim Edwardsef8312e2020-09-22 17:20:06 -0400211 `ifndef TOP_ROUTING
Tim Edwards4c733352020-10-12 16:32:36 -0400212 sky130_ef_io__corner_pad mgmt_corner [1:0] (
213 .VSSIO(vssio),
214 .VDDIO(vddio),
215 .VDDIO_Q(vddio_q),
216 .VSSIO_Q(vssio_q),
217 .AMUXBUS_A(analog_a),
218 .AMUXBUS_B(analog_b),
219 .VSSD(vssio),
220 .VSSA(vssio),
221 .VSWITCH(vddio),
222 .VDDA(vdda),
223 .VCCD(vccd),
224 .VCCHIB(vccd)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400225 );
Tim Edwards4c733352020-10-12 16:32:36 -0400226 sky130_ef_io__corner_pad user1_corner (
227 .VSSIO(vssio),
228 .VDDIO(vddio),
229 .VDDIO_Q(vddio_q),
230 .VSSIO_Q(vssio_q),
231 .AMUXBUS_A(analog_a),
232 .AMUXBUS_B(analog_b),
233 .VSSD(vssd1),
234 .VSSA(vssa1),
235 .VSWITCH(vddio),
236 .VDDA(vdda1),
237 .VCCD(vccd1),
238 .VCCHIB(vccd)
Tim Edwards9eda80d2020-10-08 21:36:44 -0400239 );
Tim Edwards4c733352020-10-12 16:32:36 -0400240 sky130_ef_io__corner_pad user2_corner (
241 .VSSIO(vssio),
242 .VDDIO(vddio),
243 .VDDIO_Q(vddio_q),
244 .VSSIO_Q(vssio_q),
245 .AMUXBUS_A(analog_a),
246 .AMUXBUS_B(analog_b),
247 .VSSD(vssd2),
248 .VSSA(vssa2),
249 .VSWITCH(vddio),
250 .VDDA(vdda2),
251 .VCCD(vccd2),
252 .VCCHIB(vccd)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400253 );
254 `endif
shalan0d14e6e2020-08-31 16:50:48 +0200255
256 mprj_io mprj_pads(
Tim Edwardse2ef6732020-10-12 17:25:12 -0400257 .vddio(vddio),
258 .vssio(vssio),
259 .vccd(vccd),
260 .vssd(vssd),
261 .vdda1(vdda1),
262 .vdda2(vdda2),
263 .vssa1(vssa1),
264 .vssa2(vssa2),
265 .vccd1(vccd1),
266 .vccd2(vccd2),
267 .vssd1(vssd1),
268 .vssd2(vssd2),
269 .vddio_q(vddio_q),
270 .vssio_q(vssio_q),
271 .analog_a(analog_a),
272 .analog_b(analog_b),
273 .porb_h(porb_h),
274 .por(por),
275 .io(mprj_io),
276 .io_out(mprj_io_out),
277 .oeb(mprj_io_oeb),
278 .hldh_n(mprj_io_hldh_n),
279 .enh(mprj_io_enh),
280 .inp_dis(mprj_io_inp_dis),
281 .ib_mode_sel(mprj_io_ib_mode_sel),
282 .vtrip_sel(mprj_io_vtrip_sel),
283 .holdover(mprj_io_holdover),
284 .slow_sel(mprj_io_slow_sel),
285 .analog_en(mprj_io_analog_en),
286 .analog_sel(mprj_io_analog_sel),
287 .analog_pol(mprj_io_analog_pol),
288 .dm(mprj_io_dm),
289 .io_in(mprj_io_in)
shalan0d14e6e2020-08-31 16:50:48 +0200290 );
291
Tim Edwardsef8312e2020-09-22 17:20:06 -0400292endmodule