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 objetivo: ?EP1C6Q240C8
--Modo de circuito: Modo 5
--Descripción de la demostración: El reloj de entrada es clock0, 50Mhz
--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
--El flanco ascendente de la tecla La señal 2 cambia el personaje
--El interruptor de la tecla 3 controla el movimiento del personaje en la dirección y
--El interruptor de la tecla 4 controla el movimiento del personaje 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 25M 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;?--Blink switch
in_enlarge_switch?:? in?STD_LOGIC;?--Cambio 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; vga_blank?: ?out?STD_LOGIC );
end?vga640480;
arquitectura?comportamiento?de?vga640480?es señal?r1 ,g1,b1?:?std_logic;?señal?hs1, vs1?:?std_logic s;
signal?vector_x?:?std_logic_vector(9?downto?0);?--Coordenada X de la señal del punto de escaneo?vector_y?:?std_logic_vector(8?downto?0);?--Coordenada Y de la señal del punto de escaneo?target_x? :? std_logic_vector(9?downto?0);?--Coordenada X de la esquina superior izquierda de la señal del carácter?target_y?:?std_logic_vector(8?downto?0);?--Coordenada Y de la esquina superior izquierda de la señal de carácter?blink?:?std_logic;?- -Señal de control de parpadeo ¿Compartido?Variable?scancount,blinkcount?:?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 Shared?Variable?num?:?std_logic_vector(1?downto?0);?--Número mostrado actualmente
begin ------- ----------- --------------------------------------- ----------- --- proceso(clk_0)?--Dividir la señal de entrada de 50M por dos
comenzar
if(clk_0'event?and ?clk_0='1')?entonces?clk ?<=?not?clk;
fin?if?proceso ----------------; ----------- --------------------------------------- -------- proceso(clk,reset)?--El número de píxeles en el intervalo de línea (incluyendo el área en blanco) comienza
if?reset='0'?entonces vector_x?< =?(others=>'0');
elsif?clk'event?and?clk='1'?entonces si?vector_x=799?entonces
vector_x?< =?(otros=>'0'); else
vector_x?<=?vector_x?+?1; fin?si;
fin?si; ----------------- --------------------------------- ----------------- --- proceso(clk,reset)?--Comienza el número de líneas en el intervalo de campo (incluyendo el área en blanco)
if?reset='0'?entonces vector_y?<=?(others=>'0 ');
elsif?clk'event?and?clk='1'?entonces if?vector_x=799 ?entonces
si?vector_y=524?entonces vector_y?<= ?(others=>'0');
si no vector_y?<=?vector_y?+?1;
finalizar?si; finalizar?si;
finalizar?si; finalizar?proceso --------------------- --------------------- ----------------------- -- proceso
s(clk,reset)?--Comienza la generación de señal de sincronización horizontal (ancho de sincronización 96, borde anterior 16)
if?reset='0'?entonces hs1?<=?'1';
elsif?clk'event?and?clk='1'?entonces si?vector_x>=656?y?vector_x<752?entonces
hs1?<=?'0'; else
hs1?<=?'1'; final?si;
final?si?proceso -------------- ------------------------------------------------- - ------ proceso(clk,reset)?--Comienza la generación de señal de sincronización de campo (ancho de sincronización 2, borde anterior 10)
if?reset='0'?entonces vs1?<= ?' 1';
elsif?clk'event?and?clk='1'?entonces si?vector_y>=490?y?vector_y<492?entonces
vs1? <= ?'0'; else
vs1?<=?'1'; fin?si;
fin?si?proceso ------- -------------------------------------------------- -- ------------ proceso(clk,reset)?--comienzo de salida de señal de sincronización de línea
if?reset='0'?entonces hs?<=?' 0' ;
elsif?clk'event?and?clk='1'?entonces hs?<=?hs1;
end?if; -------------------------------------------------- -- ---------------- proceso(clk,reset)?--comienzo de salida de señal de sincronización de campo
if?reset='0'?entonces vs? <= ?'0';
elsif?clk'event?and?clk='1'?entonces vs?<=?vs1;
final?if; ; - ------------------------------------------------ -- -------------------- 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
if?reset='0'?entonces
target_x?<=?"0101000000";
target_y?<=?"011100000";
¿parpadeo?<=?'0';
scancount?:=?0;
parpadeo?:=?0;
elsif?clk ' event?and?clk='1'?then
scancount?:=?scancount?+?1;
if?scancount?>=?525*800?then< / p>
cuenta de parpadeos?:=?cuenta de parpadeos?+?1;
si?(b
¿linkcount?=?20)?luego parpadear?<=?NO?blink; ?in_v_x;
target_y?<=?target_y?+?in_v_y;
si?target_x>=640-32?entonces?target_x?<=?"0000000000"; p>
end?if;
if?target_y>=480-32?entonces? target_y?<=?"000000000";
end?if;
scancount?:=?0;
finalizar?if;
finalizar?if; finalizar?proceso ----------- -------------------------------------------------- -- -------- proceso(in_num_change,reset)?--Cambiar número comienza si?reset='0'?entonces
num?:=?"00";? in_num_change' event?and?in_num_change='1'?then
num?:=?num?+?"01";
end?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'?entonces
if?color="111"?entonces
color?: =?" 001";
else
color?:=?color?+?"001";
end?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?<=?'0'; g1?<=?'0 '; b1?<=?'0';? elsif(clk'event?and?clk='1')entonces
if?in_enlarge_switch='0'?entonces ?--Controlar la longitud del lado del carácter
size?:=?32;
else
size?:=?64;
end?if;
--Borde de carácter
if?((vector_x?=?target_x?-?1?or?vector
_x?=?target_x?+?size?+?3)?and?vector_y?>=?target_y?-?1?and?vector_y?<=?target_y?+?size?+?3)
o?((vector_y?=?objetivo_y?-?1?o?vector_y?=?objetivo_y?+?tamaño?+?3)?y?vector_x?>=?objetivo_x?-?1?y?vector_x? <=?objetivo_x?+?tamaño?+?3)?luego r1?<=?color(2)?Y?(¿parpadear?o?NO?in_blink_switch)?Y?in_frame_switch?g1?<=?color(1) ?Y?(¿parpadear?o?NO?in_blink_switch)?Y?in_frame_switch; b1?<=?color(0)?Y?(¿parpadear?o?NO?in_blink_switch)?Y?in_frame_switch;
else r1?<=?'0'; g1?<=?'0'; b1?<=?'0';
end?if;
--Mostrar caracteres
if?vector_x?>=?target_x?and?vector_x?=?target_y?and?vector_y?
temp_y?:=?vector_y-target_y;
temp_x?:=?vector_x-target_x;
if?in_enlarge_switch='0'?¿entonces dirección? <=?num?&?temp_y(4?downto?0)?&?temp_x(4?downto?0);
¿otra dirección?<=?num?&?temp_y(5?downto? 1)?&?temp_x(5?downto?1);
end?if;
if?q?=?'0'?entonces r1?<=?color( 2)?y?(¿parpadear?o?NO?en_blink_switch); g1?<=?color(1)?y?(¿parpadear?o?NO?en_blink_switch); b1?<=?color(0)?y?( parpadear?o?NOT?in_blink_switch);
else r1?<=?'0'; g1?<=?'0'; b1?<=?'0';?
finalizar?si;
finalizar?si;finalizar?si;?finalizar?proceso;? ---------------------------------------- -- Salida en color r?<=?r1 ?y?hs1?y?vs1; g?<=?g1?y?hs1?y?vs1;
b?<=?b1?y?hs1?vga_blank?<= ?hs1?y?vga_clk?<=?clk?<=?'0';
/p>
¿final?comportamiento;