Juer, Futu, aparte de metralleta de preguntas, te explicas como el ass

Entiendo que tienes un proceso A, que comprueba colisión con otro proceso del mismo tipo, y encuentra al proceso B, y guardas el ID en una variable global... ¿por qué? ¿Por qué no haces las operaciones guardando el valor en una privada, si sólo este proceso va a llamar al ID de B?
Luego coges el proceso C y haces colisión con procesos del mismo tipo y guardas el nuevo ID en la global, pero en lugar de guardar D, guarda B ¿Lo he entendido bien? Si ha guardado B es porque: collision ha devuelto B, y has guardado dicho valor allí. Si no es correcto:
- Comprueba el valor devuelto por collision: lo guardas en una variable privada y escribes la variable privada, no vayas a llamar dos veces seguidas a collision, que te conozco, y eso hace que cada llamada devuelva un valor diferente.
- Comprueba que tras guardar el valor en la global, esta se ha modificado realmente.
Por cierto, los problemas que tenías con los 8 bits de color ¿Cargaste la paleta al crear el FPG? Y luego, al cargar dos FPGs diferentes ¿Cargaste ambas paletas? y si lo hiciste ¿Asignaste la paleta a su proceso correspondiente?