Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Proyecto de Graduación Diseño de Controlador Gráfico Basado en FPGA

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;