Autor Tema: ayuda con codigo en vhdl  (Leído 4001 veces)

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

Desconectado djbaran

  • PIC10
  • *
  • Mensajes: 8
ayuda con codigo en vhdl
« en: 04 de Agosto de 2009, 14:48:57 »
hola siento molestarlos pero me gustaria saber si alguien me puede ayudar. Estoy tratando de hacer un codigo en vhdl para generar señales de vga despues de muchos intentos y mirando en varios archivos y leyendo he llegado a realizar el siguiente codigo, me gustaria que alguien me pudiera decir que le hace falta ya que no prende ni tantito el monitor :? :shock:

he aqui el codigo...

library ieee;
use ieee.std_logic_1164.all;
entity prueba is
   port(
      maestrosalida : out std_logic;--señal de reloj de salida aqui ocupo el reloj del kit a 27Mhz
      blank : out std_logic;--es una señal que necesita el procesador de vga del kit :s
      maestro : in std_logic;--es la entrada de reloj a 27Mhz
      --datos : in std_logic_vector(2 downto 0);--mi entrada de datos de los switch rgb para probar
      hsync,vsync : out std_logic;--salidas para sincronia vertical y horizontal
      datosoutred : out std_logic_vector(9 downto 0);--salida de datos rojo
      datosoutgreen : out std_logic_vector(9 downto 0);--salida de datos verde
      datosoutblue : out std_logic_vector(9 downto 0)--salida de datos azul
      );
      end prueba;

architecture comportamiento of prueba is
--declaracion de las señales que se van a generar para la interconexion de este circuito
signal conth : std_logic_vector(9 downto 0);
signal contv : std_logic_vector(24 downto 0);
signal permiso,permisov,permiso1,permiso2,permisov1,permisov2 : std_logic;
signal reset2 : std_logic;
signal reset1 : std_logic;
signal reset3 : std_logic;
signal salcol : std_logic_vector(3 downto 0);
signal menor1,menor2,menor3,menor4,menor5,menor6 : std_logic;
signal mayor1,mayor2,mayor3,mayor4,mayor5,mayor6 : std_logic;
signal color : std_logic;

--declaracion de los componentes usados generador en megawizard
component contadorchico--este contador lo realize usando las lpm's con mla herramienta del quartus 19 bits
PORT
   (
      clock      : IN STD_LOGIC ;
      sclr      : IN STD_LOGIC ;
      q      : OUT STD_LOGIC_VECTOR (9 DOWNTO 0)
   );

end component;
component comparador2--igual ue el contador lo realize con lpm
   port(
      dataa      : IN STD_LOGIC_VECTOR (24 DOWNTO 0);
      datab      : IN STD_LOGIC_VECTOR (24 DOWNTO 0);
      AgB      : OUT STD_LOGIC ;
      AlB      : OUT STD_LOGIC
   );
end component;

component contador
   port(
      clock      : IN STD_LOGIC ;
      sclr      : IN STD_LOGIC ;
      q      : OUT STD_LOGIC_VECTOR (24 DOWNTO 0)
   );
   end component;

component comparadorchico
PORT
   (
      dataa      : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
      datab      : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
      AgB      : OUT STD_LOGIC ;
      AlB      : OUT STD_LOGIC
   );
end component;
component contadordecolor
port
(
      clock      : IN STD_LOGIC ;
      sclr      : IN STD_LOGIC ;
      q      : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)
   );
end component;
begin
--se inicializan los contadores
   conteoh : contadorchico port map (maestro,reset1,conth);
   conteov : contador port map(maestro,reset2,contv);
   conteocol : contadordecolor port map(color,reset3,salcol);
   --se compara el contador chico para establecer ciertos limites
   comparacion1 : comparadorchico port map(conth,"0001101000",mayor1,menor1);
   comparacion2 : comparadorchico port map(conth,"0010011100",mayor2,menor2);
   comparacion3 : comparadorchico port map(conth,"1101001111",mayor3,menor3);
   --se compara el contador para establecer ciertos limites
   comparacion4 : comparador2 port map(contv,"0000000000000011011000000",mayor4,menor4);
   comparacion5 : comparador2 port map(contv,"0000000000110100010100000",mayor5,menor5);   
   comparacion6 : comparador2 port map(contv,"0000001101011110010100000",mayor6,menor6);
   --aqui va la lista de señales que se meten en la lista de sensibilidad
 process(salcol,menor1,menor2,menor3,menor4,menor5,menor6,mayor1,mayor2,mayor3,mayor4,mayor5,mayor6,conth,contv,reset1,reset2,permiso1,permiso2,permisov1,permisov2,permiso,permisov)
   begin
         
   if menor1='1'then--checa el primer contador si es menor al primer intervalo
      hsync<='1';
      else
      hsync<='0';--pulso de sincronia horizontal
      --si esta entre esos rangos se activa el permiso
   end if;
   if mayor2='1' then
   permiso1<='1';
      else
         permiso1<='0';
   end if;
   if menor3='1' then
   permiso2<='1';
      else
         permiso2<='0';
   end if;
   
   permiso<= permiso1 and permiso2;
   
   if menor4='1'then--checa el primer contador si es menor a 240
      vsync<='1';
      else
      vsync<='0';--pulso de sincronia vertical mandara un 1 mientras menor este en 1
      --si esta entre esos rangos se activa el permiso
   end if;
   if mayor5='1' then
   permisov1<='1';
      else
         permisov1<='0';
   end if;
   if menor6='1' then
   permisov2<='1';
      else
         permisov2<='0';
   end if;
   
   permisov<=permisov1 and permisov2;
   
   blank<= permiso and permisov;
   if contv="0000000000000011011000000" then
   color<='1';
   else
   color<='0';
   end if;
   
   if salcol="0000" then
   datosoutred <= "0000000000";
   datosoutgreen<="0000000000";
   datosoutred <= "1111111111";
   elsif salcol="0001" then
   datosoutred <= "0000000000";
   datosoutgreen<="1111111111";
   datosoutred <= "0000000000";
   elsif salcol="0010" then
   datosoutred <= "1111111111";
   datosoutgreen<="0000000000";
   datosoutred <= "0000000000";
   elsif salcol="0011" then
   datosoutred <= "0000000000";
   datosoutgreen<="1111111111";
   datosoutred <= "1111111111";
   elsif salcol="0100" then
   datosoutred <= "1111111111";
   datosoutgreen<="1111111111";
   datosoutred <= "0000000000";
   elsif salcol="0101" then
   datosoutred <= "1111111111";
   datosoutgreen<="0000000000";
   datosoutred <= "1111111111";
   elsif salcol="0110" then
   datosoutred <= "0001110000";
   datosoutgreen<="1110001111";
   datosoutred <= "0001110000";
   elsif salcol="0111" then
   datosoutred <= "1100000000";
   datosoutgreen<="0011111100";
   datosoutred <= "1100000000";
   reset3<='1';
   else
   datosoutred <= "0000000000";
   datosoutgreen<="0000000000";
   datosoutred <= "0000000000";
   reset3<='0';
   end if;
   maestrosalida<=maestro;
   
   --parte que sirve para resetear el primer contador
   if conth="1101011111" then
   reset1<='1';
   elsif conth="1101100000" then
   reset1<='1';
   else
   reset1<='0';
   end if;
   
   --parte que sirve para resetear el segundo contador
   if contv="1100111000001111001111111" then
   reset2<='1';
   elsif contv="1100111000001111010000000" then
   reset2<='1';
   else
   reset2<='0';
   end if;
end process;
end comportamiento;

estoy trabajando en un cyclone 2 en el programa quartus cualquier aclaracion con el cdigo me dicen ojala alguien me pudiera ayudar gracias! :-/


 

anything