Autor Tema: AYUDA PROGRAMA  (Leído 4448 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado wiston80

  • PIC10
  • *
  • Mensajes: 2
AYUDA PROGRAMA
« en: 16 de Mayo de 2009, 01:05:31 »
hola parceros estoy aprendiendo a trabajar en VHDL y estoy trabajando en un osciloscopio como proyecto, por ahora tengo una rutina para generar syncronismos y no me corre el programa aqui les dejo el programa y los errores que me dice ojala me pueden ayudar

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity VGA_SYNC is
    Port ( clock_25Mhz       : in  STD_LOGIC_VECTOR (0 downto 0);
           red             : in  STD_LOGIC_VECTOR (0 downto 0);
           green             : in  STD_LOGIC_VECTOR (0 downto 0);
           blue             : in  STD_LOGIC_VECTOR (0 downto 0);
           red_out          : out  STD_LOGIC_VECTOR (0 downto 0);
           green_out       : out  STD_LOGIC_VECTOR (0 downto 0);
           blue_out          : out  STD_LOGIC_VECTOR (0 downto 0);
           horiz_sync_out    : out  STD_LOGIC_VECTOR (0 downto 0);
           vert_sync_out    : out  STD_LOGIC_VECTOR (0 downto 0);
           pixel_row       : out  STD_LOGIC_VECTOR (9 downto 0);
           pixel_column    : out  STD_LOGIC_VECTOR (9 downto 0));
end VGA_SYNC;

architecture Behavioral of VGA_SYNC is

SIGNAL horiz_sync, vert_sync                : STD_LOGIC;
SIGNAL video_on, video_on_v, video_on_h    : STD_LOGIC;
SIGNAL h_count, v_count                   : STD_LOGIC_VECTOR( 9 DOWNTO 0 );

begin

video_on <= video_on_H AND video_on_V;

PROCESS
BEGIN

LINEA 56 wait until(clock_25Mhz'EVENT AND clock_25Mhz='1' );

IF ( h_count = 799 ) THEN
      h_count <= "0000000000";
ELSE
      h_count <= h_count + 1;
END IF;
IF ( h_count <= 755 ) AND (h_count >=659 ) THEN
      horiz_sync <= '0';
ELSE
      horiz_sync <= '1';
END IF;

LINEA 67 IF ( v_count >= 524 ) AND ( h_count => 699 ) THEN

      v_count <= "0000000000";
ELSIF ( h_count = 699 ) THEN
         v_count <= v_count + 1;
END IF;

LINEA 72IF ( v_count <= 494 ) AND ( v_count = >493 ) THEN

      vert_sync <= '0';
ELSE
      vert_sync <= '1';
END IF;
IF ( h_count <= 639 ) THEN
      video_on_h <= '1';
      pixel_column <= h_count;
ELSE
      video_on_h <= '0';
END IF;
IF ( v_count <= 479 ) THEN
      video_on_v <= '1';
      pixel_row <= v_count;
ELSE
      video_on_v <= '0';
END IF;

LINEA 90      red_out <= red AND video_on;
LINEA 91      green_out <= green AND video_on;
LINEA 92      blue_out <= blue AND video_on;
LINEA 93      horiz_sync_out <= horiz_sync;
LINEA 94      vert_sync_out <= vert_sync;

END PROCESS;
end Behavioral;

ERROR:HDLParsers:808  Line 56. = can not have such operands in this context.
ERROR:HDLParsers:842  Line 67. The type of the element in aggregate does not correspond to any array type.
ERROR:HDLParsers:164  Line 72. parse error, unexpected GT
ERROR:HDLParsers:808  Line 90. AND can not have such operands in this context.
ERROR:HDLParsers:808  Line 91. AND can not have such operands in this context.
ERROR:HDLParsers:808  Line 92. AND can not have such operands in this context.
ERROR:HDLParsers:800  Line 93. Type of horiz_sync_out is incompatible with type of horiz_sync.
ERROR:HDLParsers:800  Line 94. Type of vert_sync_out is incompatible with type of vert_sync.


« Última modificación: 16 de Mayo de 2009, 01:15:10 por wiston80 »

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: AYUDA PROGRAMA
« Respuesta #1 en: 18 de Mayo de 2009, 11:29:05 »
que tal winston mmm a ojo de buen cubero jejeje lo primero que esta mal es tus comparaciones pues la señal h_count y V_count son tipo std logic vector y cuando realizas la comparacion digamos "IF ( h_count = 799 ) THEN" la haces en tipo entero es decir para que la sintetizacion sea correcta ó cambias todos los valores a su correspondiente en std_logic es decir "010010011" solo es un ejemplo.

O bien cambia tus contadores a tipo integer asi debe de sintetizar espero te sirva saludos

Desconectado samfi33

  • PIC10
  • *
  • Mensajes: 6
Re: AYUDA PROGRAMA
« Respuesta #2 en: 30 de Mayo de 2009, 16:22:15 »
Hola Winston,

Con respecto a tus dudas, va lo siguiente:

1. Cuando declares un señal que tenga un solo bit, es preferible que la declares como STD_LOGIC y no como STD_LOGIC_VECTOR(0 downto 0), esta ultima es aceptada, pero crea un conflicto con el compilador cuando se compara con otra que sí es STD_LOGIC. Corrige tu entidad.

Es por este motivo que existen errores en las lineas 56, 90, 91, 92, 93 y 94.

2. Ahora con respecto a los IF... THEN, cuando compares una señal que es de tipo STD_LOGIC_VECTOR no puedes hacerlo asi (v_count >= 524), la forma correcta es:

(v_count = X"524") ; en el formato hexadecimal.
(v_count = "0000110011"); en el formato binario.

Es por este motivo los errores en la lineas 67 y 72.

Saludos desde Lima - Perú.  :lol:


Desconectado wiston80

  • PIC10
  • *
  • Mensajes: 2
Re: AYUDA PROGRAMA
« Respuesta #3 en: 02 de Junio de 2009, 01:26:22 »
Exelente me corre perfecto te agradezco mucho los estare molestando