Загрузка данных


import sys

def fix_crosslink_nx_bitstream(input_file, output_file):
    # Магический маркер синхронизации для семейства Lattice Nexus (CrossLink-NX)
    TARGET_SIGNATURE = b'\x7B\x9B\xFF\x00'
    ALIGNMENT = 4096

    with open(input_file, 'rb') as f:
        content = f.read()
        
    # Ищем слово синхронизации
    idx = content.find(TARGET_SIGNATURE)
    if idx == -1:
        print("Ошибка: Маркер синхронизации Nexus (7B 9B FF 00) не найден!")
        sys.exit(1)
            
    # Отрезаем текстовый заголовок Radiant, оставляя чистый bitstream
    bitstream = content[idx:]
    print(f"Полезные данные найдены со смещения {idx} (0x{idx:X}). Заголовок успешно удален.")
    
    # Считаем размер и необходимый padding (дополнение) до кратности 4096
    current_size = len(bitstream)
    remainder = current_size % ALIGNMENT
    
    if remainder != 0:
        padding_needed = ALIGNMENT - remainder
        # Дописываем строго байты 0xFF (команда NOP для контроллера FPGA)
        bitstream += b'\xFF' * padding_needed
        print(f"Размер выровнен: добавлено {padding_needed} байт 0xFF. Финальный размер: {len(bitstream)} байт.")
    else:
        print(f"Размер файла идеален ({current_size} байт), выравнивание не требуется.")

    # Записываем чистый бинарник без какого-либо изменения бит
    with open(output_file, 'wb') as f:
        f.write(bitstream)
        
    print(f"Успех! Файл подготовлен для I2C CrossLink-NX: {output_file}")

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print("Использование: python3 lpc_convert.py <input.bit> <output.bin>")
        sys.exit(1)
        
    fix_crosslink_nx_bitstream(sys.argv[1], sys.argv[2])