StanfordAHA/garnet

Tapeout: useless corner cell, rte net manipulations?

Opened this issue · 0 comments

Executive summary:
Never-executed code, in existing tapeout scripts, appears to be trying to disconnect-manipulate RTE nets. Is this code supposed to work? And/or should it be deleted?

Details:
Padframe floorplan includes the below legacy code, which I copied to io-fillers.tcl (yes, I know it has nothing to do with fillers, but that's a separate issue). Stevo's comment tells what the code is apparently trying to do. But problems exist. For example, get_db insts pads/corner* returns the empty set---to get corner cells you would instead need to do get_db insts corner*---so up til now this code has never been executed.

https://github.com/StanfordAHA/garnet/blob/padframe/mflowgen/pad_frame/custom-init/outputs/io-fillers.tcl

    # [stevo]: connect corner cells to RTE
    # delete and recreate cell to set "is_physical" attribute to false
    # (can't connect net to pin of physical-only cell)
    #     
    # FIXME steveri 1912 - "get_db insts pads/corner*" does
    # nothing. Did you mean to say "get_db insts corner*"?
    # NOTE THAT elsewhere (floorplan.tcl maybe) we *disconnected* all the RTE pins
    foreach inst [get_db insts pads/corner*] {
      puts "this line is never reached :("
      set loc [get_db $inst .location]
      set ori [get_db $inst .orient]
      set name [get_db $inst .name]
      delete_inst -inst $name
      create_inst -inst $name -cell PCORNER  -status fixed \
          -location [lindex $loc 0] -orient [string toupper $ori]
      # connect_pin -net pads/rte -pin RTE -inst $name
      # connect_pin -inst $name -pin RTE -net pads/rte
        attachTerm $name RTE pads/rte
    }

Also: earlier, in floorplan.tcl, we disconnected all the RTE pins from IO ring

https://github.com/StanfordAHA/garnet/blob/padframe/mflowgen/pad_frame/custom-init/outputs/floorplan.tcl

# Disconnect IO-pad RTE pins
foreach x \
    [get_property \
         [get_cells -filter "ref_name=~*PDD* || ref_name=~*PRW* || ref_name=~*FILL*" ]\
         full_name \
        ] \
    {
        # disconnect_pin -inst $x -pin RTE
        detachTerm $x RTE
    }

Similarly, back in io_fillers.tcl, there is the following code that does nothing, because apparently rte and esd nets do not exist at this point in our design...

https://github.com/StanfordAHA/garnet/blob/padframe/mflowgen/pad_frame/custom-init/outputs/io-fillers.tcl

    # At this point there are no rte or esd nets (see above)
    # (e.g. 'get_db nets rte' returns empty set)
    # so this does nothing as well
    set_db [get_db nets rte] .skip_routing true
    set_db [get_db nets rte] .dont_touch true
    set_db [get_db nets esd] .skip_routing true
    set_db [get_db nets esd] .dont_touch true

My questions: should we try and restore this code so that it does what it originally seems to want to do? Or should we ignore it because til now we have been "successfully" building the chip without it and/or because we don't want to do this anyway?