blob: df0ca62c54d6badf056855880f33cbf1c0d5120c [file] [log] [blame]
shalan0d14e6e2020-08-31 16:50:48 +02001module chip_io(
2 // Package Pins
Tim Edwardsef8312e2020-09-22 17:20:06 -04003 inout vdd3v3,
4 inout vdd1v8,
5 inout vss,
6 input [1:0] gpio,
7 inout clock,
shalan0d14e6e2020-08-31 16:50:48 +02008 inout RSTB,
9 inout ser_rx,
10 output ser_tx,
11 inout irq,
12 output SDO,
13 inout SDI,
14 inout CSB,
15 inout SCK,
shalan0d14e6e2020-08-31 16:50:48 +020016 output flash_csb,
17 output flash_clk,
18 output flash_io0,
19 output flash_io1,
20 output flash_io2,
21 output flash_io3,
22 // Chip Core Interface
23 input por,
24 output porb_h,
Tim Edwardsef8312e2020-09-22 17:20:06 -040025 output clock_core,
26 input [1:0] gpio_out_core,
27 output [1:0] gpio_in_core,
28 input [1:0] gpio_mode0_core,
29 input [1:0] gpio_mode1_core,
30 input [1:0] gpio_outenb_core,
31 input [1:0] gpio_inenb_core,
shalan0d14e6e2020-08-31 16:50:48 +020032 output SCK_core,
33 output ser_rx_core,
34 inout ser_tx_core,
35 output irq_pin_core,
36 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,
42 input flash_io2_oeb_core,
43 input flash_io3_oeb_core,
44 input flash_csb_ieb_core,
45 input flash_clk_ieb_core,
46 input flash_io0_ieb_core,
47 input flash_io1_ieb_core,
48 input flash_io2_ieb_core,
49 input flash_io3_ieb_core,
50 input flash_io0_do_core,
51 input flash_io1_do_core,
52 input flash_io2_do_core,
53 input flash_io3_do_core,
54 output flash_io0_di_core,
55 output flash_io1_di_core,
56 output flash_io2_di_core,
57 output flash_io3_di_core,
58 output SDI_core,
59 output CSB_core,
60 input pll_clk16,
61 input SDO_core,
62 // Mega-project IOs
63 input [`MPRJ_IO_PADS-1:0] mprj_io,
64 input [`MPRJ_IO_PADS-1:0] mprj_io_out,
65 input [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n,
Tim Edwardsef8312e2020-09-22 17:20:06 -040066 input [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n,
shalan0d14e6e2020-08-31 16:50:48 +020067 input [`MPRJ_IO_PADS-1:0] mprj_io_enh,
Tim Edwardsef8312e2020-09-22 17:20:06 -040068 input [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
69 input [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
70 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_en,
71 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
72 input [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
73 input [`MPRJ_IO_PADS*3-1:0] mprj_io_dm,
shalan0d14e6e2020-08-31 16:50:48 +020074 output [`MPRJ_IO_PADS-1:0] mprj_io_in
75);
Tim Edwardsef8312e2020-09-22 17:20:06 -040076
shalan0d14e6e2020-08-31 16:50:48 +020077 wire analog_a, analog_b;
78 wire vddio_q, vssio_q;
79 // Instantiate power cells for VDD3V3 domain (8 total; 4 high clamps and
Tim Edwardsef8312e2020-09-22 17:20:06 -040080 // 4 low clamps)
81 s8iom0_vdda_hvc_pad vdd3v3hclamp [1:0] (
shalan0d14e6e2020-08-31 16:50:48 +020082 `ABUTMENT_PINS
83 .drn_hvc(),
84 .src_bdy_hvc()
Tim Edwardsef8312e2020-09-22 17:20:06 -040085 );
shalan0d14e6e2020-08-31 16:50:48 +020086
Tim Edwardsef8312e2020-09-22 17:20:06 -040087 s8iom0_vddio_hvc_pad vddiohclamp [1:0] (
shalan0d14e6e2020-08-31 16:50:48 +020088 `ABUTMENT_PINS
89 .drn_hvc(),
90 .src_bdy_hvc()
Tim Edwardsef8312e2020-09-22 17:20:06 -040091 );
shalan0d14e6e2020-08-31 16:50:48 +020092
Tim Edwardsef8312e2020-09-22 17:20:06 -040093 s8iom0_vdda_lvc_pad vdd3v3lclamp [3:0] (
shalan0d14e6e2020-08-31 16:50:48 +020094 `ABUTMENT_PINS
95 .bdy2_b2b(),
96 .drn_lvc1(),
97 .drn_lvc2(),
98 .src_bdy_lvc1(),
99 .src_bdy_lvc2()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400100 );
shalan0d14e6e2020-08-31 16:50:48 +0200101
Tim Edwardsef8312e2020-09-22 17:20:06 -0400102 // Instantiate the core voltage supply (since it is not generated on-chip)
103 // (1.8V) (4 total, 2 high and 2 low clamps)
104 s8iom0_vccd_hvc_pad vdd1v8hclamp [1:0] (
shalan0d14e6e2020-08-31 16:50:48 +0200105 `ABUTMENT_PINS
106 .drn_hvc(),
107 .src_bdy_hvc()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400108 );
shalan0d14e6e2020-08-31 16:50:48 +0200109
Tim Edwardsef8312e2020-09-22 17:20:06 -0400110 s8iom0_vccd_lvc_pad vdd1v8lclamp [1:0] (
shalan0d14e6e2020-08-31 16:50:48 +0200111 `ABUTMENT_PINS
112 .bdy2_b2b(),
113 .drn_lvc1(),
114 .drn_lvc2(),
115 .src_bdy_lvc1(),
116 .src_bdy_lvc2()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400117 );
shalan0d14e6e2020-08-31 16:50:48 +0200118
Tim Edwardsef8312e2020-09-22 17:20:06 -0400119 // Instantiate ground cells (7 total, 4 high clamps and 3 low clamps)
120 s8iom0_vssa_hvc_pad vsshclamp [3:0] (
shalan0d14e6e2020-08-31 16:50:48 +0200121 `ABUTMENT_PINS
122 .drn_hvc(),
123 .src_bdy_hvc()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400124 );
shalan0d14e6e2020-08-31 16:50:48 +0200125
Tim Edwardsef8312e2020-09-22 17:20:06 -0400126 s8iom0_vssa_lvc_pad vssalclamp (
shalan0d14e6e2020-08-31 16:50:48 +0200127 `ABUTMENT_PINS
128 .bdy2_b2b(),
129 .drn_lvc1(),
130 .drn_lvc2(),
131 .src_bdy_lvc1(),
132 .src_bdy_lvc2()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400133 );
shalan0d14e6e2020-08-31 16:50:48 +0200134
Tim Edwardsef8312e2020-09-22 17:20:06 -0400135 s8iom0_vssd_lvc_pad vssdlclamp (
shalan0d14e6e2020-08-31 16:50:48 +0200136 `ABUTMENT_PINS
137 .bdy2_b2b(),
138 .drn_lvc1(),
139 .drn_lvc2(),
140 .src_bdy_lvc1(),
141 .src_bdy_lvc2()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400142 );
shalan0d14e6e2020-08-31 16:50:48 +0200143
Tim Edwardsef8312e2020-09-22 17:20:06 -0400144 s8iom0_vssio_lvc_pad vssiolclamp (
shalan0d14e6e2020-08-31 16:50:48 +0200145 `ABUTMENT_PINS
146 .bdy2_b2b(),
147 .drn_lvc1(),
148 .drn_lvc2(),
149 .src_bdy_lvc1(),
150 .src_bdy_lvc2()
Tim Edwardsef8312e2020-09-22 17:20:06 -0400151 );
shalan0d14e6e2020-08-31 16:50:48 +0200152
Tim Edwardsef8312e2020-09-22 17:20:06 -0400153 wire [5:0] dm_all;
154 assign dm_all = {gpio_mode1_core[1], gpio_mode1_core[1], gpio_mode0_core[1],
shalan0d14e6e2020-08-31 16:50:48 +0200155 gpio_mode1_core[0], gpio_mode1_core[0], gpio_mode0_core[0]};
156
157 wire[2:0] flash_io0_mode =
158 {flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core};
159 wire[2:0] flash_io1_mode =
160 {flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core};
161 wire[2:0] flash_io2_mode =
162 {flash_io2_ieb_core, flash_io2_ieb_core, flash_io2_oeb_core};
163 wire[2:0] flash_io3_mode =
164 {flash_io3_ieb_core, flash_io3_ieb_core, flash_io3_oeb_core};
165
Tim Edwardsef8312e2020-09-22 17:20:06 -0400166 // GPIO pads
shalan0d14e6e2020-08-31 16:50:48 +0200167 `INOUT_PAD_V(
168 gpio, gpio_in_core, gpio_out_core, 16,
169 gpio_inenb_core, gpio_outenb_core, dm_all);
170
171 // Flash pads
172 `INOUT_PAD(
173 flash_io0, flash_io0_di_core, flash_io0_do_core,
174 flash_io0_ieb_core, flash_io0_oeb_core, flash_io0_mode);
175 `INOUT_PAD(
176 flash_io1, flash_io1_di_core, flash_io1_do_core,
177 flash_io1_ieb_core, flash_io1_oeb_core, flash_io1_mode);
178 `INOUT_PAD(
179 flash_io2, flash_io2_di_core, flash_io2_do_core,
180 flash_io2_ieb_core, flash_io2_oeb_core, flash_io2_mode);
181 `INOUT_PAD(
182 flash_io3, flash_io3_di_core, flash_io3_do_core,
183 flash_io3_ieb_core, flash_io3_oeb_core, flash_io3_mode);
184
Tim Edwardsef8312e2020-09-22 17:20:06 -0400185 `INPUT_PAD(clock, clock_core);
shalan0d14e6e2020-08-31 16:50:48 +0200186 `INPUT_PAD(irq, irq_pin_core);
shalan0d14e6e2020-08-31 16:50:48 +0200187 `INPUT_PAD(SDI, SDI_core);
188 `INPUT_PAD(CSB, CSB_core);
189 `INPUT_PAD(SCK, SCK_core);
Tim Edwardsef8312e2020-09-22 17:20:06 -0400190 `INPUT_PAD(ser_rx, ser_rx_core);
shalan0d14e6e2020-08-31 16:50:48 +0200191
192 // Output Pads
Tim Edwardsef8312e2020-09-22 17:20:06 -0400193 `OUTPUT_PAD(SDO, SDO_core, vdd1v8, SDO_enb);
shalan0d14e6e2020-08-31 16:50:48 +0200194 `OUTPUT_PAD(flash_csb, flash_csb_core, flash_csb_ieb_core, flash_csb_oeb_core);
195 `OUTPUT_PAD(flash_clk, flash_clk_core, flash_clk_ieb_core, flash_clk_oeb_core);
Tim Edwardsef8312e2020-09-22 17:20:06 -0400196 `OUTPUT_PAD(ser_tx, ser_tx_core, vdd1v8, ser_tx_ena);
shalan0d14e6e2020-08-31 16:50:48 +0200197
shalan0d14e6e2020-08-31 16:50:48 +0200198
199 // NOTE: The analog_out pad from the raven chip has been replaced by
Tim Edwardsef8312e2020-09-22 17:20:06 -0400200 // the digital reset input RSTB on striVe due to the lack of an on-board
201 // power-on-reset circuit. The XRES pad is used for providing a glitch-
202 // free reset.
shalan0d14e6e2020-08-31 16:50:48 +0200203 s8iom0s8_top_xres4v2 RSTB_pad (
204 `ABUTMENT_PINS
Tim Edwardsef8312e2020-09-22 17:20:06 -0400205 `ifndef TOP_ROUTING
206 .pad(RSTB),
207 `endif
shalan0d14e6e2020-08-31 16:50:48 +0200208 .tie_weak_hi_h(xresloop), // Loop-back connection to pad through pad_a_esd_h
209 .tie_hi_esd(),
210 .tie_lo_esd(),
211 .pad_a_esd_h(xresloop),
212 .xres_h_n(porb_h),
213 .disable_pullup_h(vss), // 0 = enable pull-up on reset pad
Tim Edwardsef8312e2020-09-22 17:20:06 -0400214 .enable_h(vdd3v3), // Power-on-reset to the power-on-reset input??
shalan0d14e6e2020-08-31 16:50:48 +0200215 .en_vddio_sig_h(vss), // No idea.
216 .inp_sel_h(vss), // 1 = use filt_in_h else filter the pad input
217 .filt_in_h(vss), // Alternate input for glitch filter
218 .pullup_h(vss), // Pullup connection for alternate filter input
219 .enable_vddio(vdd1v8)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400220 );
shalan0d14e6e2020-08-31 16:50:48 +0200221
222 // Corner cells (These are overlay cells; it is not clear what is normally
Tim Edwardsef8312e2020-09-22 17:20:06 -0400223 // supposed to go under them.)
224 `ifndef TOP_ROUTING
225 s8iom0_corner_pad corner [3:0] (
shalan0d14e6e2020-08-31 16:50:48 +0200226 .vssio(vss),
Tim Edwardsef8312e2020-09-22 17:20:06 -0400227 .vddio(vdd3v3),
shalan0d14e6e2020-08-31 16:50:48 +0200228 .vddio_q(vddio_q),
229 .vssio_q(vssio_q),
230 .amuxbus_a(analog_a),
231 .amuxbus_b(analog_b),
232 .vssd(vss),
233 .vssa(vss),
Tim Edwardsef8312e2020-09-22 17:20:06 -0400234 .vswitch(vdd3v3),
235 .vdda(vdd3v3),
shalan0d14e6e2020-08-31 16:50:48 +0200236 .vccd(vdd1v8),
237 .vcchib(vdd1v8)
Tim Edwardsef8312e2020-09-22 17:20:06 -0400238 );
239 `endif
shalan0d14e6e2020-08-31 16:50:48 +0200240
241 mprj_io mprj_pads(
Tim Edwardsef8312e2020-09-22 17:20:06 -0400242 .vdd(vdd3v3),
shalan0d14e6e2020-08-31 16:50:48 +0200243 .vdd1v8(vdd1v8),
244 .vss(vss),
245 .vddio_q(vddio_q),
246 .vssio_q(vssio_q),
247 .analog_a(analog_a),
248 .analog_b(analog_b),
249 .io(mprj_io),
250 .io_out(mprj_io_out),
251 .oeb_n(mprj_io_oeb_n),
252 .hldh_n(mprj_io_hldh_n),
253 .enh(mprj_io_enh),
254 .inp_dis(mprj_io_inp_dis),
255 .ib_mode_sel(mprj_io_ib_mode_sel),
256 .analog_en(mprj_io_analog_en),
257 .analog_sel(mprj_io_analog_sel),
258 .analog_pol(mprj_io_analog_pol),
259 .dm(mprj_io_dm),
260 .io_in(mprj_io_in)
261 );
262
Tim Edwardsef8312e2020-09-22 17:20:06 -0400263endmodule