Professional Documents
Culture Documents
Monitor
VGA (Video Graphics Array) es una norma con un estándar 640 x 480 pixeles en video activo, utilizada en los antiguos
monitores CRT (tubos de rayos catódicos) y los actuales monitores LCD. La generación de una imagen completa en
pantalla o “frame”, se realiza por el barrido de los pixeles (antiguamente haz de electrones en los CTR) en toda la
pantalla, primero de forma horizontal, brincando al siguiente renglón y barriéndolo otra vez de forma horizontal, hasta
acabar con todos los renglones y columnas. El desplazamiento comienza en la esquina superior izquierda llevándose a
cabo de izquierda a derecha y de arriba hacia abajo.
La temporización de las señales que definen la posición vertical y horizontal tiene como base la frecuencia de la
corriente eléctrica de 60Hz, aunque también existen los de 120 Hz, siendo de carácter analógica los antiguos y digitales
los modernos, utilizando dos señales de sincronía (vertical y horizontal) y las señales de color RGB (rojo verde azul) que
pueden ser de 3 bits, uno para cada color, 8 bits (3R, 3G, 2B), 24 bits (8R, 8G, 8B), etc.
La señal de sincronización horizontal y vertical está definida en la señal diente de sierra, la cuan contiene 3 partes
principales, descritas en la Figura 1. La parte principal de la señal corresponde a la rampa continua en la cual se
despliega la información en la pantalla. Durante este intervalo de tiempo, los 640 pixeles son excitados por los haces
provenientes de los cañones de electrones en los CRT o por transistores en los LCD. Finalizando esta etapa, el
desplazamiento continua, pero sin excitar los pixeles. Este tiempo se conoce como “regreso” que está conformada por
una etapa definida como “back porch” lo que permite que la señal vertical comience de nuevo en la parte izquierda de la
pantalla en el siguiente renglón, comenzando una nueva etapa del barrido, conocido como “front porch” sin enviar
información, hasta que comienza la rampa continua que permite el despliegue de los 640 pixeles de información en el
nuevo renglón.
La sincronía de video vertical puede ser de dos tipos; video continuo o video compuesto. En el video continuo, todas las
filas son excitadas. En el video compuesto primero se provee de información a las filas impares y en el siguiente frame a
las filas pares. Esto se realiza a 60 frames por segundo, por lo que el ojo humano no lo percibe y da la apariencia de una
imagen continua con movimiento fluido. Sin importar el caso, al finalizar el despliegue de todas las filas de un frame, la
señal de sincronización vertical permite regresar a la posición superior con una señal semejante a la sincronización
horizontal debido a la presencia de un “front porch” y un “back porch” en el tiempo de regreso.
Para enviar estas señales hacia el monitor, la tarjeta NEXYS 2 cuenta con un conector DB15 para el estándar VGA. Esto
nos permite conectar un monitor CRT o un monitor LCD a la tarjeta para el despliegue de la información. Las terminales
de salida se pueden observar en la Figura 2.
A continuación, se presentan dos códigos para la implementación de distintas figuras en un monitor en dos tarjetas
probadas.
------------------------------------------------------------------------------------------------------------------------------------------------------
-- Control de un monitor VGA de 640x480 implementado en la Spartan 3E
-- código para visualizar figuras en el monitor
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity vga is
port ( clk: in std_logic; --reloj de 50MHz
a : in std_logic_vector (1 downto 0);
Prácticas de Laboratorio de Dispositivos Lógicos Programables
Dr. Juan Antonio Jaramillo Gómez
constant hpixels: std_logic_vector(9 downto 0) := "1100100000"; --Valor de pixeles en linea horizontal (800)
constant vlines: std_logic_vector(9 downto 0) := "1000001001"; --Numero de lineas horizontales en pantalla (521)
constant hbp: std_logic_vector(9 downto 0) := "0010010000"; --Limite horizontal inferior (144)
constant hfp: std_logic_vector(9 downto 0) := "1100010000"; --Limite horizontal superior (784)
constant vbp: std_logic_vector(9 downto 0) := "0000011111"; --Limite vertical inferior ( 31)
constant vfp: std_logic_vector(9 downto 0) := "0111111111"; --Limite vertical superior (511)
begin
--clk es de 50 MHz, se divide a 25MHz
process(clk)
begin
if(clk = '1' and clk'event) then
clkdiv <= not clkdiv;
end if;
end process;
--Contador horizontal
process(clkdiv)
begin
if(clkdiv = '1' and clkdiv'event) then
if conh = hpixels then --Monitoreo de número de pixeles en línea horizontal
conh <= (others=>'0'); --Inicializa el contador
vsenable <= '1'; --Habilita el contador vertical
else
conh <= conh + 1; --Incrementa el contador horizontal
vsenable <= '0'; --Deshabilita el contador vertical
end if;
end if;
end process;
--Contador vertical
process(clkdiv)
begin
if(clkdiv = '1' and clkdiv'event and vsenable = '1') then
if conv = vlines then --Monitorea el número de líneas verticales
Prácticas de Laboratorio de Dispositivos Lógicos Programables
Dr. Juan Antonio Jaramillo Gómez
--***************************************************************************
--Pixels a visualizar
RGB <= "110" when (conh(4 downto 0) = "00000" and
conv(4 downto 0) = "00000" and
vidon ='1' and a="00") else
--Cuadro a visualizar
"101" when (conh > ("0100001110"+hbp) and conh < ("0101110010"+hbp)
and conv > ("0010111110"+vbp) and conv < ("0100100010"+vbp)
and vidon ='1' and a="01") else
--Rayas verticales
"011" when (conh(4 downto 0) = "00000" and
vidon ='1' and a="10") else
--Rayas horizontales
"100" when (conv(4 downto 0) = "00000" and
vidon ='1' and a="11") else "000";
--****************************************************************************
--Habilita la señal de video solo en los margenes de visualizacón
vidon <= '1' when (((conh > hbp) and (conh < hfp)) or ((conv > vbp) and (conv < vfp))) else '0';
end Arq_vga;
------------------------------------------------------------------------------------------------------------------------------------------------------
Prácticas de Laboratorio de Dispositivos Lógicos Programables
Dr. Juan Antonio Jaramillo Gómez
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity video_vga is
Port ( clk : in STD_LOGIC; --50MHz
a : in STD_LOGIC_VECTOR(1 downto 0); --interruptores sw1 y sw0 o sw7 y sw6
shor : out STD_LOGIC;
sver : out STD_LOGIC;
RGB : out STD_LOGIC_VECTOR(7 downto 0));
end video_vga;
begin
--clk es de 50MHz del reloj interno de la FPGA. Se genera la señal clkdiv a 25 MHz.
process (clk)
begin
if (clk = '1' and clk' event) then
clkdiv <= not clkdiv;
end if;
end process;
--Contador horizontal
process (clkdiv)
begin
if (clkdiv = '1' and clkdiv' event) then
Prácticas de Laboratorio de Dispositivos Lógicos Programables
Dr. Juan Antonio Jaramillo Gómez
--Contador vertical
process (clkdiv)
begin
if (clkdiv = '1' and clkdiv' event and vsenable = '1') then
if conv = vlines then --Monitorea el número de líneas verticales
conv <= (others=>'0'); --Inicializa el contador
else
conv <= conv + 1; --Incrementa el contador vertical
end if;
end if;
end process;
--*******************************************************************
--Pixels a visualizar
RGB <= "11111100" when (conh(4 downto 0) = "00000"
and conv(4 downto 0) = "00000"
and vidon = '1'
and a = "00")
else
-- Cuadro a visualizar
"11100011" when (conh > ("0100001110" + hbp)
and conh < ("0101110010" + hbp)
and conv > ("0010111110" + vbp)
and conv < ("0100100010" + vbp)
and vidon = '1'
and a = "01")
else
-- Rayas verticales
"00011111" when (conh (4 downto 0) = "00000"
and vidon = '1'
and a = "10" )
else
-- Rayas horizontales
"11100000" when (conv (4 downto 0) = "00000"
Prácticas de Laboratorio de Dispositivos Lógicos Programables
Dr. Juan Antonio Jaramillo Gómez
end arq_video_vga;
Referencias
Control y despliegue de imágenes en monitor vga mediante el uso de vhdl y la placa nexys 2, consultado noviembre
2017, disponible en:
http://www.boletin.upiita.ipn.mx/index.php/ciencia/217-cyt-numero-35/59-control-y-despliegue-de-imagenes-en-
monitor-vga-mediante-el-uso-de-lenguaje-vhdl-y-una-placa-nexys-2