def propagate_XIPHY_bits_in_column(database, tiles_by_grid, tile_frames_map):
    xiphy_frames, xiphy_words = localutil.get_entry('XIPHY', 'CLB_IO_CLK')
    rclk_frames, rclk_words = localutil.get_entry('RCLK_INT_L', 'CLB_IO_CLK')
    _, ecc_words = localutil.get_entry('ECC', 'CLB_IO_CLK')

    for tile, tile_data in database.items():
        if tile_data['type'] != 'RCLK_XIPHY_OUTER_RIGHT':
            continue

        above_tile = tiles_by_grid[tile_data['grid_x'], tile_data['grid_y'] -
                                   1]
        below_tile = tiles_by_grid[tile_data['grid_x'], tile_data['grid_y'] +
                                   15]

        assert database[above_tile]['type'] == 'XIPHY_BYTE_RIGHT'
        assert database[below_tile]['type'] == 'XIPHY_BYTE_RIGHT'

        baseaddr1 = int(database[above_tile]['bits']['CLB_IO_CLK']['baseaddr'],
                        0)
        offset1 = database[above_tile]['bits']['CLB_IO_CLK']['offset']
        offset1 -= rclk_words
        localutil.add_tile_bits(tile, database[tile], baseaddr1, offset1,
                                rclk_frames, rclk_words, tile_frames_map)

        baseaddr2 = int(database[below_tile]['bits']['CLB_IO_CLK']['baseaddr'],
                        0)
        offset2 = database[below_tile]['bits']['CLB_IO_CLK']['offset']
        offset2 += xiphy_words
        offset2 += ecc_words
        localutil.add_tile_bits(tile, database[tile], baseaddr2, offset2,
                                rclk_frames, rclk_words, tile_frames_map)