def METHOD_NAME( placement_verilog_d, concrete_name, *, skip_globals=False):
    modules = { module['concrete_name']: module for module in placement_verilog_d['modules']}
    global_actuals = { gs['actual'] for gs in placement_verilog_d['global_signals']}
    leaf_terminals = defaultdict(list)
    for leaf in placement_verilog_d['leaves']:
        ctn = leaf['concrete_name']
        for terminal in leaf['terminals']:
            leaf_terminals[(ctn,terminal['name'])].append( to_center(terminal['rect']))
    order, found_modules, found_leaves = compute_topoorder( modules, concrete_name)
    net_bboxes = defaultdict(SemiPerimeter)
    net_local_hpwls = {}
    for k, v in leaf_terminals.items():
        for r in v:
            net_bboxes[k].addRect( r)
    for cn in order:
        if cn in found_modules:
            logger.debug( f'Working on {cn}')
            module = modules[cn]
            local_hpwl = 0
            local_a = set()
            for instance in module['instances']:
                ctn = instance['concrete_template_name']
                if ctn in net_local_hpwls:
                    local_hpwl += net_local_hpwls[ctn]
                tr = Transformation( **instance['transformation'])
                for fa in instance['fa_map']:
                    f, a = fa['formal'], fa['actual']
                    local_a.add(a)
                    net_bboxes[(cn,a)].update(net_bboxes[(ctn,f)], tr)
                for a in global_actuals:
                    if (ctn,a) not in net_bboxes: continue
                    net_bboxes[(cn,a)].update(net_bboxes[(ctn,a)], tr)
            for a in local_a.difference(set( module['parameters']).union(global_actuals)):
                net_hpwl = net_bboxes[(cn,a)].dist()
                logger.debug( f'Accounting for hidden net {a} {net_hpwl} in {cn}')
                local_hpwl += net_hpwl
            net_local_hpwls[cn] = local_hpwl
    assert order[-1] == concrete_name
    cn = concrete_name
    module = modules[cn]
    HPWL = net_local_hpwls[cn]
    for a in set(module['parameters']).union(global_actuals):
        if skip_globals and a in global_actuals: continue
        net_hpwl = net_bboxes[(cn,a)].dist()
        logger.debug( f'Accounting for top-level (or global) net {a} {net_hpwl} in {cn}')
        HPWL += net_hpwl
    return HPWL