blob: 66e422b005d65300074a9c7380b78a70fcd15911 [file] [log] [blame]
# 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"
}
}