diff --git a/scripts/README.md b/scripts/README.md index 519c9c66..9a126ab1 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -9,6 +9,7 @@ ```` export CARAVEL_ROOT= export MCW_ROOT= +export UPRJ_ROOT= export PDK_ROOT= export PDK= @@ -17,30 +18,36 @@ python3 signoff_automation.py [-options] usage: signoff_automation.py [-h] [-d] [-l] [-v] [-rtl] [-gl] [-sdf] [-iv] [-sta] [-a] optional arguments: + -h, --help show this help message and exit - -h, --help show this help message and exit + -drc, --drc_check run drc check - -d, --drc_check run drc check + -l, --lvs_check run lvs check - -l, --lvs_check run lvs check + -v, --verification run verification - -v, --verification run verification + -rtl, --rtl run rtl verification - -rtl, --rtl run rtl verification + -gl, --gl run gl verification - -gl, --gl run gl verification + -sdf, --sdf run sdf verification - -sdf, --sdf run sdf verification + -iv, --iverilog run verification using iverilog - -iv, --iverilog run verification using iverilog + -sta, --primetime_sta run STA using PrimeTime - -sta, --primetime_sta - run verification using iverilog + -d DESIGN, --design DESIGN design under test - -a, --all run all checks + -a, --all run all checks ```` - +### How to run Caravel top-level STA including user project wrapper +1. edit in [pt_sta.tcl](./pt_sta.tcl) the spef mapping section to add the user project module instantiated in user project wrapper +2. run the command + ```` + python3 signoff_automation.py -d caravel -sta + ```` ## Reports and logs Reports can be found `$CARAVEL_ROOT/signoff//` + Logs can be found at `$CARAVEL_ROOT/scripts/logs/` diff --git a/scripts/pt_sta.tcl b/scripts/pt_sta.tcl index 48c94ae8..2db3b104 100644 --- a/scripts/pt_sta.tcl +++ b/scripts/pt_sta.tcl @@ -1,272 +1,283 @@ -##PT script +if {\ + [catch { + ##PT script + # Adding SCL and IO link libraries based on the process corner specified + if {$::env(PROC_CORNER) == "t"} { + set link_path "* $::env(PT_LIB_ROOT)/scs130hd_tt_1.80v_25C.lib \ + $::env(PT_LIB_ROOT)/scs130hvl_tt_3.3v_25C.lib \ + $::env(PT_LIB_ROOT)/scs130hvl_tt_3.3v_lowhv_3.3v_lv_1.8v_25C.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_tt_tt_025C_1v80_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_tt_tt_025C_1v80_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_025C_1v80_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_tt_025C_1v80_3v30_3v30.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_025C_1v80_3v30.lib \ + " + } elseif {$::env(PROC_CORNER) == "f"} { + set link_path "* $::env(PT_LIB_ROOT)/scs130hd_ff_1.95v_-40C.lib \ + $::env(PT_LIB_ROOT)/scs130hvl_ff_5.5v_-40C.lib \ + $::env(PT_LIB_ROOT)/scs130hvl_ff_5.5v_lowhv_5.5v_lv_1.95v_-40C.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ff_ff_n40C_1v95_5v50.lib.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ff_ff_n40C_1v95_5v50.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ff_n40C_1v95_5v50.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ff_n40C_1v95_5v50_5v50.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ff_n40C_1v95_5v50.lib \ + " + } elseif {$::env(PROC_CORNER) == "s"} { + set link_path "* $::env(PT_LIB_ROOT)/scs130hd_ss_1.40v_100C.lib \ + $::env(PT_LIB_ROOT)/scs130hvl_ss_3.00v_100C.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ss_ss_100C_1v60_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ss_ss_100C_1v60_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ss_100C_1v60_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ss_100C_1v60_3v00_3v00.lib \ + $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ss_100C_1v60_3v00.lib \ + " + } -# Adding SCL and IO link libraries based on the process corner specified -if {$::env(PROC_CORNER) == "t"} { - set link_path "* $::env(PT_LIB_ROOT)/scs130hd_tt_1.80v_25C.lib \ - $::env(PT_LIB_ROOT)/scs130hvl_tt_3.3v_25C.lib \ - $::env(PT_LIB_ROOT)/scs130hvl_tt_3.3v_lowhv_3.3v_lv_1.8v_25C.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_tt_tt_025C_1v80_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_tt_tt_025C_1v80_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_025C_1v80_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_tt_025C_1v80_3v30_3v30.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_025C_1v80_3v30.lib \ - " -} elseif {$::env(PROC_CORNER) == "f"} { - set link_path "* $::env(PT_LIB_ROOT)/scs130hd_ff_1.95v_-40C.lib \ - $::env(PT_LIB_ROOT)/scs130hvl_ff_5.5v_-40C.lib \ - $::env(PT_LIB_ROOT)/scs130hvl_ff_5.5v_lowhv_5.5v_lv_1.95v_-40C.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ff_ff_n40C_1v95_5v50.lib.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ff_ff_n40C_1v95_5v50.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ff_n40C_1v95_5v50.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ff_n40C_1v95_5v50_5v50.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ff_n40C_1v95_5v50.lib \ - " -} elseif {$::env(PROC_CORNER) == "s"} { - set link_path "* $::env(PT_LIB_ROOT)/scs130hd_ss_1.40v_100C.lib \ - $::env(PT_LIB_ROOT)/scs130hvl_ss_3.00v_100C.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ss_ss_100C_1v60_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ss_ss_100C_1v60_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ss_100C_1v60_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ss_100C_1v60_3v00_3v00.lib \ - $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ss_100C_1v60_3v00.lib \ - " + # Reading design netlist + set search_path "$::env(CARAVEL_ROOT)/verilog/gl $::env(MCW_ROOT)/verilog/gl $::env(UPRJ_ROOT)/verilog/gl $::env(PT_LIB_ROOT)" + puts "list of verilog files:" + foreach verilog "[glob $::env(CARAVEL_ROOT)/verilog/gl/*.v] [glob $::env(MCW_ROOT)/verilog/gl/*.v] [glob $::env(UPRJ_ROOT)/verilog/gl/*.v]" { + puts $verilog + read_verilog $verilog + } + + current_design $::env(DESIGN) + link + + # Reading constraints (signoff) + if {$::env(DESIGN) == "mgmt_core_wrapper" | $::env(DESIGN) == "RAM256" | $::env(DESIGN) == "RAM128"} { + read_sdc $::env(MCW_ROOT)/sdc/$::env(DESIGN).sdc + } else { + read_sdc $::env(CARAVEL_ROOT)/sdc/$::env(DESIGN).sdc + } + + # Reading parasitics based on the RC corner specified + proc read_spefs {design rc_corner} { + if {$design == "caravel"} { + set spef_mapping(mprj) $::env(UPRJ_ROOT)/spef/user_project_wrapper/user_project_wrapper.${rc_corner}.spef + # add your module name instantiated in user_project_wrapper here + # set spef_mapping(mprj/) $::env(UPRJ_ROOT)/spef//.${rc_corner}.spef + + set spef_mapping(rstb_level) $::env(CARAVEL_ROOT)/spef/xres_buf/xres_buf.${rc_corner}.spef + set spef_mapping(padframe) $::env(CARAVEL_ROOT)/spef/chip_io/chip_io.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[0]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[1]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[2]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[3]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[4]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[5]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + set spef_mapping(padframe/\constant_value_inst[6]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef + + set spef_mapping(housekeeping) $::env(CARAVEL_ROOT)/spef/housekeeping/housekeeping.${rc_corner}.spef + set spef_mapping(pll) $::env(CARAVEL_ROOT)/spef/digital_pll/digital_pll.${rc_corner}.spef + set spef_mapping(clock_ctrl) $::env(CARAVEL_ROOT)/spef/caravel_clocking/caravel_clocking.${rc_corner}.spef + set spef_mapping(mgmt_buffers) $::env(CARAVEL_ROOT)/spef/mgmt_protect/mgmt_protect.${rc_corner}.spef + set spef_mapping(mgmt_buffers/powergood_check) $::env(CARAVEL_ROOT)/spef/mgmt_protect_hv/mgmt_protect_hv.${rc_corner}.spef + set spef_mapping(mgmt_buffers/mprj_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj_logic_high/mprj_logic_high.${rc_corner}.spef + set spef_mapping(mgmt_buffers/mprj2_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj2_logic_high/mprj2_logic_high.${rc_corner}.spef + + set spef_mapping(soc) $::env(MCW_ROOT)/spef/mgmt_core_wrapper/mgmt_core_wrapper.${rc_corner}.spef + set spef_mapping(soc/\core.RAM256) $::env(MCW_ROOT)/spef/RAM256/RAM256.${rc_corner}.spef + set spef_mapping(soc/\core.RAM128) $::env(MCW_ROOT)/spef/RAM128/RAM128.${rc_corner}.spef + + set spef_mapping(\gpio_control_bidir_1[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_1[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_2[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_2[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_2[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[10]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[3]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[4]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[5]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[6]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[7]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[8]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[9]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[3]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[4]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[5]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[10]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[11]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[12]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[13]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[14]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[15]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[3]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[4]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[5]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[6]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[7]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[8]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[9]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef + + set spef_mapping(\gpio_control_bidir_1[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_1[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_2[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_2[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_bidir_2[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[10]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[3]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[4]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[5]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[6]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[7]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[8]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1[9]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[3]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[4]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_1a[5]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[10]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[11]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[12]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[13]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[14]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[15]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[3]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[4]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[5]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[6]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[7]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[8]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + set spef_mapping(\gpio_control_in_2[9]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + + set spef_mapping(gpio_defaults_block_0) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_1803/gpio_defaults_block_1803.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_1) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_1803/gpio_defaults_block_1803.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_3) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0801/gpio_defaults_block_0801.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_10) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_10) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_11) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_12) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_13) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_14) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_15) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_16) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_17) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_18) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_19) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_2) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_20) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_21) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_22) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_23) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_24) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_25) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_26) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_27) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_28) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_29) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_30) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_31) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_32) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_33) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_35) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_36) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_37) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_4) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_5) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_6) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_7) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_8) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + set spef_mapping(gpio_defaults_block_9) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef + } elseif {$design == "mgmt_core_wrapper"} { + set spef_mapping(\core.RAM128) $::env(MCW_ROOT)/spef/RAM128/RAM128.${rc_corner}.spef + set spef_mapping(\core.RAM256) $::env(MCW_ROOT)/spef/RAM512/RAM512.${rc_corner}.spef + } elseif {$design == "gpio_control_block"} { + set spef_mapping(gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef + } elseif {$design == "mgmt_protect"} { + set spef_mapping(powergood_check) $::env(CARAVEL_ROOT)/spef/mgmt_protect_hv/mgmt_protect_hv.${rc_corner}.spef + set spef_mapping(mprj_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj_logic_high/mprj_logic_high.${rc_corner}.spef + set spef_mapping(mprj2_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj2_logic_high/mprj2_logic_high.${rc_corner}.spef + } + + foreach key [array names spef_mapping] { + read_parasitics -path $key $spef_mapping($key) + } + + if {$design == "mgmt_core_wrapper" | $design == "RAM128" | $design == "RAM256"} { + read_parasitics -verbose $::env(MCW_ROOT)/spef/${design}/${design}.${rc_corner}.spef -pin_cap_included + } else { + read_parasitics -verbose $::env(CARAVEL_ROOT)/spef/${design}/${design}.${rc_corner}.spef -pin_cap_included + } + + } + proc report_results {design rc_corner proc_corner} { + report_constraint -all_violators -significant_digits 4 -nosplit > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-all_viol.rpt + + report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-min_timing.rpt + + report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-max_timing.rpt + + if {$design == "caravel"} { + report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group clk \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-clk-min_timing.rpt + + report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group hk_serial_clk \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-hk_serial_clk-min_timing.rpt + + report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group hk_serial_clk \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-hk_serial_clk-max_timing.rpt + + report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group hkspi_clk \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-hkspi_clk-min_timing.rpt + + report_timing -delay min -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-soc-min_timing.rpt + + report_timing -delay max -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ + -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-soc-max_timing.rpt + } + + write_sdf -version 3.0 -significant_digits 4 $::env(OUT_DIR)/pt_sdf/${design}/${design}-${rc_corner}-${proc_corner}.sdf + + # Extract timing model + set extract_model_clock_transition_limit 0.75 + set extract_model_data_transition_limit 0.75 + set_app_var extract_model_capacitance_limit 1.0 + set extract_model_num_capacitance_points 7 + set extract_model_num_clock_transition_points 7 + set extract_model_num_data_transition_points 7 + set extract_model_use_conservative_current_slew true + set extract_model_enable_report_delay_calculation true + set extract_model_with_clock_latency_arcs true + extract_model -output $::env(OUT_DIR)/pt_etm/${design}/${design}-${rc_corner}-${proc_corner} -format {db lib} -test_design + } + + read_spefs $::env(DESIGN) $::env(RC_CORNER) + update_timing + report_results $::env(DESIGN) $::env(RC_CORNER) $::env(PROC_CORNER) + + exit + } err] +} { + puts stderr $err + exit 1 } - -# Reading design netlist -# TODO: get chip io netlist instead of reading the RTL -set search_path "$::env(CARAVEL_ROOT)/verilog/gl $::env(MCW_ROOT)/verilog/gl $::env(PT_LIB_ROOT)" -foreach verilog "[glob $::env(CARAVEL_ROOT)/verilog/gl/*.v] [glob $::env(MCW_ROOT)/verilog/gl/*.v]" { - read_verilog $verilog -} - -current_design $::env(DESIGN) -link - -# Reading constraints (signoff) -if {$::env(DESIGN) == "mgmt_core_wrapper" | $::env(DESIGN) == "RAM256" | $::env(DESIGN) == "RAM128"} { - read_sdc $::env(MCW_ROOT)/sdc/$::env(DESIGN).sdc -} else { - read_sdc $::env(CARAVEL_ROOT)/sdc/$::env(DESIGN).sdc -} - -# Reading parasitics based on the RC corner specified -proc read_spefs {design rc_corner} { - if {$design == "caravel"} { - set spef_mapping(rstb_level) $::env(CARAVEL_ROOT)/spef/xres_buf/xres_buf.${rc_corner}.spef - set spef_mapping(padframe) $::env(CARAVEL_ROOT)/spef/chip_io/chip_io.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[0]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[1]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[2]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[3]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[4]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[5]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - set spef_mapping(padframe/\constant_value_inst[6]) $::env(CARAVEL_ROOT)/spef/constant_block/constant_block.${rc_corner}.spef - - set spef_mapping(housekeeping) $::env(CARAVEL_ROOT)/spef/housekeeping/housekeeping.${rc_corner}.spef - set spef_mapping(pll) $::env(CARAVEL_ROOT)/spef/digital_pll/digital_pll.${rc_corner}.spef - set spef_mapping(clock_ctrl) $::env(CARAVEL_ROOT)/spef/caravel_clocking/caravel_clocking.${rc_corner}.spef - set spef_mapping(mgmt_buffers) $::env(CARAVEL_ROOT)/spef/mgmt_protect/mgmt_protect.${rc_corner}.spef - set spef_mapping(mgmt_buffers/powergood_check) $::env(CARAVEL_ROOT)/spef/mgmt_protect_hv/mgmt_protect_hv.${rc_corner}.spef - set spef_mapping(mgmt_buffers/mprj_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj_logic_high/mprj_logic_high.${rc_corner}.spef - set spef_mapping(mgmt_buffers/mprj2_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj2_logic_high/mprj2_logic_high.${rc_corner}.spef - - set spef_mapping(soc) $::env(MCW_ROOT)/spef/mgmt_core_wrapper/mgmt_core_wrapper.${rc_corner}.spef - set spef_mapping(soc/\core.RAM256) $::env(MCW_ROOT)/spef/RAM256/RAM256.${rc_corner}.spef - set spef_mapping(soc/\core.RAM128) $::env(MCW_ROOT)/spef/RAM128/RAM128.${rc_corner}.spef - - set spef_mapping(\gpio_control_bidir_1[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_1[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_2[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_2[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_2[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[10]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[3]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[4]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[5]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[6]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[7]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[8]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[9]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[3]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[4]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[5]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[0]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[10]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[11]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[12]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[13]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[14]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[15]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[1]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[2]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[3]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[4]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[5]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[6]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[7]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[8]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[9]) $::env(CARAVEL_ROOT)/spef/gpio_control_block/gpio_control_block.${rc_corner}.spef - - set spef_mapping(\gpio_control_bidir_1[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_1[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_2[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_2[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_bidir_2[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[10]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[3]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[4]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[5]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[6]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[7]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[8]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1[9]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[3]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[4]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_1a[5]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[0]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[10]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[11]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[12]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[13]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[14]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[15]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[1]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[2]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[3]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[4]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[5]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[6]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[7]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[8]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - set spef_mapping(\gpio_control_in_2[9]/gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - - set spef_mapping(gpio_defaults_block_0) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_1803/gpio_defaults_block_1803.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_1) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_1803/gpio_defaults_block_1803.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_3) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0801/gpio_defaults_block_0801.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_10) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_10) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_11) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_12) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_13) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_14) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_15) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_16) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_17) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_18) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_19) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_2) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_20) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_21) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_22) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_23) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_24) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_25) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_26) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_27) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_28) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_29) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_30) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_31) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_32) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_33) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_35) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_36) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_37) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_4) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_5) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_6) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_7) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_8) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - set spef_mapping(gpio_defaults_block_9) $::env(CARAVEL_ROOT)/spef/gpio_defaults_block_0403/gpio_defaults_block_0403.${rc_corner}.spef - } elseif {$design == "mgmt_core_wrapper"} { - set spef_mapping(\core.RAM128) $::env(MCW_ROOT)/spef/RAM128/RAM128.${rc_corner}.spef - set spef_mapping(\core.RAM256) $::env(MCW_ROOT)/spef/RAM512/RAM512.${rc_corner}.spef - } elseif {$design == "gpio_control_block"} { - set spef_mapping(gpio_logic_high) $::env(CARAVEL_ROOT)/spef/gpio_logic_high/gpio_logic_high.${rc_corner}.spef - } elseif {$design == "mgmt_protect"} { - set spef_mapping(powergood_check) $::env(CARAVEL_ROOT)/spef/mgmt_protect_hv/mgmt_protect_hv.${rc_corner}.spef - set spef_mapping(mprj_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj_logic_high/mprj_logic_high.${rc_corner}.spef - set spef_mapping(mprj2_logic_high_inst) $::env(CARAVEL_ROOT)/spef/mprj2_logic_high/mprj2_logic_high.${rc_corner}.spef - } - - foreach key [array names spef_mapping] { - read_parasitics -path $key $spef_mapping($key) - } - - if {$design == "mgmt_core_wrapper" | $design == "RAM128" | $design == "RAM256"} { - read_parasitics -verbose $::env(MCW_ROOT)/spef/${design}/${design}.${rc_corner}.spef -pin_cap_included - } else { - read_parasitics -verbose $::env(CARAVEL_ROOT)/spef/${design}/${design}.${rc_corner}.spef -pin_cap_included - } - -} -proc report_results {design rc_corner proc_corner} { - report_constraint -all_violators -significant_digits 4 -nosplit > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-all_viol.rpt - - report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-min_timing.rpt - - report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-max_timing.rpt - - if {$design == "caravel"} { - report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group clk \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-clk-min_timing.rpt - - report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group hk_serial_clk \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-hk_serial_clk-min_timing.rpt - - report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group hk_serial_clk \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-hk_serial_clk-max_timing.rpt - - report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit -group hkspi_clk \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-hkspi_clk-min_timing.rpt - - report_timing -delay min -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-soc-min_timing.rpt - - report_timing -delay max -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -nosplit \ - -max_paths 1000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/pt_reports/${design}/${design}-${rc_corner}-${proc_corner}-soc-max_timing.rpt - } - - write_sdf -version 3.0 -significant_digits 4 $::env(OUT_DIR)/pt_sdf/${design}/${design}-${rc_corner}-${proc_corner}.sdf - - # Extract timing model - set extract_model_clock_transition_limit 0.75 - set extract_model_data_transition_limit 0.75 - set_app_var extract_model_capacitance_limit 1.0 - set extract_model_num_capacitance_points 7 - set extract_model_num_clock_transition_points 7 - set extract_model_num_data_transition_points 7 - set extract_model_use_conservative_current_slew true - set extract_model_enable_report_delay_calculation true - set extract_model_with_clock_latency_arcs true - extract_model -output $::env(OUT_DIR)/pt_etm/${design}/${design}-${rc_corner}-${proc_corner} -format {db lib} -test_design -} - -read_spefs $::env(DESIGN) $::env(RC_CORNER) -update_timing -report_results $::env(DESIGN) $::env(RC_CORNER) $::env(PROC_CORNER) - -exit \ No newline at end of file diff --git a/scripts/run_pt_sta.py b/scripts/run_pt_sta.py index ffd8e9ab..1a3b7507 100644 --- a/scripts/run_pt_sta.py +++ b/scripts/run_pt_sta.py @@ -32,6 +32,7 @@ def run_sta ( os.environ["PDK"] = os.getenv('PDK') os.environ["PT_LIB_ROOT"] = os.getenv('PT_LIB_ROOT') os.environ["CARAVEL_ROOT"] = os.getenv('CARAVEL_ROOT') + os.environ["UPRJ_ROOT"] = os.getenv('UPRJ_ROOT') os.environ["MCW_ROOT"] = os.getenv('MCW_ROOT') os.environ["OUT_DIR"] = output_dir SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -68,6 +69,7 @@ def check_env_vars(): pdk = os.getenv('PDK') pt_lib_root = os.getenv('PT_LIB_ROOT') caravel_root = os.getenv('CARAVEL_ROOT') + uprj_root = os.getenv('UPRJ_ROOT') mcw_root = os.getenv('MCW_ROOT') if pdk_root is None: raise FileNotFoundError( @@ -89,6 +91,10 @@ def check_env_vars(): raise FileNotFoundError( "Please export MCW_ROOT to the Caravel Management SoC Litex repo path" ) + if uprj_root is None: + raise FileNotFoundError( + "Please export UPRJ_ROOT to the Caravel User Project Wrapper repo path" + ) # Analyze the STA all violators output report def search_viol( diff --git a/scripts/signoff_automation.py b/scripts/signoff_automation.py index 2205f87f..30e8e3cc 100755 --- a/scripts/signoff_automation.py +++ b/scripts/signoff_automation.py @@ -448,7 +448,7 @@ if __name__ == "__main__": out, err = sta_p.communicate() sta_log = open(f"{log_dir}/PT_STA_{design}.log", "w") if err: - logging.error(err.decode()) + logging.error(err) sta_log.write(err) if not check_errors( diff --git a/sdc/caravel.sdc b/sdc/caravel.sdc index 39970705..95e98824 100644 --- a/sdc/caravel.sdc +++ b/sdc/caravel.sdc @@ -88,8 +88,8 @@ set_max_fanout 12 [current_design] # synthesis max fanout should be less than 12 (7 maybe) ## Set system monitoring mux select to zero so that the clock/user_clk monitoring is disabled -set_case_analysis 0 [get_pins housekeeping/_3948_/S] -set_case_analysis 0 [get_pins housekeeping/_3949_/S] +set_case_analysis 0 [get_pins housekeeping/_3936_/S] +set_case_analysis 0 [get_pins housekeeping/_3937_/S] # Add case analysis for pads DM[2]==1'b1 & DM[1]==1'b1 & DM[0]==1'b0 diff --git a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_0011.c b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_0011.c index 28a0c4a9..404b99c3 100644 --- a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_0011.c +++ b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_0011.c @@ -49,7 +49,7 @@ void main(){ reg_mprj_io_0 = GPIO_MODE_MGMT_STD_OUTPUT; // bitbang - for(int i =0;i<19*13;i++){ + for(int i =0;i<62;i++){ clock00(); clock00(); clock11(); diff --git a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_01.c b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_01.c index 3dfb8cb3..4a884dc9 100644 --- a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_01.c +++ b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_01.c @@ -49,7 +49,7 @@ void main(){ reg_mprj_io_0 = GPIO_MODE_MGMT_STD_OUTPUT; // bitbang - for(int i =0;i<19*13;i++){ + for(int i =0;i<124;i++){ clock00(); clock11(); } diff --git a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_10.c b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_10.c index 93abbb00..4065d921 100644 --- a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_10.c +++ b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_10.c @@ -49,7 +49,7 @@ void main(){ reg_mprj_io_0 = GPIO_MODE_MGMT_STD_OUTPUT; // bitbang - for(int i =0;i<19*13;i++){ + for(int i =0;i<124;i++){ clock11(); clock00(); } diff --git a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_1100.c b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_1100.c index c6f62bb1..7211cd58 100644 --- a/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_1100.c +++ b/verilog/dv/cocotb/tests/bitbang/bitbang_cpu_all_1100.c @@ -49,7 +49,7 @@ void main(){ reg_mprj_io_0 = GPIO_MODE_MGMT_STD_OUTPUT; // bitbang - for(int i =0;i<19*13;i++){ + for(int i =0;i<62;i++){ clock11(); clock11(); clock00(); diff --git a/verilog/gl/chip_io.v b/verilog/gl/chip_io.v index 186c5747..57a76b0d 100644 --- a/verilog/gl/chip_io.v +++ b/verilog/gl/chip_io.v @@ -1123,30 +1123,44 @@ module chip_io(vddio_pad, vddio_pad2, vssio_pad, vssio_pad2, vccd_pad, vssd_pad, ); constant_block \constant_value_inst[0] ( .one(\vccd_const_one[0] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[0] ) ); constant_block \constant_value_inst[1] ( .one(\vccd_const_one[1] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[1] ) ); constant_block \constant_value_inst[2] ( .one(\vccd_const_one[2] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[2] ) ); constant_block \constant_value_inst[3] ( .one(\vccd_const_one[3] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[3] ) ); constant_block \constant_value_inst[4] ( .one(\vccd_const_one[4] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[4] ) ); constant_block \constant_value_inst[5] ( .one(\vccd_const_one[5] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[5] ) ); constant_block \constant_value_inst[6] ( .one(\vccd_const_one[6] ), + .vccd(vccd), + .vssd(vssd), .zero(\vssd_const_zero[6] ) ); sky130_ef_io__gpiov2_pad_wrapped flash_clk_pad ( @@ -3126,14 +3140,17 @@ module chip_io(vddio_pad, vddio_pad2, vssio_pad, vssio_pad2, vccd_pad, vssd_pad, .VSSIO_Q(\mprj_pads.vssio_q ), .VSWITCH(vddio) ); - assign \mprj_pads.vccd_conb[7] = mprj_io_one[7]; - assign \mprj_pads.vccd_conb[6] = mprj_io_one[6]; - assign \mprj_pads.vccd_conb[5] = mprj_io_one[5]; - assign \mprj_pads.vccd_conb[4] = mprj_io_one[4]; - assign \mprj_pads.vccd_conb[3] = mprj_io_one[3]; - assign \mprj_pads.vccd_conb[2] = mprj_io_one[2]; - assign \mprj_pads.vccd_conb[1] = mprj_io_one[1]; - assign \mprj_pads.vccd_conb[0] = mprj_io_one[0]; + assign \mprj_pads.analog_sel[10] = mprj_io_analog_sel[10]; + assign \mprj_pads.analog_sel[9] = mprj_io_analog_sel[9]; + assign \mprj_pads.analog_sel[8] = mprj_io_analog_sel[8]; + assign \mprj_pads.analog_sel[7] = mprj_io_analog_sel[7]; + assign \mprj_pads.analog_sel[6] = mprj_io_analog_sel[6]; + assign \mprj_pads.analog_sel[5] = mprj_io_analog_sel[5]; + assign \mprj_pads.analog_sel[4] = mprj_io_analog_sel[4]; + assign \mprj_pads.analog_sel[3] = mprj_io_analog_sel[3]; + assign \mprj_pads.analog_sel[2] = mprj_io_analog_sel[2]; + assign \mprj_pads.analog_sel[1] = mprj_io_analog_sel[1]; + assign \mprj_pads.analog_sel[0] = mprj_io_analog_sel[0]; assign \mprj_pads.vtrip_sel[37] = mprj_io_vtrip_sel[37]; assign \mprj_pads.vtrip_sel[36] = mprj_io_vtrip_sel[36]; assign \mprj_pads.vtrip_sel[35] = mprj_io_vtrip_sel[35]; @@ -3172,424 +3189,6 @@ module chip_io(vddio_pad, vddio_pad2, vssio_pad, vssio_pad2, vccd_pad, vssd_pad, assign \mprj_pads.vtrip_sel[2] = mprj_io_vtrip_sel[2]; assign \mprj_pads.vtrip_sel[1] = mprj_io_vtrip_sel[1]; assign \mprj_pads.vtrip_sel[0] = mprj_io_vtrip_sel[0]; - assign \mprj_pads.enh[37] = porb_h; - assign \mprj_pads.enh[36] = porb_h; - assign \mprj_pads.enh[35] = porb_h; - assign \mprj_pads.enh[34] = porb_h; - assign \mprj_pads.enh[33] = porb_h; - assign \mprj_pads.enh[32] = porb_h; - assign \mprj_pads.enh[31] = porb_h; - assign \mprj_pads.enh[30] = porb_h; - assign \mprj_pads.enh[29] = porb_h; - assign \mprj_pads.enh[28] = porb_h; - assign \mprj_pads.enh[27] = porb_h; - assign \mprj_pads.enh[26] = porb_h; - assign \mprj_pads.enh[25] = porb_h; - assign \mprj_pads.enh[24] = porb_h; - assign \mprj_pads.enh[23] = porb_h; - assign \mprj_pads.enh[22] = porb_h; - assign \mprj_pads.enh[21] = porb_h; - assign \mprj_pads.enh[20] = porb_h; - assign \mprj_pads.enh[19] = porb_h; - assign \mprj_pads.enh[18] = porb_h; - assign \mprj_pads.enh[17] = porb_h; - assign \mprj_pads.enh[16] = porb_h; - assign \mprj_pads.enh[15] = porb_h; - assign \mprj_pads.enh[14] = porb_h; - assign \mprj_pads.enh[13] = porb_h; - assign \mprj_pads.enh[12] = porb_h; - assign \mprj_pads.enh[11] = porb_h; - assign \mprj_pads.enh[10] = porb_h; - assign \mprj_pads.enh[9] = porb_h; - assign \mprj_pads.enh[8] = porb_h; - assign \mprj_pads.enh[7] = porb_h; - assign \mprj_pads.enh[6] = porb_h; - assign \mprj_pads.enh[5] = porb_h; - assign \mprj_pads.enh[4] = porb_h; - assign \mprj_pads.enh[3] = porb_h; - assign \mprj_pads.enh[2] = porb_h; - assign \mprj_pads.enh[1] = porb_h; - assign \mprj_pads.enh[0] = porb_h; - assign \mprj_pads.io[37] = mprj_io[37]; - assign \mprj_pads.io[36] = mprj_io[36]; - assign \mprj_pads.io[35] = mprj_io[35]; - assign \mprj_pads.io[34] = mprj_io[34]; - assign \mprj_pads.io[33] = mprj_io[33]; - assign \mprj_pads.io[32] = mprj_io[32]; - assign \mprj_pads.io[31] = mprj_io[31]; - assign \mprj_pads.io[30] = mprj_io[30]; - assign \mprj_pads.io[29] = mprj_io[29]; - assign \mprj_pads.io[28] = mprj_io[28]; - assign \mprj_pads.io[27] = mprj_io[27]; - assign \mprj_pads.io[26] = mprj_io[26]; - assign \mprj_pads.io[25] = mprj_io[25]; - assign \mprj_pads.io[24] = mprj_io[24]; - assign \mprj_pads.io[23] = mprj_io[23]; - assign \mprj_pads.io[22] = mprj_io[22]; - assign \mprj_pads.io[21] = mprj_io[21]; - assign \mprj_pads.io[20] = mprj_io[20]; - assign \mprj_pads.io[19] = mprj_io[19]; - assign \mprj_pads.io[18] = mprj_io[18]; - assign \mprj_pads.io[17] = mprj_io[17]; - assign \mprj_pads.io[16] = mprj_io[16]; - assign \mprj_pads.io[15] = mprj_io[15]; - assign \mprj_pads.io[14] = mprj_io[14]; - assign \mprj_pads.io[13] = mprj_io[13]; - assign \mprj_pads.io[12] = mprj_io[12]; - assign \mprj_pads.io[11] = mprj_io[11]; - assign \mprj_pads.io[10] = mprj_io[10]; - assign \mprj_pads.io[9] = mprj_io[9]; - assign \mprj_pads.io[8] = mprj_io[8]; - assign \mprj_pads.io[7] = mprj_io[7]; - assign \mprj_pads.io[6] = mprj_io[6]; - assign \mprj_pads.io[5] = mprj_io[5]; - assign \mprj_pads.io[4] = mprj_io[4]; - assign \mprj_pads.io[3] = mprj_io[3]; - assign \mprj_pads.io[2] = mprj_io[2]; - assign \mprj_pads.io[1] = mprj_io[1]; - assign \mprj_pads.io[0] = mprj_io[0]; - assign \dm_all[2] = gpio_mode1_core; - assign \dm_all[1] = gpio_mode1_core; - assign \dm_all[0] = gpio_mode0_core; - assign \flash_io1_mode[2] = flash_io1_ieb_core; - assign \flash_io1_mode[1] = flash_io1_ieb_core; - assign \flash_io1_mode[0] = flash_io1_oeb_core; - assign \flash_io0_mode[2] = flash_io0_ieb_core; - assign \flash_io0_mode[1] = flash_io0_ieb_core; - assign \flash_io0_mode[0] = flash_io0_oeb_core; - assign \mprj_pads.inp_dis[37] = mprj_io_inp_dis[37]; - assign \mprj_pads.inp_dis[36] = mprj_io_inp_dis[36]; - assign \mprj_pads.inp_dis[35] = mprj_io_inp_dis[35]; - assign \mprj_pads.inp_dis[34] = mprj_io_inp_dis[34]; - assign \mprj_pads.inp_dis[33] = mprj_io_inp_dis[33]; - assign \mprj_pads.inp_dis[32] = mprj_io_inp_dis[32]; - assign \mprj_pads.inp_dis[31] = mprj_io_inp_dis[31]; - assign \mprj_pads.inp_dis[30] = mprj_io_inp_dis[30]; - assign \mprj_pads.inp_dis[29] = mprj_io_inp_dis[29]; - assign \mprj_pads.inp_dis[28] = mprj_io_inp_dis[28]; - assign \mprj_pads.inp_dis[27] = mprj_io_inp_dis[27]; - assign \mprj_pads.inp_dis[26] = mprj_io_inp_dis[26]; - assign \mprj_pads.inp_dis[25] = mprj_io_inp_dis[25]; - assign \mprj_pads.inp_dis[24] = mprj_io_inp_dis[24]; - assign \mprj_pads.inp_dis[23] = mprj_io_inp_dis[23]; - assign \mprj_pads.inp_dis[22] = mprj_io_inp_dis[22]; - assign \mprj_pads.inp_dis[21] = mprj_io_inp_dis[21]; - assign \mprj_pads.inp_dis[20] = mprj_io_inp_dis[20]; - assign \mprj_pads.inp_dis[19] = mprj_io_inp_dis[19]; - assign \mprj_pads.inp_dis[18] = mprj_io_inp_dis[18]; - assign \mprj_pads.inp_dis[17] = mprj_io_inp_dis[17]; - assign \mprj_pads.inp_dis[16] = mprj_io_inp_dis[16]; - assign \mprj_pads.inp_dis[15] = mprj_io_inp_dis[15]; - assign \mprj_pads.inp_dis[14] = mprj_io_inp_dis[14]; - assign \mprj_pads.inp_dis[13] = mprj_io_inp_dis[13]; - assign \mprj_pads.inp_dis[12] = mprj_io_inp_dis[12]; - assign \mprj_pads.inp_dis[11] = mprj_io_inp_dis[11]; - assign \mprj_pads.inp_dis[10] = mprj_io_inp_dis[10]; - assign \mprj_pads.inp_dis[9] = mprj_io_inp_dis[9]; - assign \mprj_pads.inp_dis[8] = mprj_io_inp_dis[8]; - assign \mprj_pads.inp_dis[7] = mprj_io_inp_dis[7]; - assign \mprj_pads.inp_dis[6] = mprj_io_inp_dis[6]; - assign \mprj_pads.inp_dis[5] = mprj_io_inp_dis[5]; - assign \mprj_pads.inp_dis[4] = mprj_io_inp_dis[4]; - assign \mprj_pads.inp_dis[3] = mprj_io_inp_dis[3]; - assign \mprj_pads.inp_dis[2] = mprj_io_inp_dis[2]; - assign \mprj_pads.inp_dis[1] = mprj_io_inp_dis[1]; - assign \mprj_pads.inp_dis[0] = mprj_io_inp_dis[0]; - assign \mprj_pads.holdover[37] = mprj_io_holdover[37]; - assign \mprj_pads.holdover[36] = mprj_io_holdover[36]; - assign \mprj_pads.holdover[35] = mprj_io_holdover[35]; - assign \mprj_pads.holdover[34] = mprj_io_holdover[34]; - assign \mprj_pads.holdover[33] = mprj_io_holdover[33]; - assign \mprj_pads.holdover[32] = mprj_io_holdover[32]; - assign \mprj_pads.holdover[31] = mprj_io_holdover[31]; - assign \mprj_pads.holdover[30] = mprj_io_holdover[30]; - assign \mprj_pads.holdover[29] = mprj_io_holdover[29]; - assign \mprj_pads.holdover[28] = mprj_io_holdover[28]; - assign \mprj_pads.holdover[27] = mprj_io_holdover[27]; - assign \mprj_pads.holdover[26] = mprj_io_holdover[26]; - assign \mprj_pads.holdover[25] = mprj_io_holdover[25]; - assign \mprj_pads.holdover[24] = mprj_io_holdover[24]; - assign \mprj_pads.holdover[23] = mprj_io_holdover[23]; - assign \mprj_pads.holdover[22] = mprj_io_holdover[22]; - assign \mprj_pads.holdover[21] = mprj_io_holdover[21]; - assign \mprj_pads.holdover[20] = mprj_io_holdover[20]; - assign \mprj_pads.holdover[19] = mprj_io_holdover[19]; - assign \mprj_pads.holdover[18] = mprj_io_holdover[18]; - assign \mprj_pads.holdover[17] = mprj_io_holdover[17]; - assign \mprj_pads.holdover[16] = mprj_io_holdover[16]; - assign \mprj_pads.holdover[15] = mprj_io_holdover[15]; - assign \mprj_pads.holdover[14] = mprj_io_holdover[14]; - assign \mprj_pads.holdover[13] = mprj_io_holdover[13]; - assign \mprj_pads.holdover[12] = mprj_io_holdover[12]; - assign \mprj_pads.holdover[11] = mprj_io_holdover[11]; - assign \mprj_pads.holdover[10] = mprj_io_holdover[10]; - assign \mprj_pads.holdover[9] = mprj_io_holdover[9]; - assign \mprj_pads.holdover[8] = mprj_io_holdover[8]; - assign \mprj_pads.holdover[7] = mprj_io_holdover[7]; - assign \mprj_pads.holdover[6] = mprj_io_holdover[6]; - assign \mprj_pads.holdover[5] = mprj_io_holdover[5]; - assign \mprj_pads.holdover[4] = mprj_io_holdover[4]; - assign \mprj_pads.holdover[3] = mprj_io_holdover[3]; - assign \mprj_pads.holdover[2] = mprj_io_holdover[2]; - assign \mprj_pads.holdover[1] = mprj_io_holdover[1]; - assign \mprj_pads.holdover[0] = mprj_io_holdover[0]; - assign \mprj_pads.io_out[37] = mprj_io_out[37]; - assign \mprj_pads.io_out[36] = mprj_io_out[36]; - assign \mprj_pads.io_out[35] = mprj_io_out[35]; - assign \mprj_pads.io_out[34] = mprj_io_out[34]; - assign \mprj_pads.io_out[33] = mprj_io_out[33]; - assign \mprj_pads.io_out[32] = mprj_io_out[32]; - assign \mprj_pads.io_out[31] = mprj_io_out[31]; - assign \mprj_pads.io_out[30] = mprj_io_out[30]; - assign \mprj_pads.io_out[29] = mprj_io_out[29]; - assign \mprj_pads.io_out[28] = mprj_io_out[28]; - assign \mprj_pads.io_out[27] = mprj_io_out[27]; - assign \mprj_pads.io_out[26] = mprj_io_out[26]; - assign \mprj_pads.io_out[25] = mprj_io_out[25]; - assign \mprj_pads.io_out[24] = mprj_io_out[24]; - assign \mprj_pads.io_out[23] = mprj_io_out[23]; - assign \mprj_pads.io_out[22] = mprj_io_out[22]; - assign \mprj_pads.io_out[21] = mprj_io_out[21]; - assign \mprj_pads.io_out[20] = mprj_io_out[20]; - assign \mprj_pads.io_out[19] = mprj_io_out[19]; - assign \mprj_pads.io_out[18] = mprj_io_out[18]; - assign \mprj_pads.io_out[17] = mprj_io_out[17]; - assign \mprj_pads.io_out[16] = mprj_io_out[16]; - assign \mprj_pads.io_out[15] = mprj_io_out[15]; - assign \mprj_pads.io_out[14] = mprj_io_out[14]; - assign \mprj_pads.io_out[13] = mprj_io_out[13]; - assign \mprj_pads.io_out[12] = mprj_io_out[12]; - assign \mprj_pads.io_out[11] = mprj_io_out[11]; - assign \mprj_pads.io_out[10] = mprj_io_out[10]; - assign \mprj_pads.io_out[9] = mprj_io_out[9]; - assign \mprj_pads.io_out[8] = mprj_io_out[8]; - assign \mprj_pads.io_out[7] = mprj_io_out[7]; - assign \mprj_pads.io_out[6] = mprj_io_out[6]; - assign \mprj_pads.io_out[5] = mprj_io_out[5]; - assign \mprj_pads.io_out[4] = mprj_io_out[4]; - assign \mprj_pads.io_out[3] = mprj_io_out[3]; - assign \mprj_pads.io_out[2] = mprj_io_out[2]; - assign \mprj_pads.io_out[1] = mprj_io_out[1]; - assign \mprj_pads.io_out[0] = mprj_io_out[0]; - assign \mprj_pads.analog_sel[37] = mprj_io_analog_sel[37]; - assign \mprj_pads.analog_sel[36] = mprj_io_analog_sel[36]; - assign \mprj_pads.analog_sel[35] = mprj_io_analog_sel[35]; - assign \mprj_pads.analog_sel[34] = mprj_io_analog_sel[34]; - assign \mprj_pads.analog_sel[33] = mprj_io_analog_sel[33]; - assign \mprj_pads.analog_sel[32] = mprj_io_analog_sel[32]; - assign \mprj_pads.analog_sel[31] = mprj_io_analog_sel[31]; - assign \mprj_pads.analog_sel[30] = mprj_io_analog_sel[30]; - assign \mprj_pads.analog_sel[29] = mprj_io_analog_sel[29]; - assign \mprj_pads.analog_sel[28] = mprj_io_analog_sel[28]; - assign \mprj_pads.analog_sel[27] = mprj_io_analog_sel[27]; - assign \mprj_pads.analog_sel[26] = mprj_io_analog_sel[26]; - assign \mprj_pads.analog_sel[25] = mprj_io_analog_sel[25]; - assign \mprj_pads.analog_sel[24] = mprj_io_analog_sel[24]; - assign \mprj_pads.analog_sel[23] = mprj_io_analog_sel[23]; - assign \mprj_pads.analog_sel[22] = mprj_io_analog_sel[22]; - assign \mprj_pads.analog_sel[21] = mprj_io_analog_sel[21]; - assign \mprj_pads.analog_sel[20] = mprj_io_analog_sel[20]; - assign \mprj_pads.analog_sel[19] = mprj_io_analog_sel[19]; - assign \mprj_pads.analog_sel[18] = mprj_io_analog_sel[18]; - assign \mprj_pads.analog_sel[17] = mprj_io_analog_sel[17]; - assign \mprj_pads.analog_sel[16] = mprj_io_analog_sel[16]; - assign \mprj_pads.analog_sel[15] = mprj_io_analog_sel[15]; - assign \mprj_pads.analog_sel[14] = mprj_io_analog_sel[14]; - assign \mprj_pads.analog_sel[13] = mprj_io_analog_sel[13]; - assign \mprj_pads.analog_sel[12] = mprj_io_analog_sel[12]; - assign \mprj_pads.analog_sel[11] = mprj_io_analog_sel[11]; - assign \mprj_pads.analog_sel[10] = mprj_io_analog_sel[10]; - assign \mprj_pads.analog_sel[9] = mprj_io_analog_sel[9]; - assign \mprj_pads.analog_sel[8] = mprj_io_analog_sel[8]; - assign \mprj_pads.analog_sel[7] = mprj_io_analog_sel[7]; - assign \mprj_pads.analog_sel[6] = mprj_io_analog_sel[6]; - assign \mprj_pads.analog_sel[5] = mprj_io_analog_sel[5]; - assign \mprj_pads.analog_sel[4] = mprj_io_analog_sel[4]; - assign \mprj_pads.analog_sel[3] = mprj_io_analog_sel[3]; - assign \mprj_pads.analog_sel[2] = mprj_io_analog_sel[2]; - assign \mprj_pads.analog_sel[1] = mprj_io_analog_sel[1]; - assign \mprj_pads.analog_sel[0] = mprj_io_analog_sel[0]; - assign \mprj_pads.analog_io[28] = mprj_analog_io[28]; - assign \mprj_pads.analog_io[27] = mprj_analog_io[27]; - assign \mprj_pads.analog_io[26] = mprj_analog_io[26]; - assign \mprj_pads.analog_io[25] = mprj_analog_io[25]; - assign \mprj_pads.analog_io[24] = mprj_analog_io[24]; - assign \mprj_pads.analog_io[23] = mprj_analog_io[23]; - assign \mprj_pads.analog_io[22] = mprj_analog_io[22]; - assign \mprj_pads.analog_io[21] = mprj_analog_io[21]; - assign \mprj_pads.analog_io[20] = mprj_analog_io[20]; - assign \mprj_pads.analog_io[19] = mprj_analog_io[19]; - assign \mprj_pads.analog_io[18] = mprj_analog_io[18]; - assign \mprj_pads.analog_io[17] = mprj_analog_io[17]; - assign \mprj_pads.analog_io[16] = mprj_analog_io[16]; - assign \mprj_pads.analog_io[15] = mprj_analog_io[15]; - assign \mprj_pads.analog_io[14] = mprj_analog_io[14]; - assign \mprj_pads.analog_io[13] = mprj_analog_io[13]; - assign \mprj_pads.analog_io[12] = mprj_analog_io[12]; - assign \mprj_pads.analog_io[11] = mprj_analog_io[11]; - assign \mprj_pads.analog_io[10] = mprj_analog_io[10]; - assign \mprj_pads.analog_io[9] = mprj_analog_io[9]; - assign \mprj_pads.analog_io[8] = mprj_analog_io[8]; - assign \mprj_pads.analog_io[7] = mprj_analog_io[7]; - assign \mprj_pads.analog_io[6] = mprj_analog_io[6]; - assign \mprj_pads.analog_io[5] = mprj_analog_io[5]; - assign \mprj_pads.analog_io[4] = mprj_analog_io[4]; - assign \mprj_pads.analog_io[3] = mprj_analog_io[3]; - assign \mprj_pads.analog_io[2] = mprj_analog_io[2]; - assign \mprj_pads.analog_io[1] = mprj_analog_io[1]; - assign \mprj_pads.analog_io[0] = mprj_analog_io[0]; - assign \mprj_pads.analog_en[37] = mprj_io_analog_en[37]; - assign \mprj_pads.analog_en[36] = mprj_io_analog_en[36]; - assign \mprj_pads.analog_en[35] = mprj_io_analog_en[35]; - assign \mprj_pads.analog_en[34] = mprj_io_analog_en[34]; - assign \mprj_pads.analog_en[33] = mprj_io_analog_en[33]; - assign \mprj_pads.analog_en[32] = mprj_io_analog_en[32]; - assign \mprj_pads.analog_en[31] = mprj_io_analog_en[31]; - assign \mprj_pads.analog_en[30] = mprj_io_analog_en[30]; - assign \mprj_pads.analog_en[29] = mprj_io_analog_en[29]; - assign \mprj_pads.analog_en[28] = mprj_io_analog_en[28]; - assign \mprj_pads.analog_en[27] = mprj_io_analog_en[27]; - assign \mprj_pads.analog_en[26] = mprj_io_analog_en[26]; - assign \mprj_pads.analog_en[25] = mprj_io_analog_en[25]; - assign \mprj_pads.analog_en[24] = mprj_io_analog_en[24]; - assign \mprj_pads.analog_en[23] = mprj_io_analog_en[23]; - assign \mprj_pads.analog_en[22] = mprj_io_analog_en[22]; - assign \mprj_pads.analog_en[21] = mprj_io_analog_en[21]; - assign \mprj_pads.analog_en[20] = mprj_io_analog_en[20]; - assign \mprj_pads.analog_en[19] = mprj_io_analog_en[19]; - assign \mprj_pads.analog_en[18] = mprj_io_analog_en[18]; - assign \mprj_pads.analog_en[17] = mprj_io_analog_en[17]; - assign \mprj_pads.analog_en[16] = mprj_io_analog_en[16]; - assign \mprj_pads.analog_en[15] = mprj_io_analog_en[15]; - assign \mprj_pads.analog_en[14] = mprj_io_analog_en[14]; - assign \mprj_pads.analog_en[13] = mprj_io_analog_en[13]; - assign \mprj_pads.analog_en[12] = mprj_io_analog_en[12]; - assign \mprj_pads.analog_en[11] = mprj_io_analog_en[11]; - assign \mprj_pads.analog_en[10] = mprj_io_analog_en[10]; - assign \mprj_pads.analog_en[9] = mprj_io_analog_en[9]; - assign \mprj_pads.analog_en[8] = mprj_io_analog_en[8]; - assign \mprj_pads.analog_en[7] = mprj_io_analog_en[7]; - assign \mprj_pads.analog_en[6] = mprj_io_analog_en[6]; - assign \mprj_pads.analog_en[5] = mprj_io_analog_en[5]; - assign \mprj_pads.analog_en[4] = mprj_io_analog_en[4]; - assign \mprj_pads.analog_en[3] = mprj_io_analog_en[3]; - assign \mprj_pads.analog_en[2] = mprj_io_analog_en[2]; - assign \mprj_pads.analog_en[1] = mprj_io_analog_en[1]; - assign \mprj_pads.analog_en[0] = mprj_io_analog_en[0]; - assign \mprj_pads.slow_sel[37] = mprj_io_slow_sel[37]; - assign \mprj_pads.slow_sel[36] = mprj_io_slow_sel[36]; - assign \mprj_pads.slow_sel[35] = mprj_io_slow_sel[35]; - assign \mprj_pads.slow_sel[34] = mprj_io_slow_sel[34]; - assign \mprj_pads.slow_sel[33] = mprj_io_slow_sel[33]; - assign \mprj_pads.slow_sel[32] = mprj_io_slow_sel[32]; - assign \mprj_pads.slow_sel[31] = mprj_io_slow_sel[31]; - assign \mprj_pads.slow_sel[30] = mprj_io_slow_sel[30]; - assign \mprj_pads.slow_sel[29] = mprj_io_slow_sel[29]; - assign \mprj_pads.slow_sel[28] = mprj_io_slow_sel[28]; - assign \mprj_pads.slow_sel[27] = mprj_io_slow_sel[27]; - assign \mprj_pads.slow_sel[26] = mprj_io_slow_sel[26]; - assign \mprj_pads.slow_sel[25] = mprj_io_slow_sel[25]; - assign \mprj_pads.slow_sel[24] = mprj_io_slow_sel[24]; - assign \mprj_pads.slow_sel[23] = mprj_io_slow_sel[23]; - assign \mprj_pads.slow_sel[22] = mprj_io_slow_sel[22]; - assign \mprj_pads.slow_sel[21] = mprj_io_slow_sel[21]; - assign \mprj_pads.slow_sel[20] = mprj_io_slow_sel[20]; - assign \mprj_pads.slow_sel[19] = mprj_io_slow_sel[19]; - assign \mprj_pads.slow_sel[18] = mprj_io_slow_sel[18]; - assign \mprj_pads.slow_sel[17] = mprj_io_slow_sel[17]; - assign \mprj_pads.slow_sel[16] = mprj_io_slow_sel[16]; - assign \mprj_pads.slow_sel[15] = mprj_io_slow_sel[15]; - assign \mprj_pads.slow_sel[14] = mprj_io_slow_sel[14]; - assign \mprj_pads.slow_sel[13] = mprj_io_slow_sel[13]; - assign \mprj_pads.slow_sel[12] = mprj_io_slow_sel[12]; - assign \mprj_pads.slow_sel[11] = mprj_io_slow_sel[11]; - assign \mprj_pads.slow_sel[10] = mprj_io_slow_sel[10]; - assign \mprj_pads.slow_sel[9] = mprj_io_slow_sel[9]; - assign \mprj_pads.slow_sel[8] = mprj_io_slow_sel[8]; - assign \mprj_pads.slow_sel[7] = mprj_io_slow_sel[7]; - assign \mprj_pads.slow_sel[6] = mprj_io_slow_sel[6]; - assign \mprj_pads.slow_sel[5] = mprj_io_slow_sel[5]; - assign \mprj_pads.slow_sel[4] = mprj_io_slow_sel[4]; - assign \mprj_pads.slow_sel[3] = mprj_io_slow_sel[3]; - assign \mprj_pads.slow_sel[2] = mprj_io_slow_sel[2]; - assign \mprj_pads.slow_sel[1] = mprj_io_slow_sel[1]; - assign \mprj_pads.slow_sel[0] = mprj_io_slow_sel[0]; - assign \mprj_pads.ib_mode_sel[37] = mprj_io_ib_mode_sel[37]; - assign \mprj_pads.ib_mode_sel[36] = mprj_io_ib_mode_sel[36]; - assign \mprj_pads.ib_mode_sel[35] = mprj_io_ib_mode_sel[35]; - assign \mprj_pads.ib_mode_sel[34] = mprj_io_ib_mode_sel[34]; - assign \mprj_pads.ib_mode_sel[33] = mprj_io_ib_mode_sel[33]; - assign \mprj_pads.ib_mode_sel[32] = mprj_io_ib_mode_sel[32]; - assign \mprj_pads.ib_mode_sel[31] = mprj_io_ib_mode_sel[31]; - assign \mprj_pads.ib_mode_sel[30] = mprj_io_ib_mode_sel[30]; - assign \mprj_pads.ib_mode_sel[29] = mprj_io_ib_mode_sel[29]; - assign \mprj_pads.ib_mode_sel[28] = mprj_io_ib_mode_sel[28]; - assign \mprj_pads.ib_mode_sel[27] = mprj_io_ib_mode_sel[27]; - assign \mprj_pads.ib_mode_sel[26] = mprj_io_ib_mode_sel[26]; - assign \mprj_pads.ib_mode_sel[25] = mprj_io_ib_mode_sel[25]; - assign \mprj_pads.ib_mode_sel[24] = mprj_io_ib_mode_sel[24]; - assign \mprj_pads.ib_mode_sel[23] = mprj_io_ib_mode_sel[23]; - assign \mprj_pads.ib_mode_sel[22] = mprj_io_ib_mode_sel[22]; - assign \mprj_pads.ib_mode_sel[21] = mprj_io_ib_mode_sel[21]; - assign \mprj_pads.ib_mode_sel[20] = mprj_io_ib_mode_sel[20]; - assign \mprj_pads.ib_mode_sel[19] = mprj_io_ib_mode_sel[19]; - assign \mprj_pads.ib_mode_sel[18] = mprj_io_ib_mode_sel[18]; - assign \mprj_pads.ib_mode_sel[17] = mprj_io_ib_mode_sel[17]; - assign \mprj_pads.ib_mode_sel[16] = mprj_io_ib_mode_sel[16]; - assign \mprj_pads.ib_mode_sel[15] = mprj_io_ib_mode_sel[15]; - assign \mprj_pads.ib_mode_sel[14] = mprj_io_ib_mode_sel[14]; - assign \mprj_pads.ib_mode_sel[13] = mprj_io_ib_mode_sel[13]; - assign \mprj_pads.ib_mode_sel[12] = mprj_io_ib_mode_sel[12]; - assign \mprj_pads.ib_mode_sel[11] = mprj_io_ib_mode_sel[11]; - assign \mprj_pads.ib_mode_sel[10] = mprj_io_ib_mode_sel[10]; - assign \mprj_pads.ib_mode_sel[9] = mprj_io_ib_mode_sel[9]; - assign \mprj_pads.ib_mode_sel[8] = mprj_io_ib_mode_sel[8]; - assign \mprj_pads.ib_mode_sel[7] = mprj_io_ib_mode_sel[7]; - assign \mprj_pads.ib_mode_sel[6] = mprj_io_ib_mode_sel[6]; - assign \mprj_pads.ib_mode_sel[5] = mprj_io_ib_mode_sel[5]; - assign \mprj_pads.ib_mode_sel[4] = mprj_io_ib_mode_sel[4]; - assign \mprj_pads.ib_mode_sel[3] = mprj_io_ib_mode_sel[3]; - assign \mprj_pads.ib_mode_sel[2] = mprj_io_ib_mode_sel[2]; - assign \mprj_pads.ib_mode_sel[1] = mprj_io_ib_mode_sel[1]; - assign \mprj_pads.ib_mode_sel[0] = mprj_io_ib_mode_sel[0]; - assign \mprj_io_enh[37] = porb_h; - assign \mprj_io_enh[36] = porb_h; - assign \mprj_io_enh[35] = porb_h; - assign \mprj_io_enh[34] = porb_h; - assign \mprj_io_enh[33] = porb_h; - assign \mprj_io_enh[32] = porb_h; - assign \mprj_io_enh[31] = porb_h; - assign \mprj_io_enh[30] = porb_h; - assign \mprj_io_enh[29] = porb_h; - assign \mprj_io_enh[28] = porb_h; - assign \mprj_io_enh[27] = porb_h; - assign \mprj_io_enh[26] = porb_h; - assign \mprj_io_enh[25] = porb_h; - assign \mprj_io_enh[24] = porb_h; - assign \mprj_io_enh[23] = porb_h; - assign \mprj_io_enh[22] = porb_h; - assign \mprj_io_enh[21] = porb_h; - assign \mprj_io_enh[20] = porb_h; - assign \mprj_io_enh[19] = porb_h; - assign \mprj_io_enh[18] = porb_h; - assign \mprj_io_enh[17] = porb_h; - assign \mprj_io_enh[16] = porb_h; - assign \mprj_io_enh[15] = porb_h; - assign \mprj_io_enh[14] = porb_h; - assign \mprj_io_enh[13] = porb_h; - assign \mprj_io_enh[12] = porb_h; - assign \mprj_io_enh[11] = porb_h; - assign \mprj_io_enh[10] = porb_h; - assign \mprj_io_enh[9] = porb_h; - assign \mprj_io_enh[8] = porb_h; - assign \mprj_io_enh[7] = porb_h; - assign \mprj_io_enh[6] = porb_h; - assign \mprj_io_enh[5] = porb_h; - assign \mprj_io_enh[4] = porb_h; - assign \mprj_io_enh[3] = porb_h; - assign \mprj_io_enh[2] = porb_h; - assign \mprj_io_enh[1] = porb_h; - assign \mprj_io_enh[0] = porb_h; assign \mprj_pads.analog_pol[37] = mprj_io_analog_pol[37]; assign \mprj_pads.analog_pol[36] = mprj_io_analog_pol[36]; assign \mprj_pads.analog_pol[35] = mprj_io_analog_pol[35]; @@ -3628,44 +3227,6 @@ module chip_io(vddio_pad, vddio_pad2, vssio_pad, vssio_pad2, vccd_pad, vssd_pad, assign \mprj_pads.analog_pol[2] = mprj_io_analog_pol[2]; assign \mprj_pads.analog_pol[1] = mprj_io_analog_pol[1]; assign \mprj_pads.analog_pol[0] = mprj_io_analog_pol[0]; - assign \mprj_pads.oeb[37] = mprj_io_oeb[37]; - assign \mprj_pads.oeb[36] = mprj_io_oeb[36]; - assign \mprj_pads.oeb[35] = mprj_io_oeb[35]; - assign \mprj_pads.oeb[34] = mprj_io_oeb[34]; - assign \mprj_pads.oeb[33] = mprj_io_oeb[33]; - assign \mprj_pads.oeb[32] = mprj_io_oeb[32]; - assign \mprj_pads.oeb[31] = mprj_io_oeb[31]; - assign \mprj_pads.oeb[30] = mprj_io_oeb[30]; - assign \mprj_pads.oeb[29] = mprj_io_oeb[29]; - assign \mprj_pads.oeb[28] = mprj_io_oeb[28]; - assign \mprj_pads.oeb[27] = mprj_io_oeb[27]; - assign \mprj_pads.oeb[26] = mprj_io_oeb[26]; - assign \mprj_pads.oeb[25] = mprj_io_oeb[25]; - assign \mprj_pads.oeb[24] = mprj_io_oeb[24]; - assign \mprj_pads.oeb[23] = mprj_io_oeb[23]; - assign \mprj_pads.oeb[22] = mprj_io_oeb[22]; - assign \mprj_pads.oeb[21] = mprj_io_oeb[21]; - assign \mprj_pads.oeb[20] = mprj_io_oeb[20]; - assign \mprj_pads.oeb[19] = mprj_io_oeb[19]; - assign \mprj_pads.oeb[18] = mprj_io_oeb[18]; - assign \mprj_pads.oeb[17] = mprj_io_oeb[17]; - assign \mprj_pads.oeb[16] = mprj_io_oeb[16]; - assign \mprj_pads.oeb[15] = mprj_io_oeb[15]; - assign \mprj_pads.oeb[14] = mprj_io_oeb[14]; - assign \mprj_pads.oeb[13] = mprj_io_oeb[13]; - assign \mprj_pads.oeb[12] = mprj_io_oeb[12]; - assign \mprj_pads.oeb[11] = mprj_io_oeb[11]; - assign \mprj_pads.oeb[10] = mprj_io_oeb[10]; - assign \mprj_pads.oeb[9] = mprj_io_oeb[9]; - assign \mprj_pads.oeb[8] = mprj_io_oeb[8]; - assign \mprj_pads.oeb[7] = mprj_io_oeb[7]; - assign \mprj_pads.oeb[6] = mprj_io_oeb[6]; - assign \mprj_pads.oeb[5] = mprj_io_oeb[5]; - assign \mprj_pads.oeb[4] = mprj_io_oeb[4]; - assign \mprj_pads.oeb[3] = mprj_io_oeb[3]; - assign \mprj_pads.oeb[2] = mprj_io_oeb[2]; - assign \mprj_pads.oeb[1] = mprj_io_oeb[1]; - assign \mprj_pads.oeb[0] = mprj_io_oeb[0]; assign \mprj_pads.dm[113] = mprj_io_dm[113]; assign \mprj_pads.dm[112] = mprj_io_dm[112]; assign \mprj_pads.dm[111] = mprj_io_dm[111]; @@ -3780,6 +3341,459 @@ module chip_io(vddio_pad, vddio_pad2, vssio_pad, vssio_pad2, vccd_pad, vssd_pad, assign \mprj_pads.dm[2] = mprj_io_dm[2]; assign \mprj_pads.dm[1] = mprj_io_dm[1]; assign \mprj_pads.dm[0] = mprj_io_dm[0]; + assign \mprj_pads.io[37] = mprj_io[37]; + assign \mprj_pads.io[36] = mprj_io[36]; + assign \mprj_pads.io[35] = mprj_io[35]; + assign \mprj_pads.io[34] = mprj_io[34]; + assign \mprj_pads.io[33] = mprj_io[33]; + assign \mprj_pads.io[32] = mprj_io[32]; + assign \mprj_pads.io[31] = mprj_io[31]; + assign \mprj_pads.io[30] = mprj_io[30]; + assign \mprj_pads.io[29] = mprj_io[29]; + assign \mprj_pads.io[28] = mprj_io[28]; + assign \mprj_pads.io[27] = mprj_io[27]; + assign \mprj_pads.io[26] = mprj_io[26]; + assign \mprj_pads.io[25] = mprj_io[25]; + assign \mprj_pads.io[24] = mprj_io[24]; + assign \mprj_pads.io[23] = mprj_io[23]; + assign \mprj_pads.io[22] = mprj_io[22]; + assign \mprj_pads.io[21] = mprj_io[21]; + assign \mprj_pads.io[20] = mprj_io[20]; + assign \mprj_pads.io[19] = mprj_io[19]; + assign \mprj_pads.io[18] = mprj_io[18]; + assign \mprj_pads.io[17] = mprj_io[17]; + assign \mprj_pads.io[16] = mprj_io[16]; + assign \mprj_pads.io[15] = mprj_io[15]; + assign \mprj_pads.io[14] = mprj_io[14]; + assign \mprj_pads.io[13] = mprj_io[13]; + assign \mprj_pads.io[12] = mprj_io[12]; + assign \mprj_pads.io[11] = mprj_io[11]; + assign \mprj_pads.io[10] = mprj_io[10]; + assign \mprj_pads.io[9] = mprj_io[9]; + assign \mprj_pads.io[8] = mprj_io[8]; + assign \mprj_pads.io[7] = mprj_io[7]; + assign \mprj_pads.io[6] = mprj_io[6]; + assign \mprj_pads.io[5] = mprj_io[5]; + assign \mprj_pads.io[4] = mprj_io[4]; + assign \mprj_pads.io[3] = mprj_io[3]; + assign \mprj_pads.io[2] = mprj_io[2]; + assign \mprj_pads.io[1] = mprj_io[1]; + assign \mprj_pads.io[0] = mprj_io[0]; + assign \mprj_pads.io_out[37] = mprj_io_out[37]; + assign \mprj_pads.io_out[36] = mprj_io_out[36]; + assign \mprj_pads.io_out[35] = mprj_io_out[35]; + assign \mprj_pads.io_out[34] = mprj_io_out[34]; + assign \mprj_pads.io_out[33] = mprj_io_out[33]; + assign \mprj_pads.io_out[32] = mprj_io_out[32]; + assign \mprj_pads.io_out[31] = mprj_io_out[31]; + assign \mprj_pads.io_out[30] = mprj_io_out[30]; + assign \mprj_pads.io_out[29] = mprj_io_out[29]; + assign \mprj_pads.io_out[28] = mprj_io_out[28]; + assign \mprj_pads.io_out[27] = mprj_io_out[27]; + assign \mprj_pads.io_out[26] = mprj_io_out[26]; + assign \mprj_pads.io_out[25] = mprj_io_out[25]; + assign \mprj_pads.io_out[24] = mprj_io_out[24]; + assign \mprj_pads.io_out[23] = mprj_io_out[23]; + assign \mprj_pads.io_out[22] = mprj_io_out[22]; + assign \mprj_pads.io_out[21] = mprj_io_out[21]; + assign \mprj_pads.io_out[20] = mprj_io_out[20]; + assign \mprj_pads.io_out[19] = mprj_io_out[19]; + assign \mprj_pads.io_out[18] = mprj_io_out[18]; + assign \mprj_pads.io_out[17] = mprj_io_out[17]; + assign \mprj_pads.io_out[16] = mprj_io_out[16]; + assign \mprj_pads.io_out[15] = mprj_io_out[15]; + assign \mprj_pads.io_out[14] = mprj_io_out[14]; + assign \mprj_pads.io_out[13] = mprj_io_out[13]; + assign \mprj_pads.io_out[12] = mprj_io_out[12]; + assign \mprj_pads.io_out[11] = mprj_io_out[11]; + assign \mprj_pads.io_out[10] = mprj_io_out[10]; + assign \mprj_pads.io_out[9] = mprj_io_out[9]; + assign \mprj_pads.io_out[8] = mprj_io_out[8]; + assign \mprj_pads.io_out[7] = mprj_io_out[7]; + assign \mprj_pads.io_out[6] = mprj_io_out[6]; + assign \mprj_pads.io_out[5] = mprj_io_out[5]; + assign \mprj_pads.io_out[4] = mprj_io_out[4]; + assign \mprj_pads.io_out[3] = mprj_io_out[3]; + assign \mprj_pads.io_out[2] = mprj_io_out[2]; + assign \mprj_pads.io_out[1] = mprj_io_out[1]; + assign \mprj_pads.io_out[0] = mprj_io_out[0]; + assign \mprj_pads.holdover[37] = mprj_io_holdover[37]; + assign \mprj_pads.holdover[36] = mprj_io_holdover[36]; + assign \mprj_pads.holdover[35] = mprj_io_holdover[35]; + assign \mprj_pads.holdover[34] = mprj_io_holdover[34]; + assign \mprj_pads.holdover[33] = mprj_io_holdover[33]; + assign \mprj_pads.holdover[32] = mprj_io_holdover[32]; + assign \mprj_pads.holdover[31] = mprj_io_holdover[31]; + assign \mprj_pads.holdover[30] = mprj_io_holdover[30]; + assign \mprj_pads.holdover[29] = mprj_io_holdover[29]; + assign \mprj_pads.holdover[28] = mprj_io_holdover[28]; + assign \mprj_pads.holdover[27] = mprj_io_holdover[27]; + assign \mprj_pads.holdover[26] = mprj_io_holdover[26]; + assign \mprj_pads.holdover[25] = mprj_io_holdover[25]; + assign \mprj_pads.holdover[24] = mprj_io_holdover[24]; + assign \mprj_pads.holdover[23] = mprj_io_holdover[23]; + assign \mprj_pads.holdover[22] = mprj_io_holdover[22]; + assign \mprj_pads.holdover[21] = mprj_io_holdover[21]; + assign \mprj_pads.holdover[20] = mprj_io_holdover[20]; + assign \mprj_pads.holdover[19] = mprj_io_holdover[19]; + assign \mprj_pads.holdover[18] = mprj_io_holdover[18]; + assign \mprj_pads.holdover[17] = mprj_io_holdover[17]; + assign \mprj_pads.holdover[16] = mprj_io_holdover[16]; + assign \mprj_pads.holdover[15] = mprj_io_holdover[15]; + assign \mprj_pads.holdover[14] = mprj_io_holdover[14]; + assign \mprj_pads.holdover[13] = mprj_io_holdover[13]; + assign \mprj_pads.holdover[12] = mprj_io_holdover[12]; + assign \mprj_pads.holdover[11] = mprj_io_holdover[11]; + assign \mprj_pads.holdover[10] = mprj_io_holdover[10]; + assign \mprj_pads.holdover[9] = mprj_io_holdover[9]; + assign \mprj_pads.holdover[8] = mprj_io_holdover[8]; + assign \mprj_pads.holdover[7] = mprj_io_holdover[7]; + assign \mprj_pads.holdover[6] = mprj_io_holdover[6]; + assign \mprj_pads.holdover[5] = mprj_io_holdover[5]; + assign \mprj_pads.holdover[4] = mprj_io_holdover[4]; + assign \mprj_pads.holdover[3] = mprj_io_holdover[3]; + assign \mprj_pads.holdover[2] = mprj_io_holdover[2]; + assign \mprj_pads.holdover[1] = mprj_io_holdover[1]; + assign \mprj_pads.holdover[0] = mprj_io_holdover[0]; + assign \mprj_pads.vccd_conb[37] = mprj_io_one[37]; + assign \mprj_pads.vccd_conb[36] = mprj_io_one[36]; + assign \mprj_pads.vccd_conb[35] = mprj_io_one[35]; + assign \mprj_pads.vccd_conb[34] = mprj_io_one[34]; + assign \mprj_pads.vccd_conb[33] = mprj_io_one[33]; + assign \mprj_pads.vccd_conb[32] = mprj_io_one[32]; + assign \mprj_pads.vccd_conb[31] = mprj_io_one[31]; + assign \mprj_pads.vccd_conb[30] = mprj_io_one[30]; + assign \mprj_pads.vccd_conb[29] = mprj_io_one[29]; + assign \mprj_pads.vccd_conb[28] = mprj_io_one[28]; + assign \mprj_pads.vccd_conb[27] = mprj_io_one[27]; + assign \mprj_pads.vccd_conb[26] = mprj_io_one[26]; + assign \mprj_pads.vccd_conb[25] = mprj_io_one[25]; + assign \mprj_pads.vccd_conb[24] = mprj_io_one[24]; + assign \mprj_pads.vccd_conb[23] = mprj_io_one[23]; + assign \mprj_pads.vccd_conb[22] = mprj_io_one[22]; + assign \mprj_pads.vccd_conb[21] = mprj_io_one[21]; + assign \mprj_pads.vccd_conb[20] = mprj_io_one[20]; + assign \mprj_pads.vccd_conb[19] = mprj_io_one[19]; + assign \mprj_pads.vccd_conb[18] = mprj_io_one[18]; + assign \mprj_pads.vccd_conb[17] = mprj_io_one[17]; + assign \mprj_pads.vccd_conb[16] = mprj_io_one[16]; + assign \mprj_pads.vccd_conb[15] = mprj_io_one[15]; + assign \mprj_pads.vccd_conb[14] = mprj_io_one[14]; + assign \mprj_pads.vccd_conb[13] = mprj_io_one[13]; + assign \mprj_pads.vccd_conb[12] = mprj_io_one[12]; + assign \mprj_pads.vccd_conb[11] = mprj_io_one[11]; + assign \mprj_pads.vccd_conb[10] = mprj_io_one[10]; + assign \mprj_pads.vccd_conb[9] = mprj_io_one[9]; + assign \mprj_pads.vccd_conb[8] = mprj_io_one[8]; + assign \mprj_pads.vccd_conb[7] = mprj_io_one[7]; + assign \mprj_pads.vccd_conb[6] = mprj_io_one[6]; + assign \mprj_pads.vccd_conb[5] = mprj_io_one[5]; + assign \mprj_pads.vccd_conb[4] = mprj_io_one[4]; + assign \mprj_pads.vccd_conb[3] = mprj_io_one[3]; + assign \mprj_pads.vccd_conb[2] = mprj_io_one[2]; + assign \mprj_pads.vccd_conb[1] = mprj_io_one[1]; + assign \mprj_pads.vccd_conb[0] = mprj_io_one[0]; + assign \mprj_pads.analog_en[37] = mprj_io_analog_en[37]; + assign \mprj_pads.analog_en[36] = mprj_io_analog_en[36]; + assign \mprj_pads.analog_en[35] = mprj_io_analog_en[35]; + assign \mprj_pads.analog_en[34] = mprj_io_analog_en[34]; + assign \mprj_pads.analog_en[33] = mprj_io_analog_en[33]; + assign \mprj_pads.analog_en[32] = mprj_io_analog_en[32]; + assign \mprj_pads.analog_en[31] = mprj_io_analog_en[31]; + assign \mprj_pads.analog_en[30] = mprj_io_analog_en[30]; + assign \mprj_pads.analog_en[29] = mprj_io_analog_en[29]; + assign \mprj_pads.analog_en[28] = mprj_io_analog_en[28]; + assign \mprj_pads.analog_en[27] = mprj_io_analog_en[27]; + assign \mprj_pads.analog_en[26] = mprj_io_analog_en[26]; + assign \mprj_pads.analog_en[25] = mprj_io_analog_en[25]; + assign \mprj_pads.analog_en[24] = mprj_io_analog_en[24]; + assign \mprj_pads.analog_en[23] = mprj_io_analog_en[23]; + assign \mprj_pads.analog_en[22] = mprj_io_analog_en[22]; + assign \mprj_pads.analog_en[21] = mprj_io_analog_en[21]; + assign \mprj_pads.analog_en[20] = mprj_io_analog_en[20]; + assign \mprj_pads.analog_en[19] = mprj_io_analog_en[19]; + assign \mprj_pads.analog_en[18] = mprj_io_analog_en[18]; + assign \mprj_pads.analog_en[17] = mprj_io_analog_en[17]; + assign \mprj_pads.analog_en[16] = mprj_io_analog_en[16]; + assign \mprj_pads.analog_en[15] = mprj_io_analog_en[15]; + assign \mprj_pads.analog_en[14] = mprj_io_analog_en[14]; + assign \mprj_pads.analog_en[13] = mprj_io_analog_en[13]; + assign \mprj_pads.analog_en[12] = mprj_io_analog_en[12]; + assign \mprj_pads.analog_en[11] = mprj_io_analog_en[11]; + assign \mprj_pads.analog_en[10] = mprj_io_analog_en[10]; + assign \mprj_pads.analog_en[9] = mprj_io_analog_en[9]; + assign \mprj_pads.analog_en[8] = mprj_io_analog_en[8]; + assign \mprj_pads.analog_en[7] = mprj_io_analog_en[7]; + assign \mprj_pads.analog_en[6] = mprj_io_analog_en[6]; + assign \mprj_pads.analog_en[5] = mprj_io_analog_en[5]; + assign \mprj_pads.analog_en[4] = mprj_io_analog_en[4]; + assign \mprj_pads.analog_en[3] = mprj_io_analog_en[3]; + assign \mprj_pads.analog_en[2] = mprj_io_analog_en[2]; + assign \mprj_pads.analog_en[1] = mprj_io_analog_en[1]; + assign \mprj_pads.analog_en[0] = mprj_io_analog_en[0]; + assign \mprj_pads.enh[37] = porb_h; + assign \mprj_pads.enh[36] = porb_h; + assign \mprj_pads.enh[35] = porb_h; + assign \mprj_pads.enh[34] = porb_h; + assign \mprj_pads.enh[33] = porb_h; + assign \mprj_pads.enh[32] = porb_h; + assign \mprj_pads.enh[31] = porb_h; + assign \mprj_pads.enh[30] = porb_h; + assign \mprj_pads.enh[29] = porb_h; + assign \mprj_pads.enh[28] = porb_h; + assign \mprj_pads.enh[27] = porb_h; + assign \mprj_pads.enh[26] = porb_h; + assign \mprj_pads.enh[25] = porb_h; + assign \mprj_pads.enh[24] = porb_h; + assign \mprj_pads.enh[23] = porb_h; + assign \mprj_pads.enh[22] = porb_h; + assign \mprj_pads.enh[21] = porb_h; + assign \mprj_pads.enh[20] = porb_h; + assign \mprj_pads.enh[19] = porb_h; + assign \mprj_pads.enh[18] = porb_h; + assign \mprj_pads.enh[17] = porb_h; + assign \mprj_pads.enh[16] = porb_h; + assign \mprj_pads.enh[15] = porb_h; + assign \mprj_pads.enh[14] = porb_h; + assign \mprj_pads.enh[13] = porb_h; + assign \mprj_pads.enh[12] = porb_h; + assign \mprj_pads.enh[11] = porb_h; + assign \mprj_pads.enh[10] = porb_h; + assign \mprj_pads.enh[9] = porb_h; + assign \mprj_pads.enh[8] = porb_h; + assign \mprj_pads.enh[7] = porb_h; + assign \mprj_pads.enh[6] = porb_h; + assign \mprj_pads.enh[5] = porb_h; + assign \mprj_pads.enh[4] = porb_h; + assign \mprj_pads.enh[3] = porb_h; + assign \mprj_pads.enh[2] = porb_h; + assign \mprj_pads.enh[1] = porb_h; + assign \mprj_pads.enh[0] = porb_h; + assign \mprj_pads.slow_sel[37] = mprj_io_slow_sel[37]; + assign \mprj_pads.slow_sel[36] = mprj_io_slow_sel[36]; + assign \mprj_pads.slow_sel[35] = mprj_io_slow_sel[35]; + assign \mprj_pads.slow_sel[34] = mprj_io_slow_sel[34]; + assign \mprj_pads.slow_sel[33] = mprj_io_slow_sel[33]; + assign \mprj_pads.slow_sel[32] = mprj_io_slow_sel[32]; + assign \mprj_pads.slow_sel[31] = mprj_io_slow_sel[31]; + assign \mprj_pads.slow_sel[30] = mprj_io_slow_sel[30]; + assign \mprj_pads.slow_sel[29] = mprj_io_slow_sel[29]; + assign \mprj_pads.slow_sel[28] = mprj_io_slow_sel[28]; + assign \mprj_pads.slow_sel[27] = mprj_io_slow_sel[27]; + assign \mprj_pads.slow_sel[26] = mprj_io_slow_sel[26]; + assign \mprj_pads.slow_sel[25] = mprj_io_slow_sel[25]; + assign \mprj_pads.slow_sel[24] = mprj_io_slow_sel[24]; + assign \mprj_pads.slow_sel[23] = mprj_io_slow_sel[23]; + assign \mprj_pads.slow_sel[22] = mprj_io_slow_sel[22]; + assign \mprj_pads.slow_sel[21] = mprj_io_slow_sel[21]; + assign \mprj_pads.slow_sel[20] = mprj_io_slow_sel[20]; + assign \mprj_pads.slow_sel[19] = mprj_io_slow_sel[19]; + assign \mprj_pads.slow_sel[18] = mprj_io_slow_sel[18]; + assign \mprj_pads.slow_sel[17] = mprj_io_slow_sel[17]; + assign \mprj_pads.slow_sel[16] = mprj_io_slow_sel[16]; + assign \mprj_pads.slow_sel[15] = mprj_io_slow_sel[15]; + assign \mprj_pads.slow_sel[14] = mprj_io_slow_sel[14]; + assign \mprj_pads.slow_sel[13] = mprj_io_slow_sel[13]; + assign \mprj_pads.slow_sel[12] = mprj_io_slow_sel[12]; + assign \mprj_pads.slow_sel[11] = mprj_io_slow_sel[11]; + assign \mprj_pads.slow_sel[10] = mprj_io_slow_sel[10]; + assign \mprj_pads.slow_sel[9] = mprj_io_slow_sel[9]; + assign \mprj_pads.slow_sel[8] = mprj_io_slow_sel[8]; + assign \mprj_pads.slow_sel[7] = mprj_io_slow_sel[7]; + assign \mprj_pads.slow_sel[6] = mprj_io_slow_sel[6]; + assign \mprj_pads.slow_sel[5] = mprj_io_slow_sel[5]; + assign \mprj_pads.slow_sel[4] = mprj_io_slow_sel[4]; + assign \mprj_pads.slow_sel[3] = mprj_io_slow_sel[3]; + assign \mprj_pads.slow_sel[2] = mprj_io_slow_sel[2]; + assign \mprj_pads.slow_sel[1] = mprj_io_slow_sel[1]; + assign \mprj_pads.slow_sel[0] = mprj_io_slow_sel[0]; + assign \flash_io0_mode[2] = flash_io0_ieb_core; + assign \flash_io0_mode[1] = flash_io0_ieb_core; + assign \flash_io0_mode[0] = flash_io0_oeb_core; + assign \mprj_pads.analog_io[28] = mprj_analog_io[28]; + assign \mprj_pads.analog_io[27] = mprj_analog_io[27]; + assign \mprj_pads.analog_io[26] = mprj_analog_io[26]; + assign \mprj_pads.analog_io[25] = mprj_analog_io[25]; + assign \mprj_pads.analog_io[24] = mprj_analog_io[24]; + assign \mprj_pads.analog_io[23] = mprj_analog_io[23]; + assign \mprj_pads.analog_io[22] = mprj_analog_io[22]; + assign \mprj_pads.analog_io[21] = mprj_analog_io[21]; + assign \mprj_pads.analog_io[20] = mprj_analog_io[20]; + assign \mprj_pads.analog_io[19] = mprj_analog_io[19]; + assign \mprj_pads.analog_io[18] = mprj_analog_io[18]; + assign \mprj_pads.analog_io[17] = mprj_analog_io[17]; + assign \mprj_pads.analog_io[16] = mprj_analog_io[16]; + assign \mprj_pads.analog_io[15] = mprj_analog_io[15]; + assign \mprj_pads.analog_io[14] = mprj_analog_io[14]; + assign \mprj_pads.analog_io[13] = mprj_analog_io[13]; + assign \mprj_pads.analog_io[12] = mprj_analog_io[12]; + assign \mprj_pads.analog_io[11] = mprj_analog_io[11]; + assign \mprj_pads.analog_io[10] = mprj_analog_io[10]; + assign \mprj_pads.analog_io[9] = mprj_analog_io[9]; + assign \mprj_pads.analog_io[8] = mprj_analog_io[8]; + assign \mprj_pads.analog_io[7] = mprj_analog_io[7]; + assign \mprj_pads.analog_io[6] = mprj_analog_io[6]; + assign \mprj_pads.analog_io[5] = mprj_analog_io[5]; + assign \mprj_pads.analog_io[4] = mprj_analog_io[4]; + assign \mprj_pads.analog_io[3] = mprj_analog_io[3]; + assign \mprj_pads.analog_io[2] = mprj_analog_io[2]; + assign \mprj_pads.analog_io[1] = mprj_analog_io[1]; + assign \mprj_pads.analog_io[0] = mprj_analog_io[0]; + assign \flash_io1_mode[2] = flash_io1_ieb_core; + assign \flash_io1_mode[1] = flash_io1_ieb_core; + assign \flash_io1_mode[0] = flash_io1_oeb_core; + assign \mprj_pads.inp_dis[37] = mprj_io_inp_dis[37]; + assign \mprj_pads.inp_dis[36] = mprj_io_inp_dis[36]; + assign \mprj_pads.inp_dis[35] = mprj_io_inp_dis[35]; + assign \mprj_pads.inp_dis[34] = mprj_io_inp_dis[34]; + assign \mprj_pads.inp_dis[33] = mprj_io_inp_dis[33]; + assign \mprj_pads.inp_dis[32] = mprj_io_inp_dis[32]; + assign \mprj_pads.inp_dis[31] = mprj_io_inp_dis[31]; + assign \mprj_pads.inp_dis[30] = mprj_io_inp_dis[30]; + assign \mprj_pads.inp_dis[29] = mprj_io_inp_dis[29]; + assign \mprj_pads.inp_dis[28] = mprj_io_inp_dis[28]; + assign \mprj_pads.inp_dis[27] = mprj_io_inp_dis[27]; + assign \mprj_pads.inp_dis[26] = mprj_io_inp_dis[26]; + assign \mprj_pads.inp_dis[25] = mprj_io_inp_dis[25]; + assign \mprj_pads.inp_dis[24] = mprj_io_inp_dis[24]; + assign \mprj_pads.inp_dis[23] = mprj_io_inp_dis[23]; + assign \mprj_pads.inp_dis[22] = mprj_io_inp_dis[22]; + assign \mprj_pads.inp_dis[21] = mprj_io_inp_dis[21]; + assign \mprj_pads.inp_dis[20] = mprj_io_inp_dis[20]; + assign \mprj_pads.inp_dis[19] = mprj_io_inp_dis[19]; + assign \mprj_pads.inp_dis[18] = mprj_io_inp_dis[18]; + assign \mprj_pads.inp_dis[17] = mprj_io_inp_dis[17]; + assign \mprj_pads.inp_dis[16] = mprj_io_inp_dis[16]; + assign \mprj_pads.inp_dis[15] = mprj_io_inp_dis[15]; + assign \mprj_pads.inp_dis[14] = mprj_io_inp_dis[14]; + assign \mprj_pads.inp_dis[13] = mprj_io_inp_dis[13]; + assign \mprj_pads.inp_dis[12] = mprj_io_inp_dis[12]; + assign \mprj_pads.inp_dis[11] = mprj_io_inp_dis[11]; + assign \mprj_pads.inp_dis[10] = mprj_io_inp_dis[10]; + assign \mprj_pads.inp_dis[9] = mprj_io_inp_dis[9]; + assign \mprj_pads.inp_dis[8] = mprj_io_inp_dis[8]; + assign \mprj_pads.inp_dis[7] = mprj_io_inp_dis[7]; + assign \mprj_pads.inp_dis[6] = mprj_io_inp_dis[6]; + assign \mprj_pads.inp_dis[5] = mprj_io_inp_dis[5]; + assign \mprj_pads.inp_dis[4] = mprj_io_inp_dis[4]; + assign \mprj_pads.inp_dis[3] = mprj_io_inp_dis[3]; + assign \mprj_pads.inp_dis[2] = mprj_io_inp_dis[2]; + assign \mprj_pads.inp_dis[1] = mprj_io_inp_dis[1]; + assign \mprj_pads.inp_dis[0] = mprj_io_inp_dis[0]; + assign \mprj_io_enh[37] = porb_h; + assign \mprj_io_enh[36] = porb_h; + assign \mprj_io_enh[35] = porb_h; + assign \mprj_io_enh[34] = porb_h; + assign \mprj_io_enh[33] = porb_h; + assign \mprj_io_enh[32] = porb_h; + assign \mprj_io_enh[31] = porb_h; + assign \mprj_io_enh[30] = porb_h; + assign \mprj_io_enh[29] = porb_h; + assign \mprj_io_enh[28] = porb_h; + assign \mprj_io_enh[27] = porb_h; + assign \mprj_io_enh[26] = porb_h; + assign \mprj_io_enh[25] = porb_h; + assign \mprj_io_enh[24] = porb_h; + assign \mprj_io_enh[23] = porb_h; + assign \mprj_io_enh[22] = porb_h; + assign \mprj_io_enh[21] = porb_h; + assign \mprj_io_enh[20] = porb_h; + assign \mprj_io_enh[19] = porb_h; + assign \mprj_io_enh[18] = porb_h; + assign \mprj_io_enh[17] = porb_h; + assign \mprj_io_enh[16] = porb_h; + assign \mprj_io_enh[15] = porb_h; + assign \mprj_io_enh[14] = porb_h; + assign \mprj_io_enh[13] = porb_h; + assign \mprj_io_enh[12] = porb_h; + assign \mprj_io_enh[11] = porb_h; + assign \mprj_io_enh[10] = porb_h; + assign \mprj_io_enh[9] = porb_h; + assign \mprj_io_enh[8] = porb_h; + assign \mprj_io_enh[7] = porb_h; + assign \mprj_io_enh[6] = porb_h; + assign \mprj_io_enh[5] = porb_h; + assign \mprj_io_enh[4] = porb_h; + assign \mprj_io_enh[3] = porb_h; + assign \mprj_io_enh[2] = porb_h; + assign \mprj_io_enh[1] = porb_h; + assign \mprj_io_enh[0] = porb_h; + assign \mprj_pads.ib_mode_sel[37] = mprj_io_ib_mode_sel[37]; + assign \mprj_pads.ib_mode_sel[36] = mprj_io_ib_mode_sel[36]; + assign \mprj_pads.ib_mode_sel[35] = mprj_io_ib_mode_sel[35]; + assign \mprj_pads.ib_mode_sel[34] = mprj_io_ib_mode_sel[34]; + assign \mprj_pads.ib_mode_sel[33] = mprj_io_ib_mode_sel[33]; + assign \mprj_pads.ib_mode_sel[32] = mprj_io_ib_mode_sel[32]; + assign \mprj_pads.ib_mode_sel[31] = mprj_io_ib_mode_sel[31]; + assign \mprj_pads.ib_mode_sel[30] = mprj_io_ib_mode_sel[30]; + assign \mprj_pads.ib_mode_sel[29] = mprj_io_ib_mode_sel[29]; + assign \mprj_pads.ib_mode_sel[28] = mprj_io_ib_mode_sel[28]; + assign \mprj_pads.ib_mode_sel[27] = mprj_io_ib_mode_sel[27]; + assign \mprj_pads.ib_mode_sel[26] = mprj_io_ib_mode_sel[26]; + assign \mprj_pads.ib_mode_sel[25] = mprj_io_ib_mode_sel[25]; + assign \mprj_pads.ib_mode_sel[24] = mprj_io_ib_mode_sel[24]; + assign \mprj_pads.ib_mode_sel[23] = mprj_io_ib_mode_sel[23]; + assign \mprj_pads.ib_mode_sel[22] = mprj_io_ib_mode_sel[22]; + assign \mprj_pads.ib_mode_sel[21] = mprj_io_ib_mode_sel[21]; + assign \mprj_pads.ib_mode_sel[20] = mprj_io_ib_mode_sel[20]; + assign \mprj_pads.ib_mode_sel[19] = mprj_io_ib_mode_sel[19]; + assign \mprj_pads.ib_mode_sel[18] = mprj_io_ib_mode_sel[18]; + assign \mprj_pads.ib_mode_sel[17] = mprj_io_ib_mode_sel[17]; + assign \mprj_pads.ib_mode_sel[16] = mprj_io_ib_mode_sel[16]; + assign \mprj_pads.ib_mode_sel[15] = mprj_io_ib_mode_sel[15]; + assign \mprj_pads.ib_mode_sel[14] = mprj_io_ib_mode_sel[14]; + assign \mprj_pads.ib_mode_sel[13] = mprj_io_ib_mode_sel[13]; + assign \mprj_pads.ib_mode_sel[12] = mprj_io_ib_mode_sel[12]; + assign \mprj_pads.ib_mode_sel[11] = mprj_io_ib_mode_sel[11]; + assign \mprj_pads.ib_mode_sel[10] = mprj_io_ib_mode_sel[10]; + assign \mprj_pads.ib_mode_sel[9] = mprj_io_ib_mode_sel[9]; + assign \mprj_pads.ib_mode_sel[8] = mprj_io_ib_mode_sel[8]; + assign \mprj_pads.ib_mode_sel[7] = mprj_io_ib_mode_sel[7]; + assign \mprj_pads.ib_mode_sel[6] = mprj_io_ib_mode_sel[6]; + assign \mprj_pads.ib_mode_sel[5] = mprj_io_ib_mode_sel[5]; + assign \mprj_pads.ib_mode_sel[4] = mprj_io_ib_mode_sel[4]; + assign \mprj_pads.ib_mode_sel[3] = mprj_io_ib_mode_sel[3]; + assign \mprj_pads.ib_mode_sel[2] = mprj_io_ib_mode_sel[2]; + assign \mprj_pads.ib_mode_sel[1] = mprj_io_ib_mode_sel[1]; + assign \mprj_pads.ib_mode_sel[0] = mprj_io_ib_mode_sel[0]; + assign \mprj_pads.oeb[37] = mprj_io_oeb[37]; + assign \mprj_pads.oeb[36] = mprj_io_oeb[36]; + assign \mprj_pads.oeb[35] = mprj_io_oeb[35]; + assign \mprj_pads.oeb[34] = mprj_io_oeb[34]; + assign \mprj_pads.oeb[33] = mprj_io_oeb[33]; + assign \mprj_pads.oeb[32] = mprj_io_oeb[32]; + assign \mprj_pads.oeb[31] = mprj_io_oeb[31]; + assign \mprj_pads.oeb[30] = mprj_io_oeb[30]; + assign \mprj_pads.oeb[29] = mprj_io_oeb[29]; + assign \mprj_pads.oeb[28] = mprj_io_oeb[28]; + assign \mprj_pads.oeb[27] = mprj_io_oeb[27]; + assign \mprj_pads.oeb[26] = mprj_io_oeb[26]; + assign \mprj_pads.oeb[25] = mprj_io_oeb[25]; + assign \mprj_pads.oeb[24] = mprj_io_oeb[24]; + assign \mprj_pads.oeb[23] = mprj_io_oeb[23]; + assign \mprj_pads.oeb[22] = mprj_io_oeb[22]; + assign \mprj_pads.oeb[21] = mprj_io_oeb[21]; + assign \mprj_pads.oeb[20] = mprj_io_oeb[20]; + assign \mprj_pads.oeb[19] = mprj_io_oeb[19]; + assign \mprj_pads.oeb[18] = mprj_io_oeb[18]; + assign \mprj_pads.oeb[17] = mprj_io_oeb[17]; + assign \mprj_pads.oeb[16] = mprj_io_oeb[16]; + assign \mprj_pads.oeb[15] = mprj_io_oeb[15]; + assign \mprj_pads.oeb[14] = mprj_io_oeb[14]; + assign \mprj_pads.oeb[13] = mprj_io_oeb[13]; + assign \mprj_pads.oeb[12] = mprj_io_oeb[12]; + assign \mprj_pads.oeb[11] = mprj_io_oeb[11]; + assign \mprj_pads.oeb[10] = mprj_io_oeb[10]; + assign \mprj_pads.oeb[9] = mprj_io_oeb[9]; + assign \mprj_pads.oeb[8] = mprj_io_oeb[8]; + assign \mprj_pads.oeb[7] = mprj_io_oeb[7]; + assign \mprj_pads.oeb[6] = mprj_io_oeb[6]; + assign \mprj_pads.oeb[5] = mprj_io_oeb[5]; + assign \mprj_pads.oeb[4] = mprj_io_oeb[4]; + assign \mprj_pads.oeb[3] = mprj_io_oeb[3]; + assign \mprj_pads.oeb[2] = mprj_io_oeb[2]; + assign \mprj_pads.oeb[1] = mprj_io_oeb[1]; + assign \mprj_pads.oeb[0] = mprj_io_oeb[0]; assign \mprj_pads.vddio = vddio; assign \mprj_pads.vssio = vssio; assign \mprj_pads.vccd = vccd; @@ -3789,39 +3803,39 @@ module chip_io(vddio_pad, vddio_pad2, vssio_pad, vssio_pad2, vccd_pad, vssd_pad, assign \mprj_pads.vssa1 = vssa1; assign \mprj_pads.vssa2 = vssa2; assign \mprj_pads.porb_h = porb_h; - assign \mprj_pads.vccd_conb[37] = mprj_io_one[37]; - assign \mprj_pads.vccd_conb[34] = mprj_io_one[34]; - assign \mprj_pads.vccd_conb[24] = mprj_io_one[24]; - assign \mprj_pads.vccd_conb[9] = mprj_io_one[9]; - assign \mprj_pads.vccd_conb[35] = mprj_io_one[35]; - assign \mprj_pads.vccd_conb[27] = mprj_io_one[27]; - assign \mprj_pads.vccd_conb[14] = mprj_io_one[14]; - assign \mprj_pads.vccd_conb[36] = mprj_io_one[36]; - assign \mprj_pads.vccd_conb[15] = mprj_io_one[15]; - assign \mprj_pads.vccd_conb[25] = mprj_io_one[25]; - assign \mprj_pads.vccd_conb[16] = mprj_io_one[16]; - assign \mprj_pads.vccd_conb[19] = mprj_io_one[19]; - assign \mprj_pads.vccd_conb[10] = mprj_io_one[10]; - assign \mprj_pads.vccd_conb[8] = mprj_io_one[8]; - assign \mprj_pads.vccd_conb[26] = mprj_io_one[26]; - assign \mprj_pads.vccd_conb[21] = mprj_io_one[21]; - assign \mprj_pads.vccd_conb[18] = mprj_io_one[18]; - assign \mprj_pads.vccd_conb[12] = mprj_io_one[12]; - assign \mprj_pads.vccd_conb[23] = mprj_io_one[23]; - assign \mprj_pads.vccd_conb[33] = mprj_io_one[33]; - assign \mprj_pads.vccd_conb[22] = mprj_io_one[22]; - assign \mprj_pads.vccd_conb[17] = mprj_io_one[17]; - assign \mprj_pads.vccd_conb[20] = mprj_io_one[20]; - assign \mprj_pads.vccd_conb[11] = mprj_io_one[11]; - assign \mprj_pads.vccd_conb[29] = mprj_io_one[29]; - assign \mprj_pads.vccd_conb[28] = mprj_io_one[28]; - assign \mprj_pads.vccd_conb[31] = mprj_io_one[31]; - assign \mprj_pads.vccd_conb[30] = mprj_io_one[30]; - assign \mprj_pads.vccd_conb[32] = mprj_io_one[32]; + assign \mprj_pads.analog_sel[24] = mprj_io_analog_sel[24]; + assign \mprj_pads.analog_sel[31] = mprj_io_analog_sel[31]; + assign \mprj_pads.analog_sel[30] = mprj_io_analog_sel[30]; + assign \mprj_pads.analog_sel[13] = mprj_io_analog_sel[13]; + assign \mprj_pads.analog_sel[21] = mprj_io_analog_sel[21]; + assign \mprj_pads.analog_sel[16] = mprj_io_analog_sel[16]; + assign \mprj_pads.analog_sel[14] = mprj_io_analog_sel[14]; + assign \dm_all[0] = gpio_mode0_core; + assign \mprj_pads.analog_sel[20] = mprj_io_analog_sel[20]; + assign \mprj_pads.analog_sel[28] = mprj_io_analog_sel[28]; + assign \mprj_pads.analog_sel[22] = mprj_io_analog_sel[22]; + assign \dm_all[1] = gpio_mode1_core; + assign \mprj_pads.analog_sel[34] = mprj_io_analog_sel[34]; + assign \mprj_pads.analog_sel[33] = mprj_io_analog_sel[33]; + assign \mprj_pads.analog_sel[27] = mprj_io_analog_sel[27]; + assign \mprj_pads.analog_sel[32] = mprj_io_analog_sel[32]; + assign \mprj_pads.analog_sel[18] = mprj_io_analog_sel[18]; + assign \mprj_pads.analog_sel[12] = mprj_io_analog_sel[12]; + assign \mprj_pads.analog_sel[25] = mprj_io_analog_sel[25]; + assign \mprj_pads.analog_sel[11] = mprj_io_analog_sel[11]; + assign \mprj_pads.analog_sel[26] = mprj_io_analog_sel[26]; + assign \mprj_pads.analog_sel[29] = mprj_io_analog_sel[29]; + assign \mprj_pads.analog_sel[23] = mprj_io_analog_sel[23]; + assign \mprj_pads.analog_sel[37] = mprj_io_analog_sel[37]; + assign \mprj_pads.analog_sel[35] = mprj_io_analog_sel[35]; + assign \mprj_pads.analog_sel[36] = mprj_io_analog_sel[36]; + assign \mprj_pads.analog_sel[17] = mprj_io_analog_sel[17]; + assign \mprj_pads.analog_sel[19] = mprj_io_analog_sel[19]; + assign \dm_all[2] = gpio_mode1_core; assign vssio_q = \mprj_pads.vssio_q ; assign vddio_q = \mprj_pads.vddio_q ; assign analog_b = \mprj_pads.analog_b ; assign analog_a = \mprj_pads.analog_a ; - assign \mprj_pads.vccd_conb[13] = mprj_io_one[13]; + assign \mprj_pads.analog_sel[15] = mprj_io_analog_sel[15]; assign mprj_io_in = { \mprj_pads.io_in[37] , \mprj_pads.io_in[36] , \mprj_pads.io_in[35] , \mprj_pads.io_in[34] , \mprj_pads.io_in[33] , \mprj_pads.io_in[32] , \mprj_pads.io_in[31] , \mprj_pads.io_in[30] , \mprj_pads.io_in[29] , \mprj_pads.io_in[28] , \mprj_pads.io_in[27] , \mprj_pads.io_in[26] , \mprj_pads.io_in[25] , \mprj_pads.io_in[24] , \mprj_pads.io_in[23] , \mprj_pads.io_in[22] , \mprj_pads.io_in[21] , \mprj_pads.io_in[20] , \mprj_pads.io_in[19] , \mprj_pads.io_in[18] , \mprj_pads.io_in[17] , \mprj_pads.io_in[16] , \mprj_pads.io_in[15] , \mprj_pads.io_in[14] , \mprj_pads.io_in[13] , \mprj_pads.io_in[12] , \mprj_pads.io_in[11] , \mprj_pads.io_in[10] , \mprj_pads.io_in[9] , \mprj_pads.io_in[8] , \mprj_pads.io_in[7] , \mprj_pads.io_in[6] , \mprj_pads.io_in[5] , \mprj_pads.io_in[4] , \mprj_pads.io_in[3] , \mprj_pads.io_in[2] , \mprj_pads.io_in[1] , \mprj_pads.io_in[0] }; endmodule