TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: djbaran 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! :-/