Video Graphics Array (VGA) o Adaptador Gráfico de Video se utiliza para denominar a:
Una pantalla de computadora analógica estándar.
La resolución 640 × 480 píxeles.
El conector de 15 contactos D subminiatura.
La tarjeta gráfica que comercializó IBM por primera vez en 1988.
Visualización de caracteres personalizados en un monitor VGA
1.
2. 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
3. VISUALIZACION DE CARACTERES PERSONALIZADOS EN UN MONITOR
VGA
1.-MARCO TEORICO
1.1-VGA DISPLAY PUERTO
El FPGA Spartan-3E StarterKit incluye unpuertoVGA medianteunconectorDB15.
Este puerto se conectadirectamente alamayoría de losmonitoresde PCo pantallasLCD de
pantallaplanautilizandouncable estandar del monitor. Comose muestraenlaFigura1.La parte
superiordel tablero.
El Spartan-3E FPGA impulsadirectamente las cincoseñalesVGA atravésde resistencias.Cada
líneade color tiene unaresistenciaenserie,conunbitcada uno para VGA_RED,VGA_GREEN y
VGA_BLUE. Las resistenciasenserie,encombinaciónconlaimpedanciade 75Ω integradoenel
cable VGA,aseguran que lasseñalesde colorpermanecenenel 0V VGA-especificadogama0.7V.
Las señalesVGA_RED,VGA_GREEN y VGA_BLUE altoso bajospara generarlosocho coloresque se
muestranenla Tabla1.
4. El siguientesistemaVGA yla informaciónde tiempoes proporcionadocomounejemplode cómo
el FPGA podría conducir unmonitorVGA enel modo640 por 480.
1.2.-FRECUENCIA DE LA SEÑAL DE 60 HZ, 640X480 VGA
Los display CRT-basados pantallasVGA utilizanamplitudmodulada, moviendohacesde electrones
(o cátodo) para mostrarla informaciónenunapantallarecubiertade fósforo.LCDsutilizanuna
serie de interruptores que puede imponerunvoltaje atravésde una pequeñacantidadde cristal
líquido,cambiandoasíla luz a travésdel cristal sobre unabase de pixel porpixel.Aunque la
siguiente descripciónse limitaalosmonitoresCRT,losmonitoresLCDhan evolucionadopara
utilizarlosmismostiemposde señal comopantallasCRT.Enconsecuencia,lasiguiente discusión
se refiere tantoa lostubosde rayos catódicosy LCDs.
Dentrode una pantallaCRT, formasde onda de corriente pasana travésde las bobinas para
producircamposmagnéticos que loshacesde electronesse desvíanal atravesarlasuperficie de la
pantallaenun patrónde barrido,horizontal de izquierdaaderechay verticalmente de arribaa
abajo.Comose muestraenla Figura2, la información sólose muestracuandoel hazse mueve en
la direcciónizquierdaadelante aderechayde arriba a abajo yno durante el tiempode las
declaracionesde lavigade nuevoa laorillaizquierdaolaparte superiordel monitor.Porlotanto,
gran parte del potencial de tiempode visualizaciónse pierde enlos periodosde supresióncuando
el haz se restablece yestabilizadoparacomenzarunnuevopase de visualizaciónhorizontal o
vertical.
5. La resoluciónde visualizacióndefine el tamañode lasvigas, lafrecuenciaalacual el haz pasaa
travésde la pantalla,yla frecuenciaala que se modulael haz de electrones.
ModernaspantallasVGA admitenvariasresolucionesde pantalla,yel controladorVGA dictala
resoluciónmediante laproducciónde señalesde temporizaciónparacontrolarlospatronesde
trama. El controladorproduce impulsosde sincronizaciónde nivel TTLque marcan la frecuenciaa
la que lacorriente fluye atravésde las bobinasde deflexión,yaseguraque losdatosde píxeleso
vídeose aplicaal haz de electronesenel momentocorrecto.
Los datosde vídeonormalmente proviene de unamemoriade actualizaciónde vídeoconunoo
más bytesasignado acada posiciónde pixel. Spartan-3EStarterKitutilizatresbitsporpíxel,
produciendo unade lasocho posiblescoloresque se muestranenlaTabla 1.
Comose muestraenla Figura 2, el controladorVGA generala sincronizaciónhorizontal (HS) y
vertical sync(VS) señalesde lostiemposycoordinalaentregade datosde vídeoen cada reloj de
píxeles.
La frecuenciade píxel defineel tiempodisponibleparamostrarun píxel de lainformación.Laseñal
VSdefine lafrecuenciade refrescode lapantalla,ola frecuenciaalaque toda la informaciónen la
pantallase vuelve adibujar.
6. 1.3.-EL TIEMPO DE SEÑAL VGA
Los tiemposde señal enlatabla 2 se derivande 640 píxeles porpantalla480 filausandoun 25
MHz de reloj de píxeles y60 Hz ± 1 refresco.Figura3 muestrala relaciónentre cadaunode los
símbolosde sincronización.
En general,uncontadorsincronizadoporel reloj de píxelescontrolalasincronizaciónhorizontal.
Descifrandovaloresdel contadorgeneranlaseñal HS.Este contador rastreaenla pantallalaactual
ubicacióndel pixelenunafiladeterminada.
Un contador separadoel seguimientode lasincronizaciónvertical.El contadorvertical
sincronizacióncon cadapulsoHS y losvaloresdecodificadosgeneranla señal VS.Este contador
rastrea laactual filade lapantalla.Estosdos contadoresque se ejecutancontinuamente formanla
direcciónenunamemoriaintermediade visualización.Porejemplo,el DDRSDRAMproporciona
un búferde visualizaciónideal.
2.-DESCRIPCION DEL PROGRAMA
Este proyectoimplementalacomunicaciónporel puertoVGA del moduloSpartan3E con un
monitorLCD mostrandocaracteresencódigo ASCII,guardadosenbanco de datos.
En el programa de alto nivel se definenlasentradas,tenemos 2entradas:
-La entradade reloj ,usamosel reloj internodel Spartande 50MHZ .
-Una entradade reset, usaremosel pulsadorde latarjetaSpartan D18.
7. -Las salidasdel puertoVGA RGB.
-Las salidasde control hsync,vsyncdel puertoVGA.
Este programautilizadosprogramasde instanciaciónvga_sync_unityfont_sync_unit.
La rutinavga_sync_unitse usapara lasincronizacióndel monitorLCDa una frecuenciade
60Hz,haciendoundivisorde frecuenciade reloj de 50Mhz con 0.83 Mhz.
Tambienestarutinadefine el tamañode loscaracteres.
Toda la comunicaciónporel puertoVGA se describe enel librode PongChu.
La rutinaFont_sync_unit cuentaconuna subrutinafrom_unitdonde colocantodosloscaracteres
que se mostraran , podría decirse que es nuestrabase de datos.
La rutina Font_sync_unitalmacenatodosestosdatosenlamemoriaROMdel Spartany también
el colorde loscaracteres, el color elegidoesazul cuyo códigoes:
Los caracteresutilizadosson
ESCUELA: INGENIERIA ELECTRONICA
ALUMNO:CalcinaHuanca Yhan K.
CURSO :MICROELECTRONICA
2015-B
DOCENTE:Ing.Raul Yanyachi
8. 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
Divisorde frecuenciade
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
9. 4.-PROGRAMAS EN ISE
4.1.-PROGRAMA DE ALTO NIVEL Font_tes_top
libraryIEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
--------------------------------------------------------------------------------
entityfont_test_genis
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));
endfont_test_gen;
--------------------------------------------------------------------------------
architecture arch of font_test_genis
signal rom_addr:std_logic_vector(10downto0);
signal char_addr:std_logic_vector(6downto0);
signal row_addr:std_logic_vector(3downto0);
signal bit_addr:std_logic_vector(2downto0);
signal font_word:std_logic_vector(7downto0);
signal font_bit,text_bit_on:std_logic;
--------------------------------------------------------------------------------
begin
-- instantiate fontROM
font_unit:entitywork.font_rom
port map(clk=>clk,addr=>rom_addr,data=>font_word);
10. -- fontROM interface
char_addr<=pixel_y(5downto4) & pixel_x(7downto3);
row_addr<=pixel_y(3downto0);
rom_addr <= char_addr & row_addr;
bit_addr<=pixel_x(2downto0);
font_bit<= font_word(to_integer(unsigned(notbit_addr)));
-- "on" regionlimitedtotop-leftcorner
text_bit_on<=
font_bitwhenpixel_x(9downto8)="00" and
pixel_y(9downto6)="0000" else
'0';
-- rgb multiplexingcircuit
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
endif;
endif;
endprocess;
-------------------------------------------------------------------------------
endarch;
11. 4.2.- PROGRAMA DE INSTANCIACION VGA_SYNC-UNIT
libraryIEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
-- Uncommentthe followinglibrarydeclarationif using
-- arithmeticfunctionswithSignedorUnsignedvalues
--use IEEE.NUMERIC_STD.ALL;
-- Uncommentthe followinglibrarydeclarationif instantiating
-- any Xilinx primitivesinthiscode.
--libraryUNISIM;
--use UNISIM.VComponents.all;
entityvga_syncis
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 downto0));
endvga_sync;
architecture comportaof vga_sync is
-- VGA 640X480 PARÁMETROSDE SINCRONIZACIÓN
constantHD: integer:=640; -- zona visible horizontal
constantHF: integer:=16; --borde derecho
constantHB: integer:=48; --borde izquierdo
constantHR: integer:=96; --retrazadohorizontal
constantVD: integer:=480; --zonavisible vertical
12. constantVF: integer:=10; --borde inferior
constantVB: integer:=33;--borde superior
constantVR: integer:=2; --retrazadovertical
signal mod2_reg,mod2_next:std_logic;
signal v_count_reg,v_count_next:unsigned(9downto0);
signal h_count_reg,h_count_next:unsigned(9downto0);
-- bufferde salida
signal v_sync_reg,h_sync_reg:std_logic;
signal v_sync_next,h_sync_next:std_logic;
-- señalesde 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'eventandclk='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;
endif;
13. endprocess;
-- generadorde 25 MHz
mod2_next<= not mod2_reg;
-- 25 MHz pixel tick
pixel_tick<='1' whenmod2_reg='1' else '0';
-- findel contadorhorizontal
h_end<= '1' when
h_count_reg=(HD+HF+HB+HR-1) else '0'; --799
-- findel contadorvertica
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;
endif;
else h_count_next<=h_count_reg;
endif;
endprocess;
-- contador para el vsync
process(v_count_reg,h_end,v_end,pixel_tick)
14. begin
if pixel_tick='1'andh_end='1' then
if (v_end='1') then
v_count_next<= (others=>'0');
else
v_count_next<= v_count_reg+ 1;
endif;
else
v_count_next<= v_count_reg;
endif;
endprocess;
-- hsync y vsyncse registranbufferparaevitarposiblesglitch
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
-- videoon/off
video_on<= '1' when(h_count_reg<HD) and(v_count_reg<VD) else '0';
-- señalesde 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);
15. p_tick<= pixel_tick;
endcomporta;
4.3.-PROGRAMA DE INSTANCIACION FONT_GEN_UNIT
libraryIEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
--------------------------------------------------------------------------------
entityfont_test_genis
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));
endfont_test_gen;
--------------------------------------------------------------------------------
architecture arch of font_test_genis
signal rom_addr:std_logic_vector(10downto0);
signal char_addr:std_logic_vector(6downto0);
signal row_addr:std_logic_vector(3downto0);
signal bit_addr:std_logic_vector(2downto0);
signal font_word:std_logic_vector(7downto0);
signal font_bit,text_bit_on:std_logic;
--------------------------------------------------------------------------------
begin
-- instantiate fontROM
font_unit:entitywork.font_rom
port map(clk=>clk,addr=>rom_addr,data=>font_word);
16. -- fontROM interface
char_addr<=pixel_y(5downto4) & pixel_x(7downto3);
row_addr<=pixel_y(3downto0);
rom_addr <= char_addr & row_addr;
bit_addr<=pixel_x(2downto0);
font_bit<= font_word(to_integer(unsigned(notbit_addr)));
-- "on" regionlimitedtotop-leftcorner
text_bit_on<=
font_bitwhenpixel_x(9downto8)="00" and
pixel_y(9downto6)="0000" else
'0';
-- rgb multiplexingcircuit
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
endif;
endif;
endprocess;
-------------------------------------------------------------------------------
endarch;
17. 4.4.-PROGRAMA FONT_UNTI-FROM-ROM
libraryIEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
---------------------------------------------------------------------------------
entityfont_romis
Port ( clk: in STD_LOGIC;
addr :JEH in STD_LOGIC_VECTOR (10 DOWNTO0);
data : out STD_LOGIC_VECTOR(7 DOWNTO0));
endfont_rom;
---------------------------------------------------------------------------------
architecture arch of font_romis
constantADDR_WIDTH: integer:=11;
constantDATA_WIDTH: integer:=8;
signal addr_reg:std_logic_vector(ADDR_WIDTH-1downto0);
type rom_type isarray (0 to 2**ADDR_WIDTH-1)
of std_logic_vector(DATA_WIDTH-1downto0);
-- ROM definition
constantROM: rom_type:=( -- 2^11-by-8
-- code x45
"00000000", -- 0
"00000000", -- 1
"11111110", -- 2 *******
"01100110", -- 3 ** **
"01100010", -- 4 ** *
"01101000", -- 5 ** *
"01111000", -- 6 ****
18. "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
19. "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 DESALIDAS
# PlanAheadGeneratedphysical 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 usode subrutinasse hizousode componentsque el software Xilinx proporciona.
- El tamañode la señal de la pantallason640x480 pixeles.
-Se utilizóel reloj internodel FPGA de 50Mhz y undivisorde frecuenciaa60Hz para la entradaal
puertoVGA.
21. 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