Hola, estoy tratando de leer datos de un archivo que contiene 62500 líneas de números binarios de 12 bits para instanciar mi matriz 2D (una especie de RAM). Sin embargo, mi problema es que este proceso ocurre en un ciclo de reloj, lo que ejerce una presión extrema sobre el hardware y la síntesis no termina. Quiero leer una línea de datos del archivo en cada ciclo de reloj. Sin embargo, no puedo porque la función a la que llamo no está muy abierta a modificaciones. ¿Cómo puedo leer una sola línea de datos en cada ciclo de reloj?
Esto es lo que tengo hasta ahora después de semanas de investigación y experimentación
type RamType is array(0 to PICTURE_WIDTH_HEIGHT - 1, 0 to
PICTURE_WIDTH_HEIGHT - 1) of bit_vector(11 downto 0);
impure function InitRamFromFile (RamFileName : in string) return RamType is
FILE RamFile : text is in RamFileName;
variable RamFileLine : line;
variable RAM : RamType;
begin
for y in 0 to 249 loop
for x in 0 to 249 loop
readline (RamFile, RamFileLine);
read (RamFileLine, RAM(x,y));
end loop;
end loop;
return RAM;
end function;
signal RAM : RamType :=
InitRamFromFile("\ASUS\Users\AsusPc\Desktop\project_son\pictureData.data");
Intenté reemplazar los bucles FOR anidados anteriores con IF anidados y convertir las variables anteriores en señales para hacer que este proceso sea adecuado para mi propósito, pero recibí errores que simplemente dicen que RamFile y RamFileLine deben ser variables. Ya me he quedado sin ideas. Por favor, ayúdame. Estoy usando la placa BASYS3 y el entorno Vivado2017.2.
Por cierto, picture_height_width es 250 y no hice lo que dije arriba en la función. Me deshice de la función decleración y traté de hacerlo de manera clásica.
pictureData.data contiene datos binarios puros y nada más.