vga display puerto

21

Upload: yhan-karlo-calcina

Post on 23-Jan-2018

60 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Vga display puerto
Page 2: Vga display puerto

INDICE

VISUALIZACION DE CARACTERES PERSONALIZADOS EN UN MONITOR VGA................................... 3

1.-MARCO TEORICO ............................................................................................................... 3

1.1-VGA DISPLAY PUERTO................................................................................................... 3

1.2.-FRECUENCIA DE LA SEÑAL DE 60 HZ, 640X480 VGA ....................................................... 4

1.3.-EL TIEMPO DE SEÑAL VGA............................................................................................ 6

2.-DESCRIPCION DEL PROGRAMA ........................................................................................... 6

3.-DIAGRAMA DE FLUJO ......................................................................................................... 8

4.-PROGRAMAS EN ISE ........................................................................................................... 9

4.1.-PROGRAMA DE ALTO NIVEL Font_tes_top .................................................................... 9

4.2.- PROGRAMA DE INSTANCIACION VGA_SYNC-UNIT.......................................................11

4.3.-PROGRAMA DE INSTANCIACION FONT_GEN_UNIT ......................................................15

4.4.-PROGRAMA FONT_UNTI-FROM-ROM ..........................................................................17

5.-CONCLUSIONES ................................................................................................................19

6.-PRUEBAS ..........................................................................................................................20

6.-BIBLIOGRAFIA...................................................................................................................21

Page 3: Vga display puerto

VISUALIZACION DE CARACTERES PERSONALIZADOS EN UN MONITOR

VGA 1.-MARCO TEORICO

1.1-VGA DISPLAY PUERTO

El FPGA Spartan-3E Starter Kit incluye un puerto VGA mediante un conector DB15.

Este puerto se conecta directamente a la mayoría de los monitores de PC o pantallas LCD de

pantalla plana utilizando un cable estandar del monitor. Como se muestra en la Figura 1.La parte superior del tablero.

El Spartan-3E FPGA impulsa directamente las cinco señales VGA a través de resistencias. Cada

línea de color tiene una resistencia en serie, con un bit cada uno para VGA_RED, VGA_GREEN y

VGA_BLUE. Las resistencias en serie, en combinación con la impedancia de 75Ω integrado en el

cable VGA, aseguran que las señales de color permanecen en el 0V VGA-especificado gama 0.7V.

Las señales VGA_RED, VGA_GREEN y VGA_BLUE altos o bajos para generar los ocho colores que se

muestran en la Tabla 1.

Page 4: Vga display puerto

El siguiente sistema VGA y la información de tiempo es proporcionado como un ejemplo de cómo el FPGA podría conducir un monitor VGA en el modo 640 por 480.

1.2.-FRECUENCIA DE LA SEÑAL DE 60 HZ, 640X480 VGA Los display CRT-basados pantallas VGA utilizan amplitud modulada, moviendo haces de electrones

(o cátodo) para mostrar la información en una pantalla recubierta de fósforo. LCDs util izan una

serie de interruptores que puede imponer un voltaje a través de una pequeña cantidad de cristal

líquido, cambiando así la luz a través del cristal sobre una base de pixel por pixel. Aunque la

siguiente descripción se limita a los monitores CRT, los monitores LCD han evolucionado para

utilizar los mismos tiempos de señal como pantallas CRT. En consecuencia, la siguiente discusión se refiere tanto a los tubos de rayos catódicos y LCDs.

Dentro de una pantalla CRT, formas de onda de corriente pasan a través de las bobinas para

producir campos magnéticos que los haces de electrones se desvían al atravesar la superficie de la

pantalla en un patrón de barrido, horizontal de izquierda a derecha y verticalmente de arriba a

abajo. Como se muestra en la Figura 2, la información sólo se muestra cuando el haz se mueve en

la dirección izquierda adelante a derecha y de arriba a abajo y no durante el tiempo de las

declaraciones de la viga de nuevo a la orilla izquierda o la parte superior del monitor. Por lo tanto,

gran parte del potencial de tiempo de visualización se pierde en los periodos de supresión cuando

el haz se restablece y estabilizado para comenzar un nuevo pase de visualización horizontal o vertical.

Page 5: Vga display puerto

La resolución de visualización define el tamaño de las vigas, la frecuencia a la cual el haz pasa a

través de la pantalla, y la frecuencia a la que se modula el haz de electrones.

Modernas pantallas VGA admiten varias resoluciones de pantalla, y el controlador VGA dicta la

resolución mediante la producción de señales de temporización para controlar los patrones de

trama. El controlador produce impulsos de sincronización de nivel TTL que marcan la f recuencia a

la que la corriente fluye a través de las bobinas de deflexión, y asegura que los datos de píxeles o vídeo se aplica al haz de electrones en el momento correcto.

Los datos de vídeo normalmente proviene de una memoria de actualización de vídeo con uno o

más bytes asignado a cada posición de pixel. Spartan-3E Starter Kit utiliza tres bits por píxel,

produciendo una de las ocho posibles colores que se muestran en la Tabla 1.

Como se muestra en la Figura 2, el controlador VGA genera la sincronización horizontal (HS) y

vertical sync (VS) señales de los tiempos y coordina la entrega de datos de vídeo en cada reloj de píxeles.

La frecuencia de píxel define el tiempo disponible para mostrar un píxel de la información. La señal

VS define la frecuencia de refresco de la pantalla, o la frecuencia a la que toda la información en la

pantalla se vuelve a dibujar.

Page 6: Vga display puerto

1.3.-EL TIEMPO DE SEÑAL VGA

Los tiempos de señal en la tabla 2 se derivan de 640 píxeles por pantalla 480 fila usando un 25

MHz de reloj de píxeles y 60 Hz ± 1 refresco. Figura 3 muestra la relación entre cada uno de los símbolos de sincronización.

En general, un contador sincronizado por el reloj de píxeles controla la sincronización horizontal.

Descifrando valores del contador generan la señal HS. Este contador rastrea en la pantalla la actual ubicación del pixel en una fila determinada.

Un contador separado el seguimiento de la sincronización vertical. El contador vertical

sincronización con cada pulso HS y los valores decodificados generan la señal VS. Este contador

rastrea la actual fila de la pantalla. Estos dos contadores que se ejecutan continuamente forman la

dirección en una memoria intermedia de visualización. Por ejemplo, el DDR SDRAM proporciona un búfer de visualización ideal.

2.-DESCRIPCION DEL PROGRAMA

Este proyecto implementa la comunicación por el puerto VGA del modulo Spartan 3E con un monitor LCD mostrando caracteres en código ASCII ,guardados en banco de datos.

En el programa de alto nivel se definen las entradas ,tenemos 2 entradas :

-La entrada de reloj ,usamos el reloj interno del Spartan de 50MHZ .

-Una entrada de reset , usaremos el pulsador de la tarjeta Spartan D18.

Page 7: Vga display puerto

-Las salidas del puerto VGA RGB.

-Las salidas de control hsync,vsync del puerto VGA.

Este programa utiliza dos programas de instanciación vga_sync_unit y font_sync_unit.

La rutina vga_sync_unit se usa para la sincronización del monitor LCD a una frecuencia de

60Hz,haciendo un divisor de frecuencia de reloj de 50Mhz con 0.83 Mhz.

Tambien esta rutina define el tamaño de los caracteres.

Toda la comunicación por el puerto VGA se describe en el libro de Pong Chu.

La rutina Font_sync_unit cuenta con una subrutina from_unit donde colocan todos los caracteres que se mostraran , podría decirse que es nuestra base de datos.

La rutina Font_sync_unit almacena todos estos datos en la memoria ROM del Spartan y también el color de los caracteres , el color elegido es azul cuyo código es:

Los caracteres utilizados son

ESCUELA: INGENIERIA ELECTRONICA

ALUMNO:Calcina Huanca Yhan K.

CURSO :MICROELECTRONICA

2015-B

DOCENTE:Ing. Raul Yanyachi

Page 8: Vga display puerto

3.-DIAGRAMA DE FLUJO

Declaración de

entradas y salidas

Archivo de

alto nivel

Font-test _top

Declaración de los programas

de instanciacion

Subrutina

Vga_sync_unit

Subrutina

Font_gen-unit

Divisor de frecuencia de

60Hz para entrada del monitor VGA

VGA 640X480 PARÁMETROS

DE SINCRONIZACIÓN

SUBRUTINA DE

INSTANCIACIO

N

Almacena los caracteres

en la memoria ROM

Color de caracteres

Base de datos

Page 9: Vga display puerto

4.-PROGRAMAS EN ISE

4.1.-PROGRAMA DE ALTO NIVEL Font_tes_top library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use ieee.numeric_std.all;

--------------------------------------------------------------------------------

entity font_test_gen is

Port ( clk : in STD_LOGIC;

video_on : in STD_LOGIC;

pixel_x, pixel_y : STD_LOGIC_VECTOR (9 DOWNTO 0);

rgb_text : out STD_LOGIC_VECTOR (2 DOWNTO 0));

end font_test_gen;

--------------------------------------------------------------------------------

architecture arch of font_test_gen is

signal rom_addr: std_logic_vector(10 downto 0);

signal char_addr: std_logic_vector(6 downto 0);

signal row_addr: std_logic_vector(3 downto 0);

signal bit_addr: std_logic_vector(2 downto 0);

signal font_word: std_logic_vector(7 downto 0);

signal font_bit, text_bit_on: std_logic;

--------------------------------------------------------------------------------

begin

-- instantiate font ROM

font_unit: entity work.font_rom

port map(clk=>clk, addr=>rom_addr, data=>font_word);

Page 10: Vga display puerto

-- font ROM interface

char_addr<=pixel_y(5 downto 4) & pixel_x(7 downto 3);

row_addr<=pixel_y(3 downto 0);

rom_addr <= char_addr & row_addr;

bit_addr<=pixel_x(2 downto 0);

font_bit <= font_word(to_integer(unsigned(not bit_addr)));

-- "on" region limited to top-left corner

text_bit_on <=

font_bit when pixel_x(9 downto 8)="00" and

pixel_y(9 downto 6)="0000" else

'0';

-- rgb multiplexing circuit

process(video_on,font_bit,text_bit_on)

begin

if video_on='0' then

rgb_text <= "000"; --blank

else

if text_bit_on='1' then

rgb_text <= "010"; -- green

else

rgb_text <= "000"; -- black

end if;

end if;

end process;

-------------------------------------------------------------------------------

end arch;

Page 11: Vga display puerto

4.2.- PROGRAMA DE INSTANCIACION VGA_SYNC-UNIT

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use ieee.numeric_std.all;

-- Uncomment the following library declaration if using

-- arithmetic functions with Signed or Unsigned values

--use IEEE.NUMERIC_STD.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 ( clk, reset : in STD_LOGIC;

hsync, vsync : out STD_LOGIC;

video_on, p_tick : out STD_LOGIC;

pixel_x, pixel_y : out STD_LOGIC_VECTOR (9 downto 0));

end vga_sync;

architecture comporta of vga_sync is

-- VGA 640X480 PARÁMETROS DE SINCRONIZACIÓN

constant HD: integer:=640; -- zona visible horizontal

constant HF: integer:=16 ; --borde derecho

constant HB: integer:=48 ; --borde izquierdo

constant HR: integer:=96 ; --retrazado horizontal

constant VD: integer:=480; --zona visible vertical

Page 12: Vga display puerto

constant VF: integer:=10; --borde inferior

constant VB: integer:=33; --borde superior

constant VR: integer:=2; --retrazado vertical

signal mod2_reg, mod2_next: std_logic;

signal v_count_reg, v_count_next: unsigned(9 downto 0);

signal h_count_reg, h_count_next: unsigned(9 downto 0);

-- buffer de salida

signal v_sync_reg, h_sync_reg: std_logic;

signal v_sync_next, h_sync_next: std_logic;

-- señales de estado

signal h_end, v_end, pixel_tick: std_logic;

begin

process (clk,reset)

begin

if reset='1' then

mod2_reg <= '0';

v_count_reg <= (others=>'0');

h_count_reg <= (others=>'0');

v_sync_reg <= '0';

h_sync_reg <= '0';

elsif (clk'event and clk='1') then

mod2_reg <= mod2_next;

v_count_reg <= v_count_next;

h_count_reg <= h_count_next;

v_sync_reg <= v_sync_next;

h_sync_reg <= h_sync_next;

end if;

Page 13: Vga display puerto

end process;

-- generador de 25 MHz

mod2_next <= not mod2_reg;

-- 25 MHz pixel tick

pixel_tick <= '1' when mod2_reg='1' else '0';

-- fin del contador horizontal

h_end <= '1' when

h_count_reg=(HD+HF+HB+HR-1) else '0'; --799

-- fin del contador vertica

v_end <= '1' when

v_count_reg=(VD+VF+VB+VR-1) else '0';--524

-- contador para el hsync

process (h_count_reg,h_end,pixel_tick)

begin

if pixel_tick='1' then -- 25 MHz

if h_end='1' then

h_count_next <= (others=>'0');

else

h_count_next <= h_count_reg + 1;

end if;

else h_count_next <= h_count_reg;

end if;

end process;

-- contador para el vsync

process (v_count_reg,h_end,v_end,pixel_tick)

Page 14: Vga display puerto

begin

if pixel_tick='1' and h_end='1' then

if (v_end='1') then

v_count_next <= (others=>'0');

else

v_count_next <= v_count_reg + 1;

end if;

else

v_count_next <= v_count_reg;

end if;

end process;

-- hsync y vsync se registran buffer para evitar posibles glitch

h_sync_next <= '1' when

(h_count_reg>=(HD+HF)) and (h_count_reg<=(HD+HF+HR-1)) else '0';

-- entre 656 y 751

v_sync_next <= '1' when

(v_count_reg>=(VD+VF)) and (v_count_reg<=(VD+VF+VR-1)) else '0';

--entre 490 y 491

-- video on/off

video_on <= '1' when (h_count_reg<HD) and (v_count_reg<VD) else '0';

-- señales de salida

hsync <= h_sync_reg;

vsync <= v_sync_reg;

pixel_x <= std_logic_vector(h_count_reg);

pixel_y <= std_logic_vector(v_count_reg);

Page 15: Vga display puerto

p_tick <= pixel_tick;

end comporta;

4.3.-PROGRAMA DE INSTANCIACION FONT_GEN_UNIT library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use ieee.numeric_std.all;

--------------------------------------------------------------------------------

entity font_test_gen is

Port ( clk : in STD_LOGIC;

video_on : in STD_LOGIC;

pixel_x, pixel_y : STD_LOGIC_VECTOR (9 DOWNTO 0);

rgb_text : out STD_LOGIC_VECTOR (2 DOWNTO 0));

end font_test_gen;

--------------------------------------------------------------------------------

architecture arch of font_test_gen is

signal rom_addr: std_logic_vector(10 downto 0);

signal char_addr: std_logic_vector(6 downto 0);

signal row_addr: std_logic_vector(3 downto 0);

signal bit_addr: std_logic_vector(2 downto 0);

signal font_word: std_logic_vector(7 downto 0);

signal font_bit, text_bit_on: std_logic;

--------------------------------------------------------------------------------

begin

-- instantiate font ROM

font_unit: entity work.font_rom

port map(clk=>clk, addr=>rom_addr, data=>font_word);

Page 16: Vga display puerto

-- font ROM interface

char_addr<=pixel_y(5 downto 4) & pixel_x(7 downto 3);

row_addr<=pixel_y(3 downto 0);

rom_addr <= char_addr & row_addr;

bit_addr<=pixel_x(2 downto 0);

font_bit <= font_word(to_integer(unsigned(not bit_addr)));

-- "on" region limited to top-left corner

text_bit_on <=

font_bit when pixel_x(9 downto 8)="00" and

pixel_y(9 downto 6)="0000" else

'0';

-- rgb multiplexing circuit

process(video_on,font_bit,text_bit_on)

begin

if video_on='0' then

rgb_text <= "000"; --blank

else

if text_bit_on='1' then

rgb_text <= "010"; -- green

else

rgb_text <= "000"; -- black

end if;

end if;

end process;

-------------------------------------------------------------------------------

end arch;

Page 17: Vga display puerto

4.4.-PROGRAMA FONT_UNTI-FROM-ROM

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use ieee.numeric_std.all;

---------------------------------------------------------------------------------

entity font_rom is

Port ( clk : in STD_LOGIC;

addr :JEH in STD_LOGIC_VECTOR (10 DOWNTO 0);

data : out STD_LOGIC_VECTOR (7 DOWNTO 0));

end font_rom;

---------------------------------------------------------------------------------

architecture arch of font_rom is

constant ADDR_WIDTH: integer:=11;

constant DATA_WIDTH: integer:=8;

signal addr_reg: std_logic_vector(ADDR_WIDTH-1 downto 0);

type rom_type is array (0 to 2**ADDR_WIDTH-1)

of std_logic_vector(DATA_WIDTH-1 downto 0);

-- ROM definition

constant ROM: rom_type:=( -- 2^11-by-8

-- code x45

"00000000", -- 0

"00000000", -- 1

"11111110", -- 2 *******

"01100110", -- 3 ** **

"01100010", -- 4 ** *

"01101000", -- 5 ** *

"01111000", -- 6 ****

Page 18: Vga display puerto

"01101000", -- 7 ** *

"01100000", -- 8 **

"01100010", -- 9 ** *

"01100110", -- a ** **

"11111110", -- b *******

"00000000", -- c

"00000000", -- d

"00000000", -- e

"00000000", -- f

-- code x53

"00000000", -- 0

"00000000", -- 1

"01111100", -- 2 *****

"11000110", -- 3 ** **

"11000110", -- 4 ** **

"01100000", -- 5 **

"00111000", -- 6 ***

"00001100", -- 7 **

"00000110", -- 8 **

"11000110", -- 9 ** **

"11000110", -- a ** **

"01111100", -- b *****

"00000000", -- c

"00000000", -- d

"00000000", -- e

"00000000", -- f

-- code x43

"00000000", -- 0

"00000000", -- 1

Page 19: Vga display puerto

"00111100", -- 2 ****

"01100110", -- 3 ** **

"11000010", -- 4 ** *

"11000000", -- 5 **

"11000000", -- 6 **

"11000000", -- 7 **

"11000000", -- 8 **

"11000010", -- 9 ** *

"01100110", -- a ** **

"00111100", -- b ****

"00000000", -- c

"00000000", -- d

"00000000", -- e

"00000000", -- f

ASIGNACION DE SALIDAS

# PlanAhead Generated physical constraints

NET "clk" LOC = C9;

NET "hsync" LOC = F15;

NET "reset" LOC = D18;

NET "rgb[0]" LOC = G15;

NET "rgb[1]" LOC = H15;

NET "rgb[2]" LOC = R14;

NET "vsync" LOC = F14;

5.-CONCLUSIONES -Para el uso de subrutinas se hizo uso de components que el software Xilinx proporciona.

- El tamaño de la señal de la pantalla son 640x480 pixeles.

-Se utilizó el reloj interno del FPGA de 50Mhz y un divisor de frecuencia a 60Hz para la entrada al puerto VGA.

Page 20: Vga display puerto

6.-PRUEBAS

SPARTAN 3E

Conexión SPARTAN con Monitor VGA del laboratorio

Page 21: Vga display puerto

Visualizacion de los caracteres en el monitor VGA

6.-BIBLIOGRAFIA http://www.uhu.es/raul.jimenez/MICROELECTRONICA/prac1.pdf

http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf

https://www.pantechsolutions.net/cpld-fpga-boards/vga-interfacing-with-spartan-3-primer

https://www.um.edu.mt/__data/assets/pdf_file/0008/66779/MNE_2202_-_Project.pdf