shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 1 | module chip_io( |
| 2 | // Package Pins |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 3 | inout vdd3v3, |
| 4 | inout vdd1v8, |
| 5 | inout vss, |
| 6 | input [1:0] gpio, |
| 7 | inout clock, |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 8 | 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, |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 16 | 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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 25 | 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, |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 32 | 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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 66 | input [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n, |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 67 | input [`MPRJ_IO_PADS-1:0] mprj_io_enh, |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 68 | 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, |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 74 | output [`MPRJ_IO_PADS-1:0] mprj_io_in |
| 75 | ); |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 76 | |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 77 | 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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 80 | // 4 low clamps) |
| 81 | s8iom0_vdda_hvc_pad vdd3v3hclamp [1:0] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 82 | `ABUTMENT_PINS |
| 83 | .drn_hvc(), |
| 84 | .src_bdy_hvc() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 85 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 86 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 87 | s8iom0_vddio_hvc_pad vddiohclamp [1:0] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 88 | `ABUTMENT_PINS |
| 89 | .drn_hvc(), |
| 90 | .src_bdy_hvc() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 91 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 92 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 93 | s8iom0_vdda_lvc_pad vdd3v3lclamp [3:0] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 94 | `ABUTMENT_PINS |
| 95 | .bdy2_b2b(), |
| 96 | .drn_lvc1(), |
| 97 | .drn_lvc2(), |
| 98 | .src_bdy_lvc1(), |
| 99 | .src_bdy_lvc2() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 100 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 101 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 102 | // 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] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 105 | `ABUTMENT_PINS |
| 106 | .drn_hvc(), |
| 107 | .src_bdy_hvc() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 108 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 109 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 110 | s8iom0_vccd_lvc_pad vdd1v8lclamp [1:0] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 111 | `ABUTMENT_PINS |
| 112 | .bdy2_b2b(), |
| 113 | .drn_lvc1(), |
| 114 | .drn_lvc2(), |
| 115 | .src_bdy_lvc1(), |
| 116 | .src_bdy_lvc2() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 117 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 118 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 119 | // Instantiate ground cells (7 total, 4 high clamps and 3 low clamps) |
| 120 | s8iom0_vssa_hvc_pad vsshclamp [3:0] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 121 | `ABUTMENT_PINS |
| 122 | .drn_hvc(), |
| 123 | .src_bdy_hvc() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 124 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 125 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 126 | s8iom0_vssa_lvc_pad vssalclamp ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 127 | `ABUTMENT_PINS |
| 128 | .bdy2_b2b(), |
| 129 | .drn_lvc1(), |
| 130 | .drn_lvc2(), |
| 131 | .src_bdy_lvc1(), |
| 132 | .src_bdy_lvc2() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 133 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 134 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 135 | s8iom0_vssd_lvc_pad vssdlclamp ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 136 | `ABUTMENT_PINS |
| 137 | .bdy2_b2b(), |
| 138 | .drn_lvc1(), |
| 139 | .drn_lvc2(), |
| 140 | .src_bdy_lvc1(), |
| 141 | .src_bdy_lvc2() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 142 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 143 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 144 | s8iom0_vssio_lvc_pad vssiolclamp ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 145 | `ABUTMENT_PINS |
| 146 | .bdy2_b2b(), |
| 147 | .drn_lvc1(), |
| 148 | .drn_lvc2(), |
| 149 | .src_bdy_lvc1(), |
| 150 | .src_bdy_lvc2() |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 151 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 152 | |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 153 | wire [5:0] dm_all; |
| 154 | assign dm_all = {gpio_mode1_core[1], gpio_mode1_core[1], gpio_mode0_core[1], |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 155 | 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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 166 | // GPIO pads |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 167 | `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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 185 | `INPUT_PAD(clock, clock_core); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 186 | `INPUT_PAD(irq, irq_pin_core); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 187 | `INPUT_PAD(SDI, SDI_core); |
| 188 | `INPUT_PAD(CSB, CSB_core); |
| 189 | `INPUT_PAD(SCK, SCK_core); |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 190 | `INPUT_PAD(ser_rx, ser_rx_core); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 191 | |
| 192 | // Output Pads |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 193 | `OUTPUT_PAD(SDO, SDO_core, vdd1v8, SDO_enb); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 194 | `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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 196 | `OUTPUT_PAD(ser_tx, ser_tx_core, vdd1v8, ser_tx_ena); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 197 | |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 198 | |
| 199 | // NOTE: The analog_out pad from the raven chip has been replaced by |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 200 | // 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. |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 203 | s8iom0s8_top_xres4v2 RSTB_pad ( |
| 204 | `ABUTMENT_PINS |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 205 | `ifndef TOP_ROUTING |
| 206 | .pad(RSTB), |
| 207 | `endif |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 208 | .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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 214 | .enable_h(vdd3v3), // Power-on-reset to the power-on-reset input?? |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 215 | .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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 220 | ); |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 221 | |
| 222 | // Corner cells (These are overlay cells; it is not clear what is normally |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 223 | // supposed to go under them.) |
| 224 | `ifndef TOP_ROUTING |
| 225 | s8iom0_corner_pad corner [3:0] ( |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 226 | .vssio(vss), |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 227 | .vddio(vdd3v3), |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 228 | .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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 234 | .vswitch(vdd3v3), |
| 235 | .vdda(vdd3v3), |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 236 | .vccd(vdd1v8), |
| 237 | .vcchib(vdd1v8) |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 238 | ); |
| 239 | `endif |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 240 | |
| 241 | mprj_io mprj_pads( |
Tim Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 242 | .vdd(vdd3v3), |
shalan | 0d14e6e | 2020-08-31 16:50:48 +0200 | [diff] [blame] | 243 | .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 Edwards | ef8312e | 2020-09-22 17:20:06 -0400 | [diff] [blame^] | 263 | endmodule |