imagen que se muestra a través de FPGA (BASYS3)

0

Estoy intentando escribir un código VHDL que muestra una imagen en un monitor. El propósito es hacer algún procesamiento de imágenes con VHDL. Sin embargo, estoy teniendo problemas con este segmento de código. La imagen que estoy usando es pequeña en términos de resolución. Usando un código java que escribí, tomé todos los valores RGB de cada píxel y las ubicaciones de los píxeles, luego los valores RGB se convierten en binarios. Que los datos binarios se utilizan para dibujar la imagen. El problema debe estar con "cuándo" declaraciones. Dice que "esta construcción solo se admite en VHDL 1076-2008". ¿Cómo puedo superar este problema? Me he quedado sin ideas.

 IMAGE: process(clk) is
 begin
 if clk'event and clk = '1' then
 vgaData <=  "111111111111" when pos_x = 0 and pos_y = 0 else
 "111111111111" when pos_x = 1 and pos_y = 0 else
 "111111111111" when pos_x = 2 and pos_y = 0 else
 "111111111111" when pos_x = 3 and pos_y = 0 else
 "111111111111" when pos_x = 4 and pos_y = 0 else
 .......
 ....... (goes down and down)
 .......
 "111111111111" when pos_x = 76 and pos_y = 86 else
 "111111111111" when pos_x = 77 and pos_y = 86 else
 "111111111111" when pos_x = 78 and pos_y = 86 else
 "111111111111" when pos_x = 79 and pos_y = 86 ;
 end if;
 end process;
    
pregunta OnurTR

2 respuestas

0

Para responder a su pregunta, la asignación simultánea (antes de VHDL-2008) solo se permite fuera de un proceso. La asignación concurrente toma la forma:

target <= expression when condition (optional else)

La declaración equivalente dentro de un proceso es usar una declaración de caso. Esto se vería así:

process(inputs) is
begin
  case expression is
    when choice1 =>
      do something;
    when choice2 =>
      do something else;
    when others =>
      do something;
  end case;
end process;

Como se ha aludido en otra respuesta, también debe hacer algo con el resultado de la declaración. Si nos hace saber su problema más amplio, estaremos encantados de ayudarle.

Como nota aparte, también debe utilizar el paquete IEEE.Std_logic_1164 y la declaración "if Rising_edge (clk)" en lugar de "clk'event and clk = '1'" para la detección del borde del reloj. Este último es un poco anticuado y ahora se considera obsoleto.

    
respondido por el Vance
1

No se le permite usar 'cuando' en esa forma en un proceso. Solo en tareas fuera.
(Puede usar 'cuando' con una declaración de caso)

También ese código es bastante inusual. ¿Cómo quieres hacer una imagen de, digamos, 640x480 o 1024x768? Debe almacenar su imagen en una memoria y luego leerla usando x, & y por la dirección.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas