en un proyecto que he realizado recientemente (Quartus, Cyclone 2, altera) quería producir tanto una salida gráfica VGA como una salida de sonido (a través de otra placa). He notado que una gran cantidad de celdas lógicas se colocaron en arreglos (que contenían una tabla de búsqueda de ondas sinusoidales, por ejemplo). Por otra parte, he creado muchos objetos gráficos que contienen mapas de bits de grandes números (500X300 [vector de color de * 8 bits por cada celda]) que, obviamente, debían guardarse en algún lugar, pero nunca ocuparon espacio (bits de memoria) en mi pizarra.
Quiero decir, deberían haber tomado mucho más espacio que cualquier otro arreglo que haya tenido (si es que lo estoy resumiendo poco a poco). He hecho todos los objetos desde cero, creando todos los arreglos de la misma manera, por lo que no hay diferencia en ninguna definición que conozca, pero de alguna manera el Quartus / Chip los maneja de manera diferente y optimiza la utilización del espacio para ellos, transfiriéndolos a LC combinacionales y registros, en lugar de los bits de memoria en la placa.
¿Cómo puedo saber o controlar este comportamiento de antemano? y ¿cómo "sabe" la diferencia entre una matriz de "mapa de bits de color" a una matriz de "valores sinusoidales" por ejemplo (ambos de 8 bits por celda)? en este caso, fue una sorpresa que realmente funcionara (tomando solo ~ 15% de los bits de memoria, pero ~ 70% de los elementos lógicos). * No usé ningún asistente de megafunciones.