Proyecto de Graduación Diseño de Controlador Gráfico Basado en FPGA

Se ha enviado a tu correo electrónico, por favor compruébalo.

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

--Número de pregunta del experimento: ?lab5

--Nombre del proyecto: ?VGA experiment

--Nombre del archivo?: ?VGA_640480 .vhd

--Autor:?

--Número de clase.:?

--Fecha de creación:?

-- Chip de destino:?EP1C6Q240C8

--Modo de circuito: ?Modo 5

--Descripción de la demostración: ?El reloj de entrada es clock0, 50Mhz

--El la salida está conectada a VGA

--Reinicie después de encender

--El flanco ascendente de la señal de la tecla 1 cambia el color del carácter

--La El flanco ascendente de la señal de la tecla 2 cambia el carácter

--El interruptor de la tecla 3 controla el movimiento del carácter en la dirección y

--El interruptor de la tecla 4 controla el movimiento del carácter en la dirección x

--El interruptor de la tecla 5 controla el parpadeo de caracteres

--El interruptor de la tecla 6 controla el borde de los caracteres

--¿Tecla 8?reset

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

biblioteca?ieee;

use?ieee.std_logic_1164.all;

use?ieee.std_logic_unsigned.all;

use?ieee.std_logic_arith.all;

entidad?vga640480?es puerto(

dirección? :?out?STD_LOGIC_VECTOR(11?DOWNTO?0);?--Dirección ROM de conexión

reset?:?in? STD_LOGIC;

q?:?in?STD_LOGIC;? --Devolución de datos ROM

clk:?buffer?std_logic;?--Reloj de 25 M después de la división de frecuencia

clk_0?:?in?STD_LOGIC;?--Entrada de reloj de 50M

r, g, b?:?out?STD_LOGIC;?--Señal de color

hs, vs?:?out?STD_LOGIC;?--Sincronización horizontal, señal de sincronización de campo

in_frame_switch:?in?STD_LOGIC;?--Agregar interruptor de borde

in_blink_switch:?in?STD_LOGIC ;?--Interruptor de parpadeo

in_enlarge_switch?:? in?STD_LOGIC;?--Interruptor de caracteres grandes

in_num_change:?in?STD_LOGIC;?--Cambiar el valor mostrado

in_color_change:?in?STD_LOGIC;?--Cambiar el color de visualización

in_v_x, in_v_y?:?in?STD_LOGIC;--Si el carácter de visualización se desplaza en la dirección x, y vga_syn?:?out?STD_LOGIC; vga_clk?:?out?STD_LOGIC?: ?out?STD_LOGIC );

end?vga640480;

arquitectura?comportamiento?de?vga640480?es señal?r1,g1,b1?:?std_logic;?signal?hs1,vs1?:?std_logic; señal?vector_x?:?std_logic_vector(9?downto?0);?-- ¿Señal de coordenadas X del punto de escaneo?vector_y?:?std_logic_vector(8?downto?0);?--Señal de coordenadas Y del punto de escaneo?target_x?:?std_logic_vector(9?downto?0);?--Señal de coordenadas X de la parte superior esquina izquierda del carácter ?target_y?:?std_logic_vector(8?downto?0);?--Coordenada Y de la esquina superior izquierda de la señal del carácter?blink?:?std_logic;?--Señal de control de parpadeo ¿Compartida?Variable? scancount, flickcount?:?integer;?- -Recuento de puntos de escaneo, recuento de números de escaneo ¿Compartido?Variable?color?:?std_logic_vector(2?downto?0);?--Color de visualización actual rgb ¿Compartido?Variable?num?:? std_logic_vector(1?downto?0); ?--Número mostrado actualmente

comenzar --------------------------- ------------- ---------------------------------- proceso(clk_0 )?--Dividir la señal de entrada de 50M por dos

begin

if(clk_0'event?and?clk_0='1')?clk?lt;=?not? ?clk;

finalizar si; finalizar?proceso -------------------------------- --------------- ----------------------- proceso(pulsar, restablecer) ?--El número de píxeles en el intervalo de línea (incluyendo el área en blanco) comienza

if?reset='0'?then vector_x?lt;=?(others=gt;'0');

elsif?clk'event?and?clk='1'? entonces si?vector_x=799?entonces

vector_x?lt;=?(others=gt;'0') ; else

vector_x?lt;=?vector_x?1; fin?si;

fin?si? ----------------------- --------------------------- --------------- proceso(clk, reset)?--campo Comienza el número de líneas de intervalo (incluida el área en blanco)

if?reset='0'? entonces vector_y?lt;=?(others=gt;'0');

elsif ?clk'event?and?clk='1'?entonces si?vector_x=799?entonces

si?vector_y=524?entonces vector_y?lt;=?(

otros=gt;'0');

else vector_y?lt;=?vector_y?1;

end?if; end?if;

¿finalizar?si; finalizar?proceso ------------------------------------------ --- ----------------------- proceso(clk, reset)?--Generación de señal de sincronización horizontal (ancho de sincronización 96, borde de ataque 16) comenzar

if?reset='0'?entonces hs1?lt;=?'1';

elsif?clk'event?and?clk='1 '?entonces si ?vector_xgt;=656?y?vector_xlt;752?entonces

hs1?lt;=?'0'; '; ¿finalizar si;

finalizar?si; finalizar?proceso ----------------------- ----- --------------------------------------------- -- proceso(clk, reset)?--generación de señal de sincronización de campo (ancho de sincronización 2, borde anterior 10) inicio

if?reset='0'?entonces vs1?lt;=?'1' ;

elsif?clk'event?y ?clk='1'?entonces si?vector_ygt;=490?y?vector_ylt;492?entonces

vs1?lt;=? '0'; else

vs1?lt ;=?'1'; fin?si;

fin?si?proceso --------- ----------------- --------------------------------- -------------- proceso(clk , reset)?--Comienza la salida de señal de sincronización horizontal

if?reset='0'?entonces hs?lt;=? '0';

elsif?clk'event? y?clk='1'?entonces hs?lt;=?hs1;

fin?if; ----------------- --------------------------------- ----------------- --- proceso(clk, reset)?--comienzo de salida de señal de sincronización de campo

if?reset='0'?entonces vs?lt;=?'0';

elsif?clk'event?and?clk='1'?entonces vs?lt;=?vs1;

end?if ; ¿finalizar? proceso; ---------- ----------------------------------- --------------- --------- proceso(clk, reset)?--Conteo de puntos de escaneo, conteo de escaneo de pantalla y control de parpadeo, comienza el control de posición de visualización de caracteres

si?reset='0' ?entonces

target_x?lt;=?

"0101000000";

target_y?lt;=?"011100000";

blink?lt;=?'0';

scancount?:=? 0;

blinkcount?:=?0;

elsif?clk'event?and?clk='1'?entonces

scancount?:=? scancount?1;

si?scancount?gt;=?525*800?entonces

blinkcount?:=?blinkcount?1;

si ?(blinkcount?=?20)?luego parpadear?lt;=?NO?blinkcount?:=?0;

end?if;

target_x?lt;= ?target_x? ?in_v_x;

target_y?lt;=?target_y? ?in_v_y;

si?target_xgt;=640-32?entonces? target_x?lt;=?"0000000000 ";

final?if;

si?target_ygt;=480-32?entonces? target_y?lt;=?"000000000";

final? if;

scancount?:=?0;

finalizar?if;

finalizar?if; finalizar?proceso -------- -------------------------------------------------- ------------- proceso(in_num_change,reset)?--Cambiar el número comenzar si?reset='0'?entonces

num?:=?"00" ? elsif?in_num_change'event?and?in_num_change='1'?entonces

num?:=?num? "01";

fin?if; ; ------------------------------------------------- - ---------------------? proceso(in_color_change,reset)?--Cambiar color comenzar si?reset='0'?entonces

color?:=?"001";?elsif?in_color_change'event?and?in_color_change='1'?luego

if?color="111"?luego

color ? :=?"001";

else

color?:=?color ?"001";

fin?if;

finalizar?si; finalizar?proceso --------------------------------------- - ------------? proceso(reset, clk, vector_x, vector_y)?--?Control de posicionamiento de coordenadas XY Variable?temp_x?:?std_logic_vector

(9?downto?0); Variable?temp_y?: ?std_logic_vector(8?downto?0); Variable?size?: ?integer if?reset='0'?then

r1 ?lt;=?'0'; g1?lt;=?'0'; b1?lt;=?'0';? elsif(clk'event?and?clk='1')entonces

if?in_enlarge_switch='0'?then?--Controlar la longitud del lado del carácter

tamaño?:=?32;

else

tamaño?: =?64;

end?if;

--borde de carácter

if?((vector_x?=?target_x?-?1?or?vector_x ?=?objetivo_x? ?tamaño? ?3)?y?vector_y?gt;=?objetivo_y?-?1?y?vector_y?lt;=?objetivo_y? ?((vector_y?=?objetivo_y?-?1?o?vector_y?=?objetivo_y? ?tamaño? ?3)?y?vector_x?gt;=?objetivo_x?-?1?y?vector_x?lt;=? target_x? (¿parpadear?o?NO?en_blink_switch)?Y?in_frame_switch?; b1?lt;=?color(0)?Y?(¿parpadear?o?NOT?en_blink_switch)?Y?in_frame_switch;

else r1 ?lt;=?'0'; g1?lt;=?'0'; b1?lt;=?'0';

end?if;

--Pantalla Carácter

if?vector_x?gt;=?target_x?and?vector_x?lt;?target_x? ?size?and?vector_y?gt;=?target_y?and?vector_y?lt;?target_y? ¿tamaño?entonces

temp_y?:=?vector_y-target_y;

temp_x?:=?vector_x-target_x;

if?in_enlarge_switch='0'? luego dirección?lt;=?num?amp;?temp_y(4?downto?0)?amp;?temp_x(4?downto?0);

otra dirección?lt;=?num?amp ;?temp_y(5?downto?1)?amp;?temp_x(5?downto?1);

end?if;

if?q?=?'0' ?entonces r1?lt;=?color(2)?y?(parpadeo?o?NO?in_blink_switch); g1?lt;=?color(1)?y?(bl)

tinta?o?NO?en_blink_switch); b1?lt;=?color(0)?y?(¿parpadeo?o?NOT?en_blink_switch);

else r1?lt;=?'0'; g1?lt;=?'0'; b1?lt;=?'0';?

end?if;

end?if; final?si;? proceso;? ----------------------------------------------- --- -------------------- --Salida de color r?lt;=?r1?and?hs1?and?vs1; ?lt;=?g1?y?hs1?y?vs1;

b?lt;=?b1?y?hs1?y?vs1;vga_blank?lt;=?hs1?y?vs1; vga_clk?lt;= ?clk; vga_syn?lt;=?'0';

comportamiento final;