dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 1 | ////////////////////////////////////////////////////////////////////////////// |
| 2 | // SPDX-FileCopyrightText: 2021 , Dinesh Annayya |
| 3 | // |
| 4 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | // you may not use this file except in compliance with the License. |
| 6 | // You may obtain a copy of the License at |
| 7 | // |
| 8 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | // |
| 10 | // Unless required by applicable law or agreed to in writing, software |
| 11 | // distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | // See the License for the specific language governing permissions and |
| 14 | // limitations under the License. |
| 15 | // SPDX-License-Identifier: Apache-2.0 |
| 16 | // SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org> |
| 17 | // |
| 18 | ////////////////////////////////////////////////////////////////////// |
| 19 | //// //// |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 20 | //// Pinmux //// |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 21 | //// //// |
| 22 | //// This file is part of the riscduino cores project //// |
| 23 | //// https://github.com/dineshannayya/riscduino.git //// |
| 24 | //// //// |
| 25 | //// Description //// |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 26 | //// Manages all the pin multiplexing //// |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 27 | //// //// |
| 28 | //// To Do: //// |
| 29 | //// nothing //// |
| 30 | //// //// |
| 31 | //// Author(s): //// |
| 32 | //// - Dinesh Annayya, dinesha@opencores.org //// |
| 33 | //// //// |
| 34 | //// Revision : //// |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 35 | //// 0.1 - 16th Aug 2022, Dinesh A //// |
| 36 | //// Seperated the pinmux from pinmux_top module //// |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 37 | //// 0.2 - 21th Aug 2022, Dinesh A //// |
| 38 | //// uart_master disable option added //// |
| 39 | //// 0.3 - 28th Aug 2022, Dinesh A //// |
| 40 | //// Due to caravel io[4:0] reserved on power up, we have//// |
| 41 | //// re-arrange the arduino pins from 5 onward //// |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 42 | ////////////////////////////////////////////////////////////////////// |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 43 | /************************************************ |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 44 | * Pin Mapping Arduino ATMGE CONFIG |
| 45 | * ATMEGA328 Port caravel Pin Mapping |
| 46 | * Pin-1 22 PC6/WS[0]/RESET* digital_io[5] |
| 47 | * Pin-2 0 PD0/WS[0]/RXD[0] digital_io[6] |
| 48 | * Pin-3 1 PD1/WS[0]/TXD[0] digital_io[7] |
| 49 | * Pin-4 2 PD2/WS[0]/RXD[1]/INT0 digital_io[8] |
| 50 | * Pin-5 3 PD3/WS[1]INT1/OC2B(PWM0) digital_io[9] |
| 51 | * Pin-6 4 PD4/WS[1]TXD[1] digital_io[10] |
| 52 | * Pin-7 VCC - |
| 53 | * Pin-8 GND - |
| 54 | * Pin-9 20 PB6/WS[1]/XTAL1/TOSC1 digital_io[11] |
| 55 | * Pin-10 21 PB7/WS[1]/XTAL2/TOSC2 digital_io[12] |
| 56 | * Pin-11 5 PD5/WS[2]/SS[3]/OC0B(PWM1)/T1 strap[0] digital_io[13] |
| 57 | * Pin-12 6 PD6/WS[2]/SS[2]/OC0A(PWM2)/AIN0 strap[1] digital_io[14]/analog_io[2] |
| 58 | * Pin-13 7 PD7/WS[2]/A1N1 strap[2] digital_io[15]/analog_io[3] |
| 59 | * Pin-14 8 PB0/WS[2]/CLKO/ICP1 strap[3] digital_io[16] |
| 60 | * Pin-15 9 PB1/WS[3]/SS[1]OC1A(PWM3) strap[4] digital_io[17] |
| 61 | * Pin-16 10 PB2/WS[3]/SS[0]/OC1B(PWM4) strap[5] digital_io[18] |
| 62 | * Pin-17 11 PB3/WS[3]/MOSI/OC2A(PWM5) strap[6] digital_io[19] |
| 63 | * Pin-18 12 PB4/WS[3]/MISO strap[7] digital_io[20] |
| 64 | * Pin-19 13 PB5/SCK digital_io[21] |
| 65 | * Pin-20 AVCC - |
| 66 | * Pin-21 AREF analog_io[10] |
| 67 | * Pin-22 GND - |
| 68 | * Pin-23 14 PC0/uartm_rxd/ADC0 digital_io[22]/analog_io[11] |
| 69 | * Pin-24 15 PC1/uartm_txd/ADC1 digital_io[23]/analog_io[12] |
| 70 | * Pin-25 16 PC2/usb_dp/ADC2 digital_io[24]/analog_io[13] |
| 71 | * Pin-26 17 PC3/usb_dn/ADC3 digital_io[25]/analog_io[14] |
| 72 | * Pin-27 18 PC4/ADC4/SDA digital_io[26]/analog_io[15] |
| 73 | * Pin-28 19 PC5/ADC5/SCL digital_io[27]/analog_io[16] |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 74 | * |
| 75 | * Additional Pad used for Externam ROM/RAM |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 76 | * sflash_sck digital_io[28] |
| 77 | * sflash_ss[0] strap[8] digital_io[29] |
| 78 | * sflash_ss[1] strap[9] digital_io[30] |
| 79 | * sflash_ss[2] strap[10] digital_io[31] |
| 80 | * sflash_ss[3] strap[11] digital_io[32] |
| 81 | * sflash_io0 strap[12] digital_io[33] |
| 82 | * sflash_io1 strap[13] digital_io[34] |
| 83 | * sflash_io2 strap[14] digital_io[35] |
| 84 | * sflash_io3 strap[15] digital_io[36] |
| 85 | * dbg_clk_mon digital_io[37] |
| 86 | * These port are not available at power up |
| 87 | * PA0 digital_io[0] |
| 88 | * PA1 digital_io[1] |
| 89 | * PA2 digital_io[2] |
| 90 | * PA3 digital_io[3] |
| 91 | * PA4 digital_io[4] |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 92 | **************************************************************** |
| 93 | * Pin-1 RESET is not supported as there is no suppport for fuse config |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 94 | |
| 95 | |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 96 | **************/ |
| 97 | |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 98 | module pinmux ( |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 99 | input logic cfg_strap_pad_ctrl , // 1 - Keep the Pad in input direction |
| 100 | output logic [15:0] pad_strap_in , // Strap value |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 101 | // Digital IO |
| 102 | output logic [37:0] digital_io_out , |
| 103 | output logic [37:0] digital_io_oen , |
| 104 | input logic [37:0] digital_io_in , |
| 105 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 106 | output logic xtal_clk , |
| 107 | |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 108 | // Config |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 109 | input logic [31:0] cfg_gpio_out_type ,// GPIO Type, 1 - WS_281X port |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 110 | input logic [31:0] cfg_gpio_dir_sel , |
| 111 | input logic [31:0] cfg_multi_func_sel , |
| 112 | |
| 113 | output logic[5:0] cfg_pwm_enb , |
| 114 | input logic [5:0] pwm_wfm , |
| 115 | output logic [1:0] ext_intr_in , // External PAD level interrupt |
| 116 | output logic [31:0] pad_gpio_in , // GPIO data input from PAD |
| 117 | input logic [31:0] pad_gpio_out , // GPIO Data out towards PAD |
| 118 | |
| 119 | // SFLASH I/F |
| 120 | input logic sflash_sck , |
| 121 | input logic [3:0] sflash_ss , |
| 122 | input logic [3:0] sflash_oen , |
| 123 | input logic [3:0] sflash_do , |
| 124 | output logic [3:0] sflash_di , |
| 125 | |
| 126 | // SSRAM I/F - Temp Masked |
| 127 | //input logic ssram_sck, |
| 128 | //input logic ssram_ss, |
| 129 | //input logic [3:0] ssram_oen, |
| 130 | //input logic [3:0] ssram_do, |
| 131 | //output logic [3:0] ssram_di, |
| 132 | |
| 133 | // USB I/F |
| 134 | input logic usb_dp_o, |
| 135 | input logic usb_dn_o, |
| 136 | input logic usb_oen, |
| 137 | output logic usb_dp_i, |
| 138 | output logic usb_dn_i, |
| 139 | |
| 140 | // UART I/F |
| 141 | input logic [1:0] uart_txd, |
| 142 | output logic [1:0] uart_rxd, |
| 143 | |
| 144 | // I2CM I/F |
| 145 | input logic i2cm_clk_o, |
| 146 | output logic i2cm_clk_i, |
| 147 | input logic i2cm_clk_oen, |
| 148 | input logic i2cm_data_oen, |
| 149 | input logic i2cm_data_o, |
| 150 | output logic i2cm_data_i, |
| 151 | |
| 152 | // SPI MASTER |
| 153 | input logic spim_sck, |
| 154 | input logic [3:0] spim_ssn, |
| 155 | input logic spim_miso, |
| 156 | output logic spim_mosi, |
| 157 | |
| 158 | // SPI SLAVE |
| 159 | output logic spis_sck, |
| 160 | output logic spis_ssn, |
| 161 | input logic spis_miso, |
| 162 | output logic spis_mosi, |
| 163 | |
| 164 | // UART MASTER I/F |
| 165 | output logic uartm_rxd , |
| 166 | input logic uartm_txd , |
| 167 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 168 | // WS_281X TXD Port |
| 169 | input logic [3:0] ws_txd, |
| 170 | |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 171 | input logic dbg_clk_mon |
| 172 | |
| 173 | ); |
| 174 | |
| 175 | |
| 176 | |
| 177 | reg [7:0] port_a_in; // PORT A Data In |
| 178 | reg [7:0] port_b_in; // PORT B Data In |
| 179 | reg [7:0] port_c_in; // PORT C Data In |
| 180 | reg [7:0] port_d_in; // PORT D Data In |
| 181 | |
| 182 | wire [7:0] port_a_out; // PORT A Data Out |
| 183 | wire [7:0] port_b_out; // PORT B Data Out |
| 184 | wire [7:0] port_c_out; // PORT C Data Out |
| 185 | wire [7:0] port_d_out; // PORT D Data Out |
| 186 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 187 | //-------------------------------------------------- |
| 188 | // Strap Pin Mapping |
| 189 | //-------------------------------------------------- |
| 190 | assign pad_strap_in = {digital_io_in[36:29],digital_io_in[20:13] }; |
| 191 | |
| 192 | assign xtal_clk = digital_io_in[11]; |
| 193 | |
dineshannayya | 9f6a151 | 2022-08-18 14:11:43 +0530 | [diff] [blame] | 194 | // GPIO to PORT Mapping |
| 195 | assign pad_gpio_in[7:0] = port_a_in; |
| 196 | assign pad_gpio_in[15:8] = port_b_in; |
| 197 | assign pad_gpio_in[23:16] = port_c_in; |
| 198 | assign pad_gpio_in[31:24] = port_d_in; |
| 199 | |
| 200 | assign port_a_out = pad_gpio_out[7:0]; |
| 201 | assign port_b_out = pad_gpio_out[15:8]; |
| 202 | assign port_c_out = pad_gpio_out[23:16]; |
| 203 | assign port_d_out = pad_gpio_out[31:24]; |
| 204 | |
| 205 | |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 206 | assign cfg_pwm_enb = cfg_multi_func_sel[5:0]; |
| 207 | wire [1:0] cfg_int_enb = cfg_multi_func_sel[7:6]; |
dineshannayya | fdfbe7b | 2022-04-07 21:28:10 +0530 | [diff] [blame] | 208 | wire [1:0] cfg_uart_enb = cfg_multi_func_sel[9:8]; |
dineshannayya | 0080c95 | 2022-07-08 22:49:12 +0530 | [diff] [blame] | 209 | wire cfg_spim_enb = cfg_multi_func_sel[10]; |
| 210 | wire [3:0] cfg_spim_cs_enb = cfg_multi_func_sel[14:11]; |
| 211 | wire cfg_i2cm_enb = cfg_multi_func_sel[15]; |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 212 | wire cfg_usb_enb = cfg_multi_func_sel[16]; |
| 213 | wire cfg_muart_enb = cfg_multi_func_sel[31]; // 1 - uart master enable, |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 214 | |
| 215 | wire [7:0] cfg_port_a_dir_sel = cfg_gpio_dir_sel[7:0]; |
| 216 | wire [7:0] cfg_port_b_dir_sel = cfg_gpio_dir_sel[15:8]; |
| 217 | wire [7:0] cfg_port_c_dir_sel = cfg_gpio_dir_sel[23:16]; |
| 218 | wire [7:0] cfg_port_d_dir_sel = cfg_gpio_dir_sel[31:24]; |
| 219 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 220 | wire [7:0] cfg_port_a_port_type = cfg_gpio_out_type[7:0]; |
| 221 | wire [7:0] cfg_port_b_port_type = cfg_gpio_out_type[15:8]; |
| 222 | wire [7:0] cfg_port_c_port_type = cfg_gpio_out_type[23:16]; |
| 223 | wire [7:0] cfg_port_d_port_type = cfg_gpio_out_type[31:24]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 224 | |
dineshannayya | 9ea4b5b | 2022-07-21 08:15:06 +0530 | [diff] [blame] | 225 | // This logic to create spi slave interface |
| 226 | logic pin_resetn,spis_boot; |
| 227 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 228 | // On Reset internal SPI Master is disabled, If cfg_spim_enb = 0, then we are in |
dineshannayya | 9ea4b5b | 2022-07-21 08:15:06 +0530 | [diff] [blame] | 229 | // SPIS Boot Mode |
| 230 | assign spis_boot = (cfg_spim_enb ) ? 1'b0: !pin_resetn; |
| 231 | assign spis_ssn = (spis_boot ) ? pin_resetn : 1'b1; |
| 232 | |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 233 | // datain selection |
| 234 | always_comb begin |
| 235 | port_a_in = 'h0; |
| 236 | port_b_in = 'h0; |
| 237 | port_c_in = 'h0; |
| 238 | port_d_in = 'h0; |
| 239 | uart_rxd = 'h0; |
| 240 | ext_intr_in= 'h0; |
| 241 | spim_mosi = 'h0; |
| 242 | i2cm_data_i= 'h0; |
| 243 | i2cm_clk_i = 'h0; |
| 244 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 245 | //Pin-1 PC6/RESET* digital_io[5] |
| 246 | port_c_in[6] = digital_io_in[5]; |
| 247 | pin_resetn = digital_io_in[5]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 248 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 249 | //Pin-2 PD0/RXD[0] digital_io[6] |
| 250 | port_d_in[0] = digital_io_in[6]; |
| 251 | if(cfg_uart_enb[0]) uart_rxd[0] = digital_io_in[6]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 252 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 253 | //Pin-3 PD1/TXD[0] digital_io[7] |
| 254 | port_d_in[1] = digital_io_in[7]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 255 | |
| 256 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 257 | //Pin-4 PD2/RXD[1]/INT0 digital_io[8] |
| 258 | port_d_in[2] = digital_io_in[8]; |
| 259 | if(cfg_uart_enb[1]) uart_rxd[1] = digital_io_in[8]; |
| 260 | else if(cfg_int_enb[0]) ext_intr_in[0] = digital_io_in[8]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 261 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 262 | //Pin-5 PD3/INT1/OC2B(PWM0) digital_io[9] |
| 263 | port_d_in[3] = digital_io_in[9]; |
| 264 | if(cfg_int_enb[1]) ext_intr_in[1] = digital_io_in[9]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 265 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 266 | //Pin-6 PD4/TXD[1] digital_io[10] |
| 267 | port_d_in[4] = digital_io_in[10]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 268 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 269 | //Pin-9 PB6/XTAL1/TOSC1 digital_io[11] |
| 270 | port_b_in[6] = digital_io_in[11]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 271 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 272 | // Pin-10 PB7/XTAL2/TOSC2 digital_io[12] |
| 273 | port_b_in[7] = digital_io_in[12]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 274 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 275 | //Pin-11 PD5/OC0B(PWM1)/T1 digital_io[13] |
| 276 | port_d_in[5] = digital_io_in[13]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 277 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 278 | //Pin-12 PD6/OC0A(PWM2)/AIN0 digital_io[14] /analog_io[2] |
| 279 | port_d_in[6] = digital_io_in[14]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 280 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 281 | //Pin-13 PD7/A1N1 digital_io[15]/analog_io[3] |
| 282 | port_d_in[7] = digital_io_in[15]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 283 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 284 | //Pin-14 PB0/CLKO/ICP1 digital_io[16] |
| 285 | port_b_in[0] = digital_io_in[16]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 286 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 287 | //Pin-15 PB1/OC1A(PWM3) digital_io[17] |
| 288 | port_b_in[1] = digital_io_in[17]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 289 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 290 | //Pin-16 PB2/SS/OC1B(PWM4) digital_io[18] |
| 291 | port_b_in[2] = digital_io_in[18]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 292 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 293 | //Pin-17 PB3/MOSI/OC2A(PWM5) digital_io[19] |
| 294 | port_b_in[3] = digital_io_in[19]; |
| 295 | if(cfg_spim_enb) spim_mosi = digital_io_in[19]; // SPIM MOSI (Input) = SPIS MISO (Output) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 296 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 297 | //Pin-18 PB4/MISO digital_io[20] |
| 298 | port_b_in[4] = digital_io_in[20]; |
| 299 | spis_mosi = (spis_boot) ? digital_io_in[20] : 1'b0; // SPIM MISO (Output) = SPIS MOSI (Input) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 300 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 301 | //Pin-19 PB5/SCK digital_io[21] |
| 302 | port_b_in[5]= digital_io_in[21]; |
| 303 | spis_sck = (spis_boot) ? digital_io_in[21] : 1'b1; // SPIM SCK (Output) = SPIS SCK (Input) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 304 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 305 | //Pin-23 PC0/ADC0 digital_io[22]/uartm_rxd/analog_io[11] |
| 306 | uartm_rxd = (cfg_muart_enb) ? digital_io_in[22]: 1'b1; |
| 307 | port_c_in[0] = digital_io_in[22]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 308 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 309 | //Pin-24 PC1/ADC1 digital_io[23]/uartm_txd/analog_io[12] |
| 310 | port_c_in[1] = digital_io_in[23]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 311 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 312 | //Pin-25 PC2/ADC2 digital_io[24]/usb_dp/analog_io[13] |
| 313 | usb_dp_i = (cfg_usb_enb) ? digital_io_in[24] : 1'b1; |
| 314 | port_c_in[2] = digital_io_in[24]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 315 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 316 | //Pin-26 PC3/ADC3 digital_io[25]/usb_dn/analog_io[14] |
| 317 | usb_dn_i = (cfg_usb_enb) ? digital_io_in[25] : 1'b1; |
| 318 | port_c_in[3] = digital_io_in[25]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 319 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 320 | //Pin-27 PC4/ADC4/SDA digital_io[26]/analog_io[15] |
| 321 | port_c_in[4] = digital_io_in[26]; |
| 322 | if(cfg_i2cm_enb) i2cm_data_i = digital_io_in[26]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 323 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 324 | //Pin-28 PC5/ADC5/SCL digital_io[27]/analog_io[16] |
| 325 | port_c_in[5] = digital_io_in[27]; |
| 326 | if(cfg_i2cm_enb) i2cm_clk_i = digital_io_in[27]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 327 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 328 | sflash_di[0] = digital_io_in[33]; |
| 329 | sflash_di[1] = digital_io_in[34]; |
| 330 | sflash_di[2] = digital_io_in[35]; |
| 331 | sflash_di[3] = digital_io_in[36]; |
| 332 | |
| 333 | port_a_in[0] = digital_io_in[0]; |
| 334 | port_a_in[1] = digital_io_in[1]; |
| 335 | port_a_in[2] = digital_io_in[2]; |
| 336 | port_a_in[3] = digital_io_in[3]; |
| 337 | port_a_in[4] = digital_io_in[4]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 338 | |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 339 | end |
| 340 | |
| 341 | // dataout selection |
| 342 | always_comb begin |
| 343 | digital_io_out = 'h0; |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 344 | //Pin-1 PC6/WS[0]/RESET* digital_io[5] |
| 345 | if(cfg_port_c_port_type[6]) digital_io_out[5] = ws_txd[0]; |
| 346 | else if(cfg_port_c_dir_sel[6]) digital_io_out[5] = port_c_out[6]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 347 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 348 | //Pin-2 PD0/WS[0]/RXD[0] digital_io[6] |
| 349 | if(cfg_port_d_port_type[0]) digital_io_out[6] = ws_txd[0]; |
| 350 | else if(cfg_port_d_dir_sel[0]) digital_io_out[6] = port_d_out[0]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 351 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 352 | //Pin-3 PD1/WS[0]/TXD[0] digital_io[7] |
| 353 | if (cfg_uart_enb[0]) digital_io_out[7] = uart_txd[0]; |
| 354 | else if(cfg_port_d_port_type[1]) digital_io_out[7] = ws_txd[0]; |
| 355 | else if(cfg_port_d_dir_sel[1]) digital_io_out[7] = port_d_out[1]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 356 | |
| 357 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 358 | //Pin-4 PD2/WS[0]/RXD[1]/INT0 digital_io[8] |
| 359 | if(cfg_port_d_port_type[2]) digital_io_out[8] = ws_txd[0]; |
| 360 | else if(cfg_port_d_dir_sel[2]) digital_io_out[8] = port_d_out[2]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 361 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 362 | //Pin-5 PD3/WS[1]INT1/OC2B(PWM0) digital_io[9] |
| 363 | if(cfg_pwm_enb[0]) digital_io_out[9] = pwm_wfm[0]; |
| 364 | else if(cfg_port_d_port_type[3])digital_io_out[9] = ws_txd[1]; |
| 365 | else if(cfg_port_d_dir_sel[3]) digital_io_out[9] = port_d_out[3]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 366 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 367 | //Pin-6 PD4/WS[1]/TXD[1] digital_io[10] |
| 368 | if (cfg_uart_enb[1]) digital_io_out[10] = uart_txd[1]; |
| 369 | else if(cfg_port_d_port_type[4]) digital_io_out[10] = ws_txd[1]; |
| 370 | else if(cfg_port_d_dir_sel[4]) digital_io_out[10] = port_d_out[4]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 371 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 372 | //Pin-9 PB6/XTAL1/WS[1]/TOSC1 digital_io[11] |
| 373 | if(cfg_port_b_port_type[6]) digital_io_out[11] = ws_txd[1]; |
| 374 | else if(cfg_port_b_dir_sel[6]) digital_io_out[11] = port_b_out[6]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 375 | |
| 376 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 377 | // Pin-10 PB7/XTAL2/WS[1]/TOSC2 digital_io[12] |
| 378 | if(cfg_port_b_port_type[7]) digital_io_out[12] = ws_txd[1]; |
| 379 | else if(cfg_port_b_dir_sel[7]) digital_io_out[12] = port_b_out[7]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 380 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 381 | //Pin-11 PD5/SS[3]/WS[2]/OC0B(PWM1)/T1 digital_io[13] |
| 382 | if(cfg_pwm_enb[1]) digital_io_out[13] = pwm_wfm[1]; |
| 383 | else if(cfg_spim_cs_enb[3]) digital_io_out[13] = spim_ssn[3]; |
| 384 | else if(cfg_port_d_port_type[5])digital_io_out[13] = ws_txd[2]; |
| 385 | else if(cfg_port_d_dir_sel[5]) digital_io_out[13] = port_d_out[5]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 386 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 387 | //Pin-12 PD6/SS[2]/WS[2]/OC0A(PWM2)/AIN0 digital_io[14] /analog_io[2] |
| 388 | if(cfg_pwm_enb[2]) digital_io_out[14] = pwm_wfm[2]; |
| 389 | else if(cfg_spim_cs_enb[2]) digital_io_out[14] = spim_ssn[2]; |
| 390 | else if(cfg_port_d_port_type[6])digital_io_out[14] = ws_txd[2]; |
| 391 | else if(cfg_port_d_dir_sel[6]) digital_io_out[14] = port_d_out[6]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 392 | |
| 393 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 394 | //Pin-13 PD7/A1N1/WS[2] digital_io[15]/analog_io[3] |
| 395 | if(cfg_port_d_port_type[7]) digital_io_out[15] = ws_txd[2]; |
| 396 | else if(cfg_port_d_dir_sel[7]) digital_io_out[15] = port_d_out[7]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 397 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 398 | //Pin-14 PB0/CLKO/WS[2]/ICP1 digital_io[16] |
| 399 | if(cfg_port_b_port_type[0]) digital_io_out[16] = ws_txd[2]; |
| 400 | else if(cfg_port_b_dir_sel[0]) digital_io_out[16] = port_b_out[0]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 401 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 402 | //Pin-15 PB1/SS[1]/WS[3]/OC1A(PWM3) digital_io[17] |
| 403 | if(cfg_pwm_enb[3]) digital_io_out[17] = pwm_wfm[3]; |
| 404 | else if(cfg_spim_cs_enb[1]) digital_io_out[17] = spim_ssn[1]; |
| 405 | else if(cfg_port_b_port_type[1])digital_io_out[17] = ws_txd[3]; |
| 406 | else if(cfg_port_b_dir_sel[1]) digital_io_out[17] = port_b_out[1]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 407 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 408 | //Pin-16 PB2/SS[0]/WS[3]/OC1B(PWM4) digital_io[18] |
| 409 | if(cfg_pwm_enb[4]) digital_io_out[18] = pwm_wfm[4]; |
| 410 | else if(cfg_spim_cs_enb[0]) digital_io_out[18] = spim_ssn[0]; |
| 411 | else if(cfg_port_b_port_type[2])digital_io_out[18] = ws_txd[3]; |
| 412 | else if(cfg_port_b_dir_sel[2]) digital_io_out[18] = port_b_out[2]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 413 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 414 | //Pin-17 PB3/MOSI/WS[3]/OC2A(PWM5) digital_io[19] |
| 415 | if(cfg_pwm_enb[5]) digital_io_out[19] = pwm_wfm[5]; |
| 416 | else if(cfg_port_b_port_type[3]) digital_io_out[19] = ws_txd[3]; |
| 417 | else if(cfg_port_b_dir_sel[3]) digital_io_out[19] = port_b_out[3]; |
| 418 | else if(spis_boot) digital_io_out[19] = spis_miso; // SPIM MOSI (Input) = SPIS MISO (Output) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 419 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 420 | //Pin-18 PB4/WS[3]/MISO digital_io[20] |
| 421 | if(cfg_spim_enb) digital_io_out[20] = spim_miso; // SPIM MISO (Output) = SPIS MOSI (Input) |
| 422 | else if(cfg_port_b_port_type[4])digital_io_out[20] = ws_txd[3]; |
| 423 | else if(cfg_port_b_dir_sel[4]) digital_io_out[20] = port_b_out[4]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 424 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 425 | //Pin-19 PB5/SCK digital_io[21] |
| 426 | if(cfg_spim_enb) digital_io_out[21] = spim_sck; // SPIM SCK (Output) = SPIS SCK (Input) |
| 427 | else if(cfg_port_b_dir_sel[5]) digital_io_out[21] = port_b_out[5]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 428 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 429 | //Pin-23 PC0/MRXD/ADC0 digital_io[22]/analog_io[11] |
| 430 | if(cfg_muart_enb) digital_io_out[22] = 1'b1; |
| 431 | else if(cfg_port_c_dir_sel[0]) digital_io_out[22] = port_c_out[0]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 432 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 433 | //Pin-24 PC1/MTXD/ADC1 digital_io[23]/analog_io[12] |
| 434 | if(cfg_muart_enb) digital_io_out[23] = uartm_txd; |
| 435 | else if(cfg_port_c_dir_sel[1]) digital_io_out[23] = port_c_out[1]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 436 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 437 | //Pin-25 PC2/USB_DP/ADC2 digital_io[24]/analog_io[13] |
| 438 | if(cfg_usb_enb) digital_io_out[24] = usb_dp_o; |
| 439 | else if(cfg_port_c_dir_sel[2]) digital_io_out[24] = port_c_out[2]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 440 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 441 | //Pin-26 PC3/USB_DN/ADC3 digital_io[25]/analog_io[14] |
| 442 | if(cfg_usb_enb) digital_io_out[25] = usb_dn_o; |
| 443 | if(cfg_port_c_dir_sel[3]) digital_io_out[25] = port_c_out[3]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 444 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 445 | //Pin-27 PC4/ADC4/SDA digital_io[26]/analog_io[15] |
| 446 | if(cfg_i2cm_enb) digital_io_out[26] = i2cm_data_o; |
| 447 | else if(cfg_port_c_dir_sel[4]) digital_io_out[26] = port_c_out[4]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 448 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 449 | //Pin-28 PC5/ADC5/SCL digital_io[27]/analog_io[16] |
| 450 | if(cfg_i2cm_enb) digital_io_out[27] = i2cm_clk_o; |
| 451 | else if(cfg_port_c_dir_sel[5]) digital_io_out[27] = port_c_out[5]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 452 | |
| 453 | // Serial Flash |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 454 | digital_io_out[28] = sflash_sck ; |
| 455 | digital_io_out[29] = sflash_ss[0] ; |
| 456 | digital_io_out[30] = sflash_ss[1] ; |
| 457 | digital_io_out[31] = sflash_ss[2] ; |
| 458 | digital_io_out[32] = sflash_ss[3] ; |
| 459 | digital_io_out[33] = sflash_do[0] ; |
| 460 | digital_io_out[34] = sflash_do[1] ; |
| 461 | digital_io_out[35] = sflash_do[2] ; |
| 462 | digital_io_out[36] = sflash_do[3] ; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 463 | |
dineshannayya | 9be2972 | 2022-05-29 19:09:57 +0530 | [diff] [blame] | 464 | // dbg_clk_mon - Pll clock output monitor |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 465 | digital_io_out[37] = dbg_clk_mon; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 466 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 467 | digital_io_out[0] = port_a_out[0] ; |
| 468 | digital_io_out[1] = port_a_out[1] ; |
| 469 | digital_io_out[2] = port_a_out[2] ; |
| 470 | digital_io_out[3] = port_a_out[3] ; |
| 471 | digital_io_out[4] = port_a_out[4] ; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 472 | end |
| 473 | |
| 474 | // dataoen selection |
| 475 | always_comb begin |
| 476 | digital_io_oen = 38'h3F_FFFF_FFFF; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 477 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 478 | //Pin-1 PC6/WS[0]/RESET* digital_io[5] |
| 479 | if(cfg_port_c_port_type[6]) digital_io_oen[5] = 1'b1; |
| 480 | else if(cfg_port_c_dir_sel[6]) digital_io_oen[5] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 481 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 482 | //Pin-2 PD0/WS[0]/RXD[0] digital_io[6] |
| 483 | if (cfg_uart_enb[0]) digital_io_oen[6] = 1'b1; |
| 484 | else if(cfg_port_d_port_type[0])digital_io_oen[6] = 1'b1; |
| 485 | else if(cfg_port_d_dir_sel[0]) digital_io_oen[6] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 486 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 487 | //Pin-3 PD1/WS[0]/TXD[0] digital_io[7] |
| 488 | if (cfg_uart_enb[0]) digital_io_oen[7] = 1'b0; |
| 489 | else if(cfg_port_d_port_type[1])digital_io_oen[7] = 1'b1; |
| 490 | else if(cfg_port_d_dir_sel[1]) digital_io_oen[7] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 491 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 492 | //Pin-4 PD2/WS[0]/RXD[1]/INT0 digital_io[8] |
| 493 | if(cfg_int_enb[0]) digital_io_oen[8] = 1'b1; |
| 494 | else if(cfg_port_d_port_type[2])digital_io_oen[8] = 1'b1; |
| 495 | else if(cfg_port_d_dir_sel[2]) digital_io_oen[8] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 496 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 497 | //Pin-5 PD3/WS[1]/INT1/OC2B(PWM0) digital_io[9] |
| 498 | if(cfg_pwm_enb[0]) digital_io_oen[9] = 1'b0; |
| 499 | else if(cfg_int_enb[1]) digital_io_oen[9] = 1'b1; |
| 500 | else if(cfg_port_d_port_type[3])digital_io_oen[9] = 1'b1; |
| 501 | else if(cfg_port_d_dir_sel[3]) digital_io_oen[9] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 502 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 503 | //Pin-6 PD4/WS[1]/TXD[1] digital_io[10] |
| 504 | if (cfg_uart_enb[1]) digital_io_oen[10] = 1'b0; |
| 505 | else if(cfg_port_d_port_type[4])digital_io_oen[10] = 1'b1; |
| 506 | else if(cfg_port_d_dir_sel[4]) digital_io_oen[10] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 507 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 508 | //Pin-9 PB6/WS[1]/XTAL1/TOSC1 digital_io[11] |
| 509 | if (cfg_uart_enb[1]) digital_io_oen[11] = 1'b1; |
| 510 | else if(cfg_port_b_port_type[6]) digital_io_oen[11] = 1'b1; |
| 511 | else if(cfg_port_b_dir_sel[6]) digital_io_oen[11] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 512 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 513 | // Pin-10 PB7/WS[1]/XTAL2/TOSC2 digital_io[12] |
| 514 | if(cfg_port_b_port_type[7]) digital_io_oen[12] = 1'b1; |
| 515 | else if(cfg_port_b_dir_sel[7]) digital_io_oen[12] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 516 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 517 | //Pin-11 PD5/WS[2]/SS[3]/OC0B(PWM1)/T1 digital_io[13] |
| 518 | if(cfg_strap_pad_ctrl) digital_io_oen[13] = 1'b1; |
| 519 | else if(cfg_pwm_enb[1]) digital_io_oen[13] = 1'b0; |
| 520 | else if(cfg_spim_cs_enb[3]) digital_io_oen[13] = 1'b0; |
| 521 | else if(cfg_port_d_port_type[5])digital_io_oen[13] = 1'b1; |
| 522 | else if(cfg_port_d_dir_sel[5]) digital_io_oen[13] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 523 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 524 | //Pin-12 PD6/SS[2]/OC0A(PWM2)/AIN0 digital_io[14] /analog_io[2] |
| 525 | if(cfg_strap_pad_ctrl) digital_io_oen[14] = 1'b1; |
| 526 | else if(cfg_pwm_enb[2]) digital_io_oen[14] = 1'b0; |
| 527 | else if(cfg_spim_cs_enb[2]) digital_io_oen[14] = 1'b0; |
| 528 | else if(cfg_port_d_port_type[6])digital_io_oen[14] = 1'b1; |
| 529 | else if(cfg_port_d_dir_sel[6]) digital_io_oen[14] = 1'b0; |
| 530 | |
| 531 | //Pin-13 PD7/WS[2]/A1N1 digital_io[15]/analog_io[3] |
| 532 | if(cfg_strap_pad_ctrl) digital_io_oen[15] = 1'b1; |
| 533 | else if(cfg_port_d_port_type[7])digital_io_oen[15] = 1'b1; |
| 534 | else if(cfg_port_d_dir_sel[7]) digital_io_oen[15] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 535 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 536 | //Pin-14 PB0/WS[2]/CLKO/ICP1 digital_io[16] |
| 537 | if(cfg_strap_pad_ctrl) digital_io_oen[16] = 1'b1; |
| 538 | else if(cfg_port_b_port_type[0])digital_io_oen[16] = 1'b1; |
| 539 | else if(cfg_port_b_dir_sel[0]) digital_io_oen[16] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 540 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 541 | //Pin-15 PB1/WS[3]/SS[1]/OC1A(PWM3) digital_io[17] |
| 542 | if(cfg_strap_pad_ctrl) digital_io_oen[17] = 1'b1; |
| 543 | else if(cfg_pwm_enb[3]) digital_io_oen[17] = 1'b0; |
| 544 | else if(cfg_spim_cs_enb[1]) digital_io_oen[17] = 1'b0; |
| 545 | else if(cfg_port_b_port_type[1])digital_io_oen[17] = 1'b1; |
| 546 | else if(cfg_port_b_dir_sel[1]) digital_io_oen[17] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 547 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 548 | //Pin-16 PB2/WS[3]/SS[0]/OC1B(PWM4) digital_io[18] |
| 549 | if(cfg_strap_pad_ctrl) digital_io_oen[18] = 1'b1; |
| 550 | else if(cfg_pwm_enb[4]) digital_io_oen[18] = 1'b0; |
| 551 | else if(cfg_spim_cs_enb[0]) digital_io_oen[18] = 1'b0; |
| 552 | else if(cfg_port_b_port_type[2])digital_io_oen[18] = 1'b1; |
| 553 | else if(cfg_port_b_dir_sel[2]) digital_io_oen[18] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 554 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 555 | //Pin-17 PB3/WS[3]/MOSI/OC2A(PWM5) digital_io[19] |
| 556 | if(cfg_strap_pad_ctrl) digital_io_oen[19] = 1'b1; |
| 557 | else if(cfg_spim_enb) digital_io_oen[19] = 1'b1; // SPIM MOSI (Input) |
| 558 | else if(cfg_pwm_enb[5]) digital_io_oen[19] = 1'b0; |
| 559 | else if(cfg_port_b_port_type[3])digital_io_oen[19] = 1'b1; |
| 560 | else if(cfg_port_b_dir_sel[3]) digital_io_oen[19] = 1'b0; |
| 561 | else if(spis_boot) digital_io_oen[19] = 1'b0; // SPIS MISO (Output) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 562 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 563 | //Pin-18 PB4/WS[3]/MISO digital_io[20] |
| 564 | if(cfg_strap_pad_ctrl) digital_io_oen[20] = 1'b1; |
| 565 | else if(cfg_spim_enb) digital_io_oen[20] = 1'b0; // SPIM MISO (Output) |
| 566 | else if(cfg_port_b_port_type[4])digital_io_oen[20] = 1'b1; |
| 567 | else if(cfg_port_b_dir_sel[4]) digital_io_oen[20] = 1'b0; |
| 568 | else if(spis_boot) digital_io_oen[20] = 1'b1; // SPIS MOSI (Input) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 569 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 570 | //Pin-19 PB5/SCK digital_io[21] |
| 571 | if(cfg_spim_enb) digital_io_oen[21] = 1'b0; // SPIM SCK (Output) |
| 572 | else if(cfg_port_b_dir_sel[5]) digital_io_oen[21] = 1'b0; |
| 573 | else if(spis_boot) digital_io_oen[21] = 1'b1; // SPIS SCK (Input) |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 574 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 575 | //Pin-23 PC0/MRXD/ADC0 digital_io[22]/analog_io[11] |
| 576 | if(cfg_muart_enb) digital_io_oen[22] = 1'b1; |
| 577 | else if(cfg_port_c_dir_sel[0]) digital_io_oen[22] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 578 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 579 | //Pin-24 PC1/MTXD/ADC1 digital_io[23]/analog_io[12] |
| 580 | if(cfg_muart_enb) digital_io_oen[23] = 1'b0; |
| 581 | if(cfg_port_c_dir_sel[1]) digital_io_oen[23] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 582 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 583 | //Pin-25 PC2/USB_DP/ADC2 digital_io[24]/analog_io[13] |
| 584 | if(cfg_usb_enb) digital_io_oen[24] = usb_oen; |
| 585 | else if(cfg_port_c_dir_sel[2]) digital_io_oen[24] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 586 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 587 | //Pin-26 PC3/USB_DN/ADC3 digital_io[25]/analog_io[14] |
| 588 | if(cfg_usb_enb) digital_io_oen[25] = usb_oen; |
| 589 | else if(cfg_port_c_dir_sel[3]) digital_io_oen[25] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 590 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 591 | //Pin-27 PC4/ADC4/SDA digital_io[26]/analog_io[15] |
| 592 | if(cfg_i2cm_enb) digital_io_oen[26] = i2cm_data_oen; |
| 593 | else if(cfg_port_c_dir_sel[4]) digital_io_oen[26] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 594 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 595 | //Pin-28 PC5/ADC5/SCL digital_io[27]/analog_io[16] |
| 596 | if(cfg_i2cm_enb) digital_io_oen[27] = i2cm_clk_oen; |
| 597 | else if(cfg_port_c_dir_sel[5]) digital_io_oen[27] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 598 | |
| 599 | // Serial Flash |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 600 | if(cfg_strap_pad_ctrl) digital_io_oen[28] = 1'b1; |
| 601 | else digital_io_oen[28] = 1'b0; |
| 602 | if(cfg_strap_pad_ctrl) digital_io_oen[29] = 1'b1; |
| 603 | else digital_io_oen[29] = 1'b0; |
| 604 | if(cfg_strap_pad_ctrl) digital_io_oen[30] = 1'b1; |
| 605 | else digital_io_oen[30] = 1'b0; |
| 606 | if(cfg_strap_pad_ctrl) digital_io_oen[31] = 1'b1; |
| 607 | else digital_io_oen[31] = 1'b0; |
| 608 | if(cfg_strap_pad_ctrl) digital_io_oen[32] = 1'b1; |
| 609 | else digital_io_oen[32] = 1'b0; |
| 610 | if(cfg_strap_pad_ctrl) digital_io_oen[33] = 1'b1; |
| 611 | else digital_io_oen[33] = sflash_oen[0]; |
| 612 | if(cfg_strap_pad_ctrl) digital_io_oen[34] = 1'b1; |
| 613 | else digital_io_oen[34] = sflash_oen[1]; |
| 614 | if(cfg_strap_pad_ctrl) digital_io_oen[35] = 1'b1; |
| 615 | else digital_io_oen[35] = sflash_oen[2]; |
| 616 | if(cfg_strap_pad_ctrl) digital_io_oen[36] = 1'b1; |
| 617 | else digital_io_oen[36] = sflash_oen[3]; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 618 | |
dineshannayya | 9be2972 | 2022-05-29 19:09:57 +0530 | [diff] [blame] | 619 | // dbg_clk_mon |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 620 | if(cfg_strap_pad_ctrl) digital_io_oen[37] = 1'b1; |
| 621 | else digital_io_oen[37] = 1'b0 ; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 622 | |
dineshannayya | 260499b | 2022-09-03 21:17:46 +0530 | [diff] [blame] | 623 | if(cfg_port_a_dir_sel[0]) digital_io_oen[0] = 1'b0; |
| 624 | if(cfg_port_a_dir_sel[1]) digital_io_oen[1] = 1'b0; |
| 625 | if(cfg_port_a_dir_sel[2]) digital_io_oen[2] = 1'b0; |
| 626 | if(cfg_port_a_dir_sel[3]) digital_io_oen[3] = 1'b0; |
| 627 | if(cfg_port_a_dir_sel[4]) digital_io_oen[4] = 1'b0; |
dineshannayya | 62e4632 | 2022-02-15 14:19:56 +0530 | [diff] [blame] | 628 | end |
| 629 | |
| 630 | |
| 631 | endmodule |
| 632 | |
| 633 | |