Académique Documents
Professionnel Documents
Culture Documents
MARCOS
DISEO DIGITAL
LABORATORIO
PROFESOR : VILLAFUERTE
Mostrar una interfaz grfica usando un monitor VGA con resolucin de 1366x768.
Manipular la interfaz grfica a travs de un circuito lgico.
Marco Terico.
Conceptos.
Sistema grfico de pantalla para pc comercializado por primera vez en 1988 por
IBM (International Business Machines).
El conector que utiliza el Estndar VGA cuenta con una conexin de tres hileras de
15 pines, teniendo las variantes de DDC2, DE-9 y una tecnologa de ltima
generacin conocida como Mini-VGA que es utilizada en Dispositivos Porttiles,
siendo en todo caso adoptado universalmente por las Tarjetas Grficas tanto como
las conexiones de los Monitores disponibles en el mercado.
Los mapas de bits incluyen pxeles que son codificados por medio de un grupo de
bits de longitud determinada. La codificacin del pxel determinar el nmero de
variaciones de color que puede exhibir la imagen.
De la misma forma hay que dejar patente que tambin existe el llamado pxel
atascado que es aquel que se caracteriza porque cuenta con lo que es un color de
tipo slido, ya sea rojo o azul o verde. Y todo ello sin olvidar tampoco el pxel
caliente que es aquel de color blanco que se encuentra siempre encendido.
Adems en este tipo de arte nos encontramos con dos elementos o pilares
fundamentales: el estilo isomtrico, que es aquel con el que se consiguen efectos
tridimensionales, y el estilo no isomtrico que es aquel que se define por ser todo
aquel que no se enmarca dentro de la categora anterior.
3. Paleta de colores
El sistema de color VGA es compatible con los adaptadores EGA y CGA, y aade
otro nivel de configuracin en la parte superior. CGA fue capaz de mostrar hasta 16
colores, y EGA ampli este permitiendo cada uno de los 16 colores que se elijan de
una paleta de colores de 64 (estos 64 colores se componen de dos bits para el rojo,
verde y azul: dos bits tres canales = seis bits = 64 valores diferentes). VGA
extiende todava ms las posibilidades de este sistema mediante el aumento de la
paleta EGA de 64 entradas a 256 entradas. Dos bloques de ms de 64 colores con
tonos ms oscuros progresivamente se aadieron, a lo largo de 8 entradas "en
blanco" que se fijaron a negro. Adems de la ampliacin de la paleta, a cada una de
las 256 entradas se poda asignar un valor arbitrario de color a travs de la DAC
VGA. La BIOS EGA solamente permiti 2 bits por canal para representar a cada
entrada, mientras que VGA permita 6 bits para representar la intensidad de cada
uno de los tres primarios (rojo, azul y verde). Esto proporcion un total de 63
diferentes niveles de intensidad de rojo, verde y azul, resultando 262144 posibles
colores, cualquiera 256 podran ser asignado a la paleta (y, a su vez, de los 256,
cualquiera 16 de ellos podran ser mostradas en modos de vdeo CGA). Este
mtodo permiti nuevos colores que se utilizarn en los modos grficos EGA y
CGA, proporcionando un recordatorio de cmo los diferentes sistemas de paleta se
establecen juntos. Para definir el texto de color a rojo muy oscuro en el modo de
texto, por ejemplo, tendr que ser fijado a uno de los colores CGA (por ejemplo, el
color por defecto, n 7: gris claro.) Este color luego se mapea a uno la paleta EGA -
en el caso del color 7 de CGA, se mapea a la entrada 42 de EGA. El DAC VGA debe
ser configurado para cambiar de color 42 a rojo oscuro, y luego de inmediato
cualquier cosa que aparece en la pantalla a la luz de gris (color CGA 7) pasar a ser
de color rojo oscuro. Esta funcin se utiliza a menudo en juegos DOS de 256
colores. Mientras que los modos CGA y EGA compatibles permitan 16 colores para
ser mostrados de una vez, otros modos VGA, como el ampliamente utilizado modo
13h, permita que las 256 entradas de la paleta se mostraran en la pantalla al
mismo tiempo, y as en estos modos cualquier 256 colores podran ser vistos de los
262144 colores disponibles.
4. Resolucin de Pantalla
Para realizar el control de una VGA, necesitamos generar, hsync, es decir el tiempo
necesario para generar todos los pixeles de una lnea horizontal entera y vsync, que
es el tiempo necesario para generar todas las lneas de una pantalla entera (frame).
Por lo tanto se debe tener en cuenta que los valores se debern calcular en funcin
de la pantalla (640x480) y la frecuencia (25MHz), lo que significa que 25 Mpixeles
se procesan en un segundo.
Sincronismo Horizontal
Un periodo de una lnea horizontal contiene 800 pixeles que se pueden dividir en
cuatro regiones:
Display: regin en la que se visualizan los pixeles, su longitud es de 640 pixeles.
Retrazado: cuando el pixel vuelve al borde izquierdo, de manera que la seal de
video est deshabilitada (96 pixeles)
Borde derecho: Final de la zona de visualizacin, la seal de video debe ser
deshabilitada(16 pixeles), se suele conocer como front porch
Borde izquierdo: Inicio de la regin de visualizacin, la seal de video debe estar
deshabilitada (48pixeles), se suele conocer como back porch.
De la figura hay que tener en cuenta que los bordes derecho e izquierdo
pueden variar para cada marca de monitor.
La seal hsync se puede obtener con un contador mdulo 800, empezar la
cuenta en el inicio de la regin de visualizacin, lo que nos va a permitir utilizar
el contador como coordenada x, de manera que as conseguiremos la salida
pixel_x .
La seal hsync se pone a cero entre los pixel 656 y 751. Igualmente se observa
en la que se utiliza la seal h_video_on para indicar que se est en la regin
visible (display)
Sincronismo Vertical
Durante el recorrido vertical se va pasando de una lnea a otra y de arriba abajo
toda la pantalla, esto se corresponde con el tiempo necesario para refrescar la
pantalla entera. Un periodo completo contiene 525 lneas, que se pueden
dividir en cuatro regiones:
Display: Zona en la que las lneas horizontales se ven, suelen tener 480 lineas.
Retrazado: Zona en la cual el pixel debe regresar al inicio de la pantalla, la seal de
video debe ser deshabilitada (2 lineas)
Borde superior: Regin superior de la pantalla, conocida como back porch, la seal
de video debe estar deshabilitada y debe tener 33 lineas
Borde inferior: Regin inferior de la pantalla, conocida como front porch, la seal
de video debe estar deshabilitada y debe tener 10 lineas
6. Controlador de VGA
El esquema ms elementa de un controlador de VGA
Programa principal:
VGA.vhdl
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
Entity VGA is
port(clock_50: in std_logic;
vga_hs,vga_vs: out std_logic;
vga_r,vga_g,vga_b: out std_logic_vector(3 downto 0);
key: in std_logic_vector(2 downto 0);
sw: in std_logic_vector(1 downto 0));
end VGA;
component SYNC is
port(clk: in std_logic;
hsync: out std_logic;
vsync: out std_logic;
r,g,b: out std_logic_vector(3 downto 0);
keys: in std_logic_vector(2 downto 0);
s: in std_logic_vector(1 downto 0));
end main;
--Sync.vhdl
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.my.all;
entity SYNC is
port(clk: in std_logic;
hsync,vsync: out std_logic;
r,g,b: out std_logic_vector(3 downto 0);
keys: in std_logic_vector(2 downto 0);
s: in std_logic_vector(1 downto 0));
end SYNC;
begin
SQ(hpos,vpos,sq_x1,sq_y1,rgb,draw1);
SQ(hpos,vpos,sq_x2,sq_y2,rgb,draw2);
process(clk)
begin
if(clk' event and clk='1') then
if draw1='1' then
if s(0)='1' then
r<= (others=>'1');
g<= (others=>'0');
b<= (others=>'0');
else
r<= (others=>'1');
g<= (others=>'1');
b<= (others=>'1');
end if;
end if;
if draw2='1' then
if s(1)='1' then
r<= (others=>'1');
g<= (others=>'0');
b<= (others=>'0');
else
r<= (others=>'1');
g<= (others=>'1');
b<= (others=>'1');
end if;
end if;
if s(0)='1' then
if keys(2)= '0' and keys(1)='0' then
sq_y1<=sq_y1+5;
elsif keys(2)= '0' and keys(0)='0' then
sq_y1<=sq_y1-5;
elsif keys(0)= '0' then
sq_x1<=sq_x1+5;
elsif keys(1)= '0' then
sq_x1<=sq_x1-5;
end if;
end if;
if s(1)='1' then
if keys(2)= '0' and keys(1)='0' then
sq_y2<=sq_y2+5;
elsif keys(2)= '0' and keys(0)='0' then
sq_y2<=sq_y2-5;
elsif keys(0)= '0' then
sq_x2<=sq_x2+5;
elsif keys(1)= '0' then
sq_x2<=sq_x2-5;
end if;
end if;
vpos<=0;
end if;
end if;
if ((hpos>0 and hpos<408) or (vpos>0 and vpos <42)) then --((hpos>0 and
hpos<408) or (vpos>0 and vpos <42))
r<= (others=>'0');
g<= (others=>'0');
b<= (others=>'0');
end if;
end if;
end process;
end MAIN;
--My.vhdl
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package MY is
procedure SQ(signal Xcur,Ycur,Xpos,Ypos: in integer; signal RGB: out
std_logic_vector(3 downto 0); signal DRAW: out std_logic);
END MY;
package body My is
procedure SQ(signal Xcur,Ycur,Xpos,Ypos: in integer; signal RGB: out
std_logic_vector(3 downto 0); signal DRAW: out std_logic) is
begin
Cada lnea comienza con el estado "BAJA" en hsync. Cada marco con la seal de "bajo"
en la vsync.
Antes y despus de cada sincronizacin. Las seales RGB tambin deben ir bajo para
un nmero especfico de ciclos de reloj Estos perodos se denominan porche delantero
y trasero.Es muy importante, o de lo contrario su monitor no reconoce la seal de
vdeo.
La lnea horizontal se compone de 1280 pixles visibles, 48 pxeles para FP y 248 pxeles
para BP. 112 pxeles para impulso de sincronizacin.
Todos junto hace que la lnea horizontal por 1688 pxeles de largo. La lnea vertical
tiene 1024 pxeles visibles, FP: 1 pxel, BP: 38 pxeles, y 3 pxeles para sincronizacin.
Suma: 1066 pxeles.
Eso significa que mientras HPOS est entre 0 y 408 (48 FP + 112 + 248 de
sincronizacin BP), los tres canales de color estn sosteniendo el valor cero.
Para mostrar lo cuadrados nos limitaremos a dibujar una horizontal y una lnea vertical
que pasa por el centro de la pantalla.
Para desarrollar el cuadrado, el Xcur est entre Xpos y Xpos + 100, y lo mismo es cierto
para Y, fijamos la salida RGB a blanco, y "dibujar" -signal a '1'.
Esto nos dar un cuadrado con una longitud de lado de 100 pixeles.
Para el control de la plaza usamos tres teclas y dos interruptores en tablero de Altera
DE1.
En primer lugar tengo que aadir que el componente SYNC y luego a la entidad
principal.
Si se selecciona la primera casilla S (0) = '1' dan el color rojo, de lo contrario la dibujan
en blanco.
Si no hay ningn dibujo est en marcha de nuevo la salida VGA a negro. es por eso que
es muy conveniente tener indicador separado "dibujar" para cada procedimiento, por
lo que puede detectar qu figura se est generando actualmente.
Finalmente vamos a actualizar la posicin cuadrado con cada nueva trama. Esto
significa que si VPOS se resetea a 0, tambin cambiamos la posicin cuadrada de
acuerdo con el estado de "claves".
RESULTADOS:
ASIGNACION DE PINES
FOTOS DE LA IMPLEMENTACION: