def _default_bounds(signal):
    """Create a default list of bounds for a given signal description
    If no bounds were specified, they default to [0, 0]:
        ['name', 0, 0, 0, 0]
    If no bits of the port were picked, the whole port is picked:
        ['name', x, y, x, y]
    A signal may use a slice of a port
    This example uses the 6th and the 7th bits of the 16-bit port:
        ['example_2_of_16', 15, 0, 7, 6]

    :param signal can be one of:
        'port_name'
        ['port_name', upper_bound, lower_bound]
        ['port_name', upper_bound, lower_bound, upper_picked, lower_picked]

    :return:
        ['port_name', upper_bound, lower_bound, upper_picked, lower_picked]
    """
    # there's just the name
    if isinstance(signal, str):
        return (signal, 0, 0, 0, 0)
    else:
        # there's just the name in a list
        if len(signal) == 1:
            return signal + [0, 0, 0, 0]
        # there's the name and bounds
        if len(signal) == 3:
            return signal + [signal[1], signal[2]]
    return signal