| # Copyright (C) 2017-2020 The Project X-Ray Authors |
| # |
| # Use of this source code is governed by a ISC-style |
| # license that can be found in the LICENSE file or at |
| # https://opensource.org/licenses/ISC |
| # |
| # SPDX-License-Identifier: ISC |
| proc puts_list {l} { |
| foreach e $l {puts $e} |
| } |
| |
| proc get_carry_cyinit_mux_cfg {carry_cell} { |
| set cyinit_pin [get_pins -of_objects $carry_cell -filter {REF_PIN_NAME == CYINIT}] |
| set cyinit_net [get_nets -quiet -of_objects $cyinit_pin] |
| |
| if {[string last "<const0>" $cyinit_net] > 0} { return "zro" } |
| if {[string last "<const1>" $cyinit_net] > 0} { return "one" } |
| |
| set ax_pin [get_site_pins -of_objects [get_sites -of_objects $carry_cell] */AX] |
| set ax_net [get_nets -quiet -of_objects $ax_pin] |
| if {"$cyinit_net" == "$ax_net"} { return "ax " } |
| |
| set cin_pin [get_site_pins -of_objects [get_sites -of_objects $carry_cell] */CIN] |
| set cin_net [get_nets -quiet -of_objects $cin_pin] |
| if {"$cyinit_net" == "$cin_net"} { return "cin" } |
| |
| return "???" |
| } |
| |
| proc get_carry_di0_mux_cfg {carry_cell} { |
| set di0_pin [get_pins -of_objects $carry_cell -filter {REF_PIN_NAME == DI[0]}] |
| set di0_net [get_nets -quiet -of_objects $di0_pin] |
| |
| set ax_pin [get_site_pins -of_objects [get_sites -of_objects $carry_cell] */AX] |
| set ax_net [get_nets -quiet -of_objects $ax_pin] |
| if {"$di0_net" == "$ax_net"} { return "ax " } |
| |
| return "o5 " |
| } |
| |
| proc get_carry_di1_mux_cfg {carry_cell} { |
| set di1_pin [get_pins -of_objects $carry_cell -filter {REF_PIN_NAME == DI[1]}] |
| set di1_net [get_nets -quiet -of_objects $di1_pin] |
| |
| set bx_pin [get_site_pins -of_objects [get_sites -of_objects $carry_cell] */BX] |
| set bx_net [get_nets -quiet -of_objects $bx_pin] |
| if {"$di1_net" == "$bx_net"} { return "bx " } |
| |
| return "o5 " |
| } |
| |
| proc get_carry_di2_mux_cfg {carry_cell} { |
| set di2_pin [get_pins -of_objects $carry_cell -filter {REF_PIN_NAME == DI[2]}] |
| set di2_net [get_nets -quiet -of_objects $di2_pin] |
| |
| set cx_pin [get_site_pins -of_objects [get_sites -of_objects $carry_cell] */CX] |
| set cx_net [get_nets -quiet -of_objects $cx_pin] |
| if {"$di2_net" == "$cx_net"} { return "cx " } |
| |
| return "o5 " |
| } |
| |
| proc get_carry_di3_mux_cfg {carry_cell} { |
| set di3_pin [get_pins -of_objects $carry_cell -filter {REF_PIN_NAME == DI[3]}] |
| set di3_net [get_nets -quiet -of_objects $di3_pin] |
| |
| set dx_pin [get_site_pins -of_objects [get_sites -of_objects $carry_cell] */DX] |
| set dx_net [get_nets -quiet -of_objects $dx_pin] |
| if {"$di3_net" == "$dx_net"} { return "dx " } |
| |
| return "o5 " |
| } |
| |
| proc list_carry_cfg {} { |
| foreach carry_cell [get_cells -hierarchical -filter {REF_NAME == CARRY4}] { |
| set cyinit_mux_cfg [get_carry_cyinit_mux_cfg $carry_cell] |
| set di0_mux_cfg [get_carry_di0_mux_cfg $carry_cell] |
| set di1_mux_cfg [get_carry_di1_mux_cfg $carry_cell] |
| set di2_mux_cfg [get_carry_di2_mux_cfg $carry_cell] |
| set di3_mux_cfg [get_carry_di3_mux_cfg $carry_cell] |
| puts "[get_bels -of_objects $carry_cell] $cyinit_mux_cfg $di0_mux_cfg $di1_mux_cfg $di2_mux_cfg $di3_mux_cfg" |
| } |
| } |